123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- class TotalDamageResult: Managed
- {
- proto native float GetDamage(string zoneName, string healthType);
- proto native float GetHighestDamage(string healthType);
- };
- //-----------------------------------------------------------------------------
- //! exposed from C++ (do not change)
- enum DamageType
- {
- CLOSE_COMBAT, // 0
- FIRE_ARM, // 1
- EXPLOSION,
- STUN,
- CUSTOM
- }
- //-----------------------------------------------------------------------------
- class DamageSystem
- {
- static proto native void CloseCombatDamage(EntityAI source, Object targetObject, int targetComponentIndex, string ammoTypeName, vector worldPos, int directDamageFlags = ProcessDirectDamageFlags.ALL_TRANSFER);
- static proto native void CloseCombatDamageName(EntityAI source, Object targetObject, string targetComponentName, string ammoTypeName, vector worldPos, int directDamageFlags = ProcessDirectDamageFlags.ALL_TRANSFER);
- static proto native void ExplosionDamage(EntityAI source, Object directHitObject, string ammoTypeName, vector worldPos, int damageType);
-
- static bool GetDamageZoneMap(EntityAI entity, out DamageZoneMap zoneMap)
- {
- string path_base;
- string path;
-
- if (entity.IsWeapon())
- {
- path_base = CFG_WEAPONSPATH;
- }
- else if (entity.IsMagazine())
- {
- path_base = CFG_MAGAZINESPATH;
- }
- else
- {
- path_base = CFG_VEHICLESPATH;
- }
-
- path_base = string.Format("%1 %2 DamageSystem DamageZones", path_base, entity.GetType());
-
- if (!GetGame().ConfigIsExisting(path_base))
- {
- return false;
- }
- else
- {
- string zone;
- array<string> zone_names = new array<string>;
- array<string> component_names;
-
- entity.GetDamageZones(zone_names);
- for (int i = 0; i < zone_names.Count(); i++)
- {
- component_names = new array<string>;
- zone = zone_names.Get(i);
-
- path = string.Format("%1 %2 componentNames ", path_base, zone);
- if (GetGame().ConfigIsExisting(path))
- {
- GetGame().ConfigGetTextArray(path,component_names);
- }
- zoneMap.Insert(zone,component_names);
- }
-
- return true;
- }
- }
-
- //! Returns damage zone to which the named component belongs
- static bool GetDamageZoneFromComponentName(notnull EntityAI entity, string component, out string damageZone)
- {
- DamageZoneMap zoneMap = entity.GetEntityDamageZoneMap();
- array<array<string>> components;
- components = zoneMap.GetValueArray();
- for (int i = 0; i < components.Count(); i++)
- {
- array<string> inner = components.Get(i);
- for (int j = 0; j < inner.Count(); j++)
- {
- string innerComponentName = inner.Get(j);
- innerComponentName.ToLower();
-
- //We don't have a component name, no need to proceed
- if ( innerComponentName == "" )
- break;
-
- if (innerComponentName == component)
- {
- damageZone = zoneMap.GetKey(i);
- return true;
- }
- }
- }
- damageZone = "";
- return false;
- }
-
- static bool GetComponentNamesFromDamageZone(notnull EntityAI entity, string damageZone, out array<string> componentNames)
- {
- string path;
-
- if (entity.IsWeapon())
- {
- path = CFG_WEAPONSPATH;
- }
- else if (entity.IsMagazine())
- {
- path = CFG_MAGAZINESPATH;
- }
- else
- {
- path = CFG_VEHICLESPATH;
- }
-
- path = string.Format("%1 %2 DamageSystem DamageZones %3 componentNames", path, entity.GetType(), damageZone);
- if (GetGame().ConfigIsExisting(path))
- {
- GetGame().ConfigGetTextArray(path,componentNames);
- return true;
- }
-
- return false;
- }
-
- static string GetDamageDisplayName(EntityAI entity, string zone)
- {
- string component_name;
- entity.GetEntityDamageDisplayNameMap().Find(zone.Hash(), component_name);
- component_name = Widget.TranslateString(component_name);
- return component_name;
- }
-
- static void ResetAllZones(EntityAI entity)
- {
- DamageZoneMap zonesMap = new DamageZoneMap();
- DamageSystem.GetDamageZoneMap(entity, zonesMap);
- array<string> zones = zonesMap.GetKeyArray();
- entity.SetHealth("", "Health", entity.GetMaxHealth("","Health"));
- entity.SetHealth("", "Shock", entity.GetMaxHealth("","Shock"));
- entity.SetHealth("", "Blood", entity.GetMaxHealth("","Blood"));
-
- foreach (string zone : zones)
- {
- entity.SetHealth(zone, "Health", entity.GetMaxHealth(zone,"Health"));
- entity.SetHealth(zone, "Shock", entity.GetMaxHealth(zone,"Shock"));
- entity.SetHealth(zone, "Blood", entity.GetMaxHealth(zone,"Blood"));
- }
- }
- }
- typedef map<string,ref array<string>> DamageZoneMap; //<zone_name,<components>>
|