ResponseCode Server_Player::setCardAttrHelper(CommandContainer *cont, const QString &zoneName, int cardId, const QString &attrName, const QString &attrValue) { Server_CardZone *zone = getZones().value(zoneName); if (!zone) return RespNameNotFound; if (!zone->hasCoords()) return RespContextError; if (cardId == -1) { QListIterator<Server_Card *> CardIterator(zone->cards); while (CardIterator.hasNext()) if (!CardIterator.next()->setAttribute(attrName, attrValue, true)) return RespInvalidCommand; } else { Server_Card *card = zone->getCard(cardId, false); if (!card) return RespNameNotFound; if (!card->setAttribute(attrName, attrValue, false)) return RespInvalidCommand; } cont->enqueueGameEventPrivate(new Event_SetCardAttr(getPlayerId(), zone->getName(), cardId, attrName, attrValue), game->getGameId()); cont->enqueueGameEventPublic(new Event_SetCardAttr(getPlayerId(), zone->getName(), cardId, attrName, attrValue), game->getGameId()); cont->enqueueGameEventOmniscient(new Event_SetCardAttr(getPlayerId(), zone->getName(), cardId, attrName, attrValue), game->getGameId()); return RespOk; }
void Server_Player::unattachCard(CommandContainer *cont, Server_Card *card) { Server_CardZone *zone = card->getZone(); card->setParentCard(0); cont->enqueueGameEventPrivate(new Event_AttachCard(getPlayerId(), zone->getName(), card->getId(), -1, QString(), -1), game->getGameId()); cont->enqueueGameEventPublic(new Event_AttachCard(getPlayerId(), zone->getName(), card->getId(), -1, QString(), -1), game->getGameId()); moveCard(cont, zone, QList<int>() << card->getId(), zone, -1, card->getY(), card->getFaceDown(), card->getTapped()); }
void OpponentModeller::insertHand(vector<Card> played, HAND_TYPES ht, int playerId, bool isWinningHand) { string tCard, sType, sWinningHand; int iType = ht; sType = Util::intToStr(iType); sWinningHand = isWinningHand ? ofToString(isWinningHand) : ofToString(isWinningHand); for (int i = 0; i < played.size(); i++) { if (i == played.size()-1) tCard += played[i].toString(); else tCard += played[i].toString() + " "; } string pId = getPlayerId(playerId); string s = "INSERT INTO Hand (player_id, hand, hand_type, is_winning_hand) VALUES ('" + pId + "', '" + tCard + "', '" + sType + "', '" + sWinningHand + "');"; char *query = Util::sToC(s); _db->query(query); delete [] query; //HACK: //debug, just output all the cards played for the session //cout << tCard << endl; }
void LocalRulesManager::onBallHitTable(const Ball& ball, const Table& table) { PlayerId side = ball.getPosition().x() < 0.0f ? getOpponentId() : getPlayerId(); m_gameRules->onBallHitTable(side); checkGameRules(); }
KEXPORT void bootUnlockRect(IDirect3DTexture8* self, UINT Level) { DWORD oldEBP; __asm mov oldEBP,ebp; static int count = 0; int levels = self->GetLevelCount(); D3DSURFACE_DESC desc; if (SUCCEEDED(self->GetLevelDesc(0, &desc))) { if (((desc.Width==512 && desc.Height==256 && Level==0) || (desc.Width==128 && desc.Height==64 && Level==0)) && *(DWORD*)(oldEBP+0x3c)==0 && *(DWORD*)(oldEBP+0x34) + 8 == *(DWORD*)(oldEBP+0x38) && (*(WORD*)(*(DWORD*)(oldEBP+0x2c)) & 0xfff0)==0x0510 ) { WORD playerId = 0xffff; if (isEditMode()) { if (isEditBootsMode()) { return; // no replacement in Edit Boots } // edit player if (desc.Width==512) { playerId = *(WORD*)data[EDITPLAYER_ID]; // check boot-type: don't replace the texture if boot-type // is not "editable". That may have some undesirable effects later // if the texture becomes cached. if (data[EDITMODE_CURRPLAYER_MOD]) { //PES6 DWORD* pBaseCopy = (DWORD*)data[EDITMODE_CURRPLAYER_MOD]; if (*pBaseCopy) { BYTE bootType = *(BYTE*)(*pBaseCopy + 0x61) & data[BOOTTYPE_TEST_MASK]; if (bootType!=0) return; } } else if (data[EDITMODE_CURRPLAYER_MOD_DIRECT]) { //PES5/WE9/WE9LE DWORD pBaseCopy = data[EDITMODE_CURRPLAYER_MOD_DIRECT]; BYTE bootType = *(BYTE*)(pBaseCopy + 0x63) & data[BOOTTYPE_TEST_MASK]; if (bootType!=0) return; } } } else { // match or training int pos = getPosition(*(DWORD*)(oldEBP+0x30)); playerId = getPlayerId(pos); } //DumpTexture(self); //LogWithNumber(&k_boot, "bootUnlockRect: playerId = %d", playerId); bool isBig = desc.Width==512; IDirect3DTexture8* bootTexture = getBootTexture(playerId, isBig, &desc, levels); if (bootTexture) { // replace the texture ReplaceTextureLevel(self, bootTexture, 0); } } } else { Log(&k_boot, "GetLevelDesc FAILED"); } }
/* ** currentRessource must be a t_clientIA* */ char *tograph_pex(t_zappy *z) { t_clientIA *kickedPlayer; char buffer[SIZE_BUFF]; kickedPlayer = (t_clientIA*)z->currentRessource; snprintf(buffer, SIZE_BUFF, "pex %d\n", getPlayerId(kickedPlayer)); return strdup(buffer); }
/* ** currentRessource must be a t_ressourcePlayer* */ char *tograph_pgt(t_zappy *z) { char buffer[SIZE_BUFF]; t_ressourcePlayer *ressourcePlayer; ressourcePlayer = (t_ressourcePlayer*)z->currentRessource; snprintf(buffer, SIZE_BUFF, "pgt %d %d\n", getPlayerId(ressourcePlayer->clientIA), ressourcePlayer->noRessource); return strdup(buffer); }
static char *genPlayerIds_ShouldSetThePlayerIdsOnPlayers_GivenAPlayersFile() { fileplayer_s *players_file = buildFilePlayersWithoutIds(); assertEquals( bl_True, genPlayerIds( players_file ) ); for ( int i = 0; i < TOTAL_PLAYERS; ++i ) { assertEquals( i + 1, getPlayerId( &players_file[i] ) ); } return NULL; }
/* ** currentRessource == t_egg* */ char *tograph_enw(t_zappy *z) { char buffer[SIZE_BUFF]; t_egg *egg; egg = (t_egg*)z->currentRessource; snprintf(buffer, SIZE_BUFF, "enw %u %d %d %d\n", egg->id, getPlayerId(egg->player), egg->x, egg->y); return (strdup(buffer)); }
void OpponentModeller::updatePlayer(int playerId, int turns, int playCount) { int p = turns > 0 ? (playCount*100) / turns : 0; int p2 = 100 - p; string s = "UPDATE Player SET turns_participated = '" + Util::intToStr(turns) + "', play_percentage = '" + ofToString(p) + "', pass_percentage = '" + ofToString(p2) + "' WHERE player_id = '" + getPlayerId(playerId) + "';"; char *query = Util::sToC(s); _db->query(query); delete [] query; }
ResponseCode Server_Player::moveCard(CommandContainer *cont, Server_CardZone *startzone, const QList<int> &_cardIds, Server_CardZone *targetzone, int x, int y, bool faceDown, bool tapped) { // Disallow controller change to other zones than the table. if (((targetzone->getType() != PublicZone) || !targetzone->hasCoords()) && (startzone->getPlayer() != targetzone->getPlayer())) return RespContextError; if (!targetzone->hasCoords() && (x == -1)) x = targetzone->cards.size(); QList<QPair<Server_Card *, int> > cardsToMove; for (int i = 0; i < _cardIds.size(); ++i) { int position; Server_Card *card = startzone->getCard(_cardIds[i], false, &position); if (!card) return RespNameNotFound; if (!card->getAttachedCards().isEmpty() && !targetzone->isColumnEmpty(x, y)) return RespContextError; cardsToMove.append(QPair<Server_Card *, int>(card, position)); } MoveCardCompareFunctor cmp(startzone == targetzone ? -1 : x); qSort(cardsToMove.begin(), cardsToMove.end(), cmp); bool secondHalf = false; int xIndex = -1; for (int cardIndex = 0; cardIndex < cardsToMove.size(); ++cardIndex) { Server_Card *card = cardsToMove[cardIndex].first; int originalPosition = cardsToMove[cardIndex].second; int position = startzone->removeCard(card); if ((startzone == targetzone) && !startzone->hasCoords()) { if (!secondHalf && (originalPosition < x)) { xIndex = -1; secondHalf = true; } else if (secondHalf) --xIndex; else ++xIndex; } else ++xIndex; int newX = x + xIndex; // Attachment relationships can be retained when moving a card onto the opponent's table if (startzone->getName() != targetzone->getName()) { // Delete all attachment relationships if (card->getParentCard()) card->setParentCard(0); // Make a copy of the list because the original one gets modified during the loop QList<Server_Card *> attachedCards = card->getAttachedCards(); for (int i = 0; i < attachedCards.size(); ++i) attachedCards[i]->getZone()->getPlayer()->unattachCard(cont, attachedCards[i]); } if (startzone != targetzone) { // Delete all arrows from and to the card const QList<Server_Player *> &players = game->getPlayers().values(); for (int i = 0; i < players.size(); ++i) { QList<int> arrowsToDelete; QMapIterator<int, Server_Arrow *> arrowIterator(players[i]->getArrows()); while (arrowIterator.hasNext()) { Server_Arrow *arrow = arrowIterator.next().value(); if ((arrow->getStartCard() == card) || (arrow->getTargetItem() == card)) arrowsToDelete.append(arrow->getId()); } for (int j = 0; j < arrowsToDelete.size(); ++j) players[i]->deleteArrow(arrowsToDelete[j]); } } if (card->getDestroyOnZoneChange() && (startzone != targetzone)) { cont->enqueueGameEventPrivate(new Event_DestroyCard(getPlayerId(), startzone->getName(), card->getId()), game->getGameId()); cont->enqueueGameEventPublic(new Event_DestroyCard(getPlayerId(), startzone->getName(), card->getId()), game->getGameId()); card->deleteLater(); } else { if (!targetzone->hasCoords()) { y = 0; card->resetState(); } else newX = targetzone->getFreeGridColumn(newX, y, card->getName()); targetzone->insertCard(card, newX, y); bool targetBeingLookedAt = (targetzone->getType() != HiddenZone) || (targetzone->getCardsBeingLookedAt() > newX) || (targetzone->getCardsBeingLookedAt() == -1); bool sourceBeingLookedAt = (startzone->getType() != HiddenZone) || (startzone->getCardsBeingLookedAt() > position) || (startzone->getCardsBeingLookedAt() == -1); bool targetHiddenToPlayer = faceDown || !targetBeingLookedAt; bool targetHiddenToOthers = faceDown || (targetzone->getType() != PublicZone); bool sourceHiddenToPlayer = card->getFaceDown() || !sourceBeingLookedAt; bool sourceHiddenToOthers = card->getFaceDown() || (startzone->getType() != PublicZone); QString privateCardName, publicCardName; if (!(sourceHiddenToPlayer && targetHiddenToPlayer)) privateCardName = card->getName(); if (!(sourceHiddenToOthers && targetHiddenToOthers)) publicCardName = card->getName(); int oldCardId = card->getId(); if (faceDown) card->setId(newCardId()); card->setFaceDown(faceDown); // The player does not get to see which card he moved if it moves between two parts of hidden zones which // are not being looked at. int privateNewCardId = card->getId(); int privateOldCardId = oldCardId; if (!targetBeingLookedAt && !sourceBeingLookedAt) { privateOldCardId = -1; privateNewCardId = -1; privateCardName = QString(); } int privatePosition = -1; if (startzone->getType() == HiddenZone) privatePosition = position; cont->enqueueGameEventPrivate(new Event_MoveCard(getPlayerId(), privateOldCardId, privateCardName, startzone->getName(), privatePosition, targetzone->getPlayer()->getPlayerId(), targetzone->getName(), newX, y, privateNewCardId, faceDown), game->getGameId()); cont->enqueueGameEventOmniscient(new Event_MoveCard(getPlayerId(), privateOldCardId, privateCardName, startzone->getName(), privatePosition, targetzone->getPlayer()->getPlayerId(), targetzone->getName(), newX, y, privateNewCardId, faceDown), game->getGameId()); // Other players do not get to see the start and/or target position of the card if the respective // part of the zone is being looked at. The information is not needed anyway because in hidden zones, // all cards are equal. if ( ((startzone->getType() == HiddenZone) && ((startzone->getCardsBeingLookedAt() > position) || (startzone->getCardsBeingLookedAt() == -1))) || (startzone->getType() == PublicZone) ) position = -1; if ((targetzone->getType() == HiddenZone) && ((targetzone->getCardsBeingLookedAt() > newX) || (targetzone->getCardsBeingLookedAt() == -1))) newX = -1; if ((startzone->getType() == PublicZone) || (targetzone->getType() == PublicZone)) cont->enqueueGameEventPublic(new Event_MoveCard(getPlayerId(), oldCardId, publicCardName, startzone->getName(), position, targetzone->getPlayer()->getPlayerId(), targetzone->getName(), newX, y, card->getId(), faceDown), game->getGameId()); else cont->enqueueGameEventPublic(new Event_MoveCard(getPlayerId(), -1, QString(), startzone->getName(), position, targetzone->getPlayer()->getPlayerId(), targetzone->getName(), newX, y, -1, false), game->getGameId()); if (tapped) setCardAttrHelper(cont, targetzone->getName(), card->getId(), "tapped", "1"); } } if (startzone->hasCoords()) startzone->fixFreeSpaces(cont); return RespOk; }
void RemoteRulesManager::onBallHitTable(const Ball& ball, const Table& table) { PlayerId id = ball.getPosition().x() < 0.0f ? getOpponentId() : getPlayerId(); sendMessage(MessagePtr(new BallEvent(id, BallEvent::BALLEVENT_TABLE)), ENET_PACKET_FLAG_RELIABLE); }
bool PlayerJoined::operator==(const PlayerJoined& other) const { return true && _isPlayerIdSet(mgen::SHALLOW) == other._isPlayerIdSet(mgen::SHALLOW) && getPlayerId() == other.getPlayerId(); }