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

fonarik

Известный
206
3
Кто может подсказать функция отправки лож. координат на сервер из машины?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Кто может подсказать функция отправки лож. координат на сервер из машины?
Код:
:SendFakePosInCar
// Ex.: 0AB1: @SendFakePosInCar 3 0.0 0.0 0.0
// By Даниил
0B2B: samp 3@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B24: samp 3@ = get_player_ptr 3@
3@ += 177
0AC8: 4@ = allocate_memory_size 63
0C10: memcpy destination 4@ source 3@ size 63
0C0D: struct 4@ offset 24 size 4 = 0@
0C0D: struct 4@ offset 28 size 4 = 1@
0C0D: struct 4@ offset 32 size 4 = 2@
0B3D: raknet 5@ = new_bit_stream
0B40: raknet bit_stream 5@ write PACKET_VEHICLE_SYNC type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 63
0B42: raknet send bit_stream 5@ priority PRIORITY_HIGH reliability UNRELIABLE_SEQUENCED ordering_channel 0
0B3E: raknet delete_bit_stream 5@
0AC9: free_allocated_memory 4@
0AB2: 0

Пример:
Код:
0AB1: @SendFakePosInCar 3 X 55.0 Y 55.0 Z 20.0

Всё ещё не понимаю... почему плюсуем, к структуре игрока, 177...
 

fonarik

Известный
206
3
Код:
:SendFakePosInCar
// Ex.: 0AB1: @SendFakePosInCar 3 0.0 0.0 0.0
// By Даниил
0B2B: samp 3@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B24: samp 3@ = get_player_ptr 3@
3@ += 177
0AC8: 4@ = allocate_memory_size 63
0C10: memcpy destination 4@ source 3@ size 63
0C0D: struct 4@ offset 24 size 4 = 0@
0C0D: struct 4@ offset 28 size 4 = 1@
0C0D: struct 4@ offset 32 size 4 = 2@
0B3D: raknet 5@ = new_bit_stream
0B40: raknet bit_stream 5@ write PACKET_VEHICLE_SYNC type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 63
0B42: raknet send bit_stream 5@ priority PRIORITY_HIGH reliability UNRELIABLE_SEQUENCED ordering_channel 0
0B3E: raknet delete_bit_stream 5@
0AC9: free_allocated_memory 4@
0AB2: 0

Пример:
Код:
0AB1: @SendFakePosInCar 3 X 55.0 Y 55.0 Z 20.0

Всё ещё не понимаю... почему плюсуем, к структуре игрока, 177...

не работает твоя функция
 

fonarik

Известный
206
3
Код:
// 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}
{$include /includes/RakNetDefines.txt}
//-------------MAIN---------------
0000: NOP
if
0@ = SAMP.Base()
jf @Noname_46
 
:Noname_18
  not SAMP.Available
jf @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
jf @Noname_158
wait 0
if
0AB0:  key_pressed 110
 
wait 0
jf @Noname_104
 
:Noname_104
jf @Noname_151
0@ = 1
0ACD: show_text_highpriority "~g~Activated" time 1500
 
:Noname_151
jump @Noname_318
 
:Noname_158
wait 0
0AB1: call_scm_func @SendFakePosInCar 3 414.1 5151. 151.1
wait 500
if or
not Actor.Driving($PLAYER_ACTOR)
0AB0:  key_pressed 50
jf @Noname_158
0ACD: show_text_highpriority " ~r~Deactivated" time 1500
0@ = 0
 
:Noname_318
jump @Noname_55
 
:SendFakePosInCar
0B2B: samp 3@ = get_player_id_by_actor_handle $PLAYER_ACTOR
0B24: samp 3@ = get_player_ptr 3@
3@ += 177
0AC8: 4@ = allocate_memory_size 63
0C10: memcpy destination 4@ source 3@ size 63
0C0D: struct 4@ offset 24 size 4 = 0@
0C0D: struct 4@ offset 28 size 4 = 1@
0C0D: struct 4@ offset 32 size 4 = 2@
0B3D: raknet 5@ = new_bit_stream
0B40: raknet bit_stream 5@ write PACKET_VEHICLE_SYNC type BS_TYPE_BYTE size 1
0B40: raknet bit_stream 5@ write 4@ type BS_TYPE_ARRAY size 63
0B42: raknet send bit_stream 5@ priority PRIORITY_HIGH reliability UNRELIABLE_SEQUENCED ordering_channel 0
0B3E: raknet delete_bit_stream 5@
0AC9: free_allocated_memory 4@
0AB2: 0
В чем тут ошибка тогда?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Код:
    struct stPassengerData    passengerData;//+0      [23]+0
    struct stAimData        aimData;//+23          [32]+23
    struct stTrailerData    trailerData;//+55      (54)+55
    struct stOnFootData        onFootData;//+109      (68)+109
    struct stInCarData        inCarData;//+177
[Структура игрока]+177 = указатель на структуру inCarData
В samp.h находятся все структуры.

Странно. Я смотрю по исходникам от FYP'а ( http://code.google.com/p/mod-s0beit-sa/source/browse/trunk/src/samp.h ), толи это ? :D
 

Giggle

Новичок
9
0
Я делаю фейк текста, у меня скрипт активируется по нажатию определенной клавиши, но мне надо чтобы он активировался по команде в чат. (/test например)
Как это реализовать?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Я делаю фейк текста, у меня скрипт активируется по нажатию определенной клавиши, но мне надо чтобы он активировался по команде в чат. (/test например)
Как это реализовать?

Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available // Sampfuncs
 
wait 0
0B34: samp register_client_command "aga" to_label @command_aga // Регистрируем команду
 
while true // Это
    wait 0  // Если нужна
end          // Только одна команда, т.е. без меток. В скрипте будет/будут только зарегистрированы команды.(думаю понятно объяснил :D)
 
:command_aga // Метка, которая будет "вызываться" если была введена команда
wait 0 // необходимо, если нет цикла while true wait 0 end (по идее, здесь не нужно, но я напишу :) )
0B35: samp 0@ = get_last_command_params // Получаем параметры команды(т.е., /aga 5 или /aga ага
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@ // Форматируем(если нужно). Обычно 0B35: samp 0@ = get_last_command_params возвращает текст.
// Если нужен текст, то форматирование не нужно.
then
// и тут уже Ваш код
end
0B43: samp cmd_ret //
 
  • Нравится
Реакции: Giggle

Giggle

Новичок
9
0
Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available // Sampfuncs
 
wait 0
0B34: samp register_client_command "aga" to_label @command_aga // Регистрируем команду
 
while true // Это
    wait 0  // Если нужна
end          // Только одна команда, т.е. без меток. В скрипте будет/будут только зарегистрированы команды.(думаю понятно объяснил :D)
 
:command_aga // Метка, которая будет "вызываться" если была введена команда
wait 0 // необходимо, если нет цикла while true wait 0 end (по идее, здесь не нужно, но я напишу :) )
0B35: samp 0@ = get_last_command_params // Получаем параметры команды(т.е., /aga 5 или /aga ага
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@ // Форматируем(если нужно). Обычно 0B35: samp 0@ = get_last_command_params возвращает текст.
// Если нужен текст, то форматирование не нужно.
then
// и тут уже Ваш код
end
0B43: samp cmd_ret //


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

/aga 555
И в чат пишет:
Вы ввели число 555

Как в чат вывести сообщение я знаю :D
0AF8: samp add_message_to_chat "TESTTEST" color 0xF5DEB3
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Спасибо, а теперь как сделать так чтобы он выводил в чат то число, которое игрок ввел после команды?:D
Ну например:

/aga 555
И в чат пишет:
Вы ввели число 555

Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
wait 0
0B34: samp register_client_command "testnumber" to_label @test_number // Число
0B34: samp register_client_command "teststring" to_label @test_string // Текст
 
while true
    wait 0
end
 
:test_number
0B35: samp 0@ = get_last_command_params
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@
then
    if
        0@ > 0
    then
        0AF8: samp add_message_to_chat "Вы ввели число %d" color 0xFFFFFF 1@
    end
end
0B43: samp cmd_ret
 
:test_string
0B35: samp 0@ = get_last_command_params
0C17: 1@ = strlen 0@ // Размер строки
if
    1@ > 0
then
    0AF8: samp add_message_to_chat "Вы написали: %s" color 0xFFFFFF 0@
else
    0AF8: samp add_message_to_chat "Вы ничего не написали" color 0xFFFFFF
end
0B43: samp cmd_ret
 
  • Нравится
Реакции: Giggle

Giggle

Новичок
9
0
Код:
{$CLEO}
 
0000:
 
if
    8AF7: get_samp_base_to 33@
then
    0A93: end_custom_thread
end
repeat
    wait 400
until 0AFA: is_samp_structures_available
 
wait 0
0B34: samp register_client_command "testnumber" to_label @test_number // Число
0B34: samp register_client_command "teststring" to_label @test_string // Текст
 
while true
    wait 0
end
 
:test_number
0B35: samp 0@ = get_last_command_params
if
    0AD4: 0@ = scan_string 0@ format "%d" 1@
then
    if
        0@ > 0
    then
        0AF8: samp add_message_to_chat "Вы ввели число %d" color 0xFFFFFF 1@
    end
end
0B43: samp cmd_ret
 
:test_string
0B35: samp 0@ = get_last_command_params
0C17: 1@ = strlen 0@ // Размер строки
if
    1@ > 0
then
    0AF8: samp add_message_to_chat "Вы написали: %s" color 0xFFFFFF 0@
else
    0AF8: samp add_message_to_chat "Вы ничего не написали" color 0xFFFFFF
end
0B43: samp cmd_ret

Спасибо!
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,460
Код:
wait 3000
0B2E: 0@ = read_module_memory "samp.dll" offset 0x13D60 size 2
while true
    wait 0
    // тут код... 0AB0...
        gosub @on
    end
 
    // тут код... 0AB0
        gosub @off
    end
end
 
:on
wait 0
0B2E: 1@ = read_module_memory "samp.dll" offset 0x13D60 size 2
0AF8: samp add_message_to_chat "0@ = %d , 1@ = %d" color 0xFF61BB 0@ 1@
if
    003B: 1@ == 0@
then
    0B2D: write_module_memory "samp.dll" offset 0x13D60 value 0xC390 size 2
end
return
 
:off
wait 0
0B2E: 1@ = read_module_memory "samp.dll" offset 0x13D60 size 2
0AF8: samp add_message_to_chat "0@ = %d , 1@ = %d" color 0xFF61BB 0@ 1@
if
    803B: not 1@ == 0@
then
    0B2D: write_module_memory "samp.dll" offset 0x13D60 value 0@ size 2
end
return

Адрес памяти не меняется(не записывается значение)... т.е. после активации, я не могу его отключить...
Что делать?
Так, как это NOP SetPlayerHealth, то при изменении HP сервером, происходит краш...