Ragnarok Developer
Please Login to able Download the File
Ragnarok Developer
Please Login to able Download the File
Ragnarok Developer

Official Forums
 
HomeHome  Latest imagesLatest images  SearchSearch  RegisterRegister  Log in  
Your Ad Here

 

 Hunting Mission

Go down 
AuthorMessage
Khayam
Admin



Posts : 1
Join date : 29/10/2012

Hunting Mission Empty
PostSubject: Hunting Mission   Hunting Mission EmptyMon Oct 29, 2012 5:41 pm

Hunting Missions
by Euphy

An NPC which gives random monster-hunting missions -- in other words, no configuration, hooray!
Concept taken from eAmod (but with no source mods), and a comma-inserting function shamelessly stolen from Joseph. c:

Features:

  • Random monster selection. Includes many checks and a large blacklist, so only huntable monsters will be chosen. A reference list of available mobs can be found here.

  • Automatic reward generation based on mission difficulty.

  • Rewards include experience, Zeny, and "Mission Points" (a shop feature is included).

  • Rankings for top hunters.

  • Options for mission delay, number of subquests, and amount of monsters.


Shop items can be edited in this line:
Code:
   setarray .Shop[0],   // Reward items: <ID>,<point cost> (about 10~20 points per hunt).
      20003,7,513,1,514,1,538,5,539,5,558,10,561,10;

Code:
//===== rAthena Script =======================================
//= Hunting Missions
//===== By: ==================================================
//= Euphy
//===== Current Version: =====================================
//= 1.1a - eAthena
//===== Description: =========================================
//= Random hunting missions.
//= Rewards are based on quest difficulty.
//============================================================

prontera,147,172,5   script   Hunting Missions   951,{
function Chk; function Cm;
   mes "[Hunting Missions]";
   mes "Hello, "+strcharinfo(0)+"!";
   if (!#Mission_Delay) {
      next;
      mes "[Hunting Missions]";
      mes "I can't find any records...";
      mes "You must be new here!";
      emotion e_omg;
      next;
      callsub Mission_Info;
      emotion e_go;
      set #Mission_Delay,1;
      close;
   }
   mes rand(2)?"Working hard, as always...":"Not slacking, I hope...";
   mes "Is there anything I can help";
   mes "you with?";
   mes " ";
   mes "^777777~ You've completed ^0055FF"+Mission_Total+"^777777 mission"+((Mission_Total == 1)?"":"s")+". ~^000000";
   next;
   switch(select(((!Mission1)?" ~ New Mission::":": ~ Mission Status: ~ Abandon Mission")+": ~ Information: ~ Mission Shop: ~ View Top Hunters: ~ ^777777Cancel^000000")) {
   case 1:
      mes "[Hunting Missions]";
      if (#Mission_Count) {
         mes "You've started a mission";
         mes "on another character.";
         close;
      }
      if (#Mission_Delay > gettimetick(2) && .Delay) {
         set .@i, #Mission_Delay-gettimetick(2);
         if (.@i > 3600) set .@j$, (.@i/3600)+" hour"+(((.@i/3600) == 1)?"":"s");
         else if (.@i > 60) set .@j$, (.@i/60)+" minute"+(((.@i/60) == 1)?"":"s");
         else set .@j$, (.@i)+" second"+((.@i == 1)?"":"s");
         mes "I'm afraid you'll have to wait "+.@j$+" before taking another mission.";
         close;
      }
      mes "You must hunt:";
      set .@size, getarraysize(.NoRange);
      for (set .@i,0; .@i<.Quests; set .@i,.@i+1) {
         set .@valid,0;
         while (!.@valid) {
            sleep2 5;
            set .@valid,1;
            set .@mob, rand(1001,1999);
            // Is mob ID blacklisted?
            if (compare(.Restrict$[0],""+.@mob) || compare(.Restrict$[1],""+.@mob)) set .@valid,0;
            // Is mob ID interval blacklisted?
            if (.@valid) for(set .@j,0; .@j<.@size; set .@j,.@j+2)
               if (.@mob > .NoRange[.@j] && .@mob < .NoRange[.@j+1]) {
                  set .@valid,0;
                  break;
               }
            // Is mob a duplicate?
            if (.@valid) for(set .@j,0; .@j<.@i; set .@j,.@j+1)
               if (strmobinfo(1,.@mob) == strmobinfo(1,getd("Mission"+.@j))) {
                  set .@valid,0;
                  break;
               }
            // Is mob an MVP?
            if (.@valid) if (compare(.NoMVP$,""+.@mob)) set .@valid,0;
         }
         setd "Mission"+.@i, .@mob;
         setd "Mission"+.@i+"_",0;
      }
      set #Mission_Count, rand(.Count[0],.Count[1]);
      callsub Mission_Status;
      set @f,0;
      next;
      mes "[Hunting Missions]";
      mes "Report back when";
      mes "you've finished.";
      mes "Good luck!";
      close;
   case 2:
      mes "[Hunting Missions]";
      mes "Mission status:";
      callsub Mission_Status;
      if (@f) { set @f,0; close; }
      next;
      mes "[Hunting Missions]";
      mes "Oh, you're done!";
      mes "Good work.";
      mes "Here's your reward.";
      emotion e_no1;
      specialeffect2 377;
      deletearray .@j[0], getarraysize(.@j);
      for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
         set .@j[.@i], getd("Mission"+.@i);
         set .@j[.Quests], .@j[.Quests]+strmobinfo(3,.@j[.@i]);
         set .@j[.Quests+1], .@j[.Quests+1]+strmobinfo(6,.@j[.@i]);
         set .@j[.Quests+2], .@j[.Quests+2]+strmobinfo(7,.@j[.@i]);
         setd "Mission"+.@i,0;
         setd "Mission"+.@i+"_",0;
      }
      set #Mission_Points, #Mission_Points+(3+(.@j[.Quests]/.Quests/6));
      getexp (#Mission_Count*.@j[.Quests+1]/5),(#Mission_Count*.@j[.Quests+2]/5);
      set Zeny, Zeny+(#Mission_Count*.Quests*.@j[.@i]*.Multiplier);
      set #Mission_Count,0;
      if (.Delay) set #Mission_Delay, gettimetick(2)+(.Delay*3600);
      set Mission_Total, Mission_Total+1;
      if (Mission_Total == 1) query_sql("INSERT INTO `global_reg_value` (`char_id`,`str`,`value`,`type`,`account_id`) VALUES ("+getcharid(0)+",'Mission_Total','1',3,0)");
      else query_sql("UPDATE `global_reg_value` SET `value` = "+Mission_Total+" WHERE char_id = "+getcharid(0)+" AND `str` = 'Mission_Total'");
      close;
   case 3:
      mes "[Hunting Missions]";
      mes "Do you really want to";
      mes "abandon your mission?";
      if (.Delay) mes "Your delay time will not be reset.";
      next;
      switch(select(" ~ Abandon...: ~ ^777777Cancel^000000")) {
      case 1:
         mes "[Hunting Missions]";
         mes "Alright, I've dropped";
         mes "your current mission.";
         specialeffect2 462;
         for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
            setd "Mission"+.@i,0;
            setd "Mission"+.@i+"_",0;
         }
         set #Mission_Count,0;
         if (.Delay) set #Mission_Delay, gettimetick(2)+(.Delay*3600);
         close;
      case 2:
         mes "[Hunting Missions]";
         mes "I knew you were kidding!";
         mes "Keep up the good work.";
         emotion e_heh;
         close;
      }
   case 4:
      callsub Mission_Info;
      close;
   case 5:
      mes "[Hunting Missions]";
      mes "You have ^0055FF"+#Mission_Points+"^000000 Mission Points.";
      mes "Use them well!";
      callshop "mission_shop",1;
      npcshopattach "mission_shop";
      end;
   case 6:
      mes "[Hunting Missions]";
      mes "The top hunters are:";
      query_sql("SELECT `name`,CAST(`value` AS SIGNED) FROM `global_reg_value` LEFT JOIN `char` ON `global_reg_value`.char_id = `char`.char_id WHERE `global_reg_value`.str = 'Mission_Total' ORDER BY CAST(`value` AS SIGNED) DESC LIMIT 5",.@name$,.@val);
      for(set .@i,0; .@i<5; set .@i,.@i+1)
         mes "  [Rank "+(.@i+1)+"]  "+((.@name$[.@i] == "")?"^777777none":"^0055FF"+.@name$[.@i]+"^000000 : ^FF0000"+.@val[.@i]+" pt.")+"^000000";
      close;
   case 7:
      mes "[Hunting Missions]";
      mes "Nothing? Okay...";
      emotion e_hmm;
      close;
   }

Mission_Status:
   set @f,0;
   deletearray .@j[0], getarraysize(.@j);
   for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
      set .@j[.@i], getd("Mission"+.@i);
      set .@j[.Quests], .@j[.Quests]+strmobinfo(3,.@j[.@i]);
      set .@j[.Quests+1], .@j[.Quests+1]+strmobinfo(6,.@j[.@i]);
      set .@j[.Quests+2], .@j[.Quests+2]+strmobinfo(7,.@j[.@i]);
      mes " > "+Chk(getd("Mission"+.@i+"_"),#Mission_Count)+strmobinfo(1,.@j[.@i])+" ("+getd("Mission"+.@i+"_")+"/"+#Mission_Count+")^000000";
   }
   set .@Mission_Points, 3+(.@j[.Quests]/.Quests/6);
   set .@Base_Exp, #Mission_Count*.@j[.Quests+1]/5;
   set .@Job_Exp, #Mission_Count*.@j[.Quests+2]/5;
   set .@Zeny, #Mission_Count*.Quests*.@j[.@i]*.Multiplier;
   next;
   mes "[Hunting Missions]";
   mes "Mission rewards:";
   mes " > Mission Points: ^0055FF"+.@Mission_Points+"^000000";
   mes " > Base Experience: ^0055FF"+Cm(.@Base_Exp)+"^000000";
   mes " > Job Experience: ^0055FF"+Cm(.@Job_Exp)+"^000000";
   mes " > Zeny: ^0055FF"+Cm(.@Zeny)+"^000000";
   return;

Mission_Info:
   mes "[Hunting Missions]";
   mes "If you so choose, I can assign";
   mes "you a random hunting quest.";
   mes "Some are easier than others, but";
   mes "the rewards increase with difficulty.";
   next;
   mes "[Hunting Missions]";
   mes "Missions points are shared";
   mes "amongst all your characters.";
   if (.Delay) mes "Delay time is, too.";
   mes "You can't take missions on";
   mes "multiple characters at once.";
   next;
   mes "[Hunting Missions]";
   mes "You can start a quest";
   if (.Delay) mes "every "+((.Delay == 1)?"hour.":.Delay+" hours.");
   else mes "whenever you want.";
   mes "That's everything~";
   return;

function Chk {
   if (getarg(0) < getarg(1)) { set @f,1; return "^FF0000"; }
   else return "^00FF00"; }

function Cm {
   set .@str$, getarg(0);
   for(set .@i,getstrlen(.@str$)-3; .@i>0; set .@i,.@i-3)
      set .@str$, insertchar(.@str$,",",.@i);
   return .@str$; }

OnBuyItem:
   set @cost,0;
   for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1)
      for(set .@j,0; .@j<getarraysize(.Shop); set .@j,.@j+2)
         if (@bought_nameid[.@i] == .Shop[.@j]) {
            set @cost, @cost+(.Shop[.@j+1]*@bought_quantity[.@i]);
            break;
         }
   mes "[Hunting Missions]";
   if (@cost > #Mission_Points) mes "You don't have enough Mission Points.";
   else {
      for(set .@i,0; .@i<getarraysize(@bought_nameid); set .@i,.@i+1) {
         getitem @bought_nameid[.@i], @bought_quantity[.@i];
         dispbottom "Purchased "+@bought_quantity[.@i]+"x "+getitemname(@bought_nameid[.@i])+".";
      }
      set #Mission_Points, #Mission_Points-@cost;
      mes "Deal completed.";
      emotion e_cash;
   }
   set @cost,0;
   deletearray @bought_nameid[0], getarraysize(@bought_nameid);
   deletearray @bought_quantity[0], getarraysize(@bought_quantity);
   close;

OnNPCKillEvent:
   if (!#Mission_Count || !Mission1) end;
   for(set .@i,0; .@i<.Quests; set .@i,.@i+1) {
      if (strmobinfo(1,killedrid) == strmobinfo(1,getd("Mission"+.@i))) {
         if (getd("Mission"+.@i+"_") < #Mission_Count) {
            set .@j, getd("Mission"+.@i+"_")+1;
            setd "Mission"+.@i+"_", .@j;
            dispbottom "[Hunting Mission] Killed "+.@j+" of "+#Mission_Count+" "+strmobinfo(1,killedrid)+".";
         }
         break;
      }
   }
   end;

OnInit:
   set .Delay,12;      // Quest delay, in hours (0 to disable).
   set .Quests,4;      // Number of subquests per quest (increases rewards).
   set .Multiplier,60;   // Multiplier for Zeny reward calculation.
   setarray .Count[0],   // Min and max monsters per subquest (increases rewards).
      40,70;
   setarray .Shop[0],   // Reward items: <ID>,<point cost> (about 10~20 points per hunt).
      20003,7,513,1,514,1,538,5,539,5,558,10,561,10;
   setarray .Restrict$[0],   // Blacklisted mob IDs.
       "1003,1006,1017,1021,1022,1027,1043,1062,1075,1096,"+
       "1108,1120,1136,1137,1168,1171,1172,1173,1198,1200,"+
       "1203,1204,1205,1210,1212,1217,1218,1244,1245,1247,",
       "1250,1259,1262,1268,1270,1311,1313,1388,1407,1411,"+
       "1414,1496,1501,1502,1515,1618,1624,1625,1626,1629,"+
       "1669,1674,1675,1676,1677,1678,1679,1681,1834,1835,"+
       "1868,1990,1991,1996,1997,1998";
   setarray .NoRange[0],   // Blacklisted mob ID ranges.
       1077,1094,  1180,1188,  1219,1242,  1282,1310,  1323,1365,
       1392,1400,  1417,1493,  1517,1613,  1639,1652,  1657,1668,
       1682,1692,  1703,1713,  1718,1769,  1784,1829,  1838,1864,
       1870,1986;
   set .NoMVP$,      // Blacklisted MVPs.
       "1038,1039,1046,1059,1112,1115,1147,1150,1157,1159,1190,"+
       "1251,1252,1272,1312,1373,1389,1511,1623,1630,1779,1832";

   npcshopdelitem "mission_shop",512;
   for(set .@i,0; .@i<getarraysize(.Shop); set .@i,.@i+2)
      npcshopadditem "mission_shop", .Shop[.@i], .Shop[.@i+1];
   end;
}
-   shop   mission_shop   -1,512:-1
[code][quote]
Back to top Go down
 
Hunting Mission
Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Ragnarok Developer :: Scripts :: Scripts Release-
Jump to: