예제 #1
0
        public static void SendMarkMessage(Contexts contexts, Vector2 markPos)
        {
            SimpleProto loginSucess = FreePool.Allocate();

            if (Vector2.Distance(markPos, lastAddMarkPos) > 10 / rate)
            {
                loginSucess.Key = FreeMessageConstant.MarkPos;
                loginSucess.Fs.Add(markPos.x);
                loginSucess.Fs.Add(markPos.y);
                loginSucess.Fs.Add(1);              //add mark
                lastAddMarkPos = markPos;
            }
            else
            {
                loginSucess.Key = FreeMessageConstant.MarkPos;
                loginSucess.Fs.Add(markPos.x);
                loginSucess.Fs.Add(markPos.y);
                loginSucess.Fs.Add(0);              //remove mark
                lastAddMarkPos = Vector2.zero;
            }
            if (contexts.session.clientSessionObjects.NetworkChannel != null)
            {
                contexts.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, loginSucess);
            }
        }
        public static ILInstanceHolderPoolItem Alloc(Type Type, object Value = null)
        {
            lock (TypePools)
            {
                if (!TypePools.ContainsKey(Type))
                {
                    TypePools[Type] = new List <ILInstanceHolderPool>();
                }
                var PoolsType = TypePools[Type];
                var FreePool  = PoolsType.Where(Pool => Pool.HasAvailable).FirstOrDefault();
                if (FreePool == null)
                {
                    int NextPoolSize = 1 << (PoolsType.Count + 2);
                    //if (NextPoolSize < 2048) NextPoolSize = 2048;

#if DEBUG_ILINSTANCEHOLDERPOOL_TIME
                    Console.BackgroundColor = ConsoleColor.DarkRed;
                    Console.Error.Write("Create ILInstanceHolderPool({0})[{1}]...", Type, NextPoolSize);
                    var Start = DateTime.UtcNow;
#endif
                    PoolsType.Add(FreePool = new ILInstanceHolderPool(Type, NextPoolSize));
#if DEBUG_ILINSTANCEHOLDERPOOL_TIME
                    var End = DateTime.UtcNow;
                    Console.Error.WriteLine("Ok({0})", End - Start);
                    Console.ResetColor();
#endif
                }
                var Item = FreePool.Alloc();
                Item.Value = Value;
                return(Item);
            }
        }
예제 #3
0
        private void SendCmd(PlayerEntity player)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add(0);
            FreeMessageSender.SendMessage(player, proto);
        }
예제 #4
0
        public override SimpleProto CreateChildren(IEventArgs args)
        {
            SimpleProto b = FreePool.Allocate();

            FreeUICreateAction.Build(b, args, "0", "", false, false, list.AsIterable());

            return(b);
        }
예제 #5
0
        public override SimpleProto CreateChildren(IEventArgs args)
        {
            SimpleProto b = FreePool.Allocate();

            b.Key = 1;

            return(b);
        }
예제 #6
0
        public override SimpleProto CreateChildren(IEventArgs args)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = 1;

            return(proto);
        }
예제 #7
0
        public void SendSplitMessage(int number, string itemKey)
        {
            SimpleProto data = FreePool.Allocate();

            data.Key = FreeMessageConstant.SplitItem;
            data.Ins.Add(number);
            data.Ss.Add(itemKey);
            _contexts.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, data);
        }
예제 #8
0
 public void Setup()
 {
     test = new FakeTest1();
     vf   = new ValueFactoryTest1("none:");
     pool = new FreePool();
     src  = new MyMessageSource(this);
     stub = new StubTest1(src, test, pool, pool);
     xreplyMon.Set(null);
 }
예제 #9
0
        private void StartCounter(IEventArgs args, int time, FreeData fd, bool start)
        {
            SimpleProto data = FreePool.Allocate();

            data.Key = FreeMessageConstant.CountDown;
            data.Bs.Add(start);
            data.Fs.Add(time);
            fd.Player.network.NetworkChannel.SendReliable((int)EServer2ClientMessage.FreeData, data);
        }
예제 #10
0
        public override void DoAction(IEventArgs args)
        {
            SimpleProto builder = FreePool.Allocate();

            builder.Key = FreeMessageConstant.GroupTechStatUI;

            builder.Ins.Add(args.GameContext.player.count);

            List <TechStat> list = new List <TechStat>();

            int  index    = 0;
            bool needSort = true;

            foreach (PlayerEntity p in args.GameContext.player.GetInitializedPlayerEntities())
            {
                TechStat ts = new TechStat(p, index++);
                builder.Ps.Add(ts.ToMessage());
                list.Add(ts);
                if (!p.statisticsData.Statistics.DataCollectSwitch)
                {
                    needSort = false;
                }
            }

            if (needSort)
            {
                list.Sort(KillComparater);
                if (list.Count > 0 && list[0].kill > 0)
                {
                    TechStat ts = list[0];
                    builder.Ps[ts.index].Ins[2] |= (1 << (int)EUIGameTitleType.Ace);
                }
                if (list.Count > 1 && list[1].kill > 0)
                {
                    TechStat ts = list[1];
                    builder.Ps[ts.index].Ins[2] |= (1 << (int)EUIGameTitleType.Second);
                }
                if (list.Count > 2 && list[2].kill > 0)
                {
                    TechStat ts = list[2];
                    builder.Ps[ts.index].Ins[2] |= (1 << (int)EUIGameTitleType.Third);
                }

                list.Sort(KdComparater);
                if (list.Count > 0 && list[0].kd > 0)
                {
                    TechStat ts = list[0];
                    builder.Ps[ts.index].Ins[2] |= (1 << (int)EUIGameTitleType.KdKing);
                }
            }

            foreach (PlayerEntity p in args.GameContext.player.GetInitializedPlayerEntities())
            {
                FreeMessageSender.SendMessage(p, builder);
            }
        }
예제 #11
0
        public static void DoNothing(PlayerEntity player)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add((int)PlayerActEnum.CmdType.Idle);
            proto.Ks.Add(player.entityKey.Value.EntityId);

            FreeMessageSender.SendMessage(player, proto);
        }
예제 #12
0
        private void HandleFrame(IEventArgs args)
        {
            if (code == "RecordFrame")
            {
                SimpleProto message = FreePool.Allocate();
                message.Key = FreeMessageConstant.TestFrame;

                SendMessageAction.sender.SendMessage(args, message, 4, string.Empty);
            }
        }
예제 #13
0
        public static void ClickItem(string key, bool right)
        {
            SimpleProto data = FreePool.Allocate();

            data.Key = FreeMessageConstant.ClickImage;
            data.Ss.Add(GetBagKey(key));
            data.Bs.Add(right);
            data.Bs.Add(Input.GetKey(KeyCode.LeftControl));

            SingletonManager.Get <FreeUiManager>().Contexts1.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, data);
        }
예제 #14
0
        public static void AttackPlayer(PlayerEntity player, int targetId)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add((int)PlayerActEnum.CmdType.Attack);

            proto.Ks.Add(player.entityKey.Value.EntityId);
            proto.Ks.Add(targetId);

            FreeMessageSender.SendMessage(player, proto);
        }
예제 #15
0
        public void Handle(ServerRoom room, PlayerEntity player, SimpleProto message)
        {
            FreeData fd = (FreeData)player.freeData.FreeData;

            room.ContextsWrapper.FreeArgs.TempUse(PARA_PLAYER_CURRENT, fd);

            string key   = message.Ss[0];
            int    count = message.Ins[0];

            if (key.StartsWith(ChickenConstant.BagDefault))
            {
                ItemPosition ip   = FreeItemManager.GetItemPosition(room.ContextsWrapper.FreeArgs, key, fd.GetFreeInventory().GetInventoryManager());
                FreeItemInfo info = FreeItemConfig.GetItemInfo(ip.key.GetKey());

                if (ip.GetCount() > count)
                {
                    if (info.cat == (int)ECategory.Weapon && SingletonManager.Get <WeaponResourceConfigManager>().GetConfigById(info.id).Type == (int)EWeaponType_Config.ThrowWeapon)
                    {
                        CarryClipUtil.DeleteGrenade(count, info.id, fd, room.ContextsWrapper.FreeArgs);
                        for (int i = 0; i < count; i++)
                        {
                            player.WeaponController().RemoveGreande(info.id);
                        }
                    }
                    else
                    {
                        ip.SetCount(ip.GetCount() - count);
                        ip.GetInventory().GetInventoryUI().ReDraw((ISkillArgs)room.ContextsWrapper.FreeArgs, ip.GetInventory(), true);
                    }
                }
                else
                {
                    ip.GetInventory().RemoveItem((ISkillArgs)room.ContextsWrapper.FreeArgs, ip);
                }

                room.RoomContexts.session.entityFactoryObject.SceneObjectEntityFactory.CreateSimpleObjectEntity(
                    (ECategory)info.cat, info.id, count, fd.Player.position.Value);

                if (info.cat == (int)ECategory.GameItem && SingletonManager.Get <GameItemConfigManager>().GetConfigById(info.id).Type == (int)GameItemType.Bullet)
                {
                    player.WeaponController().SetReservedBullet((EBulletCaliber)info.id, CarryClipUtil.GetClipCount(info.id, fd, room.ContextsWrapper.FreeArgs));
                }

                SimpleProto sp = FreePool.Allocate();
                sp.Key = FreeMessageConstant.PlaySound;
                sp.Ks.Add(2);
                sp.Ins.Add(5017);
                sp.Bs.Add(false);
                FreeMessageSender.SendMessage(fd.Player, sp);
            }

            room.ContextsWrapper.FreeArgs.Resume(PARA_PLAYER_CURRENT);
        }
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity playerEntity = GetPlayerEntity(args);

            if (null != playerEntity)
            {
                playerEntity.statisticsData.Battle.Reset();
                SimpleProto sp = FreePool.Allocate();
                sp.Key = FreeMessageConstant.ResetBattleData;
                FreeMessageSender.SendMessage(playerEntity, sp);
            }
        }
예제 #17
0
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity player = GetPlayerEntity(args);

            SimpleProto msg = FreePool.Allocate();

            msg.Key = FreeMessageConstant.PlayerPressKey;
            msg.Bs.Add(args.GetBool(press));
            msg.Ss.Add(key);
            msg.Ins.Add(args.GetInt(time));
            FreeMessageSender.SendMessage(player, msg);
        }
예제 #18
0
        private void SendCmd(PlayerEntity player, Vector3 v)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add(1);
            proto.Fs.Add(v.x);
            proto.Fs.Add(v.y);
            proto.Fs.Add(v.z);

            FreeMessageSender.SendMessage(player, proto);
        }
예제 #19
0
        public static bool CanExchangeAttachment(ServerRoom room, FreeData fd, FreeItemInfo fromPart, FreeItemInfo toPart, WeaponBaseAgent fromAgent, WeaponBaseAgent toAgent)
        {
            double capacity = Math.Round(GetCapacity(fd) - GetWeight(fd), 3);

            int toBullet   = SingletonManager.Get <WeaponPartsConfigManager>().GetConfigById(WeaponPartUtil.GetWeaponFstMatchedPartId(toPart.id, fromAgent.ConfigId)).Bullet;
            int fromBullet = SingletonManager.Get <WeaponPartsConfigManager>().GetConfigById(WeaponPartUtil.GetWeaponFstMatchedPartId(fromPart.id, toAgent.ConfigId)).Bullet;

            if (toBullet == fromBullet)
            {
                return(true);
            }

            int overBulletFrom = fromAgent.BaseComponent.Bullet - fromAgent.WeaponConfigAssy.PropertyCfg.Bullet - toBullet;
            int overBulletTo   = toAgent.BaseComponent.Bullet - toAgent.WeaponConfigAssy.PropertyCfg.Bullet - fromBullet;

            float bulletWeight = 0f;

            if (overBulletFrom > 0)
            {
                bulletWeight += SingletonManager.Get <GameItemConfigManager>().GetConfigById((int)fromAgent.Caliber).Weight *overBulletFrom;
            }

            if (overBulletTo > 0)
            {
                bulletWeight += SingletonManager.Get <GameItemConfigManager>().GetConfigById((int)toAgent.Caliber).Weight *overBulletTo;
            }

            if (capacity < bulletWeight)
            {
                SimpleProto msg = FreePool.Allocate();
                msg.Key = FreeMessageConstant.ChickenTip;
                msg.Ss.Add("word79");
                FreeMessageSender.SendMessage(fd.Player, msg);
                return(false);
            }

            if (overBulletFrom > 0)
            {
                fromAgent.BaseComponent.Bullet = fromAgent.WeaponConfigAssy.PropertyCfg.Bullet + toBullet;
                CarryClipUtil.AddClip(overBulletFrom, (int)fromAgent.Caliber, fd, room.ContextsWrapper.FreeArgs);
                fd.Player.WeaponController().SetReservedBullet(fromAgent.Caliber, CarryClipUtil.GetClipCount((int)fromAgent.Caliber, fd, room.ContextsWrapper.FreeArgs));
            }

            if (overBulletTo > 0)
            {
                toAgent.BaseComponent.Bullet = toAgent.WeaponConfigAssy.PropertyCfg.Bullet + fromBullet;
                CarryClipUtil.AddClip(overBulletTo, (int)toAgent.Caliber, fd, room.ContextsWrapper.FreeArgs);
                fd.Player.WeaponController().SetReservedBullet(toAgent.Caliber, CarryClipUtil.GetClipCount((int)toAgent.Caliber, fd, room.ContextsWrapper.FreeArgs));
            }

            return(true);
        }
예제 #20
0
        private void handleToGround(string from, string to, ServerRoom room, FreeData fd)
        {
            PlayerStateUtil.AddPlayerState(EPlayerGameState.InterruptItem, fd.Player.gamePlay);
            FreeItemManager.DragItem(from, fd, room.ContextsWrapper.FreeArgs, ChickenConstant.BagGround);

            SimpleProto sp = FreePool.Allocate();

            sp.Key = FreeMessageConstant.PlaySound;
            sp.Ks.Add(2);
            sp.Ins.Add(5017);
            sp.Bs.Add(false);
            FreeMessageSender.SendMessage(fd.Player, sp);
        }
예제 #21
0
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity playerEntity = GetPlayerEntity(args);

            if (null != playerEntity)
            {
                SimpleProto sp = FreePool.Allocate();
                sp.Key = FreeMessageConstant.PlayerVisibility;
                sp.Ins.Add(playerEntity.entityKey.Value.EntityId);
                sp.Bs.Add(visibility);
                SendMessageAction.sender.SendMessage(args, sp, 4, string.Empty);
            }
        }
예제 #22
0
        private void OnPointerClickDelegate(PointerEventData eventData)
        {
            SimpleProto data = FreePool.Allocate();

            data.Key = FreeMessageConstant.ClickImage;
            ItemComponent item = eventData.pointerPress.GetComponent <ItemComponent>();

            data.Ss.Add(item.EventKey);
            data.Bs.Add(eventData.button == PointerEventData.InputButton.Right);
            data.Bs.Add(Input.GetKey(KeyCode.LeftControl));

            SingletonManager.Get <FreeUiManager>().Contexts1.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, data);
        }
예제 #23
0
        public void Observe()
        {
            SimpleProto data = FreePool.Allocate();

            data.Key = FreeMessageConstant.ObservePlayer;
            data.Ins.Add(_contexts.player.flagSelfEntity.entityKey.Value.EntityId);
            SingletonManager.Get <FreeUiManager>().Contexts1.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, data);

            data     = FreePool.Allocate();
            data.Key = FreeUIEvent.EVENT_CLICK;
            data.Ss.Add("ObservePlayer");
            SingletonManager.Get <FreeUiManager>().Contexts1.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, data);
        }
예제 #24
0
        public static void PressKeys(PlayerEntity player, int key, int time)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add((int)PlayerActEnum.CmdType.PressKey);
            proto.Ks.Add(player.entityKey.Value.EntityId);

            proto.Ins.Add(time);
            proto.Ins.Add(key);

            FreeMessageSender.SendMessage(player, proto);
        }
예제 #25
0
        public static CompositeGameModule CreateRobotCompositeGameModule(Contexts contexts)
        {
            var motors =
                MotorsFactory.CraeteMotors(contexts, SingletonManager.Get <CameraConfigManager>().Config);
            var sessionObjects = contexts.session.commonSession;

            var gameModule = new CompositeGameModule();

            IHitBoxEntityManager      hitBoxEntityManager = new HitBoxEntityManager(contexts, false);
            ICompensationWorldFactory factory             =
                new ClientCompensationWorldFactory(contexts.session.commonSession.GameContexts,
                                                   hitBoxEntityManager);
            GameModule cmdModule = new UserCmdGameModule(contexts, factory,
                                                         new BulletHitHandler(contexts, sessionObjects.EntityIdGenerator, null), new MeleeHitHandler(null),
                                                         new ThrowingHitHandler(null), contexts.session.commonSession, motors);

            //     cmdModule.AddSystem(new PlayerAddMarkSystem(contexts));

            gameModule.AddModule(cmdModule);
            //      gameModule.AddModule(new BulletModule(contexts));
            //      gameModule.AddModule(new ThrowingModule(contexts));
            //      gameModule.AddModule(new ClientEffectModule(contexts));
            //  gameModule.AddModule(new ClientVehicleModule(contexts));
            // gameModule.AddModule(new ClientPlayerModule(contexts));
            if (SharedConfig.IsRobot)
            {
                gameModule.AddModule(new ClientRobotModule(contexts));
            }

            //     gameModule.AddModule(new ClientSceneObjectModule(contexts, sessionObjects));
            //     gameModule.AddModule(new ClientSoundModule(contexts));
            gameModule.AddModule(new ClientGamePlayModule(contexts));
            gameModule.AddModule(new ClientFreeMoveModule(contexts));


            gameModule.AddModule(new ConfigurationRefreshModule(contexts));

            SimpleProto loginSucess = FreePool.Allocate();

            loginSucess.Key = FreeMessageConstant.ClientLoginSucess;
            if (contexts.session.clientSessionObjects.NetworkChannel != null)
            {
                contexts.session.clientSessionObjects.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent,
                                                                                  loginSucess);
            }

            SingletonManager.Get <FreeUiManager>().Contexts1 = contexts;
            SimpleMessageManager.Instance.Init(contexts.session.entityFactoryObject.SoundEntityFactory);

            return(gameModule);
        }
예제 #26
0
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity player = GetPlayerEntity(args);

            if (player != null && player.gamePlay.CameraEntityId != 0)
            {
                player.gamePlay.CameraEntityId = 0;

                SimpleProto sp = FreePool.Allocate();
                sp.Key = FreeMessageConstant.PlayerObserveTrigger;
                sp.Bs.Add(false);
                FreeMessageSender.SendMessage(player, sp);
            }
        }
예제 #27
0
        private void HandleAuto(string from, string to, ServerRoom room, FreeData fd)
        {
            SimpleItemInfo info = PickupItemUtil.GetGroundItemInfo(room, fd, from);

            if (PickupItemUtil.AddItemToPlayer(room, fd.Player, info.entityId, info.cat, info.id, info.count, to))
            {
                SimpleProto sp = FreePool.Allocate();
                sp.Key = FreeMessageConstant.PlaySound;
                sp.Ks.Add(2);
                sp.Ins.Add(5018);
                sp.Bs.Add(false);
                FreeMessageSender.SendMessage(fd.Player, sp);
            }
        }
예제 #28
0
        public static void WalkTo(PlayerEntity player, Vector3 v)
        {
            SimpleProto proto = FreePool.Allocate();

            proto.Key = FreeMessageConstant.PlayerCmd;
            proto.Ks.Add((int)PlayerActEnum.CmdType.Walk);
            proto.Ks.Add(player.entityKey.Value.EntityId);

            proto.Fs.Add(v.x);
            proto.Fs.Add(v.y);
            proto.Fs.Add(v.z);

            FreeMessageSender.SendMessage(player, proto);
        }
예제 #29
0
        public override void DoAction(IEventArgs args)
        {
            PlayerEntity    playerEntity = GetPlayerEntity(args);
            int             index        = FreeUtil.ReplaceInt(weaponKey, args);
            EWeaponSlotType st           = FreeWeaponUtil.GetSlotType(index);

            playerEntity.WeaponController().PureSwitchIn(st);

            SimpleProto message = FreePool.Allocate();

            message.Key = FreeMessageConstant.ChangeWeapon;
            message.Ins.Add(index);
            FreeMessageSender.SendMessage(playerEntity, message);
        }
예제 #30
0
        public override void DoAction(IEventArgs args)
        {
            if (string.IsNullOrEmpty(player))
            {
                player = "current";
            }

            FreeRuleEventArgs fr = (FreeRuleEventArgs)args;

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

            IParable item = args.GetUnit("item");

            if (playerEntity != null && item != null)
            {
                EWeaponSlotType type = FreeWeaponUtil.GetSlotType(FreeUtil.ReplaceInt(weaponKey, args));

                SimpleProto message = FreePool.Allocate();
                message.Key = FreeMessageConstant.ChangeAvatar;

                int itemId = FreeUtil.ReplaceInt("{item.itemId}", args);

                if (!delete)
                {
                    playerEntity.WeaponController().SetWeaponPart(type, itemId);

                    message.Ins.Add((int)type);
                    message.Ins.Add(itemId);
                    message.Ks.Add(3);

                    FreeMessageSender.SendMessage(playerEntity, message);
                    //playerEntity.network.NetworkChannel.SendReliable((int)EServer2ClientMessage.FreeData, message);
                }
                else
                {
                    var part = SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(SingletonManager.Get <WeaponPartSurvivalConfigManager>().GetDefaultPartBySetId(itemId));

                    playerEntity.WeaponController().DeleteWeaponPart(type, part);

                    message.Ins.Add((int)type);
                    message.Ins.Add((int)part);
                    message.Ks.Add(4);

                    FreeMessageSender.SendMessage(playerEntity, message);
                    //playerEntity.network.NetworkChannel.SendReliable((int)EServer2ClientMessage.FreeData, message);
                }
            }
        }