Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
#include <zombieplague>
#define PLUGIN_NAME "[ZP] Addon: Achievements"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "De{a}gLe"
#define PLUGIN_PREFIX "^x04[ZP-Achievements]^x01"
#define VAULT_NAME "zp_achievements"
#define isClientVailed(%1) (1 <= %1 <= g_maxPlayers)
enum items
{
name[32],
amount
};
enum Stats
{
Score,
Kills,
Deaths,
Infects
};
new const g_menuSAPs[][items] =
{
{"1 SAP", 25},
{"2 SAP", 50},
{"3 SAP", 75},
{"4 SAP", 100},
{"5 SAP", 125},
{"6 SAP", 150},
{"7 SAP", 175},
{"8 SAP", 200}
};
new const g_menuAPs[][items] =
{
{"25 APs", 1},
{"50 APs", 2},
{"75 APs", 3},
{"100 APs", 4},
{"125 APs", 5},
{"150 APs", 6},
{"175 APs", 7},
{"200 APs", 8}
};
new g_maxPlayers;
new g_msgSayText;
new g_vault;
new g_pPasswordField;
new g_pLoginTime;
new g_pZombieKillHuman;
new g_pZombieKillSurvivor;
new g_pHumanKillZombie;
new g_pHumanKillZombieKnife;
new g_pHumanKillNemesis;
new g_pHumanKillNemesisKnife;
new g_pHumanKillMutated;
new g_pHumanKillMutatedKnife;
new g_pNemesisKillHuman;
new g_pNemesisKillSurvivor;
new g_pMutatedKillHuman;
new g_pMutatedKillSurvivor;
new g_pSurvivorKillZombie;
new g_pSurvivorKillZombieKnife;
new g_pSurvivorKillNemesis;
new g_pSurvivorKillNemesisKnife;
new g_pSurvivorKillMutated;
new g_pSurvivorKillMutatedKnife;
new g_pZombiesWin;
new g_pHumansWin;
new g_pNemesisWin;
new g_pNemesisPlagueWin;
new g_pMutatedWin;
new g_pSurvivorWin;
new g_pSurvivorPlagueWin;
new bool:g_login[33];
new bool:g_registered[33];
new g_stats[33][Stats];
new g_playerName[33][32];
new g_playerAuth[33][32];
new g_password[33][32];
/* =================================================================================================
[Plugin Initialization]
================================================================================================= */
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_dictionary("zp_achievements.txt");
RegisterHam(Ham_Killed, "player", "forwardPlayerKilledPost", 1);
registerSayCommand("register", "commandRegister");
registerSayCommand("achievements", "commandAchievements");
register_clcmd("_get_achievement_password", "commandGetPassword");
register_clcmd("_set_achievement_password", "commandSetPassword");
g_pPasswordField = register_cvar("zp_password_field", "_achv_pw");
g_pLoginTime = register_cvar("zp_login_time", "60.0");
g_pZombieKillHuman = register_cvar("zp_zombie_kill_human", "0");
g_pZombieKillSurvivor = register_cvar("zp_zombie_kill_survivor", "0");
g_pHumanKillZombie = register_cvar("zp_human_kill_zombie", "0");
g_pHumanKillZombieKnife = register_cvar("zp_human_kill_zombie_knife", "0");
g_pHumanKillNemesis = register_cvar("zp_human_kill_nemesis", "0");
g_pHumanKillNemesisKnife = register_cvar("zp_human_kill_nemesis_knife", "0");
g_pHumanKillMutated = register_cvar("zp_human_kill_mutated", "0");
g_pHumanKillMutatedKnife = register_cvar("zp_human_kill_mutated_knife", "0");
g_pNemesisKillHuman = register_cvar("zp_nemesis_kill_human", "0");
g_pNemesisKillSurvivor = register_cvar("zp_nemesis_kill_survivor", "0");
g_pMutatedKillHuman = register_cvar("zp_mutated_kill_human", "0");
g_pMutatedKillSurvivor = register_cvar("zp_mutated_kill_survivor", "0");
g_pSurvivorKillZombie = register_cvar("zp_survivor_kill_zombie", "0");
g_pSurvivorKillZombieKnife = register_cvar("zp_survivor_kill_zombie_knife", "0");
g_pSurvivorKillNemesis = register_cvar("zp_survivor_kill_nemesis", "0");
g_pSurvivorKillNemesisKnife = register_cvar("zp_survivor_kill_nemesis_knife", "0");
g_pSurvivorKillMutated = register_cvar("zp_survivor_kill_mutated", "0");
g_pSurvivorKillMutatedKnife = register_cvar("zp_survivor_kill_mutated_knife", "0");
g_pZombiesWin = register_cvar("zp_zombies_win", "0");
g_pHumansWin = register_cvar("zp_humans_win", "0");
g_pNemesisWin = register_cvar("zp_nemesis_win", "0");
g_pNemesisPlagueWin = register_cvar("zp_nemesis_plague_win", "0");
g_pMutatedWin = register_cvar("zp_mutated_win", "0");
g_pSurvivorWin = register_cvar("zp_survivor_win", "0");
g_pSurvivorPlagueWin = register_cvar("zp_survivor_plague_win", "0");
g_msgSayText = get_user_msgid("SayText");
g_vault = nvault_open(VAULT_NAME);
g_maxPlayers = get_maxplayers();
}
public plugin_cfg()
{
static configDir[64];
get_configsdir(configDir, charsmax(configDir));
add(configDir, charsmax(configDir), "/zp_achievements.cfg");
server_cmd("exec %s", configDir);
}
public plugin_end()
nvault_close(g_vault);
/* =================================================================================================
[Commands]
================================================================================================= */
public commandRegister(id)
{
menuRegister(id);
}
public commandAchievements(id)
{
if (!g_login[id])
{
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "NOT_LOGIN");
return PLUGIN_HANDLED;
}
menuAchievements(id);
return PLUGIN_CONTINUE;
}
public commandGetPassword(id)
{
static message[32];
read_args(message, charsmax(message));
if (equali(g_password[id], message))
{
g_login[id] = true;
loadClientInfo(id);
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "CORRECT_PASSWORD");
}
else
{
client_cmd(id, "messagemode _get_achievement_password");
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "INCORRECT_PASSWORD");
}
}
public commandSetPassword(id)
{
static message[32];
read_args(message, charsmax(message));
if (strlen(message) < 5)
{
client_cmd(id, "messagemode _set_achievement_password");
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "SHORT_PASSWORD");
}
g_registered[id] = true;
copy(g_password[id], charsmax(g_password[]), message);
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "REGISTRATION");
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "REGISTRATION_PASSWORD", g_password[id]);
}
/* =================================================================================================
[Menus]
================================================================================================= */
public menuRegister(id)
{
new menu = menu_create("Register Menu", "menuHandleRegister");
menu_additem(menu, "Login");
menu_additem(menu, "Register");
menu_display(id, menu);
}
public menuHandleRegister(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch (item)
{
case 0:
{
if (!g_registered[id])
{
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "NOT_REGISTERED");
return PLUGIN_CONTINUE;
}
client_cmd(id, "messagemode _get_achievement_password");
}
case 1:
{
if (g_registered[id])
{
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "ALREADY_REGISTERED");
return PLUGIN_CONTINUE;
}
client_cmd(id, "messagemode _set_achievement_password");
}
}
return PLUGIN_HANDLED;
}
public menuAchievements(id)
{
new menu = menu_create("Achievements Menu", "menuHandleAchievements");
menu_additem(menu, "Buy SAPs by APs");
menu_additem(menu, "Buy APs by SAPs");
menu_display(id, menu);
}
public menuHandleAchievements(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new subMenu, i;
switch (item)
{
case 0:
{
subMenu = menu_create("Buy SAPs", "menuHandleBuySAPs");
for (i = 0; i < sizeof g_menuSAPs; i++)
menu_additem(subMenu, g_menuSAPs[i][name]);
menu_display(id, subMenu);
}
case 1:
{
subMenu = menu_create("Buy APs", "menuHandleBuyAPs");
for (i = 0; i < sizeof g_menuAPs; i++)
menu_additem(subMenu, g_menuAPs[i][name]);
menu_display(id, subMenu);
}
}
return PLUGIN_HANDLED;
}
public menuHandleBuySAPs(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
zp_set_user_sap(id, zp_get_user_sap(id) + g_menuSAPs[item][amount]);
return PLUGIN_HANDLED;
}
public menuHandleBuyAPs(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + g_menuAPs[item][amount]);
return PLUGIN_HANDLED;
}
/* =================================================================================================
[Forwards]
================================================================================================= */
public client_putinserver(id)
{
/*
if (!isClientVailed(id))
return;
*/
get_user_name(id, g_playerName[id], charsmax(g_playerName[]));
get_user_authid(id, g_playerAuth[id], charsmax(g_playerAuth[]));
new Float:loginTime = get_pcvar_float(g_pLoginTime);
zp_colored_print(id, "%s %L", PLUGIN_PREFIX, id, "LOGIN_TIME", loginTime);
set_task(loginTime, "taskCheckLogin", id);
g_stats[id][Score] = (g_stats[id][Kills] + g_stats[id][Infects]) - g_stats[id][Deaths];
}
public client_disconnect(id)
{
/*
if (!g_login[id])
return;
*/
saveClientInfo(id);
}
public client_infochanged(id)
{
if (!g_login[id])
return;
static newName[32];
get_user_info(id, "name", newName, charsmax(newName));
if (!equal(g_playerName[id], newName))
{
static passwordField[32], password[32];
get_pcvar_string(g_pPasswordField, passwordField, charsmax(passwordField));
get_user_info(id, passwordField, password, charsmax(password));
if (equal(g_password[id], password))
g_login[id] = true;
}
}
public forwardPlayerKilledPost(id, attacker, gib)
{
/*
if (!isClientVailed(attacker) || id == attacker)
return HAM_IGNORED;
*/
new killReward, bool:knifeKill = get_user_weapon(attacker) == CSW_KNIFE && get_pdata_int(id, 76) & (DMG_BULLET|DMG_NEVERGIB) ? true : false;
if (zp_get_user_zombie(attacker))
{
if (zp_get_user_nemesis(attacker))
{
if (zp_get_user_survivor(id))
{
killReward = get_pcvar_num(g_pNemesisKillSurvivor);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "NEMESIS_KILLED_SURVIVOR", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pNemesisKillHuman);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "NEMESIS_KILLED_HUMAN", g_playerName[attacker], g_playerName[id], killReward);
}
}
else if (zp_get_user_mutated(attacker))
{
if (zp_get_user_survivor(id))
{
killReward = get_pcvar_num(g_pMutatedKillSurvivor);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "MUTATED_KILLED_SURVIVOR", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pMutatedKillHuman);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "MUTATED_KILLED_HUMAN", g_playerName[attacker], g_playerName[id], killReward);
}
}
else
{
if (zp_get_user_survivor(id))
{
killReward = get_pcvar_num(g_pZombieKillSurvivor);
if (!killReward)
return HAM_IGNORED;
zp_set_user_rage(attacker, zp_get_user_rage(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "ZOMBIE_KILLED_SURVIVOR", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pZombieKillHuman);
if (!killReward)
return HAM_IGNORED;
zp_set_user_rage(attacker, zp_get_user_rage(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "ZOMBIE_KILLED_HUMAN", g_playerName[attacker], g_playerName[id], killReward);
}
}
}
else
{
if (zp_get_user_survivor(attacker))
{
if (zp_get_user_nemesis(id))
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pSurvivorKillNemesisKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_NEMESIS_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pSurvivorKillNemesis);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_NEMESIS", g_playerName[attacker], g_playerName[id], killReward);
}
}
else if (zp_get_user_mutated(id))
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pSurvivorKillMutatedKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_MUTATED_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pSurvivorKillMutated);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_MUTATED", g_playerName[attacker], g_playerName[id], killReward);
}
}
else
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pSurvivorKillZombieKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_ZOMBIE_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pSurvivorKillZombie);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "SURVIVOR_KILLED_ZOMBIE", g_playerName[attacker], g_playerName[id], killReward);
}
}
}
else
{
if (zp_get_user_nemesis(id))
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pHumanKillNemesisKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_NEMESIS_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pHumanKillNemesis);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_NEMESIS", g_playerName[attacker], g_playerName[id], killReward);
}
}
else if (zp_get_user_mutated(id))
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pHumanKillMutatedKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_MUTATED_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pHumanKillMutated);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_MUTATED", g_playerName[attacker], g_playerName[id], killReward);
}
}
else
{
if (knifeKill)
{
killReward = get_pcvar_num(g_pHumanKillZombieKnife);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_ZOMBIE_KNIFE", g_playerName[attacker], g_playerName[id], killReward);
}
else
{
killReward = get_pcvar_num(g_pHumanKillZombie);
if (!killReward)
return HAM_IGNORED;
zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + killReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, id, "HUMAN_KILLED_ZOMBIE", g_playerName[attacker], g_playerName[id], killReward);
}
}
}
}
g_stats[id][Deaths]++;
g_stats[attacker][Kills]++;
return HAM_IGNORED
}
public zp_user_infected_post(id, infector, nemesis, mutated)
{
/*
if (id == infector)
return;
*/
g_stats[id][Deaths]++;
g_stats[infector][Infects]++;
}
public zp_round_ended(winTeam)
{
new winReward;
for (new i = 1; i <= g_maxPlayers; i++)
{
switch (winTeam)
{
case WIN_ZOMBIES:
{
if (zp_is_nemesis_round() && zp_get_user_nemesis(i))
{
winReward = get_pcvar_num(g_pNemesisWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "NEMESIS_WIN", winReward);
}
else if (zp_is_mutated_round() && zp_get_user_mutated(i))
{
winReward = get_pcvar_num(g_pMutatedWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "MUTATED_WIN", winReward);
}
else if (zp_is_plague_round() && zp_get_user_nemesis(i))
{
winReward = get_pcvar_num(g_pNemesisPlagueWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "NEMESIS_PLAGUE_WIN", winReward);
}
else
{
winReward = get_pcvar_num(g_pZombiesWin);
if (!winReward)
return;
zp_set_user_rage(i, zp_get_user_rage(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "ZOMBIES_WIN", winReward);
}
}
case WIN_HUMANS:
{
if (zp_is_survivor_round() && zp_get_user_survivor(i))
{
winReward = get_pcvar_num(g_pSurvivorWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "SURVIVOR_WIN", winReward);
}
else if (zp_is_plague_round() && zp_get_user_survivor(i))
{
winReward = get_pcvar_num(g_pSurvivorPlagueWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "SURVIVOR_PLAGUE_WIN", winReward);
}
else
{
winReward = get_pcvar_num(g_pHumansWin);
if (!winReward)
return;
zp_set_user_ammo_packs(i, zp_get_user_ammo_packs(i) + winReward);
zp_colored_print(0, "%s %L", PLUGIN_PREFIX, i, "HUMANS_WIN", winReward);
}
}
}
}
}
/* =================================================================================================
[Tasks]
================================================================================================= */
public taskCheckLogin(id)
{
if (g_login[id])
return;
server_cmd("kick #%d %L", get_user_userid(id), id, "LOGIN_KICK", get_pcvar_float(g_pLoginTime));
}
/* =================================================================================================
[Stocks]
================================================================================================= */
loadClientInfo(id)
{
static password[32], ammoPacks, rage, specialAmmoPacks, kills, deaths, infects;
nvault_get(g_vault, g_playerAuth[id], password, charsmax(password), ammoPacks, rage, specialAmmoPacks, kills, deaths, infects);
copy(g_password[id], charsmax(g_password[]), password);
zp_set_user_ammo_packs(id, ammoPacks);
zp_set_user_rage(id, rage);
zp_set_user_sap(id, specialAmmoPacks);
g_stats[id][Kills] = kills;
g_stats[id][Deaths] = deaths;
g_stats[id][Infects] = infects;
}
saveClientInfo(id)
{
static data[128];
formatex(data, charsmax(data), "%s %d %d %d %d %d %d", g_password[id], zp_get_user_ammo_packs(id), zp_get_user_rage(id), zp_get_user_sap(id), g_stats[id][Kills], g_stats[id][Deaths], g_stats[id][Infects]);
nvault_set(g_vault, g_playerAuth[id], data);
}
stock zp_colored_print(target, const message[], any:...)
{
static buffer[512]
// Send to everyone
if (!target)
{
static player
for (player = 1; player <= g_maxPlayers; player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Replace some keys (for using ML support)
replace_all(buffer, charsmax(buffer), "!n", "^x01")
replace_all(buffer, charsmax(buffer), "!t", "^x03")
replace_all(buffer, charsmax(buffer), "!g", "^x04")
// Send it
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
}
}
// Send to specific target
else
{
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Replace some keys (for using ML support)
replace_all(buffer, charsmax(buffer), "!n", "^x01")
replace_all(buffer, charsmax(buffer), "!t", "^x03")
replace_all(buffer, charsmax(buffer), "!g", "^x04")
// Send it
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
stock registerSayCommand(const say[], const function[])
{
static cmd[32];
formatex(cmd, charsmax(cmd), "say %s", say);
register_clcmd(cmd, function);
formatex(cmd, charsmax(cmd), "say_team %s", say);
register_clcmd(cmd, function);
formatex(cmd, charsmax(cmd), "say .%s", say);
register_clcmd(cmd, function);
formatex(cmd, charsmax(cmd), "say_team .%s", say);
register_clcmd(cmd, function);
formatex(cmd, charsmax(cmd), "say /%s", say);
register_clcmd(cmd, function);
formatex(cmd, charsmax(cmd), "say_team /%s", say);
register_clcmd(cmd, function);
}