Hello, please fix this plugin.
Code:
/*
BASE BUILDER GAME MOD: FRAGS LEVEL MOD
BY GHOST ***
VERSION 0.0.8 BETA
Credite
Arion - Pentru chestia cu chatu (Am extras chestii pentru mesaju chat (LVL:) din pluginu ala Green admin chat :-@
Askhanar - Asa salveaza el pe nVault (:-??)
*/
// Includes
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta_util>
#include <nvault>
#include <fun>
// Define
#define MAX_LEVELS 21
// Register Plugin & Tag & pragma
#pragma semicolon 1
new const
PLUGIN_NAME[] = "Base Builder Game Mod: Frags Level Mod",
PLUGIN_VERS[] = "0.0.8 BETA",
PLUGIN_AUTH[] = "GhosT ***";
new const szTag[] = "[Base Builder]";
// Variabile
new PlayerFrags[33], PlayerLevel[33];
new PlayerWaitTime[33];
new bool:HasItems[33], bool:HaveDamage[33];
new nVault;
// Cvars
new GiveTime, GameNameOn;
// Levele
new const Levels[MAX_LEVELS + 2] =
{
0, 50, 100, 150, 200, 250, 300, 350, 400, 450, 500,
550, 600, 650, 700, 750, 800, 850, 900, 950, 1000,
100000000000000000000000000000 // Nu modificati
};
// Flags
new const GiveFlags[] = "au";
new const TakeFlags[] = "au";
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERS, PLUGIN_AUTH);
register_event("DeathMsg", "DeathMsg", "a");
RegisterHam(Ham_Spawn, "player", "PlayerSpawn", true);
RegisterHam(Ham_TakeDamage, "player", "PlayerTakeDamage");
register_logevent("RoundStart", 2, "1=Round_Start");
register_clcmd("say /level", "LevelClCmd");
register_clcmd("say /frags", "LevelClCmd");
register_clcmd("say /lvl", "LevelClCmd");
register_clcmd("say_team /level", "LevelClCmd");
register_clcmd("say_team /frags", "LevelClCmd");
register_clcmd("say_team /lvl", "LevelClCmd");
register_concmd("amx_give_frags", "GiveFragsConCmd");
register_concmd("amx_take_frags", "TakeFragsConCmd");
register_forward(FM_GetGameDescription, "GameNameCmd");
register_clcmd("say", "SayClCmd");
GiveTime = register_cvar("GiveTime", "0"); // Aici puneti in cate secunde de la spawnu playerulu sa dea itemele .
GameNameOn = register_cvar("GameNameOn", "1"); // adica cat timp de constructie este + 5/10 secunde
nVault = nvault_open("BaseBuilderFrags");
register_cvar("bb_frags_mod", PLUGIN_VERS, FCVAR_SPONLY | FCVAR_SERVER);
register_cvar("bb_frags_author", PLUGIN_AUTH, FCVAR_SERVER | FCVAR_SPONLY);
}
public plugin_natives( )
{
register_native("bb_get_user_frags", "_get_user_frags", true);
register_native("bb_set_user_frags", "_set_user_frags", true);
}
public _get_user_frags(iParams)
{
return PlayerFrags[get_param(1)];
}
public _set_user_frags(iParams)
{
PlayerFrags[get_param(1)] = max(0, get_param(2));
return PlayerFrags[get_param(1)];
}
public DeathMsg( )
{
new iAttacker = read_data(1);
new iVictim = read_data(2);
if(iAttacker == iVictim)
{
if(PlayerFrags[iAttacker] >= 1)
PlayerFrags[iAttacker]--;
else return PLUGIN_HANDLED;
}
else if(iAttacker != iVictim)
PlayerFrags[iAttacker]++;
if(PlayerLevel[iAttacker] < MAX_LEVELS - 1 && PlayerFrags[iAttacker] >= Levels[PlayerLevel[iAttacker]])
{
while(PlayerFrags[iAttacker] >= Levels[PlayerLevel[iAttacker]])
PlayerLevel[iAttacker]++;
ColorChat(iAttacker, "^x04%s^x01 Ai trecut la^x04 levelul^x03 %d^x01 !", szTag, PlayerLevel[iAttacker]);
ShakeScreen(iAttacker, 2.0);
FadeScreen(iAttacker, 2.0, 0, 15, 200, 200);
}
if(PlayerFrags[iVictim] < Levels[PlayerLevel[iVictim] - 1])
{
while(PlayerFrags[iVictim] < Levels[PlayerLevel[iVictim] - 1])
PlayerLevel[iVictim]--;
ColorChat(iVictim, "^x04%s^x01 Ai pierdut^x04 un level^x03 din lipsa de fraguri^x01 !", szTag);
ShakeScreen(iVictim, 2.0);
FadeScreen(iVictim, 2.0, 200, 15, 0, 200);
}
return PLUGIN_CONTINUE;
}
public PlayerSpawn(id)
{
if(PlayerLevel[id] < MAX_LEVELS - 1)
{
if(PlayerFrags[id] >= Levels[PlayerLevel[id]])
{
while(PlayerFrags[id] >= Levels[PlayerLevel[id]])
PlayerLevel[id]++;
}
}
return PLUGIN_HANDLED;
}
public PlayerTakeDamage(iAttacker, iVictim, Float:fDamage, iDamageBits)
{
if(HaveDamage[iAttacker])
{
fDamage = (fDamage + 2.0 * Float:PlayerLevel[iAttacker]);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
public RoundStart()
{
new Jucator[32], iNum;
get_players(Jucator, iNum);
for(new i = 0; i < iNum; i++)
{
HasItems[Jucator[i]] = false;
HaveDamage[Jucator[i]] = false;
PlayerWaitTime[Jucator[i]] = get_pcvar_num(GiveTime);
set_task(1.0, "HudAbility", Jucator[i], _, _, "b"); // Pentru a arata corect mesajul in hud ..
set_task(get_pcvar_float(GiveTime) + 2.0, "PlayerAbility", Jucator[i]); // Timpul corect pentru taskul de iteme .
}
}
public HudAbility(id)
{
if(PlayerWaitTime[id] > 0)
{
set_hudmessage(0, 255, 100, 0.70, 0.20, 0, 1.0, 2.0);
show_hudmessage(id, "Iti vei primi abilitatile in %i secunde ...", PlayerWaitTime[id]);
PlayerWaitTime[id] -= 1;
}
return PLUGIN_CONTINUE;
}
public PlayerAbility(id)
{
if(HasItems[id] == false)
{
if(get_user_team(id) == 2)
{
set_user_health(id, get_user_health(id) + 5 * PlayerLevel[id]);
set_user_armor(id, get_user_armor(id) + 20 * PlayerLevel[id]);
ColorChat(id, "^x04%s^x01 Ai levelul %d !", szTag, PlayerLevel[id]);
ColorChat(id, "^x04%s^x01 Abilitati:^x03 [^x04+%dHP^x03][^x04+%dAP^x03][^x04+%dDMG^x03]", szTag, 10 * PlayerLevel[id], 20 * PlayerLevel[id], 2* PlayerLevel[id]);
HaveDamage[id] = true;
}
else if(get_user_team(id) == 1)
{
set_user_health(id, get_user_health(id) + 5 * PlayerLevel[id]);
set_user_armor(id, get_user_armor(id) + 20 * PlayerLevel[id]);
ColorChat(id, "^x04%s^x01 Ai levelul %d !", szTag, PlayerLevel[id]);
ColorChat(id, "^x04%s^x01 Abilitati:^x03 [^x04+%dHP^x03][^x04+%dAP^x03][^x04+%dDMG^x03]", szTag, 10 * PlayerLevel[id], 20 * PlayerLevel[id], 2* PlayerLevel[id]);
HaveDamage[id] = true;
}
HasItems[id] = true;
}
set_hudmessage(0, 255, 100, 0.70, 0.20);
show_hudmessage(id, "Ti-ai primit abilitatile !");
return PLUGIN_CONTINUE;
}
public LevelClCmd(id)
{
if(PlayerLevel[id] != MAX_LEVELS - 1)
ColorChat(id, "^x04%s^x03 %s^x01, ai: |^x04 Level: %d / %d^x01 |^x04 Fraguri: %d / %d^x01 |^x04 %d Frag%s^x01 ramas%s pana la^x04 levelul %d^x01 |", szTag, get_name(id), PlayerLevel[id], MAX_LEVELS - 1, PlayerFrags[id], Levels[PlayerLevel[id]], Levels[PlayerLevel[id]] - PlayerFrags[id], Levels[PlayerLevel[id]] - PlayerFrags[id] == 1 ? "" : "uri", Levels[PlayerLevel[id]] - PlayerFrags[id] == 1 ? "" : "e", PlayerLevel[id] + 1);
else if(PlayerLevel[id] == MAX_LEVELS - 1)
ColorChat(id, "^x04%s^x03 %s^x01, ai: |^x04 Level: MAXIM^x01 & ^x04 Fraguri: %d^x01 !", szTag, get_name(id), PlayerFrags[id]);
return PLUGIN_HANDLED;
}
public GiveFragsConCmd(id)
{
if(get_user_flags(id) & read_flags(GiveFlags))
{
new szArg[32], szAmount[32];
new Amount, iTarget;
read_argv(1, szArg, sizeof(szArg) - 1);
read_argv(2, szAmount, sizeof(szAmount) - 1);
iTarget = cmd_target(id, szArg, CMDTARGET_NO_BOTS);
Amount = str_to_num(szAmount);
if(equal(szArg, "") || equal(szAmount, ""))
{
console_print(id, "amx_give_frags <NICK> <AMOUNT>");
return PLUGIN_HANDLED;
}
if(!iTarget)
{
console_print(id, "Jucatorul %s nu exista sau nu este online !", iTarget);
return PLUGIN_HANDLED;
}
if(Amount > 99999)
{
console_cmd(id, "Nu poti da mai mult de 99999 fraguri !");
return PLUGIN_HANDLED;
}
ColorChat(0, "^x03%s^x04 (ADMIN): %s^x01 ii da^x03 %d Frag%s^x01 lui^x04 %s^x01 !", szTag, get_name(id), Amount, Amount == 1 ? "" : "uri", get_name(iTarget));
log_amx("ADMIN: %s (#%s) gave to %s (#%s) %d Frag%s !", get_name(id), get_authid(id), get_name(iTarget), get_authid(iTarget), Amount, Amount == 1? "" : "s");
PlayerFrags[iTarget] += Amount;
if(PlayerLevel[iTarget] < MAX_LEVELS - 1)
{
while(PlayerFrags[iTarget] >= Levels[PlayerLevel[iTarget]])
PlayerLevel[iTarget]++;
}
SaveFrags(iTarget);
}
else
{
console_print(id, "Nu ai acces la aceasta comanda !");
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public TakeFragsConCmd(id)
{
if(get_user_flags(id) & read_flags(TakeFlags))
{
new szArg[32], szAmount[32];
new Amount, iTarget;
read_argv(1, szArg, sizeof(szArg) - 1);
read_argv(2, szAmount, sizeof(szAmount) - 1);
Amount = str_to_num(szAmount);
iTarget = cmd_target(id, szArg, CMDTARGET_NO_BOTS);
if(equal(szArg, "") || equal(szAmount, ""))
{
console_print(id, "amx_take_frags <NICK> <AMOUNT>");
return PLUGIN_HANDLED;
}
if(!iTarget)
{
console_print(id, "Jucatorul %s nu exista sau nu este online !", iTarget);
return PLUGIN_HANDLED;
}
if(Amount > PlayerFrags[id])
{
console_print(id, "Jucatorul %s are doar %d fraguri !", get_name(iTarget), PlayerFrags[iTarget]);
return PLUGIN_HANDLED;
}
ColorChat(0, "^x03%s^x04 (ADMIN): %s^x01 ii ia^x03 %d Frag%s^x01 lui^x04 %s^x01 !", szTag, get_name(id), Amount, Amount == 1 ? "" : "uri", get_name(iTarget));
log_amx("ADMIN: %s (#%s) take to %s (#%s) %d Frag%s !", get_name(id), get_authid(id), get_name(iTarget), get_authid(iTarget), Amount, Amount == 1 ? "" : "s");
PlayerFrags[iTarget] -= Amount;
if(PlayerFrags[iTarget] < Levels[PlayerLevel[iTarget] - 1])
{
while(PlayerFrags[iTarget] < Levels[PlayerLevel[iTarget] - 1])
PlayerLevel[iTarget]--;
}
SaveFrags(iTarget);
}
else
{
console_print(id, "Nu ai acces la aceasta comanda !");
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public GameNameCmd()
{
if(get_pcvar_num(GameNameOn))
forward_return(FMV_STRING, "Base Builder Frags Mod");
return FMRES_SUPERCEDE;
}
public client_putinserver(id)
{
ColorChat(0, "^x04%s^x03 [%d]^x04 [Level: %d]^x01 se conecteaza pe server !", szTag, get_name(id), PlayerLevel[id]);
LoadFrags(id);
set_task(1.0, "ShowUserDetails", id, _, _, "b");
}
public client_disconnect(id)
{
ColorChat(0, "^x04%s^x03 [%d]^x04 [Level: %d]^x01 sa deconectat de pe server !", szTag, get_name(id), PlayerLevel[id]);
SaveFrags(id);
}
public SayClCmd(id)
{
new iMessage[192];
read_args(iMessage, sizeof(iMessage) - 1);
remove_quotes(iMessage);
if(!valid_message(iMessage))
return PLUGIN_CONTINUE;
if(is_user_alive(id) && PlayerLevel[id] != MAX_LEVELS - 1)
format(iMessage, sizeof(iMessage) - 1, "^x04[LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
else if(!is_user_alive(id) && PlayerLevel[id] != MAX_LEVELS - 1)
format(iMessage, sizeof(iMessage) - 1, "^x03[DEAD]^x04 [LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
if(is_user_alive(id) && PlayerLevel[id] == MAX_LEVELS - 1)
format(iMessage, sizeof(iMessage) - 1, "^x04[LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
else if(!is_user_alive(id) && PlayerLevel[id] == MAX_LEVELS - 1)
format(iMessage, sizeof(iMessage) - 1, "^x03[DEAD]^x04 [LVL: %d]^x03 %s ^x01: %s", PlayerLevel[id], get_name(id), iMessage);
for(new i = 1; i <= get_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)))
{
message_begin(MSG_ONE, get_user_msgid("SayText"), {0, 0, 0}, i);
write_byte(id);
write_string(iMessage);
message_end( );
}
}
return PLUGIN_HANDLED;
}
public ShowUserDetails(id)
{
set_hudmessage(0, 255, 255, -1.0, 0.75);
if(is_user_alive(id) && PlayerLevel[id] < MAX_LEVELS - 1)
show_hudmessage(id, "[Frags: %d / %d | Level: %d / %d]", PlayerFrags[id], Levels[PlayerLevel[id]], PlayerLevel[id], MAX_LEVELS - 1);
if(is_user_alive(id) && PlayerLevel[id] >= MAX_LEVELS - 1)
show_hudmessage(id, "[Frags: %d | Level: MAXIM]", PlayerFrags[id]);
}
public LoadFrags(id)
{
new szData[256], iTimestamp;
formatex(szData, sizeof(szData) - 1, "%i ", PlayerFrags[id]);
if(nvault_lookup(nVault, get_name(id), szData, sizeof(szData), iTimestamp))
{
static iFrags[15];
parse(szData, iFrags, sizeof(iFrags) - 1);
PlayerFrags[id] = str_to_num(iFrags);
return PLUGIN_CONTINUE;
}
return PLUGIN_CONTINUE;
}
public SaveFrags(id)
{
new szData[256];
formatex(szData, sizeof(szData) - 1, "%i ", PlayerFrags[id]);
nvault_set(nVault, get_name(id), szData);
}
stock get_name(id, len=31)
{
new Name[32];
get_user_name(id, Name, len);
return Name;
}
stock get_authid(id, len=31)
{
new AuthID[32];
get_user_authid(id, AuthID, len);
return AuthID;
}
stock ColorChat(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "^x04", "^4"); // Green Color
replace_all(msg, 190, "^x01", "^1"); // Default Color
replace_all(msg, 190, "^x03", "^3"); // Team Color
replace_all(msg, 190, "^0", "^0"); // Team2 Color
if (id) players[0] = id; else get_players(players, count, "ch");
{
for(new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
stock ShakeScreen(id, const Float:seconds)
{
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0, 0, 0}, id);
write_short(floatround(4096.0 * seconds, floatround_round));
write_short(floatround(4096.0 * seconds, floatround_round));
write_short(1<<13);
message_end( );
}
stock FadeScreen(id, const Float:seconds, const red, const green, const blue, const alpha)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, id);
write_short(floatround(4096.0 * seconds, floatround_round));
write_short(floatround(4096.0 * seconds, floatround_round));
write_short(0x0000);
write_byte(red);
write_byte(green);
write_byte(blue);
write_byte(alpha);
message_end( );
}
stock valid_message(const iMessage[])
{
if(iMessage[0] == '/' || iMessage[0] == '@' || iMessage[0] == '@' && iMessage[1] == '@' || iMessage[0] == '@' && iMessage[1] == '@' && iMessage[2] == '@' || !strlen(iMessage))
{
return false;
}
return true;
}