X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fmonsters%2Fsv_monsters.qc;h=8658b437f774f2831eb8d1ba4a9f175ac135ab03;hb=e500c4c3ae16913240d1bd0509e68510195f2872;hp=29209172c6f347065e732d6c9bedf3cb32e4504c;hpb=bb9450d7c9e2d77e39d5cfcce7a0a74b76de3cf5;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 29209172c..8658b437f 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -7,18 +7,19 @@ #include "../constants.qh" #include "../teams.qh" #include "../util.qh" - #include "monsters.qh" + #include "all.qh" #include "sv_monsters.qh" - #include "../weapons/weapons.qh" + #include "../weapons/all.qh" #include "../../server/autocvars.qh" #include "../../server/defs.qh" #include "../deathtypes.qh" #include "../../server/mutators/mutators_include.qh" #include "../../server/tturrets/include/turrets_early.qh" - #include "../../server/vehicles/vehicles_def.qh" + #include "../../server/vehicles/vehicle.qh" #include "../../server/campaign.qh" #include "../../server/command/common.qh" #include "../../server/command/cmd.qh" + #include "../triggers/triggers.qh" #include "../../csqcmodellib/sv_model.qh" #include "../../server/round_handler.qh" #include "../../server/tturrets/include/turrets.qh" @@ -39,8 +40,7 @@ void monster_dropitem() e.monster_loot = self.monster_loot; - other = e; - MUTATOR_CALLHOOK(MonsterDropItem); + MUTATOR_CALLHOOK(MonsterDropItem, e); e = other; if(e && e.monster_loot) @@ -275,9 +275,9 @@ float LoadMonsterSounds(string f, float first) field = GetMonsterSoundSampleField(argv(0)); if(GetMonsterSoundSampleField_notFound) continue; - if(self.field) - strunzone(self.field); - self.field = strzone(strcat(argv(1), " ", argv(2))); + if (self.(field)) + strunzone(self.(field)); + self.(field) = strzone(strcat(argv(1), " ", argv(2))); } fclose(fh); return 1; @@ -305,7 +305,7 @@ void MonsterSound(.string samplefield, float sound_delay, float delaytoo, float if(delaytoo) if(time < self.msound_delay) return; // too early - GlobalSound(self.samplefield, chan, VOICETYPE_PLAYERSOUND); + GlobalSound(self.(samplefield), chan, VOICETYPE_PLAYERSOUND); self.msound_delay = time + sound_delay; } @@ -321,7 +321,7 @@ void monster_makevectors(entity e) makevectors(self.v_angle); } -float monster_melee(entity targ, float damg, float anim, float er, float anim_finished, float deathtype, float dostop) +float monster_melee(entity targ, float damg, float anim, float er, float anim_finished, int deathtype, float dostop) { if (self.health <= 0) return false; // attacking while dead?! @@ -369,7 +369,7 @@ float Monster_CanRespawn(entity ent) { other = ent; if(ent.deadflag == DEAD_DEAD) // don't call when monster isn't dead - if(MUTATOR_CALLHOOK(MonsterRespawn)) + if(MUTATOR_CALLHOOK(MonsterRespawn, ent)) return true; // enabled by a mutator if(ent.spawnflags & MONSTERFLAG_NORESPAWN) @@ -502,7 +502,7 @@ vector monster_pickmovetarget(entity targ) vector targ_origin = ((self.enemy.absmin + self.enemy.absmax) * 0.5); targ_origin = WarpZone_RefSys_TransformOrigin(self.enemy, self, targ_origin); // origin of target as seen by the monster (us) WarpZone_TraceLine(self.origin, targ_origin, MOVE_NOMONSTERS, self); - + if((self.enemy == world) || (self.enemy.deadflag != DEAD_NO || self.enemy.health < 1) || (self.enemy.frozen) @@ -516,19 +516,19 @@ vector monster_pickmovetarget(entity targ) self.enemy = world; self.pass_distance = 0; } - + if(self.enemy) { /*WarpZone_TrailParticles(world, particleeffectnum("red_pass"), self.origin, targ_origin); print("Trace origin: ", vtos(targ_origin), "\n"); print("Target origin: ", vtos(self.enemy.origin), "\n"); print("My origin: ", vtos(self.origin), "\n"); */ - + self.monster_movestate = MONSTER_MOVE_ENEMY; self.last_trace = time + 1.2; return targ_origin; } - + /*makevectors(self.angles); self.monster_movestate = MONSTER_MOVE_ENEMY; self.last_trace = time + 1.2; @@ -576,7 +576,7 @@ vector monster_pickmovetarget(entity targ) if(((self.flags & FL_FLY) && (self.spawnflags & MONSTERFLAG_FLY_VERTICAL)) || (self.flags & FL_SWIM)) { - pos_z = random() * 200; + pos.z = random() * 200; if(random() >= 0.5) pos.z *= -1; } @@ -591,7 +591,7 @@ void monster_CalculateVelocity(entity mon, vector to, vector from, float turnrat { float current_distance = vlen((('1 0 0' * to.x) + ('0 1 0' * to.y)) - (('1 0 0' * from.x) + ('0 1 0' * from.y))); // for the sake of this check, exclude Z axis float initial_height = 0; //min(50, (targ_distance * tanh(20))); - float current_height = (initial_height * min(1, (current_distance / self.pass_distance))); + float current_height = (initial_height * min(1, self.pass_distance ? (current_distance / self.pass_distance) : 0)); //print("current_height = ", ftos(current_height), ", initial_height = ", ftos(initial_height), ".\n"); vector targpos; @@ -715,11 +715,13 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ targ = self.goalentity; - monster_target = targ; - monster_speed_run = runspeed; - monster_speed_walk = walkspeed; - - if(MUTATOR_CALLHOOK(MonsterMove) || gameover || self.draggedby != world || (round_handler_IsActive() && !round_handler_IsRoundStarted()) || time < game_starttime || (autocvar_g_campaign && !campaign_bots_may_start) || time < self.spawn_time) + if (MUTATOR_CALLHOOK(MonsterMove, runspeed, walkspeed, targ) + || gameover + || self.draggedby != world + || (round_handler_IsActive() && !round_handler_IsRoundStarted()) + || time < game_starttime + || (autocvar_g_campaign && !campaign_bots_may_start) + || time < self.spawn_time) { runspeed = walkspeed = 0; if(time >= self.spawn_time) @@ -728,7 +730,6 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ return; } - targ = monster_target; runspeed = bound(0, monster_speed_run * Monster_SkillModifier(), runspeed * 2); // limit maxspeed to prevent craziness walkspeed = bound(0, monster_speed_walk * Monster_SkillModifier(), walkspeed * 2); // limit maxspeed to prevent craziness @@ -753,7 +754,7 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ WarpZone_RefSys_Copy(self.enemy, self); WarpZone_RefSys_AddInverse(self.enemy, self); // wz1^-1 ... wzn^-1 receiver self.moveto = WarpZone_RefSys_TransformOrigin(self.enemy, self, (0.5 * (self.enemy.absmin + self.enemy.absmax))); - + self.pass_distance = vlen((('1 0 0' * self.enemy.origin.x) + ('0 1 0' * self.enemy.origin.y)) - (('1 0 0' * self.origin.x) + ('0 1 0' * self.origin.y))); MonsterSound(monstersound_sight, 0, false, CH_VOICE); } @@ -793,7 +794,7 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ { if((self.flags & FL_ONGROUND) || ((self.flags & FL_FLY) || (self.flags & FL_SWIM))) monster_CalculateVelocity(self, self.moveto, self.origin, true, ((self.enemy) ? runspeed : walkspeed)); - + /*&if(self.flags & FL_FLY || self.flags & FL_SWIM) movelib_move_simple(v_forward, ((self.enemy) ? runspeed : walkspeed), 0.6); else @@ -820,9 +821,9 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ if (vlen(self.velocity) <= 30) self.frame = manim_idle; } - + self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95); - + vector real_angle = vectoangles(self.steerto) - self.angles; float turny = 25; if(self.state == MONSTER_STATE_ATTACK_MELEE) @@ -841,7 +842,7 @@ void monster_remove(entity mon) if(!mon) return; // nothing to remove - pointparticles(particleeffectnum("item_pickup"), mon.origin, '0 0 0', 1); + Send_Effect("item_pickup", mon.origin, '0 0 0', 1); if(mon.weaponentity) remove(mon.weaponentity); @@ -910,7 +911,7 @@ void monsters_reset() self.moveto = self.origin; } -void monsters_corpse_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) +void monsters_corpse_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { self.health -= damage; @@ -979,7 +980,7 @@ void monster_die(entity attacker, float gibbed) MON_ACTION(self.monsterid, MR_DEATH); } -void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) +void monsters_damage (entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force) { if(self.frozen && deathtype != DEATH_KILL && deathtype != DEATH_NADE_ICE_FREEZE) return; @@ -1038,9 +1039,8 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea WaypointSprite_Kill(self.sprite); - frag_attacker = attacker; frag_target = self; - MUTATOR_CALLHOOK(MonsterDies); + MUTATOR_CALLHOOK(MonsterDies, attacker); if(self.health <= -100 || deathtype == DEATH_KILL) // check if we're already gibbed { @@ -1078,11 +1078,11 @@ void monster_setupcolors(entity mon) void monster_changeteam(entity ent, float newteam) { if(!teamplay) { return; } - + ent.team = newteam; ent.monster_attack = true; // new team, activate attacking monster_setupcolors(ent); - + if(ent.sprite) { WaypointSprite_UpdateTeamRadar(ent.sprite, RADARICON_DANGER, ((newteam) ? Team_ColorRGB(newteam) : '1 0 0')); @@ -1241,7 +1241,7 @@ float monster_initialize(float mon_id) if(mon.spawnflags & MONSTER_SIZE_BROKEN) if(!(self.spawnflags & MONSTERFLAG_RESPAWNED)) self.scale *= 1.3; - + setsize(self, mon.mins * self.scale, mon.maxs * self.scale); if(!self.ticrate)