コード例 #1
0
ファイル: Classes.cs プロジェクト: Boar287/ISP
        public virtual void DealDamage(Enemy target)
        {
            Random rand       = new Random();
            int    RandFactor = rand.Next(1, UsingWeapon.RandFactor);
            double DMGBuffModificator;

            if (BuffCD == 0)
            {
                DMGBuffModificator = 1;
            }
            else
            {
                DMGBuffModificator = 1.3;
            }
            if ((rand.Next(1, 100) <= UsingWeapon.MissChance) || (rand.Next(1, 100) <= target.EvasionChance))
            {
                PlayerDamageInfo?.Invoke(this, new TargetEventArgs(false, "You MISSED!"));
                target.Health -= 0;
            }
            else
            {
                if (rand.Next(1, 100) <= UsingWeapon.CritChance)
                {
                    PlayerDamageInfo?.Invoke(this, new TargetEventArgs(true, "CRIT!", Damage * 2, RandFactor * 2, EvadeChance, DMGBuffModificator, CritModifier, target.Armor));
                    target.Health -= Convert.ToInt32((((UsingWeapon.Damage + RandFactor) * DMGBuffModificator * CritModifier) + ((UsingWeapon.Damage + RandFactor) * DMGBuffModificator * CritModifier * target.Armor / 1000)));
                }
                else
                {
                    PlayerDamageInfo?.Invoke(this, new TargetEventArgs(true, "Hit!", Damage, RandFactor, EvadeChance, DMGBuffModificator, CritModifier, target.Armor));
                    target.Health -= Convert.ToInt32((((UsingWeapon.Damage + RandFactor)) * DMGBuffModificator + (target.Armor / 1000 * ((UsingWeapon.Damage + RandFactor) * DMGBuffModificator))));
                }
            }
        }
コード例 #2
0
ファイル: FreeGameRule.cs プロジェクト: yangfan111/common
        public void KillPlayer(PlayerEntity source, PlayerEntity target, PlayerDamageInfo damage)
        {
            if (!this.args.Triggers.IsEmpty(FreeTriggerConstant.KILL_PLAYER))
            {
                if (source != null)
                {
                    args.TempUse("killer", (FreeData)source.freeData.FreeData);
                }
                args.TempUse("killed", (FreeData)target.freeData.FreeData);

                SimpleParaList dama = new SimpleParaList();
                dama.AddFields(new ObjectFields(damage));
                SimpleParable sp = new SimpleParable(dama);
                args.TempUse("damage", sp);

                this.args.Triggers.Trigger(FreeTriggerConstant.KILL_PLAYER, args);

                if (source != null)
                {
                    args.Resume("killer");
                }
                args.Resume("killed");
                args.Resume("damage");
            }

            if (source != null)
            {
                source.statisticsData.Statistics.SetSrcDataByDamageInfo(damage);
            }
            if (target != null)
            {
                target.statisticsData.Statistics.SetTarDataByDamageInfo(damage);
            }
        }
コード例 #3
0
        public static void SetTarDataByDamageInfo(this StatisticsData data, PlayerDamageInfo damage)
        {
            switch ((EUIDeadType)damage.type)
            {
            case EUIDeadType.Bombing:
                data.KillByAirBomb = true;
                break;

            case EUIDeadType.Drown:
                data.Drown = true;
                break;

            case EUIDeadType.Fall:
                data.DropDead = true;
                break;

            case EUIDeadType.Poison:
                data.PoisionDead = true;
                break;

            case EUIDeadType.VehicleHit:
                data.KillByVehicle = true;
                break;

            case EUIDeadType.Weapon:
                data.KillByPlayer = true;
                break;

            case EUIDeadType.Unarmed:
                data.KillByPlayer = true;
                break;
            }
        }
コード例 #4
0
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            PlayerEntity player = (PlayerEntity)fr.GetEntity(target);

            if (player != null)
            {
                if (player.gamePlay.IsDead())
                {
                    return;
                }

                PlayerEntity sourcePlayer = null;
                if (!string.IsNullOrEmpty(source))
                {
                    sourcePlayer = (PlayerEntity)fr.GetEntity(source);
                }

                if (string.IsNullOrEmpty(part))
                {
                    part = ((int)EBodyPart.Chest).ToString();
                }

                PlayerDamageInfo damageInfo = new PlayerDamageInfo(FreeUtil.ReplaceFloat(damage, args),
                                                                   FreeUtil.ReplaceInt(type, args), FreeUtil.ReplaceInt(part, args), 0, false, false, FreeUtil.ReplaceBool(dead, args));

                BulletPlayerUtility.DoProcessPlayerHealthDamage(args.GameContext, (IGameRule)fr.Rule, sourcePlayer, player, damageInfo, null);
            }
        }
コード例 #5
0
 public virtual void TakeDamage(PlayerDamageInfo damageInfo)
 {
     if (OnTakeDamageEvent != null)
     {
         OnTakeDamageEvent.Invoke(damageInfo);
     }
 }
コード例 #6
0
ファイル: ReduceDamageUtil.cs プロジェクト: yangfan111/common
        private static float ReduceDamage(IEventArgs args, FreeData fd, PlayerDamageInfo damage, ItemPosition ip, int percent, ItemType itemType)
        {
            if (ip != null)
            {
                float realDamage = damage.damage;
                float reduce     = damage.damage * percent / 100;
                float realReduce = reduce;

                damage.damage -= realReduce;
                fd.Player.statisticsData.Statistics.DefenseDamage += reduce;

                // 普通帽子不减少
                if (reduce > 0)
                {
                    ip.SetCount(ip.GetCount() - (int)realDamage);
                    UpdateGamePlayData(fd, ip, itemType);

                    args.TempUse("current", fd);

                    if (ip.GetCount() <= 0)
                    {
                        ip.GetInventory().RemoveItem((FreeRuleEventArgs)args, ip);
                        FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + ip.key.GetName() + "}");
                    }
                    else
                    {
                        ip.GetInventory().GetInventoryUI().UpdateItem((FreeRuleEventArgs)args, ip.GetInventory(), ip);
                    }

                    args.Resume("current");
                }
            }

            return(damage.damage);
        }
コード例 #7
0
        void Tick(float deltaSec)
        {
            if (_targetNode == null)
            {
                return;
            }

            var enemiesAttackList = nodesDB.QueryNodes <EnemyNode>();

            for (int enemyIndex = enemiesAttackList.Count - 1; enemyIndex >= 0; --enemyIndex)
            {
                var enemyAttackNode = enemiesAttackList[enemyIndex];

                if (enemyAttackNode.attackComponent.targetInRange == true)
                {
                    var attackDamageComponent = enemyAttackNode.attackDamageComponent;
                    attackDamageComponent.timer += deltaSec;

                    if (attackDamageComponent.timer >= attackDamageComponent.attackInterval)
                    {
                        attackDamageComponent.timer = 0.0f;

                        var damageInfo = new PlayerDamageInfo(attackDamageComponent.damage, Vector3.zero, _targetNode.ID);

                        _targetDamageSequence.Next(this, ref damageInfo);
                    }
                }
            }
        }
コード例 #8
0
 public void Step(ref PlayerDamageInfo token, Enum condition)
 {
     if ((DamageCondition)condition == DamageCondition.dead)
     {
         OnTargetDead(token.entityDamaged);
     }
 }
コード例 #9
0
    public override void TakeDamage(PlayerDamageInfo damageInfo)
    {
        base.TakeDamage(damageInfo);

        GameController.Instance.ObservableScore.Item += EnemyController.Config.ScorePrice;
        EnemyController.Die();
        Debug.Log("TakeDamage");
    }
コード例 #10
0
ファイル: ReduceDamageUtil.cs プロジェクト: yangfan111/common
        public static float HandleDamage(IEventArgs args, FreeData fd, PlayerDamageInfo damage)
        {
            float readDamage = damage.damage;

            if (damage.type != (int)EUIDeadType.Weapon && damage.type != (int)EUIDeadType.Unarmed)
            {
                return(readDamage);
            }
            if (damage.part == (int)EBodyPart.Head)
            {
                ItemPosition ip = GetHelmet(fd);
                if (ip != null)
                {
                    FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());

                    int percent = 0;
                    if (info.id == 8)
                    {
                        percent = 30;
                    }
                    if (info.id == 9)
                    {
                        percent = 40;
                    }
                    else if (info.id == 10)
                    {
                        percent = 55;
                    }

                    readDamage = ReduceDamage(args, fd, damage, ip, percent, ItemType.Helmet);
                }
            }
            else if (damage.part == (int)EBodyPart.Chest || damage.part == (int)EBodyPart.Stomach || damage.part == (int)EBodyPart.Pelvis)
            {
                ItemPosition ip = GetArmor(fd);
                if (ip != null)
                {
                    FreeItemInfo info    = FreeItemConfig.GetItemInfo(ip.key.GetKey());
                    int          percent = 0;
                    if (info.id == 1)
                    {
                        percent = 30;
                    }
                    if (info.id == 2)
                    {
                        percent = 40;
                    }
                    else if (info.id == 3)
                    {
                        percent = 55;
                    }

                    readDamage = ReduceDamage(args, fd, damage, ip, percent, ItemType.Armor);
                }
            }

            return(readDamage);
        }
コード例 #11
0
        void OnDamageEvent(ref PlayerDamageInfo damaged)
        {
            var damageComponent = _guiNode.damageImageComponent;
            var damageImage     = damageComponent.damageImage;

            damageImage.color = damageComponent.flashColor;

            _guiNode.healthSliderComponent.healthSlider.value = nodesDB.QueryNode <HUDDamageEventNode>(damaged.entityDamaged).healthComponent.currentHealth;
        }
コード例 #12
0
        private static float ReduceDamage(IEventArgs args, PlayerEntity player, PlayerDamageInfo damage, int percent, bool armor)
        {
            float readDamage = damage.damage;

            if (damage.type != (int)EUIDeadType.Weapon && damage.type != (int)EUIDeadType.Unarmed)
            {
                return(readDamage);
            }

            float reduce     = damage.damage * percent / 100;
            float realReduce = reduce;

            if (armor)
            {
                realReduce = Math.Min(player.gamePlay.CurArmor, reduce);
            }
            else
            {
                realReduce = Math.Min(player.gamePlay.CurHelmet, reduce);
            }
            damage.damage -= realReduce;

            FreeData fd = (FreeData)player.freeData.FreeData;

            // 普通帽子不减少
            args.TempUse("current", fd);
            if (realReduce > 0)
            {
                if (armor)
                {
                    player.gamePlay.CurArmor = Math.Max(0, player.gamePlay.CurArmor - (int)readDamage);
                    if (player.gamePlay.CurArmor == 0)
                    {
                        PlayerItemAvatarAction.TakeOff(player, player.gamePlay.ArmorLv);
                        FreeItemInfo info = FreeItemConfig.GetItemInfo((int)ECategory.Avatar, player.gamePlay.ArmorLv);
                        FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + info.name + "}");
                    }
                }
                else
                {
                    player.gamePlay.CurHelmet = Math.Max(0, player.gamePlay.CurHelmet - (int)readDamage);
                    if (player.gamePlay.CurHelmet == 0)
                    {
                        PlayerItemAvatarAction.TakeOff(player, player.gamePlay.HelmetLv);
                        FreeItemInfo info = FreeItemConfig.GetItemInfo((int)ECategory.Avatar, player.gamePlay.HelmetLv);
                        FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10075," + info.name + "}");
                    }
                }

                player.statisticsData.Statistics.DefenseDamage += realReduce;
            }
            args.Resume("current");

            return(damage.damage);
        }
コード例 #13
0
 public void Step(ref PlayerDamageInfo token, Enum condition)
 {
     if ((DamageCondition)condition == DamageCondition.damage)
     {
         OnDamageEvent(ref token);
     }
     else
     if ((DamageCondition)condition == DamageCondition.dead)
     {
         OnDeadEvent();
     }
 }
コード例 #14
0
        public static void DoProcessPlayerHealthDamage(Contexts contexts, IGameRule gameRule, PlayerEntity srcPlayer,
                                                       PlayerEntity playerEntity, PlayerDamageInfo damage)
        {
            List <PlayerEntity> teamList = OnePlayerHealthDamage(contexts, gameRule, srcPlayer, playerEntity, damage, false);

            if (null != teamList)
            {
                //队友
                foreach (PlayerEntity other in teamList)
                {
                    PlayerDamageInfo damageInfo = new PlayerDamageInfo(other.gamePlay.InHurtedHp, (int)EUIDeadType.NoHelp, (int)EBodyPart.Chest, 0, false, false, true);
                    OnePlayerHealthDamage(contexts, gameRule, null, other, damageInfo, true);
                }
            }
        }
コード例 #15
0
ファイル: UseCodeAction.cs プロジェクト: yangfan111/common
        private void HandleKill(IEventArgs args)
        {
            if (code == "KillInfo")
            {
                SimpleProto message = FreePool.Allocate();
                message.Key = FreeMessageConstant.ScoreInfo;
                message.Ks.Add(3);
                message.Bs.Add(true);

                PlayerDamageInfo damageInfo = GetDamageInfo(args);

                //击杀者姓名
                if (args.GetUnit("killer") == null)
                {
                    message.Ss.Add("");
                    message.Ds.Add(-1);
                    message.Ins.Add(0);
                    message.Ins.Add(damageInfo.KillType);
                    message.Ins.Add(damageInfo.KillFeedbackType);
                }
                else
                {
                    //击杀者姓名
                    message.Ss.Add(FreeUtil.ReplaceVar("{killer.PlayerName}", args));
                    //击杀者队伍ID
                    message.Ds.Add(FreeUtil.ReplaceDouble("{killer.TeamId}", args));
                    //击杀者武器ID
                    message.Ins.Add(damageInfo.weaponId);
                    //击杀方式
                    message.Ins.Add(damageInfo.KillType);
                    //击杀反馈
                    message.Ins.Add(damageInfo.KillFeedbackType);
                }

                //死者姓名
                message.Ss.Add(FreeUtil.ReplaceVar("{killed.PlayerName}", args));
                //死者队伍ID
                message.Ds.Add(FreeUtil.ReplaceDouble("{killed.TeamId}", args));
                //死亡方式
                message.Ins.Add(damageInfo.type);

                //                Debug.Log("KillInfo ..." + message.ToString());

                SendMessageAction.sender.SendMessage(args, message, 4, string.Empty);
            }
        }
コード例 #16
0
        public static void SetSrcDataByDamageInfo(this StatisticsData data, PlayerDamageInfo damage)
        {
            switch (damage.WeaponType)
            {
            case EWeaponSubType.BurnBomb:
            case EWeaponSubType.Grenade:
            case EWeaponSubType.FlashBomb:
            case EWeaponSubType.FogBomb:
            case EWeaponSubType.Throw:
                data.KillWithThrowWeapon += 1;
                break;

            case EWeaponSubType.Hand:
            case EWeaponSubType.Melee:
                data.KillWithMelee += 1;
                break;

            case EWeaponSubType.MachineGun:
                data.KillWithMachineGun += 1;
                break;

            case EWeaponSubType.Pistol:
                data.KillWithPistol += 1;
                break;

            case EWeaponSubType.ShotGun:
                data.KillWithShotGun += 1;
                break;

            case EWeaponSubType.Sniper:
                data.KillWithSniper += 1;
                break;

            case EWeaponSubType.SubMachineGun:
                data.KillWithSubmachineGun += 1;
                break;

            case EWeaponSubType.Rifle:
            case EWeaponSubType.AccurateRifle:
                data.KillWithRifle += 1;
                break;

            default:
                break;
            }
        }
コード例 #17
0
        private void HandleBioDamage(IEventArgs args)
        {
            if (code == "BioDamage")
            {
                SimpleProto message = FreePool.Allocate();
                message.Key = FreeMessageConstant.ScoreInfo;
                message.Ks.Add(3);
                message.Bs.Add(true);

                PlayerDamageInfo damageInfo = GetDamageInfo(args);
                IParable         source     = args.GetUnit("source");
                if (null == source)
                {
                    return;
                }
                FreeData freeData = (FreeData)args.GetUnit("source");
                if (null == freeData)
                {
                    return;
                }
                int jobAttribute = 0;
                if (freeData.Player.hasGamePlay)
                {
                    jobAttribute = freeData.Player.gamePlay.JobAttribute;
                }
                if (jobAttribute == (int)EJobAttribute.EJob_EveryMan ||
                    jobAttribute == (int)EJobAttribute.EJob_Hero)
                {
                    return;
                }

                message.Ss.Add(FreeUtil.ReplaceVar("{source.PlayerName}", args));
                message.Ds.Add(FreeUtil.ReplaceDouble("{source.TeamId}", args));
                message.Ins.Add(damageInfo.weaponId);
                message.Ins.Add(damageInfo.KillType);
                message.Ins.Add(damageInfo.KillFeedbackType);

                message.Ss.Add(FreeUtil.ReplaceVar("{target.PlayerName}", args));
                message.Ds.Add(FreeUtil.ReplaceDouble("{target.TeamId}", args));
                message.Ins.Add(damageInfo.type);

                SendMessageAction.sender.SendMessage(args, message, 4, string.Empty);
            }
        }
コード例 #18
0
        public override void DoAction(IEventArgs args)
        {
            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            PlayerEntity player = (PlayerEntity)fr.GetEntity(target);

            if (player != null)
            {
                if (player.gamePlay.IsDead())
                {
                    return;
                }

                PlayerEntity sourcePlayer = null;
                UnitPosition up           = null;
                try
                {
                    if (!string.IsNullOrEmpty(source))
                    {
                        sourcePlayer = (PlayerEntity)fr.GetEntity(source);
                    }

                    if (string.IsNullOrEmpty(part))
                    {
                        part = ((int)EBodyPart.Chest).ToString();
                    }
                    if (pos != null)
                    {
                        up = pos.Select(args);
                    }
                }
                catch (Exception e)
                {
                    Logger.Error("PlayerHurtAction handle error" + e.Message);
                }

                PlayerDamageInfo damageInfo = new PlayerDamageInfo(FreeUtil.ReplaceFloat(damage, args), FreeUtil.ReplaceInt(type, args), FreeUtil.ReplaceInt(part, args), 0,
                                                                   false, false, FreeUtil.ReplaceBool(dead, args), up != null ? player.position.Value : Vector3.zero, up != null ? player.position.Value - up.Vector3 : Vector3.zero);

                BulletPlayerUtil.DoProcessPlayerHealthDamage(args.GameContext, (IGameRule)fr.Rule, sourcePlayer, player, damageInfo);
            }
        }
コード例 #19
0
    private void ShootCore(Vector3 position)
    {
        Camera cam = Camera.main;
        Ray    ray = cam.ScreenPointToRay(position);

        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            EnemyController enemy = hit.collider.gameObject.GetComponent <EnemyController>();

            if (enemy != null)
            {
                PlayerDamageInfo damageInfo = new PlayerDamageInfo(Player, enemy);
                enemy.TakeDamage(damageInfo);
            }

            base.Shoot();
        }
    }
コード例 #20
0
ファイル: UseCodeAction.cs プロジェクト: yangfan111/common
 private void HandleArmor(IEventArgs args)
 {
     if ("ReduceDamage" == code)
     {
         FreeData fd = (FreeData)args.GetUnit("target");
         if (fd != null)
         {
             SimpleParable sp = (SimpleParable)args.GetUnit("damage");
             if (sp != null)
             {
                 PlayerDamageInfo info = (PlayerDamageInfo)((ObjectFields)((SimpleParaList)sp.GetParameters()).GetFieldList()[0]).GetObj();
                 float            da   = ReduceDamageUtil.HandleDamage(args, fd, info);
                 FloatPara        d    = (FloatPara)args.GetDefault().GetParameters().Get("damage");
                 if (d != null)
                 {
                     d.SetValue(da);
                 }
             }
         }
     }
 }
コード例 #21
0
ファイル: FreeGameRule.cs プロジェクト: yangfan111/common
        public float HandleDamage(PlayerEntity source, PlayerEntity target, PlayerDamageInfo damage)
        {
            if (damagePara == null)
            {
                damagePara = new FloatPara("damage", damage.damage);
            }

            damagePara.SetValue(Math.Min(damage.damage, target.gamePlay.CurModeHp));

            if (!this.args.Triggers.IsEmpty(FreeTriggerConstant.DAMAGE))
            {
                if (source != null)
                {
                    args.TempUse("source", (FreeData)source.freeData.FreeData);
                }
                args.TempUse("target", (FreeData)target.freeData.FreeData);

                SimpleParaList dama = new SimpleParaList();
                dama.AddFields(new ObjectFields(damage));
                SimpleParable sp = new SimpleParable(dama);
                args.TempUse("damage", sp);

                args.TempUsePara(damagePara);

                this.args.Triggers.Trigger(FreeTriggerConstant.DAMAGE, args);

                if (source != null)
                {
                    args.Resume("source");
                }

                args.Resume("target");
                args.Resume("damage");
                args.ResumePara("damage");
            }


            return((float)damagePara.GetValue());
        }
コード例 #22
0
        public override void DoAction(IEventArgs args)
        {
            FreeData fd = (FreeData)args.GetUnit("target");

            if (fd != null)
            {
                SimpleParable damage = (SimpleParable)args.GetUnit("damage");
                if (damage != null)
                {
                    PlayerDamageInfo info = (PlayerDamageInfo)damage.GetFieldObject(0);

                    WeaponAllConfigs configs = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(info.weaponId);

                    if (configs != null)
                    {
                        int time = configs.InitWeaponAllConfig.RigidityDuration;
                        int per  = configs.InitWeaponAllConfig.RigidityEffect;

                        fd.EffectBufs.AddEffect(RigidityEffect, (float)per / 100, time, args);
                    }
                }
            }
        }
コード例 #23
0
        private void ReduceDamage(IEventArgs args, PlayerEntity player)
        {
            SimpleParable sp = (SimpleParable)args.GetUnit("damage");

            if (sp != null)
            {
                PlayerDamageInfo damage = (PlayerDamageInfo)sp.GetFieldObject(0);
                float            da     = damage.damage;
                if (damage.part == (int)EBodyPart.Head)
                {
                    int helId = player.gamePlay.HelmetLv;
                    if (armorDic.ContainsKey(helId))
                    {
                        ArmorData ad = armorDic[helId];

                        da = ReduceDamage(args, player, damage, ad.reduce, false);
                    }
                }
                else if (damage.part == (int)EBodyPart.Chest || damage.part == (int)EBodyPart.Stomach || damage.part == (int)EBodyPart.Pelvis)
                {
                    int armor = player.gamePlay.ArmorLv;
                    if (armorDic.ContainsKey(armor))
                    {
                        ArmorData ad = armorDic[armor];

                        da = ReduceDamage(args, player, damage, ad.reduce, true);
                    }
                }

                FloatPara d = (FloatPara)args.GetDefault().GetParameters().Get("damage");
                if (d != null)
                {
                    d.SetValue(da);
                }
            }
        }
コード例 #24
0
ファイル: EnemyController.cs プロジェクト: IquWire/WeAR-Test-
 public void TakeDamage(PlayerDamageInfo damageInfo)
 {
     Config.EnemyTakeDamage.TakeDamage(damageInfo);
 }
コード例 #25
0
        public static float HandleDamage(IEventArgs args, FreeData fd, PlayerDamageInfo damage)
        {
            float readDamage = damage.damage;

            if (damage.type != (int)EUIDeadType.Weapon && damage.type != (int)EUIDeadType.Unarmed)
            {
                return(readDamage);
            }

            PlayerEntity playerEntity = fd.Player;

            if (playerEntity.gamePlay.CurHelmet > 0)
            {
                var config = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(playerEntity.gamePlay.HelmetLv);
                if (config != null)
                {
                    if (config.NewWeaponCfg.ProtectivePartsList.Contains(damage.part))
                    {
                        float reduce = readDamage * config.NewWeaponCfg.DamageReduction / 100;
                        reduce = Math.Min(playerEntity.gamePlay.CurHelmet, reduce);
                        playerEntity.gamePlay.CurHelmet = Math.Max(0, playerEntity.gamePlay.CurHelmet - (int)readDamage);
                        if (reduce > 0 && playerEntity.gamePlay.CurHelmet == 0)
                        {
                            playerEntity.gamePlay.HelmetLv = playerEntity.gamePlay.MaxHelmet = 0;
                            SimpleProto msg = FreePool.Allocate();
                            msg.Key = FreeMessageConstant.ChickenTip;
                            msg.Ss.Add("word75," + config.NewWeaponCfg.Name);
                            FreeMessageSender.SendMessage(playerEntity, msg);
                        }
                        ItemPosition ip = GetHelmet(fd);
                        if (ip != null)
                        {
                            args.TempUse("current", (FreeData)playerEntity.freeData.FreeData);
                            if (playerEntity.gamePlay.CurHelmet == 0)
                            {
                                ip.GetInventory().RemoveItem((FreeRuleEventArgs)args, ip);
                            }
                            else
                            {
                                ip.SetCount(playerEntity.gamePlay.CurHelmet);
                                ip.GetInventory().GetInventoryUI().UpdateItem((FreeRuleEventArgs)args, ip.GetInventory(), ip);
                            }
                            args.Resume("current");
                        }
                        damage.damage -= reduce;
                        readDamage     = damage.damage;
                        playerEntity.statisticsData.Statistics.DefenseDamage += reduce;
                    }
                }
            }

            if (playerEntity.gamePlay.CurArmor > 0)
            {
                var config = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(playerEntity.gamePlay.ArmorLv);
                if (config != null)
                {
                    if (config.NewWeaponCfg.ProtectivePartsList.Contains(damage.part))
                    {
                        float reduce = readDamage * config.NewWeaponCfg.DamageReduction / 100;
                        reduce = Math.Min(playerEntity.gamePlay.CurArmor, reduce);
                        playerEntity.gamePlay.CurArmor = Math.Max(0, playerEntity.gamePlay.CurArmor - (int)readDamage);
                        if (reduce > 0 && playerEntity.gamePlay.CurArmor == 0)
                        {
                            playerEntity.gamePlay.ArmorLv = playerEntity.gamePlay.MaxArmor = 0;
                            SimpleProto msg = FreePool.Allocate();
                            msg.Key = FreeMessageConstant.ChickenTip;
                            msg.Ss.Add("word75," + config.NewWeaponCfg.Name);
                            FreeMessageSender.SendMessage(playerEntity, msg);
                        }
                        ItemPosition ip = GetArmor(fd);
                        if (ip != null)
                        {
                            args.TempUse("current", (FreeData)playerEntity.freeData.FreeData);
                            if (playerEntity.gamePlay.CurArmor == 0)
                            {
                                ip.GetInventory().RemoveItem((FreeRuleEventArgs)args, ip);
                            }
                            else
                            {
                                ip.SetCount(playerEntity.gamePlay.CurArmor);
                                ip.GetInventory().GetInventoryUI().UpdateItem((FreeRuleEventArgs)args, ip.GetInventory(), ip);
                            }
                            args.Resume("current");
                        }
                        damage.damage -= reduce;
                        readDamage     = damage.damage;
                        playerEntity.statisticsData.Statistics.DefenseDamage += reduce;
                    }
                }
            }

            return(readDamage);
        }
コード例 #26
0
 public void OnPlayerDamage(PlayerEntity sourcePlayer, PlayerEntity targetPlayer, PlayerDamageInfo damage)
 {
     BulletPlayerUtility.ProcessPlayerHealthDamage(_contexts, _damager, sourcePlayer, targetPlayer, damage);
 }
コード例 #27
0
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity playerEntity = GetPlayerEntity(args);

            if (playerEntity != null)
            {
                SimpleParable sp = (SimpleParable)args.GetUnit("damage");
                if (sp != null)
                {
                    FloatPara        d      = (FloatPara)args.GetDefault().GetParameters().Get("damage");
                    PlayerDamageInfo damage = (PlayerDamageInfo)sp.GetFieldObject(0);

                    if (damage.type != (int)EUIDeadType.Weapon && damage.type != (int)EUIDeadType.Unarmed)
                    {
                        return;
                    }

                    if (playerEntity.gamePlay.CurHelmet > 0)
                    {
                        var config = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(playerEntity.gamePlay.HelmetLv);
                        if (config != null)
                        {
                            if (config.NewWeaponCfg.ProtectivePartsList.Contains(damage.part))
                            {
                                float readDamage = damage.damage;
                                float reduce     = readDamage * config.NewWeaponCfg.DamageReduction / 100;
                                reduce = Math.Min(playerEntity.gamePlay.CurHelmet, reduce);
                                playerEntity.gamePlay.CurHelmet = Math.Max(0, playerEntity.gamePlay.CurHelmet - (int)readDamage);
                                if (reduce > 0 && playerEntity.gamePlay.CurHelmet == 0)
                                {
                                    playerEntity.gamePlay.HelmetLv = playerEntity.gamePlay.MaxHelmet = 0;
                                    SimpleProto msg = FreePool.Allocate();
                                    msg.Key = FreeMessageConstant.ChickenTip;
                                    msg.Ss.Add("word75," + config.NewWeaponCfg.Name);
                                    FreeMessageSender.SendMessage(playerEntity, msg);
                                }

                                damage.damage -= reduce;
                                playerEntity.statisticsData.Statistics.DefenseDamage += reduce;

                                d.SetValue(damage.damage);
                            }
                        }
                    }

                    if (playerEntity.gamePlay.CurArmor > 0)
                    {
                        var config = SingletonManager.Get <WeaponConfigManagement>().FindConfigById(playerEntity.gamePlay.ArmorLv);
                        if (config != null)
                        {
                            if (config.NewWeaponCfg.ProtectivePartsList.Contains(damage.part))
                            {
                                float readDamage = damage.damage;
                                float reduce     = readDamage * config.NewWeaponCfg.DamageReduction / 100;
                                reduce = Math.Min(playerEntity.gamePlay.CurArmor, reduce);
                                playerEntity.gamePlay.CurArmor = Math.Max(0, playerEntity.gamePlay.CurArmor - (int)readDamage);
                                if (reduce > 0 && playerEntity.gamePlay.CurArmor == 0)
                                {
                                    playerEntity.gamePlay.ArmorLv = playerEntity.gamePlay.MaxArmor = 0;
                                    SimpleProto msg = FreePool.Allocate();
                                    msg.Key = FreeMessageConstant.ChickenTip;
                                    msg.Ss.Add("word75," + config.NewWeaponCfg.Name);
                                    FreeMessageSender.SendMessage(playerEntity, msg);
                                }

                                damage.damage -= reduce;
                                playerEntity.statisticsData.Statistics.DefenseDamage += reduce;

                                d.SetValue(damage.damage);
                            }
                        }
                    }
                }
            }
        }
コード例 #28
0
 public void Step(ref PlayerDamageInfo token, Enum condition)
 {
     StopMovementOnDeath(token.entityDamaged);
 }
コード例 #29
0
 public void KillPlayer(PlayerEntity source, PlayerEntity target, PlayerDamageInfo damage)
 {
     _room.GameRule.KillPlayer(source, target, damage);
 }
コード例 #30
0
 public float HandleDamage(PlayerEntity source, PlayerEntity target, PlayerDamageInfo damage)
 {
     return(_room.GameRule.HandleDamage(source, target, damage));
 }