Пример #1
0
 //进入游戏状态的初始化
 public override void StateBegin()
 {
     inGameSystem = new InGameSystem();
     inGameSystem.Init(inGameSystem.SynopsisSystem);
     //Debug.Log(GamingData.synData.npcState.Count);
     //Debug.Log((NpcState)GamingData.synData.npcState[1]);
     //Debug.Log((NpcState)GamingData.synData.npcState[2]);
     //Debug.Log((TaskState)GamingData.synData.taskState);
 }
Пример #2
0
 /// <summary>
 /// 构造方法
 /// </summary>
 public SynopsisSystem(InGameSystem _inGame) : base(_inGame)
 {
     _inGameSystem = _inGame;
     EventCenter.AddListener(EventDefine.ShowUIC, ShowUI);
     EventCenter.AddListener(EventDefine.ShowTalkTextC, ShowTalk);
     EventCenter.AddListener(EventDefine.ChangeNpcState, SetNpcState);
     EventCenter.AddListener(EventDefine.ShowTaskButtonC, ShowButton);
     EventCenter.AddListener(EventDefine.SetTaskPanelC, ShowTaskPanel);
     EventCenter.AddListener(EventDefine.MiniTaskShowC, ShowMiniTaskPanel);
     EventCenter.AddListener(EventDefine.Test, ShowProgress);
     taskSystem  = new TaskSystem(this);
     npcSystem   = new NpcSystem(this);
     talkSystem  = new TalkSystem(this);
     currentTask = new Task();
     //currentTask.taskState = TaskState.PickUp;
 }
Пример #3
0
 public IMainGameSystem(InGameSystem _inGameSystem)
 {
     inGameSystem = _inGameSystem;
 }
Пример #4
0
 public HeroSystem(InGameSystem _inGameSystem) : base(_inGameSystem)
 {
 }
Пример #5
0
        /// <summary>
        /// On va lire les messages des clients et du masterserver
        /// </summary>
        async void ReceiveIncomingMessage(NetPeer peer)
        {
            var msg = peer.ReadMessage();

            NetOutgoingMessage replyMessage = null;

            if (msg != null)
            {
                Log("t: " + msg.MessageType);
                if (msg.MessageType == NetIncomingMessageType.UnconnectedData)
                {
                    // Self
                    if (msg.ReadString() == "ARMY")
                    {
                        var army = msg.ReadArmyScheme();
                        army.Build();
                        Console.WriteLine("NORMAL::\n");
                        Console.WriteLine(PatapolisArmyScheme.ToString() + "\n");
                        Console.WriteLine("SERIALIZED::\n");
                        Console.WriteLine(army.ToString());
                    }
                }
                if (msg.MessageType == NetIncomingMessageType.ConnectionApproval)
                {
                    msg.SenderConnection.Approve();
                }

                if (msg.MessageType == NetIncomingMessageType.DebugMessage)
                {
                    try
                    {
                        Log(msg.ReadString());
                    }
                    catch { }
                }
                if (msg.MessageType == NetIncomingMessageType.WarningMessage)
                {
                    Log("WA!!! : " + msg.ReadString());
                }
                if (msg.MessageType == NetIncomingMessageType.StatusChanged)
                {
                    Console.WriteLine("New status " + msg.SenderConnection.Status);
                    if (msg.SenderConnection.GameUserExist())
                    {
                        if (msg.SenderConnection.Status == NetConnectionStatus.Disconnected)
                        {
                            CheckUserStatus();
                            usersInRoom.Remove(msg.SenderConnection.GetGameUser().login);
                        }
                    }

                    if (msg.SenderConnection.Peer == UsingPeer &&
                        msg.SenderConnection.Status == NetConnectionStatus.Disconnected)
                    {
                        shutdownSent = true;
                    }
                }

                /*if (msg.MessageType == NetIncomingMessageType.Data)
                 * {
                 *  try
                 *  {
                 *      if (msg.PeekString() == "REPLY")
                 *      {
                 *          msg.ReadString(); //< skip
                 *          var handle = msg.ReadInt64();
                 *          Message.TriggerHandler(handle, msg);
                 *      }
                 *  }
                 *  catch { }
                 * }*/

                if (msg.MessageType == NetIncomingMessageType.Data)
                {
                    var header = msg.PeekString();
                    Log("header:" + header);
                    if (header == "USERCONNECT")
                    {
                        msg.ReadString();
                        msg.SenderConnection.Tag = "USER";
                        string login = msg.ReadString();
                        Log("(Connection) Wanted connection + " + login);
                        if (!string.IsNullOrEmpty(login) && usersInRoom.TryGetValue(login, out var outputUser))
                        {
                            outputUser.AddNetConnection(msg.SenderConnection);
                        }
                        else if (!string.IsNullOrEmpty(login))
                        {
                            waitedUsers[login] = msg.SenderConnection;
                            Log("(Connection) Will wait for " + login);
                        }

                        await Task.Factory.StartNew(() =>
                        {
                            while (waitedUsers.ContainsKey(login))
                            {
                                ;
                            }
                        });

                        foreach (var user in usersInRoom)
                        {
                            if (user.Value == null)
                            {
                                continue;
                            }
                            if (user.Value.ownedPlayers[0].EntitiesInPossession != null)
                            {
                                foreach (var entity in user.Value.ownedPlayers[0].EntitiesInPossession)
                                {
                                    OutGameSystem.SendNewEntityTo(usersInRoom[login], user.Value.login, entity);
                                }
                            }
                        }
                    }

                    PataMessage <object> pataMsg = null;
                    if ((pataMsg = Message.Read <object>(msg)) != null)
                    {
                        Console.WriteLine("pataMsg received!" + pataMsg.contents.ContentType);
                        switch (pataMsg.contents.ContentType)
                        {
                        case Constants.MESSAGETYPE.SYSTEM:
                        {
                            if (msg.PeekString() == Constants.SYSTEM.HANDLE)
                            {
                                msg.ReadString();         //< Skip
                                var handle = msg.ReadInt32();

                                var sendMsg = UsingPeer.CreateMessage().Start(Constants.MESSAGETYPE.SYSTEM);
                                sendMsg.Write(Constants.SYSTEM.HANDLE_SUCCESS);
                                sendMsg.Write(handle);

                                UsingPeer.SendMessage(sendMsg, msg.SenderConnection, NetDeliveryMethod.ReliableOrdered);
                            }
                            if (msg.PeekString() == Constants.SYSTEM.HANDLE_SUCCESS)
                            {
                                msg.ReadString();         //< Skip
                                var handle = msg.ReadInt32();
                                var hash   = (Hashtable)msg.SenderConnection.Peer.Tag;
                                hash["handle"] = handle;
                            }
                            break;
                        }

                        // Si le message est de Type OUTGAME
                        // Donc les connections des joueurs, hors gameplay quoi
                        case Constants.MESSAGETYPE.OUTGAME:
                        {
                            OutGameSystem.Receive(msg, msg.ReadString());
                            break;
                        }

                        case Constants.MESSAGETYPE.INGAME:
                        {
                            InGameSystem.Receive(msg, msg.ReadString());
                            break;
                        }

                        case Constants.MESSAGETYPE.CHAT:
                        {
                            if (msg.ReadString() == Constants.CHAT.GO_SENDMESSAGE)
                            {
                                var messageFP   = msg.ReadString();
                                var messageType = msg.ReadByte();
                                var sendMsg     = UsingPeer.CreateMessage()
                                                  .Start(Constants.MESSAGETYPE.CHAT);
                                sendMsg.Write(Constants.CHAT.EVENT_ON_MESSAGERECEIVED);
                                sendMsg.Write(msg.SenderConnection.GetGameUser()?.login);
                                sendMsg.Write(messageFP);
                                sendMsg.Write(messageType);
                                var objSerialized = msg.SenderConnection.GetGameUser().Serialize();
                                sendMsg.Write(objSerialized.Length);
                                sendMsg.Write(objSerialized);

                                Log("Replying message... to:");

                                var userList = new List <NetConnection>();
                                foreach (var user in usersInRoom)
                                {
                                    if (user.Value.IfInitiliazed() != null)
                                    {
                                        userList.Add(user.Value.GetNetConnection());
                                        Log("<>" + user.Value.login);
                                    }
                                }

                                if (userList.Count > 0)
                                {
                                    UsingPeer.SendMessage(sendMsg, userList,
                                                          NetDeliveryMethod.ReliableOrdered, 0);
                                }
                            }
                            break;
                        }

                        case Constants.SYSTEM.DEBUG:
                        {
                            Console.WriteLine(msg.ReadString());
                            break;
                        }
                        }
                    }
                }
            }
            MasterMessageLoop();
            ClientMessageLoop();
        }