Grey83
не пишу плагины с весны 2022
- Сообщения
- 8,805
- Реакции
- 5,254
Вот так было бы вполне себе нормально:
вообще я про то, что там вполне хватило бы и булевой переменной (не требуется количество использований больше одного)
ну и вообще эта целочисленная переменная вообще не нужна в нашем случае
C-подобный:
#pragma semicolon 1
#pragma newdecls required
#define BOOST_MULT 5.0 // множитель ускорения
#define BOOST_TIME 2.0 // время действия ускорения
bool bUsed[MAXPLAYERS+1];
public void OnPluginStart()
{
RegConsoleCmd("sm_boost", Cmd_Boost);
HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy); // с этого момента игроки могут двигаться
}
public void OnClientDisconnect(int client)
{
bUsed[client] = false;
}
public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
for(int i = 1; i <= MaxClients; i++) bUsed[i] = false;
}
public Action Cmd_Boost(int client, int args)
{
if(!client || bUsed[client] || !IsClientInGame(client) || !IsPlayerAlive(client))
return Plugin_Handled;
bUsed[client] = true;
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", BOOST_MULT);
CreateTimer(BOOST_TIME, Timer_End, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
return Plugin_Handled;
}
public Action Timer_End(Handle hTimer, int client)
{
if((client = GetClientOfUserId(client)) && IsClientInGame(client) && IsPlayerAlive(client))
SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.0);
return Plugin_Stop;
}
Сообщения автоматически склеены:
тут дело в том что значение зачем-то инвертируется, вместо того чтобы просто присвоить значение true или falseМожно без него?
inSpeed[client] ^= true;
выше код поправленный предоставилНу и тут я так понял<можно по другому сделать
bool inSpeed[MAXPLAYERS+1];
int iLimitSpeed[MAXPLAYERS+1];
вообще я про то, что там вполне хватило бы и булевой переменной (не требуется количество использований больше одного)
ну и вообще эта целочисленная переменная вообще не нужна в нашем случае