Jump to content
  • 0

WOE Job count limit - Updated


Yami

Question


  • Group:  Members
  • Topic Count:  35
  • Topics Per Day:  0.01
  • Content Count:  111
  • Reputation:   2
  • Joined:  01/02/14
  • Last Seen:  

Hey there everyone! I can't seem to find any script regarding this request, but I know it exists for I've seen it in a couple servers that I've played recently.

I'm looking for a script that Limits a job class' specific count per guild inside WOE castles.

In example, Only 5 Knight class are allowed inside the castle per guild, If a guild has 6 online knights inside the castle from ECALL, OR a 6th knight enters the castle the whole guild will be warped out to their savepoint.

As long as they go pass the 5 limit for whatever job that has it, the whole guild should be warped out of the castle. Thank you! Any information will be helpful.

 

Edit:

Okay I found this piece of script in herc forums which is basically almost identical to what I need. But the script is incomplete, and I can't make it to work properly.

So far I've managed it to check for Knight Classes in a guild, when inside WOE castle. But the script is kicking out every one of them even before hitting the target limit. Can someone help me fix this script? Please.

-	script	ckeckguildjob	-1,{
{
OnPCLoadMapEvent:
getguildmember(getcharid(0),2);
set .@guildids[0],$@guildmembercid[0],$@guildmembercount;
set .@count, $@guildmembercount;
for (set .@a, 0; .@a < .@count;
set .@a, .@a + 1)
attachrid .@partyids[.@a];
set .@jobs[.@a], 4008;// Check Job from other current jobs
for (set .@b, 0; .@b < getarraysize(.@jobs); 
set .@b, .@b + 1)
if (Class == .@jobs[.@b]) {
set .@matches, .@matches + 1;
if (.@matches > 1) // Too many knights made it limit of 1 for testing purposes but will be 8
        dispbottom "There can only be 8 Knight per guild members inside a castle during woe.";
        warp "SavePoint",0,0;
set .@matches, 0;
}
}
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 Yami
Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

  • Group:  Forum Moderator
  • Topic Count:  93
  • Topics Per Day:  0.02
  • Content Count:  10013
  • Reputation:   2346
  • Joined:  10/28/11
  • Last Seen:  

try

-	script	Sample	-1,{
	
	OnInit:
		.max_limit = 10;
		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";
		.castle_size = getarraysize(.castles$);
		for (.@i = 0; .@i < .castle_size; .@i++)
			setmapflag .castles$[.@i], mf_loadevent;
		end;
		
	OnPCLoadMapEvent:
		.@map$ = strcharinfo(3);
		if (inarray(.castles$, .@map$) != -1) {
			.@guild_id = getcharid(2);
			if (.@guild_id) {
				
				getguildmember .@cid, 1;
				getguildmember .@aid, 2;
				
				// skip check if member count less than limit
				if ($@guildmembercount < .max_limit) end;
				
				for (.@i = 0; .@i < $@guildmembercount && .@match_count < .max_limit; .@i++) {
					if (isloggedin(.@aid[.@i], .@cid[.@i])) {
						if (attachrid(.@aid[.@i])) {
							.@eac = eaclass();
							if (.@eac & EAJ_SWORDMAN|EAJL_2_1 == EAJ_KNIGHT)
								.@match_count++;
							detachrid;
						}
					}
				}
				
				if (.@match_count >= .max_limit) {
					for (.@i = 0; .@i < $@guildmembercount; .@i++) {
						if (isloggedin(.@aid[.@i], .@cid[.@i])) {
							if (attachrid(.@aid[.@i])) {
								if (strcharinfo(3) == .@map$) {
									dispbottom "There can only be "+.max_limit+" Knight per guild members inside a castle during woe.";
									warp "SavePoint", 0, 0;
								}
								detachrid;
							}
						}
					}
				}
			}
		}
		end;
}

 

Edited by Emistry
update
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  35
  • Topics Per Day:  0.01
  • Content Count:  111
  • Reputation:   2
  • Joined:  01/02/14
  • Last Seen:  

Bumping this request

Okay I found this piece of script in herc forums which is basically almost identical to what I need. But the script is incomplete, and I can't make it to work properly.

So far I've managed it to check for Knight Classes in a guild, when inside WOE castle. But the script is kicking out every one of them even before hitting the target limit. Can someone help me fix this script? Please

-	script	ckeckguildjob	-1,{
{
OnPCLoadMapEvent:
getguildmember(getcharid(0),2);
set .@guildids[0],$@guildmembercid[0],$@guildmembercount;
set .@count, $@guildmembercount;
for (set .@a, 0; .@a < .@count;
set .@a, .@a + 1)
attachrid .@partyids[.@a];
set .@jobs[.@a], 4008;// Check Job from other current jobs
for (set .@b, 0; .@b < getarraysize(.@jobs); 
set .@b, .@b + 1)
if (Class == .@jobs[.@b]) {
set .@matches, .@matches + 1;
if (.@matches > 1) // Too many knights made it limit of 1 for testing purposes but will be 8
        dispbottom "There can only be 8 Knight per guild members inside a castle during woe.";
        warp "SavePoint",0,0;
set .@matches, 0;
}
}
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;
}

 

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  176
  • Topics Per Day:  0.14
  • Content Count:  666
  • Reputation:   9
  • Joined:  12/04/20
  • Last Seen:  

On 8/31/2021 at 8:25 PM, Emistry said:

try

-	script	Sample	-1,{
	
	OnInit:
		.max_limit = 10;
		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";
		.castle_size = getarraysize(.castles$);
		for (.@i = 0; .@i < .castle_size; .@i++)
			setmapflag .castles$[.@i], mf_loadevent;
		end;
		
	OnPCLoadMapEvent:
		.@map$ = strcharinfo(3)
		if (inarray(.castles$, .@map$) != -1) {
			.@guild_id = getcharid(2);
			if (.@guild_id) {
				
				getguildmember .@cid, 1;
				getguildmember .@aid, 2;
				
				// skip check if member count less than limit
				if ($@guildmembercount < .max_limit) end;
				
				for (.@i = 0; .@i < $@guildmembercount && .@match_count < .max_limit; .@i++) {
					if (isloggedin(.@aid[.@i], .@cid[.@i])) {
						if (attachrid(.@aid[.@i])) {
							.@eac = eaclass();
							if (.@eac & EAJ_SWORDMAN|EAJL_2_1 == EAJ_KNIGHT)
								.@match_count++;
							detachrid;
						}
					}
				}
				
				if (.@match_count >= .max_limit) {
					for (.@i = 0; .@i < $@guildmembercount; .@i++) {
						if (isloggedin(.@aid[.@i], .@cid[.@i])) {
							if (attachrid(.@aid[.@i])) {
								if (strcharinfo(3) == .@map$) {
									dispbottom "There can only be "+.max_limit+" Knight per guild members inside a castle during woe.";
									warp "SavePoint", 0, 0;
								}
								detachrid;
							}
						}
					}
				}
			}
		}
		end;
}

 

hello sir emistry i got this error

 

Screenshot 2022-09-28 150955.png

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  45
  • Topics Per Day:  0.01
  • Content Count:  715
  • Reputation:   83
  • Joined:  01/05/12
  • Last Seen:  

6 hours ago, GM Winter said:

hello sir emistry i got this error

 

Screenshot 2022-09-28 150955.png

Change this

.@map$ = strcharinfo(3)

to this

.@map$ = strcharinfo(3);

 

  • Upvote 1
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  176
  • Topics Per Day:  0.14
  • Content Count:  666
  • Reputation:   9
  • Joined:  12/04/20
  • Last Seen:  

On 9/28/2022 at 9:41 PM, Lelouch vi Britannia said:

Change this

.@map$ = strcharinfo(3)

to this

.@map$ = strcharinfo(3);

 

thank you sir for your help

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  11
  • Topics Per Day:  0.00
  • Content Count:  31
  • Reputation:   0
  • Joined:  06/12/16
  • Last Seen:  

tried to use this but im not sure why it is still not limiting the knight job in a castle.
i set the maxlimit to 3 and added the loading of the script in scripts_custom.conf

what am i missing?

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