X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fsv_spawn.qc;h=d6989ad31839d52229cc8f612879fd6c83ab8686;hb=7ff985ed6aa644a01d2520ec06603f32f9dd4074;hp=6b9d4ea05f4066e3f9f188fcff0c7fdd97fbcbd8;hpb=76270b717329f236524703956c0b486352f31725;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/sv_spawn.qc b/qcsrc/common/monsters/sv_spawn.qc index 6b9d4ea05..d6989ad31 100644 --- a/qcsrc/common/monsters/sv_spawn.qc +++ b/qcsrc/common/monsters/sv_spawn.qc @@ -8,21 +8,20 @@ #include #include #endif -entity spawnmonster (string monster, int monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool invincible, int moveflag) +entity spawnmonster (entity e, string monster, int monster_id, entity spawnedby, entity own, vector orig, bool respwn, bool removeifinvalid, int moveflag) { - entity e = spawn(); - e.spawnflags = MONSTERFLAG_SPAWNED; if(!respwn) { e.spawnflags |= MONSTERFLAG_NORESPAWN; } - if(invincible) { e.spawnflags |= MONSTERFLAG_INVINCIBLE; } + //if(invincible) { e.spawnflags |= MONSTERFLAG_INVINCIBLE; } setorigin(e, orig); + bool allow_any = boolean(monster == "anyrandom"); - if(monster == "random") + if(monster == "random" || allow_any) { - RandomSelection_Init(); - FOREACH(Monsters, it != MON_Null && !(it.spawnflags & MONSTER_TYPE_PASSIVE), + RandomSelection_Init(); + FOREACH(Monsters, it != MON_Null && (allow_any || (!(it.spawnflags & MONSTER_TYPE_PASSIVE) && !(it.spawnflags & MON_FLAG_HIDDEN))), { RandomSelection_AddEnt(it, 1, 1); }); @@ -41,8 +40,17 @@ entity spawnmonster (string monster, int monster_id, entity spawnedby, entity ow break; } }); - if(!found) - monster_id = ((monster_id > 0) ? monster_id : MON_FIRST); + + if(!found && !monster_id) + { + if(removeifinvalid) + { + delete(e); + return NULL; // no good + } + else + monster_id = MON_FIRST; + } } e.realowner = spawnedby; @@ -62,7 +70,11 @@ entity spawnmonster (string monster, int monster_id, entity spawnedby, entity ow } // Monster_Spawn checks if monster is valid - Monster_Spawn(e, false, monster_id); + if(!Monster_Spawn(e, false, monster_id)) + { + delete(e); + return NULL; // remove even if told not to, as we didn't spawn any kind of monster + } return e; }