00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "Enter.h"
00021 #include "Area.h"
00022 #include "Player.h"
00023 #include "Chunk.h"
00024 #include "Chunkinfo.h"
00025 #include "InSocket.h"
00026 #include "Look.h"
00027 #include "Portal.h"
00028
00029
00030 void Enter::Execute(InSocket *from,const std::string& params,Parse&)
00031 {
00032 Database& db = from -> GetDatabase();
00033 Player pl(db, from -> GetAccountName());
00034 Area area(db, pl.GetArea());
00035 Chunk chunk(db, area, pl.GetChunk());
00036 int x = pl.GetChunkX();
00037 int y = pl.GetChunkY();
00038
00039 if (from -> GetMoveEvent())
00040 {
00041 from -> BufferMove("enter");
00042 }
00043 else
00044 {
00045 if (chunk.Get(x, y) == 'P')
00046 {
00047 Portal info(db, chunk, x, y);
00048 if (info.Exists())
00049 {
00050 pl.SetArea(info.GetToArea());
00051 pl.SetChunk(info.GetToChunk());
00052 pl.SetChunkX(info.GetToX());
00053 pl.SetChunkY(info.GetToY());
00054 if (!params.size())
00055 {
00056 Look::LookMap(from);
00057 }
00058 Look::Show(from);
00059 from -> SetMoveEvent(0, 1000);
00060 }
00061 else
00062 {
00063 from -> Send("Huh - Portal terrain without Chunkinfo\n");
00064 from -> CancelMoves();
00065 }
00066 }
00067 else
00068 {
00069 from -> Send("No portal here.\n");
00070 from -> CancelMoves();
00071 }
00072 from -> SetPrompt();
00073 }
00074 }
00075
00076