1.Przerobienie menu tak zeby mozna bylo wybierac klase i od razu zwierzaka ,wiecej dowiedczie sie z sma troche grzebalem.
2.Dodanie skilli dla tych zwierzat(klas) takich jak np redukcja obrazen,wieksze dmg,grawitacja moga byc jakies zaproponowane przez was
3.Chce to dodac do diablomoda a wszystko w nim mam w hudzie wiec dobrzebyloby zeby informacje o klasie expie i levelu byly napisane nad hp tak jak to bylo kiedys na diablo taki zloty lub pomaranczowy napis.
4.Zrobienie tak zeby zwierzeta znikaly po deadzie gracza ale od nastepnej rundy od razu sie pojawialy bez zadnego wybierania czy wpisywania czegos.
proszę o pomoc na pewno duzo osob by chcialo taki plugin wiec bylby ogolnie dostepny kazdy moze cos dodac od siebie do tego pluginu jezeli chce lub w ogóle przerobienie tego tak zeby mniej wiecej bylo jak napisalem.
5.Jezeli istnieje taka mozliwosc to zrobienie czegos takiego zeby zwierzaki atakowaly przeciwnikow i mialy np 300hp
Spoiler
#define VERSION "2.0"
#include <amxmodx>
#include <amxmisc>
#include <chr_engine>
#include <nvault>
#define PET_NUM 7
#define VAULT_EXPIREDAYS 30
enum _:eCvary {
XP_Kill = 1,
XP_Knife,
XP_Hs,
SaveXP
}
enum _:ePlayerInf {
PI_XP = 0,
PI_Level,
PI_Class
}
static const g_CLASSES[PET_NUM][32] =
{
"Headcrab",
"Rat",
"Bat",
"Frog",
"Floater",
"Cockroach",
"Hyper Bat"
}
static const pet_models[PET_NUM][32] =
{
"models/headcrab.mdl",
"models/bigrat.mdl",
"models/boid.mdl",
"models/chumtoad.mdl",
"models/floater.mdl",
"models/roach.mdl",
"models/stukabat.mdl"
}
new const g_LEVELS[] = { 0,164,516,1044,1716,2556,3612,4844,6220,7768 }
static const pet_idle[PET_NUM] =
{
0,
1,
0,
0,
0,
1,
13
}
static const Float:pet_idle_speed[PET_NUM] =
{
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
0.5
}
static const pet_run[PET_NUM] =
{
4,
4,
0,
5,
0,
0,
13
}
static const Float:pet_run_speed[PET_NUM] =
{
2.0,
3.0,
3.0,
0.75,
1.0,
1.0,
13.0
}
static const pet_die[PET_NUM] =
{
7,
7,
0,
12,
0,
0,
5
}
static const Float:pet_die_length[PET_NUM] =
{
2.4,
2.4,
0.1,
3.0,
0.1,
0.1,
3.0
}
static const Float:pet_minus_z_standing[PET_NUM] =
{
36.0,
36.0,
5.0,
36.0,
5.0,
36.0,
10.0
}
static const Float:pet_minus_z_crouching[PET_NUM] =
{
16.0,
16.0,
6.0,
16.0,
6.0,
16.0,
11.0
}
new pet[33]
new pettype[33]
new maxplayers
new g_vault, g_max_lvl, SyncHudObj;
new g_Cvary[eCvary];
new g_Player[33][ePlayerInf];
public plugin_init()
{
register_plugin("GHW Pet Followers",VERSION,"GHW_Chronic")
register_clcmd("say","say_hook")
register_clcmd("say_team","say_hook")
register_event("DeathMsg","DeathMsg","a")
register_forward(FM_Think,"FM_Think_hook")
register_clcmd("say /pet", "ChangeClass");
register_clcmd("say_team /pet", "ChangeClass");
register_clcmd("say /zwierzak", "ChangeClass");
register_clcmd("say_team /zwierzak", "ChangeClass");
register_clcmd("say /xp", "ShowHud");
register_clcmd("say_team /xp", "ShowHud");
g_Cvary[XP_Kill] = register_cvar("xpmod_xp_kill", "20");
g_Cvary[XP_Knife] = register_cvar("xpmod_xp_knife_bonus", "20");
g_Cvary[XP_Hs] = register_cvar("xpmod_xp_hs_bonus", "20");
g_Cvary[SaveXP] = register_cvar("xpmod_save_xp", "1");
register_event("DeathMsg", "eDeath", "a");
maxplayers = get_maxplayers()
register_dictionary("GHW_Pet_Followers.txt")
SyncHudObj = CreateHudSyncObj();
}
public plugin_cfg() {
g_vault = nvault_open("XpMod");
g_max_lvl = sizeof(g_LEVELS);
if(g_vault != INVALID_HANDLE)
nvault_prune(g_vault, 0, get_systime()-(86400*VAULT_EXPIREDAYS));
}
public plugin_precache()
{
for(new i=0;i<PET_NUM;i++) precache_model(pet_models[i])
}
public DeathMsg(id) handle_DeathMsg(read_data(2))
public handle_DeathMsg(id)
{
if(pet[id] && pev_valid(pet[id]))
{
set_pev(pet[id],pev_sequence,pet_die[pettype[id]])
set_pev(pet[id],pev_gaitsequence,pet_die[pettype[id]])
set_pev(pet[id],pev_framerate,1.0)
set_pev(pet[id],pev_nextthink,pet_die_length[pettype[id]] + 1.0)
set_task(pet_die_length[pettype[id]],"remove_pet",pet[id])
}
pet[id]=0
}
public remove_pet(ent) if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity,ent)
public say_hook(id)
{
new arg[32]
read_argv(1,arg,31)
if(equali(arg,"/stworek Headcrab")) pet_cmd_handle(id,0)
else if(equali(arg,"/stworek Rat")) pet_cmd_handle(id,1)
else if(equali(arg,"/stworek Bat")) pet_cmd_handle(id,2)
else if(equali(arg,"/stworek Frog")) pet_cmd_handle(id,3)
else if(equali(arg,"/stworek Floater")) pet_cmd_handle(id,4)
else if(equali(arg,"/stworek Cockroach")) pet_cmd_handle(id,5)
else if(equali(arg,"/stworek Hyper") || equali(arg,"/pet Hyper Bat")) pet_cmd_handle(id,6)
else if(containi(arg,"/**********")==0) pet_cmd_handle(id,random_num(0,PET_NUM-1))
else if(containi(arg,"/usun_stworka")==0)
{
handle_DeathMsg(id)
if(pet[id]) client_print(id,print_chat,"[AMXX] %L",id,"MSG_REMOVEPET")
else client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOREMOVEPET")
}
}
public pet_cmd_handle(id,num)
{
if(pet[id])
{
client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_HAVE")
}
else if(!is_user_alive(id))
{
client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_DEAD")
}
else
{
pet[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(pet[id],pev_classname,"GHW_Pet")
pettype[id] = num
engfunc(EngFunc_SetModel,pet[id],pet_models[pettype[id]])
new Float:origin[3]
pev(id,pev_origin,origin)
if(is_user_crouching(id)) origin[2] -= pet_minus_z_crouching[pettype[id]]
else origin[2] -= pet_minus_z_standing[pettype[id]]
set_pev(pet[id],pev_origin,origin)
set_pev(pet[id],pev_solid,SOLID_NOT)
set_pev(pet[id],pev_movetype,MOVETYPE_FLY)
set_pev(pet[id],pev_owner,33)
set_pev(pet[id],pev_nextthink,1.0)
set_pev(pet[id],pev_sequence,0)
set_pev(pet[id],pev_gaitsequence,0)
set_pev(pet[id],pev_framerate,1.0)
client_print(id,print_chat,"[AMXX] %L",id,"MSG_GIVEPET",g_CLASSES[pettype[id]])
}
}
public FM_Think_hook(ent)
{
for(new i=0;i<=maxplayers;i++)
{
if(ent==pet[i])
{
static Float:origin[3]
static Float:origin2[3]
static Float:velocity[3]
pev(ent,pev_origin,origin2)
get_offset_origin_body(i,Float:{50.0,0.0,0.0},origin)
if(is_user_crouching(i)) origin[2] -= pet_minus_z_crouching[pettype[i]]
else origin[2] -= pet_minus_z_standing[pettype[i]]
if(get_distance_f(origin,origin2)>300.0)
{
set_pev(ent,pev_origin,origin)
}
else if(get_distance_f(origin,origin2)>80.0)
{
get_speed_vector(origin2,origin,250.0,velocity)
set_pev(ent,pev_velocity,velocity)
if(pev(ent,pev_sequence)!=pet_run[pettype[i]] || pev(ent,pev_framerate)!=pet_run_speed[pettype[i]])
{
set_pev(ent,pev_sequence,pet_run[pettype[i]])
set_pev(ent,pev_gaitsequence,pet_run[pettype[i]])
set_pev(ent,pev_framerate,pet_run_speed[pettype[i]])
}
}
else if(get_distance_f(origin,origin2)<75.0)
{
if(pev(ent,pev_sequence)!=pet_idle[pettype[i]] || pev(ent,pev_framerate)!=pet_idle_speed[pettype[i]])
{
set_pev(ent,pev_sequence,pet_idle[pettype[i]])
set_pev(ent,pev_gaitsequence,pet_idle[pettype[i]])
set_pev(ent,pev_framerate,pet_idle_speed[pettype[i]])
}
set_pev(ent,pev_velocity,Float:{0.0,0.0,0.0})
}
pev(i,pev_origin,origin)
origin[2] = origin2[2]
entity_set_aim(ent,origin)
set_pev(ent,pev_nextthink,1.0)
break;
}
}
}
public eDeath() {
new id = read_data(2);
if(!is_user_connected(id))
return;
new attacker = read_data(1);
if(!is_user_connected(attacker) || attacker == id) // mozna tez dodac sprawdzanie druzyn
return;
new headshot = read_data(3);
new weaponname[32];
read_data(4, weaponname, 31);
if(equal(weaponname, "grenade")) {
format(weaponname, 31, "weapon_he%s", weaponname);
}
else if(!equal(weaponname, "weapon_", 7))
format(weaponname, 31, "weapon_%s", weaponname);
new weapon = get_weaponid(weaponname);
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Kill]);
if(headshot)
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Hs]);
if(weapon == CSW_KNIFE)
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Knife]);
new zmiana;
if(g_Player[attacker][PI_Level] < g_max_lvl) {
while(g_Player[attacker][PI_XP] >= g_LEVELS[g_Player[attacker][PI_Level]]) {
++g_Player[attacker][PI_Level];
zmiana = 1;
}
}
while(g_Player[attacker][PI_XP] < g_LEVELS[g_Player[attacker][PI_Level]-1]) {
--g_Player[attacker][PI_Level];
zmiana = -1;
}
if(zmiana == -1) {
client_print(attacker, print_chat, "Spadles do %i poziomu!", g_Player[attacker][PI_Level]);
}
else if(zmiana == 1) {
client_print(attacker, print_chat, "Awansowales do %i poziomu!", g_Player[attacker][PI_Level]);
}
if(zmiana) {
SaveData(attacker);
}
ShowHud(attacker);
}
public ShowHud(id) {
set_hudmessage(0, 255, 0, 0.80, 0.68, 0, 6.0, 12.0, 0.1, 0.5);
ShowSyncHudMsg(id, SyncHudObj, "Level: %i^nXP: %i^nZwierzak: %s", g_Player[id][PI_Level], g_Player[id][PI_XP], g_CLASSES[g_Player[id][PI_Class]]);
return PLUGIN_HANDLED;
}
public ChangeClass(id) {
new menu = menu_create("Wybierz Stworka", "MenuKlasHandle")
for(new i=1, ile = sizeof(g_CLASSES); i<ile; ++i)
menu_additem(menu, g_CLASSES[i]);
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public MenuKlasHandle(id, menu, item) {
if(item++ == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(g_Player[id][PI_Class] != item) {
SaveData(id);
g_Player[id][PI_Class] = item;
client_cmd(id, "say /stworek %s", g_CLASSES[item]);
LoadData(id);
}
else {
client_cmd(id, "say /stworek %s", g_CLASSES[item]);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public client_authorized(id) {
g_Player[id][PI_XP] = 1;
g_Player[id][PI_Level] = 1;
g_Player[id][PI_Class] = 1;
}
public client_disconnect(id) {
SaveData(id);
g_Player[id][PI_XP] = 1;
g_Player[id][PI_Level] = 1;
g_Player[id][PI_Class] = 1;
}
public SaveData(id) {
if(!get_pcvar_num(g_Cvary[SaveXP]) || g_vault == INVALID_HANDLE)
return;
if(!g_Player[id][PI_Class])
return;
new AuthID[32]; get_user_authid(id, AuthID, 31);
new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-%i-XpMod", AuthID, g_Player[id][PI_Class]);
format(vaultdata, 127, "%i %i", g_Player[id][PI_XP], g_Player[id][PI_Level]);
nvault_set(g_vault, vaultkey, vaultdata);
}
public LoadData(id) {
if(!get_pcvar_num(g_Cvary[SaveXP]) || g_vault == INVALID_HANDLE)
return;
new AuthID[32]; get_user_authid(id, AuthID, 31);
new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-%i-XpMod", AuthID, g_Player[id][PI_Class]);
if(nvault_get(g_vault, vaultkey, vaultdata, 127)) {
new playerxp[12], playerlevel[12];
parse(vaultdata, playerxp, 11, playerlevel, 11);
g_Player[id][PI_XP] = str_to_num(playerxp);
g_Player[id][PI_Level] = str_to_num(playerlevel);
nvault_touch(g_vault, vaultkey);
}
}
#include <amxmodx>
#include <amxmisc>
#include <chr_engine>
#include <nvault>
#define PET_NUM 7
#define VAULT_EXPIREDAYS 30
enum _:eCvary {
XP_Kill = 1,
XP_Knife,
XP_Hs,
SaveXP
}
enum _:ePlayerInf {
PI_XP = 0,
PI_Level,
PI_Class
}
static const g_CLASSES[PET_NUM][32] =
{
"Headcrab",
"Rat",
"Bat",
"Frog",
"Floater",
"Cockroach",
"Hyper Bat"
}
static const pet_models[PET_NUM][32] =
{
"models/headcrab.mdl",
"models/bigrat.mdl",
"models/boid.mdl",
"models/chumtoad.mdl",
"models/floater.mdl",
"models/roach.mdl",
"models/stukabat.mdl"
}
new const g_LEVELS[] = { 0,164,516,1044,1716,2556,3612,4844,6220,7768 }
static const pet_idle[PET_NUM] =
{
0,
1,
0,
0,
0,
1,
13
}
static const Float:pet_idle_speed[PET_NUM] =
{
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
0.5
}
static const pet_run[PET_NUM] =
{
4,
4,
0,
5,
0,
0,
13
}
static const Float:pet_run_speed[PET_NUM] =
{
2.0,
3.0,
3.0,
0.75,
1.0,
1.0,
13.0
}
static const pet_die[PET_NUM] =
{
7,
7,
0,
12,
0,
0,
5
}
static const Float:pet_die_length[PET_NUM] =
{
2.4,
2.4,
0.1,
3.0,
0.1,
0.1,
3.0
}
static const Float:pet_minus_z_standing[PET_NUM] =
{
36.0,
36.0,
5.0,
36.0,
5.0,
36.0,
10.0
}
static const Float:pet_minus_z_crouching[PET_NUM] =
{
16.0,
16.0,
6.0,
16.0,
6.0,
16.0,
11.0
}
new pet[33]
new pettype[33]
new maxplayers
new g_vault, g_max_lvl, SyncHudObj;
new g_Cvary[eCvary];
new g_Player[33][ePlayerInf];
public plugin_init()
{
register_plugin("GHW Pet Followers",VERSION,"GHW_Chronic")
register_clcmd("say","say_hook")
register_clcmd("say_team","say_hook")
register_event("DeathMsg","DeathMsg","a")
register_forward(FM_Think,"FM_Think_hook")
register_clcmd("say /pet", "ChangeClass");
register_clcmd("say_team /pet", "ChangeClass");
register_clcmd("say /zwierzak", "ChangeClass");
register_clcmd("say_team /zwierzak", "ChangeClass");
register_clcmd("say /xp", "ShowHud");
register_clcmd("say_team /xp", "ShowHud");
g_Cvary[XP_Kill] = register_cvar("xpmod_xp_kill", "20");
g_Cvary[XP_Knife] = register_cvar("xpmod_xp_knife_bonus", "20");
g_Cvary[XP_Hs] = register_cvar("xpmod_xp_hs_bonus", "20");
g_Cvary[SaveXP] = register_cvar("xpmod_save_xp", "1");
register_event("DeathMsg", "eDeath", "a");
maxplayers = get_maxplayers()
register_dictionary("GHW_Pet_Followers.txt")
SyncHudObj = CreateHudSyncObj();
}
public plugin_cfg() {
g_vault = nvault_open("XpMod");
g_max_lvl = sizeof(g_LEVELS);
if(g_vault != INVALID_HANDLE)
nvault_prune(g_vault, 0, get_systime()-(86400*VAULT_EXPIREDAYS));
}
public plugin_precache()
{
for(new i=0;i<PET_NUM;i++) precache_model(pet_models[i])
}
public DeathMsg(id) handle_DeathMsg(read_data(2))
public handle_DeathMsg(id)
{
if(pet[id] && pev_valid(pet[id]))
{
set_pev(pet[id],pev_sequence,pet_die[pettype[id]])
set_pev(pet[id],pev_gaitsequence,pet_die[pettype[id]])
set_pev(pet[id],pev_framerate,1.0)
set_pev(pet[id],pev_nextthink,pet_die_length[pettype[id]] + 1.0)
set_task(pet_die_length[pettype[id]],"remove_pet",pet[id])
}
pet[id]=0
}
public remove_pet(ent) if(pev_valid(ent)) engfunc(EngFunc_RemoveEntity,ent)
public say_hook(id)
{
new arg[32]
read_argv(1,arg,31)
if(equali(arg,"/stworek Headcrab")) pet_cmd_handle(id,0)
else if(equali(arg,"/stworek Rat")) pet_cmd_handle(id,1)
else if(equali(arg,"/stworek Bat")) pet_cmd_handle(id,2)
else if(equali(arg,"/stworek Frog")) pet_cmd_handle(id,3)
else if(equali(arg,"/stworek Floater")) pet_cmd_handle(id,4)
else if(equali(arg,"/stworek Cockroach")) pet_cmd_handle(id,5)
else if(equali(arg,"/stworek Hyper") || equali(arg,"/pet Hyper Bat")) pet_cmd_handle(id,6)
else if(containi(arg,"/**********")==0) pet_cmd_handle(id,random_num(0,PET_NUM-1))
else if(containi(arg,"/usun_stworka")==0)
{
handle_DeathMsg(id)
if(pet[id]) client_print(id,print_chat,"[AMXX] %L",id,"MSG_REMOVEPET")
else client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOREMOVEPET")
}
}
public pet_cmd_handle(id,num)
{
if(pet[id])
{
client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_HAVE")
}
else if(!is_user_alive(id))
{
client_print(id,print_chat,"[AMXX] %L",id,"MSG_NOGIVEPET_DEAD")
}
else
{
pet[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
set_pev(pet[id],pev_classname,"GHW_Pet")
pettype[id] = num
engfunc(EngFunc_SetModel,pet[id],pet_models[pettype[id]])
new Float:origin[3]
pev(id,pev_origin,origin)
if(is_user_crouching(id)) origin[2] -= pet_minus_z_crouching[pettype[id]]
else origin[2] -= pet_minus_z_standing[pettype[id]]
set_pev(pet[id],pev_origin,origin)
set_pev(pet[id],pev_solid,SOLID_NOT)
set_pev(pet[id],pev_movetype,MOVETYPE_FLY)
set_pev(pet[id],pev_owner,33)
set_pev(pet[id],pev_nextthink,1.0)
set_pev(pet[id],pev_sequence,0)
set_pev(pet[id],pev_gaitsequence,0)
set_pev(pet[id],pev_framerate,1.0)
client_print(id,print_chat,"[AMXX] %L",id,"MSG_GIVEPET",g_CLASSES[pettype[id]])
}
}
public FM_Think_hook(ent)
{
for(new i=0;i<=maxplayers;i++)
{
if(ent==pet[i])
{
static Float:origin[3]
static Float:origin2[3]
static Float:velocity[3]
pev(ent,pev_origin,origin2)
get_offset_origin_body(i,Float:{50.0,0.0,0.0},origin)
if(is_user_crouching(i)) origin[2] -= pet_minus_z_crouching[pettype[i]]
else origin[2] -= pet_minus_z_standing[pettype[i]]
if(get_distance_f(origin,origin2)>300.0)
{
set_pev(ent,pev_origin,origin)
}
else if(get_distance_f(origin,origin2)>80.0)
{
get_speed_vector(origin2,origin,250.0,velocity)
set_pev(ent,pev_velocity,velocity)
if(pev(ent,pev_sequence)!=pet_run[pettype[i]] || pev(ent,pev_framerate)!=pet_run_speed[pettype[i]])
{
set_pev(ent,pev_sequence,pet_run[pettype[i]])
set_pev(ent,pev_gaitsequence,pet_run[pettype[i]])
set_pev(ent,pev_framerate,pet_run_speed[pettype[i]])
}
}
else if(get_distance_f(origin,origin2)<75.0)
{
if(pev(ent,pev_sequence)!=pet_idle[pettype[i]] || pev(ent,pev_framerate)!=pet_idle_speed[pettype[i]])
{
set_pev(ent,pev_sequence,pet_idle[pettype[i]])
set_pev(ent,pev_gaitsequence,pet_idle[pettype[i]])
set_pev(ent,pev_framerate,pet_idle_speed[pettype[i]])
}
set_pev(ent,pev_velocity,Float:{0.0,0.0,0.0})
}
pev(i,pev_origin,origin)
origin[2] = origin2[2]
entity_set_aim(ent,origin)
set_pev(ent,pev_nextthink,1.0)
break;
}
}
}
public eDeath() {
new id = read_data(2);
if(!is_user_connected(id))
return;
new attacker = read_data(1);
if(!is_user_connected(attacker) || attacker == id) // mozna tez dodac sprawdzanie druzyn
return;
new headshot = read_data(3);
new weaponname[32];
read_data(4, weaponname, 31);
if(equal(weaponname, "grenade")) {
format(weaponname, 31, "weapon_he%s", weaponname);
}
else if(!equal(weaponname, "weapon_", 7))
format(weaponname, 31, "weapon_%s", weaponname);
new weapon = get_weaponid(weaponname);
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Kill]);
if(headshot)
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Hs]);
if(weapon == CSW_KNIFE)
g_Player[attacker][PI_XP] += get_pcvar_num(g_Cvary[XP_Knife]);
new zmiana;
if(g_Player[attacker][PI_Level] < g_max_lvl) {
while(g_Player[attacker][PI_XP] >= g_LEVELS[g_Player[attacker][PI_Level]]) {
++g_Player[attacker][PI_Level];
zmiana = 1;
}
}
while(g_Player[attacker][PI_XP] < g_LEVELS[g_Player[attacker][PI_Level]-1]) {
--g_Player[attacker][PI_Level];
zmiana = -1;
}
if(zmiana == -1) {
client_print(attacker, print_chat, "Spadles do %i poziomu!", g_Player[attacker][PI_Level]);
}
else if(zmiana == 1) {
client_print(attacker, print_chat, "Awansowales do %i poziomu!", g_Player[attacker][PI_Level]);
}
if(zmiana) {
SaveData(attacker);
}
ShowHud(attacker);
}
public ShowHud(id) {
set_hudmessage(0, 255, 0, 0.80, 0.68, 0, 6.0, 12.0, 0.1, 0.5);
ShowSyncHudMsg(id, SyncHudObj, "Level: %i^nXP: %i^nZwierzak: %s", g_Player[id][PI_Level], g_Player[id][PI_XP], g_CLASSES[g_Player[id][PI_Class]]);
return PLUGIN_HANDLED;
}
public ChangeClass(id) {
new menu = menu_create("Wybierz Stworka", "MenuKlasHandle")
for(new i=1, ile = sizeof(g_CLASSES); i<ile; ++i)
menu_additem(menu, g_CLASSES[i]);
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public MenuKlasHandle(id, menu, item) {
if(item++ == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(g_Player[id][PI_Class] != item) {
SaveData(id);
g_Player[id][PI_Class] = item;
client_cmd(id, "say /stworek %s", g_CLASSES[item]);
LoadData(id);
}
else {
client_cmd(id, "say /stworek %s", g_CLASSES[item]);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public client_authorized(id) {
g_Player[id][PI_XP] = 1;
g_Player[id][PI_Level] = 1;
g_Player[id][PI_Class] = 1;
}
public client_disconnect(id) {
SaveData(id);
g_Player[id][PI_XP] = 1;
g_Player[id][PI_Level] = 1;
g_Player[id][PI_Class] = 1;
}
public SaveData(id) {
if(!get_pcvar_num(g_Cvary[SaveXP]) || g_vault == INVALID_HANDLE)
return;
if(!g_Player[id][PI_Class])
return;
new AuthID[32]; get_user_authid(id, AuthID, 31);
new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-%i-XpMod", AuthID, g_Player[id][PI_Class]);
format(vaultdata, 127, "%i %i", g_Player[id][PI_XP], g_Player[id][PI_Level]);
nvault_set(g_vault, vaultkey, vaultdata);
}
public LoadData(id) {
if(!get_pcvar_num(g_Cvary[SaveXP]) || g_vault == INVALID_HANDLE)
return;
new AuthID[32]; get_user_authid(id, AuthID, 31);
new vaultkey[64], vaultdata[128];
format(vaultkey, 63, "%s-%i-XpMod", AuthID, g_Player[id][PI_Class]);
if(nvault_get(g_vault, vaultkey, vaultdata, 127)) {
new playerxp[12], playerlevel[12];
parse(vaultdata, playerxp, 11, playerlevel, 11);
g_Player[id][PI_XP] = str_to_num(playerxp);
g_Player[id][PI_Level] = str_to_num(playerlevel);
nvault_touch(g_vault, vaultkey);
}
}
Załączone pliki
-
Zwierzaki.sma 11,02 KB 20 Ilość pobrań
Zwierzaki.amxx
Użytkownik aaaaaa edytował ten post 19.05.2013 15:06