Русское сообщество по скриптингу

Функция выполняется много раз вместо одного

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Функция выполняется много раз вместо одного

Сообщение DeIIyTaT » 24 мар 2019, 22:04

имеется фрагмент кода
Код: Выделить всё

public fm_player_prethink
( id )
{
    new target
    
//Search for a target
    if ( client_data[id][GRABBED] == -)
    {
        new Float:orig[3], Float:ret[3]
        get_view_pos( id, orig )
        ret = vel_by_aim( id, 9999 )
        
        ret
[0] += orig[0]
        ret[1] += orig[1]
        ret[2] += orig[2]
        
        target 
= traceline( orig, ret, id, ret )
        
        if
( 0 < target <= MAXPLAYERS )
        {
        if(is_grabbed(target, id) || (get_user_flags(target) & ADMIN_LEVEL_F && ~get_user_flags(id) & ADMIN_CFG)){
        ChatColor(id, "%L", id, "CHAT_4")  
            return FMRES_IGNORED
        
}
            set_grabbed( id, target )
        }
        else if( !get_pcvar_num( p_players_only ) )
        {
            new movetype
            if
( target && pev_valid( target ) )
            {
                movetype = pev( target, pev_movetype )
                if( !( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS ) )
                return FMRES_IGNORED
            
}
            else
            
{
                target = 0
                new ent 
= engfunc( EngFunc_FindEntityInSphere, -1, ret, 12.0 )
                while( !target && ent > 0 )
                {
                    movetype = pev( ent, pev_movetype )
                    if( ( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS )
                            && ent != id  )
                    target = ent
                    ent 
= engfunc( EngFunc_FindEntityInSphere, ent, ret, 12.0 )
                }
            }
            if( target )
            {
                if( is_grabbed( target, id ) ) return FMRES_IGNORED
                set_grabbed
( id, target )
            }
        }
    }
 



В этом моменте ChatColor выполняется 7 раз тоесть спамит вечь чат а должно по сути 1 раз написать
Код: Выделить всё

        if
(is_grabbed(target, id) || (get_user_flags(target) & ADMIN_LEVEL_F && ~get_user_flags(id) & ADMIN_CFG)){
        ChatColor(id, "%L", id, "CHAT_4")  
            return FMRES_IGNORED
        
}
 

он выполняет ChatColor 7 раз (Просто спамит 7 раз в чат вместо одного)
почему так происходит ? Как исправить ?
Мой проект CSSURF.RU | SURF Сервера с RPG
amx-x.ru - Вы красавчики спасибо что вы есть ! :thumbs_up
Аватара пользователя
DeIIyTaT
 
Сообщения: 66
Зарегистрирован: 29 авг 2014, 13:53
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
html,php

Re: Функция выполняется много раз вместо одного

Сообщение артист666 » 25 мар 2019, 05:54

Ну это финк, он вызывается с частотой фпс игрока.
В условиях смотри.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Функция выполняется много раз вместо одного

Сообщение DeIIyTaT » 25 мар 2019, 15:23

А еще вопрос почему админ админа может брать за ноги ?

Добавлено спустя 10 минут 58 секунд:
А всё понял
Код: Выделить всё

            if
( target )
            {
                if(is_grabbed(target, id) || (get_user_flags(target) & ADMIN_LEVEL_F && ~get_user_flags(id) & ADMIN_CFG)){
                    ChatColor(id, "%L", id, "CHAT_4")  
                    return FMRES_IGNORED
                
}
                set_grabbed( id, target )
            }

Вот дописал

Добавлено спустя 2 часа 53 минуты 44 секунды:
А как можно вывести ChatColor(id, "%L", id, "CHAT_4") чтоб 1 раз писало это ?
Мой проект CSSURF.RU | SURF Сервера с RPG
amx-x.ru - Вы красавчики спасибо что вы есть ! :thumbs_up
Аватара пользователя
DeIIyTaT
 
Сообщения: 66
Зарегистрирован: 29 авг 2014, 13:53
Благодарил (а): 13 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6
html,php

Re: Функция выполняется много раз вместо одного

Сообщение артист666 » 25 мар 2019, 21:39

Разберись с условиями, и будет 1 раз тебе.
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6