Beispiel #1
0
        private void CreateItemFromItemDrop(IEventArgs fr, Vector3 p, ItemDrop drop, string realName)
        {
            FreeMoveEntity en = fr.GameContext.freeMove.CreateEntity();

            en.AddEntityKey(new EntityKey(fr.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), (short)EEntityType.FreeMove));
            en.AddPosition();
            en.position.Value = new Vector3(p.x, p.y, p.z);

            en.AddFreeData(FreeUtil.ReplaceVar(name, fr), null);
            en.AddPositionFilter(Core.Components.PositionFilterType.Filter2D, 1000);
            if (type == 1)
            {
                en.freeData.Cat = FreeEntityConstant.DeadBox;
            }
            else if (type == 2)
            {
                en.freeData.Cat = FreeEntityConstant.DropBox;
            }

            en.AddFlagImmutability(fr.GameContext.session.currentTimeObject.CurrentTime);

            SimpleItemInfo info = new SimpleItemInfo(realName, drop.cat, drop.id, drop.count, en.entityKey.Value.EntityId);

            en.freeData.Value = SingletonManager.Get <DeadBoxParser>().ToString(info);

            en.isFlagSyncNonSelf = true;
        }
Beispiel #2
0
        public override UnitPosition Select(IEventArgs args)
        {
            IniCon();

            UnitPosition up = new UnitPosition();

            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

            if (!string.IsNullOrEmpty(player))
            {
                object obj = fr.GetEntity(player);
                if (obj != null)
                {
                    if (obj is PlayerEntity)
                    {
                        PlayerEntity playerEntity = (PlayerEntity)obj;
                        fr.TempUse("current", (FreeData)playerEntity.freeData.FreeData);

                        UnityPositionUtil.SetPlayerToUnitPosition(playerEntity, up);
                        if (fromEye)
                        {
                            up.SetY(up.GetY() + 1.7f);
                        }

                        fr.Resume("current");
                    }

                    if (obj is FreeMoveEntity)
                    {
                        FreeMoveEntity playerEntity = (FreeMoveEntity)obj;
                        fr.TempUse("current", (FreeEntityData)playerEntity.freeData.FreeData);

                        UnityPositionUtil.SetEntityToUnitPosition(playerEntity.position, up);

                        fr.Resume("current");
                    }
                }
            }
            else if (!string.IsNullOrEmpty(condition))
            {
                if (con == null || con.Meet(args))
                {
                    foreach (PlayerEntity unit in args.GameContext.player.GetInitializedPlayerEntities())
                    {
                        if (unit.hasFreeData)
                        {
                            fr.TempUse("current", (FreeData)unit.freeData.FreeData);

                            UnityPositionUtil.SetPlayerToUnitPosition(unit, up);

                            fr.Resume("current");
                        }
                    }
                }
            }

            return(GetPosition(args, up, FreeUtil.ReplaceFloat(angle, args) + up.GetYaw()));
        }
Beispiel #3
0
        private void CalcuWhenObserveFreeMove(PlayerEntity playerEntity, FreeMoveEntity observedFreeMove)
        {
            var camera  = playerEntity.cameraFinalOutputNew;
            var calsOut = playerEntity.cameraStateOutputNew;

            CalcuFreeMoveEularAngle(observedFreeMove, camera, calsOut);

            CalcuFreeMovePos(observedFreeMove, camera);
        }
Beispiel #4
0
        protected IMoveSpeed GetSpeed(IEventArgs args, FreeMoveEntity entity)
        {
            if (speed == null)
            {
                speed = new AlwaysOneSpeed((float)iniSpeed / 100f);
            }

            return(speed);
        }
Beispiel #5
0
        public override bool Frame(FreeRuleEventArgs args, FreeMoveEntity entity, int interval)
        {
            if (dynamic)
            {
                tempPosition = targetPos.Select(args);
            }

            float speedMeter = GetSpeed(args, entity).GetSpeed(args, interval);

            float dis = speedMeter * (float)interval / 1000f;

            if (tempPosition.Distance(GetEntityPosition(entity)) < dis)
            {
                UnityPositionUtil.SetUnitPositionToEntity(entity.position, tempPosition);

                if (action != null && !firstTime)
                {
                    args.TempUsePara(new FloatPara("x", entity.position.Value.x));
                    args.TempUsePara(new FloatPara("y", entity.position.Value.y));
                    args.TempUsePara(new FloatPara("z", entity.position.Value.z));

                    action.Act(args);

                    args.ResumePara("x");
                    args.ResumePara("y");
                    args.ResumePara("z");

                    firstTime = true;
                }

                if (!stayTarget)
                {
                    return(true);
                }
            }
            else
            {
                Vector3      from = entity.position.Value;
                UnitPosition ep   = GetEntityPosition(entity);
                UnityPositionUtil.Move(ep, tempPosition, dis);

                entity.position.Value = new Vector3(ep.GetX(), ep.GetY(), ep.GetZ());

                if (hitType > 0)
                {
                    bool hit = CheckHit(args, (FreeEntityData)entity.freeData.FreeData, from, entity.position.Value, dis);

                    if (hit)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Beispiel #6
0
        public override void StartMove(FreeRuleEventArgs args, FreeMoveEntity entity)
        {
            tempPosition = targetPos.Select(args);
            if (!string.IsNullOrEmpty(useTime))
            {
                realTime = FreeUtil.ReplaceFloat(useTime, args);
            }

            UnityPositionUtil.SetUnitPositionToEntity(entity.position, startPos.Select(args));
        }
Beispiel #7
0
        public virtual void Start(FreeRuleEventArgs args, FreeMoveEntity entity)
        {
            startTime = args.Rule.ServerTime;

            UnitPosition up = startPos.Select(args);

            entity.position.Value = new Vector3(up.GetX(), up.GetY(), up.GetZ());

            StartMove(args, entity);
        }
Beispiel #8
0
        protected UnitPosition GetEntityPosition(FreeMoveEntity entity)
        {
            if (_entityPosition == null)
            {
                _entityPosition = new UnitPosition();
            }

            _entityPosition.SetX(entity.position.Value.x);
            _entityPosition.SetY(entity.position.Value.y);
            _entityPosition.SetZ(entity.position.Value.z);

            return(_entityPosition);
        }
Beispiel #9
0
        public object Frame(int frameTime)
        {
            if (started)
            {
                FreeMoveEntity move = SingletonManager.Get <FreeUiManager>().Contexts1.freeMove.GetEntityWithEntityKey(new EntityKey(id, (int)EEntityType.FreeMove));
                if (move != null)
                {
                    return(((FreeDataComponent)move.freeData.FreeData).Scale);
                }
            }

            return(null);
        }
Beispiel #10
0
 private bool HasNoObstacle(FreeMoveEntity item, PlayerEntity player)
 {
     if (item.hasUnityGameObject)
     {
         var noObstacle = !CommonObjectCastUtil.HasObstacleBetweenPlayerAndItem(player, item.position.Value, item.unityGameObject.UnityObject);
         return(noObstacle);
     }
     else
     {
         var noObstacle = !CommonObjectCastUtil.HasObstacleBetweenPlayerAndItem(player, item.position.Value, null);
         return(noObstacle);
     }
 }
Beispiel #11
0
        public object Frame(int frameTime)
        {
            if (started)
            {
                FreeMoveEntity move = SingletonManager.Get <FreeUiManager>().Contexts1.freeMove.GetEntityWithEntityKey(new EntityKey(id, (int)EEntityType.FreeMove));
                if (move != null &&
                    move.hasFreeData)
                {
                    return(new Vector3(move.freeData.ScaleX, move.freeData.ScaleY, move.freeData.ScaleZ));
                }
            }

            return(null);
        }
Beispiel #12
0
 private static void CalcuFreeMoveEularAngle(FreeMoveEntity observedFreeMove, CameraFinalOutputNewComponent camera,
                                             CameraStateOutputNewComponent calsOut)
 {
     if (observedFreeMove.hasFreeMoveController && observedFreeMove.freeMoveController.ControllType ==
         (byte)EFreeMoveControllType.FixFocusPos)
     {
         var aimAt = observedFreeMove.freeMoveController.FocusOnPosition.ShiftedVector3();
         var vect  = aimAt - observedFreeMove.position.Value;
         camera.EulerAngle = Quaternion.LookRotation(vect).eulerAngles;
     }
     else
     {
         camera.EulerAngle = calsOut.ArchorEulerAngle + calsOut.EulerAngle;
     }
 }
Beispiel #13
0
        public bool Meet(IEventArgs args)
        {
            FreeData fd  = (FreeData)args.GetUnit(player);
            object   obj = ((FreeRuleEventArgs)args).GetEntity(entity);

            if (fd != null && obj != null)
            {
                PlayerEntity   playerEntity = fd.Player;
                FreeMoveEntity objEntity    = (FreeMoveEntity)obj;
                float          yaw          = CommonMathUtil.TransComAngle(playerEntity.orientation.Yaw);
                float          ang          = CommonMathUtil.GetAngle(new Vector2(objEntity.position.Value.x, objEntity.position.Value.z), new Vector2(playerEntity.position.Value.x, playerEntity.position.Value.z));
                return(CommonMathUtil.GetDiffAngle(ang, yaw) <= FreeUtil.ReplaceFloat(angle, args) && Vector3.Distance(playerEntity.position.Value, objEntity.position.Value) <= FreeUtil.ReplaceFloat(distance, args));
            }
            return(false);
        }
Beispiel #14
0
        private void CalcuWhenObserveFreeMove(PlayerEntity playerEntity, FreeMoveEntity observedFreeMove)
        {
            var camera  = playerEntity.cameraFinalOutputNew;
            var calsOut = playerEntity.cameraStateOutputNew;

            camera.EulerAngle = calsOut.ArchorEulerAngle + calsOut.EulerAngle;

            var   rotation       = Quaternion.Euler(camera.EulerAngle);
            var   archorPos      = observedFreeMove.position.Value + observeOffset;
            float actualDistance = CameraUtility.ScatterCast(archorPos, rotation, observeDistance,
                                                             _samplePoints, _collisionLayers);

            var finalPostOffset = -rotation.Forward() * actualDistance;

            camera.Position = archorPos + finalPostOffset;
        }
        public override void DoAction(IEventArgs args)
        {
            FreeMoveEntity en = args.GameContext.freeMove.CreateEntity();

            en.AddEntityKey(new EntityKey(args.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), (short)EEntityType.FreeMove));
            if (pos == null)
            {
                en.AddPosition();
                en.position.Value = new Vector3(FreeUtil.ReplaceFloat(x, args), FreeUtil.ReplaceFloat(y, args),
                                                FreeUtil.ReplaceFloat(z, args));
            }
            else
            {
                UnitPosition up = pos.Select(args);
                en.AddPosition();
                en.position.Value = new Vector3(up.GetX(), up.GetY(), up.GetZ());
            }

            string realCat = FreeUtil.ReplaceVar(cat, args);

            if (realCat == null)
            {
                realCat = "";
            }
            string realValue = FreeUtil.ReplaceVar(value, args);

            if (realValue == null)
            {
                realValue = "";
            }
            en.AddFreeData(FreeUtil.ReplaceVar(key, args), null);
            en.freeData.Cat      = realCat;
            en.freeData.Value    = realValue;
            en.isFlagSyncNonSelf = true;

            en.AddFlagImmutability(args.GameContext.session.currentTimeObject.CurrentTime);

            if (distance > 0)
            {
                en.AddPositionFilter(Core.Components.PositionFilterType.Filter2D, distance);
            }

            if (!string.IsNullOrEmpty(lifeTime))
            {
                en.AddLifeTime(DateTime.Now, FreeUtil.ReplaceInt(lifeTime, args));
            }
        }
Beispiel #16
0
        public FreeEntityData(FreeMoveEntity entity)
        {
            this._entity = entity;
            this.paras   = new SimpleParaList();
            this.paras.AddFields(new ObjectFields(this));
            this.id = entity.entityKey.Value.EntityId;

            this.follows = new List <PlayerEntity>();

            xPara = new IntPara("x", 0);
            yPara = new IntPara("y", 0);
            zPara = new IntPara("z", 0);

            paras.AddPara(xPara);
            paras.AddPara(yPara);
            paras.AddPara(zPara);
        }
Beispiel #17
0
        public override void DoAction(IEventArgs args)
        {
            Debug.LogFormat("remove scene object {0}", id);
            SceneObjectEntity entity = args.GameContext.sceneObject.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(FreeUtil.ReplaceInt(id, args), (short)EEntityType.SceneObject));

            if (entity != null)
            {
                entity.isFlagDestroy = true;
            }
            else
            {
                FreeMoveEntity moveEntity = args.GameContext.freeMove.GetEntityWithEntityKey(new EntityKey(FreeUtil.ReplaceInt(id, args), (short)EEntityType.FreeMove));
                if (moveEntity != null)
                {
                    moveEntity.isFlagDestroy = true;
                }
            }
        }
        private int CreateItemFromInventory(IEventArgs fr, FreeData fd, ItemInventory ii, Vector3 p, string realName, int entityId)
        {
            int itemAdded = 0;

            if (ii != null && ii.name != ChickenConstant.BagGround)
            {
                foreach (ItemPosition ip in ii.GetItems())
                {
                    FreeMoveEntity en = fr.GameContext.freeMove.CreateEntity();
                    en.AddEntityKey(new EntityKey(fr.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), (short)EEntityType.FreeMove));
                    en.AddPosition();
                    en.position.Value = new Vector3(p.x, p.y, p.z);

                    en.AddFreeData(FreeUtil.ReplaceVar(name, fr), null);
                    en.AddPositionFilter(Core.Components.PositionFilterType.Filter2D, 1000);
                    en.freeData.Cat = FreeEntityConstant.DeadBox;

                    FreeItemInfo itemInfo = FreeItemConfig.GetItemInfo(ip.GetKey().GetKey());

                    if (itemInfo.cat == (int)ECategory.Weapon)
                    {
                        int key = CarryClipUtil.GetWeaponKey(ii.name, fd);
                        if (key >= 1 && key <= 3)
                        {
                            CarryClipUtil.AddCurrentClipToBag(key, fd, fr);
                        }
                    }

                    en.AddFlagImmutability(fr.GameContext.session.currentTimeObject.CurrentTime);

                    SimpleItemInfo info = new SimpleItemInfo(realName, itemInfo.cat, itemInfo.id, ip.GetCount(), en.entityKey.Value.EntityId);
                    en.freeData.Value    = SingletonManager.Get <DeadBoxParser>().ToString(info);
                    en.freeData.IntValue = entityId;

                    en.isFlagSyncNonSelf = true;

                    itemAdded++;
                }
            }

            return(itemAdded);
        }
Beispiel #19
0
        public static SimpleItemInfo GetGroundItemInfo(ServerRoom room, FreeData fd, string key)
        {
            SimpleItemInfo freeItem = new SimpleItemInfo();

            string[] xy = StringUtil.Split(key, ParaConstant.SPLITER_COMMA);
            if (xy.Length == 3)
            {
                string name = xy[0];
                int    x    = NumberUtil.GetInt(xy[1]);
                int    y    = NumberUtil.GetInt(xy[2]);

                if (x == 0)
                {
                    SceneObjectEntity entity = room.RoomContexts.sceneObject.GetEntityWithEntityKey(new EntityKey(y, (short)EEntityType.SceneObject));
                    if (entity != null)
                    {
                        freeItem.entityId = entity.entityKey.Value.EntityId;
                        freeItem.cat      = entity.simpleEquipment.Category;
                        freeItem.id       = entity.simpleEquipment.Id;
                        freeItem.count    = entity.simpleEquipment.Count;
                    }
                    else
                    {
                        FreeMoveEntity moveEntity = room.RoomContexts.freeMove.GetEntityWithEntityKey(new EntityKey(y, (short)EEntityType.FreeMove));
                        if (moveEntity != null)
                        {
                            SimpleItemInfo info = (SimpleItemInfo)SingletonManager.Get <DeadBoxParser>().FromString(moveEntity.freeData.Value);
                            freeItem.entityId = moveEntity.entityKey.Value.EntityId;
                            freeItem.cat      = info.cat;
                            freeItem.id       = info.id;
                            freeItem.count    = info.count;
                        }
                        else
                        {
                            Debug.LogErrorFormat("entity {0} not existed.", key);
                        }
                    }
                }
            }

            return(freeItem);
        }
        private void CalcuWhenObserveFreeMove(PlayerEntity playerEntity, FreeMoveEntity observedFreeMove)
        {
            var camera  = playerEntity.cameraFinalOutputNew;
            var calsOut = playerEntity.cameraStateOutputNew;

            camera.EulerAngle   = calsOut.ArchorEulerAngle + calsOut.EulerAngle;
            camera.EulerAngle.x = YawPitchUtility.Normalize(camera.EulerAngle.x);
            camera.EulerAngle.y = YawPitchUtility.Normalize(camera.EulerAngle.y);
            camera.EulerAngle.z = YawPitchUtility.Normalize(camera.EulerAngle.z);


            var   rotation       = Quaternion.Euler(camera.EulerAngle);
            var   archorPos      = observedFreeMove.position.Value + observeOffset;
            float actualDistance = ActualDistance(rotation, archorPos, observeDistance, _collisionLayers);

            var finalPostOffset = -rotation.Forward() * actualDistance;

            camera.Position = archorPos + finalPostOffset;
            Debug.DrawLine(observedFreeMove.position.Value, archorPos, Color.green);
            Debug.DrawLine(archorPos, camera.Position, Color.blue);
        }
Beispiel #21
0
        private void CalcuFreeMovePos(FreeMoveEntity observedFreeMove, CameraFinalOutputNewComponent camera)
        {
            if (observedFreeMove == null || !observedFreeMove.hasPosition)
            {
                return;
            }

            var archorPos = observedFreeMove.position.Value +
                            (observedFreeMove.hasFreeMoveController ? Vector3.zero : observeOffset);
            var rotation = Quaternion.Euler(camera.EulerAngle);

            if (observedFreeMove.hasFreeMoveController && observedFreeMove.freeMoveController.ControllType ==
                (byte)EFreeMoveControllType.FixFocusPos)
            {
                camera.Position = archorPos;
            }
            else
            {
                float actualDistance = CameraUtility.ScatterCast(archorPos, rotation, observeDistance,
                                                                 _samplePoints, _collisionLayers);
                var finalPostOffset = -rotation.Forward() * actualDistance;
                camera.Position = archorPos + finalPostOffset;
            }
        }
Beispiel #22
0
        protected new IMoveSpeed GetSpeed(IEventArgs args, FreeMoveEntity entity)
        {
            if (string.IsNullOrEmpty(useTime))
            {
                return(base.GetSpeed(args, entity));
            }
            else
            {
                if (speed == null)
                {
                    float dis = tempPosition.Distance(GetEntityPosition(entity));
                    if (realTime > 0)
                    {
                        speed = new AlwaysOneSpeed(dis / realTime);
                    }
                    else
                    {
                        speed = new AlwaysOneSpeed(5);
                    }
                }

                return(base.GetSpeed(args, entity));
            }
        }
        public Object Frame(int frameTime)
        {
            var v = new Vector3();

            //            var battleModel = GameModelLocator.getInstance().gameModel;
            //
            //            var ce = battleModel.getClientEntityFormId(id);
            //
            //            if (ce == null)
            //            {
            //                ce = battleModel.getCurrentSelfClientEntity();
            //            }
            //
            //            var angle = ce.lerpAngle.x + battleModel.shakeAngleOffect.x;
            var            battleModel = GameModelLocator.GetInstance().GameModel;
            PlayerEntity   player      = SingletonManager.Get <FreeUiManager>().Contexts1.player.GetEntityWithEntityKey(new EntityKey(id, (int)EEntityType.Player));
            FreeMoveEntity move        = SingletonManager.Get <FreeUiManager>().Contexts1.freeMove.GetEntityWithEntityKey(new EntityKey(id, (int)EEntityType.FreeMove));

            //if (player == null && move == null)
            //{
            //    player = SingletonManager.Get<FreeUiManager>().Contexts1.player.flagSelfEntity;
            //}

            var angle = this._angle;

            if (player != null)
            {
                angle = player.orientation.Yaw + this._angle + battleModel.shakeAngleOffect.x;
            }

            var dir = new Vector3();

            var end = new Vector3();


            FreeMathUtility.AnglesToVector(angle, pitch, ref dir);

            PositionComponent pos = null;

            if (player != null)
            {
                pos = player.position;
            }

            if (move != null)
            {
                if (move.hasPosition)
                {
                    pos = move.position;
                }
            }

            if (pos != null)
            {
                FreeMathUtility.Vector3DMA(pos.Value, distance, dir, ref end);

                v.x = end.x;
                v.y = end.y + height;
                v.z = end.z;
            }
            else
            {
                return(null);
            }

            return(v);
        }
Beispiel #24
0
        public static void AddItemToPlayer(ServerRoom room, PlayerEntity player, int entityId, int cat, int id, int count, string toInv = "")
        {
            SceneObjectEntity entity         = room.RoomContexts.sceneObject.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(entityId, (short)EEntityType.SceneObject));
            FreeMoveEntity    freeMoveEntity = null;

            if (entity == null || entity.isFlagDestroy)
            {
                freeMoveEntity = room.RoomContexts.freeMove.GetEntityWithEntityKey(new Core.EntityComponent.EntityKey(entityId, (short)EEntityType.FreeMove));
                if (freeMoveEntity == null)
                {
                    return;
                }
            }

            room.FreeArgs.TempUse("current", (FreeData)player.freeData.FreeData);

            if (!FreeItemConfig.Contains(cat, id))
            {
                return;
            }

            FreeItemInfo             item   = FreeItemConfig.GetItemInfo(cat, id);
            CreateItemToPlayerAction action = new CreateItemToPlayerAction();

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

            action.name = "default";

            switch (item.cat)
            {
            case (int)ECategory.Weapon:
                if (item.subType == "w1")
                {
                    action.name = "w1";

                    int c1 = fd.freeInventory.GetInventoryManager().GetInventory("w1").posList.Count;
                    int c2 = fd.freeInventory.GetInventoryManager().GetInventory("w2").posList.Count;


                    if (toInv.StartsWith("w1"))
                    {
                        action.name = "w1";
                        if (c1 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else if (toInv.StartsWith("w2"))
                    {
                        action.name = "w2";
                        if (c2 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else
                    {
                        if (c1 > 0 && c2 == 0)
                        {
                            action.name = "w2";
                        }

                        if (c1 > 0 && c2 > 0)
                        {
                            int currentKey = FreeWeaponUtil.GetWeaponKey(fd.Player.WeaponController().HeldSlotType);
                            if (currentKey == 0)
                            {
                                currentKey = 1;
                            }
                            if (currentKey == 1 || currentKey == 2)
                            {
                                action.name = "w" + currentKey;
                            }
                            else
                            {
                                action.name = "w1";
                            }

                            DropItem(action.name, fd, room);
                        }
                    }
                }
                else if (item.subType == "w2")
                {
                    action.name = "w3";
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == "w3")
                {
                    action.name = "w4";
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == "w4")
                {
                    action.name = "default";
                }

                break;

            case (int)ECategory.Avatar:
                action.name = item.subType;
                DropItem(item.subType, fd, room);
                break;

            case (int)ECategory.WeaponPart:
                action.name = AutoPutPart(fd, item, toInv, room);
                break;

            default:
                break;
            }

            //handleDropOne(new string[] { "w2" }, action, item, fd, room, entity);
            //handleAddToDefault(new string[] { "p1", "p2", "p3", "p4", "p5" }, action, item, fd, room, entity);

            action.key = FreeItemConfig.GetItemKey(item.cat, item.id);

            bool canAdd = true;

            if (action.name == "default")
            {
                canAdd = BagCapacityUtil.CanAddToBag(room.FreeArgs, fd, item.cat, item.id, count);
            }

            if (canAdd)
            {
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.Interrupt, fd.Player, true);
                PlayerAnimationAction.DoAnimation(room.RoomContexts, 101, fd.Player, true);

                if (!string.IsNullOrEmpty(action.key))
                {
                    action.count = count.ToString();
                    action.SetPlayer("current");
                    room.FreeArgs.TempUse("current", fd);

                    action.Act(room.FreeArgs);

                    room.FreeArgs.Resume("current");
                }
                else
                {
                    Debug.LogError(item.cat + "-" + item.key + " not existed");
                }

                if (entity != null)
                {
                    entity.isFlagDestroy = true;
                }

                if (freeMoveEntity != null)
                {
                    freeMoveEntity.isFlagDestroy = true;
                }
                //Debug.LogErrorFormat("destroy entity {0}", entity != null);

                FreeSoundUtil.PlayOnce("pick", 225, room.FreeArgs, fd);
            }

            room.FreeArgs.Resume("current");
        }
        public void Start(FreeRuleEventArgs args, FreeMoveEntity entity)
        {
            UnitPosition up = startPos.Select(args);

            entity.position.Value = new Vector3(up.GetX(), up.GetY(), up.GetZ());
        }
Beispiel #26
0
 public override void StartMove(FreeRuleEventArgs args, FreeMoveEntity entity)
 {
 }
Beispiel #27
0
 public override bool Frame(FreeRuleEventArgs args, FreeMoveEntity entity, int interval)
 {
     return(false);
 }
Beispiel #28
0
        public static bool AddItemToPlayer(ServerRoom room, PlayerEntity player, int entityId, int cat, int id, int count, string toInv = "")
        {
            SceneObjectEntity entity         = room.RoomContexts.sceneObject.GetEntityWithEntityKey(new EntityKey(entityId, (short)EEntityType.SceneObject));
            FreeMoveEntity    freeMoveEntity = null;

            if (entity == null || entity.isFlagDestroy)
            {
                freeMoveEntity = room.RoomContexts.freeMove.GetEntityWithEntityKey(new EntityKey(entityId, (short)EEntityType.FreeMove));
                if (freeMoveEntity == null)
                {
                    return(false);
                }
            }

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

            room.ContextsWrapper.FreeArgs.TempUse("current", fd);

            if (!FreeItemConfig.Contains(cat, id))
            {
                return(false);
            }

            FreeItemInfo             item   = FreeItemConfig.GetItemInfo(cat, id);
            CreateItemToPlayerAction action = new CreateItemToPlayerAction();

            action.name = ChickenConstant.BagDefault;
            switch (item.cat)
            {
            case (int)ECategory.Weapon:
                if (item.subType == ChickenConstant.ItemCatPrimeWeapon)
                {
                    action.name = ChickenConstant.BagPrimeWeapon;

                    int c1 = fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagPrimeWeapon).posList.Count;
                    int c2 = fd.freeInventory.GetInventoryManager().GetInventory(ChickenConstant.BagSecondaryWeapon).posList.Count;

                    if (toInv.StartsWith(ChickenConstant.BagPrimeWeapon))
                    {
                        action.name = ChickenConstant.BagPrimeWeapon;
                        if (c1 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else if (toInv.StartsWith(ChickenConstant.BagSecondaryWeapon))
                    {
                        action.name = ChickenConstant.BagSecondaryWeapon;
                        if (c2 > 0)
                        {
                            DropItem(action.name, fd, room);
                        }
                    }
                    else
                    {
                        if (c1 > 0 && c2 == 0)
                        {
                            action.name = ChickenConstant.BagSecondaryWeapon;
                        }

                        if (c1 > 0 && c2 > 0)
                        {
                            int currentKey = FreeWeaponUtil.GetWeaponKey(fd.Player.WeaponController().HeldSlotType);
                            if (currentKey == 0)
                            {
                                currentKey = 1;
                            }
                            if (currentKey == 1 || currentKey == 2)
                            {
                                action.name = "w" + currentKey;
                            }
                            else
                            {
                                action.name = ChickenConstant.BagPrimeWeapon;
                            }

                            DropItem(action.name, fd, room);
                        }
                    }
                }
                else if (item.subType == ChickenConstant.ItemCatPistolWeapon)
                {
                    action.name = ChickenConstant.BagPistolWeapon;
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatMeleeWeapon)
                {
                    action.name = ChickenConstant.BagMeleeWeapon;
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatGrenadeWeapon)
                {
                    action.name = ChickenConstant.BagDefault;
                }
                else if (item.subType == ChickenConstant.ItemCatArmor)
                {
                    action.name = ChickenConstant.BagArmor;
                    if (entity != null)
                    {
                        count = entity.armorDurability.CurDurability;
                    }
                    DropItem(action.name, fd, room);
                }
                else if (item.subType == ChickenConstant.ItemCatHelmet)
                {
                    action.name = ChickenConstant.BagHelmet;
                    if (entity != null)
                    {
                        count = entity.armorDurability.CurDurability;
                    }
                    DropItem(action.name, fd, room);
                }
                break;

            case (int)ECategory.Avatar:
                action.name = item.subType;
                DropItem(item.subType, fd, room);
                break;

            case (int)ECategory.WeaponPart:
                action.name = AutoPutPart(fd, item, toInv, room);
                break;

            default:
                break;
            }
            action.key = FreeItemConfig.GetItemKey(item.cat, item.id);

            int canCount = 0;

            if (action.name == ChickenConstant.BagDefault)
            {
                canCount = BagCapacityUtil.CanAddToBagCount(room.ContextsWrapper.FreeArgs, fd, item.cat, item.id, count);
            }
            else if (item.type == ChickenConstant.ItemCatAvatar || action.name == ChickenConstant.BagHelmet || action.name == ChickenConstant.BagArmor)
            {
                canCount = count;
            }
            else
            {
                canCount = 1;
            }

            bool pickupSuccess = false;

            if (canCount > 0 && !string.IsNullOrEmpty(action.name))
            {
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.Interrupt, fd.Player, true);
                PlayerAnimationAction.DoAnimation(room.RoomContexts, PlayerAnimationAction.PickUp, fd.Player, true);
                PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, fd.Player.gamePlay);

                if (!string.IsNullOrEmpty(action.key))
                {
                    action.count = canCount.ToString();
                    action.SetPlayer("current");
                    room.ContextsWrapper.FreeArgs.TempUse("current", fd);
                    action.Act(room.ContextsWrapper.FreeArgs);
                    room.ContextsWrapper.FreeArgs.Resume("current");

                    if (count > canCount)
                    {
                        SimpleProto msg = FreePool.Allocate();
                        msg.Key = FreeMessageConstant.ChickenTip;
                        msg.Ss.Add("word80," + count + "," + canCount);
                        FreeMessageSender.SendMessage(fd.Player, msg);
                        room.ContextsWrapper.FreeArgs.GameContext.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity((ECategory)item.cat,
                                                                                                                                                item.id, count - canCount, entity == null ? freeMoveEntity.position.Value : entity.position.Value);
                    }
                    pickupSuccess = true;
                }
                else
                {
                    Debug.LogError(item.cat + "-" + item.key + " not existed");
                }

                if (entity != null)
                {
                    entity.isFlagDestroy = true;
                }
                if (freeMoveEntity != null)
                {
                    freeMoveEntity.isFlagDestroy = true;
                    if (freeMoveEntity.freeData.Cat == FreeEntityConstant.DeadBox)
                    {
                        var deadBox = room.ContextsWrapper.FreeArgs.GameContext.freeMove.GetEntityWithEntityKey(new EntityKey(freeMoveEntity.freeData.IntValue, (short)EEntityType.FreeMove));
                        if (deadBox != null && deadBox.freeData.EmptyDelete)
                        {
                            if (deadBox.freeData.IntValue > 1)
                            {
                                deadBox.freeData.IntValue--;
                            }
                            else
                            {
                                deadBox.isFlagDestroy = true;
                            }
                        }
                    }
                }
            }
            room.ContextsWrapper.FreeArgs.Resume("current");

            return(pickupSuccess);
        }
Beispiel #29
0
        private int GetPlayerField()
        {
            var playerEntity = SingletonManager.Get <FreeUiManager>().Contexts1.player.flagSelfEntity;

            if (playerEntity == null)
            {
                FreeMoveEntity move = SingletonManager.Get <FreeUiManager>().Contexts1.freeMove.GetEntityWithEntityKey(new EntityKey(_id, (int)EEntityType.FreeMove));
                if (move != null)
                {
                    if ("scale" == _field)
                    {
                        if (move.hasFreeData)
                        {
                        }
                    }
                }
                return(0);
            }
            else
            {
                if ("speed" == _field)
                {
                    var speedVector3D = playerEntity.playerMove.Velocity;
                    speedVector3D.z = 0;
                    return((int)speedVector3D.magnitude);
                }
                if ("ping" == _field)
                {
                    return(PlayerStatus.GetPing((int)_id));
                }

                if (_field == "hp")
                {
                    return((int)playerEntity.gamePlay.CurHp);
                }
                if (_field == "maxHp")
                {
                    return(playerEntity.gamePlay.MaxHp);
                }
                if (_field == "maxSpeed")
                {
                    return(0);
                }
                if (_field == "x")
                {
                    return((int)playerEntity.position.Value.x);
                }
                if (_field == "y")
                {
                    return((int)playerEntity.position.Value.y);
                }
                if (_field == "z")
                {
                    return((int)playerEntity.position.Value.z);
                }
                if (_field == "pitch")
                {
                    return((int)playerEntity.orientation.Pitch);
                }
                if (_field == "yaw")
                {
                    return((int)playerEntity.orientation.Yaw);
                }

                return(0);
            }
        }
        public override void DoAction(IEventArgs args)
        {
            FreeMoveEntity en = args.GameContext.freeMove.CreateEntity();

            en.AddEntityKey(new EntityKey(args.GameContext.session.commonSession.EntityIdGenerator.GetNextEntityId(), (short)EEntityType.FreeMove));
            en.AddPosition();
            en.AddFreeData(FreeUtil.ReplaceVar(name, args), new FreeEntityData(en));
            en.freeData.Cat    = "";
            en.freeData.Value  = "";
            en.freeData.ScaleX = 1f;
            en.freeData.ScaleY = 1f;
            en.freeData.ScaleZ = 1f;

            if (distance > 0)
            {
                en.AddPositionFilter(Core.Components.PositionFilterType.Filter2D, distance);
            }

            en.isFlagSyncNonSelf = true;

            FreeEntityData entityData = (FreeEntityData)en.freeData.FreeData;

            entityData.move             = (IFreeMove)SerializeUtil.Clone(move);
            entityData.createAction     = createAction;
            entityData.action           = action;
            entityData.name             = FreeUtil.ReplaceVar(name, args);
            entityData.condition        = condition;
            entityData.removeAction     = removeAction;
            entityData.effect           = (FreeEffectCreateAction)SerializeUtil.Clone(effect);
            entityData.width            = width;
            entityData.length           = length;
            entityData.height           = height;
            entityData.deadAction       = deadAction;
            entityData.damageAction     = damageAction;
            entityData.frameAction      = (IGameAction)SerializeUtil.Clone(frameAction);
            entityData.removeCondition  = removeCondition;
            entityData.removedCondition = removedCondition;
            entityData.hp = hp;

            if (width > 0 && height > 0 && length > 0)
            {
                AssetInfo info = GetAssetInfo(args, effect);
                if (!string.IsNullOrEmpty(info.AssetName))
                {
                    args.GameContext.session.commonSession.AssetManager.LoadAssetAsync(
                        entityData, info, SetGameObject);
                }
            }

            if (skills != null)
            {
                entityData.skills = new List <ISkill>();
                foreach (ISkill skill in skills)
                {
                    entityData.skills.Add((ISkill)SerializeUtil.Clone(skill));
                }
            }

            FreeData fd = GetPlayer(args);

            if (fd != null)
            {
                args.TempUse("creator", fd);
            }

            entityData.Start(args);

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