Entity in buyzone

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
Здравствуйте.

Делаю для своего war3ft сервера плагин "Захват флага". Создаю entity, игрок поднимает флаг, несёт на свой респ, заходит в buyzone и флаг засчитывается.
Проблема в том, что для одной расы у меня отключена buyzone, игрок с данной расой не может поставить флаг.

Как правильно определить что entity находится в buyzone, что бы засчитывать флаг?
На alienmodes была тема подобная, но конкретного ответа там не увидел.
 
Последнее редактирование:
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
Что значит отключена байзона у расы? Покажите как вы её отключили
 

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
Эта раса у меня бегает с p228 и weapon_shield, закупка запрещена, vipmenu, поднятие предметов и т.д. тоже запрещено.

C#:
public msgBuyZoneIcon(msgid, msgdest, player){
    static iconname[8];
    get_msg_arg_string(2, iconname, 7);
    if(equal(iconname, "buyzone") && get_msg_arg_int(1) && p_data[player][P_RACE] == RACE_WARRIOR){
        set_pdata_int(player, 235, get_pdata_int(player, 235) & ~(1<<0));
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
можно костылить, конечно, это я умею
добавить проверку на наличие флага у этого игрока, и не отключать байзону.. или ещё как то блочить закупку, но вопрос в другом, как определить что энтити флага находится в байзоне?
C#:
public msgBuyZoneIcon(msgid, msgdest, player){
    static szIcon[8];
    get_msg_arg_string(2, szIcon, 7);
    if(equal(szIcon, "buyzone") && get_msg_arg_int(1) && p_data[player][P_RACE] == RACE_WARRIOR && !PlayerHasFlag[player]){
        set_pdata_int(player, 235, get_pdata_int(player, 235) & ~(1<<0));
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
 
Последнее редактирование:
Сообщения
594
Реакции
350
Предупреждения
1
Помог
9 раз(а)
iPlague, ну раз покупка запрещена, зачем блочить байзону?
 

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
steelzzz, для этой расы нет байзоны, для всех других - есть..
я просто описал суть проблемы, вопрос в том как правильно будет узнать что энтити (не игрок) в байзоне находится?
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
iPlague,

PHP:
public msgBuyZoneIcon(msgid, msgdest, player)
{
    static iconname[8];
    get_msg_arg_string(2, iconname, 7);

    if (equal(iconname, "buyzone") && get_msg_arg_int(1) && p_data[player][P_RACE] == RACE_WARRIOR)
    {
        // https://wiki.alliedmods.net/Half-life_1_game_events
        //set_pdata_int(player, 235, get_pdata_int(player, 235) & ~(1<<0));
         message_begin(MSG_ONE, msgid, _, player);
write_byte(0) // 0 is Hide Icon , 1 is Show Icon, 2 is Flash Icon
message_end()

       client_print(player, print_chat, "call block bz for warrior");

        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
я не уверен, че будет, если я сразу задам аргументу 1 (Status) значение 0 = Hide
но обычно я ловлю на этом месте log error'ы
 

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
в моде Hide Icon используется что бы иконки супернавыков скрывать.

вернёмся к вопросу, как определить что entity в байзоне?(
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
iPlague, просто оставь в покое байзону для этого класса и иконку через хайд прячь
эта мессага изменяется в зависимости от статуса 1 агрумента, поэтому я и ловил ошибки

по итогу получишь работающий тач байзоны и флага, а так же блок закупки благодаря иконке байзоны
1607322188355.png
 

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
Блин до меня дошло.


Код:
public msgBuyZoneIcon(msgid, msgdest, player){
    static iconname[8];
    get_msg_arg_string(2, iconname, 7);
    if(equal(iconname, "buyzone") && get_msg_arg_int(1) && p_data[player][P_RACE] == RACE_WARRIOR){
        
       // проверяем несёт игрок флаг или нет, если да то засчитываем его.

        set_pdata_int(player, 235, get_pdata_int(player, 235) & ~(1<<0));
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
но вопрос остаётся открытым, как понять что entity в байзоне.
нагуглил это только
register_touch("func_buyzone", "entity" ,"fw_Touch")
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
iPlague, если у тебя флаг - аттач на игроке, то у тебя origin не будет изменяться для за-аттаченной энтити

по идее можно в синке обновлять значение pev_origin для флага, но черт его знает будет ли это работать
 
Сообщения
855
Реакции
532
Помог
13 раз(а)
вообще можно попробовать финт ушами

Скрытое содержимое для пользователей: iPlague
 
Сообщения
141
Реакции
329
Можешь попробовать реализацию вроде той, что я делал в Halloween Mod, где на картах вообще нет байзон.

Ссылка на реализацию:

Код:
bool:IsPlayerOnSpawn(id, bool:ignoreTeam = false)

Если вкратце, то при прекеше я сохраняю координаты всех точек спавна в массив соответствующей команды и потом прохожусь по ним и ищу, есть ли точка в радиусе 192.0 юнита.
 
Последнее редактирование:

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
Спасибо всем за советы!
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу