Advertisement
Sehrentos

rAthena party member select

Mar 6th, 2018
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. // rAthena npc script
  2. // Party Information
  3. // Date 7.3.3018
  4. // By Sehrentos
  5. //=================================
  6. prontera,164,168,5 script Party Members#prt1 1698,{
  7. .@show_offline = 1; // Show offline status in menu? 1=Yes 0=No
  8. .@show_refresh = 1; // Show refresh in menu? 1=Yes 0=No
  9. .@party_id = getcharid(1); // Party ID
  10.  
  11. // Not in a party
  12. if ( !.@party_id ) {
  13. message strcharinfo(0), "You don't have a party.";
  14. end;
  15. }
  16.  
  17. // Copy the temporary party data
  18. getpartymember .@party_id, 0; // Name
  19. getpartymember .@party_id, 1; // Character ID
  20. getpartymember .@party_id, 2; // Account ID
  21. .@party_size = $@partymembercount;
  22. copyarray .@party_member_name$[0], $@partymembername$[0], .@party_size;
  23. copyarray .@party_member_cid[0], $@partymembercid[0], .@party_size;
  24. copyarray .@party_member_aid[0], $@partymemberaid[0], .@party_size;
  25.  
  26. // Open Party Select Menu
  27. .@select = callfunc("F_PartySelect", .@show_offline, .@show_refresh);
  28.  
  29. // Refresh selected
  30. while ( .@select == -1 ) {
  31. message strcharinfo(0), "Refresh menu!";
  32. .@select = callfunc("F_PartySelect", .@show_offline, .@show_refresh);
  33. }
  34.  
  35. // Not in a party (Leaved before select or removed)
  36. if ( .@select == -2 ) {
  37. message strcharinfo(0), "You don't have a party.";
  38. end;
  39. }
  40.  
  41. // Get more party data
  42. .@party_name$ = getpartyname(.@party_id); // Party Name
  43. .@party_leader_cid = getpartyleader(.@party_id, 2); // Party Leader Character ID
  44. // Party Leader Name
  45. .@party_leader_name$ = "[Offline]";
  46. if ( .@party_leader_cid != -1 ) {
  47. // strcharinfo(0,.@party_leader_cid); will fail if leader is offline!
  48. for (.@i = 0; .@i < .@party_size; .@i++ ) {
  49. // Match leader cid with party member cid
  50. if ( .@party_leader_cid == .@party_member_cid[.@i] ) {
  51. .@party_leader_name$ = .@party_member_name$[.@i];
  52. }
  53. }
  54. }
  55.  
  56. // Check for party changes, because players can leave anytime.
  57. getpartymember getcharid(1), 0; // Get names
  58. .@new_party_size = $@partymembercount;
  59. .@check_failed = false;
  60. copyarray .@new_party_name$[0], $@partymembername$[0], .@new_party_size;
  61.  
  62. // Not in a party anymore (Leaved after select or removed)
  63. if ( !getcharid(1) ) {
  64. message strcharinfo(0), "You don't have a party.";
  65. end;
  66. }
  67.  
  68. // Check if party ID has changed
  69. if (.@party_id != getcharid(1)) {
  70. .@check_failed = true;
  71. message strcharinfo(0), "Failed: Party ID has changed!";
  72. }
  73.  
  74. // Check if party size has changed during select.
  75. if (.@new_party_size != .@party_size) {
  76. .@check_failed = true;
  77. message strcharinfo(0), "Failed: Party size has changed!";
  78. }
  79.  
  80. // Check if party member names has changed during select.
  81. for (.@i = 0; .@i < .@party_size; .@i++ ) {
  82. // Match new and old name
  83. if ( .@new_party_name$[.@i] != .@party_member_name$[.@i] ) {
  84. .@check_failed = true;
  85. message strcharinfo(0), "Failed: Party member name has changed!";
  86. break;
  87. }
  88. }
  89.  
  90. // Has any checks failed
  91. if ( .@check_failed ) {
  92. mes "[ " + strnpcinfo(1) + " ]";
  93. mes "Your party has made changes during selection.";
  94. mes "Please select again.";
  95. close;
  96. }
  97.  
  98. // All OK show results
  99. mes "[ " + strnpcinfo(1) + " ]";
  100. mes "You have selected:";
  101. mes " ~ Name: " + .@party_member_name$[.@select];
  102. mes " ~ Party: " + .@party_name$;
  103. mes " ~ Leader: " + .@party_leader_name$;
  104. if ( isloggedin(.@party_member_aid[.@select], .@party_member_cid[.@select]) ) {
  105. mes " ~ Online: ^00cc36Yes^000000";
  106. mes " ~ Vending: " + (checkvending(.@party_member_name$[.@select]) ? "^CC3300Yes^000000" : "^00cc36No^000000");
  107. mes " ~ Chatting: " + (checkchatting(.@party_member_name$[.@select]) ? "^CC3300Yes^000000" : "^00cc36No^000000");
  108. mes " ~ Idle: " + checkidle(.@party_member_name$[.@select]) + " second";
  109. } else
  110. mes " ~ Online: ^CC3300No^000000";
  111. close;
  112.  
  113. }
  114.  
  115. // Function Party Select
  116. // callfunc("F_PartySelect", <INT_show_offline>, <INT_show_refresh>)
  117. // Return INT=Party index number, -1=Refresh selected, -2=Not in party
  118. function script F_PartySelect {
  119. .@s_offline = getarg(0, 1); // Show offline players in menu? 1=Yes 0=No
  120. .@s_refresh = getarg(1, 1); // Show refresh menu item? 1=Yes 0=No
  121. .@party_id = getcharid(1); // Party ID
  122.  
  123. // Not in a party
  124. if ( !.@party_id )
  125. return -2;
  126.  
  127. getpartymember .@party_id, 0; // Names
  128. getpartymember .@party_id, 1; // Character IDs
  129. getpartymember .@party_id, 2; // Account IDs
  130.  
  131. // Copy the temporary party data
  132. .@party_size = $@partymembercount;
  133. copyarray .@party_member_name$[0], $@partymembername$[0], .@party_size;
  134. copyarray .@party_member_cid[0], $@partymembercid[0], .@party_size;
  135. copyarray .@party_member_aid[0], $@partymemberaid[0], .@party_size;
  136.  
  137. // Create menu
  138. if ( .@s_refresh )
  139. .@menu_party$ = "^777777[Refresh]^000000";
  140. .@menu_party$ = .@menu_party$ + ":";
  141.  
  142. // Loop through each party member and add to menu
  143. for ( .@i = 0; .@i < .@party_size; .@i++ ) {
  144. if ( isloggedin(.@party_member_aid[.@i], .@party_member_cid[.@i]) ) {
  145. if (.@s_offline)
  146. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i] + " ^00cc36[ON]^000000";
  147. else
  148. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i];
  149. } else if (.@s_offline)
  150. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i] + " ^777777[OFF]^000000";
  151. .@menu_party$ = .@menu_party$ + ":";
  152. }
  153.  
  154. // Open select menu (-2 select start from 1 and we have [Refresh] at first)
  155. .@select = select(.@menu_party$) - 2;
  156.  
  157. return .@select;
  158. }
  159.  
  160. /*S_PartySelect:
  161. mes "[ " + strnpcinfo(1) + " ]";
  162.  
  163. // Get party data
  164. getpartymember .@party_id, 0; // Name
  165. getpartymember .@party_id, 1; // Character ID
  166. getpartymember .@party_id, 2; // Account ID
  167. // Copy the temporary party data
  168. .@party_size = $@partymembercount;
  169. copyarray .@party_member_name$[0], $@partymembername$[0], .@party_size;
  170. copyarray .@party_member_cid[0], $@partymembercid[0], .@party_size;
  171. copyarray .@party_member_aid[0], $@partymemberaid[0], .@party_size;
  172.  
  173. // Create menu
  174. .@menu_party$ = "^777777[Refresh]^000000:";
  175.  
  176. // Loop through each party member and add to menu
  177. for ( .@i = 0; .@i < .@party_size; .@i++ ) {
  178. if ( isloggedin(.@party_member_aid[.@i], .@party_member_cid[.@i]) ) {
  179. .@count_online++;
  180. if (.@show_offline)
  181. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i] + " ^00cc36[ON]^000000";
  182. else
  183. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i];
  184. } else if (.@show_offline)
  185. .@menu_party$ = .@menu_party$ + .@party_member_name$[.@i] + " ^777777[OFF]^000000";
  186. .@menu_party$ = .@menu_party$ + ":";
  187. }
  188.  
  189. // Open select menu (-2 select start from 1 and we have [Refresh] at first which is 2)
  190. .@select = select(.@menu_party$) - 2;
  191. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement