Jump to content

Question

Hi all. May I know why the monster not spawn ?

I also have some warning which is:

[Warning]: script_get_val: cannot access player variable 'mf_nogo', defaulting to 0

How to fix ?

prontera,164,172,5	script	Farm Zone	4_F_JPN2,{function	RandomizeItem;while( 1 ){mes "How can i help you ?";switch( select( "Information:Farm Items" )){case 1:	mes "This is a Farm Zone.";	mes "You are able to Hunt Monster inside this Room.";	mes "Every Monster will award you random items.";	next;	mes "But there is some Condition..";	mes "You can only go in ^FF0000once every "+.RoomCleanMin+" minutes for 1 times.^000000";	mes "And Maximum of ^FF0000"+.MaxPlayers+" Players per "+.RoomCleanMin+" Minutes.^000000";	mes "Maximum Hunting Limit ^FF0000"+.MaxItemLimit+"^000000";	next;	mes "There will be a ^FF0000Room Cleaning^000000 from time to time...";	mes "All players will be kicked out, it is your bad luck if you meet this.";	mes "Delay will still apply even though you just go in for 1 Seconds..";	next;	break;case 2:	if( #HuntRoomDelay > gettimetick(2) ){		set .last,#HuntRoomDelay - gettimetick(2);		set .@min,  .last % ( 24 * 3600 ) % 3600 / (60);		mes "Wait for ^FF0000"+.@min+" Minutes^000000.";		close;	}else if( getarraysize( .Hunter ) >= .MaxPlayers ){		mes "Currently the Room is Full. Please try again later.";		close;	}else{		warp .Map$,0,0;		set .Hunter[getarraysize( .Hunter )],strcharinfo(0);		set #HuntRoomDelay,gettimetick(2) + ( .DelayMin * 60 );		set #FarmHunt,0;		end;		}	}}OnInit:// Maximum Player can join per X Minutes.set .MaxPlayers,2;// Adding X Minutes of Delay before can go in again.set .DelayMin,1;// Maximum Hunt Limit per round inside the Zone.set .MaxItemLimit,10;// Map that will be used in thos Zone.set .Map$,"guild_vs5";// Clear Map Every X Minutes.set .RoomCleanMin,15;// Mapflag Initialization//setmapflag .Map$,mf_nogo;setmapflag .Map$,mf_nomobloot;setmapflag .Map$,mf_nomvploot;setmapflag .Map$,mf_nowarpto;setmapflag .Map$,mf_nochat;setmapflag .Map$,mf_novending;setmapflag .Map$,mf_nocommand,60;setmapflag .Map$,mf_nogo;setmapflag .Map$,mf_nojobexp;setmapflag .Map$,mf_nobaseexp;while( 1 ){	killmonster .Map$,"All";	mapwarp .Map$,"prontera",155,181;	monster .Map$,0,0,"[ Farm Zone ] Resident",-1,80,strnpcinfo(0)+"::OnNormalKill";	monster .Map$,0,0,"[ Farm Zone ] Guardian",-3,5,strnpcinfo(0)+"::OnBossKill";	deletearray .Hunter,getarraysize( .Hunter );	announce "[ Farm Zone ] : Farming Zone has been Cleaned up, another 5 Players may go in now.",bc_blue;	sleep ( .RoomCleanMin * 60000 );	mapannounce .Map$,"[ Farm Zone ] : Room Clean Up now...All Users will be warped Out.",0;	killmonster .Map$,"All";	sleep 3000;	}end;OnNormalKill:RandomizeItem( 0,rand(1,5) );monster .Map$,0,0,"--ja--",-1,1,strnpcinfo(0)+"::OnNormalKill";end;OnBossKill:RandomizeItem( 1,rand(1,3) );monster .Map$,0,0,"--ja--",-3,1,strnpcinfo(0)+"::OnBossKill";end;// Function that used to Generate Random Itemsfunction	RandomizeItem	{set #FarmHunt,#FarmHunt + getarg(1);// Normal Monster in Zone Drops Listsif( getarg(0) == 0 ) setarray .ItemList[0],13989,14232,13517,7139,12033,12016,14534;// Normal Boss in Zone Drops Listsif( getarg(0) == 1 ) setarray .ItemList[0],14536,12912,12267,12266,14601,13830,13831,13832,13833;for( set .@i,1; .@i <= getarg(1); set .@i,.@i + 1 ){	getitem .ItemList[ rand( getarraysize( .ItemList ) ) ],1;	}deletearray .ItemList,getarraysize( .ItemList );dispbottom "[ Farm Zone ] : Farmed "+#FarmHunt+" / "+.MaxItemLimit+" Items";if( #FarmHunt >= .MaxItemLimit ){	message strcharinfo(0),"Limit Reach , you may join again later.";	sleep2 2000;	warp "prontera",155,181;	}return;}	}				

 

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Please try this. Not Tested.
adjust syntax if erroneous.


this will:
1. Wait for a person to go in before spawning monsters
2. attaches a player timer to the first person who goes in marking the start of the existence of the event FarmZone
3. When timer expires, deletest player timer, warps players out, cleans the map, announces to the whole server that it is already usable by other players
4. Still warp out players when they reach Item hunting limit

 

prontera,164,172,5	script	Farm Zone	4_F_JPN2,{function	RandomizeItem;while( 1 ){mes "How can i help you ?";switch( select( "Information:Farm Items" )){case 1:	mes "This is a Farm Zone.";	mes "You are able to Hunt Monster inside this Room.";	mes "Every Monster will award you random items.";	next;	mes "But there is some Condition..";	mes "You can only go in ^FF0000once every "+.RoomCleanMin+" minutes for 1 times.^000000";	mes "And Maximum of ^FF0000"+.MaxPlayers+" Players per "+.RoomCleanMin+" Minutes.^000000";	mes "Maximum Hunting Limit ^FF0000"+.MaxItemLimit+"^000000";	next;	mes "There will be a ^FF0000Room Cleaning^000000 from time to time...";	mes "All players will be kicked out, it is your bad luck if you meet this.";	mes "Delay will still apply even though you just go in for 1 Seconds..";	next;	break;case 2:	if( #HuntRoomDelay > gettimetick(2) ){		set .last,#HuntRoomDelay - gettimetick(2);		set .@min,  .last % ( 24 * 3600 ) % 3600 / (60);		mes "Wait for ^FF0000"+.@min+" Minutes^000000.";		close;	}else if( getarraysize( .Hunter ) >= .MaxPlayers ){		mes "Currently the Room is Full. Please try again later.";		close;	}else{		if(!getmapusers(.Map$)) {//mrlongshen: Populate the map only when someone goes in and noone is in the map.			monster .Map$,0,0,"[ Farm Zone ] Resident",-1,80,strnpcinfo(0)+"::OnNormalKill";			monster .Map$,0,0,"[ Farm Zone ] Guardian",-3,5,strnpcinfo(0)+"::OnBossKill";			addtimer .RoomCleanMin*60*1000, strnpcinfo(0)+"::OnFarmCleanUp"; //add player timer to when he clean up is done		}//mrlongshen		warp .Map$,0,0;		set .Hunter[getarraysize( .Hunter )],strcharinfo(0);		set #HuntRoomDelay,gettimetick(2) + ( .DelayMin * 60 );		set #FarmHunt,0;		end;		}	}}end; //mrlongshenOnFarmCleanUp: //mrlongshen clean up algorithm	deltimer strnpcinfo(0)+"::OnFarmCleanUp";	killmonster .Map$,"All";	if(getarraysize( .Hunter ))		mapannounce .Map$,"[ Farm Zone ] : Room Clean Up now...All Users will be warped Out.",0;	sleep2 3000;	mapwarp .Map$,"prontera",155,181;	deletearray .Hunter,getarraysize( .Hunter );	announce "[ Farm Zone ] : Farming Zone has been Cleaned up, another "+.MaxPlayers+"	Players may go in now.",bc_blue; //tell people that the farm zone can now be used againend; //mrlongshenOnInit:// Maximum Player can join per X Minutes.set .MaxPlayers,2;// Adding X Minutes of Delay before can go in again.set .DelayMin,1;// Maximum Hunt Limit per round inside the Zone.set .MaxItemLimit,10;// Map that will be used in thos Zone.set .Map$,"guild_vs5";// Clear Map Every X Minutes.set .RoomCleanMin,15;// Mapflag Initializationsetmapflag .Map$,mf_nomobloot;setmapflag .Map$,mf_nomvploot;setmapflag .Map$,mf_nowarpto;setmapflag .Map$,mf_nochat;setmapflag .Map$,mf_novending;setmapflag .Map$,mf_nocommand,60;setmapflag .Map$,mf_nojobexp;setmapflag .Map$,mf_nobaseexp;end;OnNormalKill:RandomizeItem( 0,rand(1,5) );monster .Map$,0,0,"--ja--",-1,1,strnpcinfo(0)+"::OnNormalKill";end;OnBossKill:RandomizeItem( 1,rand(1,3) );monster .Map$,0,0,"--ja--",-3,1,strnpcinfo(0)+"::OnBossKill";end;// Function that used to Generate Random Itemsfunction	RandomizeItem	{set #FarmHunt,#FarmHunt + getarg(1);// Normal Monster in Zone Drops Listsif( getarg(0) == 0 ) setarray .ItemList[0],13989,14232,13517,7139,12033,12016,14534;// Normal Boss in Zone Drops Listsif( getarg(0) == 1 ) setarray .ItemList[0],14536,12912,12267,12266,14601,13830,13831,13832,13833;for( set .@i,1; .@i <= getarg(1); set .@i,.@i + 1 ){	getitem .ItemList[ rand( getarraysize( .ItemList ) ) ],1;	}deletearray .ItemList,getarraysize( .ItemList );dispbottom "[ Farm Zone ] : Farmed "+#FarmHunt+" / "+.MaxItemLimit+" Items";if( #FarmHunt >= .MaxItemLimit ){	message strcharinfo(0),"Limit Reached , you may join again later.";	sleep2 2000;	warp "prontera",155,181;	}return;}	}				
Edited by jezznarRox

Share this post


Link to post
Share on other sites
  • 0

can't see where is error that cause no mobs spawning except for mapflag nogo (not sure that will stop the script to run again or stop entirely at that point), there is 2 nogo in the first post in code box except that i think the script will run as supposed to be... if you want you can try this one

 

prontera,164,172,5	script	Farm Zone	4_F_JPN2,{	while(1) {		mes "How can i help you ?";		switch( select( "Information:Farm Items" )) {		case 1:			mes "This is a Farm Zone.";			mes "You are able to Hunt Monster inside this Room.";			mes "Every Monster will award you random items.";			next;			mes "But there is some Condition..";			mes "You can only go in ^FF0000once every "+.RoomCleanMin+" minutes for 1 times.^000000";			mes "And Maximum of ^FF0000"+.MaxPlayers+" Players per "+.RoomCleanMin+" Minutes.^000000";			mes "Maximum Hunting Limit ^FF0000"+.MaxItemLimit+"^000000";			next;			mes "There will be a ^FF0000Room Cleaning^000000 from time to time...";			mes "All players will be kicked out, it is your bad luck if you meet this.";			mes "Delay will still apply even though you just go in for 1 Seconds..";			next;			break;		case 2:			if (#HuntRoomDelay > gettimetick(2)) {				.@last = #HuntRoomDelay - gettimetick(2);				.@min = .@last % ( 24 * 3600 ) % 3600 / (60);				mes "Wait for ^FF0000"+.@min+" Minutes^000000.";				close;			} else if (getarraysize(.Hunter) >= .MaxPlayers ) {				mes "Currently the Room is Full. Please try again later.";				close;			} else {				warp .Map$,0,0;				.Hunter[getarraysize( .Hunter )] = strcharinfo(0);				#HuntRoomDelay = gettimetick(2) + ( .DelayMin * 60 );				#FarmHunt = 0;				end;			}		}	}OnInit:	function	RandomizeItem;	.MaxPlayers = 2;		// Maximum Player can join per X Minutes.	.DelayMin = 1;			// Adding X Minutes of Delay before can go in again.	.MaxItemLimit = 10;		// Maximum Hunt Limit per round inside the Zone.	.Map$ = "guild_vs5";	// Map that will be used in thos Zone.	.RoomCleanMin = 15;		// Clear Map Every X Minutes.		// Mapflag Initialization	setarray .@mapflag, mf_nomobloot, mf_nomvploot, mf_nowarp, mf_nowarpto, mf_nochat, mf_novending, mf_nojobexp, mf_nobaseexp;	for (.@i = 0; .@i < getarraysize(.@mapflag); .@i++)		setmapflag .Map$, .@mapflag[.@i];	setmapflag .Map$, mf_nocommand, 60;	while(1) {		killmonster .Map$,"All";		mapwarp .Map$,"prontera",155,181;		monster .Map$, 0, 0,"[ Farm Zone ] Resident", -1, 80, strnpcinfo(0)+"::OnNormalKill";		monster .Map$, 0, 0,"[ Farm Zone ] Guardian", -3,  5, strnpcinfo(0)+"::OnBossKill";		deletearray .Hunter,getarraysize( .Hunter );		announce "[ Farm Zone ] : Farming Zone has been Cleaned up, another 5 Players may go in now.",bc_blue;		sleep ( .RoomCleanMin * 60000 );		mapannounce .Map$,"[ Farm Zone ] : Room Clean Up now...All Users will be warped Out.",0;		killmonster .Map$,"All";		sleep 3000;	}	end;OnNormalKill:	RandomizeItem( 0,rand(1,5) );	monster .Map$,0,0,"--ja--",-1,1,strnpcinfo(0)+"::OnNormalKill";	end;OnBossKill:	RandomizeItem( 1,rand(1,3) );	monster .Map$,0,0,"--ja--",-3,1,strnpcinfo(0)+"::OnBossKill";	end;// Function that used to Generate Random Itemsfunction	RandomizeItem	{	#FarmHunt += getarg(1);		// Normal Monster in Zone Drops Lists	if( getarg(0) == 0 ) setarray .ItemList[0],13989,14232,13517,7139,12033,12016,14534;	// Normal Boss in Zone Drops Lists	if( getarg(0) == 1 ) setarray .ItemList[0],14536,12912,12267,12266,14601,13830,13831,13832,13833;		for(.@i = 1; .@i <= getarg(1); .@i++)		getitem .ItemList[rand(getarraysize(.ItemList))], 1;			deletearray .ItemList, getarraysize(.ItemList);	dispbottom "[ Farm Zone ] : Farmed "+#FarmHunt+" / "+.MaxItemLimit+" Items";	if (#FarmHunt >= .MaxItemLimit) {		message strcharinfo(0),"Limit Reach , you may join again later.";		sleep2 2000;		warp "prontera",155,181;	}	return;}}

Share this post


Link to post
Share on other sites
  • 0

can't see where is error that cause no mobs spawning except for mapflag nogo (not sure that will stop the script to run again or stop entirely at that point), there is 2 nogo in the first post in code box except that i think the script will run as supposed to be... if you want you can try this one

 

IMO, the problem is how the whole thing is logically structured :)

Share this post


Link to post
Share on other sites
  • 0

true... i have used this script before and the original script was fine before the user modified the script, the only thing can go wrong is script handler since the engine betwen emulator have huge different in one way or another, mf_nogo wasn't found in the hercules emulator db/const.txt that why it give the warning, since the question is why there is no mob spawning? i assumes the script stoped when mf_nogo throw the warning... CMIIW

 

AFAIK it was Emistry script released in rAthena, that mean if there was there and not here script user need to adjust the script to work intendedly

Share this post


Link to post
Share on other sites
  • 0

since the question is why there is no mob spawning? i assumes the script stoped when mf_nogo throw the warning... CMIIW

 

Well that's what I was thinking about before but @@mrlongshen also said that he has taken the mapflag off and yet still the script doesn't work. From what I see, I think it's about the logical flow of the script. It will get stuck in the "while" statement OnInit. Then when a player interacts with the NPC, it will go through the while statement on loop, and if the player chooses to cancel anything, the cleanup part of the script will not be triggered anymore.

IMO, This could've worked without modifications if the script for the cleanup was separated as a floating event script  but for my solution I chose to add a player timer instead :)

Edited by jezznarRox

Share this post


Link to post
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
Answer this question...

×   Pasted as rich text.   Restore formatting

  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.

Loading...

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.