private void OnJoin(JoinPacket packet, NetPeer peer) { Debug.Log("[S] Join packet received: " + packet.UserName); var serverCharacter = new ServerCharacter(packet.UserName, peer, Gameconfig.StartingPoint[peer.Id]); _serverManager.AddCharadcter((byte)peer.Id, serverCharacter); //Send join accept var ja = new JoinAcceptPacket { Id = (byte)peer.Id, UserName = packet.UserName, ServerTick = _serverTick }; peer.Send(WritePacket(ja), SendType.ReliableOrdered); // 들어온 친구한테 기존 정보 다 보내줌 var pj = new CharacterJoinedPacket { UserName = packet.UserName, NewCharacter = true, CharacterPacket = serverCharacter.CharacterPacket, ServerTick = _serverTick }; _netManager.SendToAll(WritePacket(pj), SendType.ReliableOrdered, peer); // 이전 유저들에게 정보 다 보내줌 pj.NewCharacter = false; foreach (var pair in _serverManager.Characters.Where(pair => pair.Key != (byte)peer.Id)) { pj.UserName = pair.Value._data.Name; pj.CharacterPacket = pair.Value.CharacterPacket; peer.Send(WritePacket(pj), SendType.ReliableOrdered); } }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { ChatStatusPacket packetToHandle = (ChatStatusPacket)packet; ServerCharacter serverCharacter = (ServerCharacter)worldState.GetCharacter(netState.WorldId); if (serverCharacter != null) { foreach (int mapCharacterId in worldState.Characters) { ServerCharacter characterToUpdate = (ServerCharacter)worldState.GetCharacter(mapCharacterId); NetState clientSendTo = characterToUpdate.Owner; ChatStatusPacket packetToSend; if (serverCharacter.IsDead && !characterToUpdate.IsDead) { packetToSend = new ChatStatusPacket(serverCharacter.Id, packetToHandle.State); } else { packetToSend = new ChatStatusPacket(serverCharacter.Id, packetToHandle.State); } clientSendTo.Send(packetToSend); } } }
private void __sendDestroyedMessage(ServerCharacter serverCharacter) { var message = new Messages.TurnActionEventMessage(); message.turnActionEvent = TurnActionEvent.Destroyed; message.instanceId = serverCharacter.Id; GameServer.Instance.sendMessage(Messages.Type.TURN_ACTION_EVENT, message); }
//SERVER ONLY public void OnStartServer() { server = gameObject.GetComponent <ServerCharacter>(); //register for call backs to move player on server if (Server.packetHandlers.ContainsKey((int)ClientPackets.CmdMove) == false) { //add the handler Server.packetHandlers.Add((int)ClientPackets.CmdMove, CmdMoveStatic); } }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { AimToPacket packetToHandle = (AimToPacket)packet; ServerCharacter serverCharacter = (ServerCharacter)worldState.GetCharacter(netState.WorldId); if (serverCharacter != null) { serverCharacter.SetAimToPosition(new Point(packetToHandle.X, packetToHandle.Y)); worldState.SendStatChangeToMapCharacters(serverCharacter); } }
private void __sendCharacterStateChangedMessage(ServerCharacter serverCharacter) { var message = new Messages.TurnActionEventMessage(); message.turnActionEvent = TurnActionEvent.CharacterStateChanged; message.instanceId = serverCharacter.Id; message.hp = serverCharacter.HP; message.attack = serverCharacter.AttackChance; GameServer.Instance.sendMessage(Messages.Type.TURN_ACTION_EVENT, message); }
public bool damagedBy(ServerCharacter serverCharacter, int extraAmount = 0) { if (!serverCharacter.attack()) { return(false); } this.HP -= serverCharacter.Power + extraAmount; serverCharacter.HP -= this.Power; return(true); }
private void OnSuccessfulChange(int mapId, int mobileId, int containerID, int itemId, ServerWorldState worldState) { foreach (int characterId in worldState.GetMapCharacters(mapId)) { if (characterId == mobileId) { continue; } ServerCharacter characterToUpdate = ((ServerCharacter)worldState.GetCharacter(characterId)); NetState clientSendTo = characterToUpdate.Owner; clientSendTo.Send(new MoveItemServerPacket(itemId, mobileId, containerID)); } }
IEnumerator ReceiveCharacterState() { while (true) { if (this.client == null) { break; } byte[] bytes = new byte[1024]; this.client.Receive(bytes); ServerCharacter character = new ServerCharacter(bytes); this.playerController.UpdateFromServer(character); yield return new WaitForSeconds(.01f); } }
public void UpdateFromServer(ServerCharacter character) { Vector3 newPosition = new Vector3( character.position.x, this.transform.position.y, character.position.y ); Vector3 direction = newPosition - this.transform.position; if (Vector3.Angle(direction, model.forward) > 20f) { model.LookAt(model.position + direction, Vector3.up); } this.transform.position = newPosition; }
public ServerCharacter spawnCard(ServerCharacter serverCharacter) { this.Field.Add(serverCharacter); var message = new Messages.TurnActionEventMessage(); message.turnActionEvent = TurnActionEvent.Instantiated; message.playerId = this.Id; message.cardId = serverCharacter.card.Id; message.instanceId = serverCharacter.Id; message.hp = serverCharacter.HP; message.power = serverCharacter.Power; message.attack = serverCharacter.AttackChance; GameServer.Instance.sendMessage(Messages.Type.TURN_ACTION_EVENT, message); return(serverCharacter); }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { UseItemPacket incomingPacket = (UseItemPacket)packet; //if (incomingPacket.MobileId != netState.WorldId) //{ // netState.SendError(0, string.Format("Invalid CMD: '{0},{1},{2}'.", incomingPacket.PacketId, incomingPacket.MobileId, incomingPacket.ItemId)); // return; //} ServerCharacter serverCharacter = (ServerCharacter)worldState.GetCharacter(netState.WorldId); Item itemToUse = worldState.GetItem(incomingPacket.ItemId); if (serverCharacter != null && itemToUse != null) { if (itemToUse.IsWorldItem) { if (serverCharacter.PickupItem(itemToUse)) { worldState.SaveItemPosition(itemToUse); this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState); } } else { if (itemToUse.Category == ItemCategory.Consumable) { ConsumableItem consumable = (ConsumableItem)itemToUse; if (consumable.Use(serverCharacter, worldState)) { worldState.SaveItemUse(itemToUse); this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState); } } if (itemToUse.Category == ItemCategory.Armor || itemToUse.Category == ItemCategory.Weapon) { if (serverCharacter.Equip(itemToUse)) { worldState.SaveCharacterItems(serverCharacter); this.OnSuccessfulUse(serverCharacter.CurrentMapId, incomingPacket.MobileId, incomingPacket.ItemId, worldState); } } } } }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { AuthPacket incomingPacket = (AuthPacket)packet; PlayerSessionModel session = worldState.GetPlayerSession(incomingPacket.SessionId); //worldState.AuthenticateClient(netState, incomingPacket.SessionId, incomingPacket.CharacterId); if (session != null) { IPAddress sessionIPAddress = IPAddress.Parse(session.ClientAddress); if (netState.Address == sessionIPAddress || sessionIPAddress.Equals(IPAddress.IPv6Loopback) || sessionIPAddress.Equals(IPAddress.Loopback)) { netState.Id = session.Id; ServerCharacter selectedChar = worldState.LoadCharacter(session.CharacterID); if (selectedChar != null) { selectedChar.Owner = netState; selectedChar.Owner.WorldId = selectedChar.Id; worldState.AddCharacter(selectedChar); netState.WriteConsole("Session confirmed, character: {0} selected.", selectedChar.Id); } else { netState.WriteConsole("AUTHERROR: Invalid characterID: {0}.", session.CharacterID); netState.Dispose(); } } else { netState.WriteConsole("AUTHERROR: Session failed, adress '{0}' did not match session address '{1}'.", netState.Address.ToString(), sessionIPAddress.ToString()); netState.Dispose(); } } else { netState.WriteConsole("AUTHERROR: Invalid sessionID '{0}'.", incomingPacket.SessionId); netState.Dispose(); } }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { MoveItemPacket incomingPacket = (MoveItemPacket)packet; //if (incomingPacket.MobileId != netState.WorldId) //{ // netState.SendError(0, string.Format("Invalid CMD: '{0},{1},{2}'.", incomingPacket.PacketId, incomingPacket.MobileId, incomingPacket.ItemId)); // return; //} ServerCharacter serverCharacter = (ServerCharacter)worldState.GetCharacter(netState.WorldId); Item item = (Item)worldState.GetItem(incomingPacket.ItemID); if (serverCharacter != null && item != null) { if (incomingPacket.MoveToID.HasValue) //item.Data.IsWorldItem && { int containerID = incomingPacket.MoveToID.Value; ContainerItem moveTo = (ContainerItem)worldState.GetItem(containerID); if (moveTo != null) { if (serverCharacter.MoveItem(item, moveTo)) { worldState.SaveItemPosition(item); this.OnSuccessfulChange(serverCharacter.CurrentMapId, serverCharacter.Id, containerID, incomingPacket.ItemID, worldState); } } } else if (incomingPacket.MoveToPosition.HasValue) { Point moveToPostion = incomingPacket.MoveToPosition.Value; if (serverCharacter.MoveItem(item, moveToPostion)) { worldState.SaveItemPosition(item); this.OnSuccessfulChange(serverCharacter.CurrentMapId, serverCharacter.Id, moveToPostion, incomingPacket.ItemID, worldState); } } } }
protected override void OnHandle(IPacket packet, NetState netState, ServerWorldState worldState) { PerformAbilityPacket incomingPacket = (PerformAbilityPacket)packet; ServerCharacter mobileToUpdate = (ServerCharacter)worldState.GetCharacter(netState.WorldId); if (mobileToUpdate != null) { if (worldState.PerformAbility(incomingPacket.AbilityUsed, mobileToUpdate)) { foreach (int characterId in worldState.GetMapCharacters(mobileToUpdate.CurrentMapId)) { if (characterId == mobileToUpdate.Id) { continue; } ServerCharacter characterToUpdate = ((ServerCharacter)worldState.GetCharacter(characterId)); NetState clientSendTo = characterToUpdate.Owner; clientSendTo.Send(incomingPacket); } } } }
public virtual void AttachServerCharacter(ServerCharacter sc) { me = sc; }
private void addServerCharacters() { // TODO: Implement based on scripts!!! // create npc owyn ServerCharacter npcOwyn = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY_NPC); EntityAppearance appearance = new EntityAppearance(PredefinedModelType.HUMAN_MALE); appearance.Boots = PredefinedModelBoots.BOOTS_BROWN; appearance.Hair = PredefinedModelHair.HAIR_BROWN; appearance.Head = PredefinedModelHead.HEAD_1; appearance.Pants = PredefinedModelPants.PANTS_BLUE; appearance.Shirt = PredefinedModelShirt.SHIRT_LIGHTBROWN; appearance.Skin = PredefinedModelSkin.SKIN_PALE; npcOwyn.Name = "Owyn"; npcOwyn.CreateSetInitialAppearance(appearance); EntityLocation location = new EntityLocation(); location.CurrentMap = mapManager.StartPointMap; location.Z = 0; location.X = 122; location.Y = 125; location.Rotation = 270; location.IsSittingDown = false; npcOwyn.CreateSetInitialLocation(location); // add npc to the world addEntityImplementationToWorld(npcOwyn); npcOwyn.LocationChangeMapAtEnterWorld(); npcOwyn.CreateApplyInitialState(); // create npc cerdiss ServerCharacter npcCerdiss = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY_NPC); EntityAppearance appearanceCerdiss = new EntityAppearance(PredefinedModelType.SKELETON); npcCerdiss.Name = "Cerdiss"; npcCerdiss.CreateSetInitialAppearance(appearanceCerdiss); EntityLocation locationCerdiss = new EntityLocation(); locationCerdiss.CurrentMap = mapManager.StartPointMap; locationCerdiss.Z = 0; locationCerdiss.X = 163; locationCerdiss.Y = 29; locationCerdiss.Rotation = 180; locationCerdiss.IsSittingDown = false; locationCerdiss.Dimension = (int)PredefinedDimension.SHADOWS; npcCerdiss.CreateSetInitialLocation(locationCerdiss); npcCerdiss.CreateApplyInitialState(); // add npc to the world addEntityImplementationToWorld(npcCerdiss); npcCerdiss.LocationChangeMapAtEnterWorld(); for (int i = 0; i < 3; i++) { // create rat ServerCharacter rat1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancerat = new EntityAppearance(PredefinedModelType.RAT); rat1.CreateSetInitialAppearance(appearancerat); rat1.Name = "Rat"; EntityLocation locationrat = new EntityLocation(); locationrat.CurrentMap = mapManager.StartPointMap; locationrat.Z = 0; locationrat.X = (short)(107 + i); locationrat.Y = (short)(167 + i); locationrat.Rotation = 180; locationrat.IsSittingDown = false; rat1.CreateSetInitialLocation(locationrat); rat1.CreateSetRespawnTime(30000); rat1.MaxCombatXP = 2000; // easy rat1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpl = new WonderingDumbNonAggresiveAIImplementation(locationrat.X, locationrat.Y, 15, 2000); rat1.AIAttach(aiImpl); // add rat to the world addEntityImplementationToWorld(rat1); rat1.LocationChangeMapAtEnterWorld(); } for (int i = 0; i < 1; i++) { // create rat ServerCharacter rat1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancerat = new EntityAppearance(PredefinedModelType.RAT); rat1.CreateSetInitialAppearance(appearancerat); rat1.Name = "Rat"; EntityLocation locationrat = new EntityLocation(); locationrat.CurrentMap = mapManager.StartPointMap; locationrat.Z = 0; locationrat.X = (short)(91 + i); locationrat.Y = (short)(117 + i); locationrat.Rotation = 180; locationrat.IsSittingDown = false; rat1.CreateSetInitialLocation(locationrat); rat1.CreateSetRespawnTime(30000); rat1.MaxCombatXP = 4000; // medium rat1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpl = new WonderingDumbNonAggresiveAIImplementation(locationrat.X, locationrat.Y, 10, 2000); rat1.AIAttach(aiImpl); // add rat to the world addEntityImplementationToWorld(rat1); rat1.LocationChangeMapAtEnterWorld(); } for (int i = 0; i < 2; i++) { // create rabbit ServerCharacter rabbit1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearanceRabbit = new EntityAppearance(PredefinedModelType.BROWN_RABBIT); rabbit1.CreateSetInitialAppearance(appearanceRabbit); rabbit1.Name = "Rabbit"; EntityLocation locationRabbit = new EntityLocation(); locationRabbit.CurrentMap = mapManager.StartPointMap; locationRabbit.Z = 0; locationRabbit.X = (short)(54 + i); locationRabbit.Y = (short)(138 + i); locationRabbit.Rotation = 180; locationRabbit.IsSittingDown = false; rabbit1.CreateSetInitialLocation(locationRabbit); rabbit1.CreateSetRespawnTime(40000); rabbit1.MaxCombatXP = 4000; // medium rabbit1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpl = new WonderingDumbNonAggresiveAIImplementation(locationRabbit.X, locationRabbit.Y, 30,3000); rabbit1.AIAttach(aiImpl); // add rabbit to the world addEntityImplementationToWorld(rabbit1); rabbit1.LocationChangeMapAtEnterWorld(); } for (int i = 0; i < 2; i++) { // create rabbit ServerCharacter rabbit1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearanceRabbit = new EntityAppearance(PredefinedModelType.BROWN_RABBIT); rabbit1.CreateSetInitialAppearance(appearanceRabbit); rabbit1.Name = "Rabbit"; EntityLocation locationRabbit = new EntityLocation(); locationRabbit.CurrentMap = mapManager.StartPointMap; locationRabbit.Z = 0; locationRabbit.X = (short)(27 + i); locationRabbit.Y = (short)(41 + i); locationRabbit.Rotation = 180; locationRabbit.IsSittingDown = false; rabbit1.CreateSetInitialLocation(locationRabbit); rabbit1.CreateSetRespawnTime(40000); rabbit1.MaxCombatXP = 4000; // medium rabbit1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpl = new WonderingDumbNonAggresiveAIImplementation(locationRabbit.X, locationRabbit.Y, 30, 3000); rabbit1.AIAttach(aiImpl); // add rabbit to the world addEntityImplementationToWorld(rabbit1); rabbit1.LocationChangeMapAtEnterWorld(); } for (int i = 0; i < 2; i++) { // create snake ServerCharacter snake1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancesnake = new EntityAppearance(PredefinedModelType.SNAKE_1); snake1.CreateSetInitialAppearance(appearancesnake); snake1.Name = "Snake"; EntityLocation locationsnake = new EntityLocation(); locationsnake.CurrentMap = mapManager.StartPointMap; locationsnake.Z = 0; locationsnake.X = (short)(149 + i); locationsnake.Y = (short)(131 + i); locationsnake.Rotation = 180; locationsnake.IsSittingDown = false; snake1.CreateSetInitialLocation(locationsnake); snake1.CreateSetRespawnTime(30000); snake1.MaxCombatXP = 6000; // hard snake1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpl = new WonderingDumbNonAggresiveAIImplementation(locationsnake.X, locationsnake.Y, 20, 3000); snake1.AIAttach(aiImpl); // add snake to the world addEntityImplementationToWorld(snake1); snake1.LocationChangeMapAtEnterWorld(); } // create troll ServerCharacter troll1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancetroll = new EntityAppearance(PredefinedModelType.TROLL); troll1.CreateSetInitialAppearance(appearancetroll); troll1.Name = "Troll"; EntityLocation locationtroll = new EntityLocation(); locationtroll.CurrentMap = mapManager.StartPointMap; locationtroll.Z = 0; locationtroll.X = 74; locationtroll.Y = 63; locationtroll.Rotation = 90; locationtroll.IsSittingDown = false; troll1.CreateSetInitialLocation(locationtroll); troll1.CreateSetRespawnTime(60000); troll1.MaxCombatXP = 20000; // Impossible troll1.CreateApplyInitialState(); // add troll to the world addEntityImplementationToWorld(troll1); troll1.LocationChangeMapAtEnterWorld(); // create deer ServerCharacter deer1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancedeer = new EntityAppearance(PredefinedModelType.DEER); deer1.CreateSetInitialAppearance(appearancedeer); deer1.Name = "Deer"; EntityLocation locationdeer = new EntityLocation(); locationdeer.CurrentMap = mapManager.StartPointMap; locationdeer.Z = 0; locationdeer.X = 104; locationdeer.Y = 19; locationdeer.Rotation = 0; locationdeer.IsSittingDown = false; deer1.CreateSetInitialLocation(locationdeer); deer1.CreateSetRespawnTime(60000); deer1.MaxCombatXP = 6000; // hard deer1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImplDeer = new WonderingDumbNonAggresiveAIImplementation(locationdeer.X, locationdeer.Y, 50, 5000); deer1.AIAttach(aiImplDeer); // add deer to the world addEntityImplementationToWorld(deer1); deer1.LocationChangeMapAtEnterWorld(); // create beaver ServerCharacter beaver1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancebeaver = new EntityAppearance(PredefinedModelType.DEER); beaver1.CreateSetInitialAppearance(appearancebeaver); beaver1.Name = "Deer"; EntityLocation locationbeaver = new EntityLocation(); locationbeaver.CurrentMap = mapManager.StartPointMap; locationbeaver.Z = 0; locationbeaver.X = 164; locationbeaver.Y = 42; locationbeaver.Rotation = 0; locationbeaver.IsSittingDown = false; beaver1.CreateSetInitialLocation(locationbeaver); beaver1.CreateSetRespawnTime(60000); beaver1.MaxCombatXP = 4000; // medium beaver1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImplbeaver = new WonderingDumbNonAggresiveAIImplementation(locationbeaver.X, locationbeaver.Y, 50, 5000); beaver1.AIAttach(aiImplbeaver); // add beaver to the world addEntityImplementationToWorld(beaver1); beaver1.LocationChangeMapAtEnterWorld(); // create armedSkell ServerCharacter armedSkell1 = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearancearmedSkell = new EntityAppearance(PredefinedModelType.ARMED_SKELETON); armedSkell1.CreateSetInitialAppearance(appearancearmedSkell); armedSkell1.Name = "Armed Skeleton"; EntityLocation locationarmedSkell = new EntityLocation(); locationarmedSkell.CurrentMap = mapManager.StartPointMap; locationarmedSkell.Z = 0; locationarmedSkell.X = 158; locationarmedSkell.Y = 26; locationarmedSkell.Rotation = 0; locationarmedSkell.IsSittingDown = false; locationarmedSkell.Dimension = (int)PredefinedDimension.SHADOWS; armedSkell1.CreateSetInitialLocation(locationarmedSkell); armedSkell1.CreateSetRespawnTime(60000); armedSkell1.MaxCombatXP = 6000; // hard armedSkell1.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImplarmedSkell = new WonderingDumbNonAggresiveAIImplementation(locationarmedSkell.X, locationarmedSkell.Y, 10, 5000); armedSkell1.AIAttach(aiImplarmedSkell); // add armedSkell to the world addEntityImplementationToWorld(armedSkell1); armedSkell1.LocationChangeMapAtEnterWorld(); // create town person ServerCharacter townperson = new ServerCharacter(PredefinedEntityImplementationKind.ENTITY); EntityAppearance appearance2 = new EntityAppearance(PredefinedModelType.DWARF_MALE); appearance2.Boots = PredefinedModelBoots.BOOTS_BROWN; appearance2.Hair = PredefinedModelHair.HAIR_BLOND; appearance2.Head = PredefinedModelHead.HEAD_3; appearance2.Pants = PredefinedModelPants.PANTS_GREEN; appearance2.Shirt = PredefinedModelShirt.SHIRT_BLUE; appearance2.Skin = PredefinedModelSkin.SKIN_PALE; townperson.Name = "Boric"; townperson.CreateSetInitialAppearance(appearance2); EntityLocation location2 = new EntityLocation(); location2.CurrentMap = mapManager.StartPointMap; location2.Z = 0; location2.X = 100; location2.Y = 143; location2.Rotation = 180; location2.IsSittingDown = false; townperson.CreateSetInitialLocation(location2); townperson.CreateSetRespawnTime(0); townperson.MaxCombatXP = 6000; // hard townperson.CreateApplyInitialState(); // AI WonderingDumbNonAggresiveAIImplementation aiImpltownperson = new WonderingDumbNonAggresiveAIImplementation(location2.X, location2.Y, 60, 10000); townperson.AIAttach(aiImpltownperson); // add npc to the world addEntityImplementationToWorld(townperson); townperson.LocationChangeMapAtEnterWorld(); }
public void removeServerCharacter(ServerCharacter serverCharacter) { this.Field.Remove(serverCharacter); }
public AoeAction(ServerCharacter parent, ref ActionRequestData data) : base(parent, ref data) { }