Oylsister |
04-15-2021 09:53 |
Exclude multiple map OnMapEnd()
Hi I recently tried to write a plugin that could exclude a multiple map after the map end. The idea is to exclude the map inorder to prevent player nominate the same map with different version which happened on Zombie Escape server.
I kind the stuck on the making kv stuff and to proceed on the map end here.
I used this mapchooser-extended plugin btw https://gogs.botox.bz/CSSZombieEscap...ooser_extended
Code:
"groupcooldown"
{
"tyranny"
{
// if we find map that have the exactly the same name on config, on map end make every map in the same section "tyranny" get excluded from the mapchooser
"ze_tyranny_v5_go3" {}
"ze_tyranny2_v1_csgo2" {}
}
"ff"
{
"ff" {}
"ff2" {}
}
}
PHP Code:
#include <sourcemod>
#include <mapchooser>
#include <mapchooser_extended>
#include <nextmap>
#include <sdktools>
#include <multicolors>
#pragma newdecls required
enum struct MapData
{
char data_mapname[PLATFORM_MAX_PATH];
char data_mapgroupname[64];
int data_total;
}
MapData g_mapdata;
char sConfig[PLATFORM_MAX_PATH];
public Plugin myinfo =
{
name = "MapChooser Extended Group Cooldown",
author = "Oylsister",
description = "Set a cooldown for every map that in the same group",
version = "1.0",
url = ""
};
public void OnPluginStart()
{
RegConsoleCmd("sm_mapgroup", CheckMapGroupName);
RegConsoleCmd("sm_getcooldown", CheckMapCooldown);
}
public void OnMapStart()
{
BuildPath(Path_SM, sConfig, sizeof(sConfig), "configs/mapchooser_extended_group.cfg");
KeyValues kv = CreateKeyValues("groupcooldown");
char mapgroup[64];
FileToKeyValues(kv, sConfig);
if(KvGotoFirstSubKey(kv))
{
do
{
KvGetSectionName(kv, mapgroup, sizeof(mapgroup));
if(KvGotoFirstSubKey(kv, false))
{
do
{
FormatEx(g_mapdata.data_mapgroupname, 64, "%s", mapgroup);
KvGetSectionName(kv, g_mapdata.data_mapname, PLATFORM_MAX_PATH);
g_mapdata.data_total++;
}
while KvGotoFirstSubKey(kv, false);
KvGoBack(kv);
}
} while (KvGotoNextKey(kv));
}
}
public void OnMapEnd()
{
for
}
public Action CheckMapGroupName(int client, int args)
{
if(args < 1)
{
CPrintToChat(client, "\x04[MCE]\x01 Usage: sm_mapgroup <mapname>");
return Plugin_Handled;
}
char mapname[PLATFORM_MAX_PATH];
GetCmdArg(1, mapname, sizeof(mapname));
if(StrEqual(mapname, g_mapdata.data_mapname, false))
{
CPrintToChat(client, "\x04[MCE]\x01 %s Group Map: %s", g_mapdata.data_mapname, g_mapdata.data_mapgroupname);
return Plugin_Handled;
}
else
{
CPrintToChat(client, "\x04[MCE]\x01 The map doesn't has a group");
return Plugin_Handled;
}
}
public Action CheckMapCooldown(int client, int args)
{
if(args < 1)
{
CPrintToChat(client, "\x04[MCE]\x01 Usage: sm_mapgroup <mapname>");
return Plugin_Handled;
}
char mapname[PLATFORM_MAX_PATH];
GetCmdArg(1, mapname, sizeof(mapname));
int iCooldown = GetMapCooldown(mapname);
if(StrEqual(mapname, g_mapdata.data_mapname, false))
{
CPrintToChat(client, "\x04[MCE]\x01 %s Cooldown: %d", g_mapdata.data_mapname, g_mapdata.data_cooldown);
return Plugin_Handled;
}
else
{
CPrintToChat(client, "\x04[MCE]\x01 %s Cooldown: %d (No-Group)", mapname, iCooldown);
return Plugin_Handled;
}
}
|