示例#1
0
        private void SendWoundInfo(ProcessWoundEvent component, WoundedPedComponent woundedPed)
        {
#if !DEBUG
            if (_config.Data.PlayerConfig.PlayerEntity != component.Entity)
            {
                return;
            }
#endif
            if (woundedPed.IsDead)
            {
                return;
            }

            var notification = _ecsWorld.CreateEntityWith <ShowNotificationEvent>();

            var message = $"{component.Name}";
            if (component.ArterySevered)
            {
                message += $"\n{_locale.Data.SeveredArteryMessage}";
            }

            if (component.Crits != null || component.ArterySevered ||
                component.BleedSeverity > _config.Data.WoundConfig.EmergencyBleedingLevel)
            {
                notification.Level = NotifyLevels.EMERGENCY;
            }
            else
            {
                notification.Level = NotifyLevels.ALERT;
            }

            notification.StringToShow = message;
        }
示例#2
0
        public void Run()
        {
#if DEBUG
            GunshotWound2.LastSystem = nameof(WoundSystem);
#endif

            for (int i = 0; i < _components.EntitiesCount; i++)
            {
                ProcessWoundEvent component = _components.Components1[i];
                int pedEntity = component.Entity;
                if (!_ecsWorld.IsEntityExists(pedEntity))
                {
                    continue;
                }

                var woundedPed = _ecsWorld.GetComponent <WoundedPedComponent>(pedEntity);
                if (woundedPed == null)
                {
                    continue;
                }

                float damageDeviation = component.Damage > 0
                    ? _config.Data.WoundConfig.DamageDeviation * component.Damage
                    : 0;
                float bleedingDeviation = component.BleedSeverity > 0
                    ? _config.Data.WoundConfig.BleedingDeviation * component.BleedSeverity
                    : 0;

                if (!woundedPed.IsDead)
                {
                    woundedPed.Health -= _config.Data.WoundConfig.DamageMultiplier * component.Damage +
                                         Random.NextFloat(-damageDeviation, damageDeviation);
                    woundedPed.ThisPed.Health = (int)woundedPed.Health;
                }

                CreateBleeding(woundedPed, pedEntity, component.BleedSeverity +
                               Random.NextFloat(-bleedingDeviation, bleedingDeviation), component.Name);
                woundedPed.BleedingCount++;

                CreatePain(pedEntity, component.Pain);
                CreateCritical(pedEntity, component.Crits);

                if (component.ArterySevered)
                {
                    CreateBleeding(woundedPed, pedEntity, 1f, _locale.Data.SeveredArtery);
                    woundedPed.BleedingCount++;
                }

#if DEBUG
                _ecsWorld.CreateEntityWith <ShowDebugInfoEvent>().Entity = pedEntity;
#endif
                SendWoundInfo(component, woundedPed);
            }
            _components.RemoveAllEntities();
        }