Вопросы по CLEO-скриптингу

Thomas_Johnson

Известный
Проверенный
183
21
Еще один вопрос - слышал, что в переменной может храниться несколько разделов, например 0@[1] , но как на тот момент времени я не запоминал, пытаясь проделать сейчас - ничего не выходит, но вариантов нету, не хватает переменных
 

fonarik

Известный
206
3
Всем привет,я столкнулся с проблемой отчета,необходимо 10 штрафов,ну а как всем известно - народ любит офаться и поэтому я решил написать клео,но оно крашит,прошу исправить ошибку
{$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
 

fonarik

Известный
206
3
Как сделать отправку ложных координат актера?
p.s в папке SampFuncs я не понял как делать
 

Scheitaan

Известный
125
18
Не компилирует скрипты с подобными штуками "call @disable_script 1 10" Пишет просто что неизвестная команда, как порешать?
 

DubStep_

Известный
292
52
Вот готовый скрипт с ног, а нужно чтобы он был с машины
Код:
// 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
 

spiceman

GOWNIK <3
104
35
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Еще один вопрос - слышал, что в переменной может храниться несколько разделов, например 0@[1] , но как на тот момент времени я не запоминал, пытаясь проделать сейчас - ничего не выходит, но вариантов нету, не хватает переменных

Массивы это. Почитай о них в справке SB.
Вот тебе пример. Сохраняет пинг всех подключенных игроков и выводит пинг рандомного игрока.
Код:
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
 

fonarik

Известный
206
3
как сделать отправку ложных координат на сервер?В папке SF там описано,но я не понял,прошу Вас,помогите мне.
 

Thomas_Johnson

Известный
Проверенный
183
21
как сделать отправку ложных координат на сервер?В папке 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
Т.е. единственное, что тебе надо - просто скопировать и вставить свои координаты
 
R

Ricci

Гость
Вот готовый скрипт с ног, а нужно чтобы он был с машины
Код:
// 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
Т.е. единственное, что тебе надо - просто скопировать и вставить свои координаты

Это пример на 0.3е, он не будет работать правильно, тебя будет убивать
 
  • Нравится
Реакции: itsLegend