X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fminigames%2Fsv_minigames.qc;h=a4a496400302c8d85b4fa057968d31f647693f39;hb=a11173a91c5da56cc4d3094095f59c40ab50df92;hp=d0b35c5a883b6979f71029fe6c4aa8db28f10ee2;hpb=a16486e99c59c7d1dc2450c9bc9390276938af0b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/minigames/sv_minigames.qc b/qcsrc/common/minigames/sv_minigames.qc index d0b35c5a8..a4a496400 100644 --- a/qcsrc/common/minigames/sv_minigames.qc +++ b/qcsrc/common/minigames/sv_minigames.qc @@ -25,7 +25,7 @@ void minigame_rmplayer(entity minigame_session, entity 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)); minigame_session.minigame_players = p.list_next; remove ( p ); player_clear_minigame(player); @@ -38,7 +38,7 @@ void minigame_rmplayer(entity minigame_session, entity 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); @@ -51,8 +51,6 @@ 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 MSLE(Name,Fields) \ else if ( self.classname == #Name ) { \ if ( sf & MINIG_SF_CREATE ) WriteString(MSG_ENTITY,self.owner.netname); \ @@ -60,9 +58,9 @@ void minigame_rmplayer(entity minigame_session, entity player) // Send an entity to a client // only use on minigame entities or entities with a minigame owner -bool minigame_SendEntity(entity to, int sf) -{SELFPARAM(); - WriteByte(MSG_ENTITY, ENT_CLIENT_MINIGAME); +bool minigame_SendEntity(entity this, entity to, int sf) +{ + WriteHeader(MSG_ENTITY, ENT_CLIENT_MINIGAME); WriteByte(MSG_ENTITY, sf); if ( sf & MINIG_SF_CREATE ) @@ -88,10 +86,10 @@ bool minigame_SendEntity(entity to, int sf) if ( sf & MINIG_SF_CREATE ) { WriteString(MSG_ENTITY,self.owner.netname); - WriteLong(MSG_ENTITY,num_for_edict(self.minigame_players)); + WriteLong(MSG_ENTITY,etof(self.minigame_players)); } if ( sf & MINIG_SF_UPDATE ) - WriteByte(MSG_ENTITY,self.team); + WriteByte(MSG_ENTITY, TMID(self.team)); } MINIGAME_SIMPLELINKED_ENTITIES @@ -131,16 +129,14 @@ int minigame_addplayer(entity minigame_session, entity player) return 0; minigame_rmplayer(player.active_minigame,player); } - - int mgteam = minigame_session.minigame_event(minigame_session,"join",player); + entity player_pointer = new(minigame_player); + int mgteam = minigame_session.minigame_event(minigame_session,"join",player,player_pointer); if ( mgteam ) { - entity player_pointer = spawn(); - player_pointer.classname = "minigame_player"; player_pointer.owner = minigame_session; player_pointer.minigame_players = player; - player_pointer.team = mgteam; + player_pointer.__team = mgteam; player_pointer.list_next = minigame_session.minigame_players; minigame_session.minigame_players = player_pointer; player.active_minigame = minigame_session; @@ -157,20 +153,13 @@ int minigame_addplayer(entity minigame_session, entity player) minigame_resend(minigame_session); } + 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; } -void minigame_frame() -{ - entity minig = self; - - minig.minigame_event(minig,"frame"); - minig.nextthink = time; -} - entity start_minigame(entity player, string minigame ) { if ( !autocvar_sv_minigames || !IS_REAL_CLIENT(player) ) @@ -179,12 +168,9 @@ entity start_minigame(entity player, string minigame ) entity e = minigame_get_descriptor(minigame); if ( e ) { - entity minig = spawn(); - minig.classname = "minigame"; - minig.netname = strzone(strcat(e.netname,"_",ftos(num_for_edict(minig)))); + entity minig = new(minigame); + minig.netname = strzone(strcat(e.netname,"_",ftos(etof(minig)))); minig.descriptor = e; - minig.think = minigame_frame; - minig.nextthink = time; minig.minigame_event = e.minigame_event; minig.minigame_event(minig,"start"); GameLogEcho(strcat(":minigame:start:",minig.netname)); @@ -249,7 +235,7 @@ void end_minigame(entity minigame_session) 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); } @@ -273,25 +259,6 @@ void end_minigames() } } -void initialize_minigames() -{ - entity last_minig = world; - entity minig; - #define MINIGAME(name,nicename) \ - minig = spawn(); \ - minig.classname = "minigame_descriptor"; \ - minig.netname = #name; \ - minig.message = nicename; \ - minig.minigame_event = name##_server_event; \ - if ( !last_minig ) minigame_descriptors = minig; \ - else last_minig.list_next = minig; \ - last_minig = minig; - - REGISTERED_MINIGAMES - - #undef MINIGAME -} - string invite_minigame(entity inviter, entity player) { if ( !inviter || !inviter.active_minigame ) @@ -307,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 ""; } @@ -323,12 +290,13 @@ entity minigame_find_player(entity client) return world; } -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; } @@ -369,9 +337,7 @@ void ClientCommand_minigame(int request, int argc, string command) } else if ( minig_cmd == "list" ) { - entity e; - for ( e = minigame_descriptors; e != world; e = e.list_next ) - sprint(self,e.netname," (",e.message,") ","\n"); + FOREACH(Minigames, true, sprint(self, it.netname, " (", it.message, ") ", "\n")); return; } else if ( minig_cmd == "list-sessions" )