-
Notifications
You must be signed in to change notification settings - Fork 788
Getpartymember
- getpartymember <party></party>{,<type></type>};
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.
// 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]];
// 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);