say de bf2
#1
hola quisiera hacer que los rangos bf2 que al escribir apareciera que rango en el que ban ,y si se pudiera adaptar un admin chat
porfavor pacman

Código PHP:
/************************************************************************************************************************************
*    Battlefield 2: Rank Mod by pRED* - [email protected]
*
*    An attempt to recreate the battlefield ranking system onto cs1.6
*    Currently features the basics of the ranking system, with no power up gain recieved from leveling.
*
*    Ranks are based on the number of kills from the csstats system
*
*    Badges can also be earned to get power up bonuses - See rewards list. Or look at /bf2menu in game
*
*
*    Wish list:     Add some more badges maybe? Ive put some ideas in comments...
*            Rank pictures..
*
*    Known Bugs    General optimization stuff - Ive done most in the wiki tut but there may be more
*
*    Rewards:    Knife - 20/40/60% of damage done with knife returned to player
*            Support - +2/+4/+6 M249 damage per bullet
*            Pistol – 20/25/33% chance of stunning attacker
*            Assault - +10/+20/+30 Bonus HP when spawning
*            Sniper - 1/3,1/2,1/1 Chance of Free awp/scout
*            Explosives - .2/.4/.6 multiplier added to Grenade damage
*            Shotgun - 150/100/50 alpha level invisibility with Knife
*            SMG – 15/30/45 speed boost added for all weapons
*
*    Credits:    Xuntric and PM for their combined work on the XP based plugin tutorial (load, save and menu stuff..)
*            Avalanche for the removed cone of fire in i_aim_good plugin (used for lowered recoil on the para)
*            Phantom Warrior and palehorse for inadvertently giving me the idea for this (Military Rank Mod thread..)
*            ev0d00b cos I stole lots of code out of his/our Capture the Hax Plugin
*            Ubernet (games.uber.net.nz) for giving me a test server and help test the mod
*            stupok69 for helping fix the /whois command
*            Geesu for all his defined cs weapon speeds used in wc3ft (resetting users speed after imobilising them),
*            and some great examples of screen flashes and shakes.
*            Cheap_Suit for the extra recoil code
*            Hawk522 for his tutorial on SQLx (and helping me debug problems with it)
*            styremelaker for massive amount of csdm testing.
*            vittu for going through the code and finding heaps of mistakes and efficiency changes
*            teamme06 for his colorchat code
*            vittu again for supporting my plugin more than I do..
*            BlueRaja for player kills and score update code from his damage multiplier plugin (big copy, paste of the kill function)
*            palehorse for the web html documents
*            vittu for testing and helping fix bugs in the code.
*            Emp' for the new amxx menu tutorial
*
*    Cvars (copy/paste the following to amxx.cfg):

////////////////////////  Battlefield 2: Rank Mod  ////////////////////////

bf2_active 1        //(1|0) - Turns the plugin on or off - Default 1
bf2_badges 1        //(1|0) - Turns the badge system on or off - Default 1
bf2_badgepowers 0    //(1|0) - Enable/Disable the powers for the badges - Default 0
bf2_awp 0        //(1|0) - Is user given an awp or scout by having the sniper badge - Default 0 (scout)
bf2_ffa 0        //(1|0) - Enable/Disable team attack for receiving pts and for badge use, turn on for "free for all" servers - Default 0
bf2_xpmultiplier 0.1    //(float) - Changes the point multiplier needed to reach each level - Default 0.1 (15 points for rank 1, 20k points for top rank)
bf2_xpminplayers 2    //(int) - Minimum number of plays required to be in server before bonus bomb and flag xp (only) is awarded
bf2_reset_days 21    //(int) - Number of days without playing till xp gets pruned per user (Note: currently nvault saving only)
bf2_icon_time 1.5    //(float) - Amount of time to display the rank icons for. Default 1.5, 0 to disable icons all together.
bf2_help_url ""        //(string) - Remote folder where the bf2 web docs are stored (optional) do not include the trailing /
bf2_statustext 1    //(int) - Enable/Disable the points, # of bagdges, and rank info that replaces player name info in hud - Default 1
bf2_hud_options "abcde"    //(flags) - Set options for player aim hud message info (not shown if miscstats PlayerName option is on) - Default "abcde"
            //flag a - Display Health/Armor/Weapon for teammates
            //flag b - Display Rank for teammates
            //flag c - Display Rank for enemies
            //flag d - Hide display for invisible enemies
            //flag e - Move the display to above peoples heads

//CS Flags integration
bf2_flag_kills 2    //(int) - CS Flags - How many bf2 points are awarded for capturing a flag
bf2_flag_round_kills 0    //(int) - CS Flags - How many bf2 points are awarded for winning a round
bf2_flag_match_kills 0    //(int) - CS Flags - How many bf2 points are awarded for winning the match

///////////////////////////////////////////////////////////////////////////

*
*    Cmds:        say /bf2menu - Shows the Main Menu
*            say /who - Shows a list of player and their rank
*            say /whois <name> - Show the rank and badges of a specific player
*            say /whostats <name> - Show the stats page for a player
*            say /ranks - Shows the kill xp table
*            say /bf2stats - your personal stats pages
*            say /help - Displays a Help MOTD
*            say /badges1 - Displays a Help MOTD on some of the badges
*            say /badges2 - Displays a Help MOTD on the rest of the badges
*            say /badges3 - Badges 3
*            bf2_resetstats - Resets all of your stats
*            bf2_addbadge <player> <badge> <level> - Gives a badge to player. Requires Ban admin access. Badge <0-5>. Level <0-3>
*            bf2_addkills <player> <kills> - Adds to a players kills.. Also requires ban access
*            bf2_resetserverstats - Erases all players stats
*
*    Changelog:
*            1.5.5 -    4/21/11
*                Fixed Assult Badge health bonus to only give health if less than current health to avoid conflicts.
*                Fixed max armor bonus to only give armor if less than current armor to avoid conflicts.
*
*            1.5.4 -    4/18/11
*                Changed data to load instantly instead of on tasks in plugin_cfg due to possible bug with bots.
*                Skipped nVault pruning if bf2_reset_days is set to 0.
*                Fixed bf2_resetserverstats to clear server bf2 stats and SQL's bf2ranks2 table data.
*                Changed Lieutenant General and General to be obtainable when badges are turned off.
*
*            1.5.3 -    6/8/10
*                Fixed bf2_hud_options to allow disabling player aim hud message info by setting cvar to nothing "".
*
*            1.5.2 -    8/31/09
*                Changed bf2_flag_min_players to bf2_xpminplayers and made it include bomb xp
*                Added bf2_statustext cvar to allow disabling replacement of hud name info, may also be used by other mods
*                Changed bf2_badgepowers cvar to be off by default.
*                Changed bf2_hud_options cvar to include e by default, the comments said it was included but was not.
*                Small updates to information in help motd's and other motd edits.
*                Fixed speed check to run on spawn and round start.
*
*            1.5.1 -    4/18/09
*                Fixed bf2_resetserverstats command to use ADMIN_RESET instead of ADMIN_LEVEL define
*                Fixed pistol badge code from being run on self from a suicide
*                Removed useless /hud command
*
*            1.5 -    4/15/09
*                Added saving by IP and nick controlled by csstats_rank cvar
*                Added saving for bots controlled by csstats_rankbots cvar
*                Added bf2_ffa cvar to enable/disable team kills to count for points
*                Added use of Hamsandwich for spawn and damage change code
*                Added check for PlayerName miscstats option to disable BF2's hud info
*                Added 2 Optional sounds from BF2 for rank and badge gain
*                Fixed speed system and added calls for FOV speed changes
*                Fixed badge checking not being checked on death not from a player 
*                Updated SQL saving code for improvements
*                Removed CSDM define and bf2_csdm.inl as changes made them unnecessary now
*                Removed fakemeta_util_mini.inl and included fakemeta_util.inc
*                Removed excess calls of DisplayHUD and save_badges
*                Fixed variable length that hold player names
*                Fixed a few possible out of bounds strings, still need to fix rest
*                Changed default ADMIN_RESET define to ADMIN_RCON from ADMIN_CFG
*                Fixed knife badge max hp and to only show blue glow/screenflash if hp is given
*
*            1.4.1 - 2/27/09
*                vittu takes over maintaining the plugin due to pRED moving to Source
*                Fixed CS Flags compatibility
*                Fixed TK giving points, will set an option to enable later
*                Fixed self grenade kill from adding to grenade kills
*                Fixed missing Lt General rank issue
*                Fixed description of requirements for special and higher ranks
*                Updated rank requirements not updated when more badges were last added
*                Adjusted StatusText, points hud info, to better fit max character amount
*                Added band-aid fix for auto save by steamid or IP, will update method later
*
*            1.4 -    Fixed wrong sprites displaying
*                fixed double hp gain on round reset (CSDM)
*                added /whostats command
*                bf2_help_url (and web motds) and bf2_badgepowers cvars
*                fixed sprites
*                CSDM badges not being awarded.
*                Top ranked in server display message
*                New menus
*                reset your stats command
*                Medals other new stats
*                Logging admin commands
*                Two new badges. Fixed Explosives badge for csdm
*                Heaps of new stats options + saving them (server and player)
*                Changed power for support
*                SQL now a defined option
*                Moved needed fakemeta_util functions into a separate file (included)
*                New HUD system thanks to vittu (added cvar to control it)
*                bf2_reset_days cvar - number of days without playing till xp gets reset
*
*            1.31 -    Lowered chance of imobilising happening.
*                Changed damage event and bomb events to the csx forward versions and created a csx forward include
*                Capped knife badge damage to 130
*                Removed bf2_vaultload (pointless now.)
*                Fixed some spelling newbie mistakes..
*                Fixed immunity problems
*                Moved inl and config files into their own folder..
*                Probably a few other things too..
*
*            1.30 -    Starting work on 4 New ranks
*                Shows Teammates rank when you look at them.
*                Give 50,100,200 armour for having 6,12 or 18 badges..
*                Bf2 now saves totalkills itself. Prevents csstats resets..
*                bf2_addkills (admin abuse tool? - or to reset after csstats reset), gives x kills to a player
*                Reduced the amount of saving to vault - causing server lag.
*                Changed to nVault saving. Now uses only 1 vault data instead of 14.
*                Fixed armour being lower than you had before
*                Split file into large set of includes. Way easier to find functions you want.
*                Added +3 kills for defuse/explode. Cs flags mod support
*
*            1.23 -  Added CSDM functionality. Give hp/weapons on all spawns.
*                Recoded badge checking to be individual on player death
*                Fixed HP bug and added message "beginning badge check"
*
*            1.22 -  bf2_addbadge admin command added
*
*            1.21 -    Added a badge check 5 seconds before map changes.
*
*            1.2 -     Massive change to make global kill counting actually work..
*                Added screen to view weapon stats "say /bf2stats" or use the menu
*                Added concmd "bf2_vaultload" to forcibly load your own data from the vault (im using it to convert my stats from vault to sql)
*                Tell people to type bf2_vaultload into console and their badges will be restored. Other than that probably a useless command
*
*            1.1 -     Fixed Bug with Veteran Assault badge
*                Added SQL support (bf2_sql 1)
*                Changed support badge to bonus speed (added code for extra damage, recoil - will finish when amxx 1.77 is released)
*                Sounds, Screen Shake, User glows..
*
*    Requires:
*            Fun, FakeMeta, Ham Sandwich, CStrike, CSX, and (nVault or MySQL) modules
*
*    ( Optional sounds edited from Battlefield 2 - http://www.battlefield.ea.com/battlefield/bf2/ )
************************************************************************************************************************************/
//#pragma semicolon 1

//************************************ Compile Settings ************************************//
// Uncomment to use MySQL instead of the default nVault saving
//#define SQL

// Admin flag settings for giving points/badges and server saved data reset
// These can also be set in cmdaccess.ini without need to change here
// (See amxconst.inc for more admin level constants)
#define ADMIN_LEVEL ADMIN_BAN
#define ADMIN_RESET ADMIN_RCON

// Note: Changing any of the above the above requires plugin to be recompiled
//******************************************************************************************//

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <csx>
#include <fun>

new const gPluginName[] = "Battlefield 2: Rank Mod";
new const 
gPluginVersion[] = "1.5.5";

//Message sending variables
new gmsgStatusText;
new 
gmsgScreenFade;
new 
gmsgScreenShake;
new 
gmsgSayText;

new 
gHudSyncAimInfo;
new 
gMaxPlayers;
new 
bool:gCZBotRegisterHam;

#define MAX_RANKS 17
#define MAX_BADGES 8

//Motd variables
new configsdir[200];
new 
configfile[200];

//Cvar vars
new gPcvarBF2Active;
new 
gPcvarBadgesActive;
new 
gPcvarFreeAwp;
new 
gPcvarXpMultiplier;
new 
gPcvarIconTime;
new 
gPcvarFlagKills;
new 
gPcvarHelpUrl;
new 
gPcvarBadgePowers;
new 
gPcvarFlagRoundPoints;
new 
gPcvarFlagMatchPoints;
new 
gPcvarXpMinPlayers;
new 
gPcvarHudOptions;
new 
gPcvarStatusText;
new 
gPcvarFFA;
new 
gPcvarSaveType;
new 
gPcvarRankBots;
new 
gPcvarBotQuota;
new 
gPcvarSVLan;

//Current players info
new g_PlayerRank[33];
new 
g_PlayerBadges[33][MAX_BADGES];
new 
knifekills[33];
new 
pistolkills[33];
new 
sniperkills[33];
new 
parakills[33];
new 
defuses[33];
new 
plants[33];
new 
explosions[33];
new 
accuracy[33];
new 
totalkills[33];
new 
gSaveKey[33][32];
new 
smgkills[33];
new 
shotgunkills[33];
new 
riflekills[33];
new 
grenadekills[33];

new 
bronze[33];
new 
silver[33];
new 
gold[33];

//Temp storage variables
new numofbadges[33];
new 
bool:newplayer[33];
new 
g_lastwpn[33];
new 
bool:g_imobile[33];
new 
bool:freezetime;
new 
highestrank;
new 
highestrankid;
new 
gStatsLoaded[33];
new 
gCurrentFOV[33];

new 
g_friend[33];
new 
bool:g_invis[33];

new 
menuselection[33];

//Server stats
new highestrankserver;
new 
highestrankservername[32];

new 
mostkills;
new 
mostkillsid;
new 
mostkillsname[32];

new 
mostwins;
new 
mostwinsname[32];


new 
menuselected[33][3];
//0 - Badge/Kills selected 0/1
//1 - Badgenum/Kills
//2 - Badgelevel

//Sound Vars
new gSoundRank[] = "bf2rank/bf2rank_promotion.wav"//Rank gained sound
new gSoundBadge[] = "bf2rank/bf2rank_award.wav"//Badges earned sound

//Sprite vars
new gSprite[21];

#if defined SQL
    //SQl vars
    #include <sqlx>
    
new Handle:g_SqlTuple;
    new 
g_Cache[512];
    new 
bool:SQLenabled;
    new 
bool:gIntermission;
#else
    //nVault
    #include <nvault>
    
new g_Vault;
    new 
gPcvarPruneDays;
#endif

new gPlayerName;

//Bf2 includes
#include "bf2/const.inl"
#include "bf2/effect.inl"
#include "bf2/cmds.inl"
#include "bf2/events.inl"
#include "bf2/save.inl"
#include "bf2/forwards.inl"
#include "bf2/check.inl"
#include "bf2/badgepowers.inl"
#include "bf2/menu.inl"
#include "bf2/hud.inl"
#include "bf2/othermods.inl"
#include "bf2/csx.inl"
#include "bf2/ham.inl"
#if defined SQL
#include "bf2/sql.inl"
#endif

public plugin_init()
{
    
register_plugin(gPluginNamegPluginVersion"pRED*");

    
//Register all the say commands

    //Public
    
register_clcmd("say /ranks","show_rankhelp",0"Shows The Rank Help");
    
register_clcmd("say_team /ranks","show_rankhelp",0"Shows The Rank Help");

    
register_clcmd("say /badges1","show_badgehelp",0"Shows The Badge Help");
    
register_clcmd("say_team /badges1","show_badgehelp",0"Shows The Badge Help");

    
register_clcmd("say /badges2","show_badgehelp2",0"Shows The Badge Help 2");
    
register_clcmd("say_team /badges2","show_badgehelp2",0"Shows The Badge Help 2");

    
register_clcmd("say /badges3","show_badgehelp3",0"Shows The Badge Help 3");
    
register_clcmd("say_team /badges3","show_badgehelp3",0"Shows The Badge Help 3");

    
register_clcmd("say""cmd_say"0"<target> ");
    
register_clcmd("say_team""cmd_say"0"<target> ");

    
register_clcmd("say /who""cmd_who"0"Display a list of player and their levels");
    
register_clcmd("say_team /who""cmd_who"0"Display a list of player and their levels");

    
register_clcmd("say /help""cmd_help"0"Displays the Help");
    
register_clcmd("say_team /help""cmd_help"0"Displays the Help");

    
register_clcmd("say /bf2menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team /bf2menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say bf2menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team bf2menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say /bf2""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team /bf2""Bf2menu"0"Displays the Menu");
    
register_clcmd("say bf2""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team bf2""Bf2menu"0"Displays the Menu");
    
register_clcmd("say /menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team /menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team menu""Bf2menu"0"Displays the Menu");
    
register_clcmd("say /help""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team /help""Bf2menu"0"Displays the Menu");
    
register_clcmd("say help""Bf2menu"0"Displays the Menu");
    
register_clcmd("say_team help""Bf2menu"0"Displays the Menu");

    
register_clcmd("say /bf2helpmenu""helpmenu"0"Displays the Help Menu");
    
register_clcmd("say_team /bf2helpmenu""helpmenu"0"Displays the Help Menu");

    
register_clcmd("say /bf2statsmenu""helpmenu"0"Displays the Stats Menu");
    
register_clcmd("say_team /bf2statsmenu""helpmenu"0"Displays the Stats Menu");

    
register_clcmd("say /bf2adminmenu""adminmenu"0"Displays the Admin Menu");
    
register_clcmd("say_team /bf2adminmenu""adminmenu"0"Displays the Admin Menu");

    
register_clcmd("say /bf2stats""show_stats"0"Shows your current weapon stats");
    
register_clcmd("say_team /bf2stats""show_stats"0"Shows your current weapon stats");

    
register_clcmd("say /serverstats""show_server_stats"0"Shows your current weapon stats");
    
register_clcmd("say_team /serverstats""show_server_stats"0"Shows your current weapon stats");

    
register_clcmd("say /bf2save""save_badges"0"Shows your current weapon stats");
    
register_clcmd("say_team /bf2save""save_badges"0"Shows your current weapon stats");

    
register_clcmd("bf2_resetstats""reset_stats"0"Resets all of your stats");

    
//Admin
    
register_clcmd("bf2_addbadge""add_badge"ADMIN_LEVEL"<player> <badge#> <level#>");
    
register_clcmd("bf2_addkills""add_kills"ADMIN_LEVEL"<player> <kills#>");
    
register_clcmd("bf2_resetserverstats""reset_all_stats"ADMIN_RESET"Erases all players stats");


    
//Cvars

    //FCVAR_SERVER cvar for game monitor.
    
register_cvar("bf2_version"gPluginVersionFCVAR_SERVER);

    
// Set cvar to update version in case new version loaded while server still running
    
set_cvar_string("bf2_version"gPluginVersion);

    
gPcvarBF2Active register_cvar("bf2_active""1");
    
gPcvarBadgesActive register_cvar("bf2_badges""1");
    
gPcvarFreeAwp register_cvar("bf2_awp""0");
    
gPcvarXpMultiplier register_cvar("bf2_xpmultiplier""0.1");
    
gPcvarXpMinPlayers register_cvar("bf2_xpminplayers""2");
    
gPcvarIconTime register_cvar("bf2_icon_time""1.5");
    
gPcvarHelpUrl register_cvar("bf2_help_url""");
    
gPcvarBadgePowers register_cvar("bf2_badgepowers""0");
    
gPcvarHudOptions register_cvar("bf2_hud_options""abcde");
    
gPcvarStatusText register_cvar("bf2_statustext""1");
#if !defined SQL
    
gPcvarPruneDays register_cvar("bf2_reset_days""21");
#endif
    
gPcvarFFA register_cvar("bf2_ffa""0");
    
gPcvarFlagKills register_cvar("bf2_flag_kills""2");
    
gPcvarFlagRoundPoints register_cvar("bf2_flag_round_kills""0");
    
gPcvarFlagMatchPoints register_cvar("bf2_flag_match_kills""0");

    
gPcvarSaveType get_cvar_pointer("csstats_rank");
    
gPcvarRankBots get_cvar_pointer("csstats_rankbots");
    
gPcvarBotQuota get_cvar_pointer("bot_quota");
    
gPcvarSVLan get_cvar_pointer("sv_lan");

    
//Message sending.
    
gmsgStatusText get_user_msgid("StatusText");
    
gmsgScreenFade get_user_msgid("ScreenFade");
    
gmsgScreenShake get_user_msgid("ScreenShake");
    
gmsgSayText get_user_msgid("SayText");

    
//Register events, logs and forwards to be captured
    
register_event("HLTV""Event_HLTV""a""1=0""2=0"); //add freeztime start code
    
register_event("CurWeapon""Event_CurWeapon""be""1=1");
    
register_event("SetFOV""Event_SetFOV""be");
    
register_event("DeathMsg""Event_DeathMsg""a");

    
register_logevent("LogEvent_Round_Start"2"0=World triggered""1=Round_Start"); //freezetime end code
    
register_logevent("LogEvent_Round_End"2"1=Round_End");

    
register_message(SVC_INTERMISSION"Message_Intermission");
    
register_message(get_user_msgid("StatusValue"), "Message_StatusValue");

    
register_event("StatusValue""setTeam""be""1=1");
    
register_event("StatusValue""on_ShowStatus""be""1=2""2!0");
    
register_event("StatusValue""on_HideStatus""be""1=1""2=0");

    
// Must use post or else is_user_alive will return false when dead player respawns
    
RegisterHam(Ham_Spawn"player""Ham_Spawn_Post"1);    // cz bots won't hook here must RegisterHamFromEntity
    
RegisterHam(Ham_TakeDamage"player""Ham_TakeDamage_Pre");

    
gHudSyncAimInfo CreateHudSyncObj();
    
gMaxPlayers get_maxplayers();
    
gPlayerName get_xvar_id("PlayerName");



admin chat
Código PHP:
/*  AMX Mod X script
*                               ______                       __                    __          __                              ________
*                       / ____ \                      \ \                  / /         /  |                            |______  |
*                      / /    \ \                      \ \                / /         /   |                        __         | |
*                     | /      \ |                      \ \              / /         / /| |                       |__|        | |
*                     | |      | |    ______     _    __ \ \            / /  _      / / | |       ______                      | |
*         _   _____   _____   | |      | |   / ____ \   | |  / /  \ \          / /  |_|    / /  | |      / ____ \                     | |
*    | | / __  | / __  |  | |      | |  | /    \_\  | | / /    \ \        / /    _    / /   | |     /_/    \ \                    | |
*    | |/ /  | |/ /  | |  | |      | |  | \_____    | |/ /      \ \      / /    | |  / /____| |__     ______| |                   | |
*    | | /   | | /   | |  | |      | |   \_____ \   | | /        \ \    / /     | | /_______  |__|   / _____  |                   | |
*    | |/    | |/    | |  | |      | |         \ |  | |/\         \ \  / /      | |         | |     / /     | |        __         | |
*     | |     | |     | |  | \      / |  __     | |  | |\ \         \ \/ /       | |         | |    | |     /| |       |  |        | |
*    | |     | |     | |   \ \____/ /   \ \____/ |  | | \ \         \  /        | |         | |     \ \___/ /\ \      / /    _____| |
*    |_|     |_|     |_|    \______/     \______/   |_|  \_\         \/         |_|         |_|      \_____/  \_\    /_/    |_______|
*
*
*
*** Copyright 2011 - 2013, m0skVi4a ;]
*** Plugin created in Rousse, Bulgaria
*
*
*** Plugin thread 1:
*    https://forums.alliedmods.net/showthread.php?t=183491
*
*** Plugin thread 2:
*    http://amxmodxbg.org/forum/viewtopic.php?t=38972
*
*
*** Description:
*
*    With this plugin you can set prefixes to Admins with special flags. Also Admins can put custom prefixes to them or to other players if they want, but only if they have the required flag.
*
*
*** Commands:
*
*    ap_reload_prefixes
*    Reloads Prefixes' file from console without restarting the server.
*
*    ap_reload_badprefixes
*    Reloads Bad Prefixes' file from console without restarting the server.
*
*    ap_put_player "name" "prefix"
*    Puts prefix to the name you type if you have the special flag. Or if there is no prefix typed, removes the prefix which the player has.
*
*
*** CVARS:
*
*    "ap_bad_prefixes"     -     Is the Bad Prefixes option on(1) or off(0).   Default: 1
*    "ap_listen"         -     Is the Admin Listen option on(1) or off(0).   Default: 1
*    "ap_listen_flag"     -    The flag, needed for Listen option.   Default: a
*    "ap_custom"         -    Is the Custom Prefix option for each Admin is on(1) or off(0).   Default: 1
*    "ap_custom_flag"      -    The flag, needed for setting custom prefix.   Default: b
*    "ap_say_characters"     -    Is the Start Say Characters option on(1) or off(0).   Default: 1
*    "ap_prefix_characters"     -    Is the Checker for Characters in Custom Prefixes' Options on(1) or off(0).   Default: 1
*
*    All CVARS are without quotes!
*
*
*** Credits:
*
*     m0skVi4a ;]        -    for the idea, making and testing the plugin
*    SpeeDeeR        -    for little help with the plugin
*    Ant1Lamer        -    for testing the plugin
*    Vasilii-Zaicev    -    for testing the plugin
*
*
*** Changelog:
*
*    April 22, 2012   -  V1.0:
*        -  First Release
*
*    May 19, 2012   -  V2.0:
*        -  Full optimization
*        -  Added Bad Prefixes' file
*        -  Added Multi-Lingual file
*        -  Added IP and Name support in ap_prefixes.ini
*        -  Added Forbidden Say characters
*        -  New CVARS for setting the flags for each of the options
*    
*    May 29, 2012   -  V2.1:
*        -  Fixed bug with some say or say_team commands are not executed
*
*    January 17, 2013   -  V3.0:
*        -  Full optimization
*        -  Fixed bug when typing spaces and in tha chat is showing an empty message
*        -  SteamID support
*        -  Removed nvault
*        -  Removed ap_put_player command
*        -  ap_put_player command is combined with ap_put command
*        -  Removed some CVARs
*
*    August 18, 2013   -  V4.0:
*        -  Small code changes and little bug fixes
*        -  Added Prefux Toggle command
*        -  Fixed bug with the supporting of the plugin on AMXX 1.8.2
*        -  AMXX 1.8.2 Supprot! 
*        -  SQL Version! 
*
*
*** Contact me on:
*    E-MAIL: [email protected]
*    SKYPE: pa7ohin
*/


#include <amxmodx>
#include <amxmisc>
#include <celltrie>
#include <cstrike>

#define VERSION "4.0 WHITE CHAT"
#define FLAG_LOAD ADMIN_CFG
#define MAX_PREFIXES 33
#define MAX_BAD_PREFIXES 100

new g_bad_prefixg_listeng_listen_flagg_customg_custom_flagg_say_charactersg_prefix_characters;
new 
pre_ips_count 0pre_names_count 0pre_steamids_countpre_flags_count 0bad_prefix_count 0itemp_cvar[2];
new 
configs_dir[64], file_prefixes[128], file_bad_prefixes[128], text[128], prefix[32], type[2], key[32], lengthline 0error[256];
new 
g_teaminfog_saytxtg_maxplayersCsTeams:g_team;
new 
g_typed[192], g_message[192], g_name[32];
new 
Trie:pre_ips_collectTrie:pre_names_collectTrie:pre_steamids_collectTrie:pre_flags_collectTrie:bad_prefixes_collectTrie:client_prefix;
new 
str_id[16], temp_key[35], temp_prefix[32], temp_value;
new 
bool:g_toggle[33];
new 
bool:is_admin;

new const 
say_team_info[2][CsTeams][] =
{
    {
"[Spec] ""[Muerto] ""[Muerto] ""[Spec] "},
    {
""""""""}
}

new const 
sayteam_team_info[2][CsTeams][] =
{
    {
"[Spectator] ""[Muerto][TT] ""[Muerto][CT] ""[Spectator] "},
    {
"[Spectator] ""[TT] ""[CT] ""[Spectator] "}
}

new const 
forbidden_say_symbols[] = {
    
"/",
    
"!",
    
"%",
    
"$"
}

new const 
forbidden_prefixes_symbols[] = {
    
"/",
    
"\",
    "
%",
    "
$",
    "
.",
    "
:",
    "
?",
    "
!",
    "
@",
    "
#",
    
"%"
}

new const 
separator[] = "************************************************"
new const in_prefix[] = "[AdminPrefixes]"

new const g_team_names[CsTeams][] = {
    
"",
    
"TERRORIST",
    
"CT",
    
"SPECTATOR"
}

public 
plugin_init()
{
    
register_plugin("Admin Prefixes"VERSION"m0skVi4a ;]")

    
g_bad_prefix register_cvar("ap_bad_prefixes""1")
    
g_listen register_cvar("ap_listen""1")
    
g_listen_flag register_cvar("ap_listen_flag""a")
    
g_custom register_cvar("ap_custom_current""1")
    
g_custom_flag register_cvar("ap_custom_current_flag""b")
    
g_say_characters register_cvar("ap_say_characters""1")
    
g_prefix_characters register_cvar("ap_prefix_characters""1")

    
g_teaminfo get_user_msgid("TeamInfo")
    
g_saytxt get_user_msgid ("SayText")
    
g_maxplayers get_maxplayers()

    
register_concmd("ap_reload_prefixes""LoadPrefixes")
    
register_concmd("ap_reload_badprefixes""LoadBadPrefixes")
    
register_concmd("ap_put""SetPlayerPrefix")
    
register_clcmd("say""HookSay")
    
register_clcmd("say_team""HookSayTeam")

    
pre_ips_collect TrieCreate()
    
pre_names_collect TrieCreate()
    
pre_steamids_collect TrieCreate()
    
pre_flags_collect TrieCreate()
    
bad_prefixes_collect TrieCreate()
    
client_prefix TrieCreate()

    
register_dictionary("admin_prefixes.txt")

    
get_configsdir(configs_dircharsmax(configs_dir))
    
formatex(file_prefixescharsmax(file_prefixes), "%s/ap_prefixes.ini"configs_dir)
    
formatex(file_bad_prefixescharsmax(file_bad_prefixes), "%s/ap_bad_prefixes.ini"configs_dir)

    
LoadPrefixes(0)
    
LoadBadPrefixes(0)
}
    
public 
LoadPrefixes(id)
{
    if(!(
get_user_flags(id) & FLAG_LOAD))
    {
        
console_print(id"%L"LANG_SERVER"PREFIX_PERMISSION"in_prefix)
        return 
PLUGIN_HANDLED
    
}

    
TrieClear(pre_ips_collect)
    
TrieClear(pre_names_collect)
    
TrieClear(pre_steamids_collect)
    
TrieClear(pre_flags_collect)

    
line 0length 0pre_flags_count 0pre_ips_count 0pre_names_count 0;

    if(!
file_exists(file_prefixes)) 
    {
        
formatex(errorcharsmax(error), "%L"LANG_SERVER"PREFIX_NOT_FOUND"in_prefixfile_prefixes)
        
set_fail_state(error)
    }

    
server_print(separator)

    while(
read_file(file_prefixesline++ , textcharsmax(text), length) && (pre_ips_count pre_names_count pre_steamids_count pre_flags_count) <= MAX_PREFIXES)
    {
        if(!
text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
            continue

        
parse(texttypecharsmax(type), keycharsmax(key), prefixcharsmax(prefix))
        
trim(prefix)

        if(!
type[0] || !prefix[0] || !key[0])
            continue

        
replace_all(prefixcharsmax(prefix), "!g""^x04")
        
replace_all(prefixcharsmax(prefix), "!t""^x03")
        
replace_all(prefixcharsmax(prefix), "!n""^x01")

        switch(
type[0])
        {
            case 
'f':
            {
                
pre_flags_count++
                
TrieSetString(pre_flags_collectkeyprefix)
                
server_print("%L"LANG_SERVER"PREFIX_LOAD_FLAG"in_prefixprefixkey[0])
            }
            case 
'i':
            {
                
pre_ips_count++
                
TrieSetString(pre_ips_collectkeyprefix)
                
server_print("%L"LANG_SERVER"PREFIX_LOAD_IP"in_prefixprefixkey)
            }
            case 
's':
            {
                
pre_steamids_count++
                
TrieSetString(pre_steamids_collectkeyprefix)
                
server_print("%L"LANG_SERVER"PREFIX_LOAD_STEAMID"in_prefixprefixkey)
            }
            case 
'n':
            {
                
pre_names_count++
                
TrieSetString(pre_names_collectkeyprefix)
                
server_print("%L"LANG_SERVER"PREFIX_LOAD_NAME"in_prefixprefixkey)
            }
            default:
            {
                continue
            }
        }
    }

    if(
pre_flags_count <= && pre_ips_count <= && pre_steamids_count <= && pre_names_count <= 0)
    {
        
server_print("%L"LANG_SERVER"PREFIX_NO"in_prefix)
    }

    
get_user_name(idg_namecharsmax(g_name))
    
server_print("%L"LANG_SERVER"PREFIX_LOADED_BY"in_prefixg_name)
    
console_print(id"%L"LANG_SERVER"PREFIX_LOADED"in_prefix)

    
server_print(separator)

    for(new 
1<= g_maxplayersi++)
    {
        
num_to_str(istr_idcharsmax(str_id))
        
TrieDeleteKey(client_prefixstr_id)
        
PutPrefix(i)
    }
    
    return 
PLUGIN_HANDLED
}

public 
LoadBadPrefixes(id)
{
    if(!
get_pcvar_num(g_bad_prefix))
    {
        
console_print(id"%L"LANG_SERVER"BADP_OFF"in_prefix)
        return 
PLUGIN_HANDLED
    
}

    if(!(
get_user_flags(id) & FLAG_LOAD))
    {
        
console_print(id"%L"LANG_SERVER"BADP_PERMISSION"in_prefix)
        return 
PLUGIN_HANDLED
    
}

    
TrieClear(bad_prefixes_collect)

    
line 0length 0bad_prefix_count 0;

    if(!
file_exists(file_bad_prefixes)) 
    {
        
console_print(id"%L"LANG_SERVER"BADP_NOT_FOUND"in_prefixfile_bad_prefixes)
        return 
PLUGIN_HANDLED        
    
}

    
server_print(separator)

    while(
read_file(file_bad_prefixesline++ , textcharsmax(text), length) && bad_prefix_count <= MAX_BAD_PREFIXES)
    {
        if(!
text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
            continue

        
parse(textprefixcharsmax(prefix))

        if(!
prefix[0])
            continue

        
bad_prefix_count++
        
TrieSetCell(bad_prefixes_collectprefix1)
        
server_print("%L"LANG_SERVER"BADP_LOAD"in_prefixprefix)
    }

    if(
bad_prefix_count <= 0)
    {
        
server_print("%L"LANG_SERVER"BADP_NO"in_prefix)
    }

    
get_user_name(idg_namecharsmax(g_name))
    
server_print("%L"LANG_SERVER"BADP_LOADED_BY"in_prefixg_name)
    
console_print(id"%L"LANG_SERVER"BADP_LOADED"in_prefix)

    
server_print(separator)

    return 
PLUGIN_HANDLED
}

public 
client_putinserver(id)
{
    
g_toggle[id] = true
    num_to_str
(idstr_idcharsmax(str_id))
    
TrieSetString(client_prefixstr_id"")
    
PutPrefix(id)
}

public 
HookSay(id)
{
    
read_args(g_typedcharsmax(g_typed))
    
remove_quotes(g_typed)

    
trim(g_typed)

    if(
equal(g_typed"") || !is_user_connected(id))
        return 
PLUGIN_HANDLED_MAIN

    
if(equal(g_typed"/prefix"))
    {
        if(
g_toggle[id])
        {
            
g_toggle[id] = false
            client_print
(idprint_chat"%L"LANG_SERVER"PREFIX_OFF"in_prefix)
        }
        else
        {
            
g_toggle[id] = true
            client_print
(idprint_chat"%L"LANG_SERVER"PREFIX_ON"in_prefix)
        }

        return 
PLUGIN_HANDLED_MAIN
    
}

    if(!
g_toggle[id])
        return 
PLUGIN_CONTINUE

    num_to_str
(idstr_idcharsmax(str_id))

    if((
TrieGetString(client_prefixstr_idtemp_prefixcharsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefixstr_idtemp_prefixcharsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    {
        if(
check_say_characters(g_typed))
            return 
PLUGIN_HANDLED_MAIN
    
}

    
get_user_name(idg_namecharsmax(g_name))

    
g_team cs_get_user_team(id)

    if(
temp_prefix[0])
    {
        
formatex(g_messagecharsmax(g_message), "^1%s^3%s^4 %s ^1:^3 %s"say_team_info[is_user_alive(id)][g_team], temp_prefixg_nameg_typed)
        
is_admin true
    
}
    else
    {
        
formatex(g_messagecharsmax(g_message), "^1%s^3%s :^1 %s"say_team_info[is_user_alive(id)][g_team], g_nameg_typed)
        
is_admin false
    
}

    
get_pcvar_string(g_listen_flagtemp_cvarcharsmax(temp_cvar))

    for(new 
1<= g_maxplayersi++)
    {
        if(!
is_user_connected(i))
            continue

        if(
is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
        {
            if(
is_admin)
            {
                
g_team cs_get_user_team(i)
                
change_team_info(ig_team_names[CS_TEAM_SPECTATOR])
                
send_message(g_messageii)
                
change_team_info(ig_team_names[g_team])
            }
            else
            {
                
send_message(g_messageidi)
            }
        }
    }

    return 
PLUGIN_HANDLED_MAIN
}

public 
HookSayTeam(id)
{
    
read_args(g_typedcharsmax(g_typed))
    
remove_quotes(g_typed)

    
trim(g_typed)

    if(
equal(g_typed"") || !is_user_connected(id))
        return 
PLUGIN_HANDLED_MAIN

    
if(equal(g_typed"/prefix"))
    {
        if(
g_toggle[id])
        {
            
g_toggle[id] = false
            client_print
(idprint_chat"%L"LANG_SERVER"PREFIX_OFF"in_prefix)
        }
        else
        {
            
g_toggle[id] = true
            client_print
(idprint_chat"%L"LANG_SERVER"PREFIX_ON"in_prefix)
        }

        return 
PLUGIN_HANDLED_MAIN
    
}

    if(!
g_toggle[id])
        return 
PLUGIN_CONTINUE

    num_to_str
(idstr_idcharsmax(str_id))

    if((
TrieGetString(client_prefixstr_idtemp_prefixcharsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefixstr_idtemp_prefixcharsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 2) || get_pcvar_num(g_say_characters) == 3)
    {
        if(
check_say_characters(g_typed))
            return 
PLUGIN_HANDLED_MAIN
    
}

    
get_user_name(idg_namecharsmax(g_name))

    
g_team cs_get_user_team(id)

    if(
temp_prefix[0])
    {
        
formatex(g_messagecharsmax(g_message), "^1%s^3%s^4 %s ^1:^3 %s"sayteam_team_info[is_user_alive(id)][g_team], temp_prefixg_nameg_typed)
        
is_admin true
    
}
    else
    {
        
formatex(g_messagecharsmax(g_message), "^1%s^3%s :^1 %s"sayteam_team_info[is_user_alive(id)][g_team], g_nameg_typed)
        
is_admin false
    
}

    
get_pcvar_string(g_listen_flagtemp_cvarcharsmax(temp_cvar))

    for(new 
1<= g_maxplayersi++)
    {
        if(!
is_user_connected(i))
            continue

        if(
get_user_team(id) == get_user_team(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
        {
            if(
is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i) || get_pcvar_num(g_listen) && get_user_flags(i) & read_flags(temp_cvar))
            {
                if(
is_admin)
                {
                    
g_team cs_get_user_team(i)
                    
change_team_info(ig_team_names[CS_TEAM_SPECTATOR])
                    
send_message(g_messageii)
                    
change_team_info(ig_team_names[g_team])
                }
                else
                {
                    
send_message(g_messageidi)
                }
            }
        }
    }

    return 
PLUGIN_HANDLED_MAIN
}

public 
SetPlayerPrefix(id)
{
    if(!
get_pcvar_num(g_custom) || !get_pcvar_string(g_custom_flagtemp_cvarcharsmax(temp_cvar)))
    {
        
console_print(id"%L"LANG_SERVER"CUSTOM_OFF"in_prefix)
        return 
PLUGIN_HANDLED
    
}

    if(!(
get_user_flags(id) & read_flags(temp_cvar)))
    {
        
console_print(id"%L"LANG_SERVER"CUSTOM_PERMISSION"in_prefix)
        return 
PLUGIN_HANDLED
    
}

    new 
input[128], target;
    new 
arg_type[2], arg_prefix[32], arg_key[35];
    new 
temp_str[16];

    
read_args(inputcharsmax(input))
    
remove_quotes(input)
    
parse(inputarg_typecharsmax(arg_type), arg_keycharsmax(arg_key), arg_prefixcharsmax(arg_prefix))
    
trim(arg_prefix)

    if(
get_pcvar_num(g_bad_prefix) && is_bad_prefix(arg_prefix) && !equali(arg_prefix""))
    {
        
console_print(id"%L"LANG_SERVER"CUSTOM_FORBIDDEN"in_prefixarg_prefix)
        return 
PLUGIN_HANDLED
    
}

    if(
get_pcvar_num(g_prefix_characters) && check_prefix_characters(arg_prefix))
    {
        
console_print(id"%L"LANG_SERVER"CUSTOM_SYMBOL"in_prefixarg_prefixforbidden_prefixes_symbols[i])
        return 
PLUGIN_HANDLED
    
}

    switch(
arg_type[0])
    {
        case 
'f':
        {
            
target 0
            temp_str 
"Flag"
        
}
        case 
'i':
        {
            
target find_player("d"arg_key)
            
temp_str "IP"
        
}
        case 
's':
        {
            
target find_player("c"arg_key)
            
temp_str "SteamID"
        
}
        case 
'n':
        {
            
target find_player("a"arg_key)
            
temp_str "Name"
        
}
        default:
        {
            
console_print(id"%L"LANG_SERVER"CUSTOM_INVALID"in_prefixarg_type)
            return 
PLUGIN_HANDLED
        
}
    }

    
get_user_name(idg_namecharsmax(g_name))

    if(
equali(arg_prefix""))
    {
        
find_and_delete(arg_typearg_key)

        if(
target)
        {
            
PutPrefix(target)
        }
        
        
console_print(id"%L"LANG_SERVER"CUSTOM_REMOVE"in_prefixtemp_strarg_key)
        
server_print("%L"LANG_SERVER"CUSTOM_REMOVE_INFO"in_prefixg_nametemp_strarg_key)
        return 
PLUGIN_HANDLED
    
}

    
find_and_delete(arg_typearg_key)

    
formatex(textcharsmax(text), "^"%s^" ^"%s^" ^"%s^""arg_typearg_keyarg_prefix)
    
write_file(file_prefixestext, -1)

    switch(
arg_type[0])
    {
        case 
'f':
        {
            
TrieSetString(pre_flags_collectarg_keyarg_prefix)
        }
        case 
'i':
        {
            
TrieSetString(pre_ips_collectarg_keyarg_prefix)
        }
        case 
's':
        {
            
TrieSetString(pre_steamids_collectarg_keyarg_prefix)
        }
        case 
'n':
        {
            
TrieSetString(pre_names_collectarg_keyarg_prefix)
        }
    }

    if(
target)
    {
        
num_to_str(targetstr_idcharsmax(str_id))
        
TrieSetString(client_prefixstr_idarg_prefix)
    }

    
console_print(id"%L"LANG_SERVER"CUSTOM_CHANGE"in_prefixtemp_strarg_keyarg_prefix)
    
server_print("%L"LANG_SERVER"CUSTOM_CHANGE_INFO"in_prefixg_nametemp_strarg_keyarg_prefix

    return 
PLUGIN_HANDLED
}


public 
client_infochanged(id)
{
    if(!
is_user_connected(id))
        return 
PLUGIN_CONTINUE

    
new g_old_name[32];

    
get_user_info(id"name"g_namecharsmax(g_name))
    
get_user_name(idg_old_namecharsmax(g_old_name))

    if(!
equal(g_nameg_old_name))
    {
        
num_to_str(idstr_idcharsmax(str_id))
        
TrieSetString(client_prefixstr_id"")
        
set_task(0.5"PutPrefix"id)
        return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

public 
PutPrefix(id)
{
    
num_to_str(idstr_idcharsmax(str_id))
    
TrieSetString(client_prefixstr_id"")

    new 
sflags[32], temp_flag[2];
    
get_flags(get_user_flags(id), sflagscharsmax(sflags))

    for(new 
0<= charsmax(sflags); i++)
    {
        
formatex(temp_flagcharsmax(temp_flag), "%c"sflags[i])

        if(
TrieGetString(pre_flags_collecttemp_flagtemp_prefixcharsmax(temp_prefix)))
        {
            
TrieSetString(client_prefixstr_idtemp_prefix)
        }
    }

    
get_user_ip(idtemp_keycharsmax(temp_key), 1)

    if(
TrieGetString(pre_ips_collecttemp_keytemp_prefixcharsmax(temp_prefix)))
    {
        
TrieSetString(client_prefixstr_idtemp_prefix)
    }

    
get_user_authid(idtemp_keycharsmax(temp_key))

    if(
TrieGetString(pre_steamids_collecttemp_keytemp_prefixcharsmax(temp_prefix)))
    {
        
TrieSetString(client_prefixstr_idtemp_prefix)
    }

    
get_user_name(idtemp_keycharsmax(temp_key))

    if(
TrieGetString(pre_names_collecttemp_keytemp_prefixcharsmax(temp_prefix)))
    {
        
TrieSetString(client_prefixstr_idtemp_prefix)
    }

    return 
PLUGIN_HANDLED
}

send_message(const message[], const id, const i)
{
    
message_begin(MSG_ONEg_saytxt, {000}, i)
    
write_byte(id)
    
write_string(message)
    
message_end()
}

change_team_info(const id, const team[])
{
    
message_begin(MSG_ONEg_teaminfo,_id)
    
write_byte(id)
    
write_string(team)
    
message_end()
}

bool:check_say_characters(const check_message[])
{
    for(new 
0charsmax(forbidden_say_symbols); i++)
    {
        if(
check_message[0] == forbidden_say_symbols[i])
        {
            return 
true
        
}
    }
    return 
false
}

bool:check_prefix_characters(const check_prefix[])
{
    for(
0charsmax(forbidden_prefixes_symbols); i++)
    {
        if(
containi(check_prefixforbidden_prefixes_symbols[i]) != -1)
        {
            return 
true
        
}
    }
    return 
false
}

bool:is_bad_prefix(const check_prefix[])
{
    if(
TrieGetCell(bad_prefixes_collectcheck_prefixtemp_value))
    {
        return 
true
    
}
    return 
false
}

find_and_delete(const arg_type[], const arg_key[])
{
    
line 0length 0;

    while(
read_file(file_prefixesline++ , textcharsmax(text), length))
    {
        if(!
text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
            continue

        
parse(texttypecharsmax(type), keycharsmax(key), prefixcharsmax(prefix))
        
trim(prefix)

        if(!
type[0] || !prefix[0] || !key[0])
            continue
            
        if(!
equal(arg_typetype) || !equal(arg_keykey))
            continue
            
        
write_file(file_prefixes""line 1)
    }
    
    switch(
arg_type[0])
    {
        case 
'f':
        {
            
TrieDeleteKey(pre_flags_collectarg_key)
        }
        case 
'i':
        {
            
TrieDeleteKey(pre_ips_collectarg_key)
        }
        case 
's':
        {
            
TrieDeleteKey(pre_steamids_collectarg_key)
        }
        case 
'n':
        {
            
TrieDeleteKey(pre_names_collectarg_key)
        }
    }

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)