Browse Source

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

rud0lp20 13 years ago
parent
commit
d1e0139939
2 changed files with 121 additions and 5 deletions
  1. 62 5
      doc/script_commands.txt
  2. 59 0
      src/map/script.c

+ 62 - 5
doc/script_commands.txt

@@ -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 
 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.
 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. 
 instead: 'successrefitem(<number>)' but it returns nothing on the stack. 
 This is since jAthena, so probably nobody knows for sure why is it so.
 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 
 failure' effect on the character and put appropriate messages into their chat 
 window.
 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 
 instead: 'failedrefitem(<number>)' but it returns nothing on the stack. This is 
 since jAthena, so probably nobody knows for sure why is it so.
 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>;
 *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
 This will also display a 'refine failure' effect on the character and put appropriate
 messages into their chat window.
 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 
 instead: 'downrefitem(<number>)' but it returns nothing on the stack. This is 
 since jAthena, so probably nobody knows for sure why is it so.
 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.|
 |8.- Quest Log commands.|
 =========================
 =========================

+ 59 - 0
src/map/script.c

@@ -15822,6 +15822,64 @@ BUILDIN_FUNC(instance_warpall)
 	return 0;
 	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
  * Custom Fonts
  *------------------------------------------*/
  *------------------------------------------*/
@@ -16626,6 +16684,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(instance_npcname,"s?"),
 	BUILDIN_DEF(instance_npcname,"s?"),
 	BUILDIN_DEF(has_instance,"s?"),
 	BUILDIN_DEF(has_instance,"s?"),
 	BUILDIN_DEF(instance_warpall,"sii?"),
 	BUILDIN_DEF(instance_warpall,"sii?"),
+	BUILDIN_DEF(instance_check_party,"i???"),
 	/**
 	/**
 	 * 3rd-related
 	 * 3rd-related
 	 **/
 	 **/