Здравейте ако можете да ми помогнете със този плъгин работи но има проблеми
1.не се запазват упгрейдите който купуваш със прс и много играчи губят ХП
2.ХП регенатион не работи
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <csx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <gunxpmod>
#include <nvault>
#include <fun>
new PlayerPrestige[33]
new PrestigeFile[33]
native get_user_ever_prestige(id)
native get_user_save_method(id)
#define MAX_LEVEL 6
#define PowerNum 5
new PrestigeVault
new SpeedLevel[33], HealthLevel[33], DamageLevel[33], GravityLevel[33], RegenLevel[33], MaxHealth[33], Refreshing[33]
public plugin_init() {
register_plugin("Prestige Shop", "1.1", "DeXTeR")
new DataDir[64]
get_datadir(DataDir, 63)
format(PrestigeFile, 127, "%s/Prestige.dat", DataDir)
register_clcmd("set_prestige", "set_prestige", ADMIN_RCON, "<name> <amount>")
register_clcmd("say /prestige", "CmdPrestigeMenu");
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_putinserver(id) {
LoadPrestige(id)
}
public client_connect(id) {
LoadPrestige(id)
}
public client_disconnect(id) {
SavePrestige(id)
SavePowers(id)
SpeedLevel[id] = 0
HealthLevel[id] = 0
DamageLevel[id] = 0
GravityLevel[id] = 0
RegenLevel[id] = 0
}
public plugin_natives() {
register_native("set_user_prestige", "set_user_prestige", 1)
register_native("get_user_prestige", "get_user_prestige", 1)
}
public set_user_prestige(id, prestige) {
if(is_user_connected(id)) {
PlayerPrestige[id] = prestige
SavePrestige(id)
}
}
public get_user_prestige(id) {
return is_user_connected(id) ? PlayerPrestige[id] : 0
}
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 );
}
public CmdPrestigeMenu(id) {
new Title[128], Menu
formatex(Title, sizeof(Title)-1, "\d[\rGunXP\d] \yComprar Prestige:", get_user_xp(id))
Menu = menu_create(Title, "CmdBuyPrestige")
if(get_user_xp(id) >= 150000)
menu_additem(Menu, "\w1 Prestige - \r150000 XP", "1", 0)
else
menu_additem(Menu, "\d1 Prestige - \r150000 XP", "1", 0)
if(get_user_xp(id) >= 450000)
menu_additem(Menu, "\w3 Prestige - \r450000 XP", "2", 0)
else
menu_additem(Menu, "\d3 Prestige - \r450000 XP", "2", 0)
if(get_user_xp(id) >= 750000)
menu_additem(Menu, "\w5 Prestige - \r750000 XP", "3", 0)
else
menu_additem(Menu, "\d5 Prestige - \r750000 XP", "3", 0)
if(get_user_xp(id) >= 1500000)
menu_additem(Menu, "\w10 Prestige - \r1500000 XP", "4", 0)
else
menu_additem(Menu, "\d10 Prestige - \r1500000 XP", "4", 0)
menu_setprop(Menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, Menu, 0);
}
public CmdBuyPrestige(id, menu, item) {
if(item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new Data[6], Name[64];
new Access, CallBack;
menu_item_getinfo(menu, item, Access, Data,5, Name, 63, CallBack);
new Key = str_to_num(Data);
switch(Key) {
case 1: {
new PrestigeCost = get_user_xp(id) - 150000
if(PrestigeCost < 0)
ColorChat(id, "!g[US] !yNo tienes suficiente XP para comprar esto!")
else {
set_user_prestige(id, get_user_prestige(id) + 1)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!g[US] !yHas comprado 1 Prestige!")
}
}
case 2: {
new PrestigeCost = get_user_xp(id) - 450000
if(PrestigeCost < 0)
ColorChat(id, "!g[US] !yNo tienes suficiente XP para comprar esto!")
else {
set_user_prestige(id, get_user_prestige(id) + 3)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!g[US] !yHas comprado 3 Prestiges!")
}
}
case 3: {
new PrestigeCost = get_user_xp(id) - 750000
if(PrestigeCost < 0)
ColorChat(id, "!g[US] !yNo tienes suficiente XP para comprar esto!")
else {
set_user_prestige(id, get_user_prestige(id) + 5)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!g[US] !Has comprado 5 Prestiges!")
}
}
case 4: {
new PrestigeCost = get_user_xp(id) - 1500000
if(PrestigeCost < 0)
ColorChat(id, "!g[US] !yNo tienes suficiente XP para comprar esto!")
else {
set_user_prestige(id, get_user_prestige(id) + 10)
set_user_xp(id, PrestigeCost)
ColorChat(id, "!g[US] !yHas comprado 10 Prestiges!")
}
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public SavePrestige(id) {
if(!is_user_connected(id)) return 1;
new Name[32];
get_user_name(id, Name, 31);
static Data[1024]
formatex(Data, sizeof(Data) - 1, "^"%i^"", PlayerPrestige[id])
new Save[512]
format(Save, 511, "^"%s^" %s", Name, Data)
new Line[128], Linie, IsPlayer = false, Arg1[32]
new FileOpen = fopen(PrestigeFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31)
if (equali(Arg1, Name)) {
write_file(PrestigeFile, Save, Linie)
IsPlayer = true
break
}
Linie++
}
fclose(FileOpen)
if (!IsPlayer) {
write_file(PrestigeFile, Save, -1)
}
return PLUGIN_HANDLED
}
public set_prestige (id, level, cid) {
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED;
new arg[32], arg2[32];
read_argv(1, arg, 32);
read_argv(2, arg2, 31);
new player = cmd_target(id,arg,2);
if(!player) return PLUGIN_HANDLED;
new prestigeamount = str_to_num(arg2);
set_user_prestige(player, get_user_prestige(player) + prestigeamount);
if( prestigeamount < 0 )
{
console_print(id, "No puedes dar menos de 0");
return PLUGIN_HANDLED;
}
new player_name[32], admin_name[32];
get_user_name(player, player_name, 31);
get_user_name(id, admin_name, 31);
switch(get_cvar_num("amx_show_activity"))
{
case 2: ColorChat(id, "!g[US] !t%s: !yle ha dado !g%s !yPrestiges a !g%i!y!", admin_name, player_name, prestigeamount);
case 1: ColorChat(id, "!gADMIN: !ygive !t%s %i !gPrestige", player_name, prestigeamount);
}
return PLUGIN_HANDLED;
}
public LoadPrestige(id) {
if(!is_user_connected(id)) return 1;
new Name[32];
get_user_name(id, Name, 31);
new Line[128], Arg1[32], Arg2[32];
new FileOpen = fopen(PrestigeFile, "rt")
while(!feof(FileOpen)) {
fgets(FileOpen, Line, 127)
trim(Line)
parse(Line, Arg1, 31, Arg2, 31)
if (equali(Arg1, Name)) {
PlayerPrestige[id] = str_to_num(Arg2)
break
}
}
fclose(FileOpen)
return PLUGIN_HANDLED
}
public CheckSpawn(id)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
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)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
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)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
new Num = (800 - GravityLevel[id]*30)/800
set_user_gravity(id, 1.0 * Num)
}
}
public event_curweapon(id)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
if(SpeedLevel[id] > 0)
{
set_task(0.5, "SetSpeed", id)
}
}
}
public SetSpeed(id)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
set_user_maxspeed(id, get_user_maxspeed(id) +(20*SpeedLevel[id]))
}
}
public TakeDamage(victim, inflictor, attacker, Float:damage, damagebits, id)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
if(victim != attacker)
{
if(DamageLevel[attacker] > 0)
{
SetHamParamFloat(4, damage * (1.0 + (DamageLevel[attacker] * 0.2)))
}
}
}
}
public NeverEndingRegen(id)
{
if(!is_user_alive(id))
{
return;
}
if(cs_get_user_team(id) == CS_TEAM_CT)
{
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), "\d[\rGunXP\d] \yPowers\d:", get_user_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[\yNivel %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[\rMAX\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "%sHealth \d[\yNivel %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[\rMAX\d]" )
menu_additem(PrestigeMenu, Format)
float_to_str(1.0 + (0.2*(DamageLevel[id]+1)), StrFloat, charsmax(StrFloat))
formatex(Format, charsmax(Format), "%sDamage \d[\yNivel %i\d][\rx%s Damage\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[\yNivel %i\d][\r%i 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[\rMAX\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "%sHP Regeneration \d[\yNivel %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[\rMAX\d]" )
menu_additem(PrestigeMenu, Format)
formatex(Format, charsmax(Format), "Resetear Powers")
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, "^4[US] ^1Has mejorado ^4Speed^1!")
}
}
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, "^4[US] ^1Has mejorado ^4Health^1!")
}
}
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, "^4[US] ^1Has mejorado ^4Damage^1!")
}
}
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, "^4[US] ^1Has mejorado ^4Gravity^1!")
}
}
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, "^4[US] ^1Has mejorado ^4HP Regeneration^1!")
}
}
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, "^4[US] ^1Has reseteado tus Powers!")
}
}
if(item != MENU_EXIT)
{
CMD_Prestige(id)
}
}
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
}
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
stock HudMessage(const id, const message[], red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 0.01, Float:holdtime = 3.0, Float:fadeintime = 0.01, Float:fadeouttime = 0.01) {
new count = 1, players[32];
if(id) players[0] = id;
else get_players(players, count, "ch"); {
for(new i = 0; i < count; i++) {
if(is_user_connected(players[i])) {
new color = pack_color(clamp_byte(red), clamp_byte(green), clamp_byte(blue))
message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, players[i]);
write_byte(strlen(message) + 31);
write_byte(DRC_CMD_MESSAGE);
write_byte(effects);
write_long(color);
write_long(_:x);
write_long(_:y);
write_long(_:fadeintime);
write_long(_:fadeouttime);
write_long(_:holdtime);
write_long(_:fxtime);
write_string(message);
message_end();
}
}
}
}
stock ColorChat(const id, const input[], any:...) {
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!y", "^1");
replace_all(msg, 190, "!t", "^3");
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();
}
}
}
}