questboard.txt 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. //===== rAthena Script =======================================
  2. //= tr0n's Questboard
  3. //===== By: ==================================================
  4. //= tr0n
  5. //===== Current Version: =====================================
  6. //= 1.4.4
  7. //===== Compatible With: =====================================
  8. //= rAthena Project
  9. //===== Description: =========================================
  10. //= Easily add collection and hunting quests.
  11. //===== Additional Comments: =================================
  12. // 1.0.0 Release
  13. // 1.1.0 Added zeny reward
  14. // 1.2.0 Rewrote checkmob and killcounter
  15. // 1.3.1 Added level restriction
  16. // 1.3.4 Added Reward Item Amount
  17. // 1.4.4 Added Quest delay
  18. //============================================================
  19. prontera,129,215,5 script Questboard 857,{
  20. if(c_run==1){
  21. mes "[^FF7700Questboard^000000]";
  22. mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
  23. mes "--------------------------------";
  24. for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
  25. mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
  26. }
  27. mes "--------------------------------";
  28. mes "[Reward]";
  29. mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
  30. mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000";
  31. mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000";
  32. mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000";
  33. next;
  34. if(select("Finish:Abort") == 2){
  35. mes "[^FF7700Questboard^000000]";
  36. mes "Quest aborted.";
  37. set currentquest$, "";
  38. set c_run, 0;
  39. close;
  40. }
  41. goto L_checkitems;
  42. }
  43. if(h_run==1){
  44. mes "[^FF7700Questboard^000000]";
  45. mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
  46. mes "--------------------------------";
  47. for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
  48. set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
  49. mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
  50. }
  51. mes "--------------------------------";
  52. mes "[Reward]";
  53. mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
  54. mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000";
  55. mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000";
  56. mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000";
  57. next;
  58. if(select("Finish:Abort") == 2){
  59. mes "[^FF7700Questboard^000000]";
  60. mes "Quest aborted.";
  61. for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
  62. set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
  63. setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
  64. }
  65. set currentquest$, "";
  66. set h_run, 0;
  67. close;
  68. }
  69. goto L_checkmobs;
  70. }
  71. L_questmenu:
  72. mes "[^FF7700Questboard^000000]";
  73. mes "Select category:";
  74. next;
  75. switch(select((.collection)?"Collection Quests":"",
  76. (.hunting)?"Hunting Quests":"",
  77. "Exit")) {
  78. case 1:
  79. set .@collectmenu$, "";
  80. for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
  81. if (.@i) set .@collectmenu$,.@collectmenu$+":";
  82. set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
  83. }
  84. set .@selection,select(.@collectmenu$);
  85. if(gettimetick(2) < getd(.@selection + "_collection_delay")){
  86. set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
  87. mes "[^FF7700Questboard^000000]";
  88. if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
  89. if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
  90. mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
  91. close;
  92. }
  93. mes "[^FF7700Questboard^000000]";
  94. mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
  95. mes "--------------------------------";
  96. for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
  97. mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
  98. }
  99. mes "--------------------------------";
  100. mes "[Reward]";
  101. mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
  102. mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
  103. mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
  104. mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
  105. next;
  106. if(select("Accept:Decline") == 2){
  107. close;
  108. }
  109. if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
  110. {
  111. mes "[^FF7700Questboard^000000]";
  112. mes "Quest accepted.";
  113. set c_run, 1;
  114. set currentquest$, .@selection;
  115. close;
  116. }
  117. else
  118. {
  119. mes "[^FF7700Questboard^000000]";
  120. mes "You don't have the required";
  121. mes "level to do this quest.";
  122. close;
  123. }
  124. case 2:
  125. set .@huntmenu$, "";
  126. for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
  127. if (.@i) set .@huntmenu$,.@huntmenu$+":";
  128. set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
  129. }
  130. set .@selection,select(.@huntmenu$);
  131. if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
  132. set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
  133. mes "[^FF7700Questboard^000000]";
  134. if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
  135. if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
  136. mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
  137. close;
  138. }
  139. mes "[^FF7700Questboard^000000]";
  140. mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
  141. mes "--------------------------------";
  142. for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
  143. mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
  144. }
  145. mes "--------------------------------";
  146. mes "[Reward]";
  147. mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
  148. mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
  149. mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
  150. mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
  151. next;
  152. if(select("Accept:Decline") == 2){
  153. close;
  154. }
  155. if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
  156. {
  157. mes "[^FF7700Questboard^000000]";
  158. mes "Quest accepted.";
  159. set h_run, 1;
  160. set currentquest$, .@selection;
  161. close;
  162. }
  163. else
  164. {
  165. mes "[^FF7700Questboard^000000]";
  166. mes "You don't have the required";
  167. mes "level to do this quest.";
  168. close;
  169. }
  170. case 3:
  171. close;
  172. }
  173. L_checkitems:
  174. for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
  175. if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
  176. set .@checkitem,.@checkitem+2;
  177. }
  178. }
  179. if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
  180. mes "[^FF7700Questboard^000000]";
  181. mes "You don't have everything.";
  182. close;
  183. }
  184. for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
  185. delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
  186. }
  187. mes "[^FF7700Questboard^000000]";
  188. mes "Congratulation! Here is your Reward.";
  189. if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"));
  190. set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
  191. getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
  192. setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
  193. set currentquest$, "";
  194. set c_run, 0;
  195. close;
  196. L_checkmobs:
  197. set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
  198. for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
  199. set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
  200. if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
  201. set .@checkmonster, .@checkmonster+1;
  202. if(.@checkmonster==.@goal){
  203. goto L_checkmobs2;
  204. }
  205. continue;
  206. }
  207. goto L_checkmobs2;
  208. }
  209. L_checkmobs2:
  210. if(.@checkmonster<.@goal){
  211. mes "[^FF7700Questboard^000000]";
  212. mes "You didn't kill everything.";
  213. close;
  214. }
  215. mes "[^FF7700Questboard^000000]";
  216. mes "Congratulation! Here is your Reward.";
  217. for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
  218. set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
  219. setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
  220. }
  221. if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"));
  222. set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
  223. getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
  224. setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
  225. set currentquest$, "";
  226. set h_run, 0;
  227. close;
  228. OnNPCKillEvent:
  229. if(h_run!=1) end;
  230. for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
  231. if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
  232. set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
  233. if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
  234. setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
  235. dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
  236. end;
  237. }
  238. continue;
  239. }
  240. end;
  241. OnInit:
  242. function AddCollection;
  243. function AddHunting;
  244. //Activate/Deactive quest categories here
  245. set .collection, 1;
  246. set .hunting, 1;
  247. //Quest Delay (seconds)
  248. //24 hours = 86400 seconds
  249. set .quest_delay, 0;
  250. //Checks if quests are loaded (prevents out of index)
  251. if(.questsloaded==1) end;
  252. set .questsloaded, 1;
  253. //Add Collection Quests here
  254. //AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
  255. //Add Hunting Quests here
  256. //AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
  257. end;
  258. function AddCollection {
  259. set .collectionquestcount,.collectionquestcount+1;
  260. setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
  261. setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
  262. setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
  263. setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
  264. setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
  265. setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
  266. set .@argcount, 6;
  267. set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
  268. setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount));
  269. setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1));
  270. set .@argcount, .@argcount+2;
  271. while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
  272. set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
  273. setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
  274. setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
  275. set .@argcount,.@argcount+2;
  276. }
  277. return;
  278. }
  279. function AddHunting {
  280. set .huntingquestcount,.huntingquestcount+1;
  281. setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
  282. setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
  283. setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
  284. setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
  285. setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
  286. setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
  287. set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
  288. set .@argcount, 6;
  289. setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
  290. setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1));
  291. set .@argcount, .@argcount+2;
  292. while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
  293. set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
  294. setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
  295. setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
  296. set .@argcount, .@argcount+2;
  297. }
  298. return;
  299. }
  300. }