NSSurfacePropEntity: change string damageDef to NSDict damageDecl in Damage()

This commit is contained in:
Marco Cawthorne 2024-07-18 16:32:05 -07:00
parent 8b4b7f0a26
commit f9dd7362b4
Signed by: eukara
GPG key ID: CE2032F0A2882A22
11 changed files with 74 additions and 66 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -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();

View file

@ -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

View file

@ -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;

View file

@ -62,7 +62,10 @@ NSItem::Respawn(void)
super::Respawn();
BecomePickup();
ScheduleThink(AdjustSpawnPos, 0.0f);
if (CreatedByMap() == true) {
ScheduleThink(AdjustSpawnPos, 0.0f);
}
}
void

View file

@ -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 {

View file

@ -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;

View file

@ -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. */

View file

@ -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
}

View file

@ -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