07/03/2020, 11:45 AM
Buenas! Bueno paso por aquí para ver si alguien me ayuda a que no escriban doble, me refiero a que cuando muere empiezan a escribir doble y no quiero eso si alguien sería tan amable de hacerlo se lo agradezco mucho. Gracias
Código PHP:
/*---[INCLUDES]---*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <nfvault>
/*---[INFORMACIÓN]---*/
#define PLUGIN "Admin Prefixes+Rangos"
#define VERSION "2.0"
#define AUTHOR "Aron & Spy.VE!"
#define ACCESS_LEVEL ADMIN_CHAT
#define ADMIN_LISTEN ADMIN_BAN
#define DUENO ADMIN_LEVEL_B
#define VIP ADMIN_LEVEL_C
#define MUJER ADMIN_LEVEL_H
#define SOCIO ADMIN_LEVEL_E
#define SPAMM ADMIN_MAP
new const g_szTag[][] =
{
"",
"^3[^4ADMIN^3]^4 NOOB^3. DUEÑ@ ^4~^3>",
"^3[^4ADMIN^3]^4 NOOB^3. VIP^4 ~^3>",
"^3[^4ADMIN^3]^4 NOOB^3. BabyGirL^4 ~^3>",
"^3[^4ADMIN^3]^4 NOOB^3. SOCIO^4 ~^3>",
"^3[^4ADMIN^3]^4 NOOB^3. SPAMMER^4 ~^3>"
}
/*---[VARIABLE]---*/
new message[192]
new sayText
new teamInfo
new maxPlayers
new g_MessageColor
new g_AdminListen
new strName[191]
new strText[191]
new alive[11]
new const Prefijo[] = "^4[^1NOOB^4]^1"; // Prefijo en say
new const Sonido[] = "events/task_complete.wav"; // Sonido Rango UP
new const DataBase[] = "Ranguitos"; // Nombre de la base de datos
new const DB_key[] = "data_rangos"; // Llave de acceso db
new Rank_up [ ] = "events/task_complete.wav" // SONIDO DE DAR FRAGS
new g_MAX_RANGOS = 29;
enum _:Data2 {
FLAG,
}
enum _:DATA
{
NOMBRE[30],
FRAGS
}
new const Rangos[][DATA] = {
{ "Sin Rango", 100 },
{ "Silver I", 200 },
{ "Silver II", 300 },
{ "Silver III", 500 },
{ "Silver IV", 700 },
{ "Silver Elite", 800 },
{ "Silver Elite Master", 900 },
{ "Gold Nova I", 1000 },
{ "Gold Nova II", 1200 },
{ "Gold Nova III", 1300 },
{ "Gold Nova Master", 1400 },
{ "Master Guardian I",1500 },
{ "Master Guardian II", 1700 },
{ "Master Guardian Elite", 1800 },
{ "Legendary Eagle", 2000 },
{ "Legendary Eagle Master", 2100 },
{ "Supreme Master", 2200 },
{ "Supreme Master I", 2300 },
{ "Supreme Master II", 2400 },
{ "Supreme Master III", 2500 },
{ "The Global Elite I", 3600 },
{ "The Global Elite II", 3700 },
{ "The Global Elite III", 3800 },
{ "Aguila Elite I", 3900 },
{ "Aguila Elite II", 4000 },
{ "Aguila Elite III", 4100 },
{ "Veterano I", 4200 },
{ "Veterano II", 4300 },
{ "Veterano III", 4400 },
{ "Legendario I", 4500 },
{ "Legendario II", 4600 },
{ "Legendario III", 4700 },
{ "Gold Magic Supreme I", 4800 },
{ "Gold Magic Supreme II", 4900 },
{ "Gold Magic Supreme III", 5000 },
{ "Legendario I", 5100 },
{ "Legendario II", 5200 },
{ "Legendario III", 5300 },
{ "Legendario Maximus I", 5400 },
{ "Legendario Maximus II", 5500 },
{ "Legendario Maximus III", 5600 },
{ "Legendario Master I", 5700 },
{ "Legendario Master II", 5800 },
{ "Legendario Master III", 5900 },
{ "Maximus Legendario I", 6000 },
{ "Maximus Legendario II", 6100 },
{ "Maximus Legendario III", 6200 },
{ "Legendario Supreme I", 6300 },
{ "Legendario Supreme II", 6400 },
{ "Legendario Supreme III", 6500 },
{ "Legendario Elite I", 6500 },
{ "Legendario Elite II", 6600 },
{ "Legendario Elite III", 6700 },
{ "Legendario Elite IV", 6800 },
{ "Sargento Supervisor", 7500 },
{ "Sargento Tecnico I", 8000 },
{ "Sargento Tecnico II", 8500 },
{ "Maestro Tecnico I", 9000 },
{ "Maestro Tecnico II", 9500 },
{ "Maestro Tecnico Mayor", 10000 },
{ "Maestro Tec. Supervisor", 11000 },
{ "Cadete", 12000 },
{ "Sub-Brigadier", 13000 },
{ "Brigadier", 14000 },
{ "Primer Brigadier", 15000 },
{ "Brigadier Mayor", 16000 },
{ "Alferez", 17000 },
{ "Teniente", 18000 },
{ "Primer Teniente", 19000 },
{ "Capitan", 20000 },
{ "Mayor", 22000 },
{ "Teniente Coronel", 24000 },
{ "Comandante", 26000 },
{ "Coronel", 28000 },
{ "General de Brigada", 30000 },
{ "General de Division", 33000 },
{ "Mayor General", 36000 },
{ "General en Jefe", 39000 },
{ "Guardia de Honor", 43000 },
{ "Fuerzas Especiales", 47000 },
{ "Asesino Profesional", 52000 },
{ "Selvatico Camuflado", 57000 },
{ "Desertico Experto", 63000 },
{ "Genocida", 69000 },
{ "Infanteria Profesional", 76000 },
{ "Artillero", 84000 },
{ "Artillero de Torreta", 92000 },
{ "Tanquista", 100000 },
{ "Tanquista Anfibio", 11000 },
{ "Bombardero Terrorista", 120000 },
{ "Blindado", 130000 },
{ "Blindado Explosivo", 140000 },
{ "Cazador I", 150000 },
{ "Cazador II", 160000 },
{ "Francotirador I", 170000 },
{ "Francotirador II", 180000 },
{ "Guardia de honor", 190000 },
{ "Fuerzas Especiales", 200000 },
{ "Destructor 1", 210000 },
{ "Destructor 2", 220000 },
{ "Masacrador 1", 230000 },
{ "Masacrador 2", 240000 },
{ "Exterminador 1", 250000 },
{ "Exterminador 2", 260000 },
{ "Nazi", 270000 },
{ "Destripador", 280000 },
{ "Berserker 1", 290000 },
{ "Berserker 2", 300000 },
{ "Grand Headshot", 320000 },
{ "Headshot Supremo", 340000 },
{ "Headshot Sagrado", 360000 },
{ "Headshot Dios", 380000 },
{ "Master Headshots 1", 400000 },
{ "Master Headshots 2", 420000 },
{ "Master Pro Kill 1", 440000 },
{ "Master Pro Kill 2", 460000 },
{ "Silver 1", 480000 },
{ "Silver 2", 500000 },
{ "Silver 3", 520000 },
{ "Silver 4", 540000 },
{ "Silver Elite", 560000 },
{ "Silver Elite Master", 580000 },
{ "Gold Nova 1", 600000 },
{ "Gold Nova 2", 620000 },
{ "Gold Nova 3", 640000 },
{ "Gold Nova Master", 660000 },
{ "Master Guardian 1", 680000 },
{ "Master Guardian 2", 700000 },
{ "Master Guardian Elite", 720000 },
{ "Disting. Master Guardian", 740000 },
{ "Legendary Eagle", 760000 },
{ "Legendary Eagle Master", 780000 },
{ "Supreme Master First Class", 800000 },
{ "The Global Elite", 820000 },
{ "Pro Gamers Finish 1", 840000 },
{ "Pro Gamers Finish 2", 900000 },
{ "Legendario Elite Master", 940000 },
{ "Noobero", 999999 }
}
new g_rango[33], g_frags[33];
new SyncHUD, g_maxplayers, g_playername[33][32];
#define TASK_HUD 67521
#define ID_HUD (taskid - TASK_HUD)
#define is_valid_player(%0) is_user_connected(%0) || !is_user_bot(%0) || !is_user_hltv(%0)
new VaultRango[128], szRangos[180];
new cvar_Hud, cvar_knifex2, cvar_hsx2
public plugin_init()
{
register_plugin ("Admin Prefixes+Rangos", "1.0", "Andre's <3.")
RegisterHam(Ham_Killed, "player", "ham_PlayerKilledPost", true);
register_logevent("logevent_round_end", 2, "1=Round_End");
register_clcmd("say /rangos", "OnPlayerPrint_Ranks")
register_clcmd("say_team /rangos", "OnPlayerPrint_Ranks")
register_concmd("amx_rango","dar_rango", ADMIN_CVAR, " ^"name^" ^"NUMERO DEL RANGO^"")
g_MessageColor = register_cvar ("amx_color", "3") // Message colors: [1] Default Yellow, [2] Green, [3] White, [4] Blue, [5] Red
g_AdminListen = register_cvar ("amx_listen", "1") // Set whether admins see or not all messages (Alive, dead and team-only)
cvar_Hud = register_cvar("rangos_hud", "1");
cvar_knifex2 = register_cvar("rangos_knifex2", "1");
cvar_hsx2 = register_cvar("rangos_hsx2", "1");
SyncHUD = CreateHudSyncObj();
sayText = get_user_msgid ("SayText")
teamInfo = get_user_msgid ("TeamInfo")
maxPlayers = get_maxplayers()
register_message (sayText, "avoid_duplicated")
register_clcmd ("say", "hook_say")
register_clcmd ("say_team", "hook_say" )
nfv_file(DataBase, VaultRango, charsmax(VaultRango));
}
public OnPlayerPrint_Ranks( const iPlayerID ) {
if( !is_user_connected( iPlayerID ) )
return PLUGIN_CONTINUE;
for( new iNum = 0; iNum < sizeof( Rangos ); ++iNum )
console_print( iPlayerID, "[NOOB] %i )=< %s", iNum, Rangos[ iNum ][ NOMBRE ] );
client_cmd( iPlayerID, "toggleconsole" );
return PLUGIN_HANDLED;
}
public dar_rango (id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED;
new arg[33], arg2[10];
read_argv(1, arg, charsmax(arg))
read_argv(2, arg2, charsmax(arg2))
static iNameAdmin[ 33 ];
get_user_name( id, iNameAdmin, charsmax( iNameAdmin ) );
new Player = cmd_target(id, arg,CMDTARGET_ONLY_ALIVE)
if (!Player)
{
client_print(id, print_console, "Jugador no encontrado")
return PLUGIN_HANDLED;
}
if( g_MAX_RANGOS > g_rango [ id ] )
{
g_rango [ Player ] = str_to_num(arg2)
client_cmd(id, "spk ^"%s^"", Rank_up);
client_print_color(0, print_chat, "%s El Admin^4 %s^1 le dio el rango ^4[^1%s^4]^1 a ^4[^1%s^4]^1", Prefijo, iNameAdmin, Rangos[g_rango[id]] [ NOMBRE ], arg )
}
else client_print(id, print_console,"El usuario ( %s ) ya tiene el maximo de rangos", arg )
return PLUGIN_HANDLED;
}
public HUD(taskid) {
new id = ID_HUD
if (!is_user_alive(id)) {
id = pev(id, pev_iuser2)
if (!is_user_alive(id)) return;
}
if(id != ID_HUD)
{
set_hudmessage(random_num(1, 255),random_num(1, 255),random_num(1, 255), 0.54, 0.12, 0, -1.0, 5.0);
ShowSyncHudMsg(ID_HUD, SyncHUD, "Frags: %d || Rango: [%s]", g_frags[id], Rangos[g_rango[id]][NOMBRE])
} else {
set_hudmessage(random_num(1, 255),random_num(1, 255),random_num(1, 255), 0.68, 0.01, 0, -1.0, 5.0);
ShowSyncHudMsg(ID_HUD, SyncHUD, "Frags: [%d] || Rango: [%s]^nSig. Rango: [%s] || Frags Restantes: [%d]", g_frags[id], Rangos[g_rango[id]][NOMBRE], Rangos[g_rango[id]+1][NOMBRE], Rangos[g_rango[id]][FRAGS] - g_frags[id])
}
}
public client_putinserver(id)
{
get_user_name(id, g_playername[id], 31);
g_rango[id] = g_frags[id] = 0;
Cargar(id);
if(get_pcvar_num(cvar_Hud))
set_task(1.0, "HUD", id+TASK_HUD, _, _, "b");
}
public client_disconnected(id)
{
if(is_valid_player(id))
Guardar(id);
remove_task(id+TASK_HUD)
}
public logevent_round_end()
{
static id;
for(id = 1; id <= g_maxplayers; ++id)
{
if(is_valid_player(id))
Guardar(id);
}
}
public ham_PlayerKilledPost(victim, attacker, sg)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || !attacker || attacker == victim)
return HAM_IGNORED;
SetFrags(attacker, 1);
if(get_pcvar_num(cvar_knifex2) == 1 && get_user_weapon(attacker) == CSW_KNIFE)
SetFrags(attacker, 1);
if(get_pcvar_num(cvar_hsx2) == 1 && get_pdata_int(victim, 75, 5) == HIT_HEAD)
SetFrags(attacker, 1);
return HAM_IGNORED;
}
SetFrags(index, frags)
{
g_frags[index] += frags;
static iRank; iRank = g_rango[index];
while( g_frags[index] >= Rangos[g_rango[index]][FRAGS] && g_rango[index] < charsmax(Rangos))
++g_rango[index];
if(iRank < g_rango[index])
{
client_print_color(index, print_chat, "%s Felicidades subiste al rango: ^4%s", Prefijo, Rangos[g_rango[index]][NOMBRE]);
client_cmd(index, "spk ^"%s^"", Sonido);
}
}
public avoid_duplicated (msgId, msgDest, receiver)
{
return PLUGIN_HANDLED
}
public hook_say(id)
{
read_args (message, 191)
remove_quotes (message)
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, "")) // Ignores Admin Hud Messages, Admin Slash commands,
// Gungame commands and empty messages
return PLUGIN_CONTINUE
new name[32]
get_user_name (id, name, 31)
new admin = 0, iFlags = get_user_flags(id)
if(iFlags & DUENO) admin = 1
else if(iFlags & VIP) admin = 2
else if(iFlags & MUJER) admin = 3
else if(iFlags & SOCIO) admin = 4
else if(iFlags & SPAMM) admin = 5
new isAlive
if (is_user_alive (id))
{
isAlive = 1
alive = "^x01"
}
else
{
isAlive = 0
alive = "^x01*MUERTO* "
}
static color[10]
if (admin)
{
formatex(strName, charsmax(strName), "%s ^x04[^x01%s^x04]^x01 %s ^x04%s", alive, Rangos[g_rango[id]][NOMBRE], g_szTag[admin], name)
// Message
switch (get_pcvar_num (g_MessageColor))
{
case 1: // Yellow
format (strText, 191, "%s", message)
case 2: // Green
format (strText, 191, "^x04%s", message)
case 3: // White
{
copy (color, 9, "SPECTATOR")
format (strText, 191, "^x03%s", message)
}
case 4: // Blue
{
copy (color, 9, "CT")
format (strText, 191, "^x03%s", message)
}
case 5: // Red
{
copy (color, 9, "TERRORIST")
format (strText, 191, "^x03%s", message)
}
}
}
else // Player is not admin. Team-color name : Yellow message
{
get_user_team (id, color, 9)
format (strName, 191, "%s ^x04[^x01%s^x04]^x01 ^x03%s", alive, Rangos[g_rango[id]][NOMBRE], name)
format (strText, 191, "%s", message)
}
format (message, 191, "%s^x01 : %s", strName, strText)
sendMessage (color, isAlive) // Sends the colored message
return PLUGIN_CONTINUE
}
public sendMessage (color[], alive)
{
new teamName[10]
for (new player = 1; player < maxPlayers; player++)
{
if (!is_user_connected(player))
continue
if (alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & ADMIN_LISTEN)
{
get_user_team (player, teamName, 9) // Stores user's team name to change back after sending the message
changeTeamInfo (player, color) // Changes user's team according to color choosen
writeMessage (player, message) // Writes the message on player's chat
changeTeamInfo (player, teamName) // Changes user's team back to original
}
}
}
public sendTeamMessage (color[], alive, playerTeam)
{
new teamName[10]
for (new player = 1; player < maxPlayers; player++)
{
if (!is_user_connected(player))
continue
if (get_user_team(player) == playerTeam || get_pcvar_num(g_AdminListen) && get_user_flags(player) & ADMIN_LISTEN)
{
if (alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_pcvar_num(g_AdminListen) && get_user_flags(player) & ADMIN_LISTEN)
{
get_user_team (player, teamName, 9) // Stores user's team name to change back after sending the message
changeTeamInfo (player, color) // Changes user's team according to color choosen
writeMessage (player, message) // Writes the message on player's chat
changeTeamInfo (player, teamName) // Changes user's team back to original
}
}
}
}
public changeTeamInfo (player, team[])
{
message_begin (MSG_ONE, teamInfo, _, player) // Tells to to modify teamInfo (Which is responsable for which time player is)
write_byte (player) // Write byte needed
write_string (team) // Changes player's team
message_end() // Also Needed
}
public writeMessage (player, message[])
{
message_begin (MSG_ONE, sayText, {0, 0, 0}, player) // Tells to modify sayText (Which is responsable for writing colored messages)
write_byte (player) // Write byte needed
write_string (message) // Effectively write the message, finally, afterall
message_end () // Needed as always
}
Guardar(id)
{
formatex(szRangos, charsmax(szRangos), "%d %d", g_frags[id], g_rango[id]);
nfv_set_data(VaultRango, DB_key, g_playername[id], szRangos);
}
Cargar(id)
{
new g_load_c1[25], g_load_c2[25];
if(!nfv_get_data(VaultRango, DB_key, g_playername[id], szRangos, charsmax(szRangos))) return;
parse(szRangos, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2));
g_frags[id] = str_to_num(g_load_c1);
g_rango[id] = str_to_num(g_load_c2);
}
stock ValidMessage(text[], maxcount)
{
static len, i, count; len = strlen(text);count = 0;
if (!len) return false;
for (i = 0; i < len; i++)
{
if (text[i] != ' ')
{
count++;
if (count >= maxcount) return true;
}
}
return false;
}