]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/monsters/spawn.qc
Merge branch 'terencehill/lms_itemtimes_fix' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / monsters / spawn.qc
index 95e0261aeb511687fe40ae57497945b2a10eaff8..70459263f1087da264e10fe71d95b218bbf59279 100644 (file)
@@ -1,65 +1,69 @@
-entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, vector orig, float respwn, float moveflag)
-{
-       if(!spawncode_first_load)
-       {
-               initialize_field_db();
-               spawncode_first_load = TRUE;
-       }
-       
+#if defined(CSQC)
+#elif defined(MENUQC)
+#elif defined(SVQC)
+    #include "../util.qh"
+    #include "all.qh"
+    #include "sv_monsters.qh"
+    #include "spawn.qh"
+    #include <server/autocvars.qh>
+    #include <server/defs.qh>
+#endif
+entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float invincible, float moveflag)
+{SELFPARAM();
+       float i;
        entity e = spawn();
-       
+
        e.spawnflags = MONSTERFLAG_SPAWNED;
-       
-       if not(respwn)
-               e.spawnflags |= MONSTERFLAG_NORESPAWN;
-       
+
+       if(!respwn) { e.spawnflags |= MONSTERFLAG_NORESPAWN; }
+       if(invincible) { e.spawnflags |= MONSTERFLAG_INVINCIBLE; }
+
        setorigin(e, orig);
-       
-       if(monster != "")
+
+       if(monster == "random")
+       {
+               RandomSelection_Init();
+               for(i = MON_FIRST; i <= MON_LAST; ++i)
+                       RandomSelection_Add(world, i, string_null, 1, 1);
+
+           monster_id = RandomSelection_chosen_float;
+       }
+       else if(monster != "")
        {
-               float i, found = 0;
+               float found = 0;
                entity mon;
                for(i = MON_FIRST; i <= MON_LAST; ++i)
                {
                        mon = get_monsterinfo(i);
                        if(mon.netname == monster)
                        {
-                               found = TRUE;
+                               found = true;
+                               monster_id = mon.monsterid; // we have the monster, old monster id is no longer required
                                break;
                        }
                }
-               if not(found)
-                       monster = (get_monsterinfo(MON_FIRST)).netname;
+               if(!found)
+                       monster_id = ((monster_id > 0) ? monster_id : MON_FIRST);
        }
-               
-       if(monster == "")
-       if(mnster)
-               monster = (get_monsterinfo(mnster)).netname;
-       
+
        e.realowner = spawnedby;
-       
+
        if(moveflag)
                e.monster_moveflags = moveflag;
-       
+
        if(IS_PLAYER(spawnedby))
        {
                if(teamplay && autocvar_g_monsters_teams)
                        e.team = spawnedby.team; // colors handled in spawn code
-                       
-               if(e.team)
-                       e.colormap = 1024;
-               else
-                       e.colormap = spawnedby.colormap;
-                       
+
                if(autocvar_g_monsters_owners)
-                       e.monster_owner = own; // using .owner makes the monster non-solid for its master
-                       
-               e.angles = spawnedby.angles;
+                       e.monster_follow = own; // using .owner makes the monster non-solid for its master
+
+               e.angles_y = spawnedby.angles_y;
        }
-               
-       monster = strcat("$ spawnfunc_monster_", monster);
-               
-       target_spawn_edit_entity(e, monster, world, world, world, world, world);
-               
+
+       // Monster_Spawn checks if monster is valid
+       Monster_Spawn(e, monster_id);
+
        return e;
 }