Другое Полезные сниппеты и SCM-функции

Opcode.eXe

Известный
84
112
So you wanna edit a vehicle's handling value? Like make a car go faster?
With these two snippets you can do it!


0AB1: @GET_HANDLING 3 FROM_VEHICLE_MODEL #SULTAN OFFSET 0x1C SIZE 4 _TO: 0@
Код:
//0AB1: @GET_HANDLING 3 FROM_VEHICLE_MODEL #SULTAN OFFSET 0x1C SIZE 4 _TO: 0@
:GET_HANDLING
0@ *= 4
0@ += 0xA9B0C8
0A8D: 0@ 0@ 4 0
0@ += 0x4A
0A8D: 0@ 0@ 2 0
0@ *= 0xE0
0@ += 0xC2B9DC
005A: 0@ 1@
0A8D: 3@ 0@ 2@ 0
0AB2: 1 3@

0AB1: @SET_HANDLING 4 FROM_VEHICLE_MODEL #SULTAN OFFSET 0x1C SIZE 4 INTO: -1.0
Код:
//0AB1: @SET_HANDLING 4 FROM_VEHICLE_MODEL #SULTAN OFFSET 0x1C SIZE 4 INTO: -1.0
:SET_HANDLING
0@ *= 4
0@ += 0xA9B0C8
0A8D: 0@ 0@ 4 0
0@ += 0x4A
0A8D: 0@ 0@ 2 0
0@ *= 0xE0
0@ += 0xC2B9DC
005A: 0@ 1@
0A8C: 0@ 2@ 3@ 0
0AB2: 0

Here is a list of all the offsets:

Код:
//-------------------------------
//List of Handling Offsets:
{
0x0  = [dword] Index/Identifier
0x4  = fMass
0x8  = 1.0 / fMass
0xC  = fTurnMass
0x10 = fDragMult
0x14 = CentreOfMass.x
0x18 = CentreOfMass.y
0x1C = CentreOfMass.z
0x20 = [byte] nPercentSubmerged
0x24 = fMass * 8.0000001E-1 / nPercentSubmerged
0x28 = fTractionMultiplier
0x74 = [byte] TransmissionData.nDriveType
0x75 = [byte] TransmissionData.nEngineType
0x76 = [byte] TransmissionData.nNumberOfGears
0x7C = TransmissionData.fEngineAcceleration (Multiplied by 3.9999999E-4)
0x80 = TransmissionData.fEngineInertia
0x84 = TransmissionData.fMaxVelocity (Multiplied by 5.5555599E-3)
0x94 = fBrakeDeceleration (Multiplied by 3.9999999E-4)
0x98 = fBrakeBias
0x9C = [byte] bABS
0xA0 = fSteeringLock
0xA4 = fTractionLoss
0xA8 = fTractionBias
0xAC = fSuspensionForceLevel
0xB0 = fSuspensionDampingLevel
0xB4 = fSuspensionHighSpdComDamp
0xB8 = Suspension upper limit
0xBC = Suspension lower limit
0xC0 = Suspension bias between front and rear
0xC4 = Suspension anti-dive multiplier
0xC8 = fCollisionDamageMultiplier (multiplier not yet found)
0xCC = [hex] modelFlags
0xD0 = [hex] handlingFlags
0xD4 = fSeatOffsetDistance
0xD8 = [dword] nMonetaryValue
0xDC = [byte] Front lights
0xDD = [byte] Rear lights
0xDE = [byte] Vehicle anim group 
}

Example:
- Making the SULTAN take no damage when colliding with somehting:
Код:
{$CLEO .cs}
0000:
0AB1: @SET_HANDLING 4 FROM_VEHICLE_MODEL #SULTAN OFFSET 0xC8 SIZE 4 INTO: 0.0 //fCollisionDamageMultiplier
004E: END_THIS_THREAD
 

SR_team

like pancake
BH Team
4,707
6,347
Узнаем дамаг оружия в руке (для сингла не пойдет)
0ab1: call @DamageConvert 0 0@
CLEO:
:DamageConvert
0A96: 2@ = actor $PLAYER_ACTOR struct
2@ += 0x72C
0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0
0470: 0@ = actor $PLAYER_ACTOR current_weapon
0085: 1@ = 0@
if 2@ == 2
    then 1@ += 25
    end
if 2@ == 3
    then 1@ += 36
    end
1@ *= 112
1@ += 13150904
1@ += 0x22
0A8D: 1@ = read_memory 1@ size 2 virtual_protect 0
0093: 1@ = integer 1@ to_float
if and
0@ >= 22
0@ <> 25
0@ <> 26
0@ <> 27
0@ <= 34
    then 1@ /= 3.0434782608695652173913043478261
    end
ret 1 1@
 

Opcode.eXe

Известный
84
112
This Sync's pessenger seat.

Код:
0AB1: @PACKET_PASSENGER_SYNC 1 CAR_HANDLE 0@
:PACKET_PASSENGER_SYNC
IF
0B2C: samp 30@ = get_vehicle_id_by_car_handle 0@
THEN
    0AC8: 31@ = allocate_memory_size 24
    0C0D: struct 31@ offset 0 size 2  = 30@
    0C0D: struct 31@ offset 2 size 1  = 1
    0C0D: struct 31@ offset 3 size 1  = 0
    0C0D: struct 31@ offset 4 size 1  = 50
    0C0D: struct 31@ offset 5 size 1  = 0
    0C0D: struct 31@ offset 6 size 2  = 0
    0C0D: struct 31@ offset 8 size 2  = 0                                                             
    0C0D: struct 31@ offset 10 size 2 = 0 
    0B3D: raknet 29@ = new_bit_stream
    0B40: raknet bit_stream 29@ write 216 type 0 size 1
    0B40: raknet bit_stream 29@ write 31@ type 5 size 63
    0B8B: raknet send bit_stream 29@
    0B3E: raknet delete_bit_stream 29@
    0AC9: free_allocated_memory 31@       
END
0AB2: 0
 
  • Нравится
Реакции: Garrus

Opcode.eXe

Известный
84
112
Does anyone have a function to change a cars model into another model?
Example: My current cars model == #SULTAN, When i press X my car model changes to #INFERNUS.

Кто-нибудь есть функцию для изменения автомобилей модели в другую модель?
Пример: Мой текущий автомобили модели == #SULTAN, когда я нажимаю X мои модели автомобиля изменения #INFERNUS.



 

FYP

Известный
Администратор
1,757
5,684
Does anyone have a function to change a cars model into another model?
Example: My current cars model == #SULTAN, When i press X my car model changes to #INFERNUS.

Кто-нибудь есть функцию для изменения автомобилей модели в другую модель?
Пример: Мой текущий автомобили модели == #SULTAN, когда я нажимаю X мои модели автомобиля изменения #INFERNUS.
you can destroy your car and create new with same matrix, speed and other parameters. also you need to rewrite car handle and struct in samp vehicle pool.
there is some function, but it's buggy:
Код:
:ChangeCarModel // 0@:car_handle, 1@:model
Model.Load(1@)
038B: load_requested_models
while not model.Available(1@)
    wait 0
end
0A97: 2@ = car 0@ struct
0AA6: call_method 0x6D6A40 2@ num_params 1 pop 0 1@
ret 0
 
  • Нравится
Реакции: hnnssy и Opcode.eXe

gcode

нестандартное звание звание звание звание звани...
Друг
789
357
CLEO:
0AC8: 30@ = allocate_memory_size 64
repeat
    wait 50
    0AB1: call_scm_func @nowkeys 1 array 30@ num_of_keys_to 29@  
until 29@ > 0
0AF8: samp add_message_to_chat "Зажато %d клавиш:" color 0xEAEAEA 29@
29@ -= 1
for 28@ = 0 to 29@
    0C0E: 27@ = array 30@ element 28@
    0AF8: samp add_message_to_chat "id %d" color 0xEAEAEA 27@
end 
0AC9: free_allocated_memory 30@

:nowkeys
2@ = 0
for 1@ = 1 to 222
    if
        0ab0: 1@
    then
        0C0F: array 1@ element 2@ = 1@
        2@ += 1
    end
end
0ab2: 1 2@
 

Opcode.eXe

Известный
84
112
With this function you can create beeps with frequency. Currently it gets 1 warning message. I have no idea why it happens. //FIXED: Thx to Dark_Knight
Код:
//0AB1: @MAKE_BEEP 2 FREQUENCY 0x25 TIME 1000
:MAKE_BEEP
IF
0AA2: 31@ = load_library "kernel32.dll"
THEN
    IF
    0AA4: 30@ = get_proc_address "Beep" library 31@
    THEN
        0AA5: _CALL_ 30@ num_params 2 pop 0 1@ 0@
    END
    0AA3: free_library 31@
END
0AB2: 0
 
  • Нравится
Реакции: Сэнд

Dark_Knight

Me, me and me.
Друг
4,056
2,074
try this
Код:
0AA5: _CALL_ 30@ num_params 2 pop 0 {_In_ DWORD dwDuration}0@ {_In_ DWORD dwFreq}1@ {return value }2@
 

Opcode.eXe

Известный
84
112
With these functions you can move the Gta Sa Camera.

0AB1: @MouseMOVE_DOWN 0
0AB1: @MouseMOVE_UP 0
0AB1: @MouseMOVE_LEFT 0
0AB1: @MouseMOVE_RIGHT 0

I already made a Aimbot with these things and its really cool.


Код:
:MouseMOVE_RIGHT
0AA2: 31@ = load_library "user32.dll"
0AA4: 30@ = get_proc_address "mouse_event" library 31@ 
IF
0A4C:   mouse_not_inverted_vertically
THEN
    0AA5: call 30@ num_params 5 pop 0 0 0 0 -2 0
ELSE
    0AA5: call 30@ num_params 5 pop 0 0 0 0 2 0
END
0AA3: free_library 31@
0AB2: 0

:MouseMOVE_LEFT
0AA2: 31@ = load_library "user32.dll"
0AA4: 30@ = get_proc_address "mouse_event" library 31@ 
IF
0A4C:   mouse_not_inverted_vertically
THEN
    0AA5: call 30@ num_params 5 pop 0 0 0 0 2 0
ELSE
    0AA5: call 30@ num_params 5 pop 0 0 0 0 -2 0
END
0AA3: free_library 31@
0AB2: 0

:MouseMOVE_DOWN
0AA2: 31@ = load_library "user32.dll"
0AA4: 30@ = get_proc_address "mouse_event" library 31@ 
0AA5: call 30@ num_params 5 pop 0 0 0 -2 0 0
0AA3: free_library 31@
0AB2: 0

:MouseMOVE_UP
0AA2: 31@ = load_library "user32.dll"
0AA4: 30@ = get_proc_address "mouse_event" library 31@ 
0AA5: call 30@ num_params 5 pop 0 0 0 2 0 0
0AA3: free_library 31@
0AB2: 0
 
  • Нравится
Реакции: p1cador

spiceman

GOWNIK <3
104
35
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Описание: Стандартный аудиострим SAMP
Использование:
CLEO:
0AC8: 0@ = allocate_memory_size SizeUri
0AD3: 0@ = format "someUri"
// exp: 0AD3: 0@ = format "http:%c%cmysite.com%ctrack-1.mp3" 0x2F 0x2F 0x2F
0AB1: @PlayAudioStream 1 uri 0@
wait 50
0AB1: @StopAudioStream 0

CLEO:
:PlayAudioStream
// 0AB1: @PlayAudioStream 1 uri 1@
0C17: 1@ = strlen 0@
 
2@ = RakNet.NewBitStream()
RakNet.Write(2@, 1@, BS_TYPE_BYTE, 0x01) // Длина строки
RakNet.Write(2@, 0@, BS_TYPE_ARRAY, 1@) // URI записи
for 1@ = 0 to 0xE
    RakNet.Write(2@, 0x00, BS_TYPE_BYTE, 0x01)
end
RakNet.Write(2@, 0x48, BS_TYPE_BYTE, 0x1)
RakNet.Write(2@, 0x42, BS_TYPE_BYTE, 0x1)
RakNet.Write(2@, 0x00, BS_TYPE_BYTE, 0x1)
0BF6: raknet emul_rpc_receive 0x29 bit_stream 2@
RakNet.DeleteBitStream(2@)
0AB2: ret 0
 
:StopAudioStream
0@ = RakNet.NewBitStream()
0BF6: raknet emul_rpc_receive 0x2A bit_stream 0@
RakNet.DeleteBitStream(0@)
0AB2: ret 0
 

Opcode.eXe

Известный
84
112
0AB1: @GetCurrentPcUserName 0 0@
0@ = "Opcode" - PC NAME...

Код:
//0AB1: @GetCurrentPcUserName 0 0@
:GetCurrentPcUserName
IF
0AA2: 31@ = load_library "Advapi32.dll"
THEN 
    0AC8: 1@ = allocate_memory_size 260
    IF
    0AA4: 30@ = get_proc_address "GetUserNameA" library 31@
    THEN 
        0AC8: 0@ = allocate_memory_size 260   
        0AA5: call 30@ num_params 2 pop 0 0@ 1@
        0AC9: free_allocated_memory 0@
    ELSE
        0AD3: 1@ = "ERROR"
    END
    0AA3: free_library 31@
END
0AB2: 1 1@
 
  • Нравится
Реакции: The Spark

SR_team

like pancake
BH Team
4,707
6,347
by Seemann
0x514970 - метода класса СViewport (0xB6F028), который записывает в буфер координаты площади прицеливания.
Код:
.text:00514970 ; int __cdecl CViewport__gettargetarea(float targetrange,float x,float y,float z,int* ll_corner,int* ur_corner)
1 параметр - максимальное расстояние до точки прицеливания (см. weapon.dat).
2, 3, 4 - координаты точки отуда ведется прицеливание (позиция актера/игрока)
5 - указатель на буфер, в который будут записаны координаты нижнего левого угла площади прицеливания
6 - указатель на буфер, в который будут записаны координаты верхнего правого угла площади прицеливания
Грубо говоря, линия между этими двумя углами - это траектория полета пули. Длина траектории равна 1 параметру. Координаты в первом буфере - место вылета пули. Координаты во втором буфере - это примерная точка, куда она попадет (туда же направлен и прицел).
Буфер должен быть размером в 12 байтов, чтобы хранить 3 переменные XYZ.

Вот как можно применить это в коде:
Код:
029B: 28@ = init_object 1224 at 2480.562 -1666.865 12.8757 // создаем ящик

while true
    wait 0

    00A0: store_actor $PLAYER_ACTOR position_to 0@ 1@ 2@  // записываем начальные координаты
    //                                                            {$13-$15} {$16-$18} {z} {y} {x} {target range}
    0AA6: call_method 0x514970 struct 0xB6F028 num_params 6 pop 0 0xA49994  0xA499A0  2@  1@  0@  20.0 // вызываем метод. буфер - это группы глоб. переменных
    01BC: put_object 28@ at $13 $14 $15  // перемещаем ящик в точку прицеливания
end
 

SR_team

like pancake
BH Team
4,707
6,347
Получаем количество подключенных скриптов. Аналогично можно записать свое значение.
CLEO:
0ab1: call @ScriptCounter 0 1@
 
:ScriptCounter
0AA2: 31@ = load_library "kernel32.dll"
0AA4: 30@ = get_proc_address "GetModuleHandleA" library 31@
0AA7: call_function 30@ num_params 1 pop 0 "CLEO.asi" 0@
0@ += 0x43154
0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
ret 1 1@
 
  • Нравится
Реакции: p1cador, Niko и XyJluraH_J

Opcode.eXe

Известный
84
112
Код:
0AB1: @GET_CAMERA_FACING_ANGLES 0 Z_AND_Y 0@ 1@
0@ = Camera_Z_Angle_from_Player
1@ = Camera_Y_Angle_from_Player

Example:

Код:
{$CLEO .cs}
0000:
 
WHILE TRUE
WAIT 0
    0AB1: @GET_FACING_ANGLES 0 Z_AND_Y 0@ 1@
    083E: set_actor $PLAYER_ACTOR rotation 1@ 0.0 0@ IN AIR!!
    0812: $PLAYER_ACTOR "FALL_SKYDIVE" "PARACHUTE" 4.0 1 1 1 1 -1
END

Код:
//0AB1: @GET_CAMERA_FACING_ANGLES 0 Z_AND_Y 0@ 1@
:GET_CAMERA_FACING_ANGLES
00A0: store_actor $PLAYER_ACTOR position_to 1@ 2@ 3@   
0AA6: call_method 0x514970 struct 0xB6F028 num_params 6 pop 0 0xA49994 0xA499A0 3@ 2@ 1@ 20.0
0AB1: call_scm_func @getYAngleBetweenPoints_ULKXK 6 from_XYZ $13 $14 $15 and_XYZ 1@ 2@ 3@ store_to 5@
0AB1: call_scm_func @getZAngleBetweenPoints_ULKXK 4 from_XY $13 $14 and_XY 1@ 2@ store_to 4@
5@ += 90.0
0AB2: 2 4@ 5@
:getYAngleBetweenPoints_ULKXK
0509: 6@ = distance_between_XY 0@ 1@ and_XY 3@ 4@
0063: 2@ -= 5@
0604: get_Z_angle_for_point 6@ 2@ store_to 7@
0AB2: ret 1 7@
:getZAngleBetweenPoints_ULKXK
0063: 0@ -= 2@
0063: 1@ -= 3@
0604: get_Z_angle_for_point 0@ 1@ store_to 4@
0AB2: ret 1 4@
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,447
Описание:
Получение уровня розыска локального игрока(вашего) в SAMP'е.​

Вызов:
0AB1: @getWantedLevel 0 return_to 0@​

Функция:
Код:
:getWantedLevel
0A8D: 0@ = read_memory 0x58DB60 size 1 virtual_protect 0
0AB2: ret 1 0@

Значения:
0@ - wanted level.​