7pElllHuK
Участник
- Сообщения
- 1,416
- Реакции
- 465
Понял, думал что есть другие варианты, тогда спасибоЭто и есть реальный шанс
Понял, думал что есть другие варианты, тогда спасибоЭто и есть реальный шанс
Если думал, значит были какие-то на это причины? Почему?Понял, думал что есть другие варианты, тогда спасибо
Не знаю, в голову пришло что шанс не точный, вот и решил спроситьЕсли думал, значит были какие-то на это причины? Почему?
==>return (GetRandomInt(1, 100) > RoundToFloor(fChance * 100.0)) ? false : true;
return GetRandomInt(1, 100) <= RoundToFloor(fChance * 100.0);
Можно, конечно, через OnPlayerRunCmd, но я так хочуЗдравствуйте, нужен плагин блокирующий CT (передвигаться и стрелять нельзя) на N секунд (грубо говоря mp_freezetime только для СT )
#include <cstrike>
#define TIME 4.0
bool bStop;
public void OnPluginStart()
{
HookEvent("round_start", Start);
HookEvent("player_spawn", spawn, EventHookMode_Post);
HookEvent("weapon_fire", fire, EventHookMode_Pre);
}
public void spawn(Event hEvent, const char[] sEvent, bool bdb)
{
int user = GetClientOfUserId(hEvent.GetInt("userid"));
if(bStop && IsCT(user))
SetEntityMoveType((user), MOVETYPE_NONE);
}
public void Start(Event hEvent, const char[] sEvent, bool bdb)
{
bStop = true;
CreateTimer(TIME, Stopper);
}
public Action fire(Event hEvent, const char[] sEvent, bool bdb)
{
if(bStop && IsCT(GetClientOfUserId(hEvent.GetInt("userid"))))
return Plugin_Handled;
return Plugin_Continue;
}
public Action Stopper(Handle hTimer)
{
bStop ^= true;
for(int i = 1; i <= MaxClients; i++)
if(IsCT(i) && GetEntityMoveType(i) == MOVETYPE_NONE)
SetEntityMoveType(i, MOVETYPE_WALK);
return Plugin_Continue;
}
stock bool IsCT(int cl)
{
return (0 < cl <= MaxClients && IsClientInGame(cl) && IsPlayerAlive(cl) && GetClientTeam(cl) == CS_TEAM_CT)
}
Закомпилил без ошибок, но скрипт не работает(Можно, конечно, через OnPlayerRunCmd, но я так хочу
C++:#include <cstrike> #define TIME 4.0 bool bStop; public void OnPluginStart() { HookEvent("round_start", Start); HookEvent("player_spawn", spawn, EventHookMode_Post); HookEvent("weapon_fire", fire, EventHookMode_Pre); } public void spawn(Event hEvent, const char[] sEvent, bool bdb) { int user = GetClientOfUserId(hEvent.GetInt("userid")); if(bStop && IsCT(user)) SetEntityMoveType((user), MOVETYPE_NONE); } public void Start(Event hEvent, const char[] sEvent, bool bdb) { bStop = true; CreateTimer(TIME, Stopper); } public Action fire(Event hEvent, const char[] sEvent, bool bdb) { if(bStop && IsCT(GetClientOfUserId(hEvent.GetInt("userid")))) return Plugin_Handled; return Plugin_Continue; } public Action Stopper(Handle hTimer) { bStop ^= false; for(int i = 1; i <= MaxClients; i++) if(IsCT(i) && GetEntityMoveType(i) == MOVETYPE_NONE) SetEntityMoveType(i, MOVETYPE_WALK); return Plugin_Continue; } stock bool IsCT(int cl) { return (0 < cl <= MaxClients && IsClientInGame(cl) && IsPlayerAlive(cl) && GetClientTeam(cl) == CS_TEAM_CT) }
Еррор лог смотриЗакомпилил без ошибок, но скрипт не работает(
p.s ксс 34 cm 1.11
на 36 строке замени false на trueЗакомпилил без ошибок, но скрипт не работает(
p.s ксс 34 cm 1.11
ошибок нет вообщеЕррор лог смотри
Заменил, ничего не изменилось.на 36 строке замени false на true
И что именно не работает?
вообще-то блокировка этого события никогда не блокировала стрельбу =)C-подобный:public Action fire(Event hEvent, const char[] sEvent, bool bdb) { if(bStop && IsCT(GetClientOfUserId(hEvent.GetInt("userid")))) return Plugin_Handled; return Plugin_Continue; }
А да!? :D тада ладно, чет я попутал видимовообще-то блокировка этого события никогда не блокировала стрельбу =)
#pragma semicolon 1
#pragma newdecls required
#include <sdktools_hooks>
static const float CT_FREEZE_TIME = 5.0; // время блокировки передвижения и стрельбы CT
Handle hTimer;
public void OnPluginStart()
{
HookEvent("round_start", Event_Start, EventHookMode_PostNoCopy);
HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy);
}
public void OnMapStart()
{
hTimer = null;
}
public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
if(hTimer)
{
CloseHandle(hTimer);
hTimer = null;
}
if(name[6] == 'f') hTimer = CreateTimer(CT_FREEZE_TIME, Timer_Unfreeze, _, TIMER_FLAG_NO_MAPCHANGE);
}
public Action Timer_Unfreeze(Handle timer)
{
hTimer = null;
return Plugin_Stop;
}
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(hTimer && IsClientInGame(client) && GetClientTeam(client) == 3 && IsPlayerAlive(client))
{
buttons = 0;
return Plugin_Changed;
}
return Plugin_Continue;
}
Передвижение заблочено, стрелять можно , таймер не работает(проходит 5 сек и блок не спадает)@paradoks5312, попробуй вот так:По идее должны блочиться любые действия игрока после окончания фризтайма на выставленное время. Время заморозки выставляется в выделенной строке.C-подобный:#pragma semicolon 1 #pragma newdecls required #include <sdktools_hooks> static const float CT_FREEZE_TIME = 5.0; // время блокировки передвижения и стрельбы CT Handle hTimer; public void OnPluginStart() { HookEvent("round_start", Event_Start, EventHookMode_PostNoCopy); HookEvent("round_freeze_end", Event_Start, EventHookMode_PostNoCopy); } public void OnMapStart() { hTimer = null; } public void Event_Start(Event event, const char[] name, bool dontBroadcast) { if(hTimer) CloseHandle(hTimer); if(name[6] == 'f') hTimer = CreateTimer(CT_FREEZE_TIME, Timer_Unfreeze, _, TIMER_FLAG_NO_MAPCHANGE); } public Action Timer_Unfreeze(Handle timer) { hTimer = null; return Plugin_Stop; } 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]) { return hTimer && IsClientInGame(client) && GetClientTeam(client) == 3 && IsPlayerAlive(client) ? Plugin_Handled : Plugin_Continue; }
Возможны баги, т.к. я не проверял вариант блокировки абсолютно всего. Обычно плагинами только нажатие кнопок блочится.
L 10/03/2023 - 20:00:16: [SM] Blaming: freezCT.smx
L 10/03/2023 - 20:00:16: [SM] Call stack trace:
L 10/03/2023 - 20:00:16: [SM] [0] CloseHandle
L 10/03/2023 - 20:00:16: [SM] [1] Line 23, C:\addons\sourcemod\scripting_privat\freezCT.sp::Event_Start
L 10/03/2023 - 20:00:16: [SM] Exception reported: Handle 30501f2 is invalid (error 1)
значит будем блочить другим способомстрелять можно
Error при компиле@paradoks5312, исправил код выше (забыл обнулить хэндл после убийства таймера). Проверяй.
Сообщения автоматически склеены:
значит будем блочить другим способом
Сообщения автоматически склеены:
Если и это не поможет, то придётся вешать хуки на смену оружия игроком и на само оружие.
//// freezCT.sp
//
// C:\addons\sourcemod\scripting\freezCT.sp(44) : error 001: expected token: ";", but found "}"
//
// 1 Error.
//
// Compilation Time: 0,06 sec
// ----------------------------------------
В конце 43-й строки нужноError при компиле
;
поставить: return Plugin_Changed;
Почти замечательно, блочит прыжок, приседание, стрельбу - осталось заблочить бег/ходьбу (прикрутить бы туда sm_speed 0 и все - а так все норм)В конце 43-й строки нужно;
поставить:return Plugin_Changed;
Обычно wasd, но кто на какие биндит - разные могут быть.@paradoks5312, с утра подумаю что можно сделать.
Хотя вроде ходить ирок не должен был тоже. Какими кнопками передвигаешься?