Zapisywanie messagemode
Blondyna
22.07.2013
Siemka
Stworzyłem menu + messagemode, wszystko działa lecz teraz chcę aby zablokować kolejny wybór z menu "Stworzenia bohatera" oraz zapisanie go.
"zablokować kolejny wybór z menu" - mam na myśli aby gracz mógł tylko raz stworzyć bohatera.
To kod:
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #include <colorchat> #include <engine> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "BO" new menuChoice[33]; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /menu", "mymenu"); register_clcmd("nazwa_bohatera", "nazwa_bohatera"); } public client_PreThink(id) { new nazwa[64]; if(is_user_alive(id)) { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "%s^nhaha", nazwa); } else { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!"); } return true; } public mymenu(id) { new MyMenu=menu_create("Jak sie przywitasz?","cbMyMenu"); menu_additem(MyMenu,"\dStworz \rBohatera"); menu_additem(MyMenu,"Czesc");//item=1 menu_display(id, MyMenu,0); return PLUGIN_HANDLED; } public cbMyMenu(id, menu, item) { switch(item) { case 0: { client_cmd(id, "messagemode nazwa_bohatera"); } case 1: { client_cmd(id, "say Czesc"); } } menu_destroy(menu); return PLUGIN_HANDLED; } public nazwa_bohatera(id) { new nazwa[64]; read_args(nazwa, charsmax(nazwa)); remove_quotes(nazwa); switch(menuChoice[id]) { case 0: { ColorChat(id, RED, "^x04[B-Mod]^x01 Gratuluje! Stworzyles swego ^x04 Bohatera^x01 o nazwie ^x03%s^x01!", nazwa); } case 1: { ColorChat(id, RED, "^x04[B-Mod]^x01 Gratuluje!! Stworzyles swa ^x04Bohaterke^x01 o nazwie ^x03%s^x01!", nazwa); } } }
Użytkownik Vesfper edytował ten post 22.07.2013 20:33
Blondyna
23.07.2013
Dzięki działa, a jak zrobić gdy w hud gdy gracz nie stworzy pisało:
"Bohater: Brak" a jak już stworzy tego bohatera to "Bohater: Nazwa" ?
Blondyna
25.07.2013
a jak pobrać to co gracz wpisze, chodzi mi dokładnie nazwę bohatera.
Użytkownik Vesfper edytował ten post 25.07.2013 10:05
Blondyna
26.07.2013
public client_PreThink(id) { new nazwa[64]; if(is_user_alive(id)) { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "Nazwa %s", gszCharacterName[id]); } else { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!"); } return true; }
K!113r
26.07.2013
public client_PreThink(id) { new nazwa[64]; if(is_user_alive(id)) { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "Nazwa %s", gszCharacterName[id][0] ? gszCharacterName[id] : "Brak"); } else { set_hudmessage(255, 0, 0, 0.02, 0.20); ShowSyncHudMsg(id, CreateHudSyncObj(), "Nie zyjesz!"); } return PLUGIN_CONTINUE; }
Blondyna
26.07.2013
Dzięki działa lecz gdy nastąpi zmiana mapy znowu trzeba tworzyć bohatera, jak zrobić aby się zapisywało .?
K!113r
26.07.2013
Poczytaj sobie o zapisach nVault, MySQL, do pliku i inne, i wybierz najbardziej odpowiedni do twoich celów.
Blondyna
27.07.2013
Wybrałem zapis nVault lecz mam problem, daje przykład jaki był w poradniku :
public load_frags(id) { new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] formatex(vaultkey,63,"%s-fragi",name) if(nvault_get(plik_vault,vaultkey,vaultdata,127)) { // pobieramy dane new fragitemp[16], deadstemp[16], nametemp[48]; parse(vaultdata, fragitemp, 15, deadstemp, 15, nametemp, 47) // wydobywamy z ciagu vaultdata nasze dane fragi[id]=str_to_num(fragitemp) // przypisujemy danym ich wartosci wczytane deads[id]=str_to_num(deadstemp) set_user_frags(id,fragi[id]) cs_set_user_deaths ( id, deads[id] ) copy(g_name[id], 47, nametemp); } return PLUGIN_CONTINUE } public save_frags(id) { fragi[id]+=get_user_frags(id) // zwiekszamy liczbe fragow i deadow o stan bierzacy deads[id]+=get_user_deaths(id) new name[48] get_user_name(id,name,47) new vaultkey[64],vaultdata[128] // 2 zmienne na klucz i dane ktore bedziemy zapisywac formatex(vaultkey,63,"%s-fragi",name) //formatujemy klucz czyli nasz identyfikator dostepu najlepiej zeby roznil sie on 1 czlonem od pozostalych formatex(vaultdata,127,"%d %d ^"%s^"", fragi[id], deads[id], name) // formatujemy dane nvault_set(plik_vault,vaultkey,vaultdata) // zapisujemy dane "pod" danym kluczem w pliku return PLUGIN_CONTINUE }
Lecz nie mam pojęcia jak przerobić go aby działał w mojej sytuacji.
Droso
27.07.2013
Możesz też użyć setinfo jak chcesz tylko nazwę bohatera zapamiętywać
set_user_info
oraz
get_user_info
Blondyna
27.07.2013
Możesz też użyć setinfo jak chcesz tylko nazwę bohatera zapamiętywać
set_user_info
oraz
get_user_info
A może napisać jak użyć tego .?
Blondyna
28.07.2013
Szukałem poradników i myślałem jak to zrobić, przypomniała mi się, że w diablo mod by stachu, został użyty zapis nazwy gildi,
Przerobiłem kod i wygląda on tak:
public ZapiszDane(id) { new vaultkey[64],vaultdata[256]; format(vaultkey,63,"%s-bohater", gszCharacterName[id]); nvault_set(g_vault,vaultkey,vaultdata); } public WczytajDane(id) { new vaultkey[64],vaultdata[256]; format(vaultkey,63,"%s-bohater", gszCharacterName[id]); nvault_get(g_vault,vaultkey,vaultdata,255); replace_all(vaultdata, 255, "#", " "); }
A oryginalny:
kod
public zapis_gildia(id,mode) { if(mode == 1){ get_user_name(id,nazwa_zalozycial[id],32) ilosc_czlonkow[id]=1 gildia_lvl[id]=1 } new vaultkey[64],vaultdata[256]; format(vaultkey,63,"%s-GTB",nazwa_gildi[id]); format(vaultdata,255,"%i %i %i ^"%s^" %i %i %i %i %i %i %i %i",gildia_lvl[id],gildia_exp[id],ilosc_czlonkow[id],nazwa_zalozycial[id],g_dmg[id],g_def[id],g_hp[id],g_spid[id],g_pkt[id],g_kam[id],g_drop[id],g_woj[id]) nvault_set(g_gildia,vaultkey,vaultdata); } public wczytaj_gildia(id) { new vaultkey[64],vaultdata[256]; format(vaultkey,63,"%s-GTB",nazwa_gildi[id]); nvault_get(g_gildia,vaultkey,vaultdata,255) new nz[32],gl[32],ge[32],ic[32],gd[32],gde[32],gh[32],gs[32],pkt[32],gh1[32],gs1[32],pkt1[32] parse(vaultdata, gl, 31, ge ,31, ic ,31, nz ,31, gd ,31, gde ,31, gh ,31, gs ,31, pkt ,31, gh1 ,31, gs1 ,31, pkt1 ,31) gildia_lvl[id] = str_to_num(gl); gildia_exp[id] = str_to_num(ge); ilosc_czlonkow[id] = str_to_num(ic); g_dmg[id] = str_to_num(gd); g_def[id] = str_to_num(gde); g_hp[id] = str_to_num(gh); g_spid[id] = str_to_num(gs); g_pkt[id] = str_to_num(pkt); g_kam[id] = str_to_num(gh1); g_drop[id] = str_to_num(gs1); g_woj[id] = str_to_num(pkt1); switch(g_spid[id]){ case 20 :g_spid[id]=35 case 40:g_spid[id]=70 case 60:g_spid[id]=105 case 80:g_spid[id]=140 } copy(nazwa_zalozycial[id], 31, nz); }
Lecz nie działa.