[РЕШЕНО] SM - Respawn Player

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #2
@ВарСимЭдуаДимир,
PHP:
#include <sourcemod>
#include <cstrike>

public void OnPluginStart()
{
   RegConsoleCmd("sm_respawn", Command_Respawn);
}

public Action Command_Respawn(int iClient, int args)
{
   if(0 < iClient < MaxClients && IsClientInGame(iClient))
   {
       int iRespawn = GetRandomInt(1, MaxClients);
       if(IsClientInGame(iRespawn))
           CS_RespawnPlayer(iRespawn);
       else Command_Respawn(iClient, args);
   }
   return Plugin_Handled;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
@Rabb1t, а первая проверка для чего, чтобы нельзя было юзать команду удалённо через консоль сервера?
Тем более почему команда не только для админа?
И нет проверки на то что жив ли воскрешаемый. :biggrin:

Кмк, вот так будет лучше:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>

public void OnPluginStart()
{
    RegAdminCmd("sm_respawn", Cmd_RandomRespawn, ADMFLAG_SLAY);    // я тебя могу убить командой , поэтому смогу и воскресить =)
}

public Action Cmd_RandomRespawn(int client, int args)
{
    static int clients[MAXPLAYERS+1], num;    // static - чтобы не создавать эти переменные при каждом использовании команды
    // создаём список игроков которых можно воскресить
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && GetClientTeam(i) > 1 && !IsPlayerAlive(i)) clients[num++] = i;
    if(!num) return Plugin_Handled;    // если воскрешать некого, то закругляемся

    num--;    // фиксим число доступных игроков для использования в GetRandomInt()
    // воскрешаем случайного игрока из списка
    CS_RespawnPlayer(clients[GetRandomInt(0, num)]);
    num = 0;    // обнуляем счётчик для дальнейшего повторного использования
    return Plugin_Handled;
}
UPD Пофиксил отсутствие записи игроков в массив. :crazy:
UPD2 Добавлена проверка на нахождение в одной из команд
 
Последнее редактирование:

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
  • Команда форума
  • #5
а первая проверка для чего, чтобы нельзя было юзать команду удалённо через консоль сервера
Да, именно.
Тем более почему команда не только для админа?
Не было такой задачи же.
И нет проверки на то что жив ли воскрешаемый. :biggrin:
Да, признаю, тут не подумал про это.
 

Ice_Sochi

Участник
Сообщения
711
Реакции
415
Кмк, вот так будет лучше

Привет, объясни пожалуйста, зачем перед респавном ты уменьшаешь переменную на единицу? Из пояснения так и не понял. Ведь сервер изначально не учитывался, ибо "for(int i = 1 ..."
 

Kailo

Участник
Сообщения
194
Реакции
896
Привет, объясни пожалуйста, зачем перед респавном ты уменьшаешь переменную на единицу? Из пояснения так и не понял. Ведь сервер изначально не учитывался, ибо "for(int i = 1 ..."
В массиве N записей, их индексы от 0 до N - 1.
 
Сверху Снизу