filipok
Участник
- Сообщения
- 72
- Реакции
- 28
Всем привет, есть плагин:
Есть несколько глобальных массивов с названиями карт.
Получаю название карты и в строке 51 форматирую массив MapName в таком виде: "Название_карты[i)" Проще говоря добавляю [i).
Далее пытаюсь сравнить MapName в цикле с шагом i (строка 85).
Чего хочу: подставить в цикл название карты с [I) и что бы оно понималось не как текст, а как ячейка массива.
Но компилятор выдает варнинги о том, что глобальные массивы с названиями карт не используются, т.е. сурсмод понимает содержание массива MapName именно как текст.
Есть ли какая-то функция, которая могла бы транслировать текст в другие функции как часть их синтаксиса?
Надеюсь правильно выразился.
PHP:
/**
Credits:
Топик плагина http://hlmod.ru/threads/maplimit-otbivaem-oxotu-begat-na-b-pri-malom-kolichestve-igrokov-na-karte-de_dust2.34302/
Этот плагин не был бы таким солидным и супер мега оптимизированным без помощи пользователей http://hlmod.ru/
Огромное спасибо за помощь и советы пользователям: R1KO и AlmzON
Особую благодарность хочу выразить AlmazON. В нынешнем состоянии весь код состоит из его подсказок и советов. От меня тут осталась только идея)
AlmazON, чувак, общение с тобой - бесценный опыт, спасибо.
**/
#pragma semicolon 1
#include <sourcemod>
#include <sdkhooks>
#include <sdktools>
#define PLUGIN_MAINNAME "MapLimit"
#define PLUGIN_NAME "MapLimit"
#define PLUGIN_AUTHOR "filip fixed by AlmazON"
#define PLUGIN_VERSION "0.1.0"
#define MAX_PLAYERS_WHITHOUT_MIDDLE 10
char MapList[][] = {
"de_dust2",
"de_inferno",
"de_mirage"
};
char de_dust2[][] = { "OutsideTunnel", "UpperTunnel", "LowerTunnel", "Middle", "MidDoors", "BDoors", "BombsiteB" };
char de_inferno[][] = {"Zone1", "Zone2", "Zone3", "Zone4", "Zone5", "Zone6", "Zone7"};
char de_mirage[][] = {"Zone1", "Zone2", "Zone3", "Zone4", "Zone5", "Zone6", "Zone7"};
bool OneTimeNotify;
bool IsCorrectMap;
int CountPlayers;
char MapName[16];
public Plugin myinfo = {name = PLUGIN_MAINNAME, author = PLUGIN_AUTHOR, version = PLUGIN_VERSION}
public void OnPluginStart()
{
HookEvent("round_freeze_end", Event_RoundFreezeEnd, EventHookMode_PostNoCopy);
RegAdminCmd("sm_place", WhereAmI, ADMFLAG_BAN);
}
public void OnConfigsExecuted(){
char sBuffer[16];
static int i;
GetCurrentMap(sBuffer, sizeof(sBuffer));
for (i = 0; i < sizeof(MapList); ++i){
IsCorrectMap = StrEqual(sBuffer, MapList[i]);
if(IsCorrectMap){
FormatEx(MapName, sizeof(MapName), "%s[i]", sBuffer);
return;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////CheckZoneNameComand (for test)/////////////////////////////////////////////////////
public Action WhereAmI(int client, int args){
char location[32];
GetEntPropString(client, Prop_Send, "m_szLastPlaceName", location, sizeof(location));
ReplyToCommand(client, "%N is in %s", client, location);
LogMessage("client %N is in %s", client, location);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
public void OnClientPostAdminCheck(int client){
if(IsCorrectMap && !IsFakeClient(client)){
SDKHook(client, SDKHook_PostThinkPost, OnPostThinkPost);
CountPlayers = GetClientCount();
}
}
public void OnPostThinkPost(int client){
if(IsPlayerAlive(client))
{
static char location[16];
static int i;
GetEntPropString(client, Prop_Send, "m_szLastPlaceName", location, sizeof(location));
//LogMessage("m_szLastPlaceName: %s", location);
if( CountPlayers < MAX_PLAYERS_WHITHOUT_MIDDLE ){
for (i = 0; i < 7; ++i){
//LogMessage("StrEqual: %s-%s -> %b", location, MapName, StrEqual(location, MapName));
if (StrEqual(location, MapName)){
PrintToChat(client, "Не ходи на Б!!!");
IgniteEntity(client, 3.8);
return;
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////оповещения вначале раунда///////////////////////////////////////////////
public Event_RoundFreezeEnd(Handle:event, const String:name[], bool:dontBroadcast) {
if ( IsCorrectMap ) {
if (GetClientCount() < MAX_PLAYERS_WHITHOUT_MIDDLE){
PrintHintTextToAll("Проходы на Б и мидл запрещены, на сервере менее %d игроков", MAX_PLAYERS_WHITHOUT_MIDDLE);
OneTimeNotify = true;
}
else if (OneTimeNotify){
PrintHintTextToAll("Играет полная карта");
OneTimeNotify = false;
}
}
}
Получаю название карты и в строке 51 форматирую массив MapName в таком виде: "Название_карты[i)" Проще говоря добавляю [i).
Далее пытаюсь сравнить MapName в цикле с шагом i (строка 85).
Чего хочу: подставить в цикл название карты с [I) и что бы оно понималось не как текст, а как ячейка массива.
Но компилятор выдает варнинги о том, что глобальные массивы с названиями карт не используются, т.е. сурсмод понимает содержание массива MapName именно как текст.
Есть ли какая-то функция, которая могла бы транслировать текст в другие функции как часть их синтаксиса?
Надеюсь правильно выразился.