Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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());
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
void LocalRulesManager::onBallHitTable(const Ball& ball, const Table& table)
{
	PlayerId side = ball.getPosition().x() < 0.0f ? getOpponentId() : getPlayerId();
	m_gameRules->onBallHitTable(side);

	checkGameRules();
}
Ejemplo n.º 5
0
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");
    }
}
Ejemplo n.º 6
0
/*
** 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);
}
Ejemplo n.º 7
0
/*
** 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);
}
Ejemplo n.º 8
0
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;
}
Ejemplo n.º 9
0
/*
** 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));
}
Ejemplo n.º 10
0
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;
}
Ejemplo n.º 11
0
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;
}
Ejemplo n.º 12
0
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);
}
Ejemplo n.º 13
0
bool PlayerJoined::operator==(const PlayerJoined& other) const {
	return true
		 && _isPlayerIdSet(mgen::SHALLOW) == other._isPlayerIdSet(mgen::SHALLOW)
		 && getPlayerId() == other.getPlayerId();
}