Alex's Works
Участник
- Сообщения
- 8
- Реакции
- 0
Доброго времени суток!
На днях столкнулся с проблемой в написании плагина. И как человек, который плохо понимает в SourcePawn, жду вашей помощи.
Проблема №1 вот в чём.
Мне нужна консольная команда, которая будет иметь 2 аргумента, а не стандартный 1 Оффтоп
Проблема №2.
Мне нужно перевести значение аргумента в строку для последующей проверки наличия "аргумента" в списке игроков на сервере. IntToString? Или просто сравнить i с args?
Проблема №3
Несовпадение тегов на GetAdminFlag(client, Admin_Root). Client из admin_swich.
Пробела №4.
Пустой оператор на args != 1 , который получает cmd_survivor от admin_switch через команду cmd_survivor(args, 1)
Нарезка кода :
На днях столкнулся с проблемой в написании плагина. И как человек, который плохо понимает в SourcePawn, жду вашей помощи.
Проблема №1 вот в чём.
Мне нужна консольная команда, которая будет иметь 2 аргумента, а не стандартный 1 Оффтоп
(если я правильно понял что args - это одно значение (даже не смотря на множественное число))
. Компилятор на RegConsoleCmd("switch_player", admin_switch) и public Action:admin_switch(client, args, arg2) говорит о ненахождении прототипа функции, сколько бы я не писал return Plugin_Handled и Plugin_Continue. Возможно из-за бесконечного там числа ошибок или аргумента 2. Оффтоп(не использую RegAdminCmd, потому что не знаю, кто по флагам консоль, ибо у меня сервер и клиент соединён в одно целое, и там консоль как client=0 :fool3:).
Проблема №2.
Мне нужно перевести значение аргумента в строку для последующей проверки наличия "аргумента" в списке игроков на сервере. IntToString? Или просто сравнить i с args?
Проблема №3
Несовпадение тегов на GetAdminFlag(client, Admin_Root). Client из admin_swich.
Пробела №4.
Пустой оператор на args != 1 , который получает cmd_survivor от admin_switch через команду cmd_survivor(args, 1)
Нарезка кода :
C-подобный:
public OnPluginStart()
{
RegConsoleCmd("spectate", cmd_spectate);
RegConsoleCmd("switch_player", admin_switch);
RegConsoleCmd("survivor", cmd_survivor);
RegConsoleCmd("infected", cmd_infected);
afkTimer = CreateTimer(20.0, afkCheckThread, _, TIMER_REPEAT);
afkRegisterEvents();
SetConVarInt(FindConVar("vs_max_team_switches"), 9999);
if (FileExists("addons/sourcemod/gamedata/l4d_takeover.txt"))
{
L4DTakeoverConf = LoadGameConfigFile("l4d_takeover");
if (L4DTakeoverConf == INVALID_HANDLE)
{
SetFailState("Survivor Bot Takeover have errors. Could not load gamedata/l4d_takeover.txt");
return;
}
else
{
StartPrepSDKCall(SDKCall_Player);
PrepSDKCall_SetFromConf(L4DTakeoverConf, SDKConf_Signature, "SetHumanSpec");
PrepSDKCall_AddParameter(SDKType_CBasePlayer, SDKPass_Pointer);
L4DTakeoverSHS = EndPrepSDKCall();
StartPrepSDKCall(SDKCall_Player);
PrepSDKCall_SetFromConf(L4DTakeoverConf, SDKConf_Signature, "TakeOverBot");
PrepSDKCall_AddParameter(SDKType_Bool, SDKPass_Plain);
L4DTakeoverTOB = EndPrepSDKCall();
}
}
else
{
SetFailState("Survivor Bot Takeover have errors. Could not load gamedata/l4d_takeover.txt");
return;
}
}
C-подобный:
public Action:admin_switch(client, args, arg2){
if(IsClientInGame(args) && IsClientConnected(args) && !IsFakeClient(args) && ( client==0 || GetAdminFlag(client, Admin_Root, Access_Real) || GetAdminFlag(client, Admin_Kick, Access_Real)))
{
char name[60];
int maxplayers, target = -1;
IntToString(args, name, 60);
maxplayers = GetMaxClients();
for (int i = 1; i <= maxplayers; i++)
{
char other[60];
GetClientName(i, other, sizeof(other));
if (StrEqual(name, other))
{
target = 1;
}
else {return Plugin_Handled;}
if (target == 1)
{
switch(arg2)
{
case 1:
{
cmd_spectate(args, 1);
return Plugin_Continue;
}
case 2:
{
cmd_survivor(args, 1);
return Plugin_Continue;
}
case 3:
{
cmd_infected(args, 1);
return Plugin_Continue;
}
}
}
else {return Plugin_Handled;}
}
}
else {return Plugin_Handled;}
return Plugin_Continue;
}
C-подобный:
public Action:cmd_survivor(client, args){
if(client==0){return Plugin_Handled;}
if(GetClientTeam(client)==2){return Plugin_Handled;}
for (new x =1; x<32; x++){
if(IsClientInGame(x) && IsClientConnected(x)){
if (GetClientTeam(x)==2 && !IsFakeClient(x)){surv++;}}}
if (surv == 4 && args != 1){PrintToChat(client, "[Team switcher] No places"); ;}
else{
new bot;
for (bot = 1; bot <= 32; bot++){
if (!IsClientConnected(bot) || !IsFakeClient(bot) || GetClientTeam(bot) != 2 || GetClientHealth(bot) == 0){}
else{break;}
}
SDKCall(L4DTakeoverSHS, bot, client);
SDKCall(L4DTakeoverTOB, client, true);
surv=0;
PrintToChatAll("\x01\x04[SM] \x03You \x01has been switched to \x03Survivors");
return Plugin_Continue;
}}