NSSurfacePropEntity: change string damageDef
to NSDict damageDecl
in Damage()
This commit is contained in:
parent
8b4b7f0a26
commit
f9dd7362b4
11 changed files with 74 additions and 66 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -62,7 +62,10 @@ NSItem::Respawn(void)
|
|||
|
||||
super::Respawn();
|
||||
BecomePickup();
|
||||
ScheduleThink(AdjustSpawnPos, 0.0f);
|
||||
|
||||
if (CreatedByMap() == true) {
|
||||
ScheduleThink(AdjustSpawnPos, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue