RudikS
Участник
- Сообщения
- 130
- Реакции
- 61
Таймер удалится и не пройдет условие при следующем умершем в этом раунде.А остальное где потерялось?
UPD: Разве RequestFrame сработает в данном случае 1 раз?
Таймер удалится и не пройдет условие при следующем умершем в этом раунде.А остальное где потерялось?
UPD: Разве RequestFrame сработает в данном случае 1 раз?
Помогите написать плагин, что бы написании команды !t если игрок находится в наблюдателях - его переводило за команду Террористов, если он за КТ, то высветиться меню:
Перейти за Т?
1. Да
2. Нет
#define TEAM_NONE 0
#define TEAM_SPECTATOR 1
#define TEAM_T 2
#define TEAM_CT 3
#define CMD "sm_t"
public void OnPluginStart()
{
RegConsoleCmd(CMD, SwitchTeam_CMDHandler);
}
public Action SwitchTeam_CMDHandler(int iClient, int argc)
{
switch(GetClientTeam(iClient))
{
case TEAM_SPECTATOR, TEAM_NONE:
{
ChangeClientTeam(iClient, TEAM_T);
}
case TEAM_CT:
{
Menu menu = new Menu(SwitchTeam_MenuHandler);
menu.SetTitle("Перейти за T?");
menu.AddItem("", "Да");
menu.AddItem("", "Нет");
menu.Display(iClient, 0);
}
}
return Plugin_Handled;
}
public int SwitchTeam_MenuHandler(Menu menu, MenuAction action, int iClient, int item)
{
switch(action)
{
case MenuAction_Select:
{
if(item == 0)
{
ChangeClientTeam(iClient, TEAM_T);
}
}
case MenuAction_End:
{
delete menu;
}
}
}
Спасибо огромноеC-подобный:#define TEAM_NONE 0 #define TEAM_SPECTATOR 1 #define TEAM_T 2 #define TEAM_CT 3 #define CMD "sm_t" public void OnPluginStart() { RegConsoleCmd(CMD, SwitchTeam_CMDHandler); } public Action SwitchTeam_CMDHandler(int iClient, int argc) { switch(GetClientTeam(iClient)) { case TEAM_SPECTATOR, TEAM_NONE: { ChangeClientTeam(iClient, TEAM_T); } case TEAM_CT: { Menu menu = new Menu(SwitchTeam_MenuHandler); menu.SetTitle("Перейти за T?"); menu.AddItem("", "Да"); menu.AddItem("", "Нет"); menu.Display(iClient, 0); } } return Plugin_Handled; } public int SwitchTeam_MenuHandler(Menu menu, MenuAction action, int iClient, int item) { switch(action) { case MenuAction_Select: { if(item == 0) { ChangeClientTeam(iClient, TEAM_T); } } case MenuAction_End: { delete menu; } } }
СпасибоКак вариант
C-подобный:#include <cstrike> #define TIME 10.0 Handle g_Timer; public void OnPluginStart() { HookEvent("player_death", PlayerDeath_Event); HookEvent("round_start", RoundStart_Event); } public void PlayerDeath_Event(Event event, const char[] sEvName, bool bDontBroadcast) { if(g_Timer) { RequestFrame(RespawnPlayer, event.GetInt("userid")); delete g_Timer; } } public void RoundStart_Event(Event event, const char[] sEvName, bool bDontBroadcast) { g_Timer = CreateTimer(TIME, Timer_Handler, _, TIMER_FLAG_NO_MAPCHANGE); } public Action Timer_Handler(Handle timer) { g_Timer= null; return Plugin_Stop; } public void RespawnPlayer(any userId) { int iClient = GetClientOfUserId(userId); CS_RespawnPlayer(iClient); PrintToChatAll("%N автоматически возродился", iClient); }
Можешь попробовать, но тут без кваров и для любой вип группы.Помогите пожалуйста. Нужно сделать иммунитет випам. Сейчас он только для админов
#define STYLE true
#include <cstrike>
#include <vip_core>
#if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6)
#pragma newdecls required
public Plugin myinfo =
#else
#undef STYLE
public Plugin:myinfo =
#endif
{
name = "Special Team Balancer",
author = "AlmazON",
description = "Специальный Балансировщик Команд",
version = "0.6.0",
url = "http://www.hlmod.ru"
}
#define CSRoundEnd_GameStart 15
#if defined STYLE
bool bP[MAXPLAYERS+1];
float fRD;
int iAF;
public void OnPluginStart()
{
ConVar c;
#else
new bool:bP[MAXPLAYERS+1], Float:fRD, iAF;
public OnPluginStart()
{
decl String:f[AdminFlags_TOTAL], Handle:c;
#endif
if(GetEngineVersion() !=Engine_CSGO)
{
HookEvent("round_end", RE);
if((c=FindConVar("mp_round_restart_delay")))
{
HookConVarChange(c, RD);
#if defined STYLE
fRD = c.FloatValue-0.1;
#else
fRD = GetConVarFloat(c)-0.1;
#endif
}else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found).");
}
else HookEvent("round_prestart", RP, EventHookMode_PostNoCopy);
HookConVarChange(c=CreateConVar("stb_admin_flag", "", "Flags of administrators, excluding balancing.\n\"\" - all."), AF);
#if defined STYLE
char f[AdminFlags_TOTAL];
c.GetString(f,AdminFlags_TOTAL);
#else
GetConVarString(c,f,AdminFlags_TOTAL);
#endif
AF(c,f,f);
AutoExecConfig(_, "SpecialTeamBalancer");
}
#if defined STYLE
public void AF(ConVar C, const char[] O, const char[] N)
#else
public AF(Handle:C, String:O[], const String:N[])
#endif
{
iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz");
OnRebuildAdminCache(AdminCache_Admins);
}
#if defined STYLE
public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;}
public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);}
#if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7
public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#else
public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#endif
public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);}
public void RP(Event E, const char[] N, bool B){PTB();}
public Action TB(Handle T)
#else
public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1;
public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF);
public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);
public RP(Handle:E, String:N[], bool:B) PTB();
public Action:TB(Handle:T)
#endif
{
PTB();
return Plugin_Stop;
}
#if defined STYLE
void PTB()
{
int i=MaxClients, a, b;
#else
PTB()
{
new i=MaxClients, a, b;
#endif
do if(IsClientInGame(i)) switch(GetClientTeam(i))
{
case CS_TEAM_T:++a;
case CS_TEAM_CT:++b;
}while(--i);
if((a=(a-b)/2))
{
b = MaxClients;
if(0 <a)
{
#if defined STYLE
int[] c=new int[a];
#else
decl c[a];
#endif
do if(IsClientInGame(b))
{
if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
{
if(a>i) c[i++] = b;
}else
{
CS_SwitchTeam(b, CS_TEAM_CT);
--a;
}PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01.");
}while(--b);
if(a <i) i = a;
while(i)
{
--i;
CS_SwitchTeam(c[i], CS_TEAM_CT);
}
}else
{
#if defined STYLE
int[] c=new int[a=-a];
#else
decl c[a=-a];
#endif
do if(IsClientInGame(b))
{
if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
{
if(a>i) c[i++] = b;
}else
{
CS_SwitchTeam(b, CS_TEAM_T);
--a;
}PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01.");
}while(--b);
if(a <i) i = a;
while(i)
{
--i;
CS_SwitchTeam(c[i], CS_TEAM_T);
}
}
}
}
Спасибо! Как будет возможность все протестировать тщательно, обязательно отпишусь о результатахМожешь попробовать, но тут без кваров и для любой вип группы.
C-подобный:#define STYLE true #include <cstrike> #include <vip_core> #if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6) #pragma newdecls required public Plugin myinfo = #else #undef STYLE public Plugin:myinfo = #endif { name = "Special Team Balancer", author = "AlmazON", description = "Специальный Балансировщик Команд", version = "0.6.0", url = "http://www.hlmod.ru" } #define CSRoundEnd_GameStart 15 #if defined STYLE bool bP[MAXPLAYERS+1]; float fRD; int iAF; public void OnPluginStart() { ConVar c; #else new bool:bP[MAXPLAYERS+1], Float:fRD, iAF; public OnPluginStart() { decl String:f[AdminFlags_TOTAL], Handle:c; #endif if(GetEngineVersion() !=Engine_CSGO) { HookEvent("round_end", RE); if((c=FindConVar("mp_round_restart_delay"))) { HookConVarChange(c, RD); #if defined STYLE fRD = c.FloatValue-0.1; #else fRD = GetConVarFloat(c)-0.1; #endif }else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found)."); } else HookEvent("round_prestart", RP, EventHookMode_PostNoCopy); HookConVarChange(c=CreateConVar("stb_admin_flag", "", "Flags of administrators, excluding balancing.\n\"\" - all."), AF); #if defined STYLE char f[AdminFlags_TOTAL]; c.GetString(f,AdminFlags_TOTAL); #else GetConVarString(c,f,AdminFlags_TOTAL); #endif AF(c,f,f); AutoExecConfig(_, "SpecialTeamBalancer"); } #if defined STYLE public void AF(ConVar C, const char[] O, const char[] N) #else public AF(Handle:C, String:O[], const String:N[]) #endif { iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz"); OnRebuildAdminCache(AdminCache_Admins); } #if defined STYLE public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;} public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);} #if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7 public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);} #else public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);} #endif public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);} public void RP(Event E, const char[] N, bool B){PTB();} public Action TB(Handle T) #else public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1; public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF); public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i); public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE); public RP(Handle:E, String:N[], bool:B) PTB(); public Action:TB(Handle:T) #endif { PTB(); return Plugin_Stop; } #if defined STYLE void PTB() { int i=MaxClients, a, b; #else PTB() { new i=MaxClients, a, b; #endif do if(IsClientInGame(i)) switch(GetClientTeam(i)) { case CS_TEAM_T:++a; case CS_TEAM_CT:++b; }while(--i); if((a=(a-b)/2)) { b = MaxClients; if(0 <a) { #if defined STYLE int[] c=new int[a]; #else decl c[a]; #endif do if(IsClientInGame(b)) { if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b)) { if(a>i) c[i++] = b; }else { CS_SwitchTeam(b, CS_TEAM_CT); --a; }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01."); }while(--b); if(a <i) i = a; while(i) { --i; CS_SwitchTeam(c[i], CS_TEAM_CT); } }else { #if defined STYLE int[] c=new int[a=-a]; #else decl c[a=-a]; #endif do if(IsClientInGame(b)) { if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b)) { if(a>i) c[i++] = b; }else { CS_SwitchTeam(b, CS_TEAM_T); --a; }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01."); }while(--b); if(a <i) i = a; while(i) { --i; CS_SwitchTeam(c[i], CS_TEAM_T); } } } }
Сейчас такое попрошу...
CSS v34
Может кто-то сделать так, чтоб все "плюшки" (то есть, дополнительные пункты в админ меню), которые добавляет этот плагин в админ меню, были доступны только флагу "z", но при этом, чтоб всем было доступно то, что я пропишу в "adminmenu_custom.txt" и работало у всех флагов?
заранее спасибо!
Оффтопв общем, хочу, чтоб у гл.админа с флагом "z" били доступны все пункты меню, но когда на сервере продают админку и выдают, к примеру, флаги "abcdfk", то было доступно пункт из файла "adminmenu_custom.txt", где будет прописан пункт для перемещать в наблюдатели
Вобщем, беда. Автобаланс не работает теперь совсем))Можешь попробовать, но тут без кваров и для любой вип группы.
C-подобный:#define STYLE true #include <cstrike> #include <vip_core> #if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6) #pragma newdecls required public Plugin myinfo = #else #undef STYLE public Plugin:myinfo = #endif { name = "Special Team Balancer", author = "AlmazON", description = "Специальный Балансировщик Команд", version = "0.6.0", url = "http://www.hlmod.ru" } #define CSRoundEnd_GameStart 15 #if defined STYLE bool bP[MAXPLAYERS+1]; float fRD; int iAF; public void OnPluginStart() { ConVar c; #else new bool:bP[MAXPLAYERS+1], Float:fRD, iAF; public OnPluginStart() { decl String:f[AdminFlags_TOTAL], Handle:c; #endif if(GetEngineVersion() !=Engine_CSGO) { HookEvent("round_end", RE); if((c=FindConVar("mp_round_restart_delay"))) { HookConVarChange(c, RD); #if defined STYLE fRD = c.FloatValue-0.1; #else fRD = GetConVarFloat(c)-0.1; #endif }else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found)."); } else HookEvent("round_prestart", RP, EventHookMode_PostNoCopy); HookConVarChange(c=CreateConVar("stb_admin_flag", "", "Flags of administrators, excluding balancing.\n\"\" - all."), AF); #if defined STYLE char f[AdminFlags_TOTAL]; c.GetString(f,AdminFlags_TOTAL); #else GetConVarString(c,f,AdminFlags_TOTAL); #endif AF(c,f,f); AutoExecConfig(_, "SpecialTeamBalancer"); } #if defined STYLE public void AF(ConVar C, const char[] O, const char[] N) #else public AF(Handle:C, String:O[], const String:N[]) #endif { iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz"); OnRebuildAdminCache(AdminCache_Admins); } #if defined STYLE public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;} public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);} #if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7 public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);} #else public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);} #endif public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);} public void RP(Event E, const char[] N, bool B){PTB();} public Action TB(Handle T) #else public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1; public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF); public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i); public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE); public RP(Handle:E, String:N[], bool:B) PTB(); public Action:TB(Handle:T) #endif { PTB(); return Plugin_Stop; } #if defined STYLE void PTB() { int i=MaxClients, a, b; #else PTB() { new i=MaxClients, a, b; #endif do if(IsClientInGame(i)) switch(GetClientTeam(i)) { case CS_TEAM_T:++a; case CS_TEAM_CT:++b; }while(--i); if((a=(a-b)/2)) { b = MaxClients; if(0 <a) { #if defined STYLE int[] c=new int[a]; #else decl c[a]; #endif do if(IsClientInGame(b)) { if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b)) { if(a>i) c[i++] = b; }else { CS_SwitchTeam(b, CS_TEAM_CT); --a; }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01."); }while(--b); if(a <i) i = a; while(i) { --i; CS_SwitchTeam(c[i], CS_TEAM_CT); } }else { #if defined STYLE int[] c=new int[a=-a]; #else decl c[a=-a]; #endif do if(IsClientInGame(b)) { if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b)) { if(a>i) c[i++] = b; }else { CS_SwitchTeam(b, CS_TEAM_T); --a; }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01."); }while(--b); if(a <i) i = a; while(i) { --i; CS_SwitchTeam(c[i], CS_TEAM_T); } } } }
L 04/28/2020 - 18:27:05: SourceMod error session started
L 04/28/2020 - 18:27:05: Info (map "l4d_garage01_alleys") (file "/game/left4dead/addons/sourcemod/logs/errors_20200428.log")
L 04/28/2020 - 18:27:05: [SM] Exception reported: Invalid convar handle 0 (error 4)
L 04/28/2020 - 18:27:05: [SM] Blaming: l4d_cannounce.smx
L 04/28/2020 - 18:27:05: [SM] Call stack trace:
L 04/28/2020 - 18:27:05: [SM] [0] GetConVarInt
L 04/28/2020 - 18:27:05: [SM] [1] Line 178, C:\Compiler And Decompiler\SM 1.9.1\Windows Server Files\left4dead\addons\sourcemod\scripting\l4d_cannounce.sp::OnMapStart
sv_maxplayers пытается найти. В строчке 178 попробуй заменить hSlots = GetConVarInt(FindConVar("sv_maxplayers")); на это:Всем привет,кто сможет подправить ошибку?
Игра Left 4 DeadC-подобный:L 04/28/2020 - 18:27:05: SourceMod error session started L 04/28/2020 - 18:27:05: Info (map "l4d_garage01_alleys") (file "/game/left4dead/addons/sourcemod/logs/errors_20200428.log") L 04/28/2020 - 18:27:05: [SM] Exception reported: Invalid convar handle 0 (error 4) L 04/28/2020 - 18:27:05: [SM] Blaming: l4d_cannounce.smx L 04/28/2020 - 18:27:05: [SM] Call stack trace: L 04/28/2020 - 18:27:05: [SM] [0] GetConVarInt L 04/28/2020 - 18:27:05: [SM] [1] Line 178, C:\Compiler And Decompiler\SM 1.9.1\Windows Server Files\left4dead\addons\sourcemod\scripting\l4d_cannounce.sp::OnMapStart
Изменил:sv_maxplayers пытается найти. В строчке 178 попробуй заменить hSlots = GetConVarInt(FindConVar("sv_maxplayers")); на это:
hSlots = MaxClients;
hSlots = GetConVarInt(FindConVar("sv_maxplayers"));
hSlots = MaxClients;
Не зависит от того, что ты изменил. Этому плагину наверное лет 10, написанный на древний сурсмод. Надо в инклюде geoip смотреть новые функции.Изменил:
наC-подобный:hSlots = GetConVarInt(FindConVar("sv_maxplayers"));итог на фото)C-подобный:hSlots = MaxClients;
А где хоть одна ошибка?с ошибкой скомпилился.