[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!"); } }
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); } }
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); }
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(); } }
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."); } }
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); }
[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()); } }
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()); }
private void RPC_10_49(NetMessage arg1, NetMessageInfo arg2) { MapPlayer player = _server[arg2.Sender.Id]; if (player.Dialog == null) { player.Dialog = this; player.DialogBegin(); } }
[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; } }
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); } }
[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); } }
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; } }
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); } }
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); } }
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"); } }
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); } } } }
[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); } }
[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); } } }
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); } }
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); } }
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; } }
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."); } }
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) { }
[Rpc(4, false)]//WornItems private void RPC_004(NetMessage message, NetMessageInfo info) { m_view.WornItems(info.Sender, m_data); }