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

SR_team

like pancake
BH Team
4,720
6,372
так а в чем разница вообще? если с int будет лучше, то я бы int поставил :D

int - целые числа
float - дробные числа
string - строка
server_name и server_port - должны быть int, в твоем случае, никак не string.
Зачем server_name в int? там ведь название!
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Зачем server_name в int? там ведь название!
Ты слепой, у него там должно быть int.
Посмотри форматирование строки.
Код:
0AF8: samp msg "Connected to Samp-Rp.Ru | Server: %s | Client: 0.3x" color 0xB0C4DE 1@
0AF5: write_string "02" to_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"
0AF4: 1@ = read_string_from_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"
Где ты string видишь?
Зачем выделять лишнюю память, если можно применить int?


Если сделать через int, то получится:
Код:
0AF8: samp msg "Connected to Samp-Rp.Ru | Server: %02d | Client: 0.3x" color 0xB0C4DE 1@
0AF1: write_int 2 to_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"
0AF0: 1@ = get_int_from_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"

По сути, он неправильно назвал ячейку(или название) server_name , так было б доходчивее: server_num
 

SR_team

like pancake
BH Team
4,720
6,372
Ты слепой, у него там должно быть int.
Посмотри форматирование строки.
Код:
0AF8: samp msg "Connected to Samp-Rp.Ru | Server: %s | Client: 0.3x" color 0xB0C4DE 1@
0AF5: write_string "02" to_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"
0AF4: 1@ = read_string_from_ini_file "cleo\FAKE.ini" section "NAME" key "server_name"
Где ты string видишь?
Сори не заметил. Думал он строку целиком хочет указывать
 

patrikmister

Новичок
88
7
может кто-нибудь дать пример кода, который при вводе команды посылает на сервер пакеты о местонахождении в определенных координатах?
 

SR_team

like pancake
BH Team
4,720
6,372
может кто-нибудь дать пример кода, который при вводе команды посылает на сервер пакеты о местонахождении в определенных координатах?

Из мануала по опкодам SF от FYP. Меня кикает, как не пробовал.
PHP:
:SendOnfootFakePosition
// 0@, 1@, 2@ = coords
// Example: 0AB1: call @SendOnfootFakePosition 3 xyz 10@ 11@ 12@
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
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Мануал для 0.3d(вроде бы) был написан.
В 0.3x другие оффсеты на struct_onFootData

3@ += 613 на 3@ += 109
 

patrikmister

Новичок
88
7
Из мануала по опкодам SF от FYP. Меня кикает, как не пробовал.
PHP:
:SendOnfootFakePosition
// 0@, 1@, 2@ = coords
// Example: 0AB1: call @SendOnfootFakePosition 3 xyz 10@ 11@ 12@
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

а комманду где установить? и чтобы при ее вводе срабатывал скрипт?
 

SR_team

like pancake
BH Team
4,720
6,372
а комманду где установить? и чтобы при ее вводе срабатывал скрипт?

Это функция, сначало ставишь команду как обычно, потом цикл
Код:
:Label
wait 0
jump @Label
а потом метка на которую ссылается команда
Код:
:Метка_на_которую_ссылается_команда
wait 0
0AB1: call @SendOnfootFakePosition 3 xyz 10@ 11@ 12@
cmd_ret

Вроде так!
 

Sneyk_Next

Новичок
7
0
Код:
// This file was decompiled using sascm.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}
 
//-------------MAIN---------------
0000: NOP
if
0@ = SAMP.Base()
jf @Fake_67
end_thread
 
:Fake_67
wait 400
SAMP.Available
jf @Fake_67
if
8AAB: not file_exists "CLEO\INI\Fake.ini"
jf @Fake_577
0AF1: write_int 0 to_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Имя_Фамилия"
0AF1: write_int 0 to_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Какое должно выпасть число"
 
:Fake_577
0AC8: 0@ = allocate_memory_size 40
0AC8: 1@ = allocate_memory_size 70
0AF4: 0@ = read_string_from_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Имя_Фамилия"
0AF4: 1@ = read_string_from_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Какое должно выпасть число"
 
:Fake_1066
wait 0
if and
0AB0: key_pressed 18
0AB0: key_pressed 65
jf @Fake_1066
0AF8: samp add_message_to_chat " %s бросил(а) игральные кости на стол, выпало %s из 12 " color 9276927 0@ 1@
0A8C: write_memory 0@ size 40 value 0 virtual_protect 0
0A8C: write_memory 1@ size 70 value 0 virtual_protect 0
wait 3000
jump @Fake_1066

В чем проблема? нет никакой реакции
 

SR_team

like pancake
BH Team
4,720
6,372
Код:
// This file was decompiled using sascm.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}
 
//-------------MAIN---------------
0000: NOP
if
0@ = SAMP.Base()
jf @Fake_67
end_thread
 
:Fake_67
wait 400
SAMP.Available
jf @Fake_67
if
8AAB: not file_exists "CLEO\INI\Fake.ini"
jf @Fake_577
0AF1: write_int 0 to_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Имя_Фамилия"
0AF1: write_int 0 to_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Какое должно выпасть число"
 
:Fake_577
0AC8: 0@ = allocate_memory_size 40
0AC8: 1@ = allocate_memory_size 70
0AF4: 0@ = read_string_from_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Имя_Фамилия"
0AF4: 1@ = read_string_from_ini_file "CLEO\INI\Fake.ini" section "FakeChat" key "Какое должно выпасть число"
 
:Fake_1066
wait 0
if and
0AB0: key_pressed 18
0AB0: key_pressed 65
jf @Fake_1066
0AF8: samp add_message_to_chat " %s бросил(а) игральные кости на стол, выпало %s из 12 " color 9276927 0@ 1@
0A8C: write_memory 0@ size 40 value 0 virtual_protect 0
0A8C: write_memory 1@ size 70 value 0 virtual_protect 0
wait 3000
jump @Fake_1066

В чем проблема? нет никакой реакции

Нельзя использовать кирилицу в ini. Поддерживаю вопрос дарка. Зачем?
 

hnnssy

Известный
Друг
2,684
2,750
Как сделать телепортацию без сброса анимации, угла камеры и тд?