Пример #1
0
        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);
        }
Пример #2
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);
        }
Пример #3
0
        private void MovePartToWeapon(ServerRoom room, FreeData fd, ItemPosition ip, string to, FreeItemInfo info)
        {
            string inv = PickupItemUtil.AutoPutPart(fd, info, to, room);

            if (inv != null && inv != "default")
            {
                ItemInventory toInv = fd.freeInventory.GetInventoryManager().GetInventory(inv);
                int[]         xy    = toInv.GetNextEmptyPosition(ip.key);
                ItemInventoryUtil.MovePosition(ip,
                                               toInv, xy[0], xy[1], room.FreeArgs);
            }
            else
            {
                FuntionUtil.Call(room.FreeArgs, "showBottomTip", "msg", "{desc:10076}");
            }
        }
Пример #4
0
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            PlayerEntity myEntity = owner.OwnerEntity as PlayerEntity;

            if (null == myEntity)
            {
                return;
            }

            if (myEntity.gamePlay.IsSave)
            {
                if (myEntity.time.ClientTime - myEntity.gamePlay.SaveTime >= SharedConfig.SaveNeedTime)
                {
                    //正常结束
                    StopSave(myEntity);
                    //统计救援人数
                    myEntity.statisticsData.Statistics.SaveCount++;
                    return;
                }
                //打断救援(被救援者已不在)
                PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(myEntity.gamePlay.SavePlayerKey);
                if (null == teamEntity)
                {
                    StopSave(myEntity, true);
                    return;
                }
                //打断救援(除QE之外的任何动作 或 自己进入受伤/死亡状态)
                if (myEntity.stateInterface.State.NeedInterruptRescue((PostureInConfig)myEntity.gamePlay.SaveEnterState) ||
                    !myEntity.gamePlay.IsLifeState(EPlayerLifeState.Alive))
                {
                    StopSave(myEntity, true);
                    if (teamEntity.gamePlay.IsBeSave)
                    {
                        StopBeSave(teamEntity, true);
                    }
                }
            }
            else if (myEntity.gamePlay.IsBeSave)
            {
                if (myEntity.time.ClientTime - myEntity.gamePlay.SaveTime >= SharedConfig.SaveNeedTime)
                {
                    //正常结束
                    StopBeSave(myEntity);
                    //血量恢复10%
                    myEntity.gamePlay.CurHp = (int)(myEntity.gamePlay.MaxHp * 0.1f);
                    myEntity.gamePlay.ChangeLifeState(EPlayerLifeState.Alive, myEntity.time.ClientTime);
                    //蹲下状态
//                    myEntity.stateInterface.State.Crouch();
                    return;
                }
                //打断救援(救援者已不在)
                PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(myEntity.gamePlay.SavePlayerKey);
                if (null == teamEntity)
                {
                    StopBeSave(myEntity, true);
                    return;
                }
                //打断救援(超出距离角度 或 自己已死亡)
                if (myEntity.gamePlay.IsDead() ||
                    Vector3.Distance(myEntity.position.Value, teamEntity.position.Value) > SharedConfig.MaxSaveDistance ||
                    GetAngle(teamEntity, myEntity) > SharedConfig.MaxSaveAngle)
                {
                    StopBeSave(myEntity, true);
                    if (teamEntity.gamePlay.IsSave)
                    {
                        StopSave(teamEntity, true);
                    }
                }
            }
            else if (cmd.IsUseAction && cmd.UseType == (int)EUseActionType.Player)
            {
                //趴下不能救援
                if (myEntity.stateInterface.State.GetCurrentPostureState() == PostureInConfig.Prone)
                {
                    //TODO 弹出提示
                    if (SharedConfig.IsServer)
                    {
                        IEventArgs args = (IEventArgs)_contexts.session.commonSession.FreeArgs;
                        args.TempUse("current", (FreeData)myEntity.freeData.FreeData);
                        FuntionUtil.Call(args, "showBottomTip", "msg", "{desc:10077}");
                        args.Resume("current");
                    }
                    else
                    {
                        myEntity.tip.TipType = ETipType.CanNotRescure;
                    }
                    return;
                }
                //实施救援
                PlayerEntity teamEntity = _contexts.player.GetEntityWithEntityKey(new EntityKey(cmd.UseEntityId, (int)EEntityType.Player));
                if (null != teamEntity)
                {
                    myEntity.gamePlay.SaveEnterState = (int)myEntity.stateInterface.State.GetCurrentPostureState();
                    myEntity.gamePlay.IsSave         = true;
                    myEntity.gamePlay.SaveTime       = myEntity.time.ClientTime;
                    myEntity.gamePlay.SavePlayerKey  = teamEntity.entityKey.Value;
                    //救援动作
                    myEntity.stateInterface.State.Rescue();

                    teamEntity.gamePlay.IsBeSave      = true;
                    teamEntity.gamePlay.SaveTime      = teamEntity.time.ClientTime;
                    teamEntity.gamePlay.SavePlayerKey = myEntity.entityKey.Value;
                }
            }
        }
Пример #5
0
 public static void UpdateBagCapacity(IEventArgs args, float weight, float capcacity)
 {
     FuntionUtil.Call(args, "updateBagCapacity", "weight", weight.ToString(), "capacity", capcacity.ToString());
 }