123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- //===== rAthena Script =======================================
- //= tr0n's Questboard
- //===== By: ==================================================
- //= tr0n
- //===== Current Version: =====================================
- //= 1.6.6
- //===== Description: =========================================
- //= Easily add collection and hunting quests.
- //===== Changelogs: ==========================================
- // 1.0.0 Release
- // 1.1.0 Added zeny reward
- // 1.2.0 Rewrote checkmob and killcounter
- // 1.3.1 Added level restriction
- // 1.3.4 Added Reward Item Amount
- // 1.4.4 Added Quest delay
- // 1.5.4 Added repeatable Quests
- // 1.6.4 Added party support
- // 1.6.5 Bug fixes for party support
- // 1.6.6 Bug fixes for delay time does not appear [mazvi]
- //============================================================
- prontera,129,215,5 script Questboard 4_BOARD3,{
- if(c_run==true){
- mes "[^FF7700Questboard^000000]";
- mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
- mes "--------------------------------";
- set .@size, getarraysize(getd("."+ currentquest$ + "_collectionitem"));
- for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
- mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
- }
- mes "--------------------------------";
- mes "[Reward]";
- mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
- mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000";
- mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000";
- mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000";
- next;
- if(select("Finish:Abort") == 2){
- mes "[^FF7700Questboard^000000]";
- mes "Quest aborted.";
- set currentquest$, "";
- set c_run, false;
- close;
- }
- goto L_checkitems;
- }
- if(h_run==true){
- mes "[^FF7700Questboard^000000]";
- mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
- mes "--------------------------------";
- set .@size, getarraysize(getd("."+ currentquest$ + "_huntingmob"));
- for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
- set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
- mes "^FF0000"+getmonsterinfo(getd("."+currentquest$+"_huntingmob["+.@j+"]"), MOB_NAME)+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
- }
- mes "--------------------------------";
- mes "[Reward]";
- mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
- mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000";
- mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000";
- mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000";
- next;
- if(select("Finish:Abort") == 2){
- mes "[^FF7700Questboard^000000]";
- mes "Quest aborted.";
- for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
- set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
- setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
- }
- set currentquest$, "";
- set h_run, false;
- close;
- }
- goto L_checkmobs;
- }
- mes "[^FF7700Questboard^000000]";
- mes "Select category:";
- next;
- switch(select((.collection)?"Collection Quests":"",
- (.hunting)?"Hunting Quests":"",
- "Exit")) {
- case 1:
- set .@collectmenu$, "";
- for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1){
- if (.@i) set .@collectmenu$,.@collectmenu$+":";
- set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
- }
- set .@selection,select(.@collectmenu$);
- if(.quest_repeat == true){
- if(gettimetick(2) < getd(.@selection + "_collection_delay")){
- mes "[^FF7700Questboard^000000]";
- mes "You have to wait ^0000FF"+Time2Str(getd(.@selection + "_collection_delay"))+"^000000 to do this quest again.";
- close;
- }
- }
- else{
- if(getd(.@selection + "_collection_repeat") == true){
- mes "[^FF7700Questboard^000000]";
- mes "You already did this quest.";
- mes "Please choose another one.";
- close;
- }
- }
- mes "[^FF7700Questboard^000000]";
- mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
- mes "--------------------------------";
- set .@size, getarraysize(getd("."+ .@selection + "_collectionitem"));
- for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
- mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
- }
- mes "--------------------------------";
- mes "[Reward]";
- mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
- mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
- mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
- mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
- next;
- if(select("Accept:Decline") == 2){
- close;
- }
- if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax")){
- mes "[^FF7700Questboard^000000]";
- mes "Quest accepted.";
- set c_run, true;
- set currentquest$, .@selection;
- close;
- }
- else{
- mes "[^FF7700Questboard^000000]";
- mes "You don't have the required";
- mes "level to do this quest.";
- close;
- }
- case 2:
- set .@huntmenu$, "";
- for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1){
- if (.@i) set .@huntmenu$,.@huntmenu$+":";
- set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
- }
- set .@selection,select(.@huntmenu$);
- if(.quest_repeat == true){
- if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
- mes "[^FF7700Questboard^000000]";
- mes "You have to wait ^0000FF"+Time2Str(getd(.@selection + "_hunting_delay"))+"^000000 to do this quest again.";
- close;
- }
- }
- else{
- if(getd(.@selection + "_hunting_repeat") == true){
- mes "[^FF7700Questboard^000000]";
- mes "You already did this quest.";
- mes "Please choose another one.";
- close;
- }
- }
- mes "[^FF7700Questboard^000000]";
- mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
- mes "--------------------------------";
- set .@size, getarraysize(getd("."+ .@selection + "_huntingmob"));
- for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
- mes "^FF0000"+getmonsterinfo(getd("."+.@selection+"_huntingmob["+.@j+"]"), MOB_NAME)+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
- }
- mes "--------------------------------";
- mes "[Reward]";
- mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
- mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
- mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
- mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
- next;
- if(select("Accept:Decline") == 2){
- close;
- }
- if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax")){
- mes "[^FF7700Questboard^000000]";
- mes "Quest accepted.";
- set h_run, true;
- set currentquest$, .@selection;
- close;
- }
- else{
- mes "[^FF7700Questboard^000000]";
- mes "You don't have the required";
- mes "level to do this quest.";
- close;
- }
- case 3:
- close;
- }
- L_checkitems:
- set .@size, getarraysize(getd("."+currentquest$+"_collectionitem"));
- for( set .@k,0; .@k < .@size; set .@k,.@k+2){
- if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
- set .@checkitem,.@checkitem+2;
- }
- }
- if(.@checkitem<.@size){
- mes "[^FF7700Questboard^000000]";
- mes "You don't have everything.";
- close;
- }
- for( set .@delcount,0; .@delcount < .@size; set .@delcount,.@delcount+2){
- delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
- }
- mes "[^FF7700Questboard^000000]";
- mes "Congratulation! Here is your Reward.";
- if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"));
- set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
- getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
- setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
- setd(currentquest$ + "_collection_repeat"),true;
- set currentquest$, "";
- set c_run, false;
- close;
- L_checkmobs:
- set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
- set .@goal, .@size/2;
- for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
- set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
- if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
- set .@checkmonster, .@checkmonster+1;
- if(.@checkmonster==.@goal){
- goto L_checkmobs2;
- }
- continue;
- }
- goto L_checkmobs2;
- }
- L_checkmobs2:
- if(.@checkmonster<.@goal){
- mes "[^FF7700Questboard^000000]";
- mes "You didn't kill everything.";
- close;
- }
- mes "[^FF7700Questboard^000000]";
- mes "Congratulation! Here is your Reward.";
- set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
- for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
- set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
- setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
- }
- if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"));
- set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
- getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
- setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
- setd(currentquest$ + "_hunting_repeat"),true;
- set currentquest$, "";
- set h_run, false;
- close;
- OnNPCKillEvent:
- if(h_run!=true) end;
- set .@size, getarraysize(getd("."+currentquest$+"_huntingmob"));
- for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
- if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
- set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
- if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")<getd("."+currentquest$+"_huntingmob["+.@i+"]")){
- setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
- dispbottom getd("."+currentquest$+"_huntingname$")+": ["+getmonsterinfo(.@currentmob, MOB_NAME)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
- }
- if(getcharid(1) != 0 && .party_support == true){
- getmapxy(.@map1$,.@x1,.@y1);
- set .@killerid, getcharid(3);
- set .@currentquest$, currentquest$;
- getpartymember getcharid(1),1;
- getpartymember getcharid(1),2;
- for(set .@j, 0; .@j < $@partymembercount; .@j++){
- if(isloggedin($@partymemberaid[.@j], $@partymembercid[.@j])){
- if(h_run==true && $@partymemberaid[.@j] != .@killerid && .@currentquest$ == getvar(currentquest$, $@partymembercid[.@j]) && readparam(HP, $@partymembercid[.@j]) > 0){
- getmapxy(.@map2$,.@x2,.@y2,BL_PC,rid2name($@partymemberaid[.@j]));
- if(.@map1$ == .@map2$ && distance(.@x1,.@y1,.@x2,.@y2) < .party_range){
- set .@kill_amt,getvar(getd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount"), $@partymembercid[.@j]);
- set .@kill_goal,getd("."+.@currentquest$+"_huntingmob["+.@i+"]");
- if(.@kill_amt<.@kill_goal)
- {
- setd(.@currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", .@kill_amt+1, $@partymembercid[.@j]);
- dispbottom getd("."+.@currentquest$+"_huntingname$")+": ["+getmonsterinfo(.@currentmob, MOB_NAME)+"] ("+(.@kill_amt+1)+"/"+.@kill_goal+")", 0xB6FF00, $@partymembercid[.@j];
- }
- }
- }
- }
- }
- }
- break;
- }
- }
- end;
- OnInit:
- function AddCollection;
- function AddHunting;
- //Activate/Deactivate quest categories (true/1 - activated, false/0 - deactivated)
- set .collection, true;
- set .hunting, true;
- //Quest Delay (seconds)
- //24 hours = 86400 seconds
- set .quest_delay, 0;
- //Activate/Deactivate repeatable quests (true/1 - activated, false/0 - deactivated)
- set .quest_repeat, true;
- //Activate/Deactivate party support (true/1 - activated, false/0 - deactivated)
- set .party_support, true;
- //Max range for party support (+- x & y coordinations)
- set .party_range, 25;
- //Checks if quests are loaded (prevents out of index)
- if(.questsloaded==true) end;
- set .questsloaded, true;
- //Add Collection Quests here (You can add as many required items as you want)
- //AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
- //Add Hunting Quests here (You can add as many required mobs as you want)
- //AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
- end;
- function AddCollection{
- set .collectionquestcount,.collectionquestcount+1;
- setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
- setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
- setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
- setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
- setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
- setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
- set .@argcount, 6;
- set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
- setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount));
- setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1));
- set .@argcount, .@argcount+2;
- set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
- while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
- setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
- setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
- set .@argcount,.@argcount+2;
- set .@size, .@size+2;
- }
- return;
- }
- function AddHunting{
- set .huntingquestcount,.huntingquestcount+1;
- setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
- setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
- setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
- setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
- setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
- setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
- set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
- set .@argcount, 6;
- setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
- setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1));
- set .@argcount, .@argcount+2;
- set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
- while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1){
- setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
- setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
- set .@argcount, .@argcount+2;
- set .@size, .@size+2;
- }
- return;
- }
- }
|