diff --git a/src/Backend.cs b/src/Backend.cs index c6847be..10613a2 100644 --- a/src/Backend.cs +++ b/src/Backend.cs @@ -33,8 +33,8 @@ namespace WorldOfPeacecraft Parse = new Parser (this, receiverBuffer); Rec = new Receiver (Client, receiverBuffer); Send = new Sender (Client, SenderBuffer); - SenderBuffer.AddLine ("get:me"); SenderBuffer.AddLine ("get:ents"); + SenderBuffer.AddLine ("get:me"); SenderBuffer.AddLine ("get:map"); } @@ -76,7 +76,11 @@ namespace WorldOfPeacecraft public Player getPlayer (int playerId) { - return Players[playerId]; + try { + return Players [playerId]; + } catch (KeyNotFoundException e) { + return null; + } } public Dictionary getPlayerList() @@ -167,6 +171,7 @@ namespace WorldOfPeacecraft Pathwalker.Stop(); LinkedList path = Pathfinder.FindPath (Players [SelfId].Coord, new Coordinate (x, y), Map); Pathwalker.SetCoords (path); + MoveStep(); } public void MoveStep () diff --git a/src/Parser.cs b/src/Parser.cs index 1af8761..cda8da3 100644 --- a/src/Parser.cs +++ b/src/Parser.cs @@ -300,19 +300,20 @@ namespace WorldOfPeacecraft private void ProcessPlayer (Block playerBlock) { - int id = MapPlayer(playerBlock).GetId(); + Player newPlayer = MapPlayer(playerBlock); + int id = newPlayer.GetId(); if (Backend.getPlayer(id) == null) { lock (Backend) { - Backend.SetPlayer(MapPlayer(playerBlock)); + Backend.SetPlayer(newPlayer); } - Backend.RefreshGui(); } else { - MapPlayerUPD(playerBlock); + MapPlayerUPD(newPlayer); } + Backend.RefreshGui(); } @@ -359,9 +360,7 @@ namespace WorldOfPeacecraft foreach (Block entityBlock in entitiesBlock.GetBlocks ()) { switch (entityBlock.GetName ()) { case MessPlayer: - lock (Backend) { - Backend.SetPlayer (MapPlayer (entityBlock)); - } + ProcessPlayer(entityBlock); break; case MessDragon: Backend.SetDragon (MapDragon (entityBlock)); @@ -381,7 +380,7 @@ namespace WorldOfPeacecraft lock (Backend) { Backend.clearPlayers (); foreach (Block playerBlock in playersBlock.GetBlocks ()) { - Backend.SetPlayer (MapPlayer (playerBlock)); + ProcessPlayer(playerBlock); } } Backend.RefreshGui (); @@ -417,19 +416,15 @@ namespace WorldOfPeacecraft return new Player (id, x, y, desc, busy, score); } - private void MapPlayerUPD(Block playerBlock) + private void MapPlayerUPD(Player p) { - int id = playerBlock.GetIntValue(ValueId); - int score = playerBlock.GetIntValue(ValuePoints); - bool busy = playerBlock.GetBoolValue(ValueBusy); - string desc = playerBlock.GetStringValue(ValueDescription); - int x = playerBlock.GetIntValue(ValueX); - int y = playerBlock.GetIntValue(ValueY); + Player backendPlayer = Backend.getPlayer(p.GetId()); - Backend.getPlayer(id).SetScore(score); - Backend.getPlayer(id).SetDesc(desc); - Backend.getPlayer(id).SetX(x); - Backend.getPlayer(id).SetY(y); + backendPlayer.SetScore(p.GetScore()); + backendPlayer.SetDesc(p.GetName()); + backendPlayer.SetBusy(p.GetBusy()); + backendPlayer.SetScore(p.GetScore()); + backendPlayer.SetPos(p.GetX(), p.GetY()); } private Tile MapMapcell (Block cellBlock) diff --git a/src/Player.cs b/src/Player.cs index 1b7164f..23e0ddb 100644 --- a/src/Player.cs +++ b/src/Player.cs @@ -33,7 +33,7 @@ namespace WorldOfPeacecraft if (x != GetX() || y != GetY ()) positionChanged = true; base.SetPos (x, y); - if (LocationChanged != null) + if (positionChanged && LocationChanged != null) LocationChanged(x, y); }