Advertisement
AshkanN

Untitled

Feb 4th, 2017
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Include address.ahk
  2. #Include memory.ahk
  3.  
  4. // #############################  Standartadressen
  5.  
  6. CPed(matrix){
  7.     If(!SAMP())
  8.         return false
  9.  
  10.     If(!matrix)
  11.     return readDWORD(hGTA, ADDR_CPED_PTR)
  12.     else return Matrix(readDWORD(hGTA, ADDR_CPED_PTR))
  13. }
  14.  
  15. LocalPlayer(){
  16.     If(!SAMP())
  17.         return false
  18.     return readDWORD(hGTA, SAMP_pPool("Player") + OFFSET_CPED_LOCALPLAYER)
  19. }
  20.  
  21.  
  22. Vehicle(matrix){
  23.     If(!SAMP())
  24.         return false
  25.  
  26.     If(!matrix)
  27.         return readDWORD(hGTA, ADDR_VEHICLE_PTR)
  28.     else return Matrix(readDWORD(hGTA, ADDR_VEHICLE_PTR))
  29. }
  30.  
  31.  
  32. Matrix(pointer){
  33.     If(!SAMP())
  34.         return false
  35.  
  36.     return readDWORD(hGTA, pointer + OFFSET_MATRIX)
  37. }
  38.  
  39. InfoOffset(settings){
  40.     If(!SAMP())
  41.         return false
  42.  
  43.     If(!settings)
  44.     return readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  45.     else return readDWORD(hGTA, readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET) + SAMP_SETTINGS_OFFSET)
  46. }
  47.  
  48. SAMP_pPool(pool){
  49.     If(!SAMP())
  50.         return false
  51.     If(pool == "Player")
  52.         pool := SAMP_PPOOL_PLAYER_OFFSET
  53.     else if(pool == "Vehicle")
  54.         pool := SAMP_PPOOL_VEHICLE_OFFSET
  55.     else if(pool == "Pickup")
  56.         pool := SAMP_PPOOL_PICKUP_OFFSET
  57.     else if(pool == "Object")
  58.         pool := SAMP_PPOOL_OBJECT_OFFSET
  59.     return readDWORD(hGTA, readDWORD(hGTA, InfoOffset(0) + SAMP_PPOOLS_OFFSET) + pool)
  60. }
  61.  
  62.  
  63.  
  64. // #############################  Positionen
  65.  
  66.  
  67. GetPlayerPosition(){
  68.     If(!SAMP())
  69.         return false
  70.  
  71.     return [readFloat(hGTA, mainMatrix + OFFSET_POSX), readFloat(hGTA, mainMatrix + OFFSET_POSY), readFloat(hGTA, mainMatrix + OFFSET_POSZ)]
  72. }
  73.  
  74. SetPlayerPosition(fX,fY,fZ){
  75.     If(!SAMP())
  76.         return false
  77.  
  78.     writeMemory(hGTA, mainMatrix + OFFSET_POSX, fX, 4, "float")
  79.     writeMemory(hGTA, mainMatrix + OFFSET_POSY, fY, 4, "float")
  80.     writeMemory(hGTA, mainMatrix + OFFSET_POSZ, fZ, 4, "float")
  81. }
  82.  
  83.  
  84. GetPositionByPed(ped){
  85.     If(!SAMP())
  86.         return false
  87.  
  88.     pMatrix := Matrix(ped)
  89.     return [readFloat(hGTA, pMatrix + OFFSET_POSX), readFloat(hGTA, pMatrix + OFFSET_POSY), readFloat(hGTA, pMatrix+ OFFSET_POSZ)]
  90. }
  91.  
  92.  
  93.  
  94.  
  95. // #############################  Player
  96.  
  97.  
  98. GetPlayerSkinID(){
  99.     If(!SAMP())
  100.         return false
  101.  
  102.     return readMemory(hGTA, mainCPED + OFFSET_CPED_SKINID, 2, "UShort")
  103. }
  104.  
  105. GetPlayerHP(){
  106.     If(!SAMP())
  107.         return false
  108.  
  109.     return Round(readFloat(hGTA, mainCPED + OFFSET_CPED_HP))
  110. }
  111.  
  112. SetPlayerHP(value){
  113.     If(!SAMP())
  114.         return false
  115.  
  116.     writeMemory(hGTA, mainCPED + OFFSET_CPED_HP, value, 4, "float")
  117. }
  118.  
  119. GetPlayerArmor(){
  120.     If(!SAMP())
  121.         return false
  122.  
  123.     return Round(readFloat(hGTA, mainCPED + OFFSET_CPED_ARMOR))
  124. }
  125.  
  126. SetPlayerArmor(value){
  127.     If(!SAMP())
  128.         return false
  129.  
  130.     writeMemory(hGTA, mainCPED + OFFSET_CPED_ARMOR, value, 4, "float")
  131. }
  132.  
  133. GetPlayerRotation(){
  134.     If(!SAMP())
  135.         return false
  136.  
  137.     return [readFloat(hGTA, mainMatrix + OFFSET_ROTATION_X), readFloat(hGTA, mainMatrix + OFFSET_ROTATION_Y)]
  138. }
  139.  
  140. SetPlayerRotation(fx=0, fy=0){
  141.     If(!SAMP())
  142.         return false
  143.  
  144.     writeMemory(hGTA, mainMatrix + OFFSET_ROTATION_X, x, 4, "float")
  145.     writeMemory(hGTA, mainMatrix + OFFSET_ROTATION_Y, y, 4, "float")
  146. }
  147.  
  148. GetPlayerTargetRotation(){
  149.     If(!SAMP())
  150.         return false
  151.  
  152.     return readFloat(hGTA, mainCPED + OFFSET_CPED_ZANGLE)
  153. }
  154.  
  155. SetPlayerTargetRotation(angle){
  156.     If(!SAMP())
  157.         return false
  158.  
  159.     writeMemory(hGTA, mainCPED + OFFSET_CPED_ZANGLE, angle*-1, 4, "float")
  160. }
  161.  
  162. GetLastVehiclePointer(){
  163.     If(!SAMP())
  164.         return false
  165.  
  166.     return readDWORD(hGTA, mainCPED + OFFSET_VEH_LASTVEH)
  167. }
  168.  
  169.  
  170. // #############################  VEHICLE
  171.  
  172. IsPlayerInAnyVehicle(){
  173.     If(!SAMP())
  174.         return false
  175.  
  176.     return (Vehicle(0) > 0)
  177. }
  178.  
  179. IsVehicleAPlane(dwVeh){
  180.     If(!SAMP())
  181.         return false
  182.  
  183.     v := GetVehicleModelIDByPointer(dwVeh)
  184.     If(v == 460 || v == 476 || v == 511 || v == 512 || v == 513 || v == 519 || v == 520 || v == 553 || v == 577 || v == 592 || v == 593 || v == 548 || v == 425 || v == 417 || v == 487 || v == 488 || v == 497 || v == 563 || v == 447 || v == 469)
  185.     return true
  186.     else return false
  187. }
  188.  
  189.  
  190. GetVehicleModelIDByPointer(dwVeh){
  191.     If(!SAMP())
  192.         return false
  193.  
  194.     return readMemory(hGTA, dwVeh + OFFSET_VEH_MODELID, 2, "short")
  195. }
  196.  
  197.  
  198. GetVehicleTypeByPointer(vehicle){
  199.     If(!SAMP())
  200.         return false
  201.  
  202.     return readMemory(hGTA, vehicle + OFFSET_VEH_TYPE)
  203. }
  204.  
  205. GetPlayersInVehicle(){
  206.     If(!SAMP())
  207.         return false
  208.    
  209.     dw := Vehicle(0)
  210.     return [getIdByPed(readDWORD(hGTA, dw + 0x460)),getIdByPed(readDWORD(hGTA, dw + 0x464)),getIdByPed(readDWORD(hGTA, dw + 0x468)),getIdByPed(readDWORD(hGTA, dw + 0x46C))]
  211. }
  212.  
  213. FlipVehicle() {
  214.     If(!SAMP())
  215.         return false
  216.  
  217.     dwVeh := Vehicle(1)
  218.  
  219.     rx := readFloat(hGTA, dwVeh + OFFSET_ROTATION_X)
  220.     ry := readFloat(hGTA, dwVeh + OFFSET_ROTATION_Y)
  221.  
  222.     WriteMemory(hGTA, dwVeh + OFFSET_ROTATION_X, rx * -1, 4, "float")
  223.     WriteMemory(hGTA, dwVeh + OFFSET_ROTATION_Y, ry * -1, 4, "float")
  224. }
  225.  
  226.  
  227. IsMotorOn(){
  228.     If(!SAMP())
  229.         return false
  230.  
  231.     iOUT := readMemory(hGTA, Vehicle(0) + OFFSET_VEH_ENGINESTATE, 1, "Char")
  232.     return (iOUT==24 OR iOUT==56 OR iOUT==88 OR iOUT==120)
  233. }
  234.  
  235. IsLightOn(){
  236.     If(!SAMP())
  237.         return false
  238.  
  239.     return readDWORD(hGTA, Vehicle(0) + OFFSET_VEH_LIGHTSTATE)
  240. }
  241.  
  242. IsCarLocked(){
  243.     If(!SAMP())
  244.         return false
  245.  
  246.     return (readDWORD(hGTA, Vehicle(0) + ADDR_VEHICLE_DOORSTATE) == 2)
  247. }
  248.  
  249. GetCarColorsIDs(){
  250.     If(!SAMP())
  251.         return false
  252.  
  253.     color1 := readMemory(hGTA, Vehicle(0) + OFFSET_VEH_COLOR1, 1, "Char")
  254.     color2 := readMemory(hGTA, Vehicle(0) + OFFSET_VEH_COLOR2, 1, "Char")
  255.     return [color1, color2]
  256. }
  257.  
  258. GetCarSpeed() {
  259.     If(!SAMP())
  260.         return false
  261.  
  262.     dwVeh := Vehicle(0)
  263.  
  264.     fSpeedX := readFloat(hGTA, dwVeh + OFFSET_VEH_SPEED_X)
  265.     fSpeedY := readFloat(hGTA, dwVeh + OFFSET_VEH_SPEED_Y)
  266.     fSpeedZ := readFloat(hGTA, dwVeh + OFFSET_VEH_SPEED_Y)
  267.  
  268.     return Round((SQRT((fSpeedX * fSpeedX) + (fSpeedY * fSpeedY) + (fSpeedZ * fSpeedZ)) *100) *1.61)
  269.  
  270. }
  271.  
  272.  
  273. // #############################  SAMP
  274.  
  275.  
  276. GetUsername() {
  277.     If(!SAMP())
  278.         return false
  279.  
  280.     return readString(hGTA, dwSAMP + ADDR_SAMP_USERNAME, 25)
  281. }
  282.  
  283. GetPlayerId(){
  284.     If(!SAMP())
  285.         return false
  286.  
  287.     return getPlayerIdByName(GetUsername())
  288. }
  289.  
  290. getPlayerColor(playerid){
  291.     if(!SAMP())
  292.         return false
  293.  
  294.     idColor := readDWORD(hGTA, dwSAMP + SAMP_COLOR_OFFSET + 4 * playerid)
  295.     hex := IntToHex(idColor)
  296.     rgbhex := SubStr(IntToHex(idColor), 3, 6)
  297.         return rgbhex
  298. }
  299.  
  300. IsChatOpen() {
  301.     if(!SAMP())
  302.         return -1
  303.  
  304.     return (readDWORD(hGTA, readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR) + ADDR_SAMP_INCHAT_PTR_OFF) > 0)
  305. }
  306.  
  307. IsMouseActive(){
  308.     If(!SAMP())
  309.         return false
  310.  
  311.     MISC := readDWORD(hGTA, dwSAMP + 0x21A10C)
  312.     iCursorMode := readMemory(hGTA, MISC + 85)
  313.     return iCursorMode
  314. }
  315.  
  316. SendChat(wText) {
  317.      wText := "" wText
  318.    
  319.     if(!SAMP())
  320.         return false
  321.    
  322.     dwFunc:=0
  323.     if(SubStr(wText, 1, 1) == "/") {
  324.         dwFunc := dwSAMP + FUNC_SAMP_SENDCMD
  325.     } else {
  326.         dwFunc := dwSAMP + FUNC_SAMP_SENDSAY
  327.     }
  328.    
  329.     callWithParams(hGTA, dwFunc, [["s", wText]], false)
  330.    
  331.     ErrorLevel := ERROR_OK
  332.     return true
  333. }
  334.  
  335. showGameText(wText, dwTime, dwSize) {
  336.     wText := "" wText
  337.     dwTime += 0
  338.     dwTime := Floor(dwTime)
  339.     dwSize += 0
  340.     dwSize := Floor(dwSize)
  341.  
  342.     if(!SAmp())
  343.         return false
  344.    
  345.     dwFunc := dwSAMP + FUNC_SAMP_SHOWGAMETEXT
  346.    
  347.     callWithParams(hGTA, dwFunc, [["s", wText], ["i", dwTime], ["i", dwSize]], false)
  348.    
  349.     ErrorLevel := ERROR_OK
  350.     return true
  351. }
  352.  
  353. AddChatMessage(text,color=0xffffffff){
  354.     if(!SAMP())
  355.         return false
  356.  
  357.     dwFunc := dwSAMP + 0x64010
  358.  
  359.     dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0E4)
  360.     callWithParams(hGTA, dwFunc, [["i", dwAddress],["i", 8],["s", text],["i", 0],["i", color],["i", 0]], false, true)
  361.  
  362.     ErrorLevel := ERROR_OK
  363.     return true
  364. }
  365.  
  366. AntiCrash(){
  367.     If(!SAMP())
  368.         return false
  369.  
  370.     cReport := ADDR_SAMP_CRASHREPORT
  371.     writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  372.     cReport += 0x4
  373.     writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  374.     cReport += 0x9
  375.     writeMemory(hGTA, dwSAMP + cReport, 0x90909090, 4)
  376.     cReport += 0x4
  377.     writeMemory(hGTA, dwSAMP + cReport, 0x90, 1)
  378. }
  379.  
  380. SetSpecialAction(actionID){
  381.     IF(!SAMP())
  382.         return false
  383.     callWithParams(hGTA, dwSAMP + 0x30C0, [["i", LocalPlayer()],["i", actionID]], false, true)
  384. }
  385.  
  386. SendInterior(interiorID){
  387.     If(!SAMP())
  388.         return false
  389.  
  390.     callWithParams(hGTA, dwSAMP + 0x5740, [["i", LocalPlayer()],["i", interiorID]], false, true)
  391. }
  392.  
  393. SendDeathToServer(){
  394.     If(!SAMP())
  395.         return false
  396.  
  397.     callWithParams(hGTA, dwSAMP + 0x55E0, [["i", LocalPlayer()]], false, true)
  398. }
  399.  
  400.  
  401. // #############################  HUD
  402.  
  403. SetHudEnabled(toggle){
  404.     If(!SAMP())
  405.         return false
  406.  
  407.     writeMemory(hGTA, 0xA444A0, toggle, 1, "UChar")
  408. }
  409.  
  410. // ############################# Interface
  411.  
  412.  
  413. ChangeInterfaceColor(id, color){
  414.     If(!SAMP())
  415.         return false
  416.  
  417.     dwAddr := 0xBAB22C
  418.     dw := 4 * id, dwAddr += dw
  419.     writeMemory(hGTA, dwAddr, 0xFFFFFFFF, 4, "Int")
  420. }
  421.  
  422. SetPercentageHealthAndArmor(toggle){
  423.     If(!SAMP())
  424.         return false
  425.  
  426.     writeMemory(hGTA, 0x589355, toggle, 1, "UChar")
  427.     writeMemory(hGTA, 0x589131, toggle, 1, "UChar")
  428. }
  429.  
  430.  
  431.  
  432. // #############################  CHECKPOINT
  433.  
  434. setCheckpoint(fX, fY, fZ, fSize) {
  435.     if(!SAMP())
  436.         return false
  437.     dwFunc := dwSAMP + 0x9D340
  438.    
  439.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  440.    
  441.     VarSetCapacity(buf, 16, 0)
  442.     NumPut(fX, buf, 0, "Float")
  443.     NumPut(fY, buf, 4, "Float")
  444.     NumPut(fZ, buf, 8, "Float")
  445.     NumPut(fSize, buf, 12, "Float")
  446.    
  447.     writeRaw(hGTA, pParam1, &buf, 16)
  448.    
  449.     dwLen := 31
  450.    
  451.     VarSetCapacity(injectData, dwLen, 0)
  452.    
  453.     NumPut(0xB9, injectData, 0, "UChar")
  454.     NumPut(dwAddress, injectData, 1, "UInt")
  455.     NumPut(0x68, injectData, 5, "UChar")
  456.     NumPut(pParam1+12, injectData, 6, "UInt")
  457.     NumPut(0x68, injectData, 10, "UChar")
  458.     NumPut(pParam1, injectData, 11, "UInt")
  459.     NumPut(0xE8, injectData, 15, "UChar")
  460.     offset := dwFunc - (pInjectFunc + 20)
  461.     NumPut(offset, injectData, 16, "Int")
  462.     NumPut(0x05C7, injectData, 20, "UShort")
  463.     NumPut(dwAddress+0x24, injectData, 22, "UInt")
  464.     NumPut(1, injectData, 26, "UInt")
  465.     NumPut(0xC3, injectData, 30, "UChar")
  466.    
  467.    
  468.     writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  469.     if(ErrorLevel)
  470.         return false
  471.    
  472.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  473.     if(ErrorLevel)
  474.         return false
  475.    
  476.     waitForSingleObject(hThread, 0xFFFFFFFF)
  477.    
  478.     closeProcess(hThread)
  479.    
  480.     ErrorLevel := ERROR_OK
  481.     return true
  482. }
  483.  
  484. disableCheckpoint()
  485. {
  486.     if(!SAMP())
  487.         return false
  488.    
  489.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  490.     VarSetCapacity(enablecp, 4, 0)
  491.     NumPut(0,enablecp,0,"Int")
  492.     writeRaw(hGTA, dwAddress+0x24, &enablecp, 4)
  493.     return true
  494. }
  495.  
  496.  
  497. // #############################  POOLS
  498.  
  499.  
  500. UpdateVehiclePool(){
  501.     If(!SAMP())
  502.         return false
  503.  
  504.     if(iRefreshVeh+iUpdateTickVeh > A_TickCount)
  505.         return 1
  506.  
  507.     oVehiclePoolData := []
  508.  
  509.     iRefreshVeh := A_TickCount
  510.  
  511.     dwAddress := InfoOffset(0)
  512.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  513.     stVehiclePool := readDWORD(hGTA, dwAddress + SAMP_PPOOL_VEHICLE_OFFSET)
  514.  
  515.     vehicleoffset := 0
  516.  
  517.     Loop, %SAMP_MAX_VEHICLES% // 2000
  518.     {
  519.         index := A_Index-1, vehicleoffset += 4
  520.         iIsListed := readDWORD(hGTA, stVehiclePool + VEHPOOL_iIsListed + index * 0x4)
  521.  
  522.         If(iIsListed == 0)
  523.             continue
  524.  
  525.         ptrGTAVeh  := readDWORD(hGTA, stVehiclePool + VEHPOOL_pGTA_Vehicle + index * 0x4)
  526.         If(ptrGTAVeh == 0)
  527.             continue
  528.  
  529.         GTACARid := GetVehicleModelIDByPointer(ptrGTAVeh)
  530.  
  531.         sVehId := Round(((vehicleoffset / 4) - 1))
  532.  
  533.         if(GTACARid>400 && GTACARid <611)
  534.         oVehiclePoolData[index] := Object("PTR",  ptrGTAVeh, "SAMPID", sVehId, "CARNAME", ovehicleNames[GTACARid-399])
  535.  
  536.     }
  537.  
  538.     vehicleoffset := 0
  539.     return 1
  540. }
  541.  
  542. UpdateTextdrawPool(){
  543.     global
  544.  
  545.     if(!SAMP())
  546.         return 0
  547.  
  548.     strData := []
  549.  
  550.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  551.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  552.     dwTextDraws := readDWORD(hGTA, dwAddress + 0x10)
  553.  
  554.     Loop, % SAMP_MAX_TEXTDRAWS
  555.     {
  556.         i := A_Index-1
  557.         iIsListed := readDWORD(hGTA, dwTextDraws + i * 0x4)
  558.         If(iIsListed == 0)
  559.             continue
  560.         dwAddr := readDWORD(hGTA, dwTextDraws + 0x2400 + i * 0x4)
  561.         If(dwAddr == 0)
  562.             continue
  563.  
  564.         strOUT := readString(hGTA, dwAddr, 256) // strOUT size
  565.         if(strOUT == 0)
  566.             continue
  567.  
  568.         strData[i] := strOUT
  569.     }
  570. }
  571.  
  572. CountStreamedVehicles(){
  573.     If(!SAMP())
  574.         return false
  575.  
  576.     if(!UpdateVehiclePool())
  577.         return -1
  578.  
  579.     iCount := 0
  580.     for i, o in oVehiclePoolData
  581.     iCount++
  582.         return iCount
  583. }
  584.  
  585. CountTextraws(){
  586.     If(!SAMP())
  587.         return false
  588.  
  589.     if(!UpdateTextdrawPool())
  590.         return -1
  591.  
  592.     iCount := 0
  593.     for i, o in strData
  594.     iCount++
  595.         return iCount
  596. }
  597.  
  598.  
  599. // #############################  Streamed Players
  600.  
  601.  
  602. callFuncForAllStreamedInPlayers(cfunc,dist=0x7fffffff) {
  603.     cfunc := "" cfunc
  604.     dist += 0
  605.     if(!IsFunc(cfunc))
  606.         return false
  607.     p := getStreamedInPlayersInfo()
  608.     if(!p)
  609.         return false
  610.     if(dist<0x7fffffff)
  611.     {
  612.         lpos := GetPlayerPosition()
  613.         if(!lpos)
  614.             return false
  615.         For i, o in p
  616.         {
  617.             if(dist>getDist(lpos,o.POS))
  618.                 %cfunc%(o)
  619.         }
  620.     }
  621.     else
  622.     {
  623.         For i, o in p
  624.             %cfunc%(o)
  625.     }
  626.     return true
  627. }
  628.  
  629. getStreamedInPlayersInfo() {
  630.     r:=[]
  631.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  632.     {
  633.         For i, o in oScoreboardData
  634.         {
  635.             if(o.HasKey("PED"))
  636.             {
  637.                 p := GetPositionByPed(o.PED)
  638.                 if(p)
  639.                 {
  640.                     o.POS := p
  641.                     r[i] := o
  642.                 }
  643.             }
  644.         }
  645.         return r
  646.     }
  647.  
  648.     if(!updateOScoreboardData())
  649.         return ""
  650.  
  651.     For i, o in oScoreboardData
  652.     {
  653.         if(o.HasKey("PED"))
  654.         {
  655.             p := GetPositionByPed(o.PED)
  656.             if(p)
  657.             {
  658.                 o.POS := p
  659.                 r[i] := o
  660.             }
  661.         }
  662.     }
  663.     return r
  664. }
  665.  
  666. getClosestPlayerId() {
  667.     dist := 0x7fffffff
  668.     p := getStreamedInPlayersInfo()
  669.     if(!p)
  670.         return -1
  671.     lpos := GetPlayerPosition()
  672.     if(!lpos)
  673.         return -1
  674.     id := -1
  675.     For i, o in p
  676.     {
  677.         t:=getDist(lpos,o.POS)
  678.         if(t<dist)
  679.         {
  680.             dist := t
  681.             id := i
  682.         }
  683.     }
  684.     return id
  685. }
  686.  
  687. getPedById(dwId) {
  688.     dwId += 0
  689.     dwId := Floor(dwId)
  690.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  691.         return 0
  692.  
  693.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  694.     {
  695.         if(oScoreboardData[dwId])
  696.         {
  697.             if(oScoreboardData[dwId].HasKey("PED"))
  698.                 return oScoreboardData[dwId].PED
  699.         }
  700.         return 0
  701.     }
  702.  
  703.     if(!updateOScoreboardData())
  704.         return 0
  705.  
  706.     if(oScoreboardData[dwId])
  707.     {
  708.         if(oScoreboardData[dwId].HasKey("PED"))
  709.             return oScoreboardData[dwId].PED
  710.     }
  711.     return 0
  712. }
  713.  
  714. getIdByPed(dwPed) {
  715.     dwPed += 0
  716.     dwPed := Floor(dwPed)
  717.     if(!dwPed)
  718.         return -1
  719.    
  720.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  721.     {
  722.         For i, o in oScoreboardData
  723.         {
  724.             if(o.HasKey("PED"))
  725.             {
  726.                 if(o.PED==dwPed)
  727.                     return i
  728.             }
  729.         }
  730.         return -1
  731.     }
  732.    
  733.     if(!updateOScoreboardData())
  734.         return -1
  735.    
  736.     For i, o in oScoreboardData
  737.     {
  738.         if(o.HasKey("PED"))
  739.         {
  740.             if(o.PED==dwPed)
  741.                 return i
  742.         }
  743.     }
  744.     return -1
  745. }
  746.  
  747. getPlayerIdByName(wName) {
  748.     wName := "" wName
  749.     if(StrLen(wName) < 1 || StrLen(wName) > 24)
  750.         return -1
  751.    
  752.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  753.     {
  754.         For i, o in oScoreboardData
  755.         {
  756.             if(InStr(o.NAME,wName)==1)
  757.                 return i
  758.         }
  759.         return -1
  760.     }
  761.    
  762.     if(!updateOScoreboardData())
  763.         return -1
  764.    
  765.     For i, o in oScoreboardData
  766.     {
  767.         if(InStr(o.NAME,wName)==1)
  768.             return i
  769.     }
  770.     return -1
  771. }
  772.  
  773.  
  774. getPlayerScoreById(dwId) {
  775.     dwId += 0
  776.     dwId := Floor(dwId)
  777.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  778.         return ""
  779.    
  780.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  781.     {
  782.         if(oScoreboardData[dwId])
  783.             return oScoreboardData[dwId].SCORE
  784.         return ""
  785.     }
  786.    
  787.     if(!updateOScoreboardData())
  788.         return ""
  789.    
  790.     if(oScoreboardData[dwId])
  791.         return oScoreboardData[dwId].SCORE
  792.     return ""
  793. }
  794.  
  795. getPlayerPingById(dwId) {
  796.     dwId += 0
  797.     dwId := Floor(dwId)
  798.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  799.         return -1
  800.        
  801.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  802.     {
  803.         if(oScoreboardData[dwId])
  804.             return oScoreboardData[dwId].PING
  805.         return -1
  806.     }
  807.    
  808.     if(!updateOScoreboardData())
  809.         return -1
  810.    
  811.     if(oScoreboardData[dwId])
  812.         return oScoreboardData[dwId].PING
  813.     return -1
  814. }
  815.  
  816. isNPCById(dwId) {
  817.     dwId += 0
  818.     dwId := Floor(dwId)
  819.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  820.         return -1
  821.    
  822.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  823.     {
  824.         if(oScoreboardData[dwId])
  825.             return oScoreboardData[dwId].ISNPC
  826.         return -1
  827.     }
  828.    
  829.     if(!updateOScoreboardData())
  830.         return -1
  831.    
  832.     if(oScoreboardData[dwId])
  833.         return oScoreboardData[dwId].ISNPC
  834.     return -1
  835. }
  836.  
  837.  
  838. // #############################  Cheat Funktionen
  839.  
  840. StableVehicleCam()
  841. {
  842.     If(IsPlayerInAnyVehicle() && WinActive("GTA:SA:MP"))
  843.     {
  844.         DllCall("mouse_event", uint,1, int,1, int,0, uint,0, int,0)
  845.         sleep, 3
  846.         DllCall("mouse_event", uint,1, int,-1, int,0, uint,0, int,0)
  847.     }
  848. }
  849.  
  850. UnlockFPS(){
  851.     If(!SAMP())
  852.         return false
  853.  
  854.     writeMemory(hGTA, dwSAMP + ADDR_SAMP_FPSUNLOCK, 0x5051FF15, 4, "UChar")
  855. }
  856.  
  857.  
  858. NoSpread(value) {
  859.     global
  860.  
  861.     if(!SAMP())
  862.         return false
  863.  
  864.     If(value = 1)
  865.     {
  866.         Loop % ADDR_NOSPREAD.MaxIndex(){
  867.             resetrecoil%A_Index% := readMemory(hGTA, ADDR_NOSPREAD[A_Index])
  868.             writeMemory(hGTA, ADDR_NOSPREAD[A_Index], 1000.0, 4, "float")
  869.         }
  870.     }else if(value = 0){
  871.         Loop % ADDR_NOSPREAD.MaxIndeX()
  872.         writeMemory(hGTA, ADDR_NOSPREAD[A_Index], resetrecoil%A_Index%)
  873.     }
  874. }
  875.  
  876. AntiBikeFall(value) {
  877.     global
  878.     if(!SAMP())
  879.         return false
  880.  
  881.     If(value){
  882.         r1 := readMemory(hGTA, ADDR_BIKEFALL1)
  883.         r2 := readMemory(hGTA, ADDR_BIKEFALL2)
  884.         r3 := readMemory(hGTA, ADDR_BIKEFALL3)
  885.         writeMemory(hGTA, ADDR_BIKEFALL1, 0xE9, 2)
  886.         writeMemory(hGTA, ADDR_BIKEFALL2, 0xA7, 2)
  887.         writeMemory(hGTA, ADDR_BIKEFALL3, 0x03, 2)
  888.     }else{
  889.         writeMemory(hGTA, ADDR_BIKEFALL1, r1)
  890.  
  891.         writeMemory(hGTA, ADDR_BIKEFALL2, r2)
  892.         writeMemory(hGTA, ADDR_BIKEFALL3, r3)
  893.     }
  894. }
  895.  
  896. ShowNametags(i){
  897.     global
  898.     If(!SAMP())
  899.         return false
  900.  
  901.     If(i){
  902.         dwAddr := InfoOffset(1)
  903.         d_dist := readFloat(hGTA, dwAddr + SAMP_NAMETAG_DISTANCE)
  904.         writeMemory(hGTA, dwAddr + SAMP_NAMETAG_DISTANCE, 10000, 4, "float")
  905.         writeMemory(hGTA, dwAddr + SAMP_NAMETAGS_WALL, false)
  906.     }else{
  907.         writeMemory(hGTA, dwAddr + SAMP_NAMETAG_DISTANCE, d_dist, 4, "float")
  908.         writeMemory(hGTA, dwAddr + SAMP_NAMETAGS_WALL, true)
  909.     }
  910. }
  911.  
  912. RGN_BOT()
  913. {
  914.     global
  915.     if(!SAMP())
  916.         return 0
  917.  
  918.  
  919.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  920.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  921.     dwTextDraws := readDWORD(hGTA, dwAddress + SAMP_PPOOL_TEXTDRAW_OFFSET)
  922.     Loop, % SAMP_MAX_TEXTDRAWS
  923.     {
  924.         i := A_Index-1
  925.         iIsListed := readDWORD(hGTA, dwTextDraws + i * 0x4)
  926.  
  927.         If(iIsListed == 0)
  928.             continue
  929.         dwAddr := readDWORD(hGTA, dwTextDraws + 0x2400 + i * 0x4)
  930.  
  931.         If(dwAddr == 0)
  932.             continue
  933.         strOUT := readString(hGTA, dwAddr, 256)
  934.  
  935.         If(strOUT == 0)
  936.             continue
  937.  
  938.         If(Instr(strOUT, "AFK-System"))
  939.         {
  940.             RegExMatch(strOUT,"Gib folgende Summe mit ~g~/notafk~w~ ein\:~n~~r~~.*~(.*)\+~(.*)~(.*)~n~~n", sOUTPUT)
  941.             o_out := sOUTPUT1 + sOUTPUT2
  942.             ,t_out := sOUTPUT1 + sOUTPUT3
  943.             SendChat("/notafk " . o_out)
  944.             SendChat("/notafk " . t_out)
  945.                 break
  946.         }
  947.     }
  948. }
  949.  
  950. UnlimitedAmmo(value){
  951.     if(!SAMP())
  952.         return false
  953.  
  954.     If(value)
  955.     writeMemory(hGTA, 0x969178, 0x1)
  956.     else
  957.     writeMemory(hGTA, 0x969178, 0x0)
  958. }
  959.  
  960. NightVision(value){
  961.     If(!SAMP())
  962.         return false
  963.  
  964.     If(value)
  965.     writeMemory(hGTA, ADDR_SA_NIGHTVISION, 0x1)
  966.     else writeMemory(hGTA, ADDR_SA_NIGHTVISION, 0x0)
  967. }
  968.  
  969. ThermalVision(value){
  970.     If(!SAMP())
  971.         return false
  972.  
  973.     If(value)
  974.     writeMemory(hGTA, ADDR_SA_THERMVISION, 0x1)
  975.     else writeMemory(hGTA, ADDR_SA_THERMVISION, 0x0)
  976. }
  977.  
  978. UnderWaterDrive(value){
  979.     If(!SAMP())
  980.         return false
  981.  
  982.     If(value)
  983.     writeMemory(hGTA, ADDR_SA_UNDERWATER, 0x1, 1, "byte")
  984.     else writeMemory(hGTA, ADDR_SA_UNDERWATER, 0x0, 1, "byte")
  985. }
  986.  
  987.  
  988. FixVehicle(){
  989.     If(!SAMP())
  990.         return false
  991.    
  992.     dwVeh := Vehicle(0)
  993.     If(dwVeh)
  994.     {
  995.         vType := GetVehicleTypeByPointer(dwVeh)
  996.         If(vType == 0 && !IsVehicleAPlane(dwVeh))
  997.              callWithParams(hGTA, 0x6A3440, [["i", dwVeh]], false, true)
  998.         else If(vType == 9)
  999.             callWithParams(hGTA, 0x6B7050, [["i", dwVeh]], false, true)
  1000.         else
  1001.             AddChatMessage(PREFIX . "Unknown error")
  1002.     }else{
  1003.         AddChatMessage(PREFIX . "Not in a vehicle!")
  1004.     }
  1005. }
  1006.  
  1007. GetGravity(){
  1008.     If(!SAMP())
  1009.         return false
  1010.  
  1011.     return readFloat(hGTA, ADDR_WORLD_GRAVITY)
  1012. }
  1013.  
  1014. SetGravity(value){
  1015.     If(!SAMP())
  1016.         return false
  1017.  
  1018.     writeMemory(hGTA, ADDR_WORLD_GRAVITY, value, 4, "float")
  1019. }
  1020.  
  1021.  
  1022. // #############################  Weapon
  1023.  
  1024.  
  1025. GetTargetPed(){
  1026.     If(!SAMP())
  1027.         return false
  1028.  
  1029.     return readDWORD(hGTA, readDWORD(hGTA, ADDR_WEAPON_TARGET) + OFFSET_CPED_OTARGET)
  1030. }
  1031.  
  1032.  
  1033. GetWeaponStackID(){
  1034.     If(!SAMP())
  1035.         return false
  1036.  
  1037.     return readMemory(hGTA, mainCPED + OFFSET_WEAPON_ID)
  1038. }
  1039.  
  1040. GetWeaponSlot(){
  1041.     if(!SAMP())
  1042.         return false
  1043.  
  1044.     return readMemory(hGTA, mainCPED + OFFSET_WEAPON_SLOT, 1, "byte")
  1045. }
  1046.  
  1047. // #############################  Camera
  1048.  
  1049. GetCameraPosition(writeable=0){
  1050.     If(!SAMP())
  1051.         return false
  1052.  
  1053.     If(!writeable)
  1054.     return [readFloat(hGTA, ADDR_CAMERA_POS_X), readFloat(hGTA, ADDR_CAMERA_POS_Y)]
  1055.     else return readFloat(hGTA, ADDR_CAMERA_CURR_X)
  1056. }
  1057.  
  1058. SetCameraPos(x){
  1059.     If(!SAMP())
  1060.         return false
  1061.  
  1062.     writeMemory(hGTA, ADDR_CAMERA_CURR_X, x, 4, "float")
  1063. }
  1064.  
  1065. GetCameraRotation(){
  1066.     If(!SAMP())
  1067.         return false
  1068.  
  1069.     return readFloat(hGTA, ADDR_CAMERA_ROTATION)
  1070. }
  1071.  
  1072.  
  1073. GetCameraXAngle(){
  1074.     If(!SAMP())
  1075.         return false
  1076.  
  1077.     angle := 0
  1078.     angle := 360 + atan2(readFloat(hGTA, ADDR_CAMERA_ANGLE_X), readFloat(hGTA, ADDR_CAMERA_ANGLE_Y) *180/PI)
  1079.  
  1080.     If(angle > 360.0)
  1081.         angle -= 360.0
  1082.  
  1083.     return angle
  1084.  
  1085. }
  1086.  
  1087. GetCameraZAngle(){
  1088.     If(!SAMP())
  1089.         return false
  1090.  
  1091.     val := readFloat(hGTA, 0x00B6F248)
  1092.     if(val > -1.2 & val < 1.2)
  1093.     return val
  1094. }
  1095.  
  1096.  
  1097.  
  1098. // #############################  D3D
  1099.  
  1100.  
  1101. WorldToScreen(fX,fY,fZ, ScreenSizeX, ScreenSizeY){
  1102.     global
  1103.  
  1104.     if(!SAMP())
  1105.         return false
  1106.  
  1107.     dwM := 0xB6FA2C
  1108.  
  1109.     m_11 := readFloat(hGTA, dwM + 0*4)
  1110.     m_12 := readFloat(hGTA, dwM + 1*4)
  1111.     m_13 := readFloat(hGTA, dwM + 2*4)
  1112.     m_21 := readFloat(hGTA, dwM + 4*4)
  1113.     m_22 := readFloat(hGTA, dwM + 5*4)
  1114.     m_23 := readFloat(hGTA, dwM + 6*4)
  1115.     m_31 := readFloat(hGTA, dwM + 8*4)
  1116.     m_32 := readFloat(hGTA, dwM + 9*4)
  1117.     m_33 := readFloat(hGTA, dwM + 10*4)
  1118.     m_41 := readFloat(hGTA, dwM + 12*4)
  1119.     m_42 := readFloat(hGTA, dwM + 13*4)
  1120.     m_43 := readFloat(hGTA, dwM + 14*4)
  1121.  
  1122.     frX := fZ * m_31 + fY * m_21 + fX * m_11 + m_41
  1123.     frY := fZ * m_32 + fY * m_22 + fX * m_12 + m_42
  1124.     frZ := fZ * m_33 + fY * m_23 + fX * m_13 + m_43
  1125.  
  1126.     fRecip := 1.0/frZ
  1127.     frX *= fRecip * ScreenSizeX
  1128.     frY *= fRecip * ScreenSizeY
  1129.  
  1130.     if(frZ>1)
  1131.         return [frX,frY,frZ]
  1132. }
  1133.  
  1134. // #############################  SCOREBOARD-DATA
  1135.  
  1136. updateOScoreboardData() {
  1137.     global
  1138.    
  1139.     if(!SAMP())
  1140.         return 0
  1141.  
  1142.     oScoreboardData := []
  1143.  
  1144.     if(!updateScoreboardDataEx())
  1145.         return 0
  1146.  
  1147.     iRefreshScoreboard := A_TickCount
  1148.  
  1149.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)
  1150.     dwAddress := readDWORD(hGTA, dwAddress + SAMP_PPOOLS_OFFSET)
  1151.     dwPlayers := readDWORD(hGTA, dwAddress + SAMP_PPOOL_PLAYER_OFFSET)
  1152.  
  1153.  
  1154.     wID := readMemory(hGTA, dwPlayers + SAMP_SLOCALPLAYERID_OFFSET, 2, "Short")    // sLocalPlayerID
  1155.     dwPing := readMemory(hGTA, dwPlayers + SAMP_ILOCALPLAYERPING_OFFSET)
  1156.     dwScore := readMemory(hGTA, dwPlayers + SAMP_ILOCALPLAYERSCORE_OFFSET)
  1157.     dwTemp := readMemory(hGTA, dwPlayers + SAMP_ISTRLEN_LOCALPLAYERNAME_OFFSET)    // iStrlen_LocalPlayerName
  1158.     sUsername := ""
  1159.     if(dwTemp <= 0xf) {
  1160.         sUsername := readString(hGTA, dwPlayers + SAMP_SZLOCALPLAYERNAME_OFFSET, 16)       // szLocalPlayerName
  1161.     }
  1162.     else {
  1163.         dwAddress := readDWORD(hGTA, dwPlayers + SAMP_PSZLOCALPLAYERNAME_OFFSET)        // pszLocalPlayerName
  1164.         sUsername := readString(hGTA, dwAddress, 25)
  1165.     }
  1166.     oScoreboardData[wID] := Object("NAME", sUsername, "ID", wID, "PING", dwPing, "SCORE", dwScore, "ISNPC", 0)
  1167.  
  1168.     Loop, % SAMP_PLAYER_MAX
  1169.     {
  1170.         i := A_Index-1
  1171.  
  1172.         dwRemoteplayer := readDWORD(hGTA, dwPlayers+SAMP_PREMOTEPLAYER_OFFSET+i*4)      // pRemotePlayer
  1173.         if(dwRemoteplayer==0)
  1174.             continue
  1175.  
  1176.         dwPing := readMemory(hGTA, dwRemoteplayer + SAMP_IPING_OFFSET)                  // pPing
  1177.         dwScore := readMemory(hGTA, dwRemoteplayer + SAMP_ISCORE_OFFSET)                // Score
  1178.         dwIsNPC := readMemory(hGTA, dwRemoteplayer + SAMP_ISNPC_OFFSET)                 // NPC check
  1179.         dwTemp := readMemory(hGTA, dwRemoteplayer + SAMP_ISTRLENNAME___OFFSET)
  1180.         sUsername := ""
  1181.         if(dwTemp <= 0xf)
  1182.         {
  1183.             sUsername := readString(hGTA, dwRemoteplayer+SAMP_SZPLAYERNAME_OFFSET, 16)  // sUser
  1184.         }
  1185.         else {
  1186.             dwAddress := readDWORD(hGTA, dwRemoteplayer + SAMP_PSZPLAYERNAME_OFFSET)
  1187.             sUsername := readString(hGTA, dwAddress, 25)
  1188.         }
  1189.         o := Object("NAME", sUsername, "ID", i, "PING", dwPing, "SCORE", dwScore, "ISNPC", dwIsNPC)
  1190.         oScoreboardData[i] := o
  1191.  
  1192.         dwRemoteplayerData := readDWORD(hGTA, dwRemoteplayer + 0x0)                     // pPlayerData
  1193.         if(dwRemoteplayerData==0)
  1194.             continue
  1195.  
  1196.         dwAddress := readDWORD(hGTA, dwRemoteplayerData + pData_iGlobalMarkers)         // iGlobalMarkerLoaded
  1197.         if(dwAddress)
  1198.         {
  1199.             ix := readMemory(hGTA, dwRemoteplayerData + pData_iMapX)                    // x map
  1200.             iy := readMemory(hGTA, dwRemoteplayerData + pData_iMapY)                    // y map
  1201.             iz := readMemory(hGTA, dwRemoteplayerData + pData_iMapZ)                    // z map
  1202.             o.MPOS := [ix, iy, iz]
  1203.         }
  1204.  
  1205.         dwpSAMP_Actor := readDWORD(hGTA, dwRemoteplayerData + 0x0)                      // pSAMP_Actor
  1206.         if(dwpSAMP_Actor==0)               // not streamed in
  1207.             continue
  1208.  
  1209.         dwPed := readDWORD(hGTA, dwpSAMP_Actor + pData_iGTAPed)                         // pGTA_Ped_
  1210.         if(dwPed==0)
  1211.             continue
  1212.  
  1213.         iAFKState := readMemory(hGTA, dwRemoteplayerData + pData_iAFKState)             // iAFKState <- new
  1214.         fHP := readFloat(hGTA, dwRemoteplayerData + pData_iHP)                          // iHP
  1215.         fARMOR := readFloat(hGTA, dwRemoteplayerData + pData_iArmor)                    // iArmor
  1216.  
  1217.           o.HP := fHP
  1218.         , o.ARMOR := fARMOR
  1219.         , o.AFK := iAFKState
  1220.         , o.PED := dwPed
  1221.     }
  1222.     ErrorLevel := ERROR_OK
  1223.     return 1
  1224. }
  1225.  
  1226.  
  1227. updateScoreboardDataEx() {
  1228.     global
  1229.  
  1230.     if(!SAMP())
  1231.         return false
  1232.  
  1233.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_INFO_OFFSET)            // g_SAMP
  1234.     dwFunc := dwSAMP + FUNC_UPDATESCOREBOARD
  1235.  
  1236.     VarSetCapacity(injectData, 11, 0) // mov + call + retn
  1237.  
  1238.     NumPut(0xB9, injectData, 0, "UChar")
  1239.     NumPut(dwAddress, injectData, 1, "UInt")
  1240.  
  1241.     NumPut(0xE8, injectData, 5, "UChar")
  1242.     offset := dwFunc - (pInjectFunc + 10)
  1243.     NumPut(offset, injectData, 6, "Int")
  1244.     NumPut(0xC3, injectData, 10, "UChar")
  1245.  
  1246.     writeRaw(hGTA, pInjectFunc, &injectData, 11)
  1247.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1248.     waitForSingleObject(hThread, 0xFFFFFFFF)
  1249.  
  1250.     closeProcess(hThread)
  1251.  
  1252.     return true
  1253.  
  1254. }
  1255.  
  1256. // #############################  Math
  1257.  
  1258. IntToHex(int){
  1259.     CurrentFormat := A_FormatInteger
  1260.     SetFormat, integer, hex
  1261.     int += 0
  1262.     SetFormat, integer, %CurrentFormat%
  1263.     return int
  1264. }
  1265.  
  1266. getDist(pos1,pos2) {
  1267.     if(!pos1 || !pos2)
  1268.         return 0
  1269.     return Sqrt((pos1[1]-pos2[1])*(pos1[1]-pos2[1])+(pos1[2]-pos2[2])*(pos1[2]-pos2[2])+(pos1[3]-pos2[3])*(pos1[3]-pos2[3]))
  1270. }
  1271.  
  1272. atan2(x, y) {
  1273.    Return dllcall("msvcrt\atan2","Double",y, "Double",x, "CDECL Double")
  1274. }
  1275.  
  1276.  
  1277. tobin(byref addr, str)
  1278. {
  1279.     if(!RegExMatch(str,"^([a-fA-F0-9][a-fA-F0-9])*$"))
  1280.     {
  1281.         msgbox % "fail tobin"
  1282.         return
  1283.     }
  1284.     i:=Strlen(str)/2
  1285.     VarSetCapacity(addr, i)
  1286.     dataddr := &addr
  1287.     x:=""
  1288.     loop,parse,str
  1289.     {
  1290.         if(A_Index & 1)
  1291.             x := A_Loopfield
  1292.         else
  1293.         {
  1294.             DllCall("RtlFillMemory"
  1295.                         , "UInt", dataddr
  1296.                         , "UInt", 1
  1297.                         , "UChar", "0x" x A_Loopfield)
  1298.             dataddr++
  1299.         }
  1300.     }
  1301. }
  1302.  
  1303. __DWORD(dwAddress, ByRef dwRead=0)
  1304. {   VarSetCapacity(dwRead, 4)
  1305. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", 4, "UInt", 0, "UInt*", 0)
  1306. dwRead := NumGet(dwRead, 0, "UInt")
  1307. return dwRead
  1308. }
  1309. getCoordinates() {
  1310.     fX := readFloat(hGTA, ADDR_POSITION_X)
  1311.     if(ErrorLevel) {
  1312.         ErrorLevel := ERROR_READ_MEMORY
  1313.         return ""
  1314.     }
  1315.    
  1316.     fY := readFloat(hGTA, ADDR_POSITION_Y)
  1317.     if(ErrorLevel) {
  1318.         ErrorLevel := ERROR_READ_MEMORY
  1319.         return ""
  1320.     }
  1321.    
  1322.     fZ := readFloat(hGTA, ADDR_POSITION_Z)
  1323.     if(ErrorLevel) {
  1324.         ErrorLevel := ERROR_READ_MEMORY
  1325.         return ""
  1326.     }
  1327.    
  1328.     ErrorLevel := ERROR_OK
  1329.     return [fX, fY, fZ]
  1330. }
  1331. getId() {
  1332.     s:=getUsername()
  1333.     return getPlayerIdByName(s)
  1334. }
  1335. GetTargetPosById(dwId) {
  1336.     dwId += 0
  1337.     dwId := Floor(dwId)
  1338.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1339.         return ""
  1340.    
  1341.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1342.     {
  1343.         if(oScoreboardData[dwId])
  1344.         {
  1345.             if(oScoreboardData[dwId].HasKey("PED"))
  1346.                 return GetPedCoordinates(oScoreboardData[dwId].PED)
  1347.             if(oScoreboardData[dwId].HasKey("MPOS"))
  1348.                 return oScoreboardData[dwId].MPOS
  1349.         }
  1350.         return ""
  1351.     }
  1352.    
  1353.     if(!updateOScoreboardData())
  1354.         return ""
  1355.    
  1356.     if(oScoreboardData[dwId])
  1357.     {
  1358.         if(oScoreboardData[dwId].HasKey("PED"))
  1359.             return GetPedCoordinates(oScoreboardData[dwId].PED)
  1360.         if(oScoreboardData[dwId].HasKey("MPOS"))
  1361.             return oScoreboardData[dwId].MPOS
  1362.     }
  1363.     return ""
  1364. }
  1365. getPedCoordinates(dwPED) {
  1366.     dwPED += 0
  1367.     dwPED := Floor(dwPED)
  1368.     if(!dwPED)
  1369.         return ""
  1370.  
  1371.     dwAddress := readDWORD(hGTA, dwPED + 0x14)
  1372.     if(ErrorLevel || dwAddress==0) {
  1373.         ErrorLevel := ERROR_READ_MEMORY
  1374.         return ""
  1375.     }
  1376.    
  1377.     fX := readFloat(hGTA, dwAddress + 0x30)
  1378.     if(ErrorLevel) {
  1379.         ErrorLevel := ERROR_READ_MEMORY
  1380.         return ""
  1381.     }
  1382.    
  1383.     fY := readFloat(hGTA, dwAddress + 0x34)
  1384.     if(ErrorLevel) {
  1385.         ErrorLevel := ERROR_READ_MEMORY
  1386.         return ""
  1387.     }
  1388.    
  1389.     fZ := readFloat(hGTA, dwAddress + 0x38)
  1390.     if(ErrorLevel) {
  1391.         ErrorLevel := ERROR_READ_MEMORY
  1392.         return ""
  1393.     }
  1394.    
  1395.     ErrorLevel := ERROR_OK
  1396.     return [fX, fY, fZ]
  1397. }
  1398. toHex(int) {
  1399.     format := A_FormatInteger
  1400.     SetFormat, Integer, H
  1401.     int += 0
  1402.     SetFormat, Integer, %format%
  1403.     return int
  1404. }
  1405. GetPlayerNameById(dwId) {
  1406.     dwId += 0
  1407.     dwId := Floor(dwId)
  1408.     if(dwId < 0 || dwId >= SAMP_PLAYER_MAX)
  1409.         return ""
  1410.    
  1411.     if(iRefreshScoreboard+iUpdateTick > A_TickCount)
  1412.     {
  1413.         if(oScoreboardData[dwId])
  1414.             return oScoreboardData[dwId].NAME
  1415.         return ""
  1416.     }
  1417.    
  1418.     if(!updateOScoreboardData())
  1419.         return ""
  1420.    
  1421.     if(oScoreboardData[dwId])
  1422.         return oScoreboardData[dwId].NAME
  1423.     return ""
  1424. }
  1425. PlayerInput(text){
  1426.         s := A_IsSuspended
  1427.         Suspend On
  1428.         KeyWait Enter
  1429.         BlockChatInput(block)
  1430.         SendInput t^a{backspace}%text%
  1431.         Input, var, v, {enter}
  1432.         SendInput ^a{backspace 100}{enter}
  1433.         Sleep, 20
  1434.         BlockChatInput(unblock)
  1435.         if(!s)
  1436.         Suspend Off
  1437.         return var
  1438. }
  1439.  
  1440. getWeaponName(id) {
  1441.     weapons := {0: "Faust", 1: "Schlagring", 2: "Golfschläger", 3: "Schlagstock", 4: "Messer", 5: "Baseball Schläger", 6: "Schaufel", 7: "Billiardstick", 8: "Katana", 9: "Kettensäge", 10: "Lila Dildo", 11: "Dildo", 12: "Vibrator", 13: "Silber Vibrator", 14: "Blumen", 15: "Kanne", 16: "Granate", 17: "Tränen Gas", 18: "Molotov Cocktail", 22: "9mm", 23: "Silenced 9mm", 24: "Desert Eagle", 25: "Shotgun", 26: "Sawnoff Shotgun", 27: "Combat Shotgun", 28: "Micro SMG", 29: "MP5", 30: "AK-47", 31: "M4", 32: "Tec-9", 33: "Country Rifle", 34: "Sniper", 35: "RPG", 36: "HS Rocket", 37: "Flammenwerfer", 38: "Minigun", 39: "Satchel Charge", 40: "Zünder", 41: "Sprühdose", 42: "Feuerlöscher", 43: "Kamera", 44: "Nachtsichtgerät", 45: "Thermal Brille", 46: "Fallschirm", 47: "Fake Pistole", 49: "Fahrzeug", 50: "Helikopter", 51: "Explosion", 53: "Drowned", 54: "Splat", 255: "Suicide"}
  1442.     if(weapons[id]) {
  1443.         return weapons[id]
  1444.     }
  1445.     return "Unknown"
  1446. }
  1447.  
  1448. BlockChatInput(block)
  1449. {
  1450.     global BlockChatInput_func
  1451.     res := DllCall(BlockChatInput_func,UChar,block)
  1452.     return res
  1453. }
  1454.  
  1455. showDialog(dwStyle, wCaption, wInfo, wButton1 ) {
  1456. dwStyle += 0
  1457. dwStyle := Floor(dwStyle)
  1458. wCaption := "" wCaption
  1459. wInfo := "" wInfo
  1460. wButton1 := "" wButton1
  1461. dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  1462. dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_SHOWDLG_PTR)
  1463. if(ErrorLevel || dwAddress==0) {
  1464. ErrorLevel := ERROR_READ_MEMORY
  1465. return false
  1466. }
  1467. writeString(hGTA, pParam1, wCaption)
  1468. if(ErrorLevel)
  1469. return false
  1470. writeString(hGTA, pParam2, wInfo)
  1471. if(ErrorLevel)
  1472. return false
  1473. writeString(hGTA, pParam3, wButton1)
  1474. if(ErrorLevel)
  1475. return false
  1476. dwLen := 5 + 7*5 + 5 + 1
  1477. VarSetCapacity(injectData, dwLen, 0)
  1478. NumPut(0xB9, injectData, 0, "UChar")
  1479. NumPut(dwAddress, injectData, 1, "UInt")
  1480. NumPut(0x68, injectData, 5, "UChar")
  1481. NumPut(0, injectData, 6, "UInt")
  1482. NumPut(0x68, injectData, 10, "UChar")
  1483. NumPut(pParam1+StrLen(wCaption), injectData, 11, "UInt")
  1484. NumPut(0x68, injectData, 15, "UChar")
  1485. NumPut(pParam3, injectData, 16, "UInt")
  1486. NumPut(0x68, injectData, 20, "UChar")
  1487. NumPut(pParam2, injectData, 21, "UInt")
  1488. NumPut(0x68, injectData, 25, "UChar")
  1489. NumPut(pParam1, injectData, 26, "UInt")
  1490. NumPut(0x68, injectData, 30, "UChar")
  1491. NumPut(dwStyle, injectData, 31, "UInt")
  1492. NumPut(0x68, injectData, 35, "UChar")
  1493. NumPut(1, injectData, 36, "UInt")
  1494. NumPut(0xE8, injectData, 40, "UChar")
  1495. offset := dwFunc - (pInjectFunc + 45)
  1496. NumPut(offset, injectData, 41, "Int")
  1497. NumPut(0xC3, injectData, 45, "UChar")
  1498. writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  1499. if(ErrorLevel)
  1500. return false
  1501. hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1502. if(ErrorLevel)
  1503. return false
  1504. waitForSingleObject(hThread, 0xFFFFFFFF)
  1505. closeProcess(hThread)
  1506. return true
  1507. }
  1508.  
  1509. ServerPatchMotor(bool)
  1510. {
  1511. if(!SAMP())
  1512.  return -1
  1513.     If(bool)
  1514.         writeMemory(hGTA, dwSAMP + 0xB2510, 0xC20400, 3, "UInt")
  1515.     else{
  1516.         writeMemory(hGTA, dwSAMP + 0xB2510, 0x55, 1, "UChar")
  1517.         writeMemory(hGTA, dwSAMP + 0xB2511, 0xEC8B, 2, "Short")
  1518.     }
  1519. }
  1520.  
  1521. giveWeapon(weaponID, ammo := 100, selectSlot := true) {
  1522.     found := false
  1523.     for i, o in weapons {
  1524.         if weaponID is integer
  1525.         {
  1526.             if (weaponID == o.ID) {
  1527.                 found := true
  1528.                 break
  1529.             }
  1530.         }
  1531.         else {
  1532.             if (weaponID == o.MACRO) {
  1533.                 found := true
  1534.                 break
  1535.             }
  1536.         }
  1537.     }
  1538.     if (!found)
  1539.         return false
  1540.     dwAddress := readDWORD(hGTA, ADDR_CPED_PTR)
  1541.     if (ErrorLevel || !dwAddress)
  1542.         return false
  1543.     if (!callWithParams(hGTA, 0x4087E0, [["i", o.MODEL], ["i", 2]], true, false))
  1544.         return false
  1545.     if (!callWithParams(hGTA, 0x40EA10, [["i", 0]], true, false))
  1546.         return false
  1547.     if (!callWithParams(hGTA, 0x5E6080, [["i", dwAddress], ["i", o.ID], ["i", ammo], ["i", o.SLOT]], false, true))
  1548.         return false
  1549.     if (selectSlot) {
  1550.         if (!callWithParams(hGTA, 0x5E61F0, [["i", dwAddress], ["i", o.SLOT]], false, true))
  1551.             return false
  1552.     }
  1553.     return true
  1554. }
  1555.  
  1556. RepairVehicle()
  1557. {
  1558.     If(!SAMP())
  1559.         return false   
  1560.    
  1561.     pointer := readDWORD(hGTA, 0xBA18FC)
  1562.     if(pointer)
  1563.     {
  1564.         writeMemory(hGTA, pointer + 1216, 1000, 4, "FLOAT")
  1565.     }
  1566. }
  1567.  
  1568. GPCI_DEBAN(){
  1569.     if(!SAMP())
  1570.         return
  1571.    GPCI :=  readString(hGTA, 0xC9236C, 50)
  1572.    AddChatMessage("{FF0000}" . GPCI)
  1573.    writeString(hGTA, 0xC9236C, "PPPLLFAPFFFPFFFFPL")
  1574. }
  1575.  
  1576. showDialog_(style, caption, text, button1, button2 := "", id := 1)
  1577. {
  1578.     style += 0
  1579.     style := Floor(style)
  1580.     id += 0
  1581.     id := Floor(id)
  1582.     caption := "" caption
  1583.     text := "" text
  1584.     button1 := "" button1
  1585.     button2 := "" button2
  1586.     if (id < 0 || id > 32767 || style < 0 || style > 5 || StrLen(caption) > 64 || StrLen(text) > 4096 || StrLen(button1) > 10 || StrLen(button2) > 10)
  1587.     return false
  1588.     dwFunc := dwSAMP + FUNC_SAMP_SHOWDIALOG
  1589.     dwAddress := readDWORD(hGTA, dwSAMP + SAMP_DIALOG_STRUCT_PTR)
  1590.     if (ErrorLevel || !dwAddress)
  1591.     {
  1592.         ErrorLevel := ERROR_READ_MEMORY
  1593.         return false
  1594.     }
  1595. }
  1596. getPageSize() {
  1597.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_CHATMSG_PTR)
  1598.     if (ErrorLevel || !dwAddress)
  1599.         return false
  1600.     pagesize := readMemory(hGTA, dwAddress, 1, "Byte")
  1601.     if (ErrorLevel)
  1602.         return false
  1603.     ErrorLevel := ERROR_OK
  1604.     return pagesize
  1605. }
  1606. stringMath(string) {
  1607.     while(position := RegExMatch(string, "\(([^\(\)]+)\)", regex_)) {
  1608.         string := RegExReplace(string, "\(([^\(\)]+)\)", stringMath(regex_1), blahblah, 1, position)
  1609.     }
  1610.    
  1611.     while(position := RegExMatch(string, "(\+|-)? *((?:\+|-)?\d+)\^((?:\+|-)?\d+)", regex_)) {
  1612.         string := RegExReplace(string, "(\+|-)? *((?:\+|-)?\d+)\^((?:\+|-)?\d+)", regex_1 . regex_2**regex_3, blahblah, 1, position)
  1613.     }
  1614.     while(position := RegExMatch(string, "(\+|-)? *((?:\+|-)?\d+(?:[\.\,]\d+)?) *(\*|/) *((?:\+|-)?\d+(?:[\.\,]\d+)?) *", regex_)) {
  1615.         if(regex_3 == "*")
  1616.             string := RegExReplace(string, "(\+|-)? *((?:\+|-)?\d+(?:[\.\,]\d+)?) *\* *((?:\+|-)?\d+(?:[\.\,]\d+)?) *", regex_1 . regex_2*regex_4, blahblah, 1, position)
  1617.         if(regex_3 == "/")
  1618.             string := RegExReplace(string, "(\+|-)? *((?:\+|-)?\d+(?:[\.\,]\d+)?) */ *((?:\+||)?\d+(?:[\.\,]\d+)?) *", regex_1 . regex_2/regex_4, blahblah, 1, position)
  1619.     }
  1620.     while(position := RegExMatch(string, " *((?:\+|-)?\d+(?:[\.\,]\d+)?) *(\+|-) *((?:\+|-)?\d+(?:[\.\,]\d+)?) *", regex_)) {
  1621.         if(regex_2 == "+")
  1622.             string := RegExReplace(string, " *((?:\+|-)?\d+(?:[\.\,]\d+)?) *\+ *((?:\+|-)?\d+(?:[\.\,]\d+)?) *", regex_1+regex_3, blahblah, 1, position)
  1623.         if(regex_2 == "-")
  1624.             string := RegExReplace(string, " *((?:\+|-)?\d+(?:[\.\,]\d+)?) *- *((?:\+|-)?\d+(?:[\.\,]\d+)?) *", regex_1-regex_3, blahblah, 1, position)
  1625.     }
  1626.    
  1627.     if(RegExMatch(string, "^-?\d+(?:\.\d+)?$"))
  1628.         return string
  1629.    
  1630.     return "ERROR"
  1631. }
  1632.  
  1633. getCheckpointPos() {
  1634.  
  1635.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1636.     if (ErrorLevel || !dwAddress) {
  1637.         ErrorLevel := ERROR_READ_MEMORY
  1638.         return -1
  1639.     }
  1640.  
  1641.     offsets := [0xC, 0x10, 0x14]
  1642.     for i, o in offsets
  1643.         pos%i% := readMemory(hGTA, dwAddress + o, 4, "Float")
  1644.  
  1645.     if (ErrorLevel) {
  1646.         ErrorLevel := ERROR_READ_MEMORY
  1647.         return -1
  1648.     }
  1649.  
  1650.     ErrorLevel := ERROR_OK
  1651.     return [pos1, pos2, pos3]
  1652. }
  1653.  
  1654. isCheckpointEnabled() {
  1655.  
  1656.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1657.     if (ErrorLevel || !dwAddress) {
  1658.         ErrorLevel := ERROR_READ_MEMORY
  1659.         return false
  1660.     }
  1661.  
  1662.     isSet := readMemory(hGTA, dwAddress + 0x24, 1, "Byte")
  1663.     if (ErrorLevel) {
  1664.         ErrorLevel := ERROR_READ_MEMORY
  1665.         return false
  1666.     }
  1667.  
  1668.     ErrorLevel := ERROR_OK
  1669.     return isSet
  1670. }
  1671.  
  1672. getCheckpointSize() {
  1673.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_INCHAT_PTR)
  1674.     if (ErrorLevel || !dwAddress) {
  1675.         ErrorLevel := ERROR_READ_MEMORY
  1676.             return -1
  1677.     }
  1678.    
  1679.     size := readMemory(hGTA, dwAddress + 0x18, 4, "Float")
  1680.     if (ErrorLevel) {
  1681.         ErrorLevel := ERROR_READ_MEMORY
  1682.         return -1
  1683.     }
  1684.    
  1685.     ErrorLevel := ERROR_OK
  1686.     return size
  1687. }
  1688.  
  1689. UpdateObjectPool(){
  1690.     If(!SAMP())
  1691.         return false
  1692.     global ObjectPool := []
  1693.     dwObjects := SAMP_pPool("Object")
  1694.     Loop, % SAMP_MAX_OBJECTS
  1695.     {
  1696.         i := A_Index-1
  1697.         iIsListed := readDWORD(hGTA, dwObjects + 0x4 + i * 0x4)
  1698.         If(iIsListed < 0)
  1699.             continue
  1700.         object := readDWORD(hGTA, dwObjects + 4004 + i * 0x4)
  1701.         If(object == 0)
  1702.             continue
  1703.         pGTAEntity := readDWORD(hGTA, object + 0x40)
  1704.         ModelID := readMemory(hGTA, pGTAEntity + 0x22, 2, "UShort")
  1705.         ObjectPos := GetPositionByPed(pGTAEntity)
  1706.         ObjectPool[i] := Object("MODEL", ModelID, "fX", ObjectPos[1], "fY", ObjectPos[2], "fZ", ObjectPos[3])
  1707.         AddChatMessage("Model: " ModelID ", xPos: " ObjectPos[1] ", yPos: " ObjectPos[2] ", zPos: " ObjectPos[3])
  1708.     }
  1709. }
  1710.  
  1711. addDeathMessage(killee := "", killer := "", killeeColor := 0xFFFFFFFF, killerColor := 0xFFFFFFFF, reason := 255) {
  1712.     dwFunc := dwSAMP + 0x66930
  1713.     dwAddress := readDWORD(hGTA, dwSAMP + ADDR_SAMP_KILLINFO_OFFSET)
  1714.     if (ErrorLevel)
  1715.         return false
  1716.     writeString(hGTA, pParam1, killee)
  1717.     if (ErrorLevel)
  1718.         return false
  1719.     writeString(hGTA, pParam2, killer)
  1720.     if (ErrorLevel)
  1721.         return false
  1722.     // mov + 5 * push + call + retn
  1723.     dwLen := 5 + 5 * 5 + 5 + 1
  1724.     VarSetCapacity(injectData, dwLen, 0)
  1725.     NumPut(0xB9, injectData, 0, "UChar")
  1726.     NumPut(dwAddress, injectData, 1, "UInt")
  1727.     NumPut(0x68, injectData, 5, "UChar")
  1728.     NumPut(reason, injectData, 6, "UInt")
  1729.     NumPut(0x68, injectData, 10, "UChar")
  1730.     NumPut(killerColor, injectData, 11, "UInt")
  1731.     NumPut(0x68, injectData, 15, "UChar")
  1732.     NumPut(killeeColor, injectData, 16, "UInt")
  1733.     NumPut(0x68, injectData, 20, "UChar")
  1734.     NumPut(pParam1, injectData, 21, "UInt")
  1735.     NumPut(0x68, injectData, 25, "UChar")
  1736.     NumPut(pParam2, injectData, 26, "UInt")
  1737.     NumPut(0xE8, injectData, 30, "UChar")
  1738.     offset := dwFunc - (pInjectFunc + 35)
  1739.     NumPut(offset, injectData, 31, "Int")
  1740.     NumPut(0xC3, injectData, 35, "UChar")
  1741.     writeRaw(hGTA, pInjectFunc, &injectData, dwLen)
  1742.     if (ErrorLevel)
  1743.         return false
  1744.     hThread := createRemoteThread(hGTA, 0, 0, pInjectFunc, 0, 0, 0)
  1745.     if (ErrorLevel)
  1746.         return false
  1747.     waitForSingleObject(hThread, 0xFFFFFFFF)
  1748.     closeProcess(hThread)
  1749.     return true
  1750. }
  1751.  
  1752. GetPlayerWeaponID()
  1753. {   return __DWORD(0xBAA410)
  1754. }
  1755.  
  1756. __READ(dwAddress, dwLen, type, ByRef dwRead=0)
  1757. {   VarSetCapacity(dwRead, dwLen)
  1758. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", dwLen, "UInt", 0, "UInt*", 0)
  1759. dwRead := NumGet(dwRead, 0, type)
  1760. return dwRead
  1761. }
  1762. __FLOAT(dwAddress, ByRef dwRead=0)
  1763. {   VarSetCapacity(dwRead, 4)
  1764. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", 4, "UInt*", 0, "UInt", 0)
  1765. dwRead := NumGet(dwRead, 0, "Float")
  1766. return dwRead
  1767. }
  1768. __INT(dwAddress, ByRef dwRead=0)
  1769. {   VarSetCapacity(dwRead, 4)
  1770. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", 4, "UInt", 0, "UInt*", 0)
  1771. dwRead := NumGet(dwRead, 0, "Int")
  1772. return dwRead
  1773. }
  1774. __SHORT(dwAddress, ByRef dwRead=0)
  1775. {   VarSetCapacity(dwRead, 2)
  1776. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", 4, "UInt", 0, "UInt*", 0)
  1777. dwRead := NumGet(dwRead, 0, "Short")
  1778. return dwRead
  1779. }
  1780. __STRING(dwAddress, size, ByRef dwRead=0)
  1781. {   VarSetCapacity(dwRead, size)
  1782. DllCall("ReadProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", dwRead, "UInt", size, "UInt*", 0, "UInt", 0)
  1783. if A_IsUnicode
  1784. dwRead := __ansiToUnicode(dwRead)
  1785. }
  1786. __WRITE(dwAddress, writevalue, size=4, type="Int")
  1787. {   VarSetCapacity(finalvalue,size, 0)
  1788. NumPut(writevalue,finalvalue,0,type)
  1789. DllCall("WriteProcessMemory","Uint",hGTA,"Uint",dwAddress,"Uint",&finalvalue,"Uint",size,"Uint",0)
  1790. }
  1791. __WSTRING(dwAddress, wString)
  1792. {   sString := wString
  1793. if A_IsUnicode
  1794. sString := __unicodeToAnsi(wString)
  1795. DllCall("WriteProcessMemory", "UInt", hGTA, "UInt", dwAddress, "Str", sString, "UInt", StrLen(wString) + 1, "UInt", 0, "UInt")
  1796. }
  1797. __RAW(dwAddress, pBuffer, dwLen)
  1798. {   DllCall("WriteProcessMemory", "UInt", hGTA, "UInt", dwAddress, "UInt", pBuffer, "UInt", dwLen, "UInt", 0, "UInt")
  1799. }
  1800.  
  1801. SampPatchDisableAnticheat(){
  1802. for i, patch in SAMP_AC_PATCHES
  1803. {
  1804. tobin(d, SAMP_AC_BYTES[i])
  1805. __RAW(g_dwSAMP_Addr + patch, &d, StrLen(SAMP_AC_BYTES[i]) / 2)
  1806. }
  1807. }
  1808.  
  1809. SetRanges(toggle)
  1810. {
  1811. loop % ptr_ranges.MaxIndex()
  1812. {
  1813. If(toggle) {
  1814. __WRITE(ptr_ranges[A_Index], 9999, 4, "float")
  1815. }else{
  1816. __WRITE(ptr_ranges[A_Index], ranges[A_Index], 4, "float")
  1817. }
  1818. }
  1819. }
  1820.  
  1821. patchHealth() {
  1822.     if (!SAMP())
  1823.         return false
  1824.     for i, o in healthPatches
  1825.         NOP(o.ADDRESS + (o.SAMP ? dwSAMP : 0), o.SIZE)
  1826.     return true
  1827. }
  1828. unpatchHealth() {
  1829.     if (!SAMP())
  1830.         return false
  1831.     for i, o in healthPatches {
  1832.         VarSetCapacity(byteCode, o.SIZE)
  1833.         NumPut(o.INSTRUCTION, &byteCode, 0, "UShort")
  1834.         NumPut(0x540, &byteCode, 2, "UInt")
  1835.         writeRaw(hGTA, o.ADDRESS + (o.SAMP ? dwSAMP : 0), &byteCode, o.SIZE)
  1836.     }
  1837.     return true
  1838. }
  1839. patchDeath() {
  1840.     if (!SAMP())
  1841.         return false
  1842.     patchHealth()
  1843.     VarSetCapacity(byteCode, 8)
  1844.     NumPut(0xB8, &byteCode, 0, "Byte")
  1845.     NumPut(0x24C2, &byteCode, 5, "UShort")
  1846.     writeRaw(hGTA, 0x630040, &byteCode, 8)
  1847.     if (ErrorLevel)
  1848.         return false
  1849.     return true
  1850. }
  1851. unpatchDeath() {
  1852.     if (!SAMP())
  1853.         return false
  1854.     unpatchHealth()
  1855.     VarSetCapacity(byteCode, 8)
  1856.     NumPut(0x56, &byteCode, 0, "Byte")
  1857.     NumPut(0xF18B, &byteCode, 1, "UShort")
  1858.     NumPut(0xE8, &byteCode, 3, "Byte")
  1859.     NumPut(0xFFFEA368, &byteCode, 4, "UInt")
  1860.     writeRaw(hGTA, 0x630040, &byteCode, 8)
  1861.     if (ErrorLevel)
  1862.         return false
  1863.     return true
  1864. }
  1865.  
  1866. NOP(address, size) {
  1867.     VarSetCapacity(byteCode, size)
  1868.     Loop %size%
  1869.         NumPut(0x90, &byteCode, A_Index - 1, "Byte")
  1870.     writeRaw(hGTA, address, &byteCode, size)
  1871.     return
  1872. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement