Jump to content
  • 0

WoE Guild Registration and Member Limiter.


Zaon

Question


  • Group:  Members
  • Topic Count:  19
  • Topics Per Day:  0.00
  • Content Count:  60
  • Reputation:   0
  • Joined:  07/30/12
  • Last Seen:  

Hello,

 

I saw a reply on this post about having a guild registration npc.

 

What does this NPC do exactly?

 

1. Only admins (GM Level 99) can access this npc.

2. Guilds can be registered for WoE SE Castles (Arunafeltz and Schwarzwald) by admins manually.

3. Checks if a guild is registered or not, if not they will be warped out.

4. Admins can set how many "online members" a guild is allowed to enter the castle, if the "online members" are more than the setting, the guild cannot enter the castle.

 

I read Stolao's reply but I don't know how to make this script, I've only just begun basic scripting.

 

I'm also using a script that warps people outside the castle if they don't have a guild.

 

Here's the script I'm using (I've only added the castle that I'm using [schg_cas03 viblainn])

-	script	CastleBlocker	-1,{
OnInit:
// Add more castle maps here:
setarray .map$,"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05","schg_cas03";
set .map_size,getarraysize(.map$);
for (.@i = 0; .@i < .map_size; .@i++)
setmapflag .map$[.@i],mf_loadevent;
end;

OnPCLoadMapEvent:
for (.@i = 0; .@i < .map_size; .@i++)
	if (strcharinfo(3) == .map$[.@i]) {
        if(!getcharid(2)) {
			mes "Sorry, you are not in a guild!";
			close2;
			warp "[email protected]<script data-cfhash='f9e31' type="text/javascript">/*  */</script>",194,208;
		}
		break;
	}
end;
}

Thanks to anyone who will try to help :)

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • -1

  • Group:  Members
  • Topic Count:  19
  • Topics Per Day:  0.00
  • Content Count:  60
  • Reputation:   0
  • Joined:  07/30/12
  • Last Seen:  

No problem, the script is working like a charm.

 

For anyone looking for the 'fixed' script, I'll post it below. Credits to PandaLovesHamster and everyone who worked on this script.

//Modified by - PandaLovesHamster
//Custom Guild Limiter

ayothaya,171,144,5	script	Guild Limiter 	833,{

// this part registers the guild
	function sf {
		function s;
		.@a = getarg(2);
		.@len = getarg(3);
		return (
			sprintf( getarg(0),
				s(.@a, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), 
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), 
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1))
			)
			+(( .@a+1 < .@len )?":Next":":")
			+(( .@a-11 > 0 )?":Back":":")
			+":Cancel"
		);
		function s {
			if( getarg(0) >= getarg(1) ) return "";
			else {
				.@name$ = getguildname(getelementofarray(getarg(2),getarg(0)));
				return .@name$=="null"?"":.@name$;
			}
		};
	};
	function nex { return((getarg(0)+10)<getarg(1)?getarg(0)+10:getarg(1)-(getarg(1)%10)); };
	function bac { return((getarg(0)-10)>=0?getarg(0)-10:0); };

	if(getgmlevel()>=80 ) {
		mes .Npc_Name$;
		mes "Hello Mr. GM what would you like to do?";
		next;
		switch( select("Add/Remove Guilds:Clear Guild Data:Player Menu:Cancel") ) {
			case 1:
				mes .Npc_Name$;
				mes "Would you like to add or remove a guild?";
				.@a_len = getarraysize($App_Guilds);
				.@format$ = "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s";
				next;
				if( select("Remove:Add") == 1 ) {
					while( .@a != 9999 ) {
						select( sf( .@format$, $App_Guilds, .@a, .@a_len ) );
						switch( @menu ) {
							case 11: .@a = nex( .@a, .@a_len ); break;
							case 12: .@a = bac( .@a ); break;
							case 13: end;
							
							default:
								.@select = .@a+@menu-1;
								mes .Npc_Name$;
								mes "You've selected ^0000FF["+getguildname($App_Guilds[.@select])+"]^000000 guild. Would you like to remove them from the accepted guilds?";
								next;
								if( select("Yes:No") == 1 ) {
									deletearray($App_Guilds[.@select],1);
									mes .Npc_Name$;
									mes "The guild has been removed!";
								}
								close;
						}
					}
				} else {
					mes .Npc_Name$;
					mes "Please input guild name or masters name.";
					next;
					input(.@input$);
					.@len = query_sql( "Select `guild_id` from `guild` where `name` like '%"+escape_sql(.@input$)+"%' or `master` like '%"+escape_sql(.@input$)+"%';",.@guild_id );
					while( .@a != 9999 ) {
						select( sf( .@format$, .@guild_id, .@a, .@len ) );
						switch( @menu ) {
							case 11: .@a = nex( .@a, .@len ); break;
							case 12: .@a = bac( .@a ); break;
							case 13: end;
							
							default:
								.@select = .@a+@menu-1;
								.@a_len = getarraysize($App_Guilds);
								for(.@b=0;.@b<.@a_len;.@b++)
									if( $App_Guilds[.@b]==.@guild_id[.@select] ) {
										mes .Npc_Name$;
										mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. I'm sorry but that guild has already been added to the accepted list.";
										close;
									}
								mes .Npc_Name$;
								mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. Would you like to add them to the accepted guilds?";
								next;
								if( select("Yes:No") == 1 ) {
									.@a_len = getarraysize($App_Guilds);
									if( .@a_len>=128 ) {
										mes .Npc_Name$;
										mes "I'm sorry but the accepted list is full please make some room and try again...";
									} else {
										mes .Npc_Name$;
										mes "The guild was successfully added!";
										$App_Guilds[.@a_len] = .@guild_id[.@select];
									}
								}
								close;
						}
					}
				}
			case 2:
				mes .Npc_Name$;
				mes "Are you sure you want to clear the guild data?!";
				next;
				if( select("Yes!:No!")==1 ) {
					mes .Npc_Name$;
					mes "This is you last chance. Are you surely sure as sure can be?";
					next;
					if( select("Surly!:No, wait... Where am I?!!")==1 )
						deletearray($App_Guilds);
				}
				if( @menu==1 ) {
					mes .Npc_Name$;
					mes "The deed is done...";
				} else {
					mes .Npc_Name$;
					mes "Wow that was a close one... Have a nice day!";
				}
				close;
				
			case 3: break;
			
			case 4:
				mes .Npc_Name$;
				mes "Alright, have a nice day!";
				close;
		}
	}

	.@len = getarraysize($App_Guilds);
	for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;
	}

	
// This part ejects players when they are in the map 
	OnPCLoadMapEvent:
	if( getcharid(2) == $App_Guilds[.@i] ){
	.count = 0;
	.@origin = getcharid(3);
	addrid 3, 0, getcharid(2);
	if ( strcharinfo(3) == .checkmap$ )
		.count++;
	if ( !.@origin ) end;
	if ( .count > 5 ) { // 5 means only 5 players per guild allowed in a map.
		message strcharinfo(0), "Your guild members are over the limit";
		sleep2 1000;
		warp "SavePoint", 0,0;
	}
	}
	end;
OnInit:
	setarray .@checkmap$, "arug_cas01", "arug_cas02", "arug_cas03", "arug_cas04", "arug_cas05", "schg_cas01", "schg_cas02", "schg_cas03", "schg_cas04", "schg_cas05";
	.@len = getarraysize( .@checkmap$ );
	for ( .@i = 0; .@i < .@size; .@i++ ) {
		setmapflag .@checkmap$[.@i], mf_loadevent;
		setd "."+ .@checkmap$[.@i], 1;
	}
	end;
}

-	script	kjdhfkjshf	-1,{
OnPCLoadMapEvent:
	if ( getmapflag( strcharinfo(3), mf_gvg_castle ) && ( agitcheck() || agitcheck2() )) {
	.@len = getarraysize($App_Guilds);
	for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;}
	}
	if( .@Guild_Check < 1 ) {
		dispbottom "Your guild has not yet been approved, please contact the GMs";
		sleep2 3000;
		warp "SavePoint",0,0;
		end;
	}
	if( !getcharid(2) ) {
		dispbottom "Sorry only members of a guild may enter a castle.";
		sleep2 3000;
		warp "SavePoint",0,0;
		end;
	}
	end;
OnInit:
	setarray .castles$[0],
		"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
		"payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
		"gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
		"aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
		"arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05",
		"schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05";
	for ( .@i = 0; .@i < 30; .@i++ )
		setmapflag .castles$[.@i], mf_loadevent;
	end;
}	
Edited by Zaon
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  51
  • Topics Per Day:  0.01
  • Content Count:  452
  • Reputation:   33
  • Joined:  12/18/14
  • Last Seen:  

Well  I was the one who asked the question first. Anyways, here's the finished script, though it's just a script created from copy-pasting people's already existing work.

Credits to the owners (I already  forgot their names) - Pretty sure one of them was AnnieRuru.

Note: This has been tested to work. The new addition in the script which I just added is not tested, particularly this part:

	if ( getmapflag( strcharinfo(3), mf_gvg_castle ) && ( agitcheck() || agitcheck2() )) {
	.@len = getarraysize($App_Guilds);
	for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;
	}
	if( .@Guild_Check < 1 ) {
		dispbottom "Your guild has not yet been approved, please contact the GMs";
		sleep2 3000;
		warp "SavePoint",0,0;
		end;
	}
	if( !getcharid(2) ) {
		dispbottom "Sorry only members of a guild may enter a castle.";
		close;	
	}

Main Script

//Modified by - PandaLovesHamster
//Custom Guild Limiter

ayothaya,171,144,5	script	Guild Limiter 	833,{

// this part registers the guild
	function sf {
		function s;
		.@a = getarg(2);
		.@len = getarg(3);
		return (
			sprintf( getarg(0),
				s(.@a, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)),
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), 
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1)), 
				s(.@a++, .@len, getarg(1)), s(.@a++, .@len, getarg(1))
			)
			+(( .@a+1 < .@len )?":Next":":")
			+(( .@a-11 > 0 )?":Back":":")
			+":Cancel"
		);
		function s {
			if( getarg(0) >= getarg(1) ) return "";
			else {
				.@name$ = getguildname(getelementofarray(getarg(2),getarg(0)));
				return .@name$=="null"?"":.@name$;
			}
		};
	};
	function nex { return((getarg(0)+10)<getarg(1)?getarg(0)+10:getarg(1)-(getarg(1)%10)); };
	function bac { return((getarg(0)-10)>=0?getarg(0)-10:0); };

	if(getgmlevel()>=80 ) {
		mes .Npc_Name$;
		mes "Hello Mr. GM what would you like to do?";
		next;
		switch( select("Add/Remove Guilds:Clear Guild Data:Player Menu:Cancel") ) {
			case 1:
				mes .Npc_Name$;
				mes "Would you like to add or remove a guild?";
				.@a_len = getarraysize($App_Guilds);
				.@format$ = "%s:%s:%s:%s:%s:%s:%s:%s:%s:%s";
				next;
				if( select("Remove:Add") == 1 ) {
					while( .@a != 9999 ) {
						select( sf( .@format$, $App_Guilds, .@a, .@a_len ) );
						switch( @menu ) {
							case 11: .@a = nex( .@a, .@a_len ); break;
							case 12: .@a = bac( .@a ); break;
							case 13: end;
							
							default:
								.@select = .@a+@menu-1;
								mes .Npc_Name$;
								mes "You've selected ^0000FF["+getguildname($App_Guilds[.@select])+"]^000000 guild. Would you like to remove them from the accepted guilds?";
								next;
								if( select("Yes:No") == 1 ) {
									deletearray($App_Guilds[.@select],1);
									mes .Npc_Name$;
									mes "The guild has been removed!";
								}
								close;
						}
					}
				} else {
					mes .Npc_Name$;
					mes "Please input guild name or masters name.";
					next;
					input(.@input$);
					.@len = query_sql( "Select `guild_id` from `guild` where `name` like '%"+escape_sql(.@input$)+"%' or `master` like '%"+escape_sql(.@input$)+"%';",.@guild_id );
					while( .@a != 9999 ) {
						select( sf( .@format$, .@guild_id, .@a, .@len ) );
						switch( @menu ) {
							case 11: .@a = nex( .@a, .@len ); break;
							case 12: .@a = bac( .@a ); break;
							case 13: end;
							
							default:
								.@select = .@a+@menu-1;
								.@a_len = getarraysize($App_Guilds);
								for(.@b=0;.@b<.@a_len;.@b++)
									if( $App_Guilds[.@b]==.@guild_id[.@select] ) {
										mes .Npc_Name$;
										mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. I'm sorry but that guild has already been added to the accepted list.";
										close;
									}
								mes .Npc_Name$;
								mes "You've selected ^0000FF["+getguildname(.@guild_id[.@select])+"]^000000 guild. Would you like to add them to the accepted guilds?";
								next;
								if( select("Yes:No") == 1 ) {
									.@a_len = getarraysize($App_Guilds);
									if( .@a_len>=128 ) {
										mes .Npc_Name$;
										mes "I'm sorry but the accepted list is full please make some room and try again...";
									} else {
										mes .Npc_Name$;
										mes "The guild was successfully added!";
										$App_Guilds[.@a_len] = .@guild_id[.@select];
									}
								}
								close;
						}
					}
				}
			case 2:
				mes .Npc_Name$;
				mes "Are you sure you want to clear the guild data?!";
				next;
				if( select("Yes!:No!")==1 ) {
					mes .Npc_Name$;
					mes "This is you last chance. Are you surely sure as sure can be?";
					next;
					if( select("Surly!:No, wait... Where am I?!!")==1 )
						deletearray($App_Guilds);
				}
				if( @menu==1 ) {
					mes .Npc_Name$;
					mes "The deed is done...";
				} else {
					mes .Npc_Name$;
					mes "Wow that was a close one... Have a nice day!";
				}
				close;
				
			case 3: break;
			
			case 4:
				mes .Npc_Name$;
				mes "Alright, have a nice day!";
				close;
		}
	}

	.@len = getarraysize($App_Guilds);
	for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;
	}

	
// This part ejects players when they are in the map 
	OnPCLoadMapEvent:
	if( getcharid(2) == $App_Guilds[.@i] ){
	.count = 0;
	.@origin = getcharid(3);
	addrid 3, 0, getcharid(2);
	if ( strcharinfo(3) == .checkmap$ )
		.count++;
	if ( !.@origin ) end;
	if ( .count > 5 ) { // 5 means only 5 players per guild allowed in a map.
		message strcharinfo(0), "Your guild members are over the limit";
		sleep2 2000;
		warp "SavePoint", 0,0;
	}
	}
	end;
OnInit:
	setarray .@checkmap$, "arug_cas01", "arug_cas02", "arug_cas03", "arug_cas04", "arug_cas05", "schg_cas01", "schg_cas02", "schg_cas03", "schg_cas04", "schg_cas05";
	.@len = getarraysize( .@checkmap$ );
	for ( .@i = 0; .@i < .@size; .@i++ ) {
		setmapflag .@checkmap$[.@i], mf_loadevent;
		setd "."+ .@checkmap$[.@i], 1;
	}
	end;
}

-	script	kjdhfkjshf	-1,{
OnPCLoadMapEvent:
	if ( getmapflag( strcharinfo(3), mf_gvg_castle ) && ( agitcheck() || agitcheck2() )) {
	.@len = getarraysize($App_Guilds);
	for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;
	}
	if( .@Guild_Check < 1 ) {
		dispbottom "Your guild has not yet been approved, please contact the GMs";
		sleep2 3000;
		warp "SavePoint",0,0;
		end;
	}
	if( !getcharid(2) ) {
		dispbottom "Sorry only members of a guild may enter a castle.";
		close;	
	}
	end;
OnInit:
	setarray .castles$[0],
		"prtg_cas01","prtg_cas02","prtg_cas03","prtg_cas04","prtg_cas05",
		"payg_cas01","payg_cas02","payg_cas03","payg_cas04","payg_cas05",
		"gefg_cas01","gefg_cas02","gefg_cas03","gefg_cas04","gefg_cas05",
		"aldeg_cas01","aldeg_cas02","aldeg_cas03","aldeg_cas04","aldeg_cas05",
		"arug_cas01","arug_cas02","arug_cas03","arug_cas04","arug_cas05",
		"schg_cas01","schg_cas02","schg_cas03","schg_cas04","schg_cas05";
	for ( .@i = 0; .@i < 30; .@i++ )
		setmapflag .castles$[.@i], mf_loadevent;
	end;
}	
  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  19
  • Topics Per Day:  0.00
  • Content Count:  60
  • Reputation:   0
  • Joined:  07/30/12
  • Last Seen:  

Wow! Thank you very much for sharing your script Panda /no1

 

You forgot to add a right curly here.

for( .@i=0; .@i <= .@len; .@i++ ) {
		if( getcharid(2) == $App_Guilds[.@i] )
			set .@Guild_Check, .@Guild_Check+1;

after .@Guild_Check+1;

 

and you forgot to add

        sleep2 1500;
	warp "SavePoint",0,0;

after 

if( !getcharid(2) ) {
		dispbottom "Sorry only members of a guild may enter a castle.";

I fixed my side, it works like a charm. Thank you again!

Edited by Zaon
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  51
  • Topics Per Day:  0.01
  • Content Count:  452
  • Reputation:   33
  • Joined:  12/18/14
  • Last Seen:  

Sorry for the lousy scripting. I just finished the script a few moments after I posted it so it wasn't really tested.

Anyways, you're welcome hope it comes handy.

I posted the script on my Script Collection post.

https://rathena.org/board/topic/104901-pandas-basic-script-collections/#entry298164

Thanks and hope it helps  /no1

  • Upvote 1
  • Like 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  4
  • Topics Per Day:  0.00
  • Content Count:  30
  • Reputation:   0
  • Joined:  03/05/19
  • Last Seen:  

Hi. for me this part doesnt work. Any idea how to get this work? I want to limit the number of player of each guild to enter to the map.



 

	OnPCLoadMapEvent:
	if( getcharid(2) == $App_Guilds[.@i] ){
	.count = 0;
	.@origin = getcharid(3);
	addrid 3, 0, getcharid(2);
	if ( strcharinfo(3) == .checkmap$ )
		.count++;
	if ( !.@origin ) end;
	if ( .count > 5 ) { // 5 means only 5 players per guild allowed in a map.
		message strcharinfo(0), "Your guild members are over the limit";
		sleep2 2000;
		warp "SavePoint", 0,0;
	}
	}
	end;
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
Answer this question...

×   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...