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

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
крч, как я понял хук получает все тексты со всего сервера, что пиздец как херово, я хочу например что бы выводились в чат только те возле которых я в радиусе 50 метров..
Но в итоге, я заебался чёт думать как бы его так сделать, вот допустим код ниже, как он работает, я например даже подойду к 3d тексту, о нем мне в чат не отобразит инфы, если зайти в интерьер и выйти - сразу же появится инфа, я хз почему так, то есть он как что ли отображается только когда ты не в вирт мире, или инте, это меня немного настораживает...

кароче подскажите, как мне отображать инфу о 3D тексте, в цикле, то есть я хочу получать каждую секунду инфу о этом тексте, но эта инфа как минимум не каждую секунду получается, и вообще со всего сервера все 3d тексты собирает, что мне вообще не нужно.
Можно ли как-то это обойти?)
Код:
{$CLEO .cs}
{$INCLUDE SF}
0000:
repeat
wait 150
until 0afa:
0BE3: raknet setup_incoming_rpc_hook @DHOOK
0B34: samp register_client_command "test" to_label @cmd
while true
wait 0
end

:cmd
if 23@ == 0
then
23@ = 1
chatmsg "активатед" -1
else
chatmsg "деактеватед" -1
23@ = 0
end
SAMP.CmdRet()

:DHOOK
if 23@ == 1
then
0BE5: raknet 0@ = get_hook_param PARAM_PACKETID
  if 0@ == RPC_SCRCREATE3DTEXTLABEL
  then
  0BE5: raknet 1@ = get_hook_param PARAM_BITSTREAM
  0BE7: raknet 2@ = bit_stream_read 1@ type BS_TYPE_SHORT
  0BE7: raknet 3@ = bit_stream_read 1@ type BS_TYPE_INT
  0BE7: raknet 4@ = bit_stream_read 1@ type BS_TYPE_FLOAT // x
  0BE7: raknet 5@ = bit_stream_read 1@ type BS_TYPE_FLOAT // y
  0BE7: raknet 6@ = bit_stream_read 1@ type BS_TYPE_FLOAT
  0BE7: raknet 7@ = bit_stream_read 1@ type BS_TYPE_FLOAT
  0BE7: raknet 8@ = bit_stream_read 1@ type BS_TYPE_BYTE
  0BE7: raknet 9@ = bit_stream_read 1@ type BS_TYPE_SHORT
  0BE7: raknet 10@ = bit_stream_read 1@ type BS_TYPE_SHORT
  alloc 11@ 1024
  0C11: memset 11@ 0 1024
  0BF4: raknet bit_stream 1@ decode_string 11@ size 1023
     if 0C29: 20@ = stristr string1 11@ string2 "Владелец"
     then
     00A0: store_actor $PLAYER_ACTOR position_to 12@ 13@ 14@
     0509: 17@ = distance_between_XY 12@ 13@ and_XY 4@ 5@
       if 17@ < 50.0
       then
       chatmsg "---------------------------------------------------" -1
       chatmsg "%s" 3@ 11@
       chatmsg "---------------------------------------------------" -1
       free 11@
       end
     end
  end
end
0BE0: raknet hook_ret true
неужели так сложно сохранять в свой массив эти самые 3д тексты и при их уничтожении, так же удалять из массива

а чтоб потом читать в цикле + радиусе, то нужно просто пройтись по своему массиву
 

Vovich

HOT
Проверенный
717
197
неужели так сложно сохранять в свой массив эти самые 3д тексты и при их уничтожении, так же удалять из массива

а чтоб потом читать в цикле + радиусе, то нужно просто пройтись по своему массиву
а что если юзать Rpc update 3dtext (вместо create 3dtext, то есть я так понимаю отвечает за обновление уже созданного 3D текста , вот мне это и нужно посути, если текст обновится - выполнить действия, не подскажешь структуру этого rpc? ну или хотя бы из каких параметров состоит.

*ну на крайняк, идея с массивом збс, я чет и не подумал
 

hnnssy

Известный
Друг
2,684
2,768
а что если юзать Rpc update 3dtext (вместо create 3dtext, то есть я так понимаю отвечает за обновление уже созданного 3D текста , вот мне это и нужно посути, если текст обновится - выполнить действия, не подскажешь структуру этого rpc? ну или хотя бы из каких параметров состоит.

*ну на крайняк, идея с массивом збс, я чет и не подумал
update 3d text приходит вроде как когда уже существующий 3д текст меняется, а не когда он появляется в стриме
 
Последнее редактирование:

01EG

Известный
Проверенный
639
364
Можно ли как-то проверить есть ли оружие у персонажа?
Пиздец, конкретнее вопрос плиз.
Офк, можно. Если ты про своего актера.
Так же можно, если ты про другого игрока, точно знаю, что можно узнать, если он в твоей зоне стрима и держит определенное оружие в руках, если он просто в зоне стрима, то не уверен.

Опкоды:
0491: actor $PLAYER_ACTOR has_weapon 46 - должен проверять, имеет ли актер это оружие вообще при себе(не знаю, как сервер отреагирует на подобный запрос информации)
02D8: actor $PLAYER_ACTOR current_weapon == 28 - проверяет, держит ли в руках актер, определенное оружие.
 
  • Нравится
Реакции: RedBoxWhite

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
Пиздец, конкретнее вопрос плиз.
Офк, можно. Если ты про своего актера.
Так же можно, если ты про другого игрока, точно знаю, что можно узнать, если он в твоей зоне стрима и держит определенное оружие в руках, если он просто в зоне стрима, то не уверен.

Опкоды:
0491: actor $PLAYER_ACTOR has_weapon 46 - должен проверять, имеет ли актер это оружие вообще при себе(не знаю, как сервер отреагирует на подобный запрос информации)
02D8: actor $PLAYER_ACTOR current_weapon == 28 - проверяет, держит ли в руках актер, определенное оружие.
никак не отреагирует, с чего это сервер вообще должен реагировать на этот опкод?
 

01EG

Известный
Проверенный
639
364
никак не отреагирует, с чего это сервер вообще должен реагировать на этот опкод?
имхо, информация о наличии оружия у игрока в кобуре(типо в слоте оружия каком-то) - серверная и чтоб получить ее нужно иметь доступ ? Мы же не можем получить количество денег у игрока. Мб сравнение не совсем подходящее, но все таки.
Я имею ввиду, что имеет ли доступ обычный игрок на сервере, о состоянии оружия игрока.
 

01EG

Известный
Проверенный
639
364
Почему не проверяет, как нужно ? Строка выводиться не мною, а сервером. Так же строка не стандартного цвета.
CLEO:
while true
wait 0
alloc 0@ 128
0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 21@ prefix_color_to 22@
    if 0C18: 5@ = strstr string1 0@ string2 "Материалов: 10000/10000"
    then
    Actor.StorePos(1 3@ 4@ 5@)
    3@ -= 10.0
    4@ -= 10.0
    Actor.PutAt(1 3@ 4@ 5@)
    free 0@
    end
end
 

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,754
Почему не проверяет, как нужно ? Строка выводиться не мною, а сервером. Так же строка не стандартного цвета.
CLEO:
while true
wait 0
alloc 0@ 128
0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 21@ prefix_color_to 22@
    if 0C18: 5@ = strstr string1 0@ string2 "Материалов: 10000/10000"
    then
    Actor.StorePos(1 3@ 4@ 5@)
    3@ -= 10.0
    4@ -= 10.0
    Actor.PutAt(1 3@ 4@ 5@)
    free 0@
    end
end
ну ты сам ответил на свой вопрос, в логе чата сампа скопируй эту строку и вставь со всеми символами
может там "Материалов: {FFFFFF}10000/10000"
 

RedBoxWhite

Известный
337
27
Что не так? На проверке, держит ли персонаж оружие крашит.
CLEO:
                if 0AB0: 80
                then
                while 0AB0: 80
                wait 0
                end
                Actor.StorePos($Player_Actor, 0@, 1@, 2@)
                Actor.PutAt($Player_Actor, - - -)
                wait 500
                Actor.PutAt($Player_Actor, - - -)
                if 02D8: Actor $PLAYER_ACTOR current_weapon == 24
                then
                Actor.PutAt($Player_Actor, - - -)
                end
                wait 500
                Actor.PutAt($Player_Actor, 0@, 1@, 2@)