Building and NPC damage issue

Using True PVE v2.2.3, `spawn rocket_mlrs` and `spawn rocket_basic` don't do damage to NPCs or buildings in PVE areas, and also don't do damage to scientists even in exclude zones. Rockets launched from a launcher work in both of these cases.

Here is my TruePVE configuration: https://pastebin.com/598jP38f

Note in particular that I have `"defaultAllowDamage":true,` and all rules end in `cannot hurt Players`, so I would expect NPCs to always take damage.

If I'm reading the trace correctly, it seems TruePVE fails to determine the initiator and decides to just block by default:

======================
== STARTING TRACE ==
== 22:48:03.98488 ==
======================
From: MLRSRocket, rocket_mlrs
To: ScientistNPC, scientistnpc_roamtethered
Checking exclusions between [empty] and [empty]
Shared locations: none
No shared locations, or no matching exclusion mapping - no exclusions
No exclusion found - looking up RuleSet...
Using RuleSet "default"
Initiator empty for player damage; block and return (Damage Type: Explosion, Damage Amount: 500)
======================
== STARTING TRACE ==
== 22:48:04.78471 ==
======================
From: TimedExplosive, rocket_basic
To: ScientistNPC, scientistnpc_roamtethered
Checking exclusions between [empty] and [empty]
Shared locations: none
No shared locations, or no matching exclusion mapping - no exclusions
No exclusion found - looking up RuleSet...
Using RuleSet "default"
Initiator empty for player damage; block and return (Damage Type: Explosion, Damage Amount: 315.2245)
======================
== STARTING TRACE ==
== 22:48:05.92394 ==
======================
From: TimedExplosive, rocket_hv
To: ScientistNPC, scientistnpc_roamtethered
Checking exclusions between [empty] and [empty]
Shared locations: none
No shared locations, or no matching exclusion mapping - no exclusions
No exclusion found - looking up RuleSet...
Using RuleSet "default"
Initiator empty for player damage; block and return (Damage Type: AntiVehicle, Damage Amount: 427.3882)

hi, truepve blocks any source of unknown damage to prevent players from exploiting whenever there is a game bug or limitation. such as no initiator being set by the game for fire spread from certain incendiary ammo, or anything spawned with the spawn command. I have asked Facepunch to fix these, but they haven't gotten around to it yet.

you can change false to ruleSet.defaultAllowDamage, and return tut; to return tut || ruleSet.defaultAllowDamage;

Ill make those changes in the next update. here's the current code:

            if (hitInfo.Initiator.IsRealNull())
            {
                if ((damageType == DamageType.Slash || damageType == DamageType.Stab || damageType == DamageType.Cold) && (entity.lastAttacker is not BasePlayer lastAttacker || !lastAttacker.userID.IsSteamId() || lastAttacker == entity))
                {
                    if (trace) Trace("Initiator is hurt trigger; allow and return", 1);
                    return true;
                }
                if (damageTypes.Exists(x => hitInfo.damageTypes.Get(x) > 0f))
                {
                    bool tut = IsTutorialNetworkGroup(entity);
                    if (trace) Trace($"Initiator empty for player damage; {(tut ? "allow and return (Tutorial Zone)" : "block and return")} (Damage Type: {damageType}, Damage Amount: {damageAmount})", 1);
                    return tut;
                }
                if (weapon is MLRSRocket)
                {
                    if (trace) Trace($"Initiator empty for MLRS Rocket; block and return", 1);
                    return false;
                }
                if (trace) Trace($"Initiator empty; allow and return {damageType} {damageAmount}", 1);
                return true;
            }​

 

I don't understand what your second paragraph is saying. Can you word it differently?

I reworded it