Beispiel #1
0
 /// <summary>
 /// 场景切换检查
 /// </summary>
 /// <param name="player"></param>
 /// <param name="inScene"></param>
 /// <param name="transmitType">0:道具/超时回城, 1:死亡回城 , 2:转送阵, 3: NPC</param>
 /// <returns></returns>
 public override bool TransferCheck(PlayerBusiness player, SceneBusiness inScene, TransmitType transmitType)
 {
     //检查必杀的怪是否完成..
     if (transmitType == TransmitType.Pin)
     {
         IList killed = player.Ectype.Value.GetValue<IList>("Killed");
         string needKill = NpcManager.Instance.MustKill(this.ID, killed);
         if (needKill != null)
         {
             string msg = string.Format(TipManager.GetMessage(ClientReturn.SceneEctype4), needKill);
             player.Call(ClientCommand.IntoSceneR, false, null, msg);
             return false;
         }
     }
     return base.TransferCheck(player, inScene, transmitType);
 }
Beispiel #2
0
        /// <summary>
        /// 回城
        /// </summary>
        /// <param name="player"></param>
        /// <param name="tType">回城方式</param>
        public bool TownGate(PlayerBusiness player, TransmitType tType)
        {
            if (player.Scene != this)
            {
                return false;
            }
            Destination desc = null;
            if (tType == TransmitType.UseProp)
            {
                //不能使用道具回城
                desc = PropDestination;
                if (desc == null)
                {
                    return false;
                }
            }
            else if (tType == TransmitType.Dead)
            {
                desc = DeadDestination;
                if (desc != null)
                {
                    player.SetActionState(ActionState.Standing);
                }
            }
            else if (tType == TransmitType.OverTime)
            {
                string sceneid = player.Ectype.Value.GetStringOrDefault("SceneID");
                if (!string.IsNullOrEmpty(sceneid))
                {
                    int x = player.Ectype.Value.GetIntOrDefault("X");
                    int y = player.Ectype.Value.GetIntOrDefault("Y");
                    desc = new Destination(sceneid, x, y);
                }
                if (desc != null)
                {
                    player.SetActionState(ActionState.Standing);
                }
            }

            if (desc == null)
            {
                return false;
            }

            SceneBusiness inScene;
            ScenesProxy.TryGetScene(desc.SceneID, out inScene);

            //场景转移检查,除了死亡和超时.其它情况进行场景检查
            if (!(tType == TransmitType.Dead || tType == TransmitType.OverTime))
            {
                if ((!TransferCheck(player, inScene, tType)))
                {
                    return false;
                }
            }

            object[] point = new object[] { desc.X, desc.Y };
            if (ExitScene(player))
            {
                //执行进入
                inScene.Execute(new UserNote(player, ClientCommand.IntoSceneSuccess, point));
            }
            if (player.TeamJob == TeamJob.Captain)
            {
                PlayerTeam team = player.Team;
                if (team != null)
                {
                    for (int i = 1; i < team.Members.Length; i++)
                    {
                        PlayerBusiness member = team.Members[i];
                        if (member != null && member.TeamJob == TeamJob.Member)
                        {
                            if (ExitScene(member))
                            {   //执行进入
                                inScene.Execute(new UserNote(member, ClientCommand.IntoSceneSuccess, point));
                            }
                        }
                    }
                }
            }
            return true;
        }
Beispiel #3
0
 /// <summary>
 /// 切换场景
 /// </summary>
 /// <param name="player"></param>
 /// <param name="inScene"></param>
 /// <param name="transmitType"></param>
 /// <returns></returns>
 public virtual bool TransferCheck(PlayerBusiness player, SceneBusiness inScene, TransmitType transmitType)
 {
     if (inScene == null) return false;
     return inScene.IntoCheck(player);
 }
Beispiel #4
0
        /// <summary>
        /// 发送数据包
        /// </summary>
        /// <param name="type"></param>
        /// <param name="data"></param>
        public void sendData(TransmitType type, byte[] data)
        {
            if (data == null || data.Length == 0) return;
            SendTimestamp++;
            UDPFramePacket packet = new UDPFramePacket();
            packet.type = (byte)type;
            packet.Timestamp = SendTimestamp;
            packet.Block = data;
            send(packet.ToBytes());
            return;
            if (data.Length <= mtu)
            {
                packet.PacketCount = 1;
                packet.Block = data;
                send(packet.ToBytes());
                Console.WriteLine(packet.type.ToString() + ":" + packet.ToBytes().Length.ToString());
            }
            else
            {
                int count = data.Length / mtu;
                if (data.Length % mtu != 0)
                    count += 1;
                int offSet = 0;
                byte[] block = new byte[mtu];
                for (int i = 0; i < count; i++)
                {
                    packet.PacketCount = count;
                    packet.PacketIndex = i;
                    if (offSet + mtu > data.Length)
                        block = new byte[data.Length - offSet];//要发送的缓冲区

                    Buffer.BlockCopy(data, offSet, block, 0, block.Length);
                    packet.Block = block;
                    send(packet.ToBytes());
                    offSet += mtu;
                    Console.WriteLine(  packet.type.ToString() +":"+ packet.ToBytes().Length.ToString());
                }
            }
        }