PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <hamsandwich>
#include <fun>
#define PLUGIN "Prestige System"
#define VERSION "1.0"
#define AUTHOR "FuckTheSchool"
#define MAX_LEVEL 6
#define PowerNum 5
native get_user_prestige(id)
native set_user_prestige(id, amount)
native get_user_ever_prestige(id)
native get_user_save_method(id)
new PrestigeVault
new SpeedLevel[33], HealthLevel[33], DamageLevel[33], GravityLevel[33], RegenLevel[33], MaxHealth[33], Refreshing[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /power", "CMD_Prestige")
register_clcmd("say /powers", "CMD_Prestige")
register_event("CurWeapon","event_curweapon","be", "1=1")
RegisterHam(Ham_Spawn, "player", "CheckSpawn")
RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
set_task(1.0, "NeverEndingRegen",_,_,_,"b")
}
public plugin_cfg()
{
PrestigeVault = nvault_open( "PrestigeSystem" );
if ( PrestigeVault == INVALID_HANDLE )
set_fail_state( "Error opening Prestige System nVault, file does not exist!" );
}
public plugin_end()
{
nvault_close(PrestigeVault)
}
public client_authorized(id)
{
LoadPowers(id)
}
public client_disconnect(id)
{
SavePowers(id)
SpeedLevel[id] = 0
HealthLevel[id] = 0
DamageLevel[id] = 0
GravityLevel[id] = 0
RegenLevel[id] = 0
}
public CheckSpawn(id)
{
MaxHealth[id] = 100
Refreshing[id] = true
set_task(0.5, "AddHealth", id)
if(GravityLevel[id] > 0)
set_task(0.5, "AddGravity", id)
}
public AddHealth(id)
{
set_user_health(id, get_user_health(id) + (20*HealthLevel[id]))
if(get_user_health(id) > 100.0)
MaxHealth[id] = get_user_health(id)
else
MaxHealth[id] = 100
Refreshing[id] = false
}
public AddGravity(id)
{
new Num = (800 - GravityLevel[id]*30)/800
set_user_gravity(id, 1.0 * Num)
}
public event_curweapon(id)
{
if(SpeedLevel[id] > 0)
set_task(0.5, "SetSpeed", id)
}
public SetSpeed(id)
{
set_user_maxspeed(id, get_user_maxspeed(id) +(20*SpeedLevel[id]))
}
public TakeDamage(victim, inflictor, attacker, Float:damage, damagebits)
{
if(victim != attacker)
{
if(DamageLevel[attacker] > 0)
{
SetHamParamFloat(4, damage * (1.0 + (DamageLevel[attacker] * 0.2)))
}
}
}
public NeverEndingRegen()
{
new players[32], num
get_players(players, num, "ach")
for(new id;id < num;id++)
{
new i = players[id]
if(RegenLevel[i] > 0 && !Refreshing[id])
{
if((get_user_health(i) + RegenLevel[i]) > MaxHealth[i]) set_user_health(i, MaxHealth[i])
else set_user_health(i, get_user_health(i) + RegenLevel[i])
}
}
}
public CMD_Prestige(id)
{
new Format[100], StrFloat[4]
formatex(Format, charsmax(Format), "Powers: [Prestiges: %i ( Total: %i )]", get_user_prestige(id), get_user_ever_prestige(id))
new PrestigeMenu = menu_create(Format, "HandleCMD_Prestige")
float_to_str(250.0 + (20*(SpeedLevel[id]+1)), StrFloat, charsmax(StrFloat))
formatex(Format, charsmax(Format), "%sSpeed \d[\yLevel %i\d][\r%s units\d] - %i Prestige%s%s", get_user_prestige(id) >= Price(SpeedLevel[id]) ? "\w" : "\d", SpeedLevel[id], StrFloat, Price(SpeedLevel[id]), Price(SpeedLevel[id]) == 1 ? "" : "s", SpeedLevel[id] < MAX_LEVEL-1 ? "" : "\d[\rMAXED\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "%sHealth \d[\yLevel %i\d][\r+%i health\d] - %i Prestige%s%s", get_user_prestige(id) >= Price(HealthLevel[id]) ? "\w" : "\d", HealthLevel[id], (HealthLevel[id]+1)*20, Price(HealthLevel[id]), Price(HealthLevel[id]) == 1 ? "" : "s", HealthLevel[id] < MAX_LEVEL-1 ? "" : "\d[\rMAXED\d]" )
menu_additem(PrestigeMenu, Format)
float_to_str(1.0 + (0.2*(DamageLevel[id]+1)), StrFloat, charsmax(StrFloat))
formatex(Format, charsmax(Format), "%sDamage \d[\yLevel %i\d][\r%sx\d] - %i Prestige%s%s", get_user_prestige(id) >= Price(DamageLevel[id]) ? "\w" : "\d", DamageLevel[id], StrFloat, Price(DamageLevel[id]), Price(DamageLevel[id]) == 1 ? "" : "s", DamageLevel[id] < MAX_LEVEL-1 ? "" : "\d[\rMAXED\d]" )
menu_additem(PrestigeMenu, Format)
float_to_str((800.0 - GravityLevel[id]*30)/800, StrFloat, charsmax(StrFloat))
formatex(Format, charsmax(Format), "%sGravity \d[\yLevel %i\d][\r%s Gravity\d] - %i Prestige%s%s", get_user_prestige(id) >= Price(GravityLevel[id]) ? "\w" : "\d", GravityLevel[id], 800-(30*GravityLevel[id]), Price(GravityLevel[id]), Price(GravityLevel[id]) == 1 ? "" : "s", GravityLevel[id] < MAX_LEVEL-1 ? "" : "\d[\rMAXED\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "%sHP Regeneration \d[\yLevel %i\d][\r%i HP/Sec\d] - %i Prestige%s%s", get_user_prestige(id) >= Price(RegenLevel[id]) ? "\w" : "\d", RegenLevel[id], RegenLevel[id], Price(RegenLevel[id]), Price(RegenLevel[id]) == 1 ? "" : "s", RegenLevel[id] < MAX_LEVEL-1 ? "" : "\d[\rMAXED\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "Reset Powers \d[\rFree\d]")
menu_additem(PrestigeMenu, Format)
menu_display(id, PrestigeMenu)
}
public HandleCMD_Prestige(id, PrestigeMenu, item)
{
if(item == MENU_EXIT) return;
switch(item+1)
{
case 1:
{
if(get_user_prestige(id) >= Price(SpeedLevel[id]) && SpeedLevel[id] < MAX_LEVEL-1)
{
set_user_prestige(id, get_user_prestige(id) - Price(SpeedLevel[id]))
SpeedLevel[id]++;
ColorChat(id, "^4Congratulations on buying Speed Upgrade!")
}
}
case 2:
{
if(get_user_prestige(id) >= Price(HealthLevel[id]) && HealthLevel[id] < MAX_LEVEL-1)
{
set_user_prestige(id, get_user_prestige(id) - Price(HealthLevel[id]))
HealthLevel[id]++;
ColorChat(id, "^4Congratulations on buying Health Upgrade!")
}
}
case 3:
{
if(get_user_prestige(id) >= Price(DamageLevel[id]) && DamageLevel[id] < MAX_LEVEL-1)
{
set_user_prestige(id, get_user_prestige(id) - Price(DamageLevel[id]))
DamageLevel[id]++;
ColorChat(id, "^4Congratulations on buying Health Upgrade!")
}
}
case 4:
{
if(get_user_prestige(id) >= Price(GravityLevel[id]) && GravityLevel[id] < MAX_LEVEL-1)
{
set_user_prestige(id, get_user_prestige(id) - Price(GravityLevel[id]))
GravityLevel[id]++;
ColorChat(id, "^4Congratulations on buying Gravity Upgrade!")
}
}
case 5:
{
if(get_user_prestige(id) >= Price(RegenLevel[id]) && RegenLevel[id] < MAX_LEVEL-1)
{
set_user_prestige(id, get_user_prestige(id) - Price(RegenLevel[id]))
RegenLevel[id]++;
ColorChat(id, "^4Congratulations on buying HP Regeneration Upgrade!")
}
}
case PowerNum+1:
{
HealthLevel[id] = 0
SpeedLevel[id] = 0
DamageLevel[id] = 0
GravityLevel[id] = 0
RegenLevel[id] = 0
set_user_prestige(id, get_user_ever_prestige(id))
ColorChat(id, "^4You have successfuly reset your powers!")
}
}
if(item != MENU_EXIT)
{
CMD_Prestige(id)
SavePowers(id)
}
}
SavePowers(id)
{
new szAuth[33];
new szKey[64];
if ( get_user_save_method(id) == 0)
{
get_user_ip( id, szAuth , charsmax(szAuth), 1);
formatex( szKey , 63 , "%s-IP" , szAuth);
}
else if ( get_user_save_method(id) == 1 )
{
get_user_authid( id , szAuth , charsmax(szAuth) );
formatex( szKey , 63 , "%s-ID" , szAuth);
}
new szData[256];
formatex(szData, 255, "%i#%i#%i#%i#%i#", SpeedLevel[id], HealthLevel[id], DamageLevel[id], GravityLevel[id], RegenLevel[id])
nvault_set( PrestigeVault , szKey , szData );
}
LoadPowers(id)
{
new szAuth[33];
new szKey[40], szKey2[40];
new Best, Best2
// Best save is loaded
get_user_ip( id, szAuth , charsmax(szAuth), 1);
formatex( szKey , 63 , "%s-IP" , szAuth);
get_user_authid( id , szAuth , charsmax(szAuth) );
formatex( szKey2 , 63 , "%s-ID" , szAuth);
new szData[256], szData2[256];
formatex(szData, 255, "%i#%i#%i#%i#%i#", SpeedLevel[id], HealthLevel[id], DamageLevel[id], GravityLevel[id], RegenLevel[id])
formatex(szData2, 255, "%i#%i#%i#%i#%i#", SpeedLevel[id], HealthLevel[id], DamageLevel[id], GravityLevel[id], RegenLevel[id])
nvault_get(PrestigeVault, szKey, szData, 255)
replace_all(szData , 255, "#", " ")
nvault_get(PrestigeVault, szKey2, szData2, 255)
replace_all(szData2 , 255, "#", " ")
new speed[32], health[32], damage[32], gravity[32], regen[32], speed2[32], health2[32], damage2[32], gravity2[32], regen2[32]
parse(szData, speed, 31, health, 31, damage, 31, gravity, 31, regen, 31)
parse(szData2, speed2, 31, health2, 31, damage2, 31, gravity2, 31, regen2, 31)
Best = str_to_num(speed) + str_to_num(health) + str_to_num(damage) + str_to_num(gravity) + str_to_num(regen)
Best2 = str_to_num(speed2) + str_to_num(health2) + str_to_num(damage2) + str_to_num(gravity2) + str_to_num(regen2)
if(Best > Best2)
{
SpeedLevel[id] = str_to_num(speed)
HealthLevel[id] = str_to_num(health)
DamageLevel[id] = str_to_num(damage)
GravityLevel[id] = str_to_num(gravity)
RegenLevel[id] = str_to_num(regen)
}
else
{
SpeedLevel[id] = str_to_num(speed2)
HealthLevel[id] = str_to_num(health2)
DamageLevel[id] = str_to_num(damage2)
GravityLevel[id] = str_to_num(gravity2)
RegenLevel[id] = str_to_num(regen2)
}
}
stock Price(LevelAmount)
{
new Value = 1
Value = Value + (LevelAmount*2)
return Value
}
stock ColorChat(const index, const string[], {Float, Sql, Resul,_}:...)
{
new msg[191], players[32], count = 1, Prefix[32];
get_cvar_string("amx_prefix_cvar", Prefix, 31);
static len;
len = formatex(msg, charsmax(msg), "^4[ %s ]^1 ", Prefix);
vformat(msg[len], charsmax(msg) - len, string, 3);
replace_all(msg,190,"/g","^4");// green txt
replace_all(msg,190,"/y","^1");// orange txt
replace_all(msg,190,"/ctr","^3");// team txt
replace_all(msg,190,"/w","^0");// team txt
if(index) players[0] = index;
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();
}
}
}