Stripped ProjectAlchemy Source Code

12/10/2010 05:04 pro4never#151
Other versions of conquer do not use the same setup. You may need to use different encryption. Not looked into him
12/10/2010 09:57 mafdy#152
thanks For your Help
12/10/2010 14:09 regata#153
Hi Leandro, i have an proxy that work on conquest br version, i coded it based on an old proxy that i found on forums. Pro4never helped me with some problems i found.

The first difference i found on Conquest server is that the AuthServer use the same Criptography of the GameServer. You have to change the proxy to use Blowfish Crypto for the AuthServer too. I'm not using Alchemy code because when i start, alchemy is not open. But the logic is the same.

Another difference is the game version. I dont know what version conquest use, but its not the same of english servers. I logged all packets to implement on my proxy. Some packets, like 10017 have some strange behaivor. Sometimes the fatalstrike package send the value 0x80000000000, and sometimes 0x82000000000. You have to pay attention when you do the conversion.

I suggest you implement an code to help you log the packets, it will save a lot of time. Like an command to start the Log when you want. For example when i want to discover how the item package works. You go to some place, start the package logger, drop an item, stop package logger. Thats it.

And plz, dont use your main char to do that. The game send my char one time to the botjail, when i'm coding my proxy.

My bot can use fatalstrike for 30+ minutes without d/c and loot meteors, dragonballs, elite, super etc. But it only work very well on 1 hit mobs. Ah, and i found an Dragonball testing my proxy, on slowapes.

I dont share the code, because i'm the only who undestands it, lol.

And sry my poor english.

Quote:
Originally Posted by biancardi View Post
Hi, my name is Leandro, im fairly new at C#. . . and im having some trouble. .

im tryin to set the proxy to Conquest Online (BR version of CO) . .
i did all the steps.. like changing the ips, the DB thing n stuff. .
but. . when i try to connect. . the CO client closes without a reason
and i get this message:
[Only registered and activated users can see links. Click Here To Register...]

the auth ip of my server is 187.17.71.196:9958 . .
i dont know if im having this problem cuz Conquest's version is different of CO's version. . so the encrypts or packets things r wrong . . .

maybe u guys give me some help. . cuz i already tried everything i could. . and keep getting this error

Thanks in advance![Only registered and activated users can see links. Click Here To Register...]
12/10/2010 15:43 OELABOELA#154
I made this command
Code:
case "/useitem":
                        try
                        {
                            byte[] Pack = new byte[88];
                            Packets.WriteUInt16(80, 0, Pack);
                            Packets.WriteUInt16(1009, 2, Pack);
                            Packets.WriteUInt32(ushort.Parse(Cmd[1]), 4, Pack);
                            Packets.WriteUInt32(ushort.Parse(Cmd[2]), 8, Pack);
                            Packets.WriteUInt32(ushort.Parse(Cmd[3]),12, Pack);
                            Packets.WriteUInt32(Packets.GetStamp(C), 16, Pack);
                            Packets.WriteString("TQClient", 80, Pack);
                            C.ToServerQueue.Enqueue(Pack);
                        }
                        catch { }

                        break;
But when i type /useitem 1000000(stancher ID) 0(first inv slot) 3/4(Equip,remove item) it doesnt work (it doesnt return unknown command)
So this would mean it would have worked. But it doesn't. Any sugggestions?


<Edit> Got a video about the stability here. Its at 150ms attack speed and 400ms jump speed. Seems to be pretty stable :)

I need to add wider search route, because now it just crashes when i jump to an coord 7+



Note: Please dont mind the music.
12/10/2010 16:26 pro4never#155
You use items based on uid, not item id.

If not it doesn't know which item you are using (you can have more than 1 stancher but not more than 1 item of the same uid).

Not a bad job on your botting functionality. Looks like you just need to add in some random jump values.

Keep in mind that during fatal strike you don't need to jump to monster, the attack itself moves you (if you jump/atk/jump/atk etc you will dc) so just send attack and set your coords to the mobs location generally. Also keep in mind fatal will work across the whole screen which makes it easier (no need to code distance checks assuming you keep your locals updated based on range
12/10/2010 17:12 OELABOELA#156
Quote:
Originally Posted by pro4never View Post
You use items based on uid, not item id.

If not it doesn't know which item you are using (you can have more than 1 stancher but not more than 1 item of the same uid).

Not a bad job on your botting functionality. Looks like you just need to add in some random jump values.

Keep in mind that during fatal strike you don't need to jump to monster, the attack itself moves you (if you jump/atk/jump/atk etc you will dc) so just send attack and set your coords to the mobs location generally. Also keep in mind fatal will work across the whole screen which makes it easier (no need to code distance checks assuming you keep your locals updated based on range
Yea, i was checking everytime. And i was jumping everytime. But does the server/client send you a certain packet when the FS is done? Because when i use C.infatalstrike it doesn't set it back to false (Because, when it arrives, the packet, it will be set to true, but never gets back to false)

So i could maybe set it back to false, if a certain time/packet passes.
12/10/2010 17:19 pro4never#157
Quote:
Originally Posted by OELABOELA View Post
Yea, i was checking everytime. And i was jumping everytime. But does the server/client send you a certain packet when the FS is done? Because when i use C.infatalstrike it doesn't set it back to false (Because, when it arrives, the packet, it will be set to true, but never gets back to false)

So i could maybe set it back to false, if a certain time/packet passes.
That's what I've always done.

Fatal strike lasts 60 seconds so I did a 58 second timeout.



IE:

if(C.InFatal && DateTime.Now > C.FatalActivated.AddSeconds(58))
{
C.InFatal = false;
>>ToClient>>"Fatal Ending"
}

That's how I always handled it. Then if you activate a new fatal strike before it ends at 58 seconds you already updated when it was activated so this should never be called ^^.

For fatal strike what I tended to do was a proxy x/y (where proxy thinks it currently is) and then a seperate value for last server x/y (where server has last told me I am)

I update server x/y every time I receive a server confirmation of jump, attack, etcetc in response to one of my actions.

Proxy x/y I use for all my actions but I also run a check vs how far away that is from my last server x/y is and if it becomes to large I stop the hunting for a short time so it can catch up with responses and if that fails I do a jump to my last known location (or somewhere near it). That way server is forced to send me a confirmation of where I am and I don't run into issues of attacking too far away and dcing.

Basically just add in systems that double check EVERYTHING or you will run into issues over time. If you blindly attack things all over the place the proxy will easily lose track of where it ACTUALLY is in the game and you'll have loads of problems.
12/10/2010 17:20 macavladu#158
Btw guys , there is a lil bug that doesnt stop hunt , even if it says it is false.
12/10/2010 17:21 OELABOELA#159
Quote:
Originally Posted by pro4never View Post
That's what I've always done.

Fatal strike lasts 60 seconds so I did a 58 second timeout.



IE:

if(C.InFatal && DateTime.Now > C.FatalActivated.AddSeconds(58))
{
C.InFatal = false;
>>ToClient>>"Fatal Ending"
}

That's how I always handled it. Then if you activate a new fatal strike before it ends at 58 seconds you already updated when it was activated so this should never be called ^^.

For fatal strike what I tended to do was a proxy x/y (where proxy thinks it currently is) and then a seperate value for last server x/y (where server has last told me I am)

I update server x/y every time I receive a server confirmation of jump, attack, etcetc in response to one of my actions.

Proxy x/y I use for all my actions but I also run a check vs how far away that is from my last server x/y is and if it becomes to large I stop the hunting for a short time so it can catch up with responses and if that fails I do a jump to my last known location (or somewhere near it). That way server is forced to send me a confirmation of where I am and I don't run into issues of attacking too far away and dcing.

Basically just add in systems that double check EVERYTHING or you will run into issues over time. If you blindly attack things all over the place the proxy will easily lose track of where it ACTUALLY is in the game and you'll have loads of problems.
Thank you, im going to code much this weekend, and i will post a video at the end. You can clearly see some changes then i think :)
12/10/2010 17:29 pro4never#160
Quote:
Originally Posted by macavladu View Post
Btw guys , there is a lil bug that doesnt stop hunt , even if it says it is false.
Seeing as there is no botting in the current version I assume you're talking about the one they are working on together? They just need to do a

if(!C.Hunting)
return true;

at the start of their hunt code and then in the hunt cmd just use what I already had lol.
12/10/2010 17:45 OELABOELA#161
Quote:
Originally Posted by pro4never View Post
Seeing as there is no botting in the current version I assume you're talking about the one they are working on together? They just need to do a

if(!C.Hunting)
return true;

at the start of their hunt code and then in the hunt cmd just use what I already had lol.
They copied my code, i did it on purpose, so i could saw who was using my source, but nvm :)

<Edit>
Pro4Never, i tried the attacking without jumping, it is really 3x as fast as on the vid now. The only think i gotta make is the jumping back, and bigger searching radius. And could you explain me how you made those random jumps? Because when i make it jump x - 3, when no monster is around, it will stop hunting? (Yes, i make it update)
12/10/2010 18:28 pro4never#162
There's a number of ways to do it..

#1: Use a path and find a valid coord that is the closest to it possible.

-Hint: I already added a 'weight' system to pull a list of coords with their distance from a target...

#2: chose a random valid location on your screen to jump to each time there is no monster in range and last jump time is passed.

#3: Combine the two so that if you have a recorded path it uses that (and cycles between points in the path) or if there is no recorded path it uses a random point on screen. That's how I coded it myself.


Random jump could be anything from chosing a random location and then checking if it's a valid dmap location or it could be something you write some sort of calculation into (IE: chose a random direction to jump in and then test the longest distance you can jump in that direction... if that fails lower the jump distance by 1... if it goes below a certain distance chose a different direction, etc.

Keep in mind there are 8 directions in total.

N, NE, E, SE, S, SW, W, NW

<edit>

Damn... now I kinda wanna try my hand at doing a radar type system to spit out local objects to a graph to display access level and objects on each coord lol!

Need to stop wanting to take on new mini projects during exam time
12/10/2010 18:34 OELABOELA#163
Quote:
Originally Posted by pro4never View Post
There's a number of ways to do it..

#1: Use a path and find a valid coord that is the closest to it possible.

-Hint: I already added a 'weight' system to pull a list of coords with their distance from a target...

#2: chose a random valid location on your screen to jump to each time there is no monster in range and last jump time is passed.

#3: Combine the two so that if you have a recorded path it uses that (and cycles between points in the path) or if there is no recorded path it uses a random point on screen. That's how I coded it myself.


Random jump could be anything from chosing a random location and then checking if it's a valid dmap location or it could be something you write some sort of calculation into (IE: chose a random direction to jump in and then test the longest distance you can jump in that direction... if that fails lower the jump distance by 1... if it goes below a certain distance chose a different direction, etc.

Keep in mind there are 8 directions in total.

N, NE, E, SE, S, SW, W, NW

<edit>

Damn... now I kinda wanna try my hand at doing a radar type system to spit out local objects to a graph to display access level and objects on each coord lol!

Need to stop wanting to take on new mini projects during exam time
mwhaha, i get such things to, i redid 2 exams because i was doing some javascripting that day i got em :)


<Edit> Rofl, main just got botjailed for sending a wrong pot packed! mwahha! bye lvl 90 ninja :) I was trying to send a packet to DBUpgrade 'painkillers' How stupid! Let's try remove/equip item on a new acc :)
12/10/2010 18:53 pro4never#164
Quote:
Originally Posted by OELABOELA View Post
mwhaha, i get such things to, i redid 2 exams because i was doing some javascripting that day i got em :)


<Edit> Rofl, main just got botjailed for sending a wrong pot packed! mwahha! bye lvl 90 ninja :) I was trying to send a packet to DBUpgrade 'painkillers' How stupid! Let's try remove/equip item on a new acc :)
Always test packets on a blank character. Invalid packets are the fastest way to get botjailed xD
12/10/2010 19:32 OELABOELA#165
Quote:
Originally Posted by pro4never View Post
Always test packets on a blank character. Invalid packets are the fastest way to get botjailed xD
Yeah, i was INSTANTLY at the botjail xd