Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- CODED BY ManU (ManUthps)
- TESTED BY YEAHMK & ManU
- SCM-HOOK BY Spookie & op9080
- Little trainer, to spawn peds in GTA: San Andreas.
- There are some random crashes and crashes at spawning main-chars
- like Sweet, Claude, etc. But its working :)
- Its my first released trainer, and iam not a 1337-l33thaXx0r,
- so pls dont flame like assholes beceause this code is not perfect
- or something like else!
- TrainerVideo http://www.youtube.com/watch?v=2Rmbho9nkoM
- If u like my video and my work, pls sub me :) thanks!
- */
- #include <stdio.h>
- #include <windows.h>
- #include "scm.h"
- #pragma warning(disable:4312)
- const FARPROC ProcessOneCommand = (FARPROC)0x469F00;
- DWORD SCRIPT_BASE = 0xA49960;
- GAME_SCRIPT_THREAD gst;
- BYTE ScriptBuf[MAX_SCRIPT_SIZE];
- DWORD ScriptVars[MAX_SCRIPT_VARS];
- int __declspec(naked) ExecuteScriptBuf()
- {
- __asm
- {
- mov ecx, OFFSET ScriptBuf
- mov gst.dwScriptIP, ecx
- mov ecx, OFFSET gst
- call ProcessOneCommand
- xor eax, eax
- mov al, gst.bJumpFlag
- ret
- }
- }
- int ScriptCommand(const SCRIPT_COMMAND* ScriptCommand, ...)
- {
- va_list ap;
- const char* p = ScriptCommand->Params;
- va_start(ap, ScriptCommand);
- memcpy(&ScriptBuf, &ScriptCommand->OpCode, 2);
- int buf_pos = 2;
- int var_pos = 0;
- while(*p)
- {
- switch(*p)
- {
- case 'i':
- {
- long i = va_arg(ap, long);
- if ((i >= -128) && (i <= 127))
- {
- char ch = (char)i;
- ScriptBuf[buf_pos] = 0x04;
- buf_pos++;
- ScriptBuf[buf_pos] = ch;
- buf_pos++;
- }
- else if ((i >= -32768) && (i <= 32767))
- {
- short sh = (short)i;
- ScriptBuf[buf_pos] = 0x05;
- buf_pos++;
- memcpy(&ScriptBuf[buf_pos], &sh, 2);
- buf_pos += 2;
- }
- else
- {
- ScriptBuf[buf_pos] = 0x01;
- buf_pos++;;
- memcpy(&ScriptBuf[buf_pos], &i, 4);
- buf_pos += 4;
- }
- break;
- }
- case 'f':
- {
- float f = (float)va_arg(ap, double);
- ScriptBuf[buf_pos] = 0x06;
- buf_pos++;
- memcpy(&ScriptBuf[buf_pos], &f, 4);
- buf_pos += 4;
- break;
- }
- case 'v':
- {
- DWORD* v = va_arg(ap, DWORD*);
- ScriptBuf[buf_pos] = 0x02;
- buf_pos++;
- WORD var_offs = var_pos * 4;
- DWORD* ScriptVar = (DWORD*)(SCRIPT_BASE + var_offs);
- ScriptVars[var_pos] = *ScriptVar;
- *ScriptVar = *v;
- memcpy(&ScriptBuf[buf_pos], &var_offs, 2);
- buf_pos += 2;
- var_pos++;
- break;
- }
- /*case 's':
- {
- char* s1 = va_arg(ap, char*);
- char s2[8];
- ZeroMemory(s2, 8);
- strncpy(s2, s1, 8);
- memcpy(&ScriptBuf[buf_pos], s2, 8);
- buf_pos += 8;
- break;
- }*/
- case 's': // If string... Updated 13th Jan 06.. (kyeman) SA string support
- {
- char* sz = va_arg(ap, char*);
- unsigned char aLen = (int)strlen(sz);
- ScriptBuf[buf_pos] = 0x0E;
- buf_pos++;
- ScriptBuf[buf_pos] = aLen;
- buf_pos++;
- memcpy(&ScriptBuf[buf_pos],sz,aLen);
- buf_pos += aLen;
- break;
- }
- }
- ++p;
- }
- va_end(ap);
- BYTE WaitBuf[4] = {0x01, 0x00, 0x04, 0x00};
- memcpy((void*)&ScriptBuf[buf_pos], (void*)&WaitBuf[0], 4);
- if (var_pos)
- {
- int result = ExecuteScriptBuf();
- p = ScriptCommand->Params;
- va_start(ap, ScriptCommand);
- var_pos = 0;
- while(*p)
- {
- switch(*p)
- {
- case 'i':
- {
- va_arg(ap, long);
- break;
- }
- case 'f':
- {
- va_arg(ap, double);
- break;
- }
- case 'v':
- {
- DWORD* v = va_arg(ap, DWORD*);
- DWORD* ScriptVar = (DWORD*)(SCRIPT_BASE + (var_pos*4));
- *v = *ScriptVar;
- *ScriptVar = ScriptVars[var_pos];
- var_pos++;
- break;
- }
- case 's':
- {
- va_arg(ap, char*);
- break;
- }
- }
- ++p;
- }
- va_end(ap);
- return result;
- } else {
- return ExecuteScriptBuf();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement