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) \
58 Write##Type(MSG_ENTITY, this.Name);
60#define MSLE(Name, Fields) \
61 else if (this.classname == #Name) \
63 if (sf & MINIG_SF_CREATE) \
64 WriteString(MSG_ENTITY, this.owner.netname); \
93 else if ( this.
classname ==
"minigame_player" )
105 minigame_ent.minigame_event(minigame_ent,
"network_send",
this,sf);
127 for ( e = this.
owner.minigame_players; e !=
NULL; e = e.list_next )
128 if ( e.minigame_players == client )
141 entity player_pointer =
new(minigame_player);
142 int mgteam = minigame_session.minigame_event(minigame_session,
"join",player,player_pointer);
146 player_pointer.owner = minigame_session;
147 player_pointer.minigame_players = player;
148 player_pointer.team = mgteam;
149 player_pointer.list_next = minigame_session.minigame_players;
150 minigame_session.minigame_players = player_pointer;
151 CS(player).active_minigame = minigame_session;
152 player.minigame_players = player_pointer;
163 else {
delete(player_pointer); }
164 GameLogEcho(
strcat(
":minigame:join",(mgteam?
"":
"fail"),
":",minigame_session.netname,
":",
165 ftos(
etof(player)),
":",player.netname));
178 entity minig =
new(minigame);
180 minig.descriptor = e;
181 minig.minigame_event = e.minigame_event;
182 minig.minigame_event(minig,
"start");
186 LOG_TRACE(
"Minigame ",minig.netname,
" rejected the first player join!");
214 if ( minig.netname == game_id )
224 entity minig =
CS(player).active_minigame;
226 if ( minig && minig.classname ==
"minigame" )
232 if ( minigame_session.owner )
233 minigame_session.owner.list_next = minigame_session.list_next;
237 minigame_session.minigame_event(minigame_session,
"end");
243 if ( e.minigame_autoclean )
250 for ( e = minigame_session.minigame_players; e !=
NULL; e = p )
257 strfree(minigame_session.netname);
258 delete(minigame_session);
272 return "Invalid minigame";
274 return "Invalid player";
275 if ( inviter == player )
276 return "You can't invite yourself";
278 return "You can't invite a banned player";
280 return strcat(player.netname,
" is already playing");
286 ftos(
etof(player)),
":",player.netname));
297 if ( e.minigame_players == client )
314#define MINIGAME_CMD(cmd_id) MINIGAME_COMMON_CMD[MINIGAME_COMMON_CMD_ID_##cmd_id]
320 sprint(caller,
"Minigames are not enabled!\n");
327 sprint(caller,
"You aren't allowed to play minigames because you are banned from them in this server.\n");
333 string minig_cmd =
argv(1);
338 sprint(caller,
"Created minigame session: ",minig.netname,
"\n");
340 sprint(caller,
"Cannot start minigame session!\n");
347 sprint(caller,
"Joined: ",minig.netname,
"\n");
351 sprint(caller,
"Cannot join given minigame session!\n");
357 FOREACH(Minigames,
true,
sprint(caller, it.netname,
" (", it.message,
") ",
"\n"));
364 sprint(caller,e.netname,
"\n");
372 sprint(caller,
"Left minigame session\n");
375 sprint(caller,
"You aren't playing any minigame...\n");
378 else if ( minig_cmd ==
MINIGAME_CMD(INVITE) && argc > 2 )
386 sprint(caller,
"You have invited ",client.netname,
393 sprint(caller,
"You aren't playing any minigame...\n");
405 else sprint(caller,
strcat(
"Wrong command:^1 ",command,
"\n"));
408 sprint(caller,
"\nUsage:^3 cmd minigame create <minigame>\n");
409 sprint(caller,
" Start a new minigame session\n");
410 sprint(caller,
"Usage:^3 cmd minigame join <session>\n");
411 sprint(caller,
" Join an exising minigame session\n");
412 sprint(caller,
"Usage:^3 cmd minigame list\n");
413 sprint(caller,
" List available minigames\n");
414 sprint(caller,
"Usage:^3 cmd minigame list-sessions\n");
415 sprint(caller,
" List available minigames sessions\n");
416 sprint(caller,
"Usage:^3 cmd minigame part|end\n");
417 sprint(caller,
" Leave the current minigame\n");
418 sprint(caller,
"Usage:^3 cmd minigame invite <player>\n");
419 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
WriteString(chan, ent.netname)
WriteByte(chan, ent.angles.y/DEC_FACTOR)
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)