X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fsv_minigames.qc;h=689ce83d0295968e7e1ede2e3923fdeb4ed53465;hb=6a611fb362129440369cb09a590023d6292102e9;hp=403a79d4090314e1f05508adaa67fc02d7494cdf;hpb=e9e91f9bc18dd5002e60c595c83cb8f45068a14b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/sv_minigames.qc b/qcsrc/common/minigames/sv_minigames.qc index 403a79d40..689ce83d0 100644 --- a/qcsrc/common/minigames/sv_minigames.qc +++ b/qcsrc/common/minigames/sv_minigames.qc @@ -2,8 +2,8 @@ void player_clear_minigame(entity player) { - player.active_minigame = world; - player.minigame_players = world; + player.active_minigame = NULL; + player.minigame_players = NULL; if ( IS_PLAYER(player) ) player.movetype = MOVETYPE_WALK; else @@ -18,27 +18,27 @@ void minigame_rmplayer(entity minigame_session, entity player) if ( p.minigame_players == player ) { - if ( p.list_next == world ) + if ( p.list_next == NULL ) { end_minigame(minigame_session); return; } minigame_session.minigame_event(minigame_session,"part",player); GameLogEcho(strcat(":minigame:part:",minigame_session.netname,":", - ftos(num_for_edict(player)),":",player.netname)); + ftos(etof(player)),":",player.netname)); minigame_session.minigame_players = p.list_next; remove ( p ); player_clear_minigame(player); } else { - for ( e = p.list_next; e != world; e = e.list_next ) + for ( e = p.list_next; e != NULL; e = e.list_next ) { if ( e.minigame_players == player ) { minigame_session.minigame_event(minigame_session,"part",player); GameLogEcho(strcat(":minigame:part:",minigame_session.netname,":", - ftos(num_for_edict(player)),":",player.netname)); + ftos(etof(player)),":",player.netname)); p.list_next = e.list_next; remove(e); player_clear_minigame(player); @@ -50,52 +50,50 @@ void minigame_rmplayer(entity minigame_session, entity player) } -#define FIELD(Flags, Type,Name) if ( sf & (Flags) ) Write##Type(MSG_ENTITY, self.Name); -#define WriteVector(to,Name) WriteCoord(to,Name##_x); WriteCoord(to,Name##_y); WriteCoord(to,Name##_z) -#define WriteVector2D(to,Name) WriteCoord(to,Name##_x); WriteCoord(to,Name##_y) +#define FIELD(Flags, Type,Name) if ( sf & (Flags) ) Write##Type(MSG_ENTITY, this.Name); #define MSLE(Name,Fields) \ - else if ( self.classname == #Name ) { \ - if ( sf & MINIG_SF_CREATE ) WriteString(MSG_ENTITY,self.owner.netname); \ + else if ( this.classname == #Name ) { \ + if ( sf & MINIG_SF_CREATE ) WriteString(MSG_ENTITY,this.owner.netname); \ Fields } // Send an entity to a client // only use on minigame entities or entities with a minigame owner bool minigame_SendEntity(entity this, entity to, int sf) { - WriteByte(MSG_ENTITY, ENT_CLIENT_MINIGAME); + WriteHeader(MSG_ENTITY, ENT_CLIENT_MINIGAME); WriteByte(MSG_ENTITY, sf); if ( sf & MINIG_SF_CREATE ) { - WriteShort(MSG_ENTITY,msle_id(self.classname)); - WriteString(MSG_ENTITY,self.netname); + WriteShort(MSG_ENTITY,msle_id(this.classname)); + WriteString(MSG_ENTITY,this.netname); } - entity minigame_ent = self.owner; + entity minigame_ent = this.owner; - if ( self.classname == "minigame" ) + if ( this.classname == "minigame" ) { - minigame_ent = self; + minigame_ent = this; if ( sf & MINIG_SF_CREATE ) - WriteString(MSG_ENTITY,self.descriptor.netname); + WriteString(MSG_ENTITY,this.descriptor.netname); if ( sf & MINIG_SF_UPDATE ) - WriteLong(MSG_ENTITY,self.minigame_flags); + WriteLong(MSG_ENTITY,this.minigame_flags); } - else if ( self.classname == "minigame_player" ) + else if ( this.classname == "minigame_player" ) { if ( sf & MINIG_SF_CREATE ) { - WriteString(MSG_ENTITY,self.owner.netname); - WriteLong(MSG_ENTITY,num_for_edict(self.minigame_players)); + WriteString(MSG_ENTITY,this.owner.netname); + WriteLong(MSG_ENTITY,etof(this.minigame_players)); } if ( sf & MINIG_SF_UPDATE ) - WriteByte(MSG_ENTITY,self.team); + WriteByte(MSG_ENTITY,this.team); } MINIGAME_SIMPLELINKED_ENTITIES - minigame_ent.minigame_event(minigame_ent,"network_send",self,sf); + minigame_ent.minigame_event(minigame_ent,"network_send",this,sf); return true; @@ -107,24 +105,24 @@ bool minigame_SendEntity(entity this, entity to, int sf) void minigame_resend(entity minigame) { minigame.SendFlags = MINIG_SF_ALL; - entity e = world; + entity e = NULL; while (( e = findentity(e,owner,minigame) )) { e.SendFlags = MINIG_SF_ALL; } } -bool minigame_CheckSend() -{SELFPARAM(); +bool minigame_CheckSend(entity this) +{ entity e; - for ( e = self.owner.minigame_players; e != world; e = e.list_next ) + for ( e = this.owner.minigame_players; e != NULL; e = e.list_next ) if ( e.minigame_players == other ) return true; return false; } int minigame_addplayer(entity minigame_session, entity player) -{SELFPARAM(); +{ if ( player.active_minigame ) { if ( player.active_minigame == minigame_session ) @@ -143,12 +141,12 @@ int minigame_addplayer(entity minigame_session, entity player) minigame_session.minigame_players = player_pointer; player.active_minigame = minigame_session; player.minigame_players = player_pointer; - player_pointer.customizeentityforclient = minigame_CheckSend; + setcefc(player_pointer, minigame_CheckSend); Net_LinkEntity(player_pointer, false, 0, minigame_SendEntity); if ( !IS_OBSERVER(player) && autocvar_sv_minigames_observer ) { - WITH(entity, self, player, PutObserverInServer()); + PutObserverInServer(player); } if ( autocvar_sv_minigames_observer == 2 ) player.team_forced = -1; @@ -157,7 +155,7 @@ int minigame_addplayer(entity minigame_session, entity player) } else { remove(player_pointer); } GameLogEcho(strcat(":minigame:join",(mgteam?"":"fail"),":",minigame_session.netname,":", - ftos(num_for_edict(player)),":",player.netname)); + ftos(etof(player)),":",player.netname)); return mgteam; } @@ -165,13 +163,13 @@ int minigame_addplayer(entity minigame_session, entity player) entity start_minigame(entity player, string minigame ) { if ( !autocvar_sv_minigames || !IS_REAL_CLIENT(player) ) - return world; + return NULL; entity e = minigame_get_descriptor(minigame); if ( e ) { entity minig = new(minigame); - minig.netname = strzone(strcat(e.netname,"_",ftos(num_for_edict(minig)))); + minig.netname = strzone(strcat(e.netname,"_",ftos(etof(minig)))); minig.descriptor = e; minig.minigame_event = e.minigame_event; minig.minigame_event(minig,"start"); @@ -180,7 +178,7 @@ entity start_minigame(entity player, string minigame ) { LOG_TRACE("Minigame ",minig.netname," rejected the first player join!\n"); end_minigame(minig); - return world; + return NULL; } Net_LinkEntity(minig, false, 0, minigame_SendEntity); @@ -195,23 +193,23 @@ entity start_minigame(entity player, string minigame ) return minig; } - return world; + return NULL; } entity join_minigame(entity player, string game_id ) { if ( !autocvar_sv_minigames || !IS_REAL_CLIENT(player) ) - return world; + return NULL; entity minig; - for ( minig = minigame_sessions; minig != world; minig = minig.list_next ) + for ( minig = minigame_sessions; minig != NULL; minig = minig.list_next ) { if ( minig.netname == game_id ) if ( minigame_addplayer(minig,player) ) return minig; } - return world; + return NULL; } void part_minigame(entity player ) @@ -233,16 +231,16 @@ void end_minigame(entity minigame_session) GameLogEcho(strcat(":minigame:end:",minigame_session.netname)); - entity e = world; + entity e = NULL; while( (e = findentity(e, owner, minigame_session)) ) if ( e.minigame_autoclean ) { - LOG_TRACE("SV Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n"); + LOG_TRACE("SV Auto-cleaned: ",ftos(etof(e)), " (",e.classname,")\n"); remove(e); } entity p; - for ( e = minigame_session.minigame_players; e != world; e = p ) + for ( e = minigame_session.minigame_players; e != NULL; e = p ) { p = e.list_next; player_clear_minigame(e.minigame_players); @@ -276,7 +274,7 @@ string invite_minigame(entity inviter, entity player) inviter.active_minigame.netname, inviter.netname ); GameLogEcho(strcat(":minigame:invite:",inviter.active_minigame.netname,":", - ftos(num_for_edict(player)),":",player.netname)); + ftos(etof(player)),":",player.netname)); return ""; } @@ -284,31 +282,32 @@ string invite_minigame(entity inviter, entity player) entity minigame_find_player(entity client) { if ( ! client.active_minigame ) - return world; + return NULL; entity e; for ( e = client.active_minigame.minigame_players; e; e = e.list_next ) if ( e.minigame_players == client ) return e; - return world; + return NULL; } -bool MinigameImpulse(int imp) -{SELFPARAM(); - entity e = minigame_find_player(self); - if ( imp && self.active_minigame && e ) +bool MinigameImpulse(entity this, int imp) +{ + if (!this.active_minigame) return false; + entity e = minigame_find_player(this); + if ( imp && this.active_minigame && e ) { - return self.active_minigame.minigame_event(self.active_minigame,"impulse",e,imp); + return this.active_minigame.minigame_event(this.active_minigame,"impulse",e,imp); } return false; } -void ClientCommand_minigame(int request, int argc, string command) -{SELFPARAM(); +void ClientCommand_minigame(entity caller, int request, int argc, string command) +{ if ( !autocvar_sv_minigames ) { - sprint(self,"Minigames are not enabled!\n"); + sprint(caller,"Minigames are not enabled!\n"); return; } @@ -317,91 +316,88 @@ void ClientCommand_minigame(int request, int argc, string command) string minig_cmd = argv(1); if ( minig_cmd == "create" && argc > 2 ) { - entity minig = start_minigame(self, argv(2)); + entity minig = start_minigame(caller, argv(2)); if ( minig ) - sprint(self,"Created minigame session: ",minig.netname,"\n"); + sprint(caller,"Created minigame session: ",minig.netname,"\n"); else - sprint(self,"Cannot start minigame session!\n"); + sprint(caller,"Cannot start minigame session!\n"); return; } else if ( minig_cmd == "join" && argc > 2 ) { - entity minig = join_minigame(self, argv(2)); + entity minig = join_minigame(caller, argv(2)); if ( minig ) - sprint(self,"Joined: ",minig.netname,"\n"); + sprint(caller,"Joined: ",minig.netname,"\n"); else { - Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_JOIN_PREVENT_MINIGAME); - sprint(self,"Cannot join given minigame session!\n"); + Send_Notification(NOTIF_ONE, caller, MSG_CENTER, CENTER_JOIN_PREVENT_MINIGAME); + sprint(caller,"Cannot join given minigame session!\n"); } return; } else if ( minig_cmd == "list" ) { - FOREACH(Minigames, true, LAMBDA( - { - sprint(self,it.netname," (",it.message,") ","\n"); - })); + FOREACH(Minigames, true, sprint(caller, it.netname, " (", it.message, ") ", "\n")); return; } else if ( minig_cmd == "list-sessions" ) { entity e; - for ( e = minigame_sessions; e != world; e = e.list_next ) - sprint(self,e.netname,"\n"); + for ( e = minigame_sessions; e != NULL; e = e.list_next ) + sprint(caller,e.netname,"\n"); return; } else if ( minig_cmd == "end" || minig_cmd == "part" ) { - if ( self.active_minigame ) + if ( caller.active_minigame ) { - part_minigame(self); - sprint(self,"Left minigame session\n"); + part_minigame(caller); + sprint(caller,"Left minigame session\n"); } else - sprint(self,"You aren't playing any minigame...\n"); + sprint(caller,"You aren't playing any minigame...\n"); return; } else if ( minig_cmd == "invite" && argc > 2 ) { - if ( self.active_minigame ) + if ( caller.active_minigame ) { entity client = GetIndexedEntity(argc, 2); - string error = invite_minigame(self,client); + string error = invite_minigame(caller,client); if ( error == "" ) { - sprint(self,"You have invited ",client.netname, - " to join your game of ", self.active_minigame.descriptor.message, "\n"); + sprint(caller,"You have invited ",client.netname, + " to join your game of ", caller.active_minigame.descriptor.message, "\n"); } else - sprint(self,"Could not invite: ", error, ".\n"); + sprint(caller,"Could not invite: ", error, ".\n"); } else - sprint(self,"You aren't playing any minigame...\n"); + sprint(caller,"You aren't playing any minigame...\n"); return; } - else if ( self.active_minigame ) + else if ( caller.active_minigame ) { - entity e = minigame_find_player(self); + entity e = minigame_find_player(caller); string subcommand = substring(command,argv_end_index(0),-1); int arg_c = tokenize_console(subcommand); - if ( self.active_minigame.minigame_event(self.active_minigame,"cmd",e,arg_c,subcommand) ) + if ( caller.active_minigame.minigame_event(caller.active_minigame,"cmd",e,arg_c,subcommand) ) return; } - else sprint(self,strcat("Wrong command:^1 ",command,"\n")); + else sprint(caller,strcat("Wrong command:^1 ",command,"\n")); } - sprint(self, "\nUsage:^3 cmd minigame create \n"); - sprint(self, " Start a new minigame session\n"); - sprint(self, "Usage:^3 cmd minigame join \n"); - sprint(self, " Join an exising minigame session\n"); - sprint(self, "Usage:^3 cmd minigame list\n"); - sprint(self, " List available minigames\n"); - sprint(self, "Usage:^3 cmd minigame list-sessions\n"); - sprint(self, " List available minigames sessions\n"); - sprint(self, "Usage:^3 cmd minigame part|end\n"); - sprint(self, " Leave the current minigame\n"); - sprint(self, "Usage:^3 cmd minigame invite \n"); - sprint(self, " Invite the given player to join you in a minigame\n"); + sprint(caller, "\nUsage:^3 cmd minigame create \n"); + sprint(caller, " Start a new minigame session\n"); + sprint(caller, "Usage:^3 cmd minigame join \n"); + sprint(caller, " Join an exising minigame session\n"); + sprint(caller, "Usage:^3 cmd minigame list\n"); + sprint(caller, " List available minigames\n"); + sprint(caller, "Usage:^3 cmd minigame list-sessions\n"); + sprint(caller, " List available minigames sessions\n"); + sprint(caller, "Usage:^3 cmd minigame part|end\n"); + sprint(caller, " Leave the current minigame\n"); + sprint(caller, "Usage:^3 cmd minigame invite \n"); + sprint(caller, " Invite the given player to join you in a minigame\n"); }