zone view works

This commit is contained in:
Max-Wilhelm Bruker 2009-11-29 03:35:55 +01:00
parent 694070724c
commit 55482246dd
5 changed files with 48 additions and 12 deletions

View file

@ -33,6 +33,7 @@ void ProtocolItem::initializeHash()
registerSerializableItem("respdeck_list", Response_DeckList::newItem);
registerSerializableItem("respdeck_download", Response_DeckDownload::newItem);
registerSerializableItem("respdeck_upload", Response_DeckUpload::newItem);
registerSerializableItem("respdump_zone", Response_DumpZone::newItem);
registerSerializableItem("generic_eventlist_games", Event_ListGames::newItem);
registerSerializableItem("generic_eventlist_chat_channels", Event_ListChatChannels::newItem);
@ -171,6 +172,14 @@ Response_DeckUpload::Response_DeckUpload(int _cmdId, ResponseCode _responseCode,
insertItem(_file);
}
Response_DumpZone::Response_DumpZone(int _cmdId, ResponseCode _responseCode, ServerInfo_Zone *_zone)
: ProtocolResponse(_cmdId, _responseCode, "dump_zone")
{
if (!_zone)
_zone = new ServerInfo_Zone;
insertItem(_zone);
}
GameEvent::GameEvent(const QString &_eventName, int _gameId, int _playerId)
: ProtocolItem("game_event", _eventName)
{

View file

@ -29,6 +29,7 @@ enum ItemId {
ItemId_Response_DeckList = ItemId_Other + 300,
ItemId_Response_DeckDownload = ItemId_Other + 301,
ItemId_Response_DeckUpload = ItemId_Other + 302,
ItemId_Response_DumpZone = ItemId_Other + 303,
ItemId_Invalid = ItemId_Other + 1000
};
@ -172,6 +173,15 @@ public:
DeckList_File *getFile() const { return static_cast<DeckList_File *>(itemMap.value("file")); }
};
class Response_DumpZone : public ProtocolResponse {
Q_OBJECT
public:
Response_DumpZone(int _cmdId = -1, ResponseCode _responseCode = RespOk, ServerInfo_Zone *zone = 0);
int getItemId() const { return ItemId_Response_DumpZone; }
static SerializableItem *newItem() { return new Response_DumpZone; }
ServerInfo_Zone *getZone() const { return static_cast<ServerInfo_Zone *>(itemMap.value("zone")); }
};
// --------------
// --- EVENTS ---
// --------------

View file

@ -554,11 +554,22 @@ ResponseCode Server_ProtocolHandler::cmdDumpZone(Command_DumpZone *cmd, Server_G
if (!((zone->getType() == PublicZone) || (player == otherPlayer)))
return RespContextError;
if (zone->getType() == HiddenZone) {
// game->broadcastEvent(QString("dump_zone|%1|%2|%3").arg(player_id).arg(zone->getName()).arg(number_cards), player);
int numberCards = cmd->getNumberCards();
QList<ServerInfo_Card *> respCardList;
for (int i = 0; (i < zone->cards.size()) && (i < numberCards || numberCards == -1); ++i) {
Server_Card *card = zone->cards[i];
QString displayedName = card->getFaceDown() ? QString() : card->getName();
if (zone->getType() == HiddenZone)
respCardList.append(new ServerInfo_Card(i, displayedName));
else
respCardList.append(new ServerInfo_Card(card->getId(), displayedName, card->getX(), card->getY(), card->getCounters(), card->getTapped(), card->getAttacking(), card->getAnnotation()));
}
// remsg->sendList(dumpZoneHelper(otherPlayer, zone, number_cards));
return RespOk;
if (zone->getType() == HiddenZone) {
zone->setCardsBeingLookedAt(numberCards);
game->sendGameEvent(new Event_DumpZone(-1, player->getPlayerId(), otherPlayer->getPlayerId(), zone->getName(), numberCards));
}
sendProtocolItem(new Response_DumpZone(cmd->getCmdId(), RespOk, new ServerInfo_Zone(zone->getName(), zone->getType(), zone->hasCoords(), numberCards < zone->cards.size() ? zone->cards.size() : numberCards, respCardList)));
return RespNothing;
}
ResponseCode Server_ProtocolHandler::cmdStopDumpZone(Command_StopDumpZone *cmd, Server_Game *game, Server_Player *player)