Added new script command: instance_check_party <Party ID>{,<amount>{,<min>{,<max>}}};

-Checks the Players Party if it meets the above set requirements. see script_commands.txt for more info. Thanks Masao

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16134 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
rud0lp20 2012-05-21 13:33:43 +00:00
parent 3acd50f74c
commit d1e0139939
2 changed files with 121 additions and 5 deletions

View File

@ -4360,7 +4360,7 @@ character and put appropriate messages into their chat window. It will also give
the character fame points if a weapon reached +10 this way, even though these
will only take effect for blacksmith who will later forge a weapon.
The official scripts seem to use the 'successrefitem' command as a function
The official scripts seems to use the 'successrefitem' command as a function
instead: 'successrefitem(<number>)' but it returns nothing on the stack.
This is since jAthena, so probably nobody knows for sure why is it so.
@ -4373,7 +4373,7 @@ invoking character. The item will be destroyed. This will also display a 'refine
failure' effect on the character and put appropriate messages into their chat
window.
The official scripts seem to use the 'failedrefitem' command as a function
The official scripts seems to use the 'failedrefitem' command as a function
instead: 'failedrefitem(<number>)' but it returns nothing on the stack. This is
since jAthena, so probably nobody knows for sure why is it so.
@ -4381,12 +4381,12 @@ since jAthena, so probably nobody knows for sure why is it so.
*downrefitem <equipment slot>;
This command will downgrade an item by -1 in the specified equipment slot of the
invoking character. So the item will not be destroyed unlikely in failedrefitem.
This command will downgrade an item by - 1 in the specified equipment slot of the
invoking character. So the item will not be destroyed unlike in the failedrefitem script command.
This will also display a 'refine failure' effect on the character and put appropriate
messages into their chat window.
The official scripts seem to use the 'downrefitem' command as a function
The official scripts seems to use the 'downrefitem' command as a function
instead: 'downrefitem(<number>)' but it returns nothing on the stack. This is
since jAthena, so probably nobody knows for sure why is it so.
@ -7138,6 +7138,63 @@ Both timeout values are in seconds.
---------------------------------------
*instance_check_party <Party ID>{,<amount>{,<min>{,<max>}}};
Checks the Players Party if it meets the above set requirements.
While the Party ID of the invoking character has to be set, the Values amount, min
and max are optional parameters and doesn't need to be set. You will find below an
little List for an explenation of what those values are for.
Values:
Party ID : Party ID of the invoking character. [Required Parameter]
amount : Amount of needed Partymembers for the Instance. [Optional Parameter]
min : Minimum Level needed to join the Instance. [Optional Parameter]
max : Maxium Level allowed to join the Instance. [Optional Parameter]
If no Party ID is given the party of the currently attached player will be used.
If no amount is given the Memorial Dungeon will of course at least need 1 Player to enter.
If no min Level requirement is given, the Player has at least to be Level 1 to enter the Memorial Dungeon.
If no max Level requirement is given, every Player can enter which is not above your Max. Level setting in the configuration files of your Server.
This Command will also check if every Player inside the Party of the invoking Character is online. So if 2 Players are inside a Party
but one of them is offline, the other Player won't be able to join the Memorial Dungeon.
Also, here are some examples of how this Command will work inside a script:
if(instance_check_party(getcharid(1),2,2,149)){
mes "Ok, your party is complete and meets the Memorial Dungeons requirement.",
mes "Members have a Baselevel between 1 and 150 and there are at least 2 Players inside the Party.";
close;
}else{
mes "Sorry, but it seems like your Party does not meet the Memorial Dungeon requirements.";
close;
}
You also can use set .@party_id,getcharid(1); for example to save the Players Party ID.
if(instance_check_party(.@party_id,2,2,149)){
mes "Ok, your party is complete and meets the Memorial Dungeons requirement.",
mes "Members have a Baselevel between 1 and 150 and there are at least 2 Players inside the Party.";
close;
}else{
mes "Sorry, but it seems like your Party does not meet the Memorial Dungeon requirements.";
close;
}
And another way of checking could also be:
if(!instance_check_party(getcharid(1),2,2,149)){
mes "Sorry, but it seems like your Party does not meet the Memorial Dungeon requirements.";
close;
}else{
mes "Ok, your party is complete and meets the Memorial Dungeons requirement.",
mes "Members have a Baselevel between 1 and 150 and there are at least 2 Players inside the Party.";
close;
}
---------------------------------------
=========================
|8.- Quest Log commands.|
=========================

View File

@ -15822,6 +15822,64 @@ BUILDIN_FUNC(instance_warpall)
return 0;
}
/*==========================================
* instance_check_party [malufett]
* Values:
* party_id : Party ID of the invoking character. [Required Parameter]
* amount : Amount of needed Partymembers for the Instance. [Optional Parameter]
* min : Minimum Level needed to join the Instance. [Optional Parameter]
* max : Maxium Level allowed to join the Instance. [Optional Parameter]
* Example: instance_check_party (getcharid(1){,amount}{,min}{,max});
* Example 2: instance_check_party (getcharid(1),1,1,99);
*------------------------------------------*/
BUILDIN_FUNC(instance_check_party)
{
struct map_session_data *pl_sd;
int amount, min, max, i, party_id, c = 0;
struct party_data *p = NULL;
amount = script_hasdata(st,3) ? script_getnum(st,3) : 1; // Amount of needed Partymembers for the Instance.
min = script_hasdata(st,4) ? script_getnum(st,4) : 1; // Minimum Level needed to join the Instance.
max = script_hasdata(st,5) ? script_getnum(st,5) : MAX_LEVEL; // Maxium Level allowed to join the Instance.
if( min < 1 || min > MAX_LEVEL){
ShowError("instance_check_party: Invalid min level, %d\n", min);
return 0;
}else if( max < 1 || max > MAX_LEVEL){
ShowError("instance_check_party: Invalid max level, %d\n", max);
return 0;
}
if( script_hasdata(st,2) )
party_id = script_getnum(st,2);
else return 0;
if( !(p = party_search(party_id)) ){
script_pushint(st, 0); // Returns false if party does not exist.
return 0;
}
for( i = 0; i < MAX_PARTY; i++ )
if( (pl_sd = p->data[i].sd) )
if(map_id2bl(pl_sd->bl.id)){
if(pl_sd->status.base_level < min){
script_pushint(st, 0);
return 0;
}else if(pl_sd->status.base_level > max){
script_pushint(st, 0);
return 0;
}
c++;
}
if(c < amount){
script_pushint(st, 0); // Not enough Members in the Party to join Instance.
}else
script_pushint(st, 1);
return 0;
}
/*==========================================
* Custom Fonts
*------------------------------------------*/
@ -16626,6 +16684,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(instance_npcname,"s?"),
BUILDIN_DEF(has_instance,"s?"),
BUILDIN_DEF(instance_warpall,"sii?"),
BUILDIN_DEF(instance_check_party,"i???"),
/**
* 3rd-related
**/