Jump to content

Recommended Posts

  • 5 years later...
Posted
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;
	}
}

 

 

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.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...