Advertisement
ryonadv

Untitled

Sep 19th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.20 KB | None | 0 0
  1. //Hook By GAM
  2.  
  3. #pragma once
  4.  
  5. #include "main.h"
  6.  
  7. #define SAMP_INFO_OFFSET 0x21A0F8
  8. #define SAMP_CHAT_INFO_OFFSET 0x21A0E4
  9. #define SAMP_CHAT_INPUT_INFO_OFFSET 0x21A0E8
  10.  
  11. #define SAMP_FUNC_ADDTOCHATWND 0x064010
  12. #define SAMP_FUNC_ADDCLIENTCMD 0x065AD0
  13. #define SAMP_FUNC_RESTARTGAME 0x00A060
  14.  
  15. enum
  16. {
  17. DIALOG_STYLE_MSGBOX,
  18. DIALOG_STYLE_INPUT,
  19. DIALOG_STYLE_LIST,
  20. DIALOG_STYLE_PASSWORD,
  21. };
  22.  
  23. enum
  24. {
  25. SAMP_MAX_ACTORS = 1000,
  26. SAMP_MAX_PLAYERS = 1004,
  27. SAMP_MAX_VEHICLES = 2000,
  28. SAMP_MAX_PICKUPS = 4096,
  29. SAMP_MAX_OBJECTS = 1000,
  30. SAMP_MAX_GANGZONES = 1024,
  31. SAMP_MAX_3DTEXTS = 2048,
  32. SAMP_MAX_TEXTDRAWS = 2048,
  33. SAMP_MAX_PLAYERTEXTDRAWS = 256,
  34. SAMP_MAX_CLIENTCMDS = 144,
  35. SAMP_MAX_MENUS = 128,
  36. SAMP_MAX_PLAYER_NAME = 24,
  37. SAMP_ALLOWED_PLAYER_NAME_LENGTH = 20,
  38. };
  39.  
  40. enum
  41. {
  42. CHAT_TYPE_NONE = 0,
  43. CHAT_TYPE_CHAT = 2,
  44. CHAT_TYPE_INFO = 4,
  45. CHAT_TYPE_DEBUG = 8
  46. };
  47.  
  48. enum
  49. {
  50. CHAT_WINDOW_MODE_OFF = 0,
  51. CHAT_WINDOW_MODE_LIGHT = 1,
  52. CHAT_WINDOW_MODE_FULL = 2
  53. };
  54.  
  55. enum
  56. {
  57. GAMESTATE_WAIT_CONNECT = 9,
  58. GAMESTATE_CONNECTING = 13,
  59. GAMESTATE_AWAIT_JOIN = 15,
  60. GAMESTATE_CONNECTED = 14,
  61. GAMESTATE_RESTARTING = 18
  62. };
  63.  
  64. enum
  65. {
  66. PLAYER_STATE_NONE = 0,
  67. PLAYER_STATE_ONFOOT = 17,
  68. PLAYER_STATE_PASSENGER,
  69. PLAYER_STATE_DRIVER,
  70. PLAYER_STATE_WASTED = 32,
  71. PLAYER_STATE_SPAWNED
  72. };
  73.  
  74. enum
  75. {
  76. PLAYER_MARKERS_MODE_OFF,
  77. PLAYER_MARKERS_MODE_GLOBAL,
  78. PLAYER_MARKERS_MODE_STREAMED,
  79. };
  80.  
  81. enum
  82. {
  83. SPECIAL_ACTION_NONE,
  84. SPECIAL_ACTION_DUCK,
  85. SPECIAL_ACTION_USEJETPACK,
  86. SPECIAL_ACTION_ENTER_VEHICLE,
  87. SPECIAL_ACTION_EXIT_VEHICLE,
  88. SPECIAL_ACTION_DANCE1,
  89. SPECIAL_ACTION_DANCE2,
  90. SPECIAL_ACTION_DANCE3,
  91. SPECIAL_ACTION_DANCE4,
  92. SPECIAL_ACTION_HANDSUP,
  93. SPECIAL_ACTION_USECELLPHONE,
  94. SPECIAL_ACTION_SITTING,
  95. SPECIAL_ACTION_STOPUSECELLPHONE,
  96. SPECIAL_ACTION_DRINK_BEER = 20,
  97. SPECIAL_ACTION_SMOKE_CIGGY,
  98. SPECIAL_ACTION_DRINK_WINE,
  99. SPECIAL_ACTION_DRINK_SPRUNK,
  100. SPECIAL_ACTION_CUFFED,
  101. SPECIAL_ACTION_CARRY,
  102. };
  103.  
  104. #pragma pack(push, 1)
  105.  
  106. struct stSAMPPools
  107. {
  108. struct stActorPool *pActor;
  109. struct stObjectPool *pObject;
  110. struct stGangzonePool *pGangzone;
  111. struct stTextLabelPool *pText3D;
  112. struct stTextdrawPool *pTextdraw;
  113. void *pPlayerLabels;
  114. struct stPlayerPool *pPlayer;
  115. struct stVehiclePool *pVehicle;
  116. struct stPickupPool *pPickup;
  117. };
  118.  
  119. struct stSAMP
  120. {
  121. void *pUnk0[2];
  122. uint8_t byteSpace[24];
  123. char szIP[257];
  124. char szHostname[259];
  125. uint8_t byteUnk1;
  126. uint32_t ulPort;
  127. uint32_t ulMapIcons[100];
  128. int iLanMode;
  129. int iGameState;
  130. uint32_t ulConnectTick;
  131. struct stServerPresets *pSettings;
  132. void *pRakClientInterface;
  133. struct stSAMPPools *pPools;
  134. };
  135.  
  136. struct stServerPresets
  137. {
  138. uint8_t byteCJWalk;
  139. uint8_t byteUnk0[4];
  140. float fWorldBoundaries[4];
  141. uint8_t byteUnk1;
  142. float fGravity;
  143. uint8_t byteDisableInteriorEnterExits;
  144. uint32_t ulVehicleFriendlyFire;
  145. uint8_t byteUnk2[4];
  146. int iClassesAvailable;
  147. float fNameTagsDistance;
  148. uint8_t byteUnk3;
  149. uint8_t byteWorldTime_Hour;
  150. uint8_t byteWorldTime_Minute;
  151. uint8_t byteWeather;
  152. uint8_t byteNoNametagsBehindWalls;
  153. uint8_t bytePlayerMarkersMode;
  154. uint8_t byteUnk4[3];
  155. float fGlobalChatRadiusLimit;
  156. uint8_t byteShowNameTags;
  157. };
  158.  
  159. struct stTextDrawTransmit
  160. {
  161. union
  162. {
  163. BYTE byteFlags;
  164. struct
  165. {
  166. BYTE byteBox : 1;
  167. BYTE byteLeft : 1;
  168. BYTE byteRight : 1;
  169. BYTE byteCenter : 1;
  170. BYTE byteProportional : 1;
  171. BYTE bytePadding : 3;
  172. };
  173. };
  174. float fLetterWidth;
  175. float fLetterHeight;
  176. DWORD dwLetterColor;
  177. float fBoxWidth;
  178. float fBoxHeight;
  179. DWORD dwBoxColor;
  180. BYTE byteShadow;
  181. BYTE byteOutline;
  182. DWORD dwBackgroundColor;
  183. BYTE byteStyle;
  184. BYTE byteUNK;
  185. float fX;
  186. float fY;
  187. uint16_t sModel;
  188. float fRot[3];
  189. float fZoom;
  190. WORD sColor[2];
  191. };
  192.  
  193. struct stTextdraw
  194. {
  195. char szText[800 + 1];
  196. char szString[1600 + 2];
  197. float fLetterWidth;
  198. float fLetterHeight;
  199. DWORD dwLetterColor;
  200. uint8_t byte_unk; // always = 01 (?)
  201. BYTE byteCenter;
  202. BYTE byteBox;
  203. float fBoxSizeX;
  204. float fBoxSizeY;
  205. DWORD dwBoxColor;
  206. BYTE byteProportional;
  207. DWORD dwShadowColor;
  208. BYTE byteShadowSize;
  209. BYTE byteOutline;
  210. BYTE byteLeft;
  211. BYTE byteRight;
  212. int iStyle; // font style/texture/model
  213. float fX;
  214. float fY;
  215. byte unk[8];
  216. DWORD dword99B; // -1 by default
  217. DWORD dword99F; // -1 by default
  218. DWORD index; // -1 if bad
  219. BYTE byte9A7; // = 1; 0 by default
  220. uint16_t sModel;
  221. float fRot[3];
  222. float fZoom;
  223. WORD sColor[2];
  224. BYTE f9BE;
  225. BYTE byte9BF;
  226. BYTE byte9C0;
  227. DWORD dword9C1;
  228. DWORD dword9C5;
  229. DWORD dword9C9;
  230. DWORD dword9CD;
  231. BYTE byte9D1;
  232. DWORD dword9D2;
  233. };
  234.  
  235. struct stTextdrawPool
  236. {
  237. int iIsListed[SAMP_MAX_TEXTDRAWS];
  238. int iPlayerTextDraw[SAMP_MAX_PLAYERTEXTDRAWS];
  239. struct stTextdraw *textdraw[SAMP_MAX_TEXTDRAWS];
  240. struct stTextdraw *playerTextdraw[SAMP_MAX_PLAYERTEXTDRAWS];
  241. };
  242.  
  243. struct stPickup
  244. {
  245. int iModelID;
  246. int iType;
  247. float fPosition[3];
  248. };
  249.  
  250. struct stPickupPool
  251. {
  252. int iPickupsCount;
  253. uint32_t ul_GTA_PickupID[SAMP_MAX_PICKUPS];
  254. int iPickupID[SAMP_MAX_PICKUPS];
  255. int iTimePickup[SAMP_MAX_PICKUPS];
  256. uint8_t unk[SAMP_MAX_PICKUPS * 3];
  257. struct stPickup pickup[SAMP_MAX_PICKUPS];
  258. };
  259.  
  260. struct stPlayerPool
  261. {
  262. uint32_t ulUnk0;
  263. uint16_t sLocalPlayerID;
  264. void *pVTBL_txtHandler;
  265. union
  266. {
  267. char szLocalPlayerName[16];
  268. char *pszLocalPlayerName;
  269. };
  270. int iLocalPlayerNameLen;
  271. int iLocalPlayerNameAllocated;
  272. struct stLocalPlayer *pLocalPlayer;
  273. int iLocalPlayerPing;
  274. int iLocalPlayerScore;
  275. struct stRemotePlayer *pRemotePlayer[SAMP_MAX_PLAYERS];
  276. int iIsListed[SAMP_MAX_PLAYERS];
  277. uint32_t ulUnk1[SAMP_MAX_PLAYERS];
  278. };
  279.  
  280. struct stSAMPKeys
  281. {
  282. uint8_t keys_primaryFire : 1;
  283. uint8_t keys_horn__crouch : 1;
  284. uint8_t keys_secondaryFire__shoot : 1;
  285. uint8_t keys_accel__zoomOut : 1;
  286. uint8_t keys_enterExitCar : 1;
  287. uint8_t keys_decel__jump : 1; // on foot: jump or zoom in
  288. uint8_t keys_circleRight : 1;
  289. uint8_t keys_aim : 1; // hydra auto aim or on foot aim
  290. uint8_t keys_circleLeft : 1;
  291. uint8_t keys_landingGear__lookback : 1;
  292. uint8_t keys_unknown__walkSlow : 1;
  293. uint8_t keys_specialCtrlUp : 1;
  294. uint8_t keys_specialCtrlDown : 1;
  295. uint8_t keys_specialCtrlLeft : 1;
  296. uint8_t keys_specialCtrlRight : 1;
  297. uint8_t keys__unused : 1;
  298. };
  299.  
  300. struct stOnFootData
  301. {
  302. uint16_t sLeftRightKeys;
  303. uint16_t sUpDownKeys;
  304. union
  305. {
  306. uint16_t sKeys;
  307. struct stSAMPKeys stSampKeys;
  308. };
  309. float fPosition[3];
  310. float fQuaternion[4];
  311. uint8_t byteHealth;
  312. uint8_t byteArmor;
  313. uint8_t byteCurrentWeapon;
  314. uint8_t byteSpecialAction;
  315. float fMoveSpeed[3];
  316. float fSurfingOffsets[3];
  317. uint16_t sSurfingVehicleID;
  318. short sCurrentAnimationID;
  319. short sAnimFlags;
  320. };
  321.  
  322. struct stInCarData
  323. {
  324. uint16_t sVehicleID;
  325. uint16_t sLeftRightKeys;
  326. uint16_t sUpDownKeys;
  327. union
  328. {
  329. uint16_t sKeys;
  330. struct stSAMPKeys stSampKeys;
  331. };
  332. float fQuaternion[4];
  333. float fPosition[3];
  334. float fMoveSpeed[3];
  335. float fVehicleHealth;
  336. uint8_t bytePlayerHealth;
  337. uint8_t byteArmor;
  338. uint8_t byteCurrentWeapon;
  339. uint8_t byteSiren;
  340. uint8_t byteLandingGearState;
  341. uint16_t sTrailerID;
  342. union
  343. {
  344. uint16_t HydraThrustAngle[2]; //nearly same value
  345. float fTrainSpeed;
  346. };
  347. };
  348.  
  349. struct stAimData
  350. {
  351. BYTE byteCamMode;
  352. float vecAimf1[3];
  353. float vecAimPos[3];
  354. float fAimZ;
  355. BYTE byteCamExtZoom : 6; // 0-63 normalized
  356. BYTE byteWeaponState : 2; // see eWeaponState
  357. BYTE bUnk;
  358. };
  359.  
  360. struct stTrailerData
  361. {
  362. uint16_t sTrailerID;
  363. float fPosition[3];
  364. //float fRoll[3];
  365. //float fDirection[3];
  366. float fQuaternion[4]; // not tested
  367. float fSpeed[3];
  368. float fUnk[2];
  369. uint32_t pad;
  370. };
  371.  
  372. struct stPassengerData
  373. {
  374. uint16_t sVehicleID;
  375. uint8_t byteSeatID;
  376. uint8_t byteCurrentWeapon;
  377. uint8_t byteHealth;
  378. uint8_t byteArmor;
  379. uint16_t sLeftRightKeys;
  380. uint16_t sUpDownKeys;
  381. union
  382. {
  383. uint16_t sKeys;
  384. struct stSAMPKeys stSampKeys;
  385. };
  386. float fPosition[3];
  387. };
  388.  
  389. struct stDamageData
  390. {
  391. uint16_t sVehicleID_lastDamageProcessed;
  392. int iBumperDamage;
  393. int iDoorDamage;
  394. uint8_t byteLightDamage;
  395. uint8_t byteWheelDamage;
  396. };
  397.  
  398. struct stSurfData
  399. {
  400. int iIsSurfing;
  401. float fSurfPosition[3];
  402. int iUnk0;
  403. uint16_t sSurfingVehicleID;
  404. uint32_t ulSurfTick;
  405. struct stSAMPVehicle *pSurfingVehicle;
  406. int iUnk1;
  407. int iSurfMode; //0 = not surfing, 1 = moving (unstable surf), 2 = fixed on vehicle
  408. };
  409.  
  410. struct stUnoccupiedData
  411. {
  412. int16_t sVehicleID;
  413. uint8_t byteSeatID;
  414. float fRoll[3];
  415. float fDirection[3];
  416. float fPosition[3];
  417. float fMoveSpeed[3];
  418. float fTurnSpeed[3];
  419. float fHealth;
  420. };
  421.  
  422. struct stBulletData
  423. {
  424. uint8_t byteType;
  425. uint16_t sTargetID;
  426. float fOrigin[3];
  427. float fTarget[3];
  428. float fCenter[3];
  429. uint8_t byteWeaponID;
  430. };
  431.  
  432. struct stSpectatorData
  433. {
  434. uint16_t sLeftRightKeys;
  435. uint16_t sUpDownKeys;
  436. union
  437. {
  438. uint16_t sKeys;
  439. struct stSAMPKeys stSampKeys;
  440. };
  441. float fPosition[3];
  442. };
  443.  
  444. struct stStatsData
  445. {
  446. int iMoney;
  447. int iAmmo; // ?
  448. };
  449.  
  450. struct stHeadSync
  451. {
  452. float fHeadSync[3];
  453. int iHeadSyncUpdateTick;
  454. int iHeadSyncLookTick;
  455. };
  456.  
  457. struct stLocalPlayer
  458. {
  459. struct stSAMPPed *pSAMP_Actor;
  460. uint16_t sCurrentAnimID;
  461. uint16_t sAnimFlags;
  462. uint32_t ulUnk0;
  463. int iIsActive;
  464. int iIsWasted;
  465. uint16_t sCurrentVehicleID;
  466. uint16_t sLastVehicleID;
  467. struct stOnFootData onFootData;
  468. struct stPassengerData passengerData;
  469. struct stTrailerData trailerData;
  470. struct stInCarData inCarData;
  471. struct stAimData aimData;
  472. uint8_t byteTeamID;
  473. int iSpawnSkin;
  474. uint8_t byteUnk1;
  475. float fSpawnPos[3];
  476. float fSpawnRot;
  477. int iSpawnWeapon[3];
  478. int iSpawnAmmo[3];
  479. int iIsActorAlive;
  480. int iSpawnClassLoaded;
  481. uint32_t ulSpawnSelectionTick;
  482. uint32_t ulSpawnSelectionStart;
  483. int iIsSpectating;
  484. uint8_t byteTeamID2;
  485. uint16_t usUnk2;
  486. uint32_t ulSendTick;
  487. uint32_t ulSpectateTick;
  488. uint32_t ulAimTick;
  489. uint32_t ulStatsUpdateTick;
  490. uint32_t ulWeapUpdateTick;
  491. uint16_t sAimingAtPid;
  492. uint16_t usUnk3;
  493. uint8_t byteCurrentWeapon;
  494. uint8_t byteWeaponInventory[13];
  495. int iWeaponAmmo[13];
  496. int iPassengerDriveBy;
  497. uint8_t byteCurrentInterior;
  498. int iIsInRCVehicle;
  499. uint16_t sTargetObjectID;
  500. uint16_t sTargetVehicleID;
  501. uint16_t sTargetPlayerID;
  502. struct stHeadSync headSyncData;
  503. uint32_t ulHeadSyncTick;
  504. BYTE byteSpace3[260];
  505. struct stSurfData surfData;
  506. int iClassSelectionOnDeath;
  507. int iSpawnClassID;
  508. int iRequestToSpawn;
  509. int iIsInSpawnScreen;
  510. uint32_t ulUnk4;
  511. uint8_t byteSpectateMode; // 3 = vehicle, 4 = player, side = 14, fixed = 15
  512. uint8_t byteSpectateType; // 0 = none, 1 = player, 2 = vehicle
  513. int iSpectateID;
  514. int iInitiatedSpectating;
  515. struct stDamageData vehicleDamageData;
  516. };
  517.  
  518. struct stRemotePlayerData
  519. {
  520. struct stSAMPPed *pSAMP_Actor;
  521. struct stSAMPVehicle *pSAMP_Vehicle;
  522. uint8_t byteTeamID;
  523. uint8_t bytePlayerState;
  524. uint8_t byteSeatID;
  525. uint32_t ulUnk3;
  526. int iPassengerDriveBy;
  527. void *pUnk0;
  528. uint8_t byteUnk1[60];
  529. float fSomething[3];
  530. float fVehicleRoll[4];
  531. uint32_t ulUnk2[3];
  532. float fOnFootPos[3];
  533. float fOnFootMoveSpeed[3];
  534. float fVehiclePosition[3];
  535. float fVehicleMoveSpeed[3];
  536. uint16_t sPlayerID;
  537. uint16_t sVehicleID;
  538. uint32_t ulUnk5;
  539. uint8_t byteUnk6[2];
  540. short sShowNameTag;
  541. int iHasJetPack;
  542. uint8_t byteSpecialAction;
  543. struct stAimData aimData;
  544. struct stInCarData inCarData;
  545. struct stOnFootData onFootData;
  546. struct stTrailerData trailerData;
  547. struct stPassengerData passengerData;
  548. uint32_t ulUnk4[3];
  549. float fActorArmor;
  550. float fActorHealth;
  551. uint32_t ulUnk10;
  552. uint8_t byteUnk9;
  553. uint32_t dwTick;
  554. uint32_t dwLastStreamedInTick; // is 0 when currently streamed in
  555. uint32_t ulUnk7;
  556. int iAFKState;
  557. struct stHeadSync headSyncData;
  558. int iGlobalMarkerLoaded;
  559. int iGlobalMarkerLocation[3];
  560. uint32_t ulGlobalMarker_GTAID;
  561. };
  562.  
  563. struct stRemotePlayer
  564. {
  565. stRemotePlayerData *pPlayerData;
  566. int iIsNPC;
  567. void *pVTBL_txtHandler;
  568. union
  569. {
  570. char szPlayerName[16];
  571. char *pszPlayerName;
  572. };
  573. int iNameLen;
  574. int iNameAllocated;
  575. int iScore;
  576. int iPing;
  577. };
  578.  
  579. template <typename T>
  580. struct stSAMPEntity
  581. {
  582. void *pVTBL;
  583. uint8_t byteUnk0[60]; // game CEntity object maybe. always empty.
  584. T *pGTAEntity;
  585. uint32_t ulGTAEntityHandle;
  586. };
  587.  
  588. struct stSAMPPed
  589. {
  590. int usingCellPhone;
  591. uint8_t byteUnk0[600];
  592. struct actor_info *pGTA_Ped;
  593. uint8_t byteUnk1[22];
  594. uint8_t byteKeysId;
  595. uint16_t ulGTA_UrinateParticle_ID;
  596. int DrinkingOrSmoking;
  597. int object_in_hand;
  598. int drunkLevel;
  599. uint8_t byteUnk2[5];
  600. int isDancing;
  601. int danceStyle;
  602. int danceMove;
  603. uint8_t byteUnk3[20];
  604. int isUrinating;
  605. };
  606.  
  607. struct stVehiclePool
  608. {
  609. int iVehicleCount;
  610. void *pUnk0;
  611. uint8_t byteSpace1[0x112C];
  612. struct stSAMPVehicle *pSAMP_Vehicle[SAMP_MAX_VEHICLES];
  613. int iIsListed[SAMP_MAX_VEHICLES];
  614. struct vehicle_info *pGTA_Vehicle[SAMP_MAX_VEHICLES];
  615. uint8_t byteSpace2[SAMP_MAX_VEHICLES * 6];
  616. uint32_t ulShit[SAMP_MAX_VEHICLES];
  617. int iIsListed2[SAMP_MAX_VEHICLES];
  618. uint32_t byteSpace3[SAMP_MAX_VEHICLES * 2];
  619. float fSpawnPos[SAMP_MAX_VEHICLES][3];
  620. int iInitiated;
  621. };
  622.  
  623. struct stSAMPVehicle
  624. {
  625. uint32_t bUnk0;
  626. struct vehicle_info *pGTA_Vehicle;
  627. uint8_t byteUnk1[8];
  628. int bIsMotorOn;
  629. int iIsLightsOn;
  630. int iIsLocked;
  631. uint8_t byteIsObjective;
  632. int iObjectiveBlipCreated;
  633. uint8_t byteUnk2[20];
  634. uint8_t byteColor[2];
  635. int iColorSync;
  636. int iColor_something;
  637. };
  638.  
  639. struct stObject
  640. {
  641. uint8_t byteUnk0[2];
  642. uint32_t ulUnk1;
  643. int iModel;
  644. uint8_t byteUnk2;
  645. float fDrawDistance;
  646. float fUnk;
  647. float fPos[3];
  648. // ...
  649. };
  650.  
  651. struct stObjectPool
  652. {
  653. int iObjectCount;
  654. int iIsListed[SAMP_MAX_OBJECTS];
  655. struct stObject *object[SAMP_MAX_OBJECTS];
  656. };
  657.  
  658. struct stGangzone
  659. {
  660. float fPosition[4];
  661. DWORD dwColor;
  662. DWORD dwAltColor;
  663. };
  664.  
  665. struct stGangzonePool
  666. {
  667. struct stGangzone *pGangzone[SAMP_MAX_GANGZONES];
  668. int iIsListed[SAMP_MAX_GANGZONES];
  669. };
  670.  
  671. struct stTextLabel
  672. {
  673. char *pText;
  674. DWORD color;
  675. float fPosition[3];
  676. float fMaxViewDistance;
  677. uint8_t byteShowBehindWalls;
  678. uint16_t sAttachedToPlayerID;
  679. uint16_t sAttachedToVehicleID;
  680. };
  681.  
  682. struct stTextLabelPool
  683. {
  684. struct stTextLabel textLabel[SAMP_MAX_3DTEXTS];
  685. int iIsListed[SAMP_MAX_3DTEXTS];
  686. };
  687.  
  688. struct stChatEntry
  689. {
  690. uint32_t SystemTime;
  691. char szPrefix[28];
  692. char szText[144];
  693. uint8_t unknown[64];
  694. int iType; // 2 - text + prefix, 4 - text (server msg), 8 - text (debug)
  695. D3DCOLOR clTextColor;
  696. D3DCOLOR clPrefixColor; // or textOnly colour
  697. };
  698.  
  699. struct stFontRenderer
  700. {
  701. ID3DXFont *m_pChatFont;
  702. ID3DXFont *m_pLittleFont;
  703. ID3DXFont *m_pChatShadowFont;
  704. ID3DXFont *m_pLittleShadowFont;
  705. ID3DXFont *m_pCarNumberFont;
  706. ID3DXSprite *m_pTempSprite;
  707. int field_18;
  708. char *m_pszTextBuffer;
  709. };
  710.  
  711. struct stChatInfo
  712. {
  713. int pagesize;
  714. char *pLastMsgText;
  715. int iChatWindowMode;
  716. uint8_t bTimestamps;
  717. uint32_t ulUnk0;
  718. char logFilePathChatLog[MAX_PATH + 1];
  719. void *pChatbox_unknown[3]; // probably classes that handle fonts/sprites
  720. D3DCOLOR clTextColor;
  721. D3DCOLOR clInfoColor;
  722. D3DCOLOR clDebugColor;
  723. DWORD dwChatboxOffset;
  724. struct stChatEntry chatEntry[100];
  725. stFontRenderer *m_pFontRenderer;
  726. ID3DXSprite *m_pChatTextSprite;
  727. ID3DXSprite *m_pSprite;
  728. IDirect3DDevice9 *m_pD3DDevice;
  729. uint32_t ulUnk1[2];
  730. IDirect3DTexture9 *m_pTexture;
  731. uint32_t ulUnk2[7];
  732. int m_iRedraw;
  733. int m_nPrevScrollBarPosition;
  734. int m_iDistanceAfterTimestamp;
  735. uint32_t ulUnk3;
  736. };
  737.  
  738. struct stInputBox
  739. {
  740. void *pUnknown;
  741. uint8_t bIsChatboxOpen;
  742. uint8_t bIsMouseInChatbox;
  743. uint8_t bMouseClick_related;
  744. uint8_t unk;
  745. DWORD dwPosChatInput[2];
  746. uint8_t unk2[263];
  747. int iCursorPosition;
  748. uint8_t unk3;
  749. int iMarkedText_startPos; // Highlighted text between this and iCursorPosition
  750. uint8_t unk4[20];
  751. int iMouseLeftButton;
  752. };
  753.  
  754. typedef void(__cdecl *CMDPROC) (PCHAR);
  755. struct stInputInfo
  756. {
  757. void *pD3DDevice;
  758. void *pDXUTDialog;
  759. stInputBox *pDXUTEditBox;
  760. CMDPROC pCMDs[SAMP_MAX_CLIENTCMDS];
  761. char szCMDNames[SAMP_MAX_CLIENTCMDS][33];
  762. int iCMDCount;
  763. int iInputEnabled;
  764. char szInputBuffer[129];
  765. char szRecallBufffer[10][129];
  766. char szCurrentBuffer[129];
  767. int iCurrentRecall;
  768. int iTotalRecalls;
  769. CMDPROC pszDefaultCMD;
  770. };
  771.  
  772. struct stKillEntry
  773. {
  774. char szKiller[25];
  775. char szVictim[25];
  776. D3DCOLOR clKillerColor;
  777. D3DCOLOR clVictimColor;
  778. uint8_t byteType;
  779. };
  780.  
  781. struct stKillInfo
  782. {
  783. int iEnabled;
  784. struct stKillEntry killEntry[5];
  785. int iXOffset[2];
  786. int iYSpacing;
  787. // not tested
  788. ID3DXFont *pD3DFont;
  789. ID3DXFont *pWeaponFont;
  790. ID3DXSprite *pSprite;
  791. IDirect3DDevice9 *pD3DDevice;
  792. // ...
  793. };
  794.  
  795. struct stChatPlayer
  796. {
  797. int iCreated;
  798. char probablyTheText[256];
  799. DWORD dwTickCreated;
  800. DWORD dwLiveLength;
  801. DWORD dwColor;
  802. float fDrawDistance;
  803. DWORD dwUnknown;
  804. };
  805.  
  806. struct stMiscInfo
  807. {
  808. void *pUnk0[3];
  809. uint8_t byteSpace1[73];
  810. int iCursorMode;
  811. int iSomething[5];
  812. // ...
  813. };
  814.  
  815. struct stScoreboardInfo
  816. {
  817. int iIsEnabled;
  818. int iPlayersCount;
  819. float fTextOffset[2];
  820. float fScalar;
  821. float fSize[2];
  822. float fUnk0[5];
  823. IDirect3DDevice9 *pDirectDevice;
  824. class _CDXUTDialog *pDialog;
  825. class _CDXUTListBox *pList;
  826. int iOffset; // ?
  827. int iIsSorted; // ?
  828. };
  829.  
  830. struct stActorPool
  831. {
  832. int iLastActorID;
  833. stSAMPEntity<void> *pActor[SAMP_MAX_ACTORS]; // ?
  834. int iIsListed[SAMP_MAX_ACTORS];
  835. struct actor_info *pGTAPed[SAMP_MAX_ACTORS];
  836. uint32_t ulUnk0[SAMP_MAX_ACTORS];
  837. uint32_t ulUnk1[SAMP_MAX_ACTORS];
  838. };
  839.  
  840. struct stChatBubbleInfo
  841. {
  842. struct stChatPlayer chatBubble[SAMP_MAX_PLAYERS];
  843. };
  844.  
  845. struct stStreamedOutPlayerInfo
  846. {
  847. int iPlayerID[SAMP_MAX_PLAYERS];
  848. float fPlayerPos[SAMP_MAX_PLAYERS][3];
  849. };
  850. #pragma pack(pop)
  851.  
  852. class SAMPFramework
  853. {
  854.  
  855. public:
  856. SAMPFramework(HMODULE sampDll)
  857. {
  858. isInited = false;
  859. if (sampDll)
  860. dwSAMPAddr = (DWORD) sampDll;
  861. };
  862.  
  863. ~SAMPFramework()
  864. {
  865. delete g_SAMP;
  866. delete g_Chat;
  867. delete g_Input;
  868. };
  869.  
  870. void addMessageToChat(D3DCOLOR cColor, char *szMsg, ...);
  871. void addClientCommand(char *szCmd, CMDPROC pFunc);
  872.  
  873. void sendPacket(BitStream *bsParams);
  874. void sendRPC(int rpcId, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp);
  875.  
  876. void restartGame();
  877.  
  878. class RakClientInterface *getRakClientInterface(void) { return g_RakClient; };
  879.  
  880. struct stSAMP *getInfo(void) { return g_SAMP; };
  881.  
  882. struct stPlayerPool *getPlayers(void) { return g_Players; };
  883. struct stVehiclePool *getVehicles(void) { return g_Vehicles; };
  884.  
  885. struct stChatInfo *getChat(void) { return g_Chat; };
  886. struct stInputInfo *getInput(void) { return g_Input; };
  887.  
  888. bool isInited;
  889.  
  890. void sendPic(WORD wPickupID)
  891. {
  892. BitStream bsPickup;
  893. bsPickup.Write(wPickupID);
  894. sendRPC(RPC_PickedUpPickup, &bsPickup, HIGH_PRIORITY, RELIABLE, 0, FALSE);
  895. }
  896.  
  897. void dialogResp(WORD wDialogID, BYTE bButtonID, WORD wListBoxItem, char *szInputResp)
  898. {
  899. BYTE respLen = (BYTE)strlen(szInputResp);
  900. BitStream bsSend;
  901. bsSend.Write(wDialogID);
  902. bsSend.Write(bButtonID);
  903. bsSend.Write(wListBoxItem);
  904. bsSend.Write(respLen);
  905. bsSend.Write(szInputResp, respLen);
  906. sendRPC(RPC_DialogResponse, &bsSend, SYSTEM_PRIORITY, UNRELIABLE, 0, FALSE);
  907. };
  908.  
  909. void requestClass(int classId)
  910. {
  911. BitStream bsPickup;
  912. bsPickup.Write(classId);
  913. sendRPC(RPC_RequestClass, &bsPickup, HIGH_PRIORITY, RELIABLE, 0, FALSE);
  914. };
  915.  
  916. void sendChat(char *szMessage)
  917. {
  918. BitStream bsSend;
  919. DWORD byteTextLen = strlen(szMessage);
  920. bsSend.Write(byteTextLen);
  921. bsSend.Write(szMessage, byteTextLen);
  922. sendRPC(RPC_Chat, &bsSend, HIGH_PRIORITY, RELIABLE, 0, FALSE);
  923. };
  924.  
  925. void sendCommand(char *szCommand)
  926. {
  927. BitStream bsParams;
  928. int iStrlen = strlen(szCommand);
  929. bsParams.Write(iStrlen);
  930. bsParams.Write(szCommand, iStrlen);
  931. sendRPC(RPC_ServerCommand, &bsParams, HIGH_PRIORITY, RELIABLE, 0, FALSE);
  932. };
  933.  
  934. bool tryInit(void)
  935. {
  936. g_SAMP = *(stSAMP **) (dwSAMPAddr + SAMP_INFO_OFFSET);
  937.  
  938. if (g_SAMP == nullptr)
  939. return false;
  940.  
  941. g_Chat = *(stChatInfo **) (dwSAMPAddr + SAMP_CHAT_INFO_OFFSET);
  942.  
  943. if (g_Chat == nullptr)
  944. return false;
  945.  
  946. g_Input = *(stInputInfo **) (dwSAMPAddr + SAMP_CHAT_INPUT_INFO_OFFSET);
  947.  
  948. if (g_Input == nullptr)
  949. return false;
  950.  
  951. if (g_SAMP->pRakClientInterface == nullptr)
  952. return false;
  953.  
  954. g_RakClient = (RakClientInterface *) g_SAMP->pRakClientInterface;
  955. g_SAMP->pRakClientInterface = new HookedRakClientInterface();
  956.  
  957. g_Vehicles = g_SAMP->pPools->pVehicle;
  958. g_Players = g_SAMP->pPools->pPlayer;
  959.  
  960. isInited = true;
  961.  
  962. return true;
  963. };
  964.  
  965. private:
  966.  
  967. DWORD dwSAMPAddr;
  968. struct stSAMP *g_SAMP;
  969. struct stPlayerPool *g_Players;
  970. struct stVehiclePool *g_Vehicles;
  971. struct stChatInfo *g_Chat;
  972. struct stInputInfo *g_Input;
  973. class RakClientInterface *g_RakClient;
  974. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement