public void Warp(MapleCharacter chr, bool toTown) { if (chr == Owner || Owner.Party != null && Owner.Party.ContainsMember(new MaplePartyCharacter(chr))) { if (!toTown) { if (!chr.Map.CanExit && chr.GmLevel == 0) { chr.Client.Send(PacketCreator.ServerNotice(PacketCreator.ServerMessageType.PinkText, "您被禁止离开此地图")); chr.Client.Send(PacketCreator.EnableActions()); return; } if (!TargetMap.CanEnter && chr.GmLevel == 0) { chr.Client.Send(PacketCreator.ServerNotice(PacketCreator.ServerMessageType.PinkText, $"您不能进入 {TargetMap.StreetName} : {TargetMap.MapName}")); chr.Client.Send(PacketCreator.EnableActions()); return; } chr.ChangeMap(TargetMap, TargetMapPosition); } else { if (!chr.Map.CanExit && chr.GmLevel == 0) { chr.Client.Send(PacketCreator.ServerNotice(PacketCreator.ServerMessageType.PinkText, "您被禁止离开此地图")); chr.Client.Send(PacketCreator.EnableActions()); return; } if (!Town.CanEnter && chr.GmLevel == 0) { chr.Client.Send(PacketCreator.ServerNotice(PacketCreator.ServerMessageType.PinkText, $"您不能进入 {Town.StreetName} : {Town.MapName}")); chr.Client.Send(PacketCreator.EnableActions()); return; } chr.ChangeMap(Town, TownPortal); } } else { chr.Client.Send(PacketCreator.EnableActions()); } }
public static void HandleReturnScroll(MapleClient c, PacketReader pr) { MapleCharacter chr = c.Account.Character; if (!chr.DisableActions()) { return; } int tickCount = pr.ReadInt(); pr.Skip(2); //Unk int itemId = pr.ReadInt(); if (!chr.Inventory.HasItem(itemId)) { return; } WzConsume item = DataBuffer.GetItemById(itemId) as WzConsume; if (item == null) { return; } if (item.MoveTo > 0) { int toMap = 0; toMap = item.MoveTo == 999999999 ? chr.Map.ReturnMap : item.MoveTo; if (toMap != 0) { MapleMap map = Program.GetChannelServer(c.Channel).GetMap(toMap); if (map == null || map.PortalScrollLimit) { return; } if (chr.Inventory.RemoveItemsById(itemId, 1)) { chr.ChangeMap(toMap); } } } else { string msg = "Unhandled return scroll: " + itemId; ServerConsole.Warning(msg); FileLogging.Log("Unhandled items", msg); chr.EnableActions(); } }
public static void Handle(MapleClient c, PacketReader pr) { int tickCount = pr.ReadInt(); short slot = pr.ReadShort(); int id = pr.ReadInt(); MapleCharacter chr = c.Account.Character; MapleItem item = chr.Inventory.GetItemSlotFromInventory(MapleInventoryType.Use, slot); if (item != null && item.ItemId == id) { WzConsume consume = DataBuffer.GetItemById(id) as WzConsume; if (consume != null) { chr.Inventory.RemoveItemsFromSlot(MapleInventoryType.Use, slot, 1, true); if (!chr.Map.PotionLimit) { if (consume.Hp != 0) { chr.AddHP((int)((chr.Stats.PotionEffectR / 100.0) * consume.Hp)); } if (consume.Mp != 0) { chr.AddMP((int)((chr.Stats.PotionEffectR / 100.0) * consume.Mp)); } if (consume.HpR != 0) { chr.AddHP((int)(chr.Stats.MaxHp * (consume.HpR / 100.0))); } if (consume.MpR != 0) { chr.AddMP((int)(chr.Stats.MaxMp * (consume.MpR / 100.0))); } } if (consume.MoveTo != 0 && !chr.Map.PortalScrollLimit) { chr.ChangeMap(consume.MoveTo); } if (consume.CharismaExp != 0) { chr.AddTraitExp(consume.CharismaExp, MapleCharacterStat.Charisma); } if (consume.CharmExp != 0) { chr.AddTraitExp(consume.CharmExp, MapleCharacterStat.Charm); } if (consume.CraftExp != 0) { chr.AddTraitExp(consume.CraftExp, MapleCharacterStat.Craft); } if (consume.InsightExp != 0) { chr.AddTraitExp(consume.InsightExp, MapleCharacterStat.Insight); } if (consume.SenseExp != 0) { chr.AddTraitExp(consume.SenseExp, MapleCharacterStat.Sense); } if (consume.WillExp != 0) { chr.AddTraitExp(consume.WillExp, MapleCharacterStat.Will); } return; } } chr.EnableActions(); }
public void Warp(MapleCharacter chr) { chr.ChangeMap(ToMap, ToMapPortal.Name, true); }