Half-Life и Adrenaline Gamer форум
http://www.aghl.ru/forum/

[SOLVED!] Тимейт рядом - стреляй быстрее
http://www.aghl.ru/forum/viewtopic.php?f=42&t=3210
Страница 1 из 1

Автор:  Glaster [ 18 фев 2021, 20:39 ]
Заголовок сообщения:  [SOLVED!] Тимейт рядом - стреляй быстрее

Всем привет!
Пытаюсь сделать такую фишку для очередной вундервафли: если во время стрельбы рядом с игроком находится тимейт - темп стрельбы увеличивается в 2 раза. Написал такую ф-ю для нахождения тимейтов поблизости, но когда она вызывается при стрельбе - сервер просто крашится. Началось такое после добавления проверки на длину строки имени команды (strlen), ибо без него условие "тимейт рядом" выполнялось всегда (даже когда ты один на сервере, даже несмотря на все проверки). Код функции прилагаю ниже

Код:
public Find(pId)
{   
new team1[32]
 new team2[32  ]
             
    new result = 0;
    new id = 1;
    while (id < 33){
         if(is_user_connected(pId)&& is_user_connected(id)){
       if (is_user_alive(pId)&& is_user_alive(id)){
         //DISTANCE - максимально допустимо расстояние между игроками
            if (DISTANCE >=get_entity_distance(id, pId)){   
                        get_user_team(id,team1)
            get_user_team(pId,team2)       
            if(equal(team1,team2,3) && strlen(team1)>0) {
               result = 1;                                                   
                }
                else {
                result = 0
                }
                }   
            }
            }
       if(result==1) {
       break;
       } 
    }
    return result;
}         

Получается следующее: либо массивы всегда пусты, либо при добавлении проверки (как тут strlen) сервер падает. Может тимейтов можно искать как-то поэффективней?

Автор:  Glaster [ 19 фев 2021, 12:40 ]
Заголовок сообщения:  Re: [SOLVED!] Тимейт рядом - стреляй быстрее

Нашёл решение. Работает как швейцарские часы

Код:
new Float:coords[3]   
        pev(iPlayer, pev_origin, coords)
        new player = -1
        //val вместо return'a
        new val = 0;
        while((player = engfunc(EngFunc_FindEntityInSphere, player, coords, 100.0))){
        if(! is_user_alive(player))
        {
        continue;
        }                                                                                         
        if (get_user_team(player) == get_user_team(iPlayer)&&player!=iPlayer){ 
        new name[32]
        get_user_name(player,name,10)           
        client_print(iPlayer,print_chat,name)
        val = 1;                   
        break;                                   
        }
        }   

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/