Jump to content

[Showcase] Monster Hunting


pajodex

Recommended Posts


  • Group:  Members
  • Topic Count:  79
  • Topics Per Day:  0.03
  • Content Count:  439
  • Reputation:   173
  • Joined:  12/12/17
  • Last Seen:  

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!

 

 

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  20
  • Topics Per Day:  0.01
  • Content Count:  416
  • Reputation:   74
  • Joined:  05/16/19
  • Last Seen:  

?

Edited by Naruto
Link to comment
Share on other sites

  • 5 years later...

  • Group:  Members
  • Topic Count:  8
  • Topics Per Day:  0.00
  • Content Count:  52
  • Reputation:   8
  • Joined:  06/10/12
  • Last Seen:  

How can I get that script? Or a similar one? It's very good.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  0
  • Topics Per Day:  0
  • Content Count:  232
  • Reputation:   101
  • Joined:  06/02/12
  • Last Seen:  

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;
	}
}

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...