X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fmutators%2Fmutator%2Fgamemode_invasion.qc;h=1496feec595cdd2ec0fb83b0026ba267ae7380a7;hb=110554a235aafe14d1ae6dd6310a982a9af9e7fe;hp=efed23a5df41f48dd0897ffb72c8434412f1cb47;hpb=edc295814332d4ff827dd75b0edda94e66041c8d;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/mutators/mutator/gamemode_invasion.qc b/qcsrc/server/mutators/mutator/gamemode_invasion.qc index efed23a5d..1496feec5 100644 --- a/qcsrc/server/mutators/mutator/gamemode_invasion.qc +++ b/qcsrc/server/mutators/mutator/gamemode_invasion.qc @@ -23,28 +23,18 @@ spawnfunc(invasion_spawnpoint) this.classname = "invasion_spawnpoint"; IL_PUSH(g_invasion_spawns, this); - - if(autocvar_g_invasion_zombies_only) // precache only if it hasn't been already - if(this.spawnmob) - { - FOREACH(Monsters, it.netname == this.spawnmob, - { - it.mr_precache(it); - }); - } } Monster invasion_PickMonster(int supermonster_count) { - if(autocvar_g_invasion_zombies_only) - return MON_ZOMBIE; - RandomSelection_Init(); FOREACH(Monsters, it != MON_Null, { if((it.spawnflags & MONSTER_TYPE_PASSIVE) || (it.spawnflags & MONSTER_TYPE_FLY) || (it.spawnflags & MONSTER_TYPE_SWIM) || (it.spawnflags & MONSTER_SIZE_QUAKE) || ((it.spawnflags & MON_FLAG_SUPERMONSTER) && supermonster_count >= 1)) continue; + if(autocvar_g_invasion_zombies_only && !(it.spawnflags & MONSTER_TYPE_UNDEAD)) + continue; RandomSelection_AddEnt(it, 1, 1); }); @@ -77,11 +67,18 @@ void invasion_SpawnChosenMonster(Monster mon) setsize(e, mon.mins, mon.maxs); if(MoveToRandomMapLocation(e, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256)) - monster = spawnmonster(e, "", mon.m_id, NULL, NULL, e.origin, false, false, 2); - else return; + monster = spawnmonster(e, "", mon.monsterid, NULL, NULL, e.origin, false, false, 2); + else + { + delete(e); + return; + } } else // if spawnmob field falls through (unset), fallback to mon (relying on spawnmonster for that behaviour) - monster = spawnmonster(spawn(), spawn_point.spawnmob, mon.m_id, spawn_point, spawn_point, spawn_point.origin, false, false, 2); + monster = spawnmonster(spawn(), spawn_point.spawnmob, mon.monsterid, spawn_point, spawn_point, spawn_point.origin, false, false, 2); + + if(!monster) + return; if(spawn_point) monster.target2 = spawn_point.target2; monster.spawnshieldtime = time; @@ -465,22 +462,5 @@ void invasion_DelayedInit(entity this) // Do this check with a delay so we can w void invasion_Initialize() { - if(autocvar_g_invasion_zombies_only) { - Monster mon = MON_ZOMBIE; - mon.mr_precache(mon); - } else - { - float i; - entity mon; - for(i = MON_FIRST; i <= MON_LAST; ++i) - { - mon = get_monsterinfo(i); - if((mon.spawnflags & MONSTER_TYPE_FLY) || (mon.spawnflags & MONSTER_TYPE_SWIM)) - continue; // flying/swimming monsters not yet supported - - mon.mr_precache(mon); - } - } - InitializeEntity(NULL, invasion_DelayedInit, INITPRIO_GAMETYPE); }