C
Даже не думай - бесполезная затея! Уже давно было испробовано - проскальзывает прицел на полсекунды. Только:заблочить правую кнопку
SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 9999999.9);
дазаблочить правую кнопку, чтобы нельзя было включить зум на ауге?
public void OnPluginStart()
{
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(client)) OnClientPutInServer(i);
}
}
public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_WeaponSwitchPost, OnWeaponSwitch);
}
public void OnClientDisconnect(int client)
{
SDKUnhook(client, SDKHook_WeaponSwitchPost, OnWeaponSwitch);
}
public void OnWeaponSwitch(int client, int weapon)
{
static char class[32];
if(GetEdictClassname(weapon, class, sizeof(class)) && StrContains(class, "aug") !=-1) SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0);
}
Слабенько, очень. После каждого выстрела значение сбросится, как и при перезарядке, так и при поднятии (да-да, "свитча" и тут недосточно - багует разок-другой). Ещё при спавне с оружием - отдельная история.SDKHook(client, SDKHook_WeaponSwitchPost, OnWeaponSwitch);
SDK сам унхукнет свои хуки, когда объект "уничтожается" (игрок выходит, в данном случае).public void OnClientDisconnect(int client)
{
SDKUnhook(client, SDKHook_WeaponSwitchPost, OnWeaponSwitch);
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
{
if (IsPlayerAlive(client))
{
if (buttons & IN_ATTACK2)
{
static char class[32];
GetClientWeapon(client, class, sizeof(class));
if(StrContains(class, "aug") != -1)
{
SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0);
buttons &= ~IN_ATTACK2;
return Plugin_Changed;
}
}
}
return Plugin_Continue;
}
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2])
{
if (IsPlayerAlive(client))
{
if(buttons & IN_ATTACK2)
{
static char class[32];
if(GetEntityClassname(weapon, class, sizeof(class)) && StrContains(class, "aug") != -1)
{
SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0);
buttons &= ~IN_ATTACK2;
return Plugin_Changed;
}
}
}
return Plugin_Continue;
}
придётся юзать OnPlayerRunCmd
1) Сначала появится, исчезнет и заблокируется...проскальзывает прицел на полсекунды
в SDKHook_PostThinkну тогда придётся юзать OnPlayerRunCmd
static char class[32];
if(GetEntityClassname(weapon, class, sizeof(class)) && StrContains(class, "aug") != -1)
{
SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0);
buttons &= ~IN_ATTACK2;
return Plugin_Changed;
}
public void OnPluginStart()
{
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(client)) OnClientPutInServer(i);
}
}
public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_PostThink, OnClientPostThink);
}
public void OnClientPostThink(int client)
{
static char class[32];
class[0] = '\0';
GetClientWeapon(client, class, sizeof(class)); // функция всегда определяет тип оружия?
if(class[0] && StrContains(class, "aug") !=-1) SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0);
}
Зачем чистить массив, а потом ещё и проверять?@R1KO, в смысле вот так?PHP:public void OnPluginStart() { for(int i = 1; i <= MaxClients; i++) { if(IsClientInGame(client)) OnClientPutInServer(i); } } public void OnClientPutInServer(int client) { SDKHook(client, SDKHook_PostThink, OnClientPostThink); } public void OnClientPostThink(int client) { static char class[32]; class[0] = '\0'; GetClientWeapon(client, class, sizeof(class)); // функция всегда определяет тип оружия? if(class[0] && StrContains(class, "aug") !=-1) SetEntPropFloat(weapon, Prop_Send, "m_flNextSecondaryAttack", 3600.0); }
public void OnPluginStart()
{
for(int i = 1; i <= MaxClients; i++)
{
if(IsClientInGame(i)) OnClientPutInServer(i);
}
}
public void OnClientPutInServer(int client)
{
SDKHook(client, SDKHook_PostThink, OnClientPostThink);
}
public void OnClientPostThink(int client)
{
static char class[20];
if(GetClientWeapon(client, class, 20) && StrContains(class, "aug") != -1) SetEntPropFloat(GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon"), Prop_Send, "m_flNextSecondaryAttack", 3600.0);
}
На всякий случайЗачем чистить массив, а потом ещё и проверять?