void CTableFrameSink::CheckXijin() { for (int i=0; i<GAME_PLAYER; i++) { IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(i); if (pIServerUserItem == NULL || pIServerUserItem->IsAndroidUser()) continue; if(m_GameLogic.GetBestCardType(m_cbHandCardData[i], MAX_COUNT) >= 10) { m_oLog.Log("玩家[%s]获得喜金座位[%d]身上携带筹码[%d]获得奖励元宝数[%d]",pIServerUserItem->GetAccounts(), pIServerUserItem->GetChairID(), pIServerUserItem->GetUserScore()->lBodyChip, m_lLikeIngot); m_pITableFrame->SendTableData(i,SUB_S_XIJIN,NULL,0); m_pITableFrame->WriteUserTask(i,1,1,m_lLikeIngot); } } }
//人工智能游戏动作 bool __cdecl CTableFrameSink::OnPerformAIGameAction() { //机器人判断 IServerUserItem * pIServerUserItem = m_pITableFrame->GetServerUserItem(m_wCurrentUser); if(pIServerUserItem == NULL || pIServerUserItem->IsAIUser() == false || pIServerUserItem->GetUserStatus() != US_PLAY) return false; WORD wChairID = pIServerUserItem->GetChairID(); if(wChairID == INVALID_CHAIR) return false; WORD wCurrentWiner=DeduceWiner(0,4); //判断当前赢家 if(wCurrentWiner == wChairID) { } else { DWORD wGameUser = m_pITableFrame->GetAIKillGameUserChairID(); //机器人智商-相当几率放弃 if(wGameUser == wCurrentWiner && CAIUtil::DetectionProbability(m_pGameServiceOption->cbAILevel)) { //发送消息 OnGameMessage(SUB_C_GIVE_UP, NULL, 0, pIServerUserItem); return true; } else { } } //获取金币 LONG lTurnMaxGold = 1; if (m_bSendCardCount<=2) { lTurnMaxGold=m_fMaxGold/4L; if(lTurnMaxGold <= m_pGameServiceOption->dwCellScore) { lTurnMaxGold = m_pGameServiceOption->dwCellScore; } } else if (m_bSendCardCount==3) lTurnMaxGold=m_fMaxGold/2L; else lTurnMaxGold=m_fMaxGold; lTurnMaxGold=lTurnMaxGold-m_fTableGold[wChairID*2+1]; lTurnMaxGold = __max(lTurnMaxGold,m_fTurnBasicGold); lTurnMaxGold = lTurnMaxGold - m_fTurnBasicGold; lTurnMaxGold += 1; LONG lGold=0; if(lTurnMaxGold!=0) { lGold= (wCurrentWiner == wChairID) ? (((rand() % (LONG)lTurnMaxGold)/2) + lTurnMaxGold/2): (rand() % ((LONG)lTurnMaxGold)/4); } else { //lGold = 1; } lGold=lGold + m_fTurnBasicGold; lGold=__max(lGold,m_fTurnBasicGold); //发送数据 CMD_C_AddGold AddPoint; AddPoint.fGold=lGold; OnGameMessage(SUB_C_ADD_GOLD,&AddPoint,sizeof(AddPoint), pIServerUserItem); return true; }