- Joined
- Apr 16, 2014
- Messages
- 107
- Reaction score
- 0
How to Disable Mount Bug.
Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!
Join Today!hmm. what surya did is they put cooldown when using the mount. and i try it, i put cooldown in my param but no success effect failed ������
hmm. what surya did is they put cooldown when using the mount. and i try it, i put cooldown in my param but no success effect failed
What surya did was monitor the request to mount and to equip server side, they extracted the information and stored each occurrence with a timestamp. That way every time the request was made they could see if it was 5 sec before or after the last request of the same nature. If it was less, the user would be notified of a cool down and the request was discarded. They also kept track of how many requests and disconnected the user if they exceeded 10.
Info about the mount request can be extracted from 0x48BE87, information about the mount equip / unequip can be extracted from 0x43DBA0.
LOL you have confirmed what I always knew: Pablo and Cynthia don't know anything about coding.
First of all the bug occurs because both request are done at same time, not with sec diff.
and the way to solve it don't need to register anything, just to fix the error in the server code, that for sure they didn't figure out, where the error is.
Here is a video of the mount bug fixed on my Test Server:
I made the video with the char name LaNeNa most hate xD and yes xSwisSx is me GM Black
Dupe on mail and dupe on drops are fixed too
Oh and btw, the equip always occurs at server side,so don't know what you mean with "and to equip server side".
LOL you have confirmed what I always knew: Pablo and Cynthia don't know anything about coding.
First of all the bug occurs because both request are done at same time, not with sec diff. I suppouse they think is secs diff because they just based on the logs registered by the server.
and the way to solve it don't need to register anything, just to fix the error in the server code, that for sure they didn't figure out, where the error is.
By fixing the error, you don't need to disconnect the user (because there is no bug xD). Of course you can keep a track of who tried to do the bug, and send a msg, as I do, on the history chat, so the user knows you catch him trying to do the bug.
Here is a video of the mount bug fixed on my Test Server:
I made the video with the char LaNeNa most hate xD.
Dupe on mail and dupe on drops are fixed too
Oh and btw, the equip always occurs at server side,so don't know what you mean with "and to equip server side". client req to equip -> server equips and send response back -> client process response.
I am not sure what the point was of anything you said, a problem existed and a solution was created that resolved the problem. What does either of those things have to do with attacking someone personally?
can you share the offset ma'am? if its okay, thank you.
Attacking because I said they don't know anything about coding? or because I said their names? there is no secret on who manage that Surya server (including their son).
//snip
LOL so now you will teach me How server works?
//snip
void CloseUser(int conn)
{
DWORD baseAddress = (DWORD)GetModuleHandle ("zonesrv.exe");
DWORD Address = baseAddress + 0x66E60;
DWORD temp;
__asm
{
MOV temp, ESP
MOV EAX, conn
PUSH EAX
CALL Address
MOV ESP, temp
}
}
No issue exists with changing the compared ID of the current player in the middle of the function.As I said.. you are codecaving in ASM
//snip
SendClientMessage(CurrentPlayer, "Connection Closed.");
CloseUser(CurrentPlayer);
__asm
{
POP RetAddr
MOV BYTE PTR DS:[EBX + 0x0C], 0
MOVZX EAX, BYTE PTR DS:[EBX + 0x0D]
MOV CurrentPlayer, EDI
PUSHAD
PUSHFD
}
//Call your function to process the current player here, if you want the mount to success, make sure CurrentPlayer is returned with their real player id, otherwise just set it to 1001.
__asm
{
POPFD
POPAD
MOV EDI, CurrentPlayer
PUSH RetAddr
ret
}
Thats what you want to believe, and if is ok for you, then continue doing that. I just want to let others (those that dont know about coding) know that doing that is a BIG mistake on the code. Those who knows about programming well know that to avoid server process the request, you just need to do a return. Of course you cannot do that return because the way you are codecaving.No issue exists with changing the compared ID of the current player in the middle of the function.
What is the point of how you kick users? Are you trying to say yours achieves some different effect just because your function is longer?
As to why I have not posted mine, I posted everything that is needed to do it in this thread. The address you can hook, the variable to extract, and the logic needed to make it work.
Thats what you want to believe, and if is ok for you, then continue doing that. I just want to let others (those that dont know about coding) know that doing that is a BIG mistake on the code. Those who knows about programming well know that to avoid server process the request, you just need to do a return. Of course you cannot do that return because the way you are codecaving.
Probably you are confuse with my kickout function and for that you think is longer than yours. If you read it again you will see that on the declaration, the flag of kickout is set by default to false, what means that i do not kickout anyone unless i decide to kick. so what it does by default is just to send a message to the client.
Now if we talk about any of the delegates i use in my code, none of then are longer, all them are shorter than yours, because what i do is a call to the original function, I don't have the need as you do, to rewrite the function.
No you didn't, but I think no one cares you didn't. As you said previously, every one have its own way of coding, all i have to add to that, is that those ways depends a lot on how good you are in understanding the code you are fixing.
/snip
Info about the mount request can be extracted from 0x48BE87, information about the mount equip / unequip can be extracted from 0x43DBA0.
/snip
Address 0x48BE87 gets called every single time someone tries to use a mount, before it is processed. When it is called the EDI register contains the player id number. You can create an array of structures for each possible player and use the player id to reference the player actions.
struct PlayerMounts{ int ID; int MsgCount; clock_t LastUse;};
When the action is used, check the structure to see if the player id has a LastUse time set, if it does not, set it to the current time and process normally. If the LastUse is under your desired time limit, call SendClientMessage and give them some sort of notice, and set the EDI register to 0x3E9, this will prevent the call from processing. If the LastUse is over your desired time limit, set the LastUse to the current time and process the request as normal.