Skip to content
Haru edited this page Oct 19, 2016 · 1 revision

Table of Contents

Syntax

Description

This command will find all members of a specified party and returns their names (or character id or account id depending on the value of "type") into an array of temporary global variables. There's actually quite a few commands like this which will fill a special variable with data upon execution and not do anything else.

Upon executing this,

Array Description
$@partymembername$[] is a global temporary string array which contains all the names of these party members (only set when type is 0 or not specified).
$@partymembercid[] is a global temporary number array which contains the character id of these party members (only set when type is 1).
$@partymemberaid[] is a global temporary number array which contains the account id of these party members (only set when type is 2).
$@partymembercount is the number of party members that were found.

The party members will (apparently) be found regardless of whether they are online or offline. Note that the names come in no particular order.

Be sure to use $@partymembercount to go through this array, and not 'getarraysize', because it is not cleared between runs of 'getpartymember'. If someone with 7 party members invokes this script, the array would have 7 elements. But if another person calls up the NPC, and he has a party of 5, the server will not clear the array for you, overwriting the values instead. So in addition to returning the 5 member names, the 6th and 7th elements from the last call remain, and you will get 5+2 members, of which the last 2 don't belong to the new guy's party. $@partymembercount will always contain the correct number, (5) unlike getarraysize()' which will return 7 in this case.

Examples

Example 1

 // It's a good idea to copy the global temporary $@partymember***** 
 // variables to your own scope variables because if you have pauses in this 
 // script ([[sleep]], [[sleep2]], [[next]], [[close2]], [[input]], [[menu]], [[select]], or [[prompt]]), 
 // another player could click this NPC, trigger '[[getpartymember]]', and 
 // overwrite the $@partymember***** [[Variables#Global_Variables|variables]].
 [[set]] .@count, $@partymembercount;
 [[copyarray]] .@name$[0], $@partymembername$[0], $@partymembercount;
 
 // list the party member names
 [[for]] ([[set]] .@i,0; .@i < .@count; [[set]] .@i, .@i+1) {
 	[[mes]] (.@i +1) + ". ^0000FF" + .@name$[.@i] + "^000000";
 }
 [[close]];

Example 2

 // get the charID and accountID of character's party members
 [[getpartymember]] [[getcharid]](1), 1;
 [[getpartymember]] [[getcharid]](1), 2;
 
 [[if]] ( $@partymembercount != .register_num ) {
 	[[mes]] "Please form a party of "+ .register_num +" to continue";
 	[[close]];
 }
 
 // loop through both and use '[[isloggedin]]' to count online party members
 [[for]] ( [[set]] .@i, 0; .@i < $@partymembercount; [[set]] .@i, .@i +1 )
 	[[if]] ( [[isloggedin]]( $@partymemberaid[.@i], $@partymembercid[.@i] ) )
 		[[set]] .@count_online, .@count_online +1 ;
 // We search [[AID|accountID]] & [[CID|charID]] because a single party can have multiple 
 // characters from the same account. Without searching through the charID, 
 // if a player has 2 characters from the same account inside the party but 
 // only 1 char online, it would count their online char twice.
 
 [[if]] ( .@count_online != .register_num ) {
 	[[mes]] "All your party members must be online to continue";
 	[[close]];
 }
 
 // copy the array to prevent players cheating the system
 [[copyarray]] .@partymembercid, $@partymembercid, .register_num;
 
 [[mes]] "Are you ready ?";
 [[next]]; // careful here
 [[select]] "Yes";
 
 // When a script hits a [[next]], [[menu]], [[sleep]] or [[input]] that pauses the script, 
 // players can invite or /leave and make changes in their party. To prevent 
 // this, we call [[getpartymember]] again and compare with the original values.
 
 [[getpartymember]] [[getcharid]](1), 1;
 [[if]] ( $@partymembercount != .register_num ) {
 	[[mes]] "You've made changes to your party !";
 	[[close]];
 }
 [[for]] ( [[set]] .@i, 0; .@i < $@partymembercount; [[set]] .@i, .@i +1 ) {
 	[[if]] ( .@partymembercid[.@i] != $@partymembercid[.@i] ) {
 		[[mes]] "You've made changes to your party !";
 		[[close]];
 	}
 }
 
 // Finally, it's safe to start the event!
 [[warpparty]] "event_map", 0,0, [[getcharid]](1);

Category:Script Command

Clone this wiki locally