14/03/2018, 08:54 PM
(Última modificación: 14/03/2018, 09:17 PM por Mr.Hack!.-.)
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
admin chat
porfavor
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(gPluginName, gPluginVersion, "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", gPluginVersion, FCVAR_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_prefix, g_listen, g_listen_flag, g_custom, g_custom_flag, g_say_characters, g_prefix_characters;
new pre_ips_count = 0, pre_names_count = 0, pre_steamids_count, pre_flags_count = 0, bad_prefix_count = 0, i, temp_cvar[2];
new configs_dir[64], file_prefixes[128], file_bad_prefixes[128], text[128], prefix[32], type[2], key[32], length, line = 0, error[256];
new g_teaminfo, g_saytxt, g_maxplayers, CsTeams:g_team;
new g_typed[192], g_message[192], g_name[32];
new Trie:pre_ips_collect, Trie:pre_names_collect, Trie:pre_steamids_collect, Trie:pre_flags_collect, Trie:bad_prefixes_collect, Trie: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_dir, charsmax(configs_dir))
formatex(file_prefixes, charsmax(file_prefixes), "%s/ap_prefixes.ini", configs_dir)
formatex(file_bad_prefixes, charsmax(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 = 0, length = 0, pre_flags_count = 0, pre_ips_count = 0, pre_names_count = 0;
if(!file_exists(file_prefixes))
{
formatex(error, charsmax(error), "%L", LANG_SERVER, "PREFIX_NOT_FOUND", in_prefix, file_prefixes)
set_fail_state(error)
}
server_print(separator)
while(read_file(file_prefixes, line++ , text, charsmax(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(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
trim(prefix)
if(!type[0] || !prefix[0] || !key[0])
continue
replace_all(prefix, charsmax(prefix), "!g", "^x04")
replace_all(prefix, charsmax(prefix), "!t", "^x03")
replace_all(prefix, charsmax(prefix), "!n", "^x01")
switch(type[0])
{
case 'f':
{
pre_flags_count++
TrieSetString(pre_flags_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_FLAG", in_prefix, prefix, key[0])
}
case 'i':
{
pre_ips_count++
TrieSetString(pre_ips_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_IP", in_prefix, prefix, key)
}
case 's':
{
pre_steamids_count++
TrieSetString(pre_steamids_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_STEAMID", in_prefix, prefix, key)
}
case 'n':
{
pre_names_count++
TrieSetString(pre_names_collect, key, prefix)
server_print("%L", LANG_SERVER, "PREFIX_LOAD_NAME", in_prefix, prefix, key)
}
default:
{
continue
}
}
}
if(pre_flags_count <= 0 && pre_ips_count <= 0 && pre_steamids_count <= 0 && pre_names_count <= 0)
{
server_print("%L", LANG_SERVER, "PREFIX_NO", in_prefix)
}
get_user_name(id, g_name, charsmax(g_name))
server_print("%L", LANG_SERVER, "PREFIX_LOADED_BY", in_prefix, g_name)
console_print(id, "%L", LANG_SERVER, "PREFIX_LOADED", in_prefix)
server_print(separator)
for(new i = 1; i <= g_maxplayers; i++)
{
num_to_str(i, str_id, charsmax(str_id))
TrieDeleteKey(client_prefix, str_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 = 0, length = 0, bad_prefix_count = 0;
if(!file_exists(file_bad_prefixes))
{
console_print(id, "%L", LANG_SERVER, "BADP_NOT_FOUND", in_prefix, file_bad_prefixes)
return PLUGIN_HANDLED
}
server_print(separator)
while(read_file(file_bad_prefixes, line++ , text, charsmax(text), length) && bad_prefix_count <= MAX_BAD_PREFIXES)
{
if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
continue
parse(text, prefix, charsmax(prefix))
if(!prefix[0])
continue
bad_prefix_count++
TrieSetCell(bad_prefixes_collect, prefix, 1)
server_print("%L", LANG_SERVER, "BADP_LOAD", in_prefix, prefix)
}
if(bad_prefix_count <= 0)
{
server_print("%L", LANG_SERVER, "BADP_NO", in_prefix)
}
get_user_name(id, g_name, charsmax(g_name))
server_print("%L", LANG_SERVER, "BADP_LOADED_BY", in_prefix, g_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(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")
PutPrefix(id)
}
public HookSay(id)
{
read_args(g_typed, charsmax(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(id, print_chat, "%L", LANG_SERVER, "PREFIX_OFF", in_prefix)
}
else
{
g_toggle[id] = true
client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_ON", in_prefix)
}
return PLUGIN_HANDLED_MAIN
}
if(!g_toggle[id])
return PLUGIN_CONTINUE
num_to_str(id, str_id, charsmax(str_id))
if((TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefix, str_id, temp_prefix, charsmax(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(id, g_name, charsmax(g_name))
g_team = cs_get_user_team(id)
if(temp_prefix[0])
{
formatex(g_message, charsmax(g_message), "^1%s^3%s^4 %s ^1:^3 %s", say_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
is_admin = true
}
else
{
formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", say_team_info[is_user_alive(id)][g_team], g_name, g_typed)
is_admin = false
}
get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))
for(new i = 1; i <= g_maxplayers; i++)
{
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(i, g_team_names[CS_TEAM_SPECTATOR])
send_message(g_message, i, i)
change_team_info(i, g_team_names[g_team])
}
else
{
send_message(g_message, id, i)
}
}
}
return PLUGIN_HANDLED_MAIN
}
public HookSayTeam(id)
{
read_args(g_typed, charsmax(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(id, print_chat, "%L", LANG_SERVER, "PREFIX_OFF", in_prefix)
}
else
{
g_toggle[id] = true
client_print(id, print_chat, "%L", LANG_SERVER, "PREFIX_ON", in_prefix)
}
return PLUGIN_HANDLED_MAIN
}
if(!g_toggle[id])
return PLUGIN_CONTINUE
num_to_str(id, str_id, charsmax(str_id))
if((TrieGetString(client_prefix, str_id, temp_prefix, charsmax(temp_prefix)) && get_pcvar_num(g_say_characters) == 1) || (!TrieGetString(client_prefix, str_id, temp_prefix, charsmax(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(id, g_name, charsmax(g_name))
g_team = cs_get_user_team(id)
if(temp_prefix[0])
{
formatex(g_message, charsmax(g_message), "^1%s^3%s^4 %s ^1:^3 %s", sayteam_team_info[is_user_alive(id)][g_team], temp_prefix, g_name, g_typed)
is_admin = true
}
else
{
formatex(g_message, charsmax(g_message), "^1%s^3%s :^1 %s", sayteam_team_info[is_user_alive(id)][g_team], g_name, g_typed)
is_admin = false
}
get_pcvar_string(g_listen_flag, temp_cvar, charsmax(temp_cvar))
for(new i = 1; i <= g_maxplayers; i++)
{
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(i, g_team_names[CS_TEAM_SPECTATOR])
send_message(g_message, i, i)
change_team_info(i, g_team_names[g_team])
}
else
{
send_message(g_message, id, i)
}
}
}
}
return PLUGIN_HANDLED_MAIN
}
public SetPlayerPrefix(id)
{
if(!get_pcvar_num(g_custom) || !get_pcvar_string(g_custom_flag, temp_cvar, charsmax(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(input, charsmax(input))
remove_quotes(input)
parse(input, arg_type, charsmax(arg_type), arg_key, charsmax(arg_key), arg_prefix, charsmax(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_prefix, arg_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_prefix, arg_prefix, forbidden_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_prefix, arg_type)
return PLUGIN_HANDLED
}
}
get_user_name(id, g_name, charsmax(g_name))
if(equali(arg_prefix, ""))
{
find_and_delete(arg_type, arg_key)
if(target)
{
PutPrefix(target)
}
console_print(id, "%L", LANG_SERVER, "CUSTOM_REMOVE", in_prefix, temp_str, arg_key)
server_print("%L", LANG_SERVER, "CUSTOM_REMOVE_INFO", in_prefix, g_name, temp_str, arg_key)
return PLUGIN_HANDLED
}
find_and_delete(arg_type, arg_key)
formatex(text, charsmax(text), "^"%s^" ^"%s^" ^"%s^"", arg_type, arg_key, arg_prefix)
write_file(file_prefixes, text, -1)
switch(arg_type[0])
{
case 'f':
{
TrieSetString(pre_flags_collect, arg_key, arg_prefix)
}
case 'i':
{
TrieSetString(pre_ips_collect, arg_key, arg_prefix)
}
case 's':
{
TrieSetString(pre_steamids_collect, arg_key, arg_prefix)
}
case 'n':
{
TrieSetString(pre_names_collect, arg_key, arg_prefix)
}
}
if(target)
{
num_to_str(target, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, arg_prefix)
}
console_print(id, "%L", LANG_SERVER, "CUSTOM_CHANGE", in_prefix, temp_str, arg_key, arg_prefix)
server_print("%L", LANG_SERVER, "CUSTOM_CHANGE_INFO", in_prefix, g_name, temp_str, arg_key, arg_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_name, charsmax(g_name))
get_user_name(id, g_old_name, charsmax(g_old_name))
if(!equal(g_name, g_old_name))
{
num_to_str(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")
set_task(0.5, "PutPrefix", id)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public PutPrefix(id)
{
num_to_str(id, str_id, charsmax(str_id))
TrieSetString(client_prefix, str_id, "")
new sflags[32], temp_flag[2];
get_flags(get_user_flags(id), sflags, charsmax(sflags))
for(new i = 0; i <= charsmax(sflags); i++)
{
formatex(temp_flag, charsmax(temp_flag), "%c", sflags[i])
if(TrieGetString(pre_flags_collect, temp_flag, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
}
}
get_user_ip(id, temp_key, charsmax(temp_key), 1)
if(TrieGetString(pre_ips_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
}
get_user_authid(id, temp_key, charsmax(temp_key))
if(TrieGetString(pre_steamids_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
}
get_user_name(id, temp_key, charsmax(temp_key))
if(TrieGetString(pre_names_collect, temp_key, temp_prefix, charsmax(temp_prefix)))
{
TrieSetString(client_prefix, str_id, temp_prefix)
}
return PLUGIN_HANDLED
}
send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, g_saytxt, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}
change_team_info(const id, const team[])
{
message_begin(MSG_ONE, g_teaminfo,_, id)
write_byte(id)
write_string(team)
message_end()
}
bool:check_say_characters(const check_message[])
{
for(new i = 0; i < charsmax(forbidden_say_symbols); i++)
{
if(check_message[0] == forbidden_say_symbols[i])
{
return true
}
}
return false
}
bool:check_prefix_characters(const check_prefix[])
{
for(i = 0; i < charsmax(forbidden_prefixes_symbols); i++)
{
if(containi(check_prefix, forbidden_prefixes_symbols[i]) != -1)
{
return true
}
}
return false
}
bool:is_bad_prefix(const check_prefix[])
{
if(TrieGetCell(bad_prefixes_collect, check_prefix, temp_value))
{
return true
}
return false
}
find_and_delete(const arg_type[], const arg_key[])
{
line = 0, length = 0;
while(read_file(file_prefixes, line++ , text, charsmax(text), length))
{
if(!text[0] || text[0] == '^n' || text[0] == ';' || (text[0] == '/' && text[1] == '/'))
continue
parse(text, type, charsmax(type), key, charsmax(key), prefix, charsmax(prefix))
trim(prefix)
if(!type[0] || !prefix[0] || !key[0])
continue
if(!equal(arg_type, type) || !equal(arg_key, key))
continue
write_file(file_prefixes, "", line - 1)
}
switch(arg_type[0])
{
case 'f':
{
TrieDeleteKey(pre_flags_collect, arg_key)
}
case 'i':
{
TrieDeleteKey(pre_ips_collect, arg_key)
}
case 's':
{
TrieDeleteKey(pre_steamids_collect, arg_key)
}
case 'n':
{
TrieDeleteKey(pre_names_collect, arg_key)
}
}
}