Spoiler
/* Script generated by Pawn Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fun>
#include <nvault>
#define PLUGIN "DeathrunExpMod"
#define AUTHOR "K1cK & QTM. Peyote - podstawa silnika"
#define VERSION "1.0"
#define STANDARDOWA_SZYBKOSC 250.0
#define STANDARDOWA_GRAWITACJA 1.0
#define ZADANIE_POKAZ_INFORMACJE 672
#define ZADANIE_POKAZ_REKLAME 768
#define ZADANIE_USTAW_SZYBKOSC 832
new SyncHudObj;
new SyncHudObj2;
new SyncHudObj3;
new g_vault;
new doswiadczenia_za_zabojstwo;
new nazwa_gracza[33][64];
new klasa_gracza[33];
new poziom_gracza[33] = 1;
new doswiadczenie_gracza[33];
new nowa_klasa_gracza[33]
enum { NONE = 0,Szybcior, Master};
new const Float:szybkosc_klasy[] = {0.0, 1.0, 1.2};
new const Float:grawitacja_klasy[] = {1.0, 0.1, 1.0}
new const nazwy_klas[][] = {"Brak",
"Szybcior",
"Master"
};
new const opisy_klas[][] = {"Brak",
"Na start jestes szybszy od pozostalych",
"Na start masz wieksza grawitacja i szybkosc od pozostalych (ViP)"
};
new punkty_gracza[33];
new kondycja_gracza[33];
new Float:szybkosc_gracza[33];
new grawitacja_gracza[33];
new Float:grav
new bool:gracz_resetuje[33];
new const doswiadczenie_poziomu[] = {
1,
1, 5, 14, 26, 38, 62, 86, 115, 148, 187,
228, 271, 323, 377, 434, 497, 561, 627, 699, 775,
851, 934, 1020, 1106, 1205, 1306, 1411, 1519, 1628, 1745,
1865, 1987, 2112, 2243, 2376, 2515, 2661, 2811, 2967, 3125,
3288, 3452, 3620, 3789, 3958, 4127, 4302, 4479, 4674, 4869
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_vault = nvault_open("DeathrunExpMod");
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
register_logevent("PoczatekRundy", 2, "1=Round_Start");
register_event("DeathMsg", "Death", "a");
register_event("CurWeapon","CurWeapon","be", "1=1");
register_clcmd("say /klasa", "WybierzKlase");
register_clcmd("say /klasy", "OpisKlasy");
register_clcmd("say /reset", "KomendaResetujPunkty");
register_concmd("dr_setlvl", "cmd_setlvl", ADMIN_KICK, "<name> <level>");
register_cvar("dr_killxp", "1");
doswiadczenia_za_zabojstwo = get_cvar_num("dr_killxp");
SyncHudObj = CreateHudSyncObj();
SyncHudObj2 = CreateHudSyncObj();
SyncHudObj3 = CreateHudSyncObj();
set_task(30.0, "Pomoc");
}
public plugin_precache()
{
precache_sound("csmps/sound/select.wav");
precache_sound("csmps/sound/gained_level.wav");
}
public Odrodzenie(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;
if(nowa_klasa_gracza[id])
{
klasa_gracza[id] = nowa_klasa_gracza[id];
nowa_klasa_gracza[id] = 0;
WczytajDane(id, klasa_gracza[id]);
}
if(!klasa_gracza[id])
{
WybierzKlase(id);
return PLUGIN_CONTINUE;
}
switch(klasa_gracza[id])
{
case Szybcior:{}
case Master:{}
}
if(gracz_resetuje[id])
{
ResetujPunkty(id);
gracz_resetuje[id] = false;
}
if(punkty_gracza[id]>0)
PrzydzielPunkty(id);
szybkosc_gracza[id] = STANDARDOWA_SZYBKOSC*szybkosc_klasy[klasa_gracza[id]]+floatround(kondycja_gracza[id]*1.3);
grav = STANDARDOWA_GRAWITACJA-grawitacja_klasy[klasa_gracza[id]]-grawitacja_gracza[id] / 300.0;
return PLUGIN_CONTINUE;
}
public PoczatekRundy()
{
for(new id=0;id<=32;id++)
{
if(!is_user_alive(id))
continue;
set_task(0.1, "UstawSzybkosc", id+ZADANIE_USTAW_SZYBKOSC);
}
}
public Death()
{
new id = read_data(2);
new attacker = read_data(1);
if(!is_user_alive(attacker) || !is_user_connected(attacker))
return PLUGIN_CONTINUE;
if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
{
new nowe_doswiadczenie = 0;
nowe_doswiadczenie += doswiadczenia_za_zabojstwo;
if(poziom_gracza[id] > poziom_gracza[attacker])
nowe_doswiadczenie += poziom_gracza[id] - poziom_gracza[attacker];
set_hudmessage(255, 212, 0, 0.50, 0.33, 1, 6.0, 4.0);
ShowSyncHudMsg(attacker, SyncHudObj2, "+%i", nowe_doswiadczenie);
doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
}
SprawdzPoziom(attacker);
return PLUGIN_CONTINUE;
}
public client_connect(id)
{
klasa_gracza[id] = 0;
poziom_gracza[id] = 0;
doswiadczenie_gracza[id] = 0;
punkty_gracza[id] = 0;
kondycja_gracza[id] = 0;
szybkosc_gracza[id] = 0.0;
grawitacja_gracza[id] = 0;
get_user_name(id, nazwa_gracza[id], 63);
remove_task(id+ZADANIE_POKAZ_INFORMACJE);
remove_task(id+ZADANIE_POKAZ_REKLAME);
remove_task(id+ZADANIE_USTAW_SZYBKOSC);
set_task(10.0, "PokazReklame", id+ZADANIE_POKAZ_REKLAME);
set_task(3.0, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE);
}
public client_disconnect(id)
{
remove_task(id+ZADANIE_POKAZ_INFORMACJE);
remove_task(id+ZADANIE_POKAZ_REKLAME);
remove_task(id+ZADANIE_USTAW_SZYBKOSC);
ZapiszDane(id);
}
public OpisKlasy(id)
{
new menu = menu_create("Wybierz klase:", "OpisKlasy_Handle");
for(new i=1; i<sizeof nazwy_klas; i++)
menu_additem(menu, nazwy_klas[i]);
menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
menu_display(id, menu);
client_cmd(id, "spk csmps/sound/select");
}
public OpisKlasy_Handle(id, menu, item)
{
client_cmd(id, "spk csmps/sound/select");
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
client_print(id, print_chat, "[DREXP] %s: %s", nazwy_klas[item+1], opisy_klas[item+1]);
menu_display(id, menu);
return PLUGIN_CONTINUE;
}
public WybierzKlase(id)
{
new menu = menu_create("Wybierz klase:", "WybierzKlase_Handle");
new klasa[50];
for(new i=1; i<sizeof nazwy_klas; i++)
{
WczytajDane(id, i);
format(klasa, 49, "%s \yPoziom: %i", nazwy_klas[i], poziom_gracza[id]);
menu_additem(menu, klasa);
}
WczytajDane(id, klasa_gracza[id]);
menu_setprop(menu, MPROP_EXITNAME, "Wyjdz");
menu_setprop(menu, MPROP_BACKNAME, "Poprzednia strona");
menu_setprop(menu, MPROP_NEXTNAME, "Nastepna strona");
menu_display(id, menu);
client_cmd(id, "spk csmps/sound/select");
}
public WybierzKlase_Handle(id, menu, item)
{
client_cmd(id, "spk csmps/sound/select");
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
item++;
if(item == klasa_gracza[id])
return PLUGIN_CONTINUE;
if(item == Master && !(get_user_flags(id) & ADMIN_RESERVATION))
{
client_print(id, print_chat, "[DREXP] Nie masz uprawnien aby kozystac z klasy premium.");
WybierzKlase(id);
return PLUGIN_CONTINUE;
}
if(klasa_gracza[id])
{
nowa_klasa_gracza[id] = item;
client_print(id, print_chat, "[DREXP] Klasa zostanie zmieniona w nastepnej rundzie.");
}
else
{
klasa_gracza[id] = item;
WczytajDane(id, klasa_gracza[id]);
Odrodzenie(id);
}
return PLUGIN_CONTINUE;
}
public PrzydzielPunkty(id)
{
new kondycja[60];
new grawitacja[60];
new tytul[25];
format(kondycja, 50, "Kondycja: \r%i \y(Zwieksza tempo chodu)", kondycja_gracza[id]);
format(grawitacja, 50, "Grawitacja: \r%i \y(Wyzej skaczesz)", grawitacja_gracza[id]);
format(tytul, 24, "Przydziel Punkty(%i):", punkty_gracza[id]);
new menu = menu_create(tytul, "PrzydzielPunkty_Handler");
menu_additem(menu, kondycja);
menu_additem(menu, grawitacja);
menu_display(id, menu);
}
public PrzydzielPunkty_Handler(id, menu, item)
{
client_cmd(id, "spk csmps/sound/select");
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
switch(item)
{
case 0:
{
if(klasa_gracza[id] == Szybcior)
{
client_print(id, print_chat, "[DREXP] Ta statystyke moze uzywac tylko Master");
PrzydzielPunkty(id)
return PLUGIN_CONTINUE;
}
if(grawitacja_gracza[id]<100)
grawitacja_gracza[id]++;
else
client_print(id, print_chat, "[DREXP] Maxymalny poziom grawitacji osiagnety");
}
}
punkty_gracza[id]--;
if(punkty_gracza[id]>1)
PrzydzielPunkty(id);
return PLUGIN_CONTINUE;
}
public ResetujPunkty(id)
{
punkty_gracza[id] = poziom_gracza[id]*2-2;
kondycja_gracza[id] = 0;
grawitacja_gracza[id] = 0;
}
public KomendaResetujPunkty(id)
{
client_print(id, print_chat, "[DREXP] Umiejetnosci zostana zresetowane w nastepnej rundzie.");
client_cmd(id, "spk csmps/sound/select");
gracz_resetuje[id] = true;
}
public ZapiszDane(id)
{
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s-%i-DrXPMOD", nazwa_gracza[id], klasa_gracza[id]);
format(vaultdata,255,"%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], kondycja_gracza[id], grawitacja_gracza[id]);
nvault_set(g_vault,vaultkey,vaultdata);
}
public WczytajDane(id, klasa)
{
new vaultkey[64],vaultdata[256];
format(vaultkey,63,"%s-%i-DrXPMOD", nazwa_gracza[id], klasa);
format(vaultdata,255,"%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], kondycja_gracza[id], grawitacja_gracza[id]);
nvault_get(g_vault,vaultkey,vaultdata,255);
replace_all(vaultdata, 255, "#", " ");
new doswiadczeniegracza[32], poziomgracza[32], zwinnoscgracza[32], grawitacja[32];
parse(vaultdata, doswiadczeniegracza, 31, poziomgracza, 31, zwinnoscgracza, 31, grawitacja, 31);
doswiadczenie_gracza[id] = str_to_num(doswiadczeniegracza);
poziom_gracza[id] = str_to_num(poziomgracza)>0?str_to_num(poziomgracza):1;
kondycja_gracza[id] = str_to_num(zwinnoscgracza);
grawitacja_gracza[id] = str_to_num(grawitacja);
punkty_gracza[id] = (poziom_gracza[id]-1)*2-kondycja_gracza[id]-grawitacja_gracza[id];
}
public SprawdzPoziom(id)
{
if(poziom_gracza[id] < 50)
{
while(doswiadczenie_gracza[id] >= doswiadczenie_poziomu[poziom_gracza[id]])
{
poziom_gracza[id]++;
set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2);
ShowSyncHudMsg(id, SyncHudObj3, "Brawo kolejny poziom!");
client_cmd(id, "spk csmps/sound/gained_level");
}
punkty_gracza[id] = (poziom_gracza[id]-1)*2-kondycja_gracza[id]-grawitacja_gracza[id];
}
ZapiszDane(id);
}
public PokazInformacje(id)
{
id -= ZADANIE_POKAZ_INFORMACJE;
set_task(0.1, "PokazInformacje", id+ZADANIE_POKAZ_INFORMACJE);
if(!is_user_alive(id))
{
new target = entity_get_int(id, EV_INT_iuser2);
if(target == 0)
return PLUGIN_CONTINUE;
set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2);
ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], doswiadczenie_poziomu[poziom_gracza[target]], poziom_gracza[target]);
return PLUGIN_CONTINUE;
}
new szTxt[64];
formatex(szTxt, sizeof szTxt - 1, "[Klasa: %s | Doswiadczenie: %i / %i | Poziom: %i]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], doswiadczenie_poziomu[poziom_gracza[id]], poziom_gracza[id]);
message_begin(MSG_ONE, get_user_msgid("StatusText"), {0,0,0}, id);
write_byte(0);
write_string(szTxt);
message_end();
return PLUGIN_CONTINUE;
}
public PokazReklame(id)
{
id-=ZADANIE_POKAZ_REKLAME;
client_print(id, print_chat, "Witaj na DR-ExpMod Zapraszamy do miłej zabawy ");
}
public UstawSzybkosc(id)
{
id -= id>32? ZADANIE_USTAW_SZYBKOSC: 0;
if(klasa_gracza[id])
{
set_user_maxspeed(id, szybkosc_gracza[id]);
set_user_gravity(id, grav);
}
}
public Pomoc()
{
switch(random(3))
{
case 0: client_print(0, print_chat, "[DREXP] Aby zresetowac umiejetnosci napisz /reset.");
case 1: client_print(0, print_chat, "[DREXP] Aby zmienic klase napisz /klasa.");
case 2: client_print(0, print_chat, "[DREXP] Aby zobaczyc opis klas napisz /klasy.");
}
set_task(36.0, "Pomoc");
}
public CurWeapon(id)
{
UstawSzybkosc(id);
}
public cmd_setlvl(id, level, cid)
{
if(!cmd_access(id,level,cid,3))
return PLUGIN_HANDLED;
new arg1[33];
new arg2[6];
read_argv(1, arg1, 32);
read_argv(2, arg2, 5);
new player = cmd_target(id, arg1, 0);
new value = str_to_num(arg2)-1;
doswiadczenie_gracza[player] = doswiadczenie_poziomu[value];
poziom_gracza[player] = 0;
SprawdzPoziom(player);
return PLUGIN_HANDLED;
}
Nie moge dawać statystyk ;/
Jak ktoś możę to naprawić to byłbym wdzięczny .
Chce aby Szybcior mogł dawać 1 pkt na lvl i tylko w speeda a Master mogłby dawać i speeda i grav.
jeśli to możliwe to proszę aby 1pkt speeda zmieniał na cośtakiego : jak jest 250 normalnie to będzie 251. A gravitacja niech z 800 zmieni się na 795.
bardzo proszę o szybką pomoc.