X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_world.qc;h=d6ffeeb5d12dcee38fbcc12591879e4de84db5c3;hb=2e4b6fcb1aec544934a31bd49bba5eeecaffbf86;hp=15c1ae68deebc79c6ede8126f218c3f4febb7c59;hpb=b557753cb5b1d9c92ef9ab17cb03d74bcbb75485;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index 15c1ae68d..d6ffeeb5d 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -19,10 +19,10 @@ #include "scores.qh" #include "teamplay.qh" #include "weapons/weaponstats.qh" -#include "../common/buffs.qh" +#include "../common/buffs/all.qh" #include "../common/constants.qh" #include "../common/deathtypes.qh" -#include "../common/effects.qh" +#include "../common/effects/effects.qh" #include "../common/mapinfo.qh" #include "../common/monsters/all.qh" #include "../common/monsters/sv_monsters.qh" @@ -41,7 +41,7 @@ const float LATENCY_THINKRATE = 10; .float latency_time; entity pingplreport; void PingPLReport_Think() -{ +{SELFPARAM(); float delta; entity e; @@ -117,7 +117,7 @@ void SetDefaultAlpha() } void GotoFirstMap() -{ +{SELFPARAM(); float n; if(autocvar__sv_init) { @@ -512,33 +512,29 @@ void detect_maptype() } entity randomseed; -float RandomSeed_Send(entity to, int sf) +bool RandomSeed_Send(entity this, entity to, int sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_RANDOMSEED); WriteShort(MSG_ENTITY, self.cnt); return true; } void RandomSeed_Think() -{ +{SELFPARAM(); self.cnt = bound(0, floor(random() * 65536), 65535); self.nextthink = time + 5; self.SendFlags |= 1; } void RandomSeed_Spawn() -{ +{SELFPARAM(); randomseed = spawn(); randomseed.think = RandomSeed_Think; Net_LinkEntity(randomseed, false, 0, RandomSeed_Send); - entity oldself; - oldself = self; - self = randomseed; - self.think(); // sets random seed and nextthink - self = oldself; + WITH(entity, self, randomseed, randomseed.think()); // sets random seed and nextthink } -void spawnfunc___init_dedicated_server(void) +spawnfunc(__init_dedicated_server) { // handler for _init/_init map (only for dedicated server initialization) @@ -561,7 +557,6 @@ void spawnfunc___init_dedicated_server(void) // needs to be done so early because of the constants they create static_init(); - CALL_ACCUMULATED_FUNCTION(RegisterTurrets); CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); @@ -576,7 +571,7 @@ void ClientInit_Spawn(); void WeaponStats_Init(); void WeaponStats_Shutdown(); void Physics_AddStats(); -void spawnfunc_worldspawn (void) +spawnfunc(worldspawn) { float fd, l, j, n; string s; @@ -608,12 +603,9 @@ void spawnfunc_worldspawn (void) // needs to be done so early because of the constants they create static_init(); - CALL_ACCUMULATED_FUNCTION(RegisterTurrets); CALL_ACCUMULATED_FUNCTION(RegisterNotifications); CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes); - initialize_minigames(); - ServerProgsDB = db_load(strcat("server.db", autocvar_sessionid)); TemporaryDB = db_create(); @@ -666,7 +658,6 @@ void spawnfunc_worldspawn (void) PlayerStats_GameReport_Init(); // we need this to be initiated before InitGameplayMode - precache_model ("null"); // we need this one before InitGameplayMode InitGameplayMode(); readlevelcvars(); GrappleHookInit(); @@ -697,10 +688,6 @@ void spawnfunc_worldspawn (void) MUTATOR_CALLHOOK(BuildMutatorsString, s); s = ret_string; - // simple, probably not good in the mutator system - if(autocvar_g_grappling_hook) - s = strcat(s, ":grappling_hook"); - // initialiation stuff, not good in the mutator system if(!autocvar_g_use_ammunition) s = strcat(s, ":no_use_ammunition"); @@ -925,7 +912,7 @@ void spawnfunc_worldspawn (void) world_initialized = 1; } -void spawnfunc_light (void) +spawnfunc(light) { //makestatic (self); // Who the f___ did that? remove(self); @@ -1318,7 +1305,7 @@ When the player presses attack or jump, change to the next level */ .float autoscreenshot; void IntermissionThink() -{ +{SELFPARAM(); FixIntermissionClient(self); float server_screenshot = (autocvar_sv_autoscreenshot && self.cvar_cl_autoscreenshot); @@ -1595,7 +1582,7 @@ Exit deathmatch games upon conditions ============ */ void CheckRules_Player() -{ +{SELFPARAM(); if (gameover) // someone else quit the game already return; @@ -1694,7 +1681,7 @@ void ClearWinners(void) // they win. Otherwise the defending team wins once the timelimit passes. void assault_new_round(); float WinningCondition_Assault() -{ +{SELFPARAM(); float status; WinningConditionHelper(); // set worldstatus @@ -1727,11 +1714,7 @@ float WinningCondition_Assault() } else { - entity oldself; - oldself = self; - self = ent; - assault_new_round(); - self = oldself; + WITH(entity, self, ent, assault_new_round()); } } } @@ -2202,19 +2185,20 @@ string GotoMap(string m) void EndFrame() -{ +{SELFPARAM(); anticheat_endframe(); float altime; - FOR_EACH_REALCLIENT(self) + entity e_; + FOR_EACH_REALCLIENT(e_) { - entity e = IS_SPEC(self) ? self.enemy : self; + entity e = IS_SPEC(e_) ? e_.enemy : e_; if(e.typehitsound) - self.typehit_time = time; + e_.typehit_time = time; else if(e.damage_dealt) { - self.hit_time = time; - self.damage_dealt_total += ceil(e.damage_dealt); + e_.hit_time = time; + e_.damage_dealt_total += ceil(e.damage_dealt); } } altime = time + frametime * (1 + autocvar_g_antilag_nudge); @@ -2223,14 +2207,18 @@ void EndFrame() // add another frametime because client shows everything with // 1 frame of lag (cl_nolerp 0). The last +1 however should not be // needed! - FOR_EACH_CLIENT(self) + FOR_EACH_CLIENT(e_) { - self.typehitsound = false; - self.damage_dealt = 0; - antilag_record(self, altime); + e_.typehitsound = false; + e_.damage_dealt = 0; + setself(e_); + antilag_record(e_, altime); + } + FOR_EACH_MONSTER(e_) + { + setself(e_); + antilag_record(e_, altime); } - FOR_EACH_MONSTER(self) - antilag_record(self, altime); } @@ -2241,7 +2229,7 @@ void EndFrame() float redirection_timeout; float redirection_nextthink; float RedirectionThink() -{ +{SELFPARAM(); float clients_found; if(redirection_target == "") @@ -2263,8 +2251,10 @@ float RedirectionThink() redirection_nextthink = time + 1; clients_found = 0; - FOR_EACH_REALCLIENT(self) + entity e; + FOR_EACH_REALCLIENT(e) { + setself(e); // TODO add timer LOG_INFO("Redirecting: sending connect command to ", self.netname, "\n"); if(redirection_target == "self")