|
@@ -0,0 +1,300 @@
|
|
|
|
+//===== rAthena Script =======================================
|
|
|
|
+//= tr0n's Questboard
|
|
|
|
+//===== By: ==================================================
|
|
|
|
+//= tr0n
|
|
|
|
+//===== Current Version: =====================================
|
|
|
|
+//= 1.3.4
|
|
|
|
+//===== Compatible With: =====================================
|
|
|
|
+//= rAthena SVN
|
|
|
|
+//===== Description: =========================================
|
|
|
|
+//= Easily add collection and hunting quests.
|
|
|
|
+//===== Additional Comments: =================================
|
|
|
|
+// 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
|
|
|
|
+//============================================================
|
|
|
|
+
|
|
|
|
+prontera,129,215,5 script Questboard 857,{
|
|
|
|
+
|
|
|
|
+ if(c_run==1){
|
|
|
|
+ mes "[^FF7700Questboard^000000]";
|
|
|
|
+ mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
|
|
|
|
+ mes "--------------------------------";
|
|
|
|
+ for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); 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, 0;
|
|
|
|
+ close;
|
|
|
|
+ }
|
|
|
|
+ goto L_checkitems;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(h_run==1) {
|
|
|
|
+ mes "[^FF7700Questboard^000000]";
|
|
|
|
+ mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
|
|
|
|
+ mes "--------------------------------";
|
|
|
|
+ for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
|
|
|
|
+ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
|
|
|
|
+ mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+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 < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
|
|
|
|
+ set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
|
|
|
|
+ setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
|
|
|
|
+ }
|
|
|
|
+ set currentquest$, "";
|
|
|
|
+ set h_run, 0;
|
|
|
|
+ close;
|
|
|
|
+ }
|
|
|
|
+ goto L_checkmobs;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+L_questmenu:
|
|
|
|
+ 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$);
|
|
|
|
+ mes "[^FF7700Questboard^000000]";
|
|
|
|
+ mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
|
|
|
|
+ mes "--------------------------------";
|
|
|
|
+ for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); 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, 1;
|
|
|
|
+ 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$);
|
|
|
|
+ mes "[^FF7700Questboard^000000]";
|
|
|
|
+ mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
|
|
|
|
+ mes "--------------------------------";
|
|
|
|
+ for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
|
|
|
|
+ mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+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, 1;
|
|
|
|
+ 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:
|
|
|
|
+ for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
|
|
|
|
+ if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
|
|
|
|
+ set .@checkitem,.@checkitem+2;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
|
|
|
|
+ mes "[^FF7700Questboard^000000]";
|
|
|
|
+ mes "You don't have everything.";
|
|
|
|
+ close;
|
|
|
|
+ }
|
|
|
|
+ for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); 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+"]");
|
|
|
|
+ set currentquest$, "";
|
|
|
|
+ set c_run, 0;
|
|
|
|
+ close;
|
|
|
|
+
|
|
|
|
+L_checkmobs:
|
|
|
|
+ set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
|
|
|
|
+ for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); 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.";
|
|
|
|
+ for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); 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+"]");
|
|
|
|
+ set currentquest$, "";
|
|
|
|
+ set h_run, 0;
|
|
|
|
+ close;
|
|
|
|
+
|
|
|
|
+OnNPCKillEvent:
|
|
|
|
+ if(h_run!=1) end;
|
|
|
|
+ for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); 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+"]")) end;
|
|
|
|
+ setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
|
|
|
|
+ dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
|
|
|
|
+ end;
|
|
|
|
+ }
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+OnInit:
|
|
|
|
+
|
|
|
|
+ function AddCollection;
|
|
|
|
+ function AddHunting;
|
|
|
|
+
|
|
|
|
+ //Activate/Deactive quest categories here
|
|
|
|
+ set .collection, 1;
|
|
|
|
+ set .hunting, 1;
|
|
|
|
+
|
|
|
|
+ //Checks if quests are loaded (prevents out of index)
|
|
|
|
+ if(.questsloaded==1) end;
|
|
|
|
+ set .questsloaded, 1;
|
|
|
|
+
|
|
|
|
+ //Add Collection Quests here
|
|
|
|
+ //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
|
|
|
|
+ //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;
|
|
|
|
+ while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
|
|
|
|
+ set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
|
|
|
|
+ setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
|
|
|
|
+ setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
|
|
|
|
+ set .@argcount,.@argcount+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;
|
|
|
|
+ while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
|
|
|
|
+ set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
|
|
|
|
+ setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
|
|
|
|
+ setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
|
|
|
|
+ set .@argcount, .@argcount+2;
|
|
|
|
+ }
|
|
|
|
+ return;
|
|
|
|
+}
|
|
|
|
+}
|