Dodawanie questów
DarkGL
18.05.2011
Jako że Onyke wydał swojego diablo mod'a w którym jest system questów wykonany prze zemnie na jego zlecenie chyba nie obrazi się jak dam tutorial jak dodać go do swojego diablo moda
zresztą i tak questy były dostępne na necie : P nawet stały się dość popularne
1.Powyżej plugin_init dodajemy
3.w dowolnym miejscu w kodzie dodajemy
4.w funkcji DeathMsg
w warunku
5.
dużo diablo modów dużo menów dlatego tylko przyklad
Wiem jestem cienki w pisaniu poradników : D
macie tutaj
Diablomod by 0nYk3 - AMXX.pl: Support AMX Mod X
już dodane questy możecie się wzorować na tym
zresztą i tak questy były dostępne na necie : P nawet stały się dość popularne
1.Powyżej plugin_init dodajemy
//questy //Autor DarkGL : ) new quest_gracza[33]; new ile_juz[33]; //przedzial , ile ,kogo , nagroda expa, vip 1 tak 0 nie new questy[][]={ {1,2,Ninja,500,0}, {1,3,Mag,1200,1}, {1,6,Zabojca,2000,0}, {2,6,Hunter,5000,0}, {2,15,Barbarzynca,15000,1}, {2,20,Paladyn,20000,1}, {3,65,Barbarzynca,150000,1}, {3,120,Paladyn,200000,1} } new vault_questy; new vault_questy2; //od , do , hp new prze[][]={ {1,50,20}, {51,80,40}, {81,140,60} } new prze_wybrany[33] new questy_info[][]={ "Zabij 2 Ninje (Nagroda 500 doswiadczenia)", "Zabij 3 Magow (Nagroda 1200 doswiadczenia)", "Zabij 6 Zabojcow (Nagroda 2000 doswiadczenia)", "Zabij 6 Lowcow (Nagroda 5000 doswiadczenia)", "Zabij 15 Barbarzyncow (Nagroda 15000 doswiadczenia)", "Zabij 20 Paladynow (Nagroda 20000 doswiadczenia)", "Zabij 65 Barbarzyncow (Nagroda 150000 doswiadczenia)", "Zabij 120 Paladynow (Nagroda 200000 doswiadczenia)" } new questy_zabil[][]={ "Ninjow", "Magow", "Zabojcow", "Lowcow", "Barbarzyncow", "Paladynow", "Barbarzyncow", "Paladynow" }2. w plugin_init dodajemy
vault_questy = nvault_open("Questy"); vault_questy2 = nvault_open("Questy2"); register_clcmd("say /questy","menu_questow") register_clcmd("say /quest","menu_questow")
3.w dowolnym miejscu w kodzie dodajemy
public menu_questow(id){ if(quest_gracza[id] == -1 || quest_gracza[id] == -2){ new menu = menu_create("Menu Questow","menu_questow_handle") new formats[128] for(new i = 0;i<sizeof prze;i++){ formatex(formats,127,"Questy od %d do %d poziomu",prze[i][0],prze[i][1]); menu_additem(menu,formats) } menu_display(id,menu,0) } else { client_print(id,print_chat,"Wykonaj najpierw poprzednie zadanie") } } public menu_questow_handle(id,menu,item){ if(item == MENU_EXIT){ menu_destroy(menu); return PLUGIN_CONTINUE; } if(player_lvl[id] < prze[item][0]){ client_print(id,print_chat,"Masz za maly level!"); menu_questow(id) menu_destroy(menu); return PLUGIN_CONTINUE; } new formats[128] formatex(formats,127,"Questy od %d do %d poziomu",prze[item][0],prze[item][1]); new menu2 = menu_create(formats,"menu_questow_handle2") for(new i = 0;i<sizeof(questy);i++){ if(questy[i][0] == item+1){ menu_additem(menu2,questy_info[i]); } } menu_setprop(menu2, MPROP_EXITNAME, "Wyjdz"); menu_setprop(menu2, MPROP_BACKNAME, "Poprzednia strona"); menu_setprop(menu2, MPROP_NEXTNAME, "Nastepna strona"); prze_wybrany[id] = item+1; menu_display(id,menu2) return PLUGIN_CONTINUE; } public zapisz_questa(id,quest){ new name[64]; get_user_name(id,name,63) strtolower(name) new key[64]; format(key,63,"questy-%i-%s-%i",player_class[id],name,quest); nvault_set(vault_questy,key,"1"); } public zapisz_aktualny_quest(id){ new name[64]; get_user_name(id,name,63) strtolower(name) new key[256]; format(key,255,"questy-%d-%s",player_class[id],name); new data[32] formatex(data,charsmax(data),"#%d#%d",quest_gracza[id]+1,ile_juz[id]); nvault_set(vault_questy2,key,data); } public wczytaj_aktualny_quest(id){ new name[64]; get_user_name(id,name,63) strtolower(name) new key[256]; format(key,255,"questy-%d-%s",player_class[id],name); new data[32]; nvault_get(vault_questy2,key,data,31); replace_all(data,31,"#"," "); new questt[32],ile[32] parse(data,questt,31,ile,31) ile_juz[id] = str_to_num(ile) return str_to_num(questt)-1 } public wczytaj_questa(id,quest){ new name[64]; get_user_name(id,name,63) strtolower(name) new key[64]; format(key,63,"questy-%i-%s-%i",player_class[id],name,quest); new data[64]; nvault_get(vault_questy,key,data,63); return str_to_num(data); } public menu_questow_handle2(id,menu,item){ if(item == MENU_EXIT){ menu_destroy(menu); return PLUGIN_CONTINUE; } new ile2 = 0; for(new i = 0;i<sizeof(questy);i++){ if(questy[i][0] != prze_wybrany[id]){ continue; } if(ile2 == item){ item = i; break; } ile2++; } if(questy[item][4] && !(get_user_flags(id) & ADMIN_LEVEL_H)){ client_print(id,print_chat,"Ten quest jest tylko dla vipow! Aby kupic vipa wejdz na forum amxx.pl"); menu_questow(id) menu_destroy(menu); return PLUGIN_CONTINUE; } if(wczytaj_questa(id,item)){ client_print(id,print_chat,"Wykonales juz to zadanie!"); menu_questow(id) menu_destroy(menu); return PLUGIN_CONTINUE; } quest_gracza[id] = item; ile_juz[id] = 0 zapisz_aktualny_quest(id) client_print(id,print_chat,"Wybrales zadanie: %s powodzenia !",questy_info[item]); quest_gracza[id] = wczytaj_aktualny_quest(id); menu_destroy(menu); return PLUGIN_CONTINUE; }
4.w funkcji DeathMsg
w warunku
if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid)) {dodajemy
if(quest_gracza[kid] != -1){ if(player_class[vid] == questy[quest_gracza[kid]][2]){ ile_juz[kid]++; zapisz_aktualny_quest(kid) } if(ile_juz[kid] == questy[quest_gracza[kid]][1]){ client_print(kid,print_chat,"Wykonales zadanie %s gratulacje otrzymujesz %i expa!",questy_info[quest_gracza[kid]],questy[quest_gracza[kid]][3]) zapisz_questa(kid,quest_gracza[kid]) Give_Xp(kid,questy[quest_gracza[kid]][3]); quest_gracza[kid] = -1; zapisz_aktualny_quest(kid) } else { client_print(kid,print_chat,"Zabiles %i/%i %s",ile_juz[kid],questy[quest_gracza[kid]][1],questy_zabil[quest_gracza[kid]]) } }tak to ma wyglądać
if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid)) { show_deadmessage(kid,vid,headshot,weaponname) create_itm(vid,0,"losowy item") award_kill(kid,vid) add_respawn_bonus(vid) add_bonus_explode(vid) add_barbarian_bonus(kid) //mana_gracza[kid]+=1 //mana_gracza[headshot]+=2 if (player_class[kid] == Barbarzynca) refill_ammo(kid) if (player_class[kid] == Griswold) refill_ammo(kid) if (player_class[kid] == Kowal) refill_ammo(kid) if (player_class[kid] == Demonolog) refill_ammo(kid) set_renderchange(kid) savexpcom(vid) if(quest_gracza[kid] != -1){ if(player_class[vid] == questy[quest_gracza[kid]][2]){ ile_juz[kid]++; zapisz_aktualny_quest(kid) } if(ile_juz[kid] == questy[quest_gracza[kid]][1]){ client_print(kid,print_chat,"Wykonales zadanie %s gratulacje otrzymujesz %i expa!",questy_info[quest_gracza[kid]],questy[quest_gracza[kid]][3]) zapisz_questa(kid,quest_gracza[kid]) Give_Xp(kid,questy[quest_gracza[kid]][3]); quest_gracza[kid] = -1; zapisz_aktualny_quest(kid) } else { client_print(kid,print_chat,"Zabiles %i/%i %s",ile_juz[kid],questy[quest_gracza[kid]][1],questy_zabil[quest_gracza[kid]]) } } }
5.
quest_gracza[id] = wczytaj_aktualny_quest(id);musimy to dodać po całym switch w funkcji handle menu wyboru klas
dużo diablo modów dużo menów dlatego tylko przyklad
public PokazMeni(id, key) { /* Menu: * Wybierz klase: * 1:Czarodziejka * 2:Druid * 3:Paladyn * 4:Zabojczyni * 5:Nekromanta * 6:Barbarzynca * 7:Ninja * 8:Amazonka * 0:Wstecz */ new lx[28] // <-- tutaj wpisz liczbę swoich klas + 1(none) g_haskit[id] = 0 c_shake[id]=0 c_damage[id]=0 c_jump[id]=0 c_mine[id]=0 c_respawn[id]=0 c_vampire[id]=0 zmiana_skinu[id]=0 switch(key) { case 0: { player_class[id] = Mag c_shake[id]=20 LoadXP(id, player_class[id]) } case 1: { player_class[id] = Mnich c_damage[id]=3 zmiana_skinu[id]=1 changeskin(id,0) LoadXP(id, player_class[id]) } case 2: { player_class[id] = Paladyn LoadXP(id, player_class[id]) } case 3: { player_class[id] = Zabojca c_jump[id]=1 c_mine[id]=2 LoadXP(id, player_class[id]) } case 4: { player_class[id] = Nekromanta g_haskit[id] = 1 c_respawn[id]=4 c_vampire[id]=random_num(1,3) LoadXP(id, player_class[id]) } case 5: { player_class[id] = Barbarzynca LoadXP(id, player_class[id]) } case 6: { player_class[id] = Ninja LoadXP(id, player_class[id]) } case 7: { player_class[id] = Hunter g_GrenadeTrap[id] = 1 LoadXP(id, player_class[id]) } case 9: { select_class(id,lx) } } CurWeapon(id) quest_gracza[id] = wczytaj_aktualny_quest(id); give_knife(id) return PLUGIN_HANDLED }
Wiem jestem cienki w pisaniu poradników : D
macie tutaj
Diablomod by 0nYk3 - AMXX.pl: Support AMX Mod X
już dodane questy możecie się wzorować na tym
sebul
18.05.2011
Na dwa razy zapisywanie i wczytywanie? Do czego służy "zapisz_questa" czy też "wczytaj_questa", bo przyglądam się i na razie jeszcze nie zauważyłem...
Miałem sam wyciągać te questy z innego moda (ktoś już wcześniej wrzucił ), ale skoro jest poradnik, to dla mnie nawet lepiej ;]
Użytkownik sebul edytował ten post 18.05.2011 22:26
Miałem sam wyciągać te questy z innego moda (ktoś już wcześniej wrzucił ), ale skoro jest poradnik, to dla mnie nawet lepiej ;]
Użytkownik sebul edytował ten post 18.05.2011 22:26
DarkGL
18.05.2011
wystarczy spojrzeć w kod późno jest nie chce mi się tłumaczyć
ale
zapisywanie /wczytywanie czy quest został zrobiony
ale
zapisywanie /wczytywanie czy quest został zrobiony
sebul
18.05.2011
A no późno i właśnie nie zauważyłem... Może lepiej by było zapisywać to w jednym pliku nvault? Czy to nie ma znaczącej różnicy?
DarkGL
18.05.2011
hmm możesz sprawdzić ale ostatnio nvault głupiało jak używałem zapisu do jednego pliku różnych kluczy
Drewno. 19.05.2011
Bardzo dobre,ale Same zadania typu "Zabij" to troche za latwo.Mozna dodac np. znajdz jakis item,lub Podłoz 4 razy pake albo znajdz (to bylby nowy item) cos tam 0/4 itd. albo zarob iles tam kasy,wbij takie,a takie staty
A oprocz nagrod ze doswiadczenie,dostawaloby sie +ile do dodatkowych stat,zlota itd..
Taka moja opinia,ale dobrze,ze chociaz jest:P
A oprocz nagrod ze doswiadczenie,dostawaloby sie +ile do dodatkowych stat,zlota itd..
Taka moja opinia,ale dobrze,ze chociaz jest:P
sebul
19.05.2011
A co to za problem samemu dodać? Jak już jest podany schemat tego jak te questy wyglądają, to dodanie innych zadaniem nie powinno sprawić większego problemu.Bardzo dobre,ale Same zadania typu "Zabij" to troche za latwo.Mozna dodac np. znajdz jakis item,lub Podłoz 4 razy pake albo znajdz (to bylby nowy item) cos tam 0/4 itd. albo zarob iles tam kasy,wbij takie,a takie staty
A oprocz nagrod ze doswiadczenie,dostawaloby sie +ile do dodatkowych stat,zlota itd..
Taka moja opinia,ale dobrze,ze chociaz jest:P
::Gogiel::
19.05.2011
Właśnie chciałem napisać tutka bo jakiś czas temu znalazłem plugin z gotowymi questami. A jak znalazłem to pomyślałem niech inni też mają :0
Ale dzięki przynajmniej sprawdziłem czy wszystko dobrze mam u siebie ;0
Leci PLUSSS
Ale dzięki przynajmniej sprawdziłem czy wszystko dobrze mam u siebie ;0
Leci PLUSSS
::Gogiel::
19.05.2011
chyba mu chodziło o dalej i na drugiej stronie np zamiast zabij to podłóż pake x razy znajdź vipa x razy zabij 10 wrogów itp
Muzzi
19.05.2011
@UP Może i masz troszkę racji ale można to przerobić i robić questy nie tylko na zabijanie.
Jakimś Cudem ja to już mam
Ale i tak plus bo tutek jak zawsze słaby;d
Jakimś Cudem ja to już mam
Ale i tak plus bo tutek jak zawsze słaby;d
Kicku
21.05.2011
Poradnik nie taki zly. Łap Plusika
Wczoraj wszystko sie kompilowalo a dzis jak dodalem kilka mocy do klas:
FEWFW3F.sma(448) : error 001: expected token: "}", but found "-string-"
FEWFW3F.sma(586) : error 017: undefined symbol "nvault_open"
FEWFW3F.sma(587) : warning 217: loose indentation
FEWFW3F.sma(587) : error 017: undefined symbol "nvault_open"
FEWFW3F.sma(591) : warning 217: loose indentation
FEWFW3F.sma(8431) : error 017: undefined symbol "nvault_set"
FEWFW3F.sma(8442) : error 017: undefined symbol "nvault_set"
FEWFW3F.sma(8452) : error 017: undefined symbol "nvault_get"
FEWFW3F.sma(8467) : error 017: undefined symbol "nvault_get"
FEWFW3F.sma(9228) : error 010: invalid function or declaration
FEWFW3F.sma(9228) : warning 204: symbol is assigned a value that is never used: "vault_questy"
FEWFW3F.sma(9228) : warning 204: symbol is assigned a value that is never used: "vault_questy2"
co zrobic?
Użytkownik Kicku edytował ten post 21.05.2011 09:05
Wczoraj wszystko sie kompilowalo a dzis jak dodalem kilka mocy do klas:
FEWFW3F.sma(448) : error 001: expected token: "}", but found "-string-"
FEWFW3F.sma(586) : error 017: undefined symbol "nvault_open"
FEWFW3F.sma(587) : warning 217: loose indentation
FEWFW3F.sma(587) : error 017: undefined symbol "nvault_open"
FEWFW3F.sma(591) : warning 217: loose indentation
FEWFW3F.sma(8431) : error 017: undefined symbol "nvault_set"
FEWFW3F.sma(8442) : error 017: undefined symbol "nvault_set"
FEWFW3F.sma(8452) : error 017: undefined symbol "nvault_get"
FEWFW3F.sma(8467) : error 017: undefined symbol "nvault_get"
FEWFW3F.sma(9228) : error 010: invalid function or declaration
FEWFW3F.sma(9228) : warning 204: symbol is assigned a value that is never used: "vault_questy"
FEWFW3F.sma(9228) : warning 204: symbol is assigned a value that is never used: "vault_questy2"
co zrobic?
Użytkownik Kicku edytował ten post 21.05.2011 09:05
Aard
21.05.2011
pod
dodaj
i dodaj
i zadziała
@Dalinor
wiem ;d błąd przy pisaniu
Użytkownik Aard edytował ten post 21.05.2011 09:48
#include <hamsandwich>
dodaj
#include <xs>
i dodaj
#include <nvault>
i zadziała
@Dalinor
wiem ;d błąd przy pisaniu
Użytkownik Aard edytował ten post 21.05.2011 09:48
Kicku
21.05.2011
Po dodaniu #include <nvalut>
wfwefwe.sma(36) : fatal error 100: cannot read from file: "nvalut"
wfwefwe.sma(36) : fatal error 100: cannot read from file: "nvalut"