Just wanting to seek help on how make multiple questboard? (Not Duplicate)
ex. Specific set of quest board for Payon Dungeon, Orc Dungeon and ETC..
What can I change on the script so I can have multiple questboards on every town or dungeon?
I tried changing couple of scripts by identifying them to each town but didn't succeed..
//===== 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,134,214,5 script [Alberta] Mission Board 4_BOARD3,{
if(c_run==true){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + albertaquest$ + "_collectionname$")+"^000000";
mes "--------------------------------";
set .@size, getarraysize(getd("."+ albertaquest$ + "_collectionitem"));
for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
mes "^FF0000"+getitemname(getd("."+albertaquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+albertaquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+albertaquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +albertaquest$+"_collectionprize"))?getitemname(getd("." +albertaquest$+"_collectionprize"))+" - "+getd("." +albertaquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +albertaquest$+"_collectionzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +albertaquest$+"_collectionexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +albertaquest$+"_collectionexp["+1+"]")+"^000000";
next;
if(select("Finish:Abort") == 2){
mes "[^FF7700Questboard^000000]";
mes "Quest aborted.";
set albertaquest$, "";
set c_run, false;
close;
}
goto L_checkitems;
}
if(h_run==true){
mes "[^FF7700Questboard^000000]";
mes "^0000FF"+getd("." + albertaquest$ + "_huntingname$")+"^000000";
mes "--------------------------------";
set .@size, getarraysize(getd("."+ albertaquest$ + "_huntingmob"));
for( set .@j, 0; .@j < .@size; set .@j,.@j+2){
set .@currentmob, getd("."+albertaquest$+"_huntingmob["+(.@j)+"]");
mes "^FF0000"+strmobinfo(1,getd("."+albertaquest$+"_huntingmob["+.@j+"]"))+" - "+getd(albertaquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+albertaquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
}
mes "--------------------------------";
mes "[Reward]";
mes "Item: ^0000FF"+((getd("." +albertaquest$+"_huntingprize"))?getitemname(getd("." +albertaquest$+"_huntingprize"))+" - "+getd("." +albertaquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
mes "Zeny: ^0000FF"+getd("." +albertaquest$+"_huntingzeny")+"^000000";
mes "Base EXP: ^0000FF"+getd("." +albertaquest$+"_huntingexp["+0+"]")+"^000000";
mes "Job EXP: ^0000FF"+getd("." +albertaquest$+"_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("."+albertaquest$+"_huntingmob["+(.@x-1)+"]");
setd(albertaquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
set albertaquest$, "";
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 albertaquest$, .@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"+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, true;
set albertaquest$, .@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("."+albertaquest$+"_collectionitem"));
for( set .@k,0; .@k < .@size; set .@k,.@k+2){
if(countitem(getd("."+albertaquest$+"_collectionitem["+.@k+"]"))>=getd("."+albertaquest$+"_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("."+albertaquest$+"_collectionitem["+.@delcount+"]"),getd("."+albertaquest$+"_collectionitem["+(.@delcount+1)+"]");
}
mes "[^FF7700Questboard^000000]";
mes "Congratulation! Here is your Reward.";
if(getd("." +albertaquest$+"_collectionprize")!=0) getitem(getd("." +albertaquest$+"_collectionprize"),getd("." +albertaquest$+"_collectionamount"));
set Zeny,Zeny+getd("." +albertaquest$+"_collectionzeny");
getexp getd("." +albertaquest$+"_collectionexp["+0+"]"),getd("." +albertaquest$+"_collectionexp["+1+"]");
setd(albertaquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
setd(albertaquest$ + "_collection_repeat"),true;
set albertaquest$, "";
set c_run, false;
close;
L_checkmobs:
set .@size, getarraysize(getd("."+albertaquest$+"_huntingmob"));
set .@goal, .@size/2;
for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
set .@currentmob, getd("."+albertaquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+albertaquest$+"_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("."+albertaquest$+"_huntingmob"));
for(set .@x, 1; .@x < .@size; set .@x,.@x+2){
set .@currentmob, getd("."+albertaquest$+"_huntingmob["+(.@x-1)+"]");
setd(albertaquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
}
if(getd("." +albertaquest$+"_huntingprize")!=0) getitem(getd("." +albertaquest$+"_huntingprize"),getd("." +albertaquest$+"_huntingamount"));
set Zeny, Zeny+getd("." +albertaquest$+"_huntingzeny");
getexp getd("." +albertaquest$+"_huntingexp["+0+"]"),getd("." +albertaquest$+"_huntingexp["+1+"]");
setd(albertaquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
setd(albertaquest$ + "_hunting_repeat"),true;
set albertaquest$, "";
set h_run, false;
close;
OnNPCKillEvent:
if(h_run!=true) end;
set .@size, getarraysize(getd("."+albertaquest$+"_huntingmob"));
for(set .@i, 1; .@i < .@size; set .@i,.@i+2){
if(killedrid==getd("."+albertaquest$+"_huntingmob["+(.@i-1)+"]")){
set .@currentmob, getd("."+albertaquest$+"_huntingmob["+(.@i-1)+"]");
if(getd(albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount")<getd("."+albertaquest$+"_huntingmob["+.@i+"]")){
setd(albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
dispbottom getd("."+albertaquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+albertaquest$+"_huntingmob["+.@i+"]")+")";
}
if(getcharid(1) != 0 && .party_support == true){
getmapxy(.@map1$,.@x1,.@y1);
set .@killerid, getcharid(3);
set .@albertaquest$, albertaquest$;
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 && .@albertaquest$ == getvar(albertaquest$, $@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(.@albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount"), $@partymembercid[.@j]);
set .@kill_goal,getd("."+.@albertaquest$+"_huntingmob["+.@i+"]");
if(.@kill_amt<.@kill_goal)
{
setd(.@albertaquest$+"_"+.@currentmob+"_"+.@i+"_killcount", .@kill_amt+1, $@partymembercid[.@j]);
dispbottom getd("."+.@albertaquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+(.@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("<QuestName>",<MinLvl>,<MaxLvl>,<Reward|ItemID>,<Reward|ItemAmount>,<ZenyReward>,<BaseEXP>,<JobEXP>,<ItemID>,<ItemAmount>,...);
//Add Hunting Quests here (You can add as many required mobs as you want)
//AddHunting("<QuestName>",<MinLvl>,<MaxLvl>,<Reward|ItemID>,<Reward|ItemAmount>,<ZenyReward>,<BaseEXP>,<JobEXP>,<MonsterID>,<MonsterAmount>,...);
AddHunting("EASY - 50 Hydra",1,99,512,1,0,100000,100000,1068,50);
AddHunting("EASY - 50 Poison Spore",1,99,512,1,0,100000,100000,1077,50);
AddHunting("EASY - 50 Kukre",1,99,512,1,0,100000,100000,1070,50);
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;
}
}
Question
Gouki
Hi all,
Just wanting to seek help on how make multiple questboard? (Not Duplicate)
ex. Specific set of quest board for Payon Dungeon, Orc Dungeon and ETC..
What can I change on the script so I can have multiple questboards on every town or dungeon?
I tried changing couple of scripts by identifying them to each town but didn't succeed..
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.