- 183
- 21
Еще один вопрос - слышал, что в переменной может храниться несколько разделов, например 0@[1] , но как на тот момент времени я не запоминал, пытаясь проделать сейчас - ничего не выходит, но вариантов нету, не хватает переменных
{$CLEO}
thread "fticket"
0662: "MADE BY fonarik"
0662: "FOR www.blasthack.net"
const
COLOR_ERROR = 0xDD0000
COLOR_SUCCESS = 0xFF6AB1FF
end
if not 0@ = SAMP.Base()
then 0A93:
end
repeat
wait 200
until SAMP.Available()
0B34: samp register_client_command "fticket" to_label @fticket
while true
wait 0
end
:fticket
0B35: samp 3@ = get_last_command_params
0AD4: 29@ = scan_string 3@ format "%d%d%s" 2@ 15@ 16@
if
SAMP.IsPlayerConnected(2@)
then
4@ = SAMP.GetPlayerNickname(2@)
0AF8: samp add_message_to_chat "%s оплатил штраф в размере %d% %s" color COLOR_SUCCESS 4@ 15@ 16@
else
0AF8: samp add_message_to_chat "Синтаксис команды: /fticket 151 1111 бег по пч" color COLOR_ERROR
end
0B43: samp cmd_ret
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
0000: NOP
if
0@ = SAMP.Base()
else_jump @Noname_46
:Noname_18
not SAMP.Available
else_jump @Noname_39
wait 500
jump @Noname_18
:Noname_39
jump @Noname_48
:Noname_46
end_thread
:Noname_48
0@ = 0
:Noname_55
wait 0
if
0@ == 0
else_jump @Noname_129
if
0ADC: test_cheat "1122"
else_jump @Noname_122
0@ = 1
0ACD: show_text_highpriority "~g~Activated" time 1500
:Noname_122
jump @Noname_204
:Noname_129
Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
0AB1: call_scm_func @Noname_211 3 -1736.96 115.7 4.15
0AF9: samp say_msg "/tunload"
0AB1: call_scm_func @Noname_211 3 1@ 2@ 3@
0@ = 0
:Noname_204
jump @Noname_55
:Noname_211
3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR)
3@ = SAMP.GetPlayerStruct(3@)
3@ += 109
0AC8: 4@ = allocate_memory_size 68
0AB1: call_scm_func @Noname_379 3 4@ 3@ 68
0085: 5@ = 4@ // (int)
5@ += 6
0A8C: write_memory 5@ size 4 value 0@ virtual_protect 0
5@ += 4
0A8C: write_memory 5@ size 4 value 1@ virtual_protect 0
5@ += 4
0A8C: write_memory 5@ size 4 value 2@ virtual_protect 0
5@ = RakNet.NewBitStream()
RakNet.Write(5@, 212, BS_TYPE_BYTE, 1)
RakNet.Write(5@, 4@, BS_TYPE_ARRAY, 68)
RakNet.Send(5@, 1, 1, 0)
RakNet.DeleteBitStream(5@)
0AC9: free_allocated_memory 4@
0AB2: ret 0
:Noname_379
2@ -= 1
3@ = 0
:Noname_393
0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0
1@ += 1
0@ += 1
3@ += 1
001D: 3@ > 2@ // (int)
else_jump @Noname_393
0AB2: ret 0
Но у меня какого-то хера получилось :Dнельзя сканировать стринг на наличие стринга
ой забыл сказать, что тп на синхре :D
Еще один вопрос - слышал, что в переменной может храниться несколько разделов, например 0@[1] , но как на тот момент времени я не запоминал, пытаясь проделать сейчас - ничего не выходит, но вариантов нету, не хватает переменных
var
0@: array 1000 of int
1@: int
2@: int
end
for 1@ = 0 to 999
if SAMP.IsPlayerConnected(1@)
then
2@ = SAMP.GetPlayerPing(1@)
0@[1@] = 2@
end
end
1@ = random(0,999)
if SAMP.IsPlayerConnected(1@)
then
2@ = 0@[1@]
0ad1: "Player %d ping: %d" 1200 1@ 2@
end
sampPatch[] = "Mute Server Chat" &0 0 0xAEE0 "" "C390"Как занопить адрес сампа 0xAEE0 Server Chat?
как сделать отправку ложных координат на сервер?В папке SF там описано,но я не понял,прошу Вас,помогите мне.
if 0AB0: key_pressed 0x36 // 6
then
0AB1: call @SendOnfootFakePosition 3 xyz 1024.0 768.0 32.0
// при удержании кнопки 6, вы будете отправлять серверу информацию о том, что вы находитесь в позиции 1024.0 768.0 32.0
wait 30 // чтобы сервер не зафлудило пакетами, иначе вы начнете сильно лагать или соединение с сервером будет потеряно
end
end
const
sizeof_stOnFootData = 68 // размер структуры информации о игроке пешком
end
// struct stOnFootData ( size = 68 ) // структура данных синхронизации пешком с пронумерованными оффсетами
//uint16_tsLeftRightKeys; + 0
//uint16_tsUpDownKeys; + 2
//uint16_tsKeys; + 4
//floatfPosition[3]; + 6 //нас интересует позиция
//floatfQuaternion[4]; + 18
//uint8_tbyteHealth; + 34
//uint8_tbyteArmor; + 35
//uint8_tbyteCurrentWeapon; + 36
//uint8_tbyteSpecialAction; + 37
//floatfMoveSpeed[3]; + 38
//floatfSurfingOffsets[3]; + 50
//uint16_tsSurfingVehicleID; + 62
//intiCurrentAnimationID; + 64
:SendOnfootFakePosition
3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR) //ид из хендла
3@ = SAMP.GetPlayerStruct(3@) //структура из ид
3@ += 613 // получаем указатель на локальную onFootData, чтобы потом её скопировать в наш буффер, изменив в нём только позицию
0AC8: 4@ = allocate_memory_size sizeof_stOnFootData // выделим память для буффера такого же размера, каким является размер структуры данных синхронизации пешком
0AB1: call @memcpy 3 destination 4@ source 3@ size sizeof_stOnFootData // моя функция побайтового копирования данных одного участка памяти в другой
0085: 5@ = 4@ // нужно чтоб сохранить адрес на начало нашего буффера
5@ += 6 // прибавим оффсет на fPosition[0] ( X ), т.к. нам кроме позиции ничего не нужно
0A8C: write_memory 5@ size 4 value 0@ virtual_protect 0 // запишем новое значение позиции, в переменной 0@ - хранится X (об этом позже)
5@ += 4 // размер типа float составляет 4 байта, а т.к. в массиве все элементы расположены упорядоченно, прибавив 4 байта, мы получим указатель на fPosition[1] ( Y )
0A8C: write_memory 5@ size 4 value 1@ virtual_protect 0 // и запишем новое значение координаты Y
5@ += 4 // fPosition[2] ( Z )
0A8C: write_memory 5@ size 4 value 2@ virtual_protect 0
0B3D: raknet 5@ = new_bit_stream
0B40: raknet bit_stream 5@ write PACKET_PLAYER_SYNC type BS_TYPE_BYTE size 1 // пишем ид пакета, PACKET_PLAYER_SYNC - это синхронизация пешком, тип обязательно должен быть указан BS_TYPE_BYTE
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size sizeof_stOnFootData // запишем наш буффер в битстрим, т.к. буффер - это массив байтов, укажем тип BS_TYPE_ARRAY и размер, равный размеру буффера
0B42: raknet send bit_stream 5@ priority PRIORITY_HIGH reliability UNRELIABLE_SEQUENCED ordering_channel 0 // отправим всё это на сервер
0B3E: raknet delete_bit_stream 5@ // освобождаем память выделенную под BitStream
0AC9: free_allocated_memory 4@ // освобождаем память выделенную под буффер
0AB2: ret 0 // выходим из функции
:memcpy
var
0@ : integer
1@ : integer
2@ : integer
3@ : integer
end
// 0@ - destination, 1@ - source, 2@ - size
// Example: 0AB1: call @memcpy 3 destination 0@ source 1@ size 2@
dec(2@)
for 3@ = 0 to 2@
0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0
0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0
1@ += 1
0@ += 1
end
0AB2: ret 0
Вот готовый скрипт с ног, а нужно чтобы он был с машины
Код:// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- 0000: NOP if 0@ = SAMP.Base() else_jump @Noname_46 :Noname_18 not SAMP.Available else_jump @Noname_39 wait 500 jump @Noname_18 :Noname_39 jump @Noname_48 :Noname_46 end_thread :Noname_48 0@ = 0 :Noname_55 wait 0 if 0@ == 0 else_jump @Noname_129 if 0ADC: test_cheat "1122" else_jump @Noname_122 0@ = 1 0ACD: show_text_highpriority "~g~Activated" time 1500 :Noname_122 jump @Noname_204 :Noname_129 Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@) 0AB1: call_scm_func @Noname_211 3 -1736.96 115.7 4.15 0AF9: samp say_msg "/tunload" 0AB1: call_scm_func @Noname_211 3 1@ 2@ 3@ 0@ = 0 :Noname_204 jump @Noname_55 :Noname_211 3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR) 3@ = SAMP.GetPlayerStruct(3@) 3@ += 109 0AC8: 4@ = allocate_memory_size 68 0AB1: call_scm_func @Noname_379 3 4@ 3@ 68 0085: 5@ = 4@ // (int) 5@ += 6 0A8C: write_memory 5@ size 4 value 0@ virtual_protect 0 5@ += 4 0A8C: write_memory 5@ size 4 value 1@ virtual_protect 0 5@ += 4 0A8C: write_memory 5@ size 4 value 2@ virtual_protect 0 5@ = RakNet.NewBitStream() RakNet.Write(5@, 212, BS_TYPE_BYTE, 1) RakNet.Write(5@, 4@, BS_TYPE_ARRAY, 68) RakNet.Send(5@, 1, 1, 0) RakNet.DeleteBitStream(5@) 0AC9: free_allocated_memory 4@ 0AB2: ret 0 :Noname_379 2@ -= 1 3@ = 0 :Noname_393 0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0 1@ += 1 0@ += 1 3@ += 1 001D: 3@ > 2@ // (int) else_jump @Noname_393 0AB2: ret 0
Что не понятного то?
Т.е. единственное, что тебе надо - просто скопировать и вставить свои координатыКод:if 0AB0: key_pressed 0x36 // 6 then 0AB1: call @SendOnfootFakePosition 3 xyz 1024.0 768.0 32.0 // при удержании кнопки 6, вы будете отправлять серверу информацию о том, что вы находитесь в позиции 1024.0 768.0 32.0 wait 30 // чтобы сервер не зафлудило пакетами, иначе вы начнете сильно лагать или соединение с сервером будет потеряно end end const sizeof_stOnFootData = 68 // размер структуры информации о игроке пешком end // struct stOnFootData ( size = 68 ) // структура данных синхронизации пешком с пронумерованными оффсетами //uint16_tsLeftRightKeys; + 0 //uint16_tsUpDownKeys; + 2 //uint16_tsKeys; + 4 //floatfPosition[3]; + 6 //нас интересует позиция //floatfQuaternion[4]; + 18 //uint8_tbyteHealth; + 34 //uint8_tbyteArmor; + 35 //uint8_tbyteCurrentWeapon; + 36 //uint8_tbyteSpecialAction; + 37 //floatfMoveSpeed[3]; + 38 //floatfSurfingOffsets[3]; + 50 //uint16_tsSurfingVehicleID; + 62 //intiCurrentAnimationID; + 64 :SendOnfootFakePosition 3@ = SAMP.GetSAMPPlayerIDByActorHandle($PLAYER_ACTOR) //ид из хендла 3@ = SAMP.GetPlayerStruct(3@) //структура из ид 3@ += 613 // получаем указатель на локальную onFootData, чтобы потом её скопировать в наш буффер, изменив в нём только позицию 0AC8: 4@ = allocate_memory_size sizeof_stOnFootData // выделим память для буффера такого же размера, каким является размер структуры данных синхронизации пешком 0AB1: call @memcpy 3 destination 4@ source 3@ size sizeof_stOnFootData // моя функция побайтового копирования данных одного участка памяти в другой 0085: 5@ = 4@ // нужно чтоб сохранить адрес на начало нашего буффера 5@ += 6 // прибавим оффсет на fPosition[0] ( X ), т.к. нам кроме позиции ничего не нужно 0A8C: write_memory 5@ size 4 value 0@ virtual_protect 0 // запишем новое значение позиции, в переменной 0@ - хранится X (об этом позже) 5@ += 4 // размер типа float составляет 4 байта, а т.к. в массиве все элементы расположены упорядоченно, прибавив 4 байта, мы получим указатель на fPosition[1] ( Y ) 0A8C: write_memory 5@ size 4 value 1@ virtual_protect 0 // и запишем новое значение координаты Y 5@ += 4 // fPosition[2] ( Z ) 0A8C: write_memory 5@ size 4 value 2@ virtual_protect 0 0B3D: raknet 5@ = new_bit_stream 0B40: raknet bit_stream 5@ write PACKET_PLAYER_SYNC type BS_TYPE_BYTE size 1 // пишем ид пакета, PACKET_PLAYER_SYNC - это синхронизация пешком, тип обязательно должен быть указан BS_TYPE_BYTE 0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size sizeof_stOnFootData // запишем наш буффер в битстрим, т.к. буффер - это массив байтов, укажем тип BS_TYPE_ARRAY и размер, равный размеру буффера 0B42: raknet send bit_stream 5@ priority PRIORITY_HIGH reliability UNRELIABLE_SEQUENCED ordering_channel 0 // отправим всё это на сервер 0B3E: raknet delete_bit_stream 5@ // освобождаем память выделенную под BitStream 0AC9: free_allocated_memory 4@ // освобождаем память выделенную под буффер 0AB2: ret 0 // выходим из функции :memcpy var 0@ : integer 1@ : integer 2@ : integer 3@ : integer end // 0@ - destination, 1@ - source, 2@ - size // Example: 0AB1: call @memcpy 3 destination 0@ source 1@ size 2@ dec(2@) for 3@ = 0 to 2@ 0A8D: 4@ = read_memory 1@ size 1 virtual_protect 0 0A8C: write_memory 0@ size 1 value 4@ virtual_protect 0 1@ += 1 0@ += 1 end 0AB2: ret 0