PrintToChatAll в радиусе

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Возможно ли показывать сообщение игрокам в опр. радиусе?
Если да, то каким образом.
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Да, можно.
Для примера можно запускать цікл и проверять игроков находиться ли его GetClientAbsOrigin в определенных координатах , ща попробую что-то сострепать
--- Добавлено позже ---
Начал набрасывать, сейчас отойду на часик, попробуй разобраться
PHP:
CheckClientsInRadius(client, radius)
{
    new float:pos[3];
    new float:clpos[MAXPLAYERS][3];
    GetClientAbsOrigin(client, pos);
    PrintToChat(client,"Your POS: %f : %f :%f", pos[0], pos[1], pos[2]);
   
    for(new i = 1; i <= iMaxClients; i++) 
    {
        if (IsPlayerAlive(i) && GetClientTeam(i) > 1)
        {
            new float:diffos[3];
           
            GetClientAbsOrigin(i, clpos[i]);
            if ((clpos[i][0] > pos[0])
            {
                diffos = clpos[i][0] - pos[0];
            }
            else 
            {
                pos[0] - clpos[i][0];
           
            }
            {
            }
           
            if ((clpos[i][0] - pos[0]) 
        }
    }
}
 

DarklSide

Участник
Сообщения
931
Реакции
468
показывать сообщение игрокам в опр. радиусе?
PHP:
#define DISTANCE 500.0 // радиус

public Action OnClientSayCommand(int client, const char[] command, const char[] sArgs)
{
    bool b_one = false;
    if (strcmp(command, "say_team", false))b_one = true;
    char s_chats[PLATFORM_MAX_PATH];
    strcopy(s_chats, sizeof(s_chats), sArgs);
    CheckDist(client, sArgs, b_one);
    return Plugin_Stop;
}

void CheckDist(int client, const char[] sChats, bool b_team)
{
    float f_vector_one[3];
    GetEntPropVector(client, Prop_Send, "m_vecOrigin", f_vector_one);
    int i_team = GetClientTeam(client);
    for (int i = 1; i <= MaxClients; ++i)
    {
        if (IsClientInGame(i) && !IsFakeClient(i) && IsPlayerAlive(i))
        {
            if (!b_team || (b_team && i_team == GetClientTeam(i)))
            {
                if (FDistance(i, f_vector_one) < DISTANCE)PrintToChat(i, sChats); // Игрок(i) в радиусе
            } 
        }
    }
}

float FDistance(int two, float fOne[3])
{
    float f_vector_two[3];
    GetEntPropVector(two, Prop_Send, "m_vecOrigin", f_vector_two);
    return GetVectorDistance(fOne, f_vector_two); // squared & DISTANCE
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
@DarklSide, а зачем для получения позиции и дистанции отдельная ф-я?
 

AS TRO

Участник
Сообщения
1,159
Реакции
750
@Hejter, ты там походу "конфетку ролеплейную" хочешь смастерить :)
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
@Hejter, ты там походу "конфетку ролеплейную" хочешь смастерить :)
Не думаю что будет конфетка. Я же быдлокодер, да и я плохо знаю SP...
Сейчас со многим нужна проблема. А ни кто не хочет помогать.
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
@DarklSide, а зачем для получения позиции и дистанции отдельная ф-я?
Для наглядности - возможного получения дистанции между двумя объектами (больше всего для игроков), где есть их перебор, относительно некоторого, принимая в аргументах второго и координаты первого.

P.S.: для вставки, где нужна дистанция. Например добавить по функционалу (VoiceannounceEX), и если карта огромная + множество игроков - фильтровать микрофон, пропуская только ближних из них.
 
Последнее редактирование:

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Для наглядности - возможного получения дистанции между двумя объектами (больше всего для игроков), где есть их перебор, относительно некоторого, принимая в аргументах второго и координаты первого.

P.S.: для вставки, где нужна дистанция. Например добавить по функционалу (VoiceannounceEX), и если карта огромная + множество игроков - фильтровать микрофон, пропуская только ближних их них.
Как раз искал что-то подобное.
 
Сверху Снизу