Advertisement
dagiccross

Weight Check & Abort Confirmation Added

Oct 4th, 2014
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.26 KB | None | 0 0
  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. // 1.4.5 Added Quest Abort Confirmation, Weight-Check for Rewards [Fixed By: Talon]
  19. //============================================================
  20.  
  21. prontera,143,178,7  script  Questboard  857,{
  22.        
  23.     if(c_run==1){
  24.         mes "[^FF7700Questboard^000000]";
  25.         mes "^0000FF"+getd("." + currentquest$ + "_collectionname$")+"^000000";
  26.         mes "--------------------------------";
  27.         for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_collectionitem")); set .@j,.@j+2) {
  28.             mes "^FF0000"+getitemname(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+" - "+countitem(getd("."+currentquest$+"_collectionitem["+.@j+"]"))+"/"+getd("."+currentquest$+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
  29.         }
  30.         mes "--------------------------------";
  31.         mes "[Reward]";
  32.         mes "Item: ^0000FF"+((getd("." +currentquest$+"_collectionprize"))?getitemname(getd("." +currentquest$+"_collectionprize"))+" - "+getd("." +currentquest$+"_collectionamount")+" ea.^000000":"Nothing^000000");
  33.         mes "Zeny: ^0000FF"+getd("." +currentquest$+"_collectionzeny")+"^000000";
  34.         mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+0+"]")+"^000000";
  35.         mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_collectionexp["+1+"]")+"^000000";
  36.         next;
  37.         if(select("Finish:Abort") == 2){
  38.             mes "[^FF7700Questboard^000000]";
  39.             mes "Quest aborted.";
  40.             set currentquest$, "";
  41.             set c_run, 0;
  42.             next;
  43.             mes "Feel free to come again";
  44.             close;
  45.         }
  46.         goto L_checkitems;
  47.     }
  48.    
  49.     if(h_run==1){
  50.         mes "[^FF7700Questboard^000000]";
  51.         mes "^0000FF"+getd("." + currentquest$ + "_huntingname$")+"^000000";
  52.         mes "--------------------------------";
  53.         for( set .@j, 0; .@j < getarraysize(getd("."+ currentquest$ + "_huntingmob")); set .@j,.@j+2) {
  54.             set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@j)+"]");
  55.             mes "^FF0000"+strmobinfo(1,getd("."+currentquest$+"_huntingmob["+.@j+"]"))+" - "+getd(currentquest$+"_"+.@currentmob+"_"+(.@j+1)+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
  56.         }
  57.         mes "--------------------------------";
  58.         mes "[Reward]";
  59.         mes "Item: ^0000FF"+((getd("." +currentquest$+"_huntingprize"))?getitemname(getd("." +currentquest$+"_huntingprize"))+" - "+getd("." +currentquest$+"_huntingamount")+" ea.^000000":"Nothing^000000");
  60.         mes "Zeny: ^0000FF"+getd("." +currentquest$+"_huntingzeny")+"^000000";
  61.         mes "Base EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+0+"]")+"^000000";
  62.         mes "Job EXP: ^0000FF"+getd("." +currentquest$+"_huntingexp["+1+"]")+"^000000";
  63.         next;
  64.         if(select("Finish:Abort") == 2){
  65.             mes "[^FF7700Questboard^000000]";
  66.             mes "Quest aborting...";
  67.             next;
  68.             mes "^FF0000Are you sure?^000000";
  69.             mes "Your progress will be abandoned afterwards..";
  70.             menu "Continue my hunting..",-,"Yes, abort please!",L_Aborted;
  71.             mes "You did the right choice!";
  72.             close;
  73.            
  74.             L_Aborted:
  75.             for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
  76.                 set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
  77.                 setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
  78.             }
  79.             set currentquest$, "";
  80.             set h_run, 0;
  81.             mes "Feel free to come again";
  82.             close;
  83.         }
  84.         goto L_checkmobs;
  85.     }
  86.        
  87. L_questmenu:
  88.     mes "[^FF7700Questboard^000000]";
  89.     mes "Select category:";
  90.     next;
  91.    
  92.     switch(select((.collection)?"Collection Quests":"",
  93.                   (.hunting)?"Hunting Quests":"",
  94.                   "Exit")) {
  95.    
  96. case 1:
  97.     set .@collectmenu$, "";
  98.     for( set .@i,0; .@i < .collectionquestcount; set .@i,.@i+1) {
  99.         if (.@i) set .@collectmenu$,.@collectmenu$+":";
  100.         set .@collectmenu$, .@collectmenu$ + "[" + getd("." +(.@i+1)+"_collectionmin") + " - " + getd("." +(.@i+1)+"_collectionmax") + "] " + getd("." + (.@i+1) + "_collectionname$");
  101.     }
  102.     set .@selection,select(.@collectmenu$);
  103.     if(gettimetick(2) < getd(.@selection + "_collection_delay")){
  104.         set .@time_left, getd(.@selection + "_collection_delay")-gettimetick(2);
  105.         mes "[^FF7700Questboard^000000]";
  106.         if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
  107.         if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
  108.         mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
  109.         close;
  110.     }
  111.     mes "[^FF7700Questboard^000000]";
  112.     mes "^0000FF"+getd("." + .@selection + "_collectionname$")+"^000000";
  113.     mes "--------------------------------";
  114.     for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_collectionitem")); set .@j,.@j+2) {
  115.         mes "^FF0000"+getitemname(getd("."+.@selection+"_collectionitem["+.@j+"]"))+" - "+getd("."+.@selection+"_collectionitem["+(.@j+1)+"]")+" ea.^000000";
  116.     }
  117.     mes "--------------------------------";
  118.     mes "[Reward]";
  119.     mes "Item: ^0000FF"+((getd("." +.@selection+"_collectionprize"))?getitemname(getd("." +.@selection+"_collectionprize"))+" - "+getd("." +.@selection+"_collectionamount")+" ea.^000000":"Nothing^000000");
  120.     mes "Zeny: ^0000FF"+getd("." +.@selection+"_collectionzeny")+"^000000";
  121.     mes "Base EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+0+"]")+"^000000";
  122.     mes "Job EXP: ^0000FF"+getd("." +.@selection+"_collectionexp["+1+"]")+"^000000";
  123.     next;
  124.     if(select("Accept:Decline") == 2){
  125.         close;
  126.     }
  127.     if(BaseLevel >= getd("." +.@selection+"_collectionmin") && BaseLevel <= getd("." +.@selection+"_collectionmax"))
  128.     {
  129.         mes "[^FF7700Questboard^000000]";
  130.         mes "Quest accepted.";
  131.         set c_run, 1;
  132.         set currentquest$, .@selection;
  133.         close;
  134.     }
  135.     else
  136.     {
  137.         mes "[^FF7700Questboard^000000]";
  138.         mes "Your level does not meet my";
  139.         mes "requirements.";
  140.         close;
  141.     }
  142.    
  143. case 2:
  144.     set .@huntmenu$, "";
  145.     for( set .@i,0; .@i < .huntingquestcount; set .@i,.@i+1) {
  146.         if (.@i) set .@huntmenu$,.@huntmenu$+":";
  147.         set .@huntmenu$, .@huntmenu$ + "[" + getd("." +(.@i+1)+"_huntingmin") + " - " + getd("." +(.@i+1)+"_huntingmax") + "] " + getd("." + (.@i+1) + "_huntingname$");
  148.     }
  149.     set .@selection,select(.@huntmenu$);
  150.     if(gettimetick(2) < getd(.@selection + "_hunting_delay")){
  151.         set .@time_left, getd(.@selection + "_hunting_delay")-gettimetick(2);
  152.         mes "[^FF7700Questboard^000000]";
  153.         if(.@time_left < 60) mes "You have to wait ^0000FF"+.@time_left+" seconds^000000 to do this quest again.";
  154.         if(.@time_left < 3600) mes "You have to wait ^0000FF"+.@time_left/60+" minutes^000000 to do this quest again.";
  155.         mes "You have to wait ^0000FF"+.@time_left/60/60+" hours^000000 to do this quest again.";
  156.         close;
  157.     }
  158.     mes "[^FF7700Questboard^000000]";
  159.     mes "^0000FF"+getd("." + .@selection + "_huntingname$")+"^000000";
  160.     mes "--------------------------------";
  161.     for( set .@j, 0; .@j < getarraysize(getd("."+ .@selection + "_huntingmob")); set .@j,.@j+2) {
  162.         mes "^FF0000"+strmobinfo(1,getd("."+.@selection+"_huntingmob["+.@j+"]"))+" - "+getd("."+.@selection+"_huntingmob["+(.@j+1)+"]")+" ea.^000000";
  163.     }
  164.     mes "--------------------------------";
  165.     mes "[Reward]";
  166.     mes "Item: ^0000FF"+((getd("." +.@selection+"_huntingprize"))?getitemname(getd("." +.@selection+"_huntingprize"))+" - "+getd("." +.@selection+"_huntingamount")+" ea.^000000":"Nothing^000000");
  167.     mes "Zeny: ^0000FF"+getd("." +.@selection+"_huntingzeny")+"^000000";
  168.     mes "Base EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+0+"]")+"^000000";
  169.     mes "Job EXP: ^0000FF"+getd("." +.@selection+"_huntingexp["+1+"]")+"^000000";
  170.     next;
  171.     if(select("Accept:Decline") == 2){
  172.         close;
  173.     }
  174.     if(BaseLevel >= getd("." +.@selection+"_huntingmin") && BaseLevel <= getd("." +.@selection+"_huntingmax"))
  175.     {
  176.         mes "[^FF7700Questboard^000000]";
  177.         mes "Quest accepted.";
  178.         set h_run, 1;
  179.         set currentquest$, .@selection;
  180.         close;
  181.     }
  182.     else
  183.     {
  184.         mes "[^FF7700Questboard^000000]";
  185.         mes "Your level does not meet the";
  186.         mes "requirements.";
  187.         close;
  188.     }
  189.    
  190. case 3:
  191.     close;
  192.     }
  193.  
  194. L_checkweight: {
  195.         mes "You are current over-weighted.";
  196.         mes "Please store some items before you come...";
  197.         close;
  198.         }
  199.            
  200. L_checkitems:
  201.     for( set .@k,0; .@k < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@k,.@k+2) {
  202.         if(countitem(getd("."+currentquest$+"_collectionitem["+.@k+"]"))>=getd("."+currentquest$+"_collectionitem["+(.@k+1)+"]")){
  203.             set .@checkitem,.@checkitem+2;
  204.         }
  205.     }
  206.    
  207.     if(.@checkitem<getarraysize(getd("."+currentquest$+"_collectionitem"))){
  208.         mes "[^FF7700Questboard^000000]";
  209.         mes "Please collect the items I requested.";
  210.         close;
  211.     }
  212.     if (checkweight(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"))) {
  213.         goto L_getrewards;
  214.         } else {
  215.         goto L_checkweight;
  216.     }
  217.     L_getrewards:
  218.     for( set .@delcount,0; .@delcount < getarraysize(getd("."+currentquest$+"_collectionitem")); set .@delcount,.@delcount+2) {
  219.         delitem getd("."+currentquest$+"_collectionitem["+.@delcount+"]"),getd("."+currentquest$+"_collectionitem["+(.@delcount+1)+"]");
  220.     }
  221.     mes "[^FF7700Questboard^000000]";
  222.     mes "Congratulation! Here is your Reward.";
  223.     if(getd("." +currentquest$+"_collectionprize")!=0) getitem(getd("." +currentquest$+"_collectionprize"),getd("." +currentquest$+"_collectionamount"));
  224.     set Zeny,Zeny+getd("." +currentquest$+"_collectionzeny");
  225.     getexp getd("." +currentquest$+"_collectionexp["+0+"]"),getd("." +currentquest$+"_collectionexp["+1+"]");
  226.     setd(currentquest$ + "_collection_delay"),gettimetick(2)+.quest_delay;
  227.     set currentquest$, "";
  228.     set c_run, 0;
  229.     close;
  230.    
  231. L_checkmobs:
  232.     set .@goal, (getarraysize(getd("."+currentquest$+"_huntingmob"))/2);
  233.     for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
  234.         set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
  235.         if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")==getd("."+currentquest$+"_huntingmob["+.@i+"]")){
  236.             set .@checkmonster, .@checkmonster+1;
  237.             if(.@checkmonster==.@goal){
  238.                 goto L_checkmobs2;
  239.             }
  240.             continue;
  241.         }
  242.         goto L_checkmobs2;
  243.     }
  244.    
  245. L_checkmobs2:
  246.     if(.@checkmonster<.@goal){
  247.         mes "[^FF7700Questboard^000000]";
  248.         mes "You didn't kill the monsters I requested.";
  249.         close;
  250.     }
  251.     if (checkweight (getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"))) {
  252.         goto L_getrewards2;
  253.         } else {
  254.         goto L_checkweight;
  255.     }
  256.     L_getrewards2:
  257.     mes "[^FF7700Questboard^000000]";
  258.     mes "Congratulation! Here is your Reward.";
  259.     for(set .@x, 1; .@x < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@x,.@x+2){
  260.         set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@x-1)+"]");
  261.         setd(currentquest$+"_"+.@currentmob+"_"+.@x+"_killcount", 0);
  262.     }
  263.     if(getd("." +currentquest$+"_huntingprize")!=0) getitem(getd("." +currentquest$+"_huntingprize"),getd("." +currentquest$+"_huntingamount"));
  264.     set Zeny, Zeny+getd("." +currentquest$+"_huntingzeny");
  265.     getexp getd("." +currentquest$+"_huntingexp["+0+"]"),getd("." +currentquest$+"_huntingexp["+1+"]");
  266.     setd(currentquest$ + "_hunting_delay"),gettimetick(2)+.quest_delay;
  267.     set currentquest$, "";
  268.     set h_run, 0;
  269.     close;
  270.  
  271. OnNPCKillEvent:
  272.     if(h_run!=1) end;
  273.     for(set .@i, 1; .@i < getarraysize(getd("."+currentquest$+"_huntingmob")); set .@i,.@i+2){
  274.         if(killedrid==getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]")){
  275.             set .@currentmob, getd("."+currentquest$+"_huntingmob["+(.@i-1)+"]");
  276.             if(getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")>=getd("."+currentquest$+"_huntingmob["+.@i+"]")) end;
  277.             setd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount", getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+1);
  278.             dispbottom getd("."+currentquest$+"_huntingname$")+": ["+strmobinfo(1,.@currentmob)+"] ("+ getd(currentquest$+"_"+.@currentmob+"_"+.@i+"_killcount")+"/"+getd("."+currentquest$+"_huntingmob["+.@i+"]")+")";
  279.             end;
  280.         }
  281.         continue;
  282.     }
  283.     end;
  284.    
  285. OnInit:
  286.  
  287.     function AddCollection;
  288.     function AddHunting;
  289.  
  290.     //Activate/Deactive quest categories here
  291.     set .collection, 1;
  292.     set .hunting, 1;
  293.    
  294.     //Quest Delay (seconds)
  295.     //24 hours = 86400 seconds
  296.     set .quest_delay, 0;
  297.    
  298.     //Checks if quests are loaded (prevents out of index)
  299.     if(.questsloaded==1) end;
  300.         set .questsloaded, 1;
  301.        
  302.         //Add Collection Quests here
  303.         //AddCollection("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Item ID>,<Item Amount>,...);
  304.         AddCollection("Beginning",10,25,504,30,0,8000,7000,940,30);
  305.  
  306.        
  307.         //Add Hunting Quests here
  308.         //AddHunting("<Quest Name>",<Min Lvl>,<Max Lvl>,<Reward|Item ID>,<Reward|Item Amount>,<Zeny Reward>,<Base EXP>,<Job EXP>,<Monster ID>,<Monster Amount>,...);
  309.         AddHunting("Porings",1,55,526,40,20000,60000,48000,1002,10,1113,10,1242,10,1031,10);
  310.         end;
  311.        
  312.  
  313. function AddCollection {
  314.     set .collectionquestcount,.collectionquestcount+1;
  315.     setd ("." +.collectionquestcount+"_collectionname$", getarg(0));
  316.     setd ("." +.collectionquestcount+"_collectionmin", getarg(1));
  317.     setd ("." +.collectionquestcount+"_collectionmax", getarg(2));
  318.     setd ("." +.collectionquestcount+"_collectionprize", getarg(3));
  319.     setd ("." +.collectionquestcount+"_collectionamount", getarg(4));
  320.     setd ("." +.collectionquestcount+"_collectionzeny", getarg(5));
  321.     set .@argcount, 6;
  322.     set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionexp"));
  323.     setd ("." +.collectionquestcount+"_collectionexp["+.@size+"]",getarg(.@argcount));
  324.     setd ("." +.collectionquestcount+"_collectionexp["+(.@size+1)+"]",getarg(.@argcount+1));
  325.     set .@argcount, .@argcount+2;
  326.     while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
  327.         set .@size, getarraysize(getd("."+ .collectionquestcount + "_collectionitem"));
  328.         setd ("."+.collectionquestcount+"_collectionitem["+.@size+"]",getarg(.@argcount));
  329.         setd ("."+.collectionquestcount+"_collectionitem["+(.@size+1)+"]",getarg(.@argcount+1));
  330.         set .@argcount,.@argcount+2;
  331.     }
  332.     return;
  333. }
  334.  
  335. function AddHunting {
  336.     set .huntingquestcount,.huntingquestcount+1;
  337.     setd ("." +.huntingquestcount+"_huntingname$", getarg(0));
  338.     setd ("." +.huntingquestcount+"_huntingmin", getarg(1));
  339.     setd ("." +.huntingquestcount+"_huntingmax", getarg(2));
  340.     setd ("." +.huntingquestcount+"_huntingprize", getarg(3));
  341.     setd ("." +.huntingquestcount+"_huntingamount", getarg(4));
  342.     setd ("." +.huntingquestcount+"_huntingzeny", getarg(5));
  343.     set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingexp"));
  344.     set .@argcount, 6;
  345.     setd ("." +.huntingquestcount+"_huntingexp["+.@size+"]",getarg(.@argcount));
  346.     setd ("." +.huntingquestcount+"_huntingexp["+(.@size+1)+"]",getarg(.@argcount+1));
  347.     set .@argcount, .@argcount+2;
  348.     while(getarg(.@argcount,-1)!=-1 && getarg(.@argcount+1,-1)!=-1) {
  349.         set .@size, getarraysize(getd("."+ .huntingquestcount + "_huntingmob"));
  350.         setd ("."+.huntingquestcount+"_huntingmob["+.@size+"]",getarg(.@argcount));
  351.         setd ("."+.huntingquestcount+"_huntingmob["+(.@size+1)+"]",getarg(.@argcount+1));
  352.         set .@argcount, .@argcount+2;
  353.     }
  354.     return;
  355. }
  356. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement