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) \
90 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.minigame_id = minigame_session.minigame_id;
141 player_pointer.descriptor = minigame_session.descriptor;
142 player_pointer.owner = minigame_session;
143 player_pointer.minigame_players = player;
144 player_pointer.team = mgteam;
145 player_pointer.list_next = minigame_session.minigame_players;
146 minigame_session.minigame_players = player_pointer;
147 CS(player).active_minigame = minigame_session;
148 player.minigame_players = player_pointer;
159 else {
delete(player_pointer); }
160 GameLogEcho(
strcat(
":minigame:join",(mgteam?
"":
"fail"),
":",minigame_session.netname,
":",
161 ftos(
etof(player)),
":",player.netname));
174 entity minig =
new(minigame);
175 minig.minigame_id =
etof(minig);
177 minig.descriptor = e;
178 minig.minigame_event = e.minigame_event;
179 minig.minigame_event(minig,
"start");
183 LOG_TRACE(
"Minigame ",minig.netname,
" rejected the first player join!");
211 if ( minig.netname == game_id )
221 entity minig =
CS(player).active_minigame;
223 if ( minig && minig.classname ==
"minigame" )
229 if ( minigame_session.owner )
230 minigame_session.owner.list_next = minigame_session.list_next;
234 minigame_session.minigame_event(minigame_session,
"end");
240 if ( e.minigame_autoclean )
248 for ( e = minigame_session.minigame_players; e !=
NULL; e = p )
255 strfree(minigame_session.netname);
256 delete(minigame_session);
270 return "Invalid minigame";
272 return "Invalid player";
273 if ( inviter == player )
274 return "You can't invite yourself";
276 return "You can't invite a banned player";
278 return strcat(player.netname,
" is already playing");
284 ftos(
etof(player)),
":",player.netname));
295 if ( e.minigame_players == client )
312#define MINIGAME_CMD(cmd_id) MINIGAME_COMMON_CMD[MINIGAME_COMMON_CMD_ID_##cmd_id]
318 sprint(caller,
"Minigames are not enabled!\n");
325 sprint(caller,
"You aren't allowed to play minigames because you are banned from them in this server.\n");
331 string minig_cmd =
argv(1);
336 sprint(caller,
"Created minigame session: ",minig.netname,
"\n");
338 sprint(caller,
"Cannot start minigame session!\n");
345 sprint(caller,
"Joined: ",minig.netname,
"\n");
349 sprint(caller,
"Cannot join given minigame session!\n");
355 FOREACH(Minigames,
true,
sprint(caller, it.netname,
" (", it.message,
") ",
"\n"));
362 sprint(caller,e.netname,
"\n");
370 sprint(caller,
"Left minigame session\n");
373 sprint(caller,
"You aren't playing any minigame...\n");
376 else if ( minig_cmd ==
MINIGAME_CMD(INVITE) && argc > 2 )
384 sprint(caller,
"You have invited ",client.netname,
391 sprint(caller,
"You aren't playing any minigame...\n");
403 else sprint(caller,
strcat(
"Wrong command:^1 ",command,
"\n"));
406 sprint(caller,
"\nUsage:^3 cmd minigame create <minigame>\n");
407 sprint(caller,
" Start a new minigame session\n");
408 sprint(caller,
"Usage:^3 cmd minigame join <session>\n");
409 sprint(caller,
" Join an exising minigame session\n");
410 sprint(caller,
"Usage:^3 cmd minigame list\n");
411 sprint(caller,
" List available minigames\n");
412 sprint(caller,
"Usage:^3 cmd minigame list-sessions\n");
413 sprint(caller,
" List available minigames sessions\n");
414 sprint(caller,
"Usage:^3 cmd minigame part|end\n");
415 sprint(caller,
" Leave the current minigame\n");
416 sprint(caller,
"Usage:^3 cmd minigame invite <player>\n");
417 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 WriteRegistered(r, to, it)
#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)
int minigame_id
Unique ID for the minigame session, associated with all objects currently the result of etof(minigame...
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)