示例#1
0
        public static PlayerEntity CreateNewPlayerEntity(
            PlayerContext playerContext,
            Vector3 position,
            ICreatePlayerInfo playerInfo,
            bool prediction,
            bool autoMove)
        {
            var playerEntity = playerContext.CreateEntity();

            playerEntity.AddPlayerInfo(playerInfo.Token, playerInfo.EntityId, playerInfo.PlayerId,
                                       playerInfo.PlayerName, playerInfo.RoleModelId,
                                       playerInfo.TeamId, playerInfo.Num, playerInfo.Level, playerInfo.BackId, playerInfo.TitleId,
                                       playerInfo.BadgeId, playerInfo.AvatarIds, playerInfo.WeaponAvatarIds, playerInfo.Camp,
                                       playerInfo.SprayLacquers, 0, position);
            playerEntity.AddPlayerToken(playerInfo.Token);
            playerEntity.playerInfo.WeaponBags = playerInfo.WeaponBags;
            playerEntity.AddUserCmd();
            playerEntity.AddUserCmdSeq(0);
            playerEntity.AddLatestAdjustCmd(-1, -1);
            playerEntity.AddUserCmdOwner(new UserCmdOwnerAdapter(playerEntity));
            playerEntity.AddEntityKey(new EntityKey(playerInfo.EntityId, (int)EEntityType.Player));
            playerEntity.AddPosition();
            playerEntity.position.Value = position;

            playerEntity.AddVehicleCmdSeq(0);
            playerEntity.isFlagSyncSelf = true;

            //On server-side, do not sync player entity to other players until the player login server successfully
            if (!SharedConfig.IsServer)
            {
                playerEntity.isFlagCompensation = true;
                playerEntity.isFlagSyncNonSelf  = true;
            }

            playerEntity.isFlagAutoMove = autoMove;
            playerEntity.isFlagSelf     = prediction;
            playerEntity.AddOrientation(0, 0, 0, 0, 0);
            playerEntity.AddPlayerRotateLimit(false);
            playerEntity.AddPlayerMove(Vector3.zero, 0, 0, true, false, 0);
            playerEntity.AddPlayerSkyMove(false, -1);
            playerEntity.AddPlayerSkyMoveInterVar();
            playerEntity.AddTime(0);
            playerEntity.AddGamePlay(100, 100, -1, -1);
            playerEntity.AddChangeRole(false);

            //            playerEntity.AddWeaponState();

            AddCameraStateNew(playerEntity);

            playerEntity.AddState();

            playerEntity.AddFirePosition();
            playerEntity.AddStateBefore();
            playerEntity.AddStateInterVar(new StateInterCommands(), new StateInterCommands(),
                                          new UnityAnimationEventCommands(), new UnityAnimationEventCommands());
            playerEntity.AddStateInterVarBefore();
            playerEntity.AddMoveUpdate();
            playerEntity.AddSkyMoveUpdate();
            playerEntity.AddPlayerMoveByAnimUpdate();

            playerEntity.AddFirstPersonAppearance(playerEntity.entityKey.Value.EntityId);
            playerEntity.AddFirstPersonAppearanceUpdate();
            playerEntity.AddThirdPersonAppearance();
            //playerEntity.AddNetworkWeaponAnimation(string.Empty, 0, string.Empty, 0);

            playerEntity.AddLatestAppearance();
            playerEntity.latestAppearance.Init();
            playerEntity.AddPredictedAppearance();
            playerEntity.AddClientAppearance();

            playerEntity.AddOxygenEnergy(0);

            playerEntity.AddSound();
            playerEntity.AddUpdateMessagePool();
            playerEntity.AddRemoteEvents(new PlayerEvents());
            playerEntity.AddUploadEvents(new PlayerEvents(), new PlayerEvents());

            playerEntity.AddStatisticsData(false, new BattleData(), new StatisticsData());
            playerEntity.AddPlayerMask((byte)(EPlayerMask.TeamA | EPlayerMask.TeamB),
                                       (byte)(EPlayerMask.TeamA | EPlayerMask.TeamB));
            playerEntity.AddPlayerClientUpdate();

            playerEntity.AttachPlayerAux();
#if UNITY_EDITOR
            //if (SharedConfig.IsOffline)
            //{
            //    playerEntity.playerWeaponAuxiliary.BagOpenLimitTime = 50000;
            //}
#endif

            playerEntity.AddTriggerEvent();

            playerEntity.AddRaycastTest(5f, new List <GameObject>());

            playerEntity.AddPlayerSpray(0);
            //Logger.Info(playerEntity.Dump());
            return(playerEntity);
        }
        public static void ConvertFrom(this PlayerInfoMessage message, ICreatePlayerInfo info)
        {
            message.Camp        = info.Camp;
            message.Level       = info.Level;
            message.Num         = info.Num;
            message.BackId      = info.BackId;
            message.BadgeId     = info.BadgeId;
            message.EntityId    = info.EntityId;
            message.PlayerId    = info.PlayerId;
            message.PlayerName  = info.PlayerName;
            message.TeamId      = info.TeamId;
            message.TitleId     = info.TitleId;
            message.RoleModelId = info.RoleModelId;
            foreach (var id in info.AvatarIds)
            {
                message.AvatarIds.Add(id);
            }

            foreach (var id in info.WeaponAvatarIds)
            {
                message.WeaponAvatarIds.Add(id);
            }

            foreach (var id in info.SprayLacquers)
            {
                message.SprayLacquers.Add(id);
            }

            foreach (var bag in info.WeaponBags)
            {
                if (null == bag)
                {
                    continue;
                }

                PlayerWeaponBagData bagData = PlayerWeaponBagData.Allocate();
                bagData.BagIndex = bag.BagIndex;
                foreach (var weapon in bag.weaponList)
                {
                    var weaponData = PlayerWeaponData.Allocate();
                    weaponData.Index             = weapon.Index;
                    weaponData.WeaponTplId       = weapon.WeaponTplId;
                    weaponData.WeaponAvatarTplId = weapon.WeaponAvatarTplId;
                    if (weapon.LowerRail > 0)
                    {
                        weaponData.WeaponPartTplId.Add(weapon.LowerRail);
                    }
                    if (weapon.Magazine > 0)
                    {
                        weaponData.WeaponPartTplId.Add(weapon.Magazine);
                    }
                    if (weapon.UpperRail > 0)
                    {
                        weaponData.WeaponPartTplId.Add(weapon.UpperRail);
                    }
                    if (weapon.Muzzle > 0)
                    {
                        weaponData.WeaponPartTplId.Add(weapon.Muzzle);
                    }
                    if (weapon.Stock > 0)
                    {
                        weaponData.WeaponPartTplId.Add(weapon.Stock);
                    }

                    bagData.WeaponList.Add(weaponData);
                }

                message.WeaponBags.Add(bagData);
            }

            message.InitPosition   = Vector3.Allocate();
            message.InitPosition.X = info.InitPosition.x;
            message.InitPosition.Y = info.InitPosition.y;
            message.InitPosition.Z = info.InitPosition.z;
        }
        public static void ConvertFrom(this ICreatePlayerInfo info, PlayerInfoMessage message)
        {
            info.Token       = "local";
            info.Camp        = message.Camp;
            info.Level       = message.Level;
            info.Num         = message.Num;
            info.BackId      = message.BackId;
            info.BadgeId     = message.BadgeId;
            info.EntityId    = message.EntityId;
            info.PlayerId    = message.PlayerId;
            info.PlayerName  = message.PlayerName;
            info.TeamId      = message.TeamId;
            info.TitleId     = message.TitleId;
            info.RoleModelId = message.RoleModelId;
            info.AvatarIds   = new List <int>();
            info.AvatarIds.AddRange(message.AvatarIds);
            info.WeaponAvatarIds = new List <int>();
            info.WeaponAvatarIds.AddRange(message.WeaponAvatarIds);
            info.SprayLacquers = new List <int>();
            info.SprayLacquers.AddRange(message.SprayLacquers);
            info.WeaponBags = new Core.Room.PlayerWeaponBagData[message.WeaponBags.Count];
            for (var i = message.WeaponBags.Count - 1; i >= 0; i--)
            {
                info.WeaponBags[i]            = new Core.Room.PlayerWeaponBagData();
                info.WeaponBags[i].BagIndex   = message.WeaponBags[i].BagIndex;
                info.WeaponBags[i].weaponList = new List <Core.Room.PlayerWeaponData>();
                Core.Room.PlayerWeaponData weaponData;
                foreach (var playerWeaponData in message.WeaponBags[i].WeaponList)
                {
                    //info.WeaponBags[i].weaponList.Add(
                    weaponData = new Core.Room.PlayerWeaponData
                    {
                        Index             = playerWeaponData.Index,
                        WeaponTplId       = playerWeaponData.WeaponTplId,
                        WeaponAvatarTplId = playerWeaponData.WeaponAvatarTplId
                    };
                    foreach (var part in playerWeaponData.WeaponPartTplId)
                    {
                        var type = SingletonManager.Get <WeaponPartsConfigManager>().GetPartType(part);
                        switch (type)
                        {
                        case EWeaponPartType.LowerRail:
                            weaponData.LowerRail = part;
                            break;

                        case EWeaponPartType.Magazine:
                            weaponData.Magazine = part;
                            break;

                        case EWeaponPartType.Muzzle:
                            weaponData.Muzzle = part;
                            break;

                        case EWeaponPartType.SideRail:
                            break;

                        case EWeaponPartType.Stock:
                            weaponData.Stock = part;
                            break;

                        case EWeaponPartType.UpperRail:
                            weaponData.UpperRail = part;
                            break;
                        }
                    }

                    info.WeaponBags[i].weaponList.Add(weaponData);
                }
            }

            info.InitPosition =
                new UnityEngine.Vector3(message.InitPosition.X, message.InitPosition.Y,
                                        message.InitPosition.Z);
        }
        public static PlayerEntity CreateNewPlayerEntity(
            PlayerContext playerContext,
            IWeaponSlotController weaponSlotController,
            Vector3 position,
            ICreatePlayerInfo playerInfo,
            bool prediction,
            bool autoMove)
        {
            PlayerEntity playerEntity = playerContext.CreateEntity();
            var          sex          = SingletonManager.Get <RoleConfigManager>().GetRoleItemById(playerInfo.RoleModelId).Sex;
            var          modelName    = sex == 1 ? SharedConfig.maleModelName : SharedConfig.femaleModelName;


            playerEntity.AddPlayerInfo(playerInfo.EntityId, playerInfo.PlayerId, playerInfo.PlayerName, playerInfo.RoleModelId, modelName,
                                       playerInfo.TeamId, playerInfo.Num, playerInfo.Level, playerInfo.BackId, playerInfo.TitleId, playerInfo.BadgeId, playerInfo.AvatarIds, playerInfo.WeaponAvatarIds, playerInfo.Camp);

            playerEntity.playerInfo.WeaponBags = playerInfo.WeaponBags;
            playerEntity.AddUserCmd();
            playerEntity.AddUserCmdSeq(0);
            playerEntity.AddUserCmdOwner(new UserCmdOwnerAdapter(playerEntity));
            playerEntity.AddEntityKey(new EntityKey(playerInfo.EntityId, (int)EEntityType.Player));
            playerEntity.AddPosition(position);

            playerEntity.AddVehicleCmdSeq(0);
            playerEntity.isFlagCompensation = true;
            playerEntity.isFlagSyncSelf     = true;
            playerEntity.isFlagSyncNonSelf  = true;
            playerEntity.isFlagAutoMove     = autoMove;
            playerEntity.isFlagSelf         = prediction;
            playerEntity.AddOrientation(0, 0, 0, 0, 0);
            playerEntity.AddPlayerRotateLimit(false);
            playerEntity.AddPlayerMove(Vector3.zero, 0, true, false, 0);
            playerEntity.AddPlayerSkyMove(true, -1);
            playerEntity.AddPlayerSkyMoveInterVar();
            playerEntity.AddTime(0);
            playerEntity.AddGamePlay(100, 100);

            playerEntity.AddWeaponState(0, 0);

#if UNITY_EDITOR
            if (SharedConfig.IsOffline)
            {
                playerEntity.weaponState.BagOpenLimitTime = 50000;
            }
#endif

            playerEntity.AddPlayerWeaponState(0, false, 0, 0, 0, 0, false, 0, 0);
            AddCameraStateNew(playerEntity);
            playerEntity.AddState();

            playerEntity.AddFirePosition();
            playerEntity.AddStateBefore();
            playerEntity.AddStateInterVar(new StateInterCommands(), new StateInterCommands(), new StateInterCommands(), new StateInterCommands());
            playerEntity.AddStateInterVarBefore();
            playerEntity.AddMoveUpdate();
            playerEntity.AddSkyMoveUpdate();
            playerEntity.AddPlayerMoveByAnimUpdate();

            playerEntity.AddFirstPersonAppearance(playerEntity.entityKey.Value.EntityId);
            playerEntity.AddThirdPersonAppearance();
            //playerEntity.AddNetworkWeaponAnimation(string.Empty, 0, string.Empty, 0);

            playerEntity.AddLatestAppearance();
            playerEntity.latestAppearance.Init();
            playerEntity.AddPredictedAppearance();

            playerEntity.AddOxygenEnergy(0);

            playerEntity.AddSound();
            playerEntity.AddUpdateMessagePool();
            playerEntity.AddRemoteEvents(new PlayerEvents());

            playerEntity.AddStatisticsData(false, new BattleData(), new StatisticsData());
            weaponSlotController.InitPlayerWeaponBySlotInfo(playerEntity);
            playerEntity.AddPlayerMask((byte)(EPlayerMask.TeamA | EPlayerMask.TeamB), (byte)(EPlayerMask.TeamA | EPlayerMask.TeamB));
            playerEntity.AddOverrideBag(0);
            //Logger.Info(playerEntity.Dump());
            return(playerEntity);
        }