pajodex Posted January 18, 2020 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
Naruto Posted January 18, 2020 Posted January 18, 2020 (edited) Edited January 18, 2020 by Naruto Quote
Rododark Posted May 14 Posted May 14 How can I get that script? Or a similar one? It's very good. Quote
Racaae Posted May 16 Posted May 16 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
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.