Jump to content

Quests, Games: Endless Tower Instance with Difficulty


Recommended Posts

  • 3 weeks later...

  • Group:  Members
  • Topic Count:  271
  • Topics Per Day:  0.08
  • Content Count:  792
  • Reputation:   20
  • Joined:  11/21/15
  • Last Seen:  

How can I make this instance 2x a week or 3x a week?

thank you!

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  271
  • Topics Per Day:  0.08
  • Content Count:  792
  • Reputation:   20
  • Joined:  11/21/15
  • Last Seen:  

On 12/4/2024 at 7:31 AM, lipezpe said:

Hello Guys!

Help pls? 2023 version.

@Louis T Steinhil pls

image.png.b2548053ba7373f9c1ea806aa6379ca5.png

Check this line

.@level_mode = select(
							"[ Level 50+ ] Normal", 
							"[ Level 100+ ] Veteran", 
							"[ Level 150+ ] Nightmare",
							"[ Level 200+ ] Hell",
							"[ Level 240+ ] ^ff0000Torment^000000"
						);
						$ENDLESSMODE[getcharid(1)] = .@level_mode;
						set .@required_level, 0;

						if (.@level_mode == 1) { .@required_level = 50; }
						else if (.@level_mode == 2) { .@required_level = 100; }
						else if (.@level_mode == 3) { .@required_level = 150; }
						else if (.@level_mode == 4) { .@required_level = 200; }
						else if (.@level_mode == 5) { .@required_level = 255; } // Change this to your server max level

						if (!instance_check_party(getcharid(1), .@online_members_count, .@required_level, 255)) { // Change this to your server max level

 

Link to comment
Share on other sites

  • 5 months later...

  • Group:  Members
  • Topic Count:  271
  • Topics Per Day:  0.08
  • Content Count:  792
  • Reputation:   20
  • Joined:  11/21/15
  • Last Seen:  

Posted (edited)

Hi @Louis T Steinhil can I ask if you can add a command how many E_tower points you have, so you dont need to bother going back to the NPC

also I tried to finish the instance how ever no points acquired no errors in console, also I cant enter back to fight naugth seiger is that normal on your script

 

Thank you!

Additional : Also no announcement upon finishing the dungeon

using the torch to jump in some floors have this error in console

image.png.4ee424753ac10bfeebd0514a9090b1dc.png

 

where can I find this NPC tried to warp on it but no NPC shows

2@tower,71,1,0	script	#Manager Mode2	406,{
	callfunc "F_GM_NPC";
	mes "Please enter the password.";
	set .@i, callfunc("F_GM_NPC","dmc2008",1);
	next;
	if (.@i == 1) {
		mes "This NPC manages the tower from the 26st to the 50th Level.";
		mes "Please enter the Level number to open.";
		mes "(i.g.: 26F->26, 50F->50)";
		input .@input,26,50;
		next;
		if (.@onput < 26 || .@input > 50)
			mes "You can only enter a number from 26 to 50.";
		else {
			donpcevent instance_npcname(.@input+"FGate102tower")+"::OnEnable";
			mes "*** Level "+ .@input + " is now being opened. ***";
		}
	}
	close;
}

 

Edited by AinsLord
Link to comment
Share on other sites


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

Posted (edited)
4 hours ago, AinsLord said:

where can I find this NPC tried to warp on it but no NPC shows

The NPC is in the empty space between floors. You can use @jump 53 8 to get close to it.
image.thumb.png.6f85c5b7ee62f858abb89d849c30435c.png

4 hours ago, AinsLord said:

can I ask if you can add a command how many E_tower points you have, so you dont need to bother going back to the NPC

-	script	ShowEndlessTowerPoints	-1,{
OnAtcommand:
	.@size = getarraysize($@difficulty_mode$);
	if (!.@size) {
		dispbottom "Please talk to the Tower Protection Stone first.";
		end;
	}
	dispbottom "====================";
	dispbottom "ENDLESS TOWER POINTS";
	for (.@i = 1; .@i < .@size; .@i++)
		dispbottom $@difficulty_mode$[.@i] + ": " + getd("#" + $@var_names$[.@i]);
	dispbottom "====================";
	end;

OnInit:
	bindatcmd "ETpoints",strnpcinfo(3)+"::OnAtcommand";
	end;
}

 

Edited by Racaae
additional answer added
  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  271
  • Topics Per Day:  0.08
  • Content Count:  792
  • Reputation:   20
  • Joined:  11/21/15
  • Last Seen:  

Posted (edited)
8 hours ago, Racaae said:

The NPC is in the empty space between floors. You can use @jump 53 8 to get close to it.
image.thumb.png.6f85c5b7ee62f858abb89d849c30435c.png

-	script	ShowEndlessTowerPoints	-1,{
OnAtcommand:
	.@size = getarraysize($@difficulty_mode$);
	if (!.@size) {
		dispbottom "Please talk to the Tower Protection Stone first.";
		end;
	}
	dispbottom "====================";
	dispbottom "ENDLESS TOWER POINTS";
	for (.@i = 1; .@i < .@size; .@i++)
		dispbottom $@difficulty_mode$[.@i] + ": " + getd("#" + $@var_names$[.@i]);
	dispbottom "====================";
	end;

OnInit:
	bindatcmd "ETpoints",strnpcinfo(3)+"::OnAtcommand";
	end;
}

 

Thanks sir appreciated

how about this error i've been checking this one on how to fix it hehehe still no luck

using the dust item to teleport from floors

image.png.e6903673daf147999165a6f6cc21da3a.png

also the access in floor to the 101F

EDIT: @Racaae seems no NPC on my end

image.png.4a0bac778effa97871d33664b8a806be.png

 

Edited by AinsLord
Link to comment
Share on other sites


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

On 5/23/2025 at 11:08 PM, AinsLord said:

how about this error i've been checking this one on how to fix it hehehe still no luck

using the dust item to teleport from floors

also the access in floor to the 101F

The player is talking to the NPC in the original (non-instanced) map. The script is supposed to be used only inside the instance.
 

On 5/23/2025 at 11:08 PM, AinsLord said:

EDIT: @Racaae seems no NPC on my end

You're right. The NPC is too far from the edge for you to see it. I'm able to see it because my view range is increased. You could move it to somewhere closer, make it cloaked and uncloak just for GMs/ADMs.
 

On 12/20/2024 at 3:40 PM, AinsLord said:

How can I make this instance 2x a week or 3x a week?

thank you!

I added the option to count weekly entrances. You still need to change the cooldown time of the quest. If you want to try it, replace the whole Stone NPC.

e_tower,81,105,0	script	Tower Protection Stone	2_MONEMUS,{
	$@etower_allow_reenter = true; //Allow reentering same Endless Tower. (true/false)
	$@etower_weekly_type = 1; // 0=no weekly limit. 1=distinct ET weekly entry limit. 2=gain points weekly limit.
	$@etower_weekly_limit = 3; //how many times per week at max?

// GM Bypass
//============================================================
	if(getgroupid() > 90){
        mes "GM Options";
		next;
        switch(select("Main Menu", "Reset Cooldowns", "Destroy Instance")){
			case 1: break;
			case 2: 
				if(isbegin_quest(60200))
					erasequest(60200);
				if(isbegin_quest(60201))
					erasequest(60201);
				etower_timer = 0;
				//etower_instanceid = 0;
				etower_weekly_count = 0;
				etower_week_cd = 0;
				etower_year_cd = 0;
				end;
			case 3:
				if(instance_id(IM_PARTY))
					instance_destroy instance_id(IM_PARTY);
				end;
        }
    }
//============================================================
	set .@party_id, getcharid(1);
	getpartymember .@party_id, 1;
	set .@online_members_count, $@partymembercount;
	set .@md_name$,"Endless Tower";	
	set .@etower_timer,checkquest(60200,PLAYTIME); // 1 week
	set .@etower_timer2,checkquest(60201,PLAYTIME); // 4 hours
	callfunc "F_Tower_Settings";
	
	//if (!instance_check_party(.@party_id,2)) {
	//	mes "Make or join a party with more than 1 member and try again.";
	//	close;
	//}
	switch(.@etower_timer) {
		case -1:
			if ($@etower_weekly_type == 1 && $@etower_weekly_limit) {
				.@week = atoi(gettimestr("%V",5));
				.@year = gettime(DT_YEAR);
				if (etower_week_cd != .@week || etower_year_cd != .@year) {
				    etower_weekly_count = 0;
				}
				.@remaining = $@etower_weekly_limit - etower_weekly_count;
				mes "^0000ffYou can only enter " + ($@etower_allow_reenter?"distinct":"the") + " " + .@md_name$ + " " + ($@etower_weekly_limit>1?$@etower_weekly_limit + " times":"once") + " a week.^000000";
				if (etower_weekly_count >= $@etower_weekly_limit) {
					next;
					switch(select("Difficulty Information","Return to Alberta","Cancel")) {
						case 1:
							callsub L_Info;
						case 2:
							mes "It is dangerous here. Let me move you to Alberta.";
							close2;
							warp "alberta",223,36;
							end;
						case 3:
							end;
					}
				}
				if (etower_weekly_count)
					mes "You can still enter " + (.@remaining!=1?.@remaining + " times":"once") + ".";
			}
			if (is_party_leader() == true) {		
				mes "Confirmed the party has been made. Would you like to reserve entrance to the " + .@md_name$ + "?";
				next;			
				switch(select(
				( .@party_id && getpartyleader(.@party_id,2) && !instance_id(IM_PARTY) )? "Generate dungeon "+.@md_name$:"",
				( .@party_id && instance_id(IM_PARTY) )?"Enter the dungeon":"",
				"Return to Alberta",
				"Difficulty Information",
				"Cancel")){
					case 1:
		// Difficulty 
		//============================================================
		
						.@level_mode = select(
							"[ Level 50+ ] Normal", 
							"[ Level 100+ ] Veteran", 
							"[ Level 150+ ] Nightmare",
							"[ Level 200+ ] Hell",
							"[ Level 240+ ] ^ff0000Torment^000000"
						);
						$ENDLESSMODE[getcharid(1)] = .@level_mode;
						set .@required_level, 0;

						if (.@level_mode == 1) { .@required_level = 50; }
						else if (.@level_mode == 2) { .@required_level = 100; }
						else if (.@level_mode == 3) { .@required_level = 150; }
						else if (.@level_mode == 4) { .@required_level = 200; }
						else if (.@level_mode == 5) { .@required_level = 260; }

						if (!instance_check_party(getcharid(1), .@online_members_count, .@required_level)) {
							mes "All party members need to be at least Level " + .@required_level + " to enter."; 
							close;				
						} 
						
						mes "Your party meets the Memorial Dungeon requirements.";				
						announce "The party [ " + getpartyname(.@party_id) + " ] has registered "+.@md_name$+" on " + $@difficulty_mode$[.@level_mode] + ".", bc_all;
						instance_create("Endless Tower");
						close;					
							
		//=============================================================
					case 2:
						callsub L_Enter,0,1;
					case 3:
						mes "I will move you to Alberta.";
						close2;
						warp "alberta",223,36;
						end;
					case 4:
						callsub L_Info;
					case 5:
						close;
					}
				}
				switch(select("Enter the "+.@md_name$,"Difficulty Information","Return to Alberta","Cancel")) {
					case 1:
						callsub L_Enter,0,1,1;
					case 2:
						callsub L_Info;
					case 3:
						mes "I will move you to Alberta.";
						close2;
						warp "alberta",223,36;
						end;
					case 4:
						end;
				}
		case 0:
		case 1:
			if ($@etower_allow_reenter && .@etower_timer2 < 2 && etower_instanceid == instance_id(IM_PARTY) && instance_live_info(ILI_NAME,instance_id(IM_PARTY)) == .@md_name$) {
				mes "If you have the dungeon generated already, you can enter it. ";
				next;
				switch(select("Enter the "+.@md_name$,"Difficulty Information","Return to Alberta","Cancel")) {
				case 1:
					callsub L_Enter,0,0;
				case 2:
					callsub L_Info;
				case 3:
					mes "I will move you to Alberta.";
					close2;
					warp "alberta",223,36;
					end;
				case 4:
					close;
				}
			}
			.@dun_lim_time = etower_timer+604800; // 1 week
			// .@dun_lim_time2 = etower_timer+14400; // 4 hours
			set .@dun_cur_time,gettimetick(2);
			set .@dun_ent_t,(.@dun_lim_time - .@dun_cur_time);
			set .@dun_h,(.@dun_ent_t / 3600);
			set .@dun_m,(.@dun_ent_t - (.@dun_h * 3600)) / 60;
			set .@dun_s,.@dun_ent_t - ((.@dun_h * 3600) + (.@dun_m * 60));
			
			if (.@dun_h > 23)
				mes "Due to the tower's aftereffects, you cannot enter the dungeon right now, " + Time2Str(.@dun_lim_time) + " left to enter the next dungeon.";
			else
				mes "Due to the tower's aftereffects, you cannot enter the dungeon right now, " + .@dun_h + "hours " + .@dun_m + "minutes " + .@dun_s + "seconds left to enter the next dungeon.";
			next;
			switch(select("Difficulty Information","Return to Alberta","Cancel")) {
				case 1:
					callsub L_Info;
				case 2:
					mes "It is dangerous here. Let me move you to Alberta.";
					close2;
					warp "alberta",223,36;
					end;
				case 3:
					end;
			}
		case 2:
			etower_timer = 0;
			erasequest 60200;
			erasequest 60201;
			if ($@etower_weekly_type == 1 && $@etower_weekly_limit) {
				mes "^0000ffThe after effects related to the Endless Tower have been removed.^000000";
				.@week = atoi(gettimestr("%V",5));
				.@year = gettime(DT_YEAR);
				if (etower_week_cd != .@week || etower_year_cd != .@year) {
				    etower_weekly_count = 0;
				    etower_week_cd = 0;
				    etower_year_cd = 0;
					mes "^0000ffYou can generate and enter the Endless Tower again.^000000";
					close;
				}
				mes "^0000ffBut there are stronger after effects. You can only enter " + ($@etower_allow_reenter?"distinct":"the") + " " + .@md_name$ + " " + (etower_weekly_count!=1?etower_weekly_count + " times":"once") + " a week.^000000";
				.@remaining = $@etower_weekly_limit - etower_weekly_count;
				if (etower_weekly_count >= $@etower_weekly_limit)
					mes "^0000ffWait till next week.^000000";
				else
					mes "^0000ffYou can still enter " + (.@remaining!=1?.@remaining + " times":"once") + " this week.^000000";
			}
			else
				mes "^0000ffThe records and after effects related to the Endless Tower have been removed. You can generate and enter the Endless Tower again.^000000";
			close;
	}

L_Info:
	mes "[ Difficulty Information ]";
	mes "^ff0000-------------------------------------------^000000";
	mes "Difficulty Level: ^ff0000[ " + $@difficulty_mode$[1] + " ]^000000";
	mes "Monster max hp: + ^ff0000[ " + $@easy_mode_variables[0] + "% ]^000000";
	mes "Monster damage: + ^ff0000[ " + $@easy_mode_variables[1] + "% ]^000000";
	mes "Monster takes less damage: ^ff0000[ " + $@easy_mode_variables[2] + "% ]^000000";
	mes "Monster def: + ^ff0000[ " + $@easy_mode_variables[3] + "% ]^000000";
	mes "Monster mdef: + ^ff0000[ " + $@easy_mode_variables[4] + "% ]^000000";
	mes "Monster hit: + ^ff0000[ " + $@easy_mode_variables[5] + "% ]^000000";
	mes "Monster flee: + ^ff0000[ " + $@easy_mode_variables[6] + "% ]^000000";
	mes "Monster bonus exp reward: x ^ff0000[ " + $@bonus_exp[1] + " ]^000000";
	mes ""+.@md_name$ +" Easy Points: + ^ff0000[ " + $@instance_points[1] + " ]^000000";
	mes "^ff0000-------------------------------------------^000000";
	next;
	mes "[ Difficulty Information ]";
	mes "^ff0000-------------------------------------------^000000";
	mes "Difficulty Level: ^ff0000[ " + $@difficulty_mode$[2] + " ]^000000";
	mes "Monster max hp: + ^ff0000[ " + $@veteran_mode_variables[0] + "% ]^000000";
	mes "Monster damage: + ^ff0000[ " + $@veteran_mode_variables[1] + "% ]^000000";
	mes "Monster takes less damage: ^ff0000[ " + $@veteran_mode_variables[2] + "% ]^000000";
	mes "Monster def: + ^ff0000[ " + $@veteran_mode_variables[3] + "% ]^000000";
	mes "Monster mdef: + ^ff0000[ " + $@veteran_mode_variables[4] + "% ]^000000";
	mes "Monster hit: + ^ff0000[ " + $@veteran_mode_variables[5] + "% ]^000000";
	mes "Monster flee: + ^ff0000[ " + $@veteran_mode_variables[6] + "% ]^000000";
	mes "Monster bonus exp reward: x ^ff0000[ " + $@bonus_exp[2] + " ]^000000";
	mes ""+.@md_name$ +" Veteran Points: + ^ff0000[ " + $@instance_points[2] + " ]^000000";
	mes "^ff0000-------------------------------------------^000000";
	next;
	mes "[ Difficulty Information ]";
	mes "^ff0000-------------------------------------------^000000";
	mes "Difficulty Level: ^ff0000[ " + $@difficulty_mode$[3] + " ]^000000";
	mes "Monster max hp: + ^ff0000[ " + $@nightmare_mode_variables[0] + "% ]^000000";
	mes "Monster damage: + ^ff0000[ " + $@nightmare_mode_variables[1] + "% ]^000000";
	mes "Monster takes less damage: ^ff0000[ " + $@nightmare_mode_variables[2] + "% ]^000000";
	mes "Monster def: + ^ff0000[ " + $@nightmare_mode_variables[3] + "% ]^000000";
	mes "Monster mdef: + ^ff0000[ " + $@nightmare_mode_variables[4] + "% ]^000000";
	mes "Monster hit: + ^ff0000[ " + $@nightmare_mode_variables[5] + "% ]^000000";
	mes "Monster flee: + ^ff0000[ " + $@nightmare_mode_variables[6] + "% ]^000000";
	mes "Monster bonus exp reward: x ^ff0000[ " + $@bonus_exp[3] + " ]^000000";
	mes ""+.@md_name$ +" Nightmare Points: + ^ff0000[ " + $@instance_points[3] + " ]^000000";
	mes "^ff0000-------------------------------------------^000000";
	next;
	mes "[ Difficulty Information ]";
	mes "^ff0000-------------------------------------------^000000";
	mes "Difficulty Level: ^ff0000[ " + $@difficulty_mode$[4] + " ]^000000";
	mes "Monster max hp: + ^ff0000[ " + $@hell_mode_variables[0] + "% ]^000000";
	mes "Monster damage: + ^ff0000[ " + $@hell_mode_variables[1] + "% ]^000000";
	mes "Monster takes less damage: ^ff0000[ " + $@hell_mode_variables[2] + "% ]^000000";
	mes "Monster def: + ^ff0000[ " + $@hell_mode_variables[3] + "% ]^000000";
	mes "Monster mdef: + ^ff0000[ " + $@hell_mode_variables[4] + "% ]^000000";
	mes "Monster hit: + ^ff0000[ " + $@hell_mode_variables[5] + "% ]^000000";
	mes "Monster flee: + ^ff0000[ " + $@hell_mode_variables[6] + "% ]^000000";
	mes "Monster bonus exp reward: x ^ff0000[ " + $@bonus_exp[4] + " ]^000000";
	mes ""+.@md_name$ +" Hell Points: + ^ff0000[ " + $@instance_points[4] + " ]^000000";
	mes "^ff0000-------------------------------------------^000000";
	next;
	mes "[ Difficulty Information ]";
	mes "^ff0000-------------------------------------------^000000";
	mes "Difficulty Level: ^ff0000[ " + $@difficulty_mode$[5] + " ]^000000";
	mes "Monster max hp: + ^ff0000[ " + $@torment_mode_variables[0] + "% ]^000000";
	mes "Monster damage: + ^ff0000[ " + $@torment_mode_variables[1] + "% ]^000000";
	mes "Monster takes less damage: ^ff0000[ " + $@torment_mode_variables[2] + "% ]^000000";
	mes "Monster def: + ^ff0000[ " + $@torment_mode_variables[3] + "% ]^000000";
	mes "Monster mdef: + ^ff0000[ " + $@torment_mode_variables[4] + "% ]^000000";
	mes "Monster hit: + ^ff0000[ " + $@torment_mode_variables[5] + "% ]^000000";
	mes "Monster flee: + ^ff0000[ " + $@torment_mode_variables[6] + "% ]^000000";
	mes "Monster bonus exp reward: x ^ff0000[ " + $@bonus_exp[5] + " ]^000000";
	mes ""+.@md_name$ +" Torment Points: + ^ff0000[ " + $@instance_points[5] + " ]^000000";
	mes "^ff0000-------------------------------------------^000000";
	close;

L_Enter:
	addrid(2,0,getcharid(1));
	.@party_id = getcharid(1);
	.@md_name$ = "Endless Tower";
	.@etower_timer = checkquest(60200,PLAYTIME); // 1 week
	.@etower_timer2 = checkquest(60201,PLAYTIME); // 4 hours
	if (.@etower_timer == 2) {
		erasequest 60200;
		erasequest 60201;
	}
	if (strcharinfo(3) != strnpcinfo(4)) end;
	if ($@etower_allow_reenter && .@etower_timer2 < 2 && etower_instanceid == instance_id(IM_PARTY) && instance_live_info(ILI_NAME,instance_id(IM_PARTY)) == .@md_name$)
		.@reentering = true;
	else {
		if ($@etower_weekly_type == 1 && $@etower_weekly_limit) {
			.@week = atoi(gettimestr("%V",5));
			.@year = gettime(DT_YEAR);
			if (etower_week_cd != .@week || etower_year_cd != .@year) {
			    etower_weekly_count = 0;
			}
			else if (etower_weekly_count >= $@etower_weekly_limit) {
				mes "^0000ffThere are stronger after effects. You can only enter " + ($@etower_allow_reenter?"distinct":"the") + " " + .@md_name$ + " " + (etower_weekly_count!=1?etower_weekly_count + " times":"once") + " a week.^000000";
				mes "^0000ffWait till next week.^000000";
				close;
			}
		}
		if (.@etower_timer == 0 || .@etower_timer == 1) {
			mes "Due to the tower's aftereffects, you cannot enter right now.";
			open_quest_ui 60200;
			close;
		}
	}
	switch(instance_enter("Endless Tower",-1,-1,getcharid(0),instance_id(IM_PARTY))) {
	case IE_OTHER:
		mes "An unknown error has occurred.";
		close;
	case IE_NOINSTANCE:
		mes "The memorial dungeon Endless Tower does not exist.";
		mes "The party leader did not generate the dungeon yet.";
		close;
	case IE_NOMEMBER:
		mes "You can enter the dungeon after making the party.";
		close;
	case IE_OK:
		//if (getarg(1)) {
		if (!isbegin_quest(60200) && !.@reentering) {
			etower_timer = gettimetick(2);
			etower_instanceid = instance_id(IM_PARTY);
			setquest 60200;
			setquest 60201;
			etower_weekly_count++;
			etower_week_cd = .@week;
			etower_year_cd = .@year;
		}
		//warpparty instance_mapname("1@tower"),52,354,getcharid(1);
		//warp "1@tower",52,354;
		//if (getarg(0,0) == 0) close;
		end;
	}
}

 

Edited by Racaae
added script
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...