Moin, hab mal n bisschen in GTA rumgestöbert und siehe da ich habe einen schnelleren weg gefunden CMD's vom Client zum Server zu senden. (Normale Text funktionieren bis jetzt noch nicht)
Ihr fragt euch sicherlich jetzt Das ist schneller als ein keybinder? niemals, ich erkläre euch kurz die wege in einem simplen pseudo code:
Keybinder Weg:
1) Drückt T und öffnet den Chat
2) Gibt einen Befehl so schnell ein das man ihn nicht sieht (bsp: /buyweapon AK47)
3) der Befehl wird in einem register gespeichert
4) samp.dll sendet den string an der Server über einer Funktion die in der samp.dll aufgerufen wird zb: "SendCommand(char* cmd)"
Mein Weg ist viel schneller:
* In Unsere DLL rufen wir die Funktion so auf: "SendChat("/buyweapon AK47")";
1) Funktion Kopiert den string in einem register.
2) callt die SendCommand funktion und sendet den Befehl aus dem register sofort zum server.
Klingt einfach oder?
PS: Das hier ist nichts für anfänger, fragt mich nicht wie benutze ich diesen code, ich werde keine hilfestellung dafür geben. C++ Basic solltet ihr können.
// Ihr solltet die SAMP base Adresse bekommen, das geht so:
DWORD adr_SAMP = GetModuleHandle(0, "samp.dll");
#define FUNC_SENDCMD 0x3CAC0
void SendChat(char *msg)
{
if(msg == NULL)
return;
if(msg[0] == '/')
{
int func = adr_SAMP + FUNC_SENDCMD;
__asm push msg
__asm call func
}
else
{
//int func = adr_SAMP + FUNC_SAY;
//__asm mov ebx, dword ptr[LokalerSpieler?]
//__asm push msg
//__asm call func
//__asm pop ebx
}
}
// Wenn wir jetzt SendChat("/enter") aufrufen sendet der Client den Befehl sofort zum Server, ohne das er etwas im Chat eingibt.
SendChat("/enter"); // So rufen wir die Funktion auf.
Edit: Rechtschreibung verbessert.
Edit 2: Offsets eingefügt, habs vergessen.