Code Snippets/Tutorials - [Poradnik] Naliczanie XP Bez zbędnych słów wstępu.
Jeśli tworzysz Mod XP musisz zawrzeć najważniejsze moduły.
Kod php:
#include <amxmodx> ... |
|
Weteran
Grupa: Administrator
Postów: 8,047
Zarejestrowany: Mar 2008
Wiek: 21
Status:
|
[Poradnik] Naliczanie XP -
10-11-08, 23:37
Bez zbędnych słów wstępu.
Jeśli tworzysz Mod XP musisz zawrzeć najważniejsze moduły.
Kod php:
#include <amxmodx> #include <amxmisc> #include <nvault>
Następnie definujesz klasy.
Tutaj podałem 5, ale możesz np obrobić więcej i bez problemu zwiększyć tą liczbę.
Kod php:
#define MAXCLASSES 5
Teraz tworzymy zmienna odpowiedzialną za zapisanie i podtrzymanie twojej klasy i LVL
Kod php:
new PlayerXP[33],PlayerLevel[33],PlayerClass[33] //to ejst dla specjalnych zabić (uzyskiwanie XP za zabicie) new XP_Kill,XP_Knife,XP_Hs,SaveXP //To odpowiada za zapisywanie XP new g_vault
Teraz tworzymy zmienną która będzie odpowiadać za nazwy klas.
Kod php:
new const CLASSES[MAXCLASSES][] = { "None", "Dog", "Cat", "Horse", "Cow" }
Kolejna zmienna mówi nam ile XP potrzebujemy żeby wbić na kolejny lxl.
Kod php:
new const LEVELS[7] = { 0, 100,//this means you need 100 xp 200,//this means you need 200 xp 400,//this means you need 400 xp 800,//so on 1600,//so on 3200 //so on }
Teraz tworzymy plugin_init()
Kod php:
public plugin_init() { register_plugin("XpMod", "1.0", "Fxfighter") //Potrzebujemy tego żeby sprawdzało twój lvl po zabiciu kogoś register_event("DeathMsg", "eDeath", "a") //Cavar- Czy XP ma się zapisywać SaveXP = register_cvar("SaveXP","1") //Cavar- Ile XP otrzymasz za zabicie? XP_Kill=register_cvar("XP_per_kill", "20") //Cavar- Jesli trafisz HS bedzie bonusowe XP XP_Hs=register_cvar("XP_hs_bonus","20") //Cavar- EJsli zabijesz z noza bedzie bonusowe XP XP_Knife=register_cvar("XP_knife_bonus","20") //Otwieramy nowe połączenie dla modułu Nvalut // Powiedzmy ze nazwiemy je animod g_vault = nvault_open("animod") // Komenda do zmiany klasy register_clcmd("say /class", "ChangeClass") register_clcmd("say_team /class", "ChangeClass") //Pokazanie ile XP posiadasz register_clcmd("say /xp", "ShowHud") register_clcmd("say_team /xp", "ShowHud") }
Teraz tworzymy funkcje opowiadająca za dawanie XP
Kod php:
public eDeath( ) //function name { // Jesli gracz nie wybiera zadnej klasy nic sie nie ebdzie dzialo if(PlayerClass[attacker] == 0) return PLUGIN_CONTINUE // Tworzymy zmienna "victim wiec bedzie ona sprawdzac // kiedy gracz zabija new iVictim = read_data( 2 ) // Jesli gracz zabije przez HS bedzie odpalany Cavar Xp_Hs new headshot = read_data( 3 ) //Ktora bron byla uzyta new clip, ammo, weapon = get_user_weapon(id,clip,ammo); PlayerXP[attacker] += get_pcvar_num(XP_Kill) //uzyteczne dla xp_hs cvar // sprawdza czy zabojstwo bylo dokonane headshot if(headshot) // Daje jemu/jej bonus xp PlayerXP[attacker] += get_pcvar_num(XP_Hs) // sprawdza czy ofiara nie zostala zabita z noza if(weapon == CSW_KNIFE) //Daje jej/jemu Xp baonus PlayerXP[attacker] += get_pcvar_num(XP_Knife) // Ta funkcja sprawdza czy gracz ma wystarczajaco XP zeby wbic na wiekszy LVL while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) { // Odpowiada za stworzenie wiadomosci gratulacyjnej. client_print(attacker, print_chat, "[Animal Mod] Congratulations! You are a level %i %s!", PlayerLevel[attacker],CLASSES[PlayerClass[attacker]]) // Add his/her level PlayerLevel[attacker] += 1 } // pokazuje graczowi jego lvl ShowHud(attacker) }
A tutaj mamy krótką funkcjie pokazującą graczowi jego klasse i xP
Kod php:
public ShowHud(id) { set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0) show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]]) }
Notka ^n oznacza nowa linie
Tutaj tworzymy Menu wyboru. Dokłądniej opsiał to młody http://www.cscenter.pl/scripting/523..._np_sklep.html
Kod php:
public ChangeClass(id) { new menu = menu_create("Class Menu" , "Class_Handle"); menu_additem(menu ,"Dog", "1" , 0); menu_additem(menu ,"Cat", "2" , 0); menu_additem(menu ,"Horse", "3" , 0); menu_additem(menu ,"Cow", "4" , 0); menu_setprop(menu , MPROP_EXIT , MEXIT_ALL); menu_display(id , menu , 0); return PLUGIN_CONTINUE; } public Class_Handle(id , menu , item) { if(item == MENU_EXIT) { menu_destroy(menu); } new szCommand[6] , szName[64]; new access , callback; menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback); new i = str_to_num(szCommand) if(PlayerClass[id] != i) { PlayerClass[id] = i client_print(id,print_chat,"You are now a %s",CLASSES[i]) } else { client_print(id,print_chat,"You are alredy a %s",CLASSES[i]) } menu_destroy(menu); return PLUGIN_CONTINUE }
Teraz funkcjie które działają kiedy gracz łaczy się z serwerem
Kod php:
public client_connect(id) { // Tylko wtedy kiedy Xp jest zapisywane if(get_pcvar_num(SaveXP) == 1) { // Ładuje Xp i klase LoadData(id) } }
No i funkcja kiedy gracz rozłancza się z serwera
Kod php:
public client_disconnect(id) { // Only does it if xp saving is on if(get_pcvar_num(SaveXP) == 1) { // lets save the data SaveData(id) } }
Teraz tworzymy fukcjie do wczytywanie XP
Kod php:
public SaveData(id) { // Pobiega Steam ID gracza. Potrzbene poniewaz zapis jest na steam ID new AuthID[35] get_user_authid(id,AuthID,34) new vaultkey[64],vaultdata[256] // format wat is going to be in the animal mod vault file format(vaultkey,63,"%s-Mod",AuthID) format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) // save the data nvault_set(g_vault,vaultkey,vaultdata) return PLUGIN_CONTINUE }
No i fukcja wczytywanie XP
Kod php:
public LoadData(id) { new AuthID[35] get_user_authid(id,AuthID,34) new vaultkey[64],vaultdata[256] // Szukanie format(vaultkey,63,"%s-Mod",AuthID) format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) // Ładowanie nvault_get(g_vault,vaultkey,vaultdata,255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) PlayerXP[id] = str_to_num(playerxp) PlayerLevel[id] = str_to_num(playerlevel) return PLUGIN_CONTINUE }
No i na końcu cały kod razem.
Kod php:
#include <amxmodx> #include <amxmisc> #include <nvault>
#define MAXCLASSES 5
new const CLASSES[MAXCLASSES][] = { "None", "Dog", "Cat", "Horse", "Cow" }
new const LEVELS[6] = { 100, 200, 400, 800, 1600, 3200 }
new PlayerXP[33],PlayerLevel[33],PlayerClass[33] new XP_Kill,XP_Knife,XP_Hs,SaveXP,g_vault
public plugin_init() { register_plugin("XpMod", "1.0", "Fxfighter") register_event("DeathMsg", "eDeath", "a") SaveXP = register_cvar("SaveXP","1") XP_Kill=register_cvar("XP_per_kill", "20") XP_Hs=register_cvar("XP_hs_bonus","20") XP_Knife=register_cvar("XP_knife_bonus","20") g_vault = nvault_open("animod") register_clcmd("say /class", "ChangeClass") register_clcmd("say_team /class", "ChangeClass") register_clcmd("say /xp", "ShowHud") register_clcmd("say_team /xp", "ShowHud") }
public eDeath( ) { new iVictim = read_data( 2 ) new headshot = read_data( 3 ) new clip, ammo, weapon = get_user_weapon(id,clip,ammo); PlayerXP[attacker] += get_pcvar_num(XP_Kill) if(headshot) PlayerXP[attacker] += get_pcvar_num(XP_Hs) if(weapon == CSW_KNIFE) PlayerXP[attacker] += get_pcvar_num(XP_Knife) while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) { client_print(attacker, print_chat, "[Animal Mod] Congratulations! You are a level %i %s!", PlayerLevel[attacker] += 1 } ShowHud(attacker) SaveData(attacker) }
public ShowHud(id) { set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0) show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]]) }
public ChangeClass(id) { new menu = menu_create("Class Menu" , "Class_Handle"); menu_additem(menu ,"Dog", "1" , 0); menu_additem(menu ,"Cat", "2" , 0); menu_additem(menu ,"Horse", "3" , 0); menu_additem(menu ,"Cow", "4" , 0); menu_setprop(menu , MPROP_EXIT , MEXIT_ALL); menu_display(id , menu , 0); return PLUGIN_CONTINUE; }
public Class_Handle(id , menu , item) { if(item == MENU_EXIT) { menu_destroy(menu); } new szCommand[6] , szName[64]; new access , callback; menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback); new i = str_to_num(szCommand) if(PlayerClass[id] != i) { PlayerClass[id] = i client_print(id,print_chat,"You are now a %s",CLASSES[i]) } else { client_print(id,print_chat,"You are alredy a %s",CLASSES[i]) } menu_destroy(menu); return PLUGIN_CONTINUE }
public client_connect(id) { if(get_pcvar_num(SaveXP) == 1) { LoadData(id) } } public client_disconnect(id) { if(get_pcvar_num(SaveXP) == 1) { SaveData(id) } PlayerXP[id] = 0 PlayerLevel[id] = 0 PlayerClass[id] = 0 }
public SaveData(id) { new AuthID[35] get_user_authid(id,AuthID,34) new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",AuthID) format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) nvault_set(g_vault,vaultkey,vaultdata) return PLUGIN_CONTINUE }
public LoadData(id) { new AuthID[35] get_user_authid(id,AuthID,34) new vaultkey[64],vaultdata[256] format(vaultkey,63,"%s-Mod",AuthID) format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) nvault_get(g_vault,vaultkey,vaultdata,255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) PlayerXP[id] = str_to_num(playerxp) PlayerLevel[id] = str_to_num(playerlevel) return PLUGIN_CONTINUE }
Ostatnio edytowane przez ^^KaMaZZ~.^ : 11-04-09 - 00:23
|
Offline
|
|
|
Guru
Grupa: Użytkownik
Postów: 441
Zarejestrowany: Jul 2008
|
Odp: [Poradnik] Naliczanie XP -
11-11-08, 09:59
Młody, a jak wezmę ten cały plugin i dam go na serwer to co będzie? ;> Za zabicie będę dostawał XP a jak zbiorę dużo XP to lvl? I co się stanie jak będę miał np 10 lvl? I czy jak mnie zabiją to stracę XP (ze 3 razy mniej)? ;>
|
Offline
|
|
|
Weteran
Grupa: Administrator
Postów: 8,047
Zarejestrowany: Mar 2008
Wiek: 21
Status:
|
Odp: [Poradnik] Naliczanie XP -
11-11-08, 10:34
Clasy i lvl.
|
Offline
|
|
|
Guru
Grupa: Użytkownik
Postów: 869
Zarejestrowany: Apr 2008
Skąd: Jamaica
Status:
|
Odp: [Poradnik] Naliczanie XP -
11-11-08, 10:50
a jak zrobić żeby dana klasa miała coś innego ? np 1 klasa 150 hp. co level 10 hp wiecej. itp. 2 klasa nie slychac jak chodzi jak toz ro bić ?
ps. Nie moge to skopilować jak i na dysku jak i na amxmodx.org
Ostatnio edytowane przez bialy60 : 11-11-08 - 11:03
|
Offline
|
|
|
Stały bywalec
Grupa: Użytkownik
Postów: 313
Zarejestrowany: Aug 2008
Skąd: okolice Łodzi
Wiek: 27
Status:
|
Odp: [Poradnik] Naliczanie XP -
11-11-08, 13:24
To jest nauka kodu a nie gotowy plugin... !
|
Offline
|
|
|
Guru
Grupa: Użytkownik
Postów: 441
Zarejestrowany: Jul 2008
|
Odp: [Poradnik] Naliczanie XP -
11-11-08, 20:29
Biały chcesz plugin pisz tu:
Poszukiwane pluginy AMXX
|
Offline
|
|
|
Bot
Grupa: Użytkownik
Postów: 20
Zarejestrowany: Apr 2009
|
Odp: [Poradnik] Naliczanie XP -
10-04-09, 22:52
Odświeżę temat bo plugin bardzo się mi przyda
zastanawia mnie czemu nie mogę skompilować (wywala dużo błędów)
Edit:
sam znalazłem chyba rozwiązanie ale niech ktoś potwierdzi :
Kod:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define MAXCLASSES 5
new attacker
new const CLASSES[MAXCLASSES][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
}
new const LEVELS[6] = {
100,
200,
400,
800,
1600,
3200
}
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP,g_vault
public plugin_init()
{
register_plugin("XpMod", "1.0", "Fxfighter")
register_event("DeathMsg", "eDeath", "a")
SaveXP = register_cvar("SaveXP","1")
XP_Kill=register_cvar("XP_per_kill", "20")
XP_Hs=register_cvar("XP_hs_bonus","20")
XP_Knife=register_cvar("XP_knife_bonus","20")
g_vault = nvault_open("animod")
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
register_clcmd("say /xp", "ShowHud")
register_clcmd("say_team /xp", "ShowHud")
}
public eDeath( )
{
new iVictim = read_data( 2 )
new headshot = read_data( 3 )
new clip, ammo, weapon = get_user_weapon(clip,ammo);
PlayerXP[attacker] += get_pcvar_num(XP_Kill)
if(headshot)
PlayerXP[attacker] += get_pcvar_num(XP_Hs)
if(weapon == CSW_KNIFE)
PlayerXP[attacker] += get_pcvar_num(XP_Knife)
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
client_print(attacker, print_chat , "[Animal Mod] Congratulations! You are a level %i %s!"),
PlayerLevel[attacker] += 1
}
ShowHud(attacker)
SaveData(attacker)
}
public ShowHud(id)
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}
public ChangeClass(id)
{
new menu = menu_create("Class Menu" , "Class_Handle");
menu_additem(menu ,"Dog", "1" , 0);
menu_additem(menu ,"Cat", "2" , 0);
menu_additem(menu ,"Horse", "3" , 0);
menu_additem(menu ,"Cow", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
return PLUGIN_CONTINUE;
}
public Class_Handle(id , menu , item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
}
new szCommand[6] , szName[64];
new access , callback;
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
new i = str_to_num(szCommand)
if(PlayerClass[id] != i)
{
PlayerClass[id] = i
client_print(id,print_chat,"You are now a %s",CLASSES[i])
}
else
{
client_print(id,print_chat,"You are alredy a %s",CLASSES[i])
}
menu_destroy(menu);
return PLUGIN_CONTINUE
}
public client_connect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{
LoadData(id)
}
}
public client_disconnect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{
SaveData(id)
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 0
}
public SaveData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
Ostatnio edytowane przez patryk006 : 11-04-09 - 16:24
|
Offline
|
|
|
Forumowy ekspert
Grupa: Użytkownik
Postów: 1,617
Zarejestrowany: Sep 2008
Skąd: Szczecin
Wiek: 15
Status:
|
Odp: [Poradnik] Naliczanie XP -
11-04-09, 14:49
podaj kod
Zapraszam na serwa!
Wbijać! ;))
|
Offline
|
|
|
Bot
Grupa: Użytkownik
Postów: 20
Zarejestrowany: Apr 2009
|
Odp: [Poradnik] Naliczanie XP -
11-04-09, 16:28
nie mogłem nawet skompilować tego co tutaj jest ale czytając błędy doszedłem chyba co było nie tak (wyżej kod ale potwierdź) jeśli dobrze poprawiłem to zabieram się za "poważną" edycję tego
|
Offline
|
|
|
Forumowy ekspert
Grupa: Użytkownik
Postów: 1,617
Zarejestrowany: Sep 2008
Skąd: Szczecin
Wiek: 15
Status:
|
Odp: [Poradnik] Naliczanie XP -
13-04-09, 15:02
daj kod -.-
Zapraszam na serwa!
Wbijać! ;))
|
Offline
|
|
|
Bot
Grupa: Użytkownik
Postów: 20
Zarejestrowany: Apr 2009
|
Odp: [Poradnik] Naliczanie XP -
13-04-09, 18:13
przecież pisze ze kod wyżej
Kod:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define MAXCLASSES 5
new attacker
new const CLASSES[MAXCLASSES][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
}
new const LEVELS[6] = {
100,
200,
400,
800,
1600,
3200
}
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP,g_vault
public plugin_init()
{
register_plugin("XpMod", "1.0", "Fxfighter")
register_event("DeathMsg", "eDeath", "a")
SaveXP = register_cvar("SaveXP","1")
XP_Kill=register_cvar("XP_per_kill", "20")
XP_Hs=register_cvar("XP_hs_bonus","20")
XP_Knife=register_cvar("XP_knife_bonus","20")
g_vault = nvault_open("animod")
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
register_clcmd("say /xp", "ShowHud")
register_clcmd("say_team /xp", "ShowHud")
}
public eDeath( )
{
new iVictim = read_data( 2 )
new headshot = read_data( 3 )
new clip, ammo, weapon = get_user_weapon(clip,ammo);
PlayerXP[attacker] += get_pcvar_num(XP_Kill)
if(headshot)
PlayerXP[attacker] += get_pcvar_num(XP_Hs)
if(weapon == CSW_KNIFE)
PlayerXP[attacker] += get_pcvar_num(XP_Knife)
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
client_print(attacker, print_chat , "[Animal Mod] Congratulations! You are a level %i %s!"),
PlayerLevel[attacker] += 1
}
ShowHud(attacker)
SaveData(attacker)
}
public ShowHud(id)
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}
public ChangeClass(id)
{
new menu = menu_create("Class Menu" , "Class_Handle");
menu_additem(menu ,"Dog", "1" , 0);
menu_additem(menu ,"Cat", "2" , 0);
menu_additem(menu ,"Horse", "3" , 0);
menu_additem(menu ,"Cow", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
return PLUGIN_CONTINUE;
}
public Class_Handle(id , menu , item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
}
new szCommand[6] , szName[64];
new access , callback;
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
new i = str_to_num(szCommand)
if(PlayerClass[id] != i)
{
PlayerClass[id] = i
client_print(id,print_chat,"You are now a %s",CLASSES[i])
}
else
{
client_print(id,print_chat,"You are alredy a %s",CLASSES[i])
}
menu_destroy(menu);
return PLUGIN_CONTINUE
}
public client_connect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{
LoadData(id)
}
}
public client_disconnect(id)
{
if(get_pcvar_num(SaveXP) == 1)
{
SaveData(id)
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 0
}
public SaveData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
|
Offline
|
|
|
Szatan
Grupa: Użytkownik
Postów: 686
Zarejestrowany: Oct 2009
Skąd: masz te trzewiki?
|
Odp: [Poradnik] Naliczanie XP -
10-11-09, 17:20
Kod php:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <nvault>
#define MAXCLASSES 5
#define PLUGIN "Sredniowiecze MOD"
#define VERSION "1.0"
#define AUTHOR "Nuz"
new PlayerXP[33],PlayerLevel[33],PlayerClass[33]
new XP_Kill,XP_Knife,XP_Hs,SaveXP
new g_vault
new const CLASSES[MAXCLASSES][] = {
"Brak",
"Asasyn",
"Rycerz",
"Mag",
"Druid"
}
new const LEVELS[14] = {
0,
100,//1
200,//2
400,//3
800,//4
1600,//5
3200,//6
4200, //7
6800, //8
9700, //9
12700, //9
19200, //10
29280, //11
37450 //12
}
new bool:kupil[33]
new bool:uzyl[33]
new cvaron
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /buyhp", "buyhp")
register_clcmd("say /usehp", "usehp")
register_clcmd("say /usebuyhp", "usebuyhp")
register_event("HLTV", "NewRound", "a", "1=0", "2=0")
register_clcmd("say /onsr", "wol")
cvaron = register_cvar("amx_sredniowiecze","1")
register_event("DeathMsg", "eDeath", "a")
SaveXP = register_cvar("SaveXP","1")
XP_Kill=register_cvar("XP_per_kill", "30")
XP_Hs=register_cvar("XP_hs_bonus","10")
XP_Knife=register_cvar("XP_knife_bonus","10")
g_vault = nvault_open("sredniomod")
register_clcmd("say /class", "ChangeClass")
register_clcmd("say_team /class", "ChangeClass")
register_clcmd("say /xp", "ShowXP")
register_clcmd("say_team /xp", "ShowXP")
register_clcmd("say_team /info", "infokom")
register_clcmd("say /info", "infokom")
register_clcmd("say /adminfo", "infokomadm")
register_clcmd("say_team /adminfo", "infokomadm")
}
public client_connect(id)
{
kupil[id] = true
uzyl[id] = false
if(get_pcvar_num(SaveXP) == 1)
{
LoadData(id)
}
}
public eDeath( )
{
new attacker = read_data(1)
if(PlayerClass[attacker] == 0)
return PLUGIN_CONTINUE
new headshot = read_data( 3 )
new clip, ammo, weapon = get_user_weapon(attacker,clip,ammo)
PlayerXP[attacker] += get_pcvar_num(XP_Kill)
if(headshot)
PlayerXP[attacker] += get_pcvar_num(XP_Hs)
if(weapon == CSW_KNIFE)
PlayerXP[attacker] += get_pcvar_num(XP_Knife)
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
client_print(attacker, print_chat, "[AMXX] Gratulacje osiagnales level %i %s!", PlayerLevel[attacker],CLASSES[PlayerClass[attacker]]); PlayerLevel[attacker] += 1
}
ShowHud(attacker)
return PLUGIN_CONTINUE
}
public ShowHud(id)
{
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0)
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s",PlayerLevel[id],PlayerXP[id],CLASSES[PlayerClass[id]])
}
public ChangeClass(id)
{
new menu = menu_create("Class Menu" , "Class_Handle")
menu_additem(menu ,"Asasyn", "1" , 0);
menu_additem(menu ,"Rycerz", "2" , 0);
menu_additem(menu ,"Mag", "3" , 0);
menu_additem(menu ,"Druid", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
return PLUGIN_CONTINUE;
}
public Class_Handle(id , menu , item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
}
new szCommand[6] , szName[64]; new access , callback
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
new i = str_to_num(szCommand);
if(PlayerClass[id] != i)
{
PlayerClass[id] = i client_print(id,print_chat,"Jestes teraz %s",CLASSES[i]);
}
else
{
client_print(id,print_chat,"Przeciez jestes %s",CLASSES[i]);
}
menu_destroy(menu);
return PLUGIN_CONTINUE
}
public SaveData(id)
{
new AuthID[35] get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID) ;
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]) ;
nvault_set(g_vault,vaultkey,vaultdata) ;
return PLUGIN_CONTINUE ;
}
public LoadData(id)
{
new AuthID[35] get_user_authid(id,AuthID,34)
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-Mod",AuthID)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id])
nvault_get(g_vault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
public buyhp(id)
{
if(kupil[id]||cvaron == 1)
client_print(id,print_chat,"[AMXX] Nie moge sprzedac ci wiecej napojow zycia.");
else
{
client_print(id,print_chat,"[AMXX] Kupiles napoj zycia.");
uzyl[id] = false
kupil[id] = true
}
}
public usehp(id)
{
if(uzyl[id]||cvaron == 1)
client_print(id,print_chat,"[AMXX] Nie masz napojow zycia.");
else
{
set_user_health(id, 100)
client_print(id,print_chat,"[AMXX] Uzyles napoju zycia.");
uzyl[id] = true
}
}
public itoito(id)
{
if(kupil[id]||cvaron == 1)
set_user_health(id, 100)
uzyl[id] = true
kupil[id] = true
}
public usebuyhp(id)
{
if(uzyl[id]||kupil[id]||cvaron == 1)
client_print(id,print_chat, "[AMXX] Nie mozesz wiecej kupic i uzyc napojow zycia.");
else
set_task(0.1, "itoito", _, _, _, "a", 1)
}
public NewRound(id)
{
kupil[id] = false
uzyl[id] = false
}
public wol(id)
{
if(is_user_admin(id))
set_task(0.1, "online", _, _, _, "a", 1)
else
client_print(id,print_chat, "[AMXX] Komenda nie dostępna dla normalnego playera.");
}
public woler(id)
{
if(is_user_admin(id))
set_task(0.1, "offline", _, _, _, "a", 1)
else
client_print(id,print_chat, "[AMXX] Komenda nie dostępna dla normalnego playera.");
}
public online(id)
{
if(is_user_admin(id))
server_cmd("amx_cvar amx_sredniowiecze 1")
}
public offline(id)
{
if(is_user_admin(id))
server_cmd("amx_cvar amx_sredniowiecze 0")
}
public info(id)
{
client_print(id,print_chat, "[AMXX] Sredniowiecze mod oferuje dobra zabawe , duzo emocji oraz zroznicowane klasy /shop by otworzyc sklep /info po informacje.")
}
public admininfo(id)
{
if(is_user_admin(id))
client_print(id,print_chat, "[AMXX] amx_sredniowiecze 1 by wlaczyc 0 by wylaczyc.")
}
public infokom(id)
{
set_task(0.1, "info", _, _, _, "a", 1)
if(is_user_admin(id))
set_task(0.1, "admininfo", _, _, _, "a", 1)
}
public infokomadm(id)
{
if(is_user_admin(id))
{
set_task(0.1, "admininfo", _, _, _, "a", 1)
}
else
{
client_print(id,print_chat, "[AMXX] Komenda dostepna wylacznie dla admina.")
}
}
public autoinfo(id)
{
set_task(130.0, "info", _, _, _, "b")
}
public client_disconnect(id)
{
if(get_pcvar_num(SaveXP) == 1)
SaveData(id)
}
Błędy:
Kod:
//home/groups/amxmodx/tmp3/phpc9lWqP.sma(127) : error 001: expected token: ";", but found "-identifier-"
/home/groups/amxmodx/tmp3/phpc9lWqP.sma(138) : error 001: expected token: ";", but found "-identifier-"
/home/groups/amxmodx/tmp3/phpc9lWqP.sma(147) : error 001: expected token: ";", but found "-identifier-"
/home/groups/amxmodx/tmp3/phpc9lWqP.sma(239) : warning 217: loose indentation
/home/groups/amxmodx/tmp3/phpc9lWqP.sma(248) : warning 217: loose indentation
you raportuj posty niezgodne z regulaminem!
By to zrobić naciśnij 
Ostatnio edytowane przez csowianek : 10-11-09 - 17:40
|
Offline
|
|
|
Bywalec
Grupa: Użytkownik
Postów: 73
Zarejestrowany: May 2008
Skąd: Krakow
Wiek: 15
|
Odp: [Poradnik] Naliczanie XP -
20-02-10, 17:05
Kod html:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define PLUGIN "XP MOD"
#define VERSION "1.0"
#define AUTHOR "Dakashi d(-.-)b"
#define MAXCLASSES 3
new PlayerXP[33], PlayerLevel[33], PlayerClass[33]
new XP_Kill, XP_Knife, XP_Hs, SaveXP
new g_vault
new attacker
new const CLASSES[MAXCLASSES] [] =
{
"Jumper",
"Runner",
"Ghost"
}
new const LEVELS[11] =
{
0,
5,
15,
30,
60,
120,
190,
270,
360,
460,
500
}
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("DeathMsg", "eDeath", "a") //sprawdza LVL po zabiciu kogos
SaveXP = register_cvar("xpmod_savexp", "1") //Cvar odpowiadajacy za zapisywanie XP, 0 = nie zapisuje
XP_Kill = register_cvar("xpmod_normal_kill", "1") //Ile XP sie dostaje za jedno zabicie
XP_Knife = register_cvar("xpmod_knife_kill", "1") //Ile XP za zabicie nozem
XP_Hs = register_cvar("xpmod_hs_kill", "2") //Ile XP za zabicie strzalem w glowe
g_vault = nvault_open("drmod")
register_clcmd("say /klasa", "ChangeClass") //Menu wyboru klasy
register_clcmd("say_team /klasa", "ChangeClass") //Jak wyzej
register_clcmd("say /xp", "ShowXP") //Pokazuje ile gracz ma XP
register_clcmd("say_team /xp", "ShowXP") //J/W
}
public eDeath()
{
if(PlayerClass[attacker] == 0)//Jezeli gracz nie ma wybranej klasy -> nic sie nie dzieje
return PLUGIN_CONTINUE
new iVictim = read_data( 2 )
new headshot = read_data( 3 ) //Jezeli gracz zabil headshotem, odpali sie cvar xpmod_hs_kill
new clip, ammo, weapon = get_user_weapon(clip, ammo) //Jaka bron zostala uzyta
PlayerXP[attacker] += get_pcvar_num(XP_Kill) //Dodaje tyle XP ile wynosi cvar xpmod_normal_kill
if(headshot) //Jezeli gracz trafil w glowe
PlayerXP[attacker] += get_pcvar_num(XP_Hs) //Dodaje tyle XP ile wynosi cvar xpmod_hs_kill
if(weapon == CSW_KNIFE) //Jezeli gracz zabil nozem
PlayerXP[attacker] += get_pcvar_num(XP_Knife) //Dodaje tyle XP ile wynosi cvar xpmod_knife_kill
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]])
{
client_print(id, print_center, "[XPMOD]Gratulacje! Masz %i lvl $s!", PlayerLevel[attacker], CLASSES[PlayerClass[attacker]]) //Wiadomosc gratulacyjna
PlayerLevel[attacker] += 1 //Dodaje LVL
}
ShowXP(attacker)
SaveData(attacker)
}
public ShowXP(id)
{
set_hudmessage(0, 120, 100, 0.75, 0.1, 0, 6.0, 15.0)
show_hudmessage(id, "Twoja klasa: %s^nLVL: %i, EXP: %i", CLASSES[PlayerClass[id]], PlayerLevel[id], PlayerXP[id])
}
public ChangeClass(id)
{
new ClassMenu = menu_create("Menu klas:", ClassHandler)
menu_additem(ClassMenu, "Jumper", "1", 0);
menu_additem(ClassMenu, "Runner", "2", 0);
menu_additem(ClassMenu, "Ghost", "3", 0);
menu_setprop(ClassMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, ClassMenu, 0);
return PLUGIN_CONTINUE
}
public ClassHandler(id, ClassMenu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(ClassMenu)
}
new szCommand[6], szName[64]; new acces, callback;
menu_item_getinfo(ClassMenu, item, acces, szCommand, 5, szName, 63, callback);
new i = str_to_num(szCommand)
if(PlayerClass[id] != i)
{
client_print(id, print_chat, "[XPMOD]Juz jestes %s", CLASSES[PlayerClass[id]])
}
else
{
client_print(id, print_chat, "[XPMOD]Jestes teraz %s", CLASSES[i])
}
menu_destroy(ClassMenu)
return PLUGIN_CONTINUE
}
public client_connect(id)
{
if(get_pcvar_num(xpmod_savexp) == 1) //Jezeli Xp jest zapisywany
{
LoadData(id) //Laduje XP i Klase gracza
}
}
public client_disconnect(id)
{
if(get_pcvar_num(xpmod_savexp) == 1) //Jezeli XP jest zapisywany
{
SaveData(id) //Zapisuje Klase i EXP gracza
}
PlayerXP[id] = 0
PlayerLevel[id] = 0
PlayerClass[id] = 0
}
public SaveData(id)
{
new AuthID[35] get_user_authid(id, AuthID, 34) //Pobiera SteamID gracza
new vaultkey[64], vaultdata[256]
format(vaultkey, 63, "%s-Mod", AuthID) //Jak wyglada zapisywanie
format(vaultdata, 255, "#%i#%i#", PlayerLevel[id], PlayerXP[id]) //LVL i XP w pliku
nvault_set(g_vault, vaultkey, vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35] get_user_authid(id, AuthID, 34)
new vaultkey[64], vaultdata[256]
format(vaultkey, 63, "%s-Mod", AuthID)
format(vaultdata, 255, "#%i#%i#", PlayerLevel[id], PlayerXP[id])
nvault_get(g_vault, vaultkey, vaultdata, 255)
replace_all(vaultdata, 255, "#", " ")
new playerxp[32], playerlevel[32]
parse(vaultdata, playerxp, 31, playerlevel, 31)
PlayerXP[id] = str_to_num(playerxp)
PlayerLevel[id] = str_to_num(playerlevel)
return PLUGIN_CONTINUE
}
błędy:
Kod:
Error: Undefined symbol "id" on line 82
Warning: Expression has no effect on line 82
Warning: Expression has no effect on line 82
Warning: Expression has no effect on line 82
Warning: Expression has no effect on line 82
Error: Expected token: ";", but found ")" on line 82
Error: Invalid expression, assumed zero on line 82
Error: Too many error messages on one line on line 82
Could not locate output file C:\Program Files\AMX Mod X\amxxstudio\Untitled.amx (compile failed).
|
Offline
|
|
|
Alfons roku
Grupa: Global Moderator
Postów: 3,276
Zarejestrowany: May 2009
Skąd: na mnie patrzysz?
|
Odp: [Poradnik] Naliczanie XP -
20-02-10, 17:23
W evencie śmierci nie ma od razu pobranego "id" dlatego trzeba ja czytać przez read_data.
Nie wiem po co dałeś new attacker na samej górze jeżeli używasz go tylko w evencie śmierci i jeszcze nie pobierasz jego wartości przez read_data(1) dlatego ciągle wynosi 0.
Kod php:
/* Plugin generated by AMXX-Studio */
#include <amxmodx> #include <amxmisc> #include <nvault>
#define PLUGIN "XP MOD" #define VERSION "1.0" #define AUTHOR "Dakashi d(-.-)b"
#define MAXCLASSES 3
new PlayerXP[33], PlayerLevel[33], PlayerClass[33] new XP_Kill, XP_Knife, XP_Hs, SaveXP new g_vault new const CLASSES[MAXCLASSES] [] = { "Jumper", "Runner", "Ghost" }
new const LEVELS[11] = { 0, 5, 15, 30, 60, 120, 190, 270, 360, 460, 500 }
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("DeathMsg", "eDeath", "a") //sprawdza LVL po zabiciu kogos SaveXP = register_cvar("xpmod_savexp", "1") //Cvar odpowiadajacy za zapisywanie XP, 0 = nie zapisuje XP_Kill = register_cvar("xpmod_normal_kill", "1") //Ile XP sie dostaje za jedno zabicie XP_Knife = register_cvar("xpmod_knife_kill", "1") //Ile XP za zabicie nozem XP_Hs = register_cvar("xpmod_hs_kill", "2") //Ile XP za zabicie strzalem w glowe
g_vault = nvault_open("drmod")
register_clcmd("say /klasa", "ChangeClass") //Menu wyboru klasy register_clcmd("say_team /klasa", "ChangeClass") //Jak wyzej
register_clcmd("say /xp", "ShowXP") //Pokazuje ile gracz ma XP register_clcmd("say_team /xp", "ShowXP") //J/W
}
public eDeath() { new attacker = read_data(1) if(PlayerClass[attacker] == 0) return PLUGIN_CONTINUE
//new iVictim = read_data( 2 ) PO CO?! new headshot = read_data( 3 ) new clip, ammo, weapon = get_user_weapon(clip, ammo) PlayerXP[attacker] += get_pcvar_num(XP_Kill)
if(headshot) PlayerXP[attacker] += get_pcvar_num(XP_Hs) if(weapon == CSW_KNIFE) PlayerXP[attacker] += get_pcvar_num(XP_Knife) while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) { client_print(attacker, print_center, "[XPMOD]Gratulacje! Masz %i lvl $s!", PlayerLevel[attacker], CLASSES[PlayerClass[attacker]]) //Wiadomosc gratulacyjna PlayerLevel[attacker] += 1 //Dodaje LVL } ShowXP(attacker) SaveData(attacker) return PLUGIN_CONTINUE }
public ShowXP(id) { set_hudmessage(0, 120, 100, 0.75, 0.1, 0, 6.0, 15.0) show_hudmessage(id, "Twoja klasa: %s^nLVL: %i, EXP: %i", CLASSES[PlayerClass[id]], PlayerLevel[id], PlayerXP[id]) }
public ChangeClass(id) { new ClassMenu = menu_create("Menu klas:","ClassHandler") menu_additem(ClassMenu, "Jumper", "1", 0); menu_additem(ClassMenu, "Runner", "2", 0); menu_additem(ClassMenu, "Ghost", "3", 0); menu_setprop(ClassMenu, MPROP_EXIT, MEXIT_ALL); menu_display(id, ClassMenu, 0); return PLUGIN_CONTINUE }
public ClassHandler(id, ClassMenu, item) { if(item == MENU_EXIT) { menu_destroy(ClassMenu) } new szCommand[6], szName[64]; new acces, callback; menu_item_getinfo(ClassMenu, item, acces, szCommand, 5, szName, 63, callback); new i = str_to_num(szCommand) if(PlayerClass[id] != i) { client_print(id, print_chat, "[XPMOD]Juz jestes %s", CLASSES[PlayerClass[id]]) } else { client_print(id, print_chat, "[XPMOD]Jestes teraz %s", CLASSES[i]) } menu_destroy(ClassMenu) return PLUGIN_CONTINUE }
public client_connect(id) { if(get_pcvar_num(SaveXP) == 1) { LoadData(id) } }
public client_disconnect(id) { if(get_pcvar_num(SaveXP) == 1) //Jezeli XP jest zapisywany { SaveData(id) //Zapisuje Klase i EXP gracza } PlayerXP[id] = 0 PlayerLevel[id] = 0 PlayerClass[id] = 0 }
public SaveData(id) { new AuthID[35] get_user_authid(id, AuthID, 34) //Pobiera SteamID gracza new vaultkey[64], vaultdata[256] format(vaultkey, 63, "%s-Mod", AuthID) //Jak wyglada zapisywanie format(vaultdata, 255, "#%i#%i#", PlayerLevel[id], PlayerXP[id]) //LVL i XP w pliku nvault_set(g_vault, vaultkey, vaultdata) return PLUGIN_CONTINUE }
public LoadData(id) { new AuthID[35] get_user_authid(id, AuthID, 34) new vaultkey[64], vaultdata[256] format(vaultkey, 63, "%s-Mod", AuthID) format(vaultdata, 255, "#%i#%i#", PlayerLevel[id], PlayerXP[id]) nvault_get(g_vault, vaultkey, vaultdata, 255) replace_all(vaultdata, 255, "#", " ") new playerxp[32], playerlevel[32] parse(vaultdata, playerxp, 31, playerlevel, 31) PlayerXP[id] = str_to_num(playerxp) PlayerLevel[id] = str_to_num(playerlevel) return PLUGIN_CONTINUE }
Jeżeli Ci pomogłem ,kliknij  w prawym górnym rogu mojego posta.
Złamana ręka = 4 tygodnie przerwy...
Nudzi Ci się?
Kliknij tutaj i zagraj!
|
Offline
|
|
|
Bywalec
Grupa: Użytkownik
Postów: 73
Zarejestrowany: May 2008
Skąd: Krakow
Wiek: 15
|
Odp: [Poradnik] Naliczanie XP -
20-02-10, 19:47
Dzięki Mochi jesteś moim idolem
@EDIT
A czy mógłbys mi jeszcze powiedzieć jak dla każdej klasy dodać jakies atrybuty??
np: Runner:
LVL 1: +2% do szybkosci
LVL 2: +3% do szybkości
itd...
Jumper:
LVL 1: -1% gravity
LVL 2: -2% gravity
itd
A u ghosta że im większy lvl tym bardziej staje się niewidzialny ;)
Będę wdzięczny
Ostatnio edytowane przez dakashi : 20-02-10 - 19:53
|
Offline
|
|
|
Alfons roku
Grupa: Global Moderator
Postów: 3,276
Zarejestrowany: May 2009
Skąd: na mnie patrzysz?
|
Odp: [Poradnik] Naliczanie XP -
20-02-10, 19:58
Załóż oddzielny temat ten nie jest od tego.
Jeżeli Ci pomogłem ,kliknij  w prawym górnym rogu mojego posta.
Złamana ręka = 4 tygodnie przerwy...
Nudzi Ci się?
Kliknij tutaj i zagraj!
|
Offline
|
|
|
Bot
Grupa: Użytkownik
Postów: 1
Zarejestrowany: Apr 2010
Skąd: Częstochowa
Wiek: 18
|
Odp: [Poradnik] Naliczanie XP -
08-04-10, 23:12
Siema mam pytanie moglby ktos podac link do tego tworzenia menu sklepu bo nie dziala :/
Dziekuje z góry.
PS: Mam konto uktywnione
ale nie wiem czy uprawnienia ;P
|
Offline
|
|
|
Wygadany
Grupa: Użytkownik
Postów: 595
Zarejestrowany: Nov 2008
Status:
|
Odp: [Poradnik] Naliczanie XP -
12-04-10, 20:11
Poprawny kod by xPaw.
Kod php:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#define MAXCLASSES 5
#define PREFIX "Animal Mod"
new const CLASSES[MAXCLASSES][] = {
"None",
"Dog",
"Cat",
"Horse",
"Cow"
};
new const LEVELS[6] = {
100,
200,
400,
800,
1600,
3200
};
new PlayerXP[33], PlayerLevel[33], PlayerClass[33];
new gCvar_Kill, gCvar_Knife, gCvar_HS, gCvar_Enable, g_Vault;
public plugin_init() {
register_plugin("XP Mod", "1.0", "fxfighter");
register_event("DeathMsg", "eDeath", "a");
gCvar_Enable = register_cvar("xp_save", "1");
gCvar_Kill = register_cvar("xp_per_kill", "20");
gCvar_HS = register_cvar("xp_hs_bonus", "20");
gCvar_Knife = register_cvar("xp_Knife_bonus", "20");
g_Vault = nvault_open("animod");
register_concmd("amx_take_exp", "cmd_take_exp", ADMIN_KICK, "<target> <amount>");
register_concmd("amx_give_exp", "cmd_give_exp", ADMIN_KICK, "<target> <amount>");
register_clcmd("say /class", "ChangeClass");
register_clcmd("say_team /class", "ChangeClass");
register_clcmd("say /xp", "ShowHud");
register_clcmd("say_team /xp", "ShowHud");
}
public eDeath() {
new attacker = read_data( 1 );
new headshot = read_data( 3 );
new clip, ammo, weapon = get_user_weapon(attacker, clip, ammo);
PlayerXP[attacker] += get_pcvar_num(gCvar_Kill);
if(headshot)
PlayerXP[attacker] += get_pcvar_num(gCvar_HS);
if(weapon == CSW_KNIFE)
PlayerXP[attacker] += get_pcvar_num(gCvar_Knife);
while(PlayerXP[attacker] >= LEVELS[PlayerLevel[attacker]]) {
client_print(attacker, print_chat, "[%s] Congratulations! You are a level %i %s!", PREFIX, PlayerLevel[attacker], CLASSES[PlayerClass[attacker]]);
PlayerLevel[attacker] += 1;
}
ShowHud(attacker);
SaveData(attacker);
}
public ShowHud(id) {
set_hudmessage(255, 0, 0, 0.75, 0.01, 0, 6.0, 15.0);
show_hudmessage(id, "Level: %i^nXP: %i^nClass: %s", PlayerLevel[id], PlayerXP[id], CLASSES[PlayerClass[id]]);
}
public ChangeClass(id) {
new menu = menu_create("Class Menu" , "Class_Handle");
menu_additem(menu ,"Dog", "1" , 0);
menu_additem(menu ,"Cat", "2" , 0);
menu_additem(menu ,"Horse", "3" , 0);
menu_additem(menu ,"Cow", "4" , 0);
menu_setprop(menu , MPROP_EXIT , MEXIT_ALL);
menu_display(id , menu , 0);
return PLUGIN_CONTINUE;
}
public Class_Handle(id , menu , item) {
if(item == MENU_EXIT)
menu_destroy(menu);
new szCommand[6] , szName[64];
new access , callback;
menu_item_getinfo(menu , item , access , szCommand , 5 , szName , 63 , callback);
new i = str_to_num(szCommand);
if(PlayerClass[id] != i) {
PlayerClass[id] = i;
client_print(id,print_chat,"[%s] You are now a %s", PREFIX, CLASSES[i]);
} else
client_print(id,print_chat,"[%s] You are already a %s", PREFIX, CLASSES[i]);
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
public client_connect(id)
if(get_pcvar_num(gCvar_Enable) == 1)
LoadData(id);
public client_disconnect(id) {
if(get_pcvar_num(gCvar_Enable) == 1)
SaveData(id);
PlayerXP[id] = 0;
PlayerLevel[id] = 0;
PlayerClass[id] = 0;
}
public SaveData(id) {
new AuthID[35];
get_user_authid(id, AuthID, 34);
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-Mod", AuthID);
format(vaultdata, 255, "%i#%i#", PlayerXP[id], PlayerLevel[id]);
nvault_set(g_Vault, vaultkey, vaultdata);
return PLUGIN_CONTINUE;
}
public LoadData(id) {
new AuthID[35];
get_user_authid(id,AuthID,34);
new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-Mod", AuthID);
format(vaultdata, 255, "%i#%i#", PlayerXP[id], PlayerLevel[id]);
nvault_get(g_Vault, vaultkey, vaultdata,255);
replace_all(vaultdata, 255, "#", " ");
new playerxp[32], playerlevel[32];
parse(vaultdata, playerxp, 31, playerlevel, 31);
PlayerXP[id] = str_to_num(playerxp);
PlayerLevel[id] = str_to_num(playerlevel);
return PLUGIN_CONTINUE;
}
// Give/Take XP addaon by [X]-RayCat
public cmd_give_exp( id, level,cid ) {
if( ! cmd_access ( id, level, cid, 3 ) )
return PLUGIN_HANDLED;
new target[32], amount[21], reason[21];
read_argv( 1, target, 31 );
read_argv(2, amount, 20 );
read_argv( 3, reason, 20 );
new player = cmd_target( id, target, 8 );
if( ! player )
return PLUGIN_HANDLED;
new admin_name[32], player_name[32];
get_user_name( id, admin_name, 31 );
get_user_name( player, player_name, 31 );
new expnum = str_to_num( amount );
PlayerXP[player] += expnum;
switch( get_cvar_num ( "amx_show_activity" ) ) {
case 1: client_print( 0, print_chat, "ADMIN: gave %i points for %s.", expnum, player_name );
case 2: client_print( 0, print_chat, "ADMIN %s: gave %i points for %s.", admin_name, expnum, player_name );
}
client_print( player, print_chat, "[%s] You received %i points. (Total: %d)", PREFIX, expnum, PlayerXP[player] );
SaveData( id );
return PLUGIN_CONTINUE;
}
public cmd_take_exp( id, level,cid ) {
if( ! cmd_access ( id, level, cid, 3 ) )
return PLUGIN_HANDLED;
new target[32], amount[21], reason[21];
read_argv( 1, target, 31 );
read_argv( 2, amount, 20 );
read_argv( 3, reason, 20 );
new player = cmd_target( id, target, 8 );
if( ! player )
return PLUGIN_HANDLED;
new admin_name[32], player_name[32];
get_user_name( id, admin_name, 31 );
get_user_name( player, player_name, 31 );
new expnum = str_to_num( amount );
PlayerXP[player] -= expnum;
switch(get_cvar_num("amx_show_activity")){
case 1: client_print( 0, print_chat, "ADMIN: took %i points from %s.", expnum, player_name );
case 2: client_print( 0, print_chat, "ADMIN %s: took %i points from %s.", admin_name, expnum, player_name );
}
client_print( player, print_chat, "[%s] You lost %i points. (Total: %d)", PREFIX, expnum, PlayerXP[player] );
SaveData( id );
return PLUGIN_CONTINUE;
}
Bracia-Cs.pl
195.2.255.27:27321

EASYBLOCK + AUTORSKI XP MOD!
|
Offline
|
|
|
Nowy
Grupa: Użytkownik
Postów: 5
Zarejestrowany: Jul 2009
|
Odp: [Poradnik] Naliczanie XP -
17-07-10, 20:31
Mam pytanie jak zrobić aby przy zmienianiu klasy w trakcie rundy mieć nową klasę już w następnej rundzie a nie tej samej.
|
Offline
|
|
| Zwiększ popularność tego tematu dodając go na: |
|
| Narzędzia wątku |
|
|
| Wygląd |
Wygląd liniowy
|
Zasady postowania
|
Nie możesz zakładać nowych tematów
Nie możesz pisać wiadomości
Nie możesz dodawać załączników
Nie możesz edytować swoich postów
HTML kod jest Wył.
|
|
|
Languages translations supported by vBET 3.3.3 Powered by vBulletin® Version 3.8.5 Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0
Copyright © 2008-2009 CSCenter.PL
Wszelkie prawa zastrzeżone. Kopiowanie treści forum bez zgody administracji zabronione.
|