中国星际RPG联盟

标题: 6号按钮插件和50号51号赋值插件源代码,备份 [打印本页]

作者: castelu    时间: 2013-8-22 23:50
标题: 6号按钮插件和50号51号赋值插件源代码,备份


  1. #define PINT int *
  2. #define FASTCALL __fastcall
  3. #pragma pack(1)

  4. typedef struct
  5. {
  6.     DWORD Unused0;
  7.     DWORD stringID;
  8.     DWORD code;
  9.     DWORD Unused2;
  10.     DWORD Address;
  11.     DWORD Value;
  12.     USHORT Operator;
  13. } *ActionParams;



  14. const FARPROC (WINAPI**sc_GetProcAddress) ( HMODULE hModule, LPCSTR lpProcName ) = (const FARPROC(WINAPI**)(HMODULE,LPCSTR))0x4ED160;
  15. //PBYTE (FASTCALL*GetResString)(USHORT index) = (PBYTE(FASTCALL*)(USHORT))0x448880;
  16. const LPCSTR CurrentPlayerName = (LPCSTR)0x65A808;
  17. const char(*PlayerName)[36] = (const char(*)[36])0x65A853;
  18. const LPCSTR (FASTCALL*GetResString)(USHORT index) = (const LPCSTR(FASTCALL*)(USHORT))0x448880;


  19. BOOL FASTCALL Comment(ActionParams params)//6号按钮插件
  20. {
  21.     PBYTE str_add = GetResString(params->stringID);

  22.     if(*str_add=='1')
  23.     {
  24.         *str_add='0';
  25.         str_add++;
  26.         PBYTE str_back = str_add;
  27.         while(str_add[0]&&str_add[1]&&str_add[2]&&str_add[3])
  28.         {
  29.             str_back[0] = ( ( ( str_add[0] - 0x30) << 2 ) & 0xFC ) + ( ( ( str_add[1] - 0x30 ) >> 4 ) & 0x03 );
  30.             str_back[1] = ( ( ( str_add[1] - 0x30) << 4 ) & 0xF0 ) + ( ( ( str_add[2] - 0x30 ) >> 2 ) & 0x0F );
  31.             str_back[2] = ( ( ( str_add[2] - 0x30) << 6 ) & 0xC0 ) + ( (str_add[3] - 0x30 ) & 0x3F);
  32.             str_add += 4;
  33.             str_back += 3;
  34.         }
  35.         *(int *)(str_back-1)=0;
  36.     }
  37.     *(int *)params->Address = params->Operator;
  38.     *(int *)(params->Address + 4) = (int)GetResString(params->stringID) + 1;
  39.     return true;
  40. }


  41. BOOL FASTCALL Comment(ActionParams params)//51号设置数值插件
  42. {
  43.      
  44.     int n=params->Operator;
  45.     if(n>0&&n<9)
  46.     {
  47.         char *add=(char *)params->code;
  48.         char *val=(char *)&(params->Address);
  49.         while(n--)
  50.             *(add++)=*(val++);
  51.     }

  52.     else if(n>=9)
  53.     {
  54.         PBYTE str_add = GetResString(params->stringID);
  55.         PBYTE add = str_add + 1;
  56.         if(*str_add=='1')
  57.         {
  58.             *str_add='0';
  59.             str_add++;
  60.             PBYTE str_back = str_add;
  61.             while(str_add[0]&&str_add[1]&&str_add[2]&&str_add[3])
  62.             {
  63.                 str_back[0] = ( ( ( str_add[0] - 0x30) << 2 ) & 0xFC ) + ( ( ( str_add[1] - 0x30 ) >> 4 ) & 0x03 );
  64.                 str_back[1] = ( ( ( str_add[1] - 0x30) << 4 ) & 0xF0 ) + ( ( ( str_add[2] - 0x30 ) >> 2 ) & 0x0F );
  65.                 str_back[2] = ( ( ( str_add[2] - 0x30) << 6 ) & 0xC0 ) + ( (str_add[3] - 0x30 ) & 0x3F);
  66.                 str_add += 4;
  67.                 str_back += 3;
  68.             }
  69.         }
  70.         str_add = add;
  71.         add = (PBYTE)params->code;
  72.         while(n--)
  73.             *(add++)=*(str_add++);
  74.     }
  75.     return true;
  76. }



  77. BOOL FASTCALL Comment(ActionParams params)//50号设置数值插件
  78. {
  79.     char *add=(char *)params->code;
  80.     char *val=(char *)&(params->Address);
  81.     while(n--)
  82.         *(add++)=*(val++);
  83. }

复制代码





欢迎光临 中国星际RPG联盟 (http://www.scrpg.net/) Powered by Discuz! X3.1