Esempio n. 1
0
        [Rpc(15, false)]//Local Chat
        private void RPC_015(NetMessage arg1, NetMessageInfo arg2)
        {
            var      time    = DateTime.Now;
            var      icon    = ChatIcon.None;
            ChatType type    = (ChatType)arg1.ReadByte();
            string   message = arg1.ReadString();
            var      player  = _server[arg2.Sender.Id];

            if (player.User.Access == AccessLevel.Admin)
            {
                icon = ChatIcon.Admin;
            }
            if (player.User.Access == AccessLevel.Moderator)
            {
                icon = ChatIcon.Mod;
            }
            if (message == Constants.StuckCommand)
            {
                _server.Objects.Teleport(player.Object, player.User.Spawn);
            }
            else if (message.Sum(x => char.IsUpper(x) ? 1 : 0) > message.Length / 4 + 4 || time < player.LastMsg)
            {
                player.Player.SystemMsg(Constants.ChatWarning);
            }
            else
            {
                player.LastMsg = time.AddMilliseconds(SpamDelay);
                ServerLogger.LogLocalChat(player, message);
                _server.Room.PlayerRpc(15, ChatType.Local, player.Char.Pony.Name, player.User.Name, message, player.User.Char, (int)arg2.Sender.Id, icon, DateTime.Now);
            }
        }
        private async void RPC_001(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = m_server[arg2.Sender.Id]; var pony = new PonyData();
            var index = arg1.ReadInt32();

            pony.OnDeserialize(arg1);
            if (CharsMgr.CheckName(pony.Name))
            {
                if (await player.UpdateCharacter(index, pony))
                {
                    var character = index == -1 ? player.Data.Last() : player.Data[index];
                    player.User.Char = character.Id;
                    if (character.Map == 0 || !DataMgr.Select(character.Map, out DB_Map map))
                    {
                        arg2.Sender.ChangeRoom(StartMaps[(byte)pony.Race]);
                    }
                    else
                    {
                        arg2.Sender.ChangeRoom(map.Name);
                    }
                    arg2.Sender.SynchNetData();
                }
                else
                {
                    arg2.Sender.Error("Error while saving pony, most likely character isn't unique.");
                }
            }
            else
            {
                arg2.Sender.Error($"Name \"{pony.Name}\" disapproved!");
            }
        }
Esempio n. 3
0
        private void Request(NetMessageInfo info)
        {
            MapPlayer sender = _player.Server[info.Sender.Id];

            if (_trading)
            {
                sender.View?.FailedTrade();
                return;
            }
            else if (sender.Trade._requested && sender.Trade._target == _player)
            {
                _target = sender;
                m_state = new TradingState()
                {
                    InProgress = true,
                    ONE        = _player,
                    TWO        = sender,
                    ONE_Offer  = m_offer,
                    TWO_Offer  = sender.Trade.m_offer
                };
                sender.Trade.m_state = m_state;
                sender.Trade._regected.Destroy();
                sender.Trade._trading = _trading = true;
                UpdateState();
                return;
            }
            else if (!_requested)
            {
                _target    = sender;
                _requested = true;
                _view.RequestTrade(info.Sender.Id);
                _regected = new TradeRejector(_player, _target);
            }
        }
Esempio n. 4
0
    private void HandleMessage(HandleType type, MessageID msgID, params object[] msgParams)
    {
        NetMessageBase msgBase = Factory_CreateMessage.Instance.CreateNetMessage(msgID);

        if (msgBase == null)
        {
            Console.WriteLine("MessageID Error: " + msgID + "\t");
            return;
        }
        msgBase.SetMessageParams(msgParams);

        HandleMessage(type, msgBase);

        if (msgBase.isFree)
        {
            return;
        }

        NetMessageInfo info = new NetMessageInfo();

        info.handleType = type;
        info.msgBase    = msgBase;

        AddMessage(msgID, info);
    }
Esempio n. 5
0
 private void RPC_50_52(NetMessage arg1, NetMessageInfo arg2)
 {
     if (arg2.Sender.Id != _onwer.Player.Id)
     {
         return;
     }
     if (_view != null && Vector3.DistanceSquared(_onwer.Object.Position, _position) <= Constants.MaxInteractionDistanceSquared)
     {
         foreach (var item in _loot.Loot)
         {
             if (item.Item4 == -1f || Constants.RND.NextDouble() <= item.Item4)
             {
                 if (item.Item1 == -1)
                 {
                     _onwer.Items.AddBits(Constants.RND.Next(item.Item2, item.Item3));
                 }
                 else
                 {
                     _onwer.Items.AddItems(item.Item1, Constants.RND.Next(item.Item2, item.Item3));
                 }
             }
         }
         Destroy();
     }
 }
Esempio n. 6
0
        private void RPC_001(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if (player == null)
            {
                ServerLogger.LogWarn($"Switch from map {_data.Data01} on portal {_data.Guid} failed: player {arg2.Sender.Id} not found!");
                return;
            }
            if (Vector3.DistanceSquared(_data.Position, player.Object.Position) <= Constants.MaxInteractionDistanceSquared)
            {
                if (player.PrepareForMapSwitch())
                {
                    player.User.Spawn = (ushort)_data.Data02;
                    arg2.Sender.SynchNetData();
                    arg2.Sender.ChangeRoom(m_map.Name);
                    player = null;
                }
                else
                {
                    player.CreateSaveTimer();
                    ServerLogger.LogWarn($"Switch from map {_data.Data01} on portal {_data.Guid} failed: couldn't save player {arg2.Sender.Id} character!");
                    player.SystemMsg("Map switch failed: couldn't save character to database!");
                }
            }
            else
            {
                player.SystemMsg("You far away from the portal.");
            }
        }
Esempio n. 7
0
        private void RPC_06_23(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            _movement.Unlock();
            player.Shop = null;
            _view.Rpc(6, 23, arg2.Sender);
        }
Esempio n. 8
0
        [Rpc(12, false)]//Dialog Choice
        private void RPC_012(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = _server[arg2.Sender.Id];

            if (player.Dialog != null)
            {
                player.Dialog.Dialog.OnDialogChoice(player, arg1.ReadInt32());
            }
        }
Esempio n. 9
0
        void ReceiveMessage(NetIncomingMessage msg, NetMessageInfo info)
        {
            //if you want to prevent the message from the player from continuing to other players (if it was sent with rpcmode.all or others or owner,
            //then you set info.continueForwarding to false
            //alternatively, the second parameter of the rpc attribute can set what the default value of info.continueForwarding is (in this case, false),
            //and then change it to true if you figure out you do need to let the message continue on.

            Debug.Log("Player {0} sent a message on this component: {1}", info.player, msg.ReadString());
        }
Esempio n. 10
0
        private void RPC_10_49(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if (player.Dialog == null)
            {
                player.Dialog = this;
                player.DialogBegin();
            }
        }
Esempio n. 11
0
        [Rpc(13, false)]//Dialog End
        private void RPC_013(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = _server[arg2.Sender.Id];

            if (player.Dialog != null)
            {
                player.Dialog.Dialog.OnDialogEnd(player);
                player.Dialog = null;
            }
        }
Esempio n. 12
0
 private void RPC_07_04(NetMessage arg1, NetMessageInfo arg2)
 {
     if ((_npc.Flags & NPCFlags.Wears) > 0)
     {
         _view.Rpc(7, 4, arg2.Sender, wears_ser);
     }
     else
     {
         _view.Rpc(7, 4, arg2.Sender, Int64Serializer.Zero);
     }
 }
Esempio n. 13
0
 [Rpc(61, false)]//Perform Skill
 private void RPC_061(NetMessage arg1, NetMessageInfo arg2)
 {
     _entry.OnDeserialize(arg1);
     if (!_skills.ContainsKey(_entry.SpellID) || _cooldown.ContainsKey(_entry.SpellID))
     {
         return;
     }
     if (SpellsMgr.CanCast(_wPlayer, _entry))
     {
         SpellsMgr.PerformSkill(_wPlayer, _entry);
     }
 }
Esempio n. 14
0
        private void RPC_020(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = _server[arg2.Sender.Id];

            switch (arg1.ReadByte())
            {
            default:
                arg1.Position -= 8;
                ServerLogger.LogServer(_server, $"Unhandled sub 20 rpc {arg1.PeekByte()}");
                break;
            }
        }
Esempio n. 15
0
        private void RPC_06_10(NetMessage arg1, NetMessageInfo arg2)
        {
            int       price, itemID = arg1.ReadInt32(), amount = arg1.ReadInt32();
            MapPlayer player = _server[arg2.Sender.Id];

            if (player.Shop == this && _npc.Items.Contains(itemID) && DataMgr.Select(itemID, out DB_Item item) && player.Char.Data.Bits >= (price = (item.Price * amount)))
            {
                amount -= player.Items.AddItems(itemID, amount);
                player.Char.Data.Bits -= price;
                player.View.SetBits(player.Char.Data.Bits);
            }
        }
Esempio n. 16
0
        private void RPC_06_22(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if ((_npc.Flags & NPCFlags.Trader) > 0 && Vector3.DistanceSquared(player.Object.Position, _movement.Position) <= Constants.MaxInteractionDistanceSquared)
            {
                _movement.Lock(false);
                _movement.LookAt(player.Object);
                player.Shop = this;
                _view.Rpc(6, 22, arg2.Sender, shop_ser);
            }
        }
Esempio n. 17
0
        private void RPC_06_11(NetMessage arg1, NetMessageInfo arg2)
        {
            int       itemID = arg1.ReadInt32();
            int       amount = arg1.ReadInt32();
            byte      islot  = arg1.ReadByte();
            MapPlayer player = _server[arg2.Sender.Id];

            if (player.Shop == this && DataMgr.Select(itemID, out DB_Item item) && (item.Flags & ItemFlags.Salable) > 0 && player.Items.HasInSlot(islot, itemID, amount))
            {
                player.Items.RemoveFromSlot(islot, amount);
                player.Char.Data.Bits += (item.Price * amount);
                player.View.SetBits(player.Char.Data.Bits);
            }
        }
        private async void RPC_002(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = m_server[arg2.Sender.Id];
            var index  = arg1.ReadInt32();

            if (await player.DeleteCharacter(index))
            {
                player.SendPonies();
            }
            else
            {
                arg2.Sender.Error("Error while deleting pony");
            }
        }
Esempio n. 19
0
 private async void RPC_001(NetMessage message, NetMessageInfo info)
 {
     if (m_manager.TryGet(info.Sender, out PlayerObject @object))
     {
         if (@object.CanInteractWith(this))
         {
             if (await @object.PrepareForMapSwitch())
             {
                 @object.User.Spawn = (ushort)m_data.Data02;
                 info.Sender.SynchNetData();
                 info.Sender.ChangeRoom(m_map.Name);
             }
         }
     }
 }
Esempio n. 20
0
        [Rpc(61, false)]//PerformSkill
        private void RPC_061(NetMessage message, NetMessageInfo info)
        {
            m_target.OnDeserialize(message);
            var castResult = SpellCastResult.Fail;

            if (CanCast(m_target.SpellID, m_target.Upgrade))
            {
                castResult = m_cast.Initialize(m_target.SpellID, m_target.Upgrade, m_target);
            }
            if (castResult != SpellCastResult.OK)
            {
                m_cast_args.Result = castResult;
                m_owner.Notify(SpellCastArgs.FailEvent, m_cast_args);
            }
        }
Esempio n. 21
0
        [Rpc(11, false)]//Dialog Next
        private void RPC_011(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = _server[arg2.Sender.Id];

            if (player.Dialog != null)
            {
                if (player.Choices.Count > 0)
                {
                    player.Dialog.Dialog.OnDialogChoice(player, 0);
                }
                else
                {
                    player.Dialog.Dialog.OnDialogNext(player);
                }
            }
        }
Esempio n. 22
0
    private void AddMessage(MessageID msgID, NetMessageInfo info)
    {
        if (dic_HandleNetMessages.ContainsKey(msgID))
        {
            List <NetMessageInfo> netMessageList = dic_HandleNetMessages[msgID];

            netMessageList.Add(info);
        }
        else
        {
            List <NetMessageInfo> netMessageList = new List <NetMessageInfo>();

            netMessageList.Add(info);

            dic_HandleNetMessages.Add(msgID, netMessageList);
        }
    }
Esempio n. 23
0
        private void RPC_50_52(NetMessage arg1, NetMessageInfo arg2)
        {
            MapPlayer player = _server[arg2.Sender.Id];

            if (_view != null && Vector3.DistanceSquared(player.Object.Position, _data.Position) <= Constants.MaxInteractionDistanceSquared)
            {
                if ((_data.Flags & 1) == 1)
                {
                    Despawn();
                    _respawn = new AutoRespawn(this, _data.Time);
                }
                else
                {
                    Destroy();
                }
                player.Items.AddItems(_data.ObjectID, _data.Data01);
            }
        }
Esempio n. 24
0
        private void RPC_049(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = _server[arg2.Sender.Id];

            switch (arg1.ReadByte())
            {
            case 206:    //tele
                if (player.User.Access < AccessLevel.TeamMember)
                {
                    player.SystemMsg($"You haven't permission to teleport");
                }
                else
                {
                    string tPlayer = arg1.ReadString();
                    string tLevel  = arg1.ReadString();
                    if (player.Char.Pony.Name == tPlayer)
                    {
                        player.Player.ChangeRoom(tLevel);
                    }
                    else
                    {
                        player.SystemMsg($"teleport player not implemented");
                    }
                }
                break;

            case 230:    //add xp
                if (player.User.Access < AccessLevel.TeamMember)
                {
                    player.SystemMsg($"You haven't permission to adding xp");
                }
                else
                {
                    player.Stats.AddExpAll(arg1.ReadUInt32());
                }
                break;

            default:
                arg1.Position -= 8;
                ServerLogger.LogServer(_server, $"Unhandled sub 49 rpc {arg1.PeekByte()}");
                break;
            }
        }
Esempio n. 25
0
        private void RPC_001(NetMessage arg1, NetMessageInfo arg2)
        {
            var player = m_server[arg2.Sender.Id]; var pony = new PonyData();
            var index = arg1.ReadInt32(); pony.OnDeserialize(arg1); DB_Map map;

            if (player.UpdateCharacter(index, pony))
            {
                var character = index == -1 ? player.Data.Last() : player.Data[index];
                player.User.Char = character.ID;
                if (character.Map == 0 || !DataMgr.Select(character.Map, out map))
                {
                    arg2.Sender.ChangeRoom(StartMaps[pony.Race]);
                }
                else
                {
                    arg2.Sender.ChangeRoom(map.Name);
                }
                arg2.Sender.SynchNetData();
            }
            else
            {
                arg2.Sender.Error("Error while saving pony, most likely character isn't unique.");
            }
        }
Esempio n. 26
0
 private void RPC_04_53(NetMessage arg1, NetMessageInfo arg2)
 {
     _view.Rpc <Int16Serializer>(4, 53, arg2.Sender, _owner.Stats.Level);
 }
 private void RPC_02_201(NetMessage arg1, NetMessageInfo arg2)
 {
     _position = arg1.ReadVector3();
     _creature.View.Teleport(_position);
 }
 private void RPC_02_202(NetMessage arg1, NetMessageInfo arg2)
 {
     _lastAnimation = arg1.ReadInt32();
     _flying        = (_player.Char.Pony.Race == CharacterType.Pegasus && _lastAnimation == 1);
     _creature.View.Rpc <Int32Serializer>(2, 202, RpcMode.OthersOrdered, _lastAnimation);
 }
 [Rpc(9, false)]//UnReady
 private void RPC_009(NetMessage message, NetMessageInfo info)
 {
 }
Esempio n. 30
0
 [Rpc(4, false)]//WornItems
 private void RPC_004(NetMessage message, NetMessageInfo info)
 {
     m_view.WornItems(info.Sender, m_data);
 }