Index: chat.c===================================================================--- chat.c (revision 14682)+++ chat.c (working copy)@@ -377,3 +377,17 @@ return 0; }++/// Kicks a user from the chat room.+int chat_npckickchat(struct chat_data* cd, const char* kickusername)+{+ int i;+ nullpo_ret(cd);++ ARR_FIND( 0, cd->users, i, strncmp(cd->usersd[i]->status.name, kickusername, NAME_LENGTH) == 0 );+ if( i == cd->users )+ return -1;++ chat->leave(cd->usersd[i],1);+ return 0;+} No newline at end of fileIndex: chat.h===================================================================--- chat.h (revision 14682)+++ chat.h (working copy)@@ -36,4 +36,5 @@ int chat_disableevent(struct chat_data* cd); int chat->npc_kick_all(struct chat_data* cd); +int chat_npckickchat(struct chat_data* cd, const char* kickusername); #endif /* _CHAT_H_ */Index: script.c===================================================================--- script.c (revision 14682)+++ script.c (working copy)@@ -3461,6 +3461,10 @@ } } + + ++ if(st->sleep.tick > 0) { //Restore previous script script->detach_state(st, false);@@ -9300,6 +9304,51 @@ return 0; } +/// Kick the specified player from the waiting room of the target npc.+///+/// kickwaitingroomall "<npc_name>", <char_name>;+BUILDIN(waitingroomkick)+{+ struct npc_data* nd;+ struct chat_data* cd;+ const char* char_name;++ nd = npc->name2id(script_getstr(st,2));+ char_name = script_getstr(st,3);++ if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL )+ chat_npckickchat(cd, char_name);+ return 0;+}+++/// Get Users in waiting room and stores gids in .@waitingroom_users[]+/// Num users stored in .@waitingroom_usercount+///+/// getwaitingroomusers "<npc_name>";+BUILDIN(getwaitingroomusers)+{+ struct npc_data* nd;+ struct chat_data* cd;++ int i, j=0;++ if( script_hasdata(st,2) )+ nd = npc->name2id(script_getstr(st,2));+ else+ nd = (struct npc_data *)map->id2bl(st->oid);++ if( nd != NULL && (cd=(struct chat_data *)map->id2bl(nd->chat_id)) != NULL ) {+ for(i = 0; i < cd->users; ++i) {+ script->setd_sub(st, NULL, ".@waitingroom_users", j, (void *)cd->usersd[i]->status.account_id, NULL);+ j++;+ }++ script->setd_sub(st, NULL, ".@waitingroom_usercount", 0, (void *)j, NULL);+ }+ return 0;+}+ /// Enables the waiting room event of the current or target npc. /// /// enablewaitingroomevent "<npc_name>";@@ -14254,6 +14303,28 @@ return 0; } +BUILDIN(getbgmembers)+{+ struct battleground_data *bg = NULL;+ struct map_session_data *sd;+ int bg_id, i, j=0;++ bg_id = script_getnum(st,2);+ if( (bg = bg->team_search(bg_id)) == NULL) {+ script_pushint(st,0);+ return 0;+ }+ for( i = 0; i < MAX_BG_MEMBERS; i++ ) {+ if( (sd = bg->members[i].sd) == NULL )+ continue;+ script->setd_sub(st, NULL, ".@bg_members", j, (void *)sd->status.account_id, NULL);+ j++;+ }+ script->setd_sub(st, NULL, ".@bg_membercount", 0, (void *)j, NULL);++ return 0;+}+ BUILDIN(bg_updatescore) { const char *str;@@ -14924,6 +14995,8 @@ BUILDIN_DEF(waitingroom,"si??"), BUILDIN_DEF(delwaitingroom,"?"), BUILDIN_DEF2(waitingroomkickall,"kickwaitingroomall","?"),+ BUILDIN_DEF(waitingroomkick,"ss"),+ BUILDIN_DEF(getwaitingroomusers, "?"), BUILDIN_DEF(enablewaitingroomevent,"?"), BUILDIN_DEF(disablewaitingroomevent,"?"), BUILDIN_DEF2(enablewaitingroomevent,"enablearena",""), // Added by RoVeRT@@ -15134,7 +15207,7 @@ BUILDIN_DEF(bg_get_data,"ii"), BUILDIN_DEF(bg_getareausers,"isiiii"), BUILDIN_DEF(bg_updatescore,"sii"),-+ BUILDIN_DEF(getbgmembers, "i"), // Instancing BUILDIN_DEF(instance->create,"si"), BUILDIN_DEF(instance->destroy,"?"),