Hye its me again, with a new question, i am using tr0n's Questboard, right now i want there is 3 quest npc,
1. Repeatable Quest
2. Daily Quest
3. 1 Time Quest
i did try to make a copy by myself but did not work, as example i take a repeatable quest on the 1st line ( kill 100 poring ), but somehow it also count / register on daily quest (another NPC ) which is clearly another quest with different monster kill count. ( kill 100 Drops )
also would love to have chat room on top of the npc ( repeatable Quest / Daily Quest / 1 Time Quest ) and a recall command @quest so players can call npc script from any part of the map.
thanks.
script:
Spoiler
//===== 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]//============================================================
chry_fld,114,93,4 script RepeatQuestManager::Q_MGR 420,{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"+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<.@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 "Hello i can offer repeatable quest for you.";
next;switch(select((.collection)?"Daily Supply Quests":"",(.hunting)?"Hunting Quests":"","Exit")){case1: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;}case2: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 currentquest$,.@selection;
close;}else{
mes "[^FF7700Questboard^000000]";
mes "You don't have the required";
mes "level to do this quest.";
close;}case3:
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"));setZeny,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"));setZeny,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(strnpcinfo(3)!="Q_MGR") 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$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ 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$")+": ["+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,false;set.hunting,true;//Quest Delay (seconds)//24 hours = 86400 secondsset.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>,...);AddCollection"Daily Supply - 50 Awakening Potion",1,99,656,50,0,0,0,909,50,914,50;AddCollection"Daily Supply - 50 Berserk Potion",1,99,657,50,0,0,0,909,50,914,50;AddCollection"Daily Supply - 50 Concentration Potion",1,99,645,50,0,0,0,909,50,914,50;//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>,...);// Level 1 - 20AddHunting"Kill 100 poring",1,20,40020,1,2000,100,100,1002,100;AddHunting"Kill 100 Fabre",1,20,40020,1,2000,300,300,1007,100;AddHunting"Kill 100 Lunatic",1,20,40020,1,2000,600,600,1063,100;// Level 20 - 50AddHunting"Kill 100 Archer Skeleton",20,50,40020,1,2000,25000,25000,1016,100;AddHunting"Kill 100 Mummy",20,50,40020,1,2000,50000,50000,1041,100;AddHunting"Kill 100 Bongun",20,50,40020,1,2000,20000,20000,1188,100;// Level 30 - 70AddHunting"Kill 100 Orc Lady",30,70,40020,1,2000,40000,40000,1273,100;AddHunting"Kill 100 Geographer",30,70,40020,1,2000,150000,150000,1368,100;AddHunting"Kill 100 Bloody Butterfly",30,70,40020,1,2000,150000,150000,1408,100;// Level 70 - 99AddHunting"Kill 100 Hill Wind",70,99,40020,1,5000,150000,150000,1680,100;AddHunting"Kill 100 Ancient Mummy",70,99,40020,1,5000,500000,500000,1297,100;AddHunting"Kill 100 Siroma",70,99,40020,1,5000,150000,150000,1776,100;AddHunting"Kill 100 Anubis",70,99,40020,5,10000,2000000,2000000,1098,100;AddHunting"Kill 100 Abysmal Knight",70,99,40020,5,10000,845000,845000,1219,100;AddHunting"Kill 100 Kasa",70,99,40020,10,45000,4800000,4800000,1833,100;
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;}}//prontera,146,169,5 duplicate(Q_MGR) Quest Manager#prt 732 //payon,187,104,4 duplicate(Q_MGR) Quest Manager#pyn 732 //morocc,162,97,4 duplicate(Q_MGR) Quest Manager#mrc 732 //geffen,115,71,5 duplicate(Q_MGR) Quest Manager#gef 732 //alberta,29,238,5 duplicate(Q_MGR) Quest Manager#alb 732 //izlude,134,93,4 duplicate(Q_MGR) Quest Manager#izl 732//aldebaran,145,116,4 duplicate(Q_MGR) Quest Manager#ald 732
Question
Dolphin86
Hye its me again, with a new question, i am using tr0n's Questboard, right now i want there is 3 quest npc,
1. Repeatable Quest
2. Daily Quest
3. 1 Time Quest
i did try to make a copy by myself but did not work, as example i take a repeatable quest on the 1st line ( kill 100 poring ), but somehow it also count / register on daily quest (another NPC ) which is clearly another quest with different monster kill count. ( kill 100 Drops )
also would love to have chat room on top of the npc ( repeatable Quest / Daily Quest / 1 Time Quest ) and a recall command @quest so players can call npc script from any part of the map.
thanks.
script:
Link to comment
Share on other sites
0 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.