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

p1cador

cerf
Проверенный
220
359
@Boyenerji
1) wait 0 в твоем цикле работает не всегда
2) не юзай циклы в функциях, сделай вызов функции в цикле
3) нет ret
 

Boyenerji

Известный
97
1
@Boyenerji
1) wait 0 в твоем цикле работает не всегда
2) не юзай циклы в функциях, сделай вызов функции в цикле
3) нет ret

ret не помогает.
Функция вызывается в цикле у меня.
Вот:
CLEO:
repeat
wait 0
until samp.Available()

while true
wait 0
    if
    0AB0: 104
    then
        repeat
        wait 0
        0AB1: call_scm_func @set_angle 2 2170.6194 -2251.1318
        0AB1: call_scm_func @get_distance 2 2170.6194 -2251.1318 0@
        0AB1: call_scm_func @plcol  
        0B56: set_game_key 1 state -128
        0B56: set_game_key 16 state -128
        until 00ED:   actor $PLAYER_ACTOR sphere 0 near_point 2170.6194 -2251.1318 radius 0.5 0.5 on_foot
   end
end
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
Вообще можно спокойно юзать циклы в функциях. Все от задачи зависит. Нельзя только вечные юзать.
 
  • Нравится
Реакции: DarkP1xel

hnnssy

Известный
Друг
2,684
2,751
пикадор имел в виду бесконечные циклы, как я понял
Мне нужно постоянно чекать игроков сампа. Без цикла уже никак не получится.
в функции делай один проход циклом for по всем игрокам и делай вызов этой функции уже в основном цикле скрипта, так проблем не возникнет
 

Boyenerji

Известный
97
1
пикадор имел в виду бесконечные циклы, как я понял

в функции делай один проход циклом for по всем игрокам и делай вызов этой функции уже в основном цикле скрипта, так проблем не возникнет

Вот так вот получается?:
CLEO:
:plcol
for 15@ = 1 to 15@ 1000
    if Samp.IsPlayerConnected(15@)
    then
    16@ = Samp.GetActorHandleByPlayerID(15@)
        if 056D: actor 16@ defined
        then
        0619: enable_actor 16@ collision_detection 0
        end
    end
    //15@ += 1
    if 15@ > 1000
    then
    15@ = 0
    wait 0
    end
end
 

Boyenerji

Известный
97
1
if 15@ > 1000
then
15@ = 0
wait 0
end
это убери ваще
Мне в конце функции вот это - 0AB2: ret 15@ 16@ дописывать нужно?
По сути мне параметры с функции возвращать не нужно, они в скрипте не используются.

UPD: в конце функции поставил : 0AB2: ret 0

Вызов функции:
CLEO:
while true
wait 0
    if
    0AB0: 104
    then
        repeat
        wait 0
        0AB1: call_scm_func @set_angle 2 2170.6194 -2251.1318
        0AB1: call_scm_func @get_distance 2 2170.6194 -2251.1318 0@
        0AB1: call_scm_func @plcol
        0B56: set_game_key 1 state -128
        0B56: set_game_key 16 state -128
        until 00ED:   actor $PLAYER_ACTOR sphere 0 near_point 2170.6194 -2251.1318 radius 0.5 0.5 on_foot
   end
end

Выдает краш при запуске скрипта.
 
Последнее редактирование:

hnnssy

Известный
Друг
2,684
2,751
Мне в конце функции вот это - 0AB2: ret 15@ 16@ дописывать нужно?
По сути мне параметры с функции возвращать не нужно, они в скрипте не используются.

UPD: в конце функции поставил : 0AB2: ret 0

Вызов функции:
CLEO:
while true
wait 0
    if
    0AB0: 104
    then
        repeat
        wait 0
        0AB1: call_scm_func @set_angle 2 2170.6194 -2251.1318
        0AB1: call_scm_func @get_distance 2 2170.6194 -2251.1318 0@
        0AB1: call_scm_func @plcol
        0B56: set_game_key 1 state -128
        0B56: set_game_key 16 state -128
        until 00ED:   actor $PLAYER_ACTOR sphere 0 near_point 2170.6194 -2251.1318 radius 0.5 0.5 on_foot
   end
end

Выдает краш при запуске скрипта.
0AB1: call_scm_func @plcol 0

Помогите пожалуйста найти ошибки в клео скрипте. У самого не получается, уже час с ним вожусь :(
C++:
// 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
thread 'FISHBOT'


while not SAMP.Available()
    wait 100
end         


wait 5000
chatmsg "{311CEE}Fish bot by {FF0000}RusFatall {311CEE}loaded. [/ribhelp]" 15604785
0B34: samp register_client_command "ribalka" to_label @fish

alloc 0@ 64

while true
wait 0
if 10@ == 1
then
Actor.PutAt($PLAYER_ACTOR, -2205.32, 2413.64, 2.47)
wait 2500
10@ = 0
11@ = 1    
end                                                                                                                  
repeat
wait 1000
say "/fish"
wait 2500
until 0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
        if 0C18: 4@ = strstr string1 0@ string2 "Ó ìåíÿ íåò äîæäåâûõ ÷åðâåé"     
        then
        chatmsg "Ó ìåíÿ êîí÷èëèñü ÷åðâè, èäó êîïàòü..." 15604785
        11@ == 1
        wait 300
        Actor.PutAt($PLAYER_ACTOR, -2285.03, 2343.04, 5.39)
        wait 2500
        11@ = 0
        end
        repeat
        wait 2000
        0C72: set_virtual_key 89 down 1
        wait 100
        0C72: set_virtual_key 89 down 0
        wait 500
        0C72: set_virtual_key 02 down 1
        wait 100
        0C72: set_virtual_key 02 down 0
        wait 800
        0C72: set_virtual_key 13 down 1
        wait 100
        0C72: set_virtual_key 13 down 0
        wait 3000
        until 0B75: samp get_chat_string 99 text_to 0@ prefix_to 1@ color_to 2@ prefix_color_to 3@
        if 0C18: 4@ = strstr string1 0@ string2 "Õâàòèò"
        10@ = 1
        Samp.CmdRet()



      
:fish
10@ = 1
Samp.CmdRet()

:chervi
11@ = 1
Samp.CmdRet()
мм красиво, а почему основной цикл ВНЕЗАПНО прерывается на команде CmdRet? ты кусок кода потерял?
 

Coghweel

Новичок
76
0
В сампе сервер может "отправлять" только один маркер на радаре (метку) Можно как то считать его координаты? Если можно через хук, буду очень бралогаден