From f9dd7362b4c59c68888c206e3fdef2f46721d4a0 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Thu, 18 Jul 2024 16:32:05 -0700 Subject: [PATCH] NSSurfacePropEntity: change `string damageDef` to `NSDict damageDecl` in Damage() --- src/gs-entbase/server/func_breakable.qc | 4 +-- src/nav/node_edit.qc | 2 +- src/server/mapcycle.qc | 33 +++++++++++++------------ src/shared/NSClientPlayer.h | 2 +- src/shared/NSClientPlayer.qc | 4 +-- src/shared/NSItem.qc | 5 +++- src/shared/NSMonster.qc | 10 ++++++-- src/shared/NSProjectile.qc | 23 ++++++----------- src/shared/NSSurfacePropEntity.h | 2 +- src/shared/NSSurfacePropEntity.qc | 31 ++++++++++++----------- src/shared/NSWeapon.qc | 24 +++++++++--------- 11 files changed, 74 insertions(+), 66 deletions(-) diff --git a/src/gs-entbase/server/func_breakable.qc b/src/gs-entbase/server/func_breakable.qc index c0bd7f4f..ce4c6d44 100644 --- a/src/gs-entbase/server/func_breakable.qc +++ b/src/gs-entbase/server/func_breakable.qc @@ -411,10 +411,10 @@ func_breakable::Touch(entity eToucher) NSDict damageDecl = spawn(NSDict); damageDecl.AddKey("damage", itos(dmgAmount)); m_bCanTouch = false; - Damage(eToucher, eToucher, damageDecl.GetDeclBody(), 1.0f, dmgDir, eToucher.origin); + Damage(eToucher, eToucher, damageDecl, 1.0f, dmgDir, eToucher.origin); if ((GetSurfaceData(SURFDATA_MATERIAL) == GSMATERIAL_GLASS) || (GetSurfaceData(SURFDATA_MATERIAL) == GSMATERIAL_COMPUTER)) { - Damage(eToucher, eToucher, damageDecl.GetDeclBody(), 0.25f, dmgDir, eToucher.origin); + Damage(eToucher, eToucher, damageDecl, 0.25f, dmgDir, eToucher.origin); } remove(damageDecl); } diff --git a/src/nav/node_edit.qc b/src/nav/node_edit.qc index d884898f..b0f93348 100644 --- a/src/nav/node_edit.qc +++ b/src/nav/node_edit.qc @@ -741,7 +741,7 @@ var bool autocvar_r_renderEntityInfo = false; void SV_AddDebugPolygons(void) { - NodeEdit_DrawDebugInfo(); + //NodeEdit_DrawDebugInfo(); if (autocvar_r_renderEntityInfo) { makevectors(self.v_angle); diff --git a/src/server/mapcycle.qc b/src/server/mapcycle.qc index a8aaf602..d9f44391 100644 --- a/src/server/mapcycle.qc +++ b/src/server/mapcycle.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2022 Vera Visions LLC. + * Copyright (c) 2016-2024 Vera Visions LLC. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,16 +14,14 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -noref var string g_mapcycle_override = __NULL__; - void Mapcycle_Load(string filename) { filestream fs_mapcycle; string temp; - int mapcount = 0i; - string lastmap = ""; - int map_next = 0i; + int mapCount = 0i; + string lastMap = ""; + int nextMapID = 0i; fs_mapcycle = fopen(filename, FILE_READ); @@ -37,27 +35,29 @@ Mapcycle_Load(string filename) if (FileExists(strcat("maps/", temp, ".bsp")) == false) continue; - localcmd(sprintf("alias m%i \"map %s;alias nextmap m%i\"\n", mapcount, temp, mapcount + 1i)); + localcmd(sprintf("alias m%i \"map %s;alias nextmap m%i\"\n", mapCount, temp, mapCount + 1i)); - if (mapname == lastmap) - map_next = mapcount; + if (mapname == lastMap) { + nextMapID = mapCount; + } - lastmap = temp; - mapcount++; + lastMap = temp; + mapCount++; } fclose(fs_mapcycle); - if (mapcount <= 0i) + if (mapCount <= 0i) { return; + } /* override the last map so that it goes back to m0 */ - localcmd(sprintf("alias m%i \"map %s;alias nextmap m0\"\n", mapcount - 1i, lastmap)); + localcmd(sprintf("alias m%i \"map %s;alias nextmap m0\"\n", mapCount - 1i, lastMap)); /* the current map in the list will decide the nextmap */ - localcmd(sprintf("alias nextmap m%i\n", map_next)); + localcmd(sprintf("alias nextmap m%i\n", nextMapID)); - NSLog("...MapCycle initialized with %i entries.", mapcount); + NSLog("...MapCycle initialized with %i entries.", mapCount); } void @@ -66,8 +66,9 @@ Mapcycle_Init(void) string cycleFile = autocvar(g_mapCycle, "mapcycle.txt"); /* by default, this will be multiplayer only */ - if (g_grMode.IsMultiplayer() == false) + if (g_grMode.IsMultiplayer() == false) { return; + } InitStart(); diff --git a/src/shared/NSClientPlayer.h b/src/shared/NSClientPlayer.h index 6ac70d25..8f4566cc 100644 --- a/src/shared/NSClientPlayer.h +++ b/src/shared/NSClientPlayer.h @@ -64,7 +64,7 @@ public: /** Empty & shared between Client and Server. This is run on every player, every frame, to update their animation cycle. */ virtual void UpdatePlayerAnimation(float); - virtual void Damage(entity, entity, string, float, vector, vector); + virtual void Damage(entity, entity, NSDict, float, vector, vector); #ifdef CLIENT diff --git a/src/shared/NSClientPlayer.qc b/src/shared/NSClientPlayer.qc index a4cf44fb..85d918d7 100644 --- a/src/shared/NSClientPlayer.qc +++ b/src/shared/NSClientPlayer.qc @@ -1574,10 +1574,10 @@ NSClientPlayer::Footsteps_Update(void) } void -NSClientPlayer::Damage(entity inflictor, entity attacker, string damageDef, float damageScale, vector dmgDir, vector hitLocation) +NSClientPlayer::Damage(entity inflictor, entity attacker, NSDict damageDecl, float damageScale, vector dmgDir, vector hitLocation) { #ifdef SERVER - super::Damage(inflictor, attacker, damageDef, damageScale, dmgDir, hitLocation); + super::Damage(inflictor, attacker, damageDecl, damageScale, dmgDir, hitLocation); #if 0 bool isFriendlyFire = false; diff --git a/src/shared/NSItem.qc b/src/shared/NSItem.qc index 5b0ad211..bce1c590 100644 --- a/src/shared/NSItem.qc +++ b/src/shared/NSItem.qc @@ -62,7 +62,10 @@ NSItem::Respawn(void) super::Respawn(); BecomePickup(); - ScheduleThink(AdjustSpawnPos, 0.0f); + + if (CreatedByMap() == true) { + ScheduleThink(AdjustSpawnPos, 0.0f); + } } void diff --git a/src/shared/NSMonster.qc b/src/shared/NSMonster.qc index b9b80b74..8ce9e000 100644 --- a/src/shared/NSMonster.qc +++ b/src/shared/NSMonster.qc @@ -1529,7 +1529,10 @@ NSMonster::Touch(entity eToucher) if (HasFlags(FL_ONGROUND) == false) { if (eToucher.takedamage != DAMAGE_NO) { NSSurfacePropEntity toucher = (NSSurfacePropEntity)eToucher; - toucher.Damage(this, owner, ftos(m_flLeapDamage), 1.0, vectorNormalize(angles), trace_endpos); + NSDict damageDecl = spawn(NSDict); + damageDecl.AddKey("damage", ftos(m_flLeapDamage)); + toucher.Damage(this, owner, damageDecl, 1.0, vectorNormalize(angles), trace_endpos); + remove(damageDecl); m_bLeapAttacked = true; } } @@ -1807,9 +1810,12 @@ NSMonster::Respawn(void) SetMovetype(MOVETYPE_WALK); SetSize(GetSpawnVector("mins"), GetSpawnVector("maxs")); SetEyePos([0, 0, m_flEyeHeight]); - ScheduleThink(AdjustSpawnPos, 0.0f); SetSkin(m_flSkin); + if (CreatedByMap() == true) { + ScheduleThink(AdjustSpawnPos, 0.0f); + } + if (HasSpawnFlags(MSF_MONSTERCLIP)) { hitcontentsmaski = CONTENTBITS_BOXSOLID | CONTENTBIT_MONSTERCLIP; } else { diff --git a/src/shared/NSProjectile.qc b/src/shared/NSProjectile.qc index 642be5c6..6e49bcb3 100644 --- a/src/shared/NSProjectile.qc +++ b/src/shared/NSProjectile.qc @@ -506,17 +506,10 @@ NSProjectile::Touch(entity eToucher) if (eToucher.takedamage != DAMAGE_NO) { NSSurfacePropEntity toucher = (NSSurfacePropEntity)eToucher; - float damageVal; - float baseDamage = GetSubDefFloat(m_defDamage, "damage"); - float randomDamage = GetSubDefFloat(m_defDamage, "damage_random"); - damageVal = (baseDamage + randomDamage); - - if (m_flDmgMultiplier >= 0.0) - damageVal *= m_flDmgMultiplier; - - //Damage_Apply(eToucher, owner, damageVal, 0, DMG_BLUNT); - toucher.Damage(this, owner, ftos(damageVal), 1.0, vectorNormalize(angles), origin); - //Damage(this, owner, ftos(m_flLeapDamage), 1.0, vectorNormalize(angles), trace_endpos); + NSDict damageDecl = spawn(NSDict); + damageDecl.AddKey("damage", GetSubDefString(m_defDamage, "damage")); + toucher.Damage(this, owner, damageDecl, m_flDmgMultiplier, vectorNormalize(angles), trace_endpos); + remove(damageDecl); } if (m_bDetonateOnWorld) { @@ -824,13 +817,13 @@ NSProjectile::_ApplyDamage(void) trace_surface_id = m_iMultiBody; g_dmg_vecLocation = trace_endpos; - string dmgDef = sprintf("\"damage\" \"%i\"", m_iMultiValue); + NSDict damageDecl = spawn(NSDict); + damageDecl.AddKey("damage", itos(m_iMultiValue)); vector dmgDir = dirFromTarget(GetOrigin(), m_eMultiTarget.origin); - NSError("Applying %i damage to %S", m_iMultiValue, m_eMultiTarget.classname); + entityDamage(m_eMultiTarget, owner, owner, damageDecl.GetDeclBody(), classname, GetOrigin(), dmgDir, trace_endpos); + remove(damageDecl); -entityDamage(m_eMultiTarget, owner, owner, dmgDef, "", GetOrigin(), dmgDir, trace_endpos); - //Damage_Apply(m_eMultiTarget, owner, m_iMultiValue, m_iWeapon, DMG_BULLET); m_eMultiTarget = __NULL__; m_iMultiValue = 0; m_iMultiBody = 0; diff --git a/src/shared/NSSurfacePropEntity.h b/src/shared/NSSurfacePropEntity.h index 0600a46b..a46859e1 100644 --- a/src/shared/NSSurfacePropEntity.h +++ b/src/shared/NSSurfacePropEntity.h @@ -79,7 +79,7 @@ public: /* new */ #ifdef SERVER /** Applies damage to the entity. */ - virtual void Damage(entity, entity, string, float, vector, vector); + virtual void Damage(entity, entity, NSDict, float, vector, vector); /** Called when a different entity gets damaged by this entity. */ virtual void DamageFeedback(entity, entity, int); /** Called whenever the entity receives damage. */ diff --git a/src/shared/NSSurfacePropEntity.qc b/src/shared/NSSurfacePropEntity.qc index c47581e2..8c4aed1a 100644 --- a/src/shared/NSSurfacePropEntity.qc +++ b/src/shared/NSSurfacePropEntity.qc @@ -241,22 +241,20 @@ NSSurfacePropEntity::ParentUpdate(void) } void -NSSurfacePropEntity::Damage(entity inflictor, entity attacker, string damageDef, float damageScale, vector dmgDir, vector hitLocation) +NSSurfacePropEntity::Damage(entity inflictor, entity attacker, NSDict damageDecl, float damageScale, vector dmgDir, vector hitLocation) { - bool defBody = EntityDef_IDFromName(damageDef) == -1i ? true : false; - string damageString; + string damageString = ReadString(damageDecl.GetString("damage")); - if (defBody == true) { - NSDict damageDecl = spawn(NSDict); - damageDecl.SetDeclBody(damageDef); - damageString = damageDecl.GetString("damage"); - } else { - damageString = EntityDef_GetKeyValue(damageDef, "damage"); - } +#if 0 + float randomDamage = GetSubDefFloat(m_defDamage, "damage_random"); + damageVal = (baseDamage + randomDamage); +#endif float damagePoints = (float)rint(stof(damageString) * damageScale); NSSurfacePropEntity ourAttacker = (NSSurfacePropEntity)attacker; + EntLog("applying %d damage by %s", damagePoints, attacker.classname); + /* notify them */ if (isSentient(attacker)) { ourAttacker.DamageFeedback(this, inflictor, damagePoints); @@ -283,9 +281,11 @@ NSSurfacePropEntity::Ignite(entity attacker, float flLifetime, int iWeapon) m_flBurnTime = GetTime() + flLifetime; if (m_flBurnDmgTime < time) { - string dmgDef = sprintf("\"damage\" \"%i\"\n\"skip_armor\" \"1\"", 5i); - Damage(m_eBurner, m_eBurner, dmgDef, 1.0f, g_vec_null, origin); - //Damage_Apply(this, attacker, 5, iWeapon, DMG_BURN | DMG_SKIP_ARMOR); + NSDict damageDecl = spawn(NSDict); + damageDecl.AddKey("damage", "5"); + damageDecl.AddKey("skip_armor", "1"); + damageDecl.AddKey("type", "burn"); + Damage(m_eBurner, m_eBurner, damageDecl, 1.0f, g_vec_null, origin); m_flBurnDmgTime = time + 0.25f; } } @@ -830,7 +830,10 @@ entityDamage(entity targetEnt, entity inflictingEnt, entity attackingEnt, string return; } - theTarget.Damage(inflictingEnt, attackingEnt, damageDef, 1.0, damageDir, hitLocation); + NSDict damageDecl = spawn(NSDict); + damageDecl.SetDeclBody(damageDef); + theTarget.Damage(inflictingEnt, attackingEnt, damageDecl, 1.0, damageDir, hitLocation); + remove(damageDecl); #endif } diff --git a/src/shared/NSWeapon.qc b/src/shared/NSWeapon.qc index fc00a3a8..3f08fd9b 100644 --- a/src/shared/NSWeapon.qc +++ b/src/shared/NSWeapon.qc @@ -763,9 +763,13 @@ NSWeapon::Attack(string fireInfo) vector traceStart = ourOwner.GetEyePos(); vector traceEnd = traceStart + (anglesToForward(eyeAngles) * meleeRange); float meleeRate; + NSSurfacePropEntity hitEnt; + vector hitLoc; ourOwner.hitcontentsmaski = (CONTENTBITS_POINTSOLID | CONTENTBIT_CORPSE); traceline(traceStart, traceEnd, MOVE_NORMAL, ourOwner); + hitEnt = (NSSurfacePropEntity)trace_ent; + hitLoc = trace_endpos; ourOwner.hitcontentsmaski = oldhitcontents; if (trace_fraction >= 1.0) { @@ -787,25 +791,23 @@ NSWeapon::Attack(string fireInfo) } /* don't bother with decals, we got squibs */ - if (trace_ent.iBleeds) { - NSSurfacePropEntity targetEnt; - targetEnt = (NSSurfacePropEntity)trace_ent; - FX_Blood(trace_endpos, targetEnt.GetBloodColor()); + if (hitEnt.iBleeds) { + FX_Blood(hitLoc, hitEnt.GetBloodColor()); } - if (trace_ent.takedamage) { - NSSurfacePropEntity toHurt = (NSSurfacePropEntity) trace_ent; - int meleeDamage = GetSubDefInt(m_meleeDef, "damage"); - - toHurt.Damage(this, owner, itos(meleeDamage), 1.0, anglesToForward(eyeAngles), traceEnd); + if (hitEnt.takedamage) { + NSDict damageDecl = spawn(NSDict); + damageDecl.AddKey("damage", GetSubDefString(m_meleeDef, "damage")); + hitEnt.Damage(this, owner, damageDecl, 1.0, anglesToForward(eyeAngles), traceEnd); + remove(damageDecl); //Damage_Apply(trace_ent, ourOwner, meleeDamage, 0, DMG_BLUNT); - if (trace_ent.iBleeds) { + if (hitEnt.iBleeds) { Sound_Play(ourOwner, CHAN_WEAPON, GetSubDefString(m_meleeDef, "snd_flesh")); } } else { Sound_Play(ourOwner, CHAN_WEAPON, GetSubDefString(m_meleeDef, "snd_hit")); - DecalGroups_Place("Impact.Shot", trace_endpos + (v_forward * -2)); + DecalGroups_Place("Impact.Shot", hitLoc + (anglesToForward(eyeAngles) * -2)); } #endif