8 CS(player).active_minigame =
NULL;
9 player.minigame_players =
NULL;
20 entity p = minigame_session.minigame_players;
22 if ( p.minigame_players == player )
24 if ( p.list_next ==
NULL )
29 minigame_session.minigame_event(minigame_session,
"part",player);
31 ftos(
etof(player)),
":",player.netname));
32 minigame_session.minigame_players = p.list_next;
38 for ( e = p.list_next; e !=
NULL; e = e.list_next )
40 if ( e.minigame_players == player )
42 minigame_session.minigame_event(minigame_session,
"part",player);
44 ftos(
etof(player)),
":",player.netname));
45 p.list_next = e.list_next;
56#define FIELD(Flags, Type,Name) if ( sf & (Flags) ) Write##Type(MSG_ENTITY, this.Name);
57#define MSLE(Name,Fields) \
58 else if ( this.classname == #Name ) { \
59 if ( sf & MINIG_SF_CREATE ) WriteString(MSG_ENTITY,this.owner.netname); \
87 else if ( this.
classname ==
"minigame_player" )
99 minigame_ent.minigame_event(minigame_ent,
"network_send",
this,sf);
121 for ( e = this.
owner.minigame_players; e !=
NULL; e = e.list_next )
122 if ( e.minigame_players == client )
135 entity player_pointer =
new(minigame_player);
136 int mgteam = minigame_session.minigame_event(minigame_session,
"join",player,player_pointer);
140 player_pointer.owner = minigame_session;
141 player_pointer.minigame_players = player;
142 player_pointer.team = mgteam;
143 player_pointer.list_next = minigame_session.minigame_players;
144 minigame_session.minigame_players = player_pointer;
145 CS(player).active_minigame = minigame_session;
146 player.minigame_players = player_pointer;
157 else {
delete(player_pointer); }
158 GameLogEcho(
strcat(
":minigame:join",(mgteam?
"":
"fail"),
":",minigame_session.netname,
":",
159 ftos(
etof(player)),
":",player.netname));
172 entity minig =
new(minigame);
174 minig.descriptor = e;
175 minig.minigame_event = e.minigame_event;
176 minig.minigame_event(minig,
"start");
180 LOG_TRACE(
"Minigame ",minig.netname,
" rejected the first player join!");
208 if ( minig.netname == game_id )
218 entity minig =
CS(player).active_minigame;
220 if ( minig && minig.classname ==
"minigame" )
226 if ( minigame_session.owner )
227 minigame_session.owner.list_next = minigame_session.list_next;
231 minigame_session.minigame_event(minigame_session,
"end");
237 if ( e.minigame_autoclean )
244 for ( e = minigame_session.minigame_players; e !=
NULL; e = p )
251 strfree(minigame_session.netname);
252 delete(minigame_session);
266 return "Invalid minigame";
268 return "Invalid player";
269 if ( inviter == player )
270 return "You can't invite yourself";
272 return "You can't invite a banned player";
274 return strcat(player.netname,
" is already playing");
280 ftos(
etof(player)),
":",player.netname));
291 if ( e.minigame_players == client )
308#define MINIGAME_CMD(cmd_id) MINIGAME_COMMON_CMD[MINIGAME_COMMON_CMD_ID_##cmd_id]
314 sprint(caller,
"Minigames are not enabled!\n");
321 sprint(caller,
"You aren't allowed to play minigames because you are banned from them in this server.\n");
327 string minig_cmd =
argv(1);
332 sprint(caller,
"Created minigame session: ",minig.netname,
"\n");
334 sprint(caller,
"Cannot start minigame session!\n");
341 sprint(caller,
"Joined: ",minig.netname,
"\n");
345 sprint(caller,
"Cannot join given minigame session!\n");
351 FOREACH(Minigames,
true,
sprint(caller, it.netname,
" (", it.message,
") ",
"\n"));
358 sprint(caller,e.netname,
"\n");
366 sprint(caller,
"Left minigame session\n");
369 sprint(caller,
"You aren't playing any minigame...\n");
372 else if ( minig_cmd ==
MINIGAME_CMD(INVITE) && argc > 2 )
380 sprint(caller,
"You have invited ",client.netname,
387 sprint(caller,
"You aren't playing any minigame...\n");
399 else sprint(caller,
strcat(
"Wrong command:^1 ",command,
"\n"));
402 sprint(caller,
"\nUsage:^3 cmd minigame create <minigame>\n");
403 sprint(caller,
" Start a new minigame session\n");
404 sprint(caller,
"Usage:^3 cmd minigame join <session>\n");
405 sprint(caller,
" Join an exising minigame session\n");
406 sprint(caller,
"Usage:^3 cmd minigame list\n");
407 sprint(caller,
" List available minigames\n");
408 sprint(caller,
"Usage:^3 cmd minigame list-sessions\n");
409 sprint(caller,
" List available minigames sessions\n");
410 sprint(caller,
"Usage:^3 cmd minigame part|end\n");
411 sprint(caller,
" Leave the current minigame\n");
412 sprint(caller,
"Usage:^3 cmd minigame invite <player>\n");
413 sprint(caller,
" Invite the given player to join you in a minigame\n");
string autocvar_g_playban_list
bool autocvar_g_playban_minigames
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
const int CMD_REQUEST_COMMAND
void GameLogEcho(string s)
#define FOREACH(list, cond, body)
#define WriteHeader(to, id)
void Net_LinkEntity(entity e, bool docull, float dt, bool(entity this, entity to, int sendflags) sendfunc)
#define MINIGAME_SIMPLELINKED_ENTITIES
Set up automatic entity read/write functionality To ensure that everything is handled automatically,...
int msle_id(string class_name)
entity minigame_get_descriptor(string id)
const int MINIG_SF_UPDATE
const int MINIG_SF_CREATE
entity descriptor
For minigame sessions: minigame descriptor object.
void set_movetype(entity this, int mt)
const int MOVETYPE_FLY_WORLDONLY
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
void Send_Notification(NOTIF broadcast, entity client, MSG net_type, Notification net_name,...count)
void PutObserverInServer(entity this, bool is_forced, bool use_spawnpoint)
putting a client as observer in the server
bool PlayerInList(entity player, string list)
entity GetIndexedEntity(int argc, int start_index)
int VerifyClientEntity(entity client, bool must_be_real, bool must_be_bots)
ClientState CS(Client this)
#define MINIGAME_CMD(cmd_id)
int minigame_addplayer(entity minigame_session, entity player)
bool MinigameImpulse(entity this, int imp)
void player_clear_minigame(entity player)
bool minigame_CheckSend(entity this, entity client)
void minigame_rmplayer(entity minigame_session, entity player)
entity join_minigame(entity player, string game_id)
Join an existing minigame session.
bool minigame_SendEntity(entity this, entity to, int sf)
void part_minigame(entity player)
void end_minigame(entity minigame_session)
entity start_minigame(entity player, string minigame)
Create a new minigame session.
string invite_minigame(entity inviter, entity player)
Invite a player to join in a minigame.
entity minigame_find_player(entity client)
void ClientCommand_minigame(entity caller, int request, int argc, string command)
void minigame_resend(entity minigame)
entity minigame_players
For minigame sessions: list of players For minigame_player: client entity.
bool autocvar_sv_minigames
bool autocvar_sv_minigames_observer
void Player_SetForcedTeamIndex(entity player, int team_index)
Sets the index of the forced team of the given player.
@ TEAM_FORCE_DEFAULT
Don't force any team.
@ TEAM_FORCE_SPECTATOR
Force the player to spectator team.
#define IS_REAL_CLIENT(v)