pajodex Posted January 18, 2020 Group: Members Topic Count: 79 Topics Per Day: 0.03 Content Count: 439 Reputation: 173 Joined: 12/12/17 Last Seen: Wednesday at 06:48 PM Share Posted January 18, 2020 This is based on NovaRO's Low Rank Hunt feature. All information are based on https://www.novaragnarok.com/wiki/Low_Rank_Hunts and some videos in youtube that I can find. FYI, Everything is made by me (aside from the concept).. no hate and just enjoy Thanks! This is my coming back from hiatus update! 1 Quote Link to comment Share on other sites More sharing options...
Naruto Posted January 18, 2020 Group: Members Topic Count: 20 Topics Per Day: 0.01 Content Count: 416 Reputation: 74 Joined: 05/16/19 Last Seen: January 24, 2021 Share Posted January 18, 2020 (edited) Edited January 18, 2020 by Naruto Quote Link to comment Share on other sites More sharing options...
Lord Turtle Posted January 18, 2020 Group: Members Topic Count: 7 Topics Per Day: 0.00 Content Count: 51 Reputation: 7 Joined: 04/13/12 Last Seen: May 10 Share Posted January 18, 2020 Good Work! Quote Link to comment Share on other sites More sharing options...
Rododark Posted Wednesday at 11:57 AM Group: Members Topic Count: 8 Topics Per Day: 0.00 Content Count: 52 Reputation: 8 Joined: 06/10/12 Last Seen: 9 hours ago Share Posted Wednesday at 11:57 AM How can I get that script? Or a similar one? It's very good. Quote Link to comment Share on other sites More sharing options...
Racaae Posted 6 hours ago Group: Members Topic Count: 0 Topics Per Day: 0 Content Count: 232 Reputation: 101 Joined: 06/02/12 Last Seen: 50 minutes ago Share Posted 6 hours ago On 5/14/2025 at 8:57 AM, Rododark said: How can I get that script? Or a similar one? It's very good. Spoiler //===== rAthena Script ======================================= //= Monster Hunt (instance) //===== Changelogs: ========================================== //= 1.0 First version. //============================================================ /* Paste the following in \db\import\instance_db.yml Body: - Id: 301 Name: Monster Hunt Enter: Map: cmd_fild05 X: 270 Y: 205 */ prontera,59,213,5 script MH Daily Bounty#mh 4_F_KHELLISIA,{ setarray .@mh_reward_id[0], 501, 502, 503; setarray .@mh_reward_amt[0], 10, 5, 5; cutin "kh_ellisia",2; mes "[MH Daily Bounty Clerk]"; if (MHdailybounty_cd == gettime(DT_YYYYMMDD)) { mes "You've completed your Daily MH Bounty quest. Come back again tomorrow."; close3; } .@hunt_size = getarraysize($@MH2low_huntid); .@reward_size = getarraysize(.@mh_reward_id); mes "If you kill all " + .@hunt_size + " hunts in a day, you will get the following items:"; for ( .@k = 0; .@k < .@reward_size; .@k++ ) mes "~ " + .@mh_reward_amt[.@k] + "x " + mesitemlink(.@mh_reward_id[.@k]); next; mes "[MH Daily Bounty Clerk]"; mes "Your current status for today is:"; for ( .@i = 0; .@i < .@hunt_size; .@i++ ) { .@huntindex = $@MH2low_huntid[.@i]; if (MH_low_hunted[.@huntindex] != gettime(DT_YYYYMMDD)) { .@unfinished = true; .@c$ = "^000000"; .@c2$ = "0"; } else { .@c$ = "^0000FF"; .@c2$ = "1"; } mes .@c$ + "~ " + $@MH2low_title$[.@huntindex] + " [" + .@c2$ + "/1]^000000"; } next; if (.@unfinished) { mes "[MH Daily Bounty Clerk]"; mes "Comeback again when you complete"; mes "all monsters to claim your reward."; close3; } if (!checkweight2(.@mh_reward_id[0], .@mh_reward_amt[0])) { mes "[MH Daily Bounty Clerk]"; mes "Sorry. It seems that there are too many types and weights of items."; mes "Please organize your inventory."; close3; } for ( .@k = 0; .@k < .@reward_size; .@k++ ) getitem .@mh_reward_id[.@k], .@mh_reward_amt[.@k]; MHdailybounty_cd = gettime(DT_YYYYMMDD); mes "[MH Daily Bounty Clerk]"; mes "Wow! You've completed the quest."; mes "Here is your reward."; close3; } prontera,56,213,5 script Neko#mh 4_CAT_SAILOR2,{ .@cost = 100000; mes "[Neko]"; if (double_mh_reward) { mes "I'm sure you will find good loot!"; mes "Good luck!"; close; } mes "For " + F_InsertComma(.@cost) + "z, I will reward you additional loots when you successfully complete the hunt without dying."; next; if(select("Here's " + F_InsertComma(.@cost) + "z", "No way!") == 2) { mes "[Neko]"; mes "Ok."; close; } mes "[Neko]"; if (Zeny < .@cost) { mes "You don't have enough zeny."; close; } Zeny -= .@cost; double_mh_reward = true; mes "Done!"; close; } prontera,61,213,3 script Low Rank Agent#mh 4_F_KAFRA8,{ .@zeny_cost = 50000; //zeny to enter .@item_cost = 502; //item id to enter .@minlevel = 95; //base level to enter .@min_members = 1; //minimum party members .@max_members = 5; //maximum party members cutin "kafra_08",2; mes "[Low Rank Agent]"; mes "I'm in charge of the Monster Hunter grounds."; if (BaseLevel < .@minlevel) { mes "You need to be ^0000FFat least level " + .@minlevel + "^000000 to join."; close3; } if (checkweight(1201,5) == 0) { mes "It seems that there are too many types and weights of items."; mes "Please organize your inventory."; close3; } if (getcharid(1) < 1) { mes "Please ^0000FForganize a party^000000 of at least " + .@min_members + " person to proceed."; close3; } .@t$[.@textcount++] = "Entry into the Hunting Grounds will cost you " + F_InsertComma(.@zeny_cost) + "z."; if (.@item_cost) { .@t$[.@textcount++] = "I'll also let you in for one " + mesitemlink(.@item_cost) + "."; .@s$ = "Use " + getitemname(.@item_cost); } mes implode(.@t$, " "); next; switch(select("I'm not paying for this", "I'll pay the " + F_InsertComma(.@zeny_cost) + "z", .@s$)) { case 1: mes "[Low Rank Agent]"; mes F_Bye; close3; case 2: break; case 3: if (countitem(.@item_cost) < 1) { mes "[Low Rank Agent]"; mes "You don't have it."; close3; } .@item = true; break; } mes "[Low Rank Agent]"; mes "Which monster would you like to hunt?"; next; .@hunt_size = getarraysize($@MH2low_huntid); for ( .@i = 0; .@i < .@hunt_size; .@i++ ) { .@huntindex = $@MH2low_huntid[.@i]; .@m$[.@count++] = $@MH2low_title$[.@huntindex]; } .@m$[.@count] = "Cancel"; .@menu$ = implode(.@m$, ":"); .@h = select(.@menu$) - 1; if (.@h == .@hunt_size) { mes "[Low Rank Agent]"; mes F_Bye; close3; } .@h = $@MH2low_huntid[.@h]; mes "[Low Rank Agent]"; mes "Are you sure you want to hunt the ^0000FF" + $@MH2low_title$[.@h] + "^000000?"; next; if(select("Go hunt", "Cancel") == 2) { mes "[Low Rank Agent]"; mes F_Bye; close3; } .@party_id = getcharid(1); getpartymember .@party_id, 1; getpartymember .@party_id, 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) .@count_online++; else party_delmember $@partymembercid[.@i]; } if ( .@count_online > .@max_members ) { mes "[Low Rank Agent]"; mes "Please form a party of maximum " + .max_players + " people to continue."; close3; } if (!instance_check_party(.@party_id,1,.@minlevel,MAX_LEVEL)) { mes "[Low Rank Agent]"; mes "Your party does not meet the requirements:"; mes "At least " + .@min_members + " and at maximum " + .@max_members + " members of base level at least " + .@minlevel + "."; close3; } if (is_party_leader() == false) { mes "[Low Rank Agent]"; mes "Only the party leader must talk to me."; close3; } if ((!.@item && Zeny < .@zeny_cost) || (.@item && countitem(.@item_cost) < 1)) { mes "[Low Rank Agent]"; mes "You can't pay for the hunt."; close3; } .@md_name$ = "Monster Hunt"; .@id = instance_create(.@md_name$); if (.@id < 0) { cutin "",255; mes "Party Name: "+ getpartyname(.@party_id); mes "Party Leader: "+strcharinfo(0); mes "^0000ff"+.@md_name$+" ^000000- Reservation Failed!"; close; } mes "[Low Rank Agent]"; mes "The hunt has begun, I'll now be warping you to your destination."; next; switch(instance_enter(.@md_name$)) { case IE_OK: break; default: cutin "",255; mes "An error has occurred."; close; } getpartymember .@party_id, 1; getpartymember .@party_id, 2; for ( .@i = 0; .@i < $@partymembercount; .@i++ ) { if ( isloggedin( $@partymemberaid[.@i], $@partymembercid[.@i] ) ) { .@count_online++; } else party_delmember $@partymembercid[.@i]; } if (!instance_check_party(.@party_id,1,.@minlevel,MAX_LEVEL)) { mes "Your party does not meet the requirements:"; mes "At least " + .@min_members + " and at maximum " + .@max_members + " members of base level at least " + .@minlevel + "."; close3; } if ((!.@item && Zeny < .@zeny_cost) || (.@item && countitem(.@item_cost) < 1)) { mes "[Low Rank Agent]"; mes "You can't pay for the hunt."; close3; } if (.@item) delitem .@item_cost,1; else Zeny -= .@zeny_cost; setinstancevar('mh_low_hunting,.@h,instance_id(IM_PARTY)); mapannounce strnpcinfo(4), "Party "+ getpartyname( .@party_id ) +" has started the " + .@md_name$ + ".",bc_map,"0x00ff99",FW_NORMAL,12; .@m$ = instance_mapname(instance_info(.@md_name$,IIT_ENTER_MAP), .@id); .@x = instance_info(.@md_name$,IIT_ENTER_X); .@y = instance_info(.@md_name$,IIT_ENTER_Y); warpparty .@m$,.@x,.@y,.@party_id; end; } cmd_fild05,1,1,0 script(DISABLED) LowRankHunt_init HIDDEN_WARP_NPC,3,3,{ function AddHunt; function AddMonster; OnInit: if (instance_id()) end; deletearray $@MH2low_huntid,getarraysize($@MH2low_huntid); //============================== //= Add Hunts here // AddHunt(<id>{,"<title>"}); // AddMonster(<id>,<monster spawn X,<monster spawn Y>,<mob ID>,"<monster name>"{,<mob ID>,"<mob name>"}); AddHunt(1); AddMonster(1,222,279,2336,"Domovoi"); AddHunt(2); AddMonster(2,200,220,2068,"Golden Boitata"); AddHunt(3); AddMonster(3,318,151,2879,"Ice Troll"); AddHunt(4); AddMonster(4,250,167,2018,"Great Duneyrr"); AddHunt(5,"Celestial Tendrillions"); AddMonster(5,341,209,1991,"White Celestial Tendrillion",1991,"Black Celestial Tendrillion"); //============================== .@hunt_size = getarraysize($@MH2low_huntid); for ( .@i = 0; .@i < .@hunt_size; .@i++ ) { .@huntindex = $@MH2low_huntid[.@i]; if (.@huntindex && getd(".MHlow_mob_id" + .@huntindex + "[0]") == 0) { errormes "Monster Hunt id #" + .@huntindex + " missing monster. (skipped)."; deletearray $@MH2low_huntid[.@i],1; .@i--; } } end; OnInstanceInit: enablenpc; 'mh_map$ = instance_mapname(strnpcinfo(4)); // remove unwanted NPCs. .@num = getmapunits(BL_NPC,instance_mapname(strnpcinfo(4)),.@array$[0]); freeloop(1); for(.@i = 0;.@i < getarraysize(.@array$); .@i++) { if (.@array$[.@i] != strnpcinfo(0)) disablenpc instance_npcname(.@array$[.@i]); } freeloop(0); setmapflag 'mh_map$,mf_nomemo; setmapflag 'mh_map$,mf_noteleport; setmapflag 'mh_map$,mf_nowarp; setmapflag 'mh_map$,mf_nogo; setmapflag 'mh_map$,mf_nobranch; setmapflag 'mh_map$,mf_nopenalty; setmapflag 'mh_map$,mf_nomobloot; setmapflag 'mh_map$,mf_partylock; .@md_name$ = instance_live_info(ILI_NAME); movenpc instance_npcname(strnpcinfo(0)),instance_info(.@md_name$,IIT_ENTER_X),instance_info(.@md_name$,IIT_ENTER_Y); end; OnTouch: if ('mh_started == false) { 'mh_started = true; donpcevent instance_npcname(strnpcinfo(0)) + "::OnStart"; } end; OnStart: .@x = .MHlow_mob_x['mh_low_hunting]; .@y = .MHlow_mob_y['mh_low_hunting]; .@size = getarraysize(getd(".MHlow_mob_id" + 'mh_low_hunting)); .@max_name_lenght = 23; for(.@i = 0;.@i < .@size; .@i++) { .@id = getd(".MHlow_mob_id" + 'mh_low_hunting + "[" + .@i + "]"); .@n$ = getd(".MHlow_mob_name" + 'mh_low_hunting + "$[" + .@i + "]"); if (getstrlen(.@n$) > 23 && countstr(.@n$, " ")) { explode(.@words$, .@n$, " "); .@n2$ = .@words$[0]; deletearray .@words$[0],1; .@n$ = implode(.@words$[0], " "); } areamonster 'mh_map$,.@x-3,.@y-3,.@x+3,.@y+3,.@n$,.@id,1, instance_npcname(strnpcinfo(0)) + "::OnMobDead"; 'mh_gid = $@mobid[0]; if (.@n2$ != "") setunittitle 'mh_gid, .@n2$; .@n2$ = ""; } sleep 3000; instance_announce 0, "Time Limit : 50 min",bc_map; viewpointmap 'mh_map$,1,.@x,.@y,2,0xFF0000; viewpointmap 'mh_map$,1,.@x,.@y,1,0xFF00FF; end; OnMobDead: //Spawning Enraged Great Duneyrr if ('mh_low_hunting == 4) { if (getunitname('mh_gid) == "Great Duneyrr") { getunitdata 'mh_gid, .@data; monster 'mh_map$,.@data[UMOB_X],.@data[UMOB_Y],"Enraged " + getunitname('mh_gid),.@data[UMOB_CLASS],1, instance_npcname(strnpcinfo(0)) + "::OnMobDead"; 'mh_gid = $@mobid[0]; end; } } if (mobcount('mh_map$, instance_npcname(strnpcinfo(0)) + "::OnMobDead")) { instance_announce 0, "The monster has been slain, but there are still more to be hunted.",bc_map; end; } donpcevent instance_npcname(strnpcinfo(0)) + "::OnReward"; instance_announce 0, "Mission Complete, Returning to Hunter's Guild in 5 seconds.",bc_map; sleep 5000; mapwarp 'mh_map$,"prontera",60,205; instance_destroy; end; OnReward: .@mob_id = getd(".MHlow_mob_id" + 'mh_low_hunting + "[0]"); if (getmobdrops(.@mob_id)) { .@count = $@MobDrop_count; copyarray .@item[0],$@MobDrop_item[0],.@count; copyarray .@rate[0],$@MobDrop_rate[0],.@count; for( .@i = 0; .@i < .@count; .@i++ ) { if (rand(10000) < .@rate[.@i]) { .@samedrop = inarray('mh_reward_id, .@item[.@i]); if (.@samedrop == -1) { 'mh_reward_id[.@rewardindex] = .@item[.@i]; 'mh_reward_amt[.@rewardindex] = 1; .@rewardindex++; } else 'mh_reward_amt[.@samedrop]++; } } } addrid(5, 0, 'mh_map$); .@s = getarraysize('mh_reward_id); for ( .@k = 0; .@k < getarraysize('mh_reward_id); .@k++ ) { if (checkweight('mh_reward_id[.@k], 'mh_reward_amt[.@k])) { if (double_mh_reward) getitem 'mh_reward_id[.@k], 'mh_reward_amt[.@k] * 2; else getitem 'mh_reward_id[.@k], 'mh_reward_amt[.@k]; } else dispbottom "You can't get x" + 'mh_reward_amt[.@k] + " " + getitemname('mh_reward_id[.@k]) + " because you're overweight."; } if (double_mh_reward) { dispbottom "You received increased loot with Neko's help!"; double_mh_reward = false; } MH_low_hunted['mh_low_hunting] = gettime(DT_YYYYMMDD); end; function AddHunt { $@MH2low_huntid[getarraysize($@MH2low_huntid)] = getarg(0); if (getargcount() > 1) $@MH2low_title$[getarg(0)] = getarg(1); return; } function AddMonster { .MHlow_mob_x[getarg(0)] = getarg(1); .MHlow_mob_y[getarg(0)] = getarg(2); for(.@i = 3; .@i < getargcount(); .@i += 2) { if (getmonsterinfo(getarg(.@i),MOB_NAME) == "null") { errormes "Monster Hunt id #"+getarg(.@i)+" invalid (skipped)."; return; } else { .@a = getarraysize(getd(".MHlow_mob_id" + getarg(0))); setd(".MHlow_mob_id" + getarg(0) + "[" + .@a + "]"), getarg(.@i); setd(".MHlow_mob_name" + getarg(0) + "$[" + .@a + "]"), getarg(.@i+1); } } if ($@MH2low_title$[getarg(0)] == "") $@MH2low_title$[getarg(0)] = getd(".MHlow_mob_name" + getarg(0) + "$[0]"); return; } } Quote Link to comment Share on other sites More sharing options...
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.