Такая ситуация. Я ввожу команду, и на следующем раунде игроки спавнятся с калашами. Как лучше реализовать:
1) Хукнуть эвенты при загрузке плагина и в каждом евенте проверять переменную bool, которую команда будет ставить на true.
2) В команде хукать эвенты, а в конце раунда разхукивать.
Так:
Или так:
Надеюсь, что понятно объяснил.
1) Хукнуть эвенты при загрузке плагина и в каждом евенте проверять переменную bool, которую команда будет ставить на true.
2) В команде хукать эвенты, а в конце раунда разхукивать.
Так:
C-подобный:
#include <sourcemod>
#include <sdktools>
new bool:round=false;
public void OnPluginStart()
{
HookEvent("player_spawn", Event_PlayerSpawned);
HookEvent("round_end", Event_RoundEnd);
}
public void Event_PlayerSpawned(Handle:event, const String:name[], bool:dontBroadcast)
{
if(round)
{
int ent = GetPlayerWeaponSlot(GetClientOfUserId(GetEventInt(event,"userid")), 0);
if(ent != -1)
{
RemovePlayerItem(GetClientOfUserId(GetEventInt(event,"userid")), ent);
RemoveEdict(ent);
}
GivePlayerItem(GetClientOfUserId(GetEventInt(event,"userid")), "weapon_ak47");
}
}
public void Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
if(round){
round=false;
}
}
public Action:SpecialRound(client, args)
{
if (args != 1)
{
ReplyToCommand(client, "[SM] Usage: sm_specround <weapon>");
return Plugin_Handled;
}
GetCmdArg(1, weapon, sizeof(weapon));
round=true;
return Plugin_Handled;
}
C-подобный:
#include <sourcemod>
#include <sdktools>
public void OnPluginStart()
{
HookEvent("round_start", Event_RoundStart);
HookEvent("player_spawn", Event_PlayerSpawned);
HookEvent("round_end", Event_RoundEnd);
}
public void Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
HookEvent("round_end", Event_RoundEnd);
}
public void Event_PlayerSpawned(Handle:event, const String:name[], bool:dontBroadcast)
{
int ent = GetPlayerWeaponSlot(GetClientOfUserId(GetEventInt(event,"userid")), 0);
if(ent != -1)
{
RemovePlayerItem(GetClientOfUserId(GetEventInt(event,"userid")), ent);
RemoveEdict(ent);
}
GivePlayerItem(GetClientOfUserId(GetEventInt(event,"userid")), weapon);
}
public void Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
UnhookEvent("round_start");
UnhookEvent("player_spawn");
UnhookEvent("round_end");
}
public Action:SpecialRound(client, args)
{
if (args != 1)
{
ReplyToCommand(client, "[SM] Usage: sm_specround <weapon>");
return Plugin_Handled;
}
GetCmdArg(1, weapon, sizeof(weapon));
HookEvent("round_start", Event_RoundStart);
HookEvent("player_spawn", Event_PlayerSpawned);
return Plugin_Handled;
}