//PT. Se le pasan los argumentos de nickname, modelo, y color del Player. void CMap::createPlayer(bool isLocalPlayer, const std::string& nickname, const std::string& color, const std::string& model) { Map::CEntity playerInfo( nickname ); playerInfo.setType("Player"); playerInfo.setAttribute("isLocalPlayer", isLocalPlayer ? "true" : "false"); playerInfo.setAttribute("modelColor1", color ); playerInfo.setAttribute("model", model ); CEntity* newPlayer = CEntityFactory::getSingletonPtr()->createEntity(playerInfo, this); } // createPlayer
bool P2PServer::ProcGameDealMsg(MSGDef::TMSG_HEADER *pMsgHeader, const sockaddr_in& remoteAddr) { MSGDef::GMSG_DEAL *pDeal = (MSGDef::GMSG_DEAL *)pMsgHeader; Deck *d = Deck::getInstance(); CardMsg *cardMsg = d->getCards(); //构建玩家结构 Player_Info playerInfo(cardMsg->card, cardMsg->num); //获取玩家结构 ::EnterCriticalSection(&m_PeerListLock); Peer_Info* pPeerInfo = m_PeerList.GetAPeer(pDeal->PeerInfo.szUserName); pPeerInfo->szPlayer = playerInfo; ::LeaveCriticalSection(&m_PeerListLock); return true; }
bool iMapInfo::ReadMapInfo(iFileI* pFile) { // Map version uint16 ver; pFile->Read(&ver,sizeof(ver)); if (ver != GMAP_FILE_VERSION) return false; // Save timestamp pFile->Read(&m_saveTime, sizeof(m_saveTime)); // Random seed pFile->Read(&m_rseed, sizeof(m_rseed)); // Map size uint8 mapSiz; pFile->Read(&mapSiz,sizeof(mapSiz)); m_Size = (MAP_SIZE)mapSiz; // Map name and description (string of text) Unserialize(pFile, m_Name); Unserialize(pFile, m_Description); // Map version and author (string of text) Unserialize(pFile, m_Version); Unserialize(pFile, m_Author); // Current date (1 is default value for new game) pFile->Read(&m_curDay, sizeof(m_curDay)); // Game mode (GM_UNDEFINED for new map) uint16 gameMode; pFile->Read(&gameMode,sizeof(gameMode)); m_gameMode = (GameMode)gameMode; // Difficulty level (DFC_UNDEFINED for new game) sint8 gameDifLvl; pFile->Read(&gameDifLvl,sizeof(gameDifLvl)); m_Difficulty = (DIFFICULTY_LEVEL)gameDifLvl; // Read Player config uint16 pCount; pFile->Read(&pCount, sizeof(pCount)); bool bHumanDefined = false; for (uint32 xx=0; xx<pCount; ++xx){ // Player Id sint8 playerId; pFile->Read(&playerId,sizeof(playerId)); // Nation type uint8 nation; pFile->Read(&nation,sizeof(nation)); // Player Type Mask uint8 playerTypeMask; pFile->Read(&playerTypeMask,sizeof(playerTypeMask)); // Player Type (PT_UNDEFINED for new game) uint8 playerType; pFile->Read(&playerType,sizeof(playerType)); // Create playerInfo descriptor iPlayerInfo playerInfo((PLAYER_ID)playerId, (PLAYER_TYPE_MASK)playerTypeMask, (PLAYER_TYPE)playerType, (CTL_TYPE)nation); if (playerType == PT_UNDEFINED) { if (!bHumanDefined && (playerTypeMask == PTM_HUMAN_ONLY || playerTypeMask == PTM_HUMAN_OR_COMPUTER)) { bHumanDefined = true; playerInfo.m_Type = PT_HUMAN; } else { playerInfo.m_Type = PT_COMPUTER; } } // Player resources (undefined for new game) Unserialize(pFile, playerInfo.m_Minerals); // Current Hero idx (0xFFFF = undefined for new game) pFile->Read(&playerInfo.m_curHeroId,sizeof(playerInfo.m_curHeroId)); // Current Castle idx (0xFFFF = undefined for new game) pFile->Read(&playerInfo.m_curCastleIdx,sizeof(playerInfo.m_curCastleIdx)); // Keys state pFile->Read(&playerInfo.m_keys,sizeof(playerInfo.m_keys)); // Insert Player descriptor m_Players.Add(playerInfo); } // Current player Id (PID_NEUTRAL = undefined for new game) uint16 curPlayerId; pFile->Read(&curPlayerId,sizeof(curPlayerId)); if (curPlayerId == 0xFFFF)m_curPlayerId = PID_NEUTRAL; else m_curPlayerId = (PLAYER_ID)curPlayerId; // Map metrics uint16 w,h; pFile->Read(&w,sizeof(w)); pFile->Read(&h,sizeof(h)); m_metrics.w = w; m_metrics.h = h; return true; }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { for (int i = 0; i < 6 ;i++) { levels.append(0); } ui->setupUi(this); settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, "enkidu", "battalbot"); ui->le_server->setText(settings->value("server", "").toString()); ui->le_channel->setText(settings->value("channel", "").toString()); ui->le_botname->setText(settings->value("botname", "").toString()); QHash<QString, QVariant> tmp; auths = settings->value("auths", tmp).toHash(); onFinish = false; added = 0; QLocale::setDefault(QLocale::English); trayIcon = new QSystemTrayIcon(); QMenu *menu = new QMenu(); QAction *actionQuit = new QAction("Quit", trayIcon); menu->addAction(actionQuit); trayIcon->setContextMenu(menu); trayIcon->setIcon(QIcon(":/icon.png")); trayIcon->show(); this->setWindowIcon(QIcon(":/icon.png")); this->setWindowTitle("eRepublik wall-watching BOT"); connect(ui->pb_connect, SIGNAL(clicked()), this, SLOT(connectToServer())); irc = new Irc(this); reader = new Reader; battle = new Battle; refreshTree(); connect(battle, SIGNAL(getWall()), reader, SLOT(read())); connect(ui->pb_StartCount, SIGNAL(clicked()), this, SLOT(getInfo())); connect(reader, SIGNAL(startCounting(int,QTime)), battle, SLOT(startCounting(int, QTime))); connect(reader, SIGNAL(startCounting(int,QTime)), this, SLOT(setInitialWall(int,QTime))); connect(battle, SIGNAL(setTimeT(QTime)), this, SLOT(setTimeElapsed(QTime))); connect(reader, SIGNAL(wall(int,bool)), battle, SLOT(actWall(int,bool))); connect(reader, SIGNAL(wall(int,bool)), this, SLOT(setWall(int,bool))); connect(battle, SIGNAL(setText(QString)), irc, SLOT(write(QString))); connect(reader, SIGNAL(battleInfo(QString)), irc, SLOT(setTopic(QString))); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); connect(irc, SIGNAL(authRequest(QString,QString,QString)), this, SLOT(auth(QString,QString,QString))); connect(irc, SIGNAL(wallRequest(QString,QString)), this, SLOT(wall(QString,QString))); connect(irc, SIGNAL(playerRequest(QString)), reader, SLOT(getPlayer(QString))); connect(reader, SIGNAL(playerInfo(QString)), irc, SLOT(write(QString))); connect(ui->pb_authAdd, SIGNAL(clicked()), this, SLOT(addAuth())); connect(ui->pb_delAuth, SIGNAL(clicked()), this, SLOT(delAuth())); connect(actionQuit, SIGNAL(triggered()), this, SLOT(appQuit())); curve = new QwtPlotCurve(); curve->setRenderHint(QwtPlotItem::RenderAntialiased); curve->attach(ui->qwtPlot); for (int i = 0; i < 6; i++) { QwtPlotCurve *line = new QwtPlotCurve(); if (i == 0 || i == 5) { line->setPen(QPen(QColor(0,0,255))); } else { line->setPen(QPen(QColor(0,200,0))); } line->attach(ui->qwtPlot); lines.append(line); } }
void HWNewNet::ParseCmd(const QStringList & lst) { qDebug() << "Server: " << lst; if(!lst.size()) { qWarning("Net client: Bad message"); return; } if (lst[0] == "NICK") { mynick = lst[1]; m_playersModel->setNickname(mynick); m_nick_registered = false; return ; } if (lst[0] == "PROTO") return ; if (lst[0] == "ERROR") { if (lst.size() == 2) emit Error(HWApplication::translate("server", lst[1].toAscii().constData())); else emit Error("Unknown error"); return; } if (lst[0] == "WARNING") { if (lst.size() == 2) emit Warning(HWApplication::translate("server", lst[1].toAscii().constData())); else emit Warning("Unknown warning"); return; } if (lst[0] == "CONNECTED") { if(lst.size() < 3 || lst[2].toInt() < cMinServerVersion) { // TODO: Warn user, disconnect qWarning() << "Server too old"; RawSendNet(QString("QUIT%1%2").arg(delimeter).arg("Server too old")); Disconnect(); emit disconnected(tr("The server is too old. Disconnecting now.")); return; } RawSendNet(QString("NICK%1%2").arg(delimeter).arg(mynick)); RawSendNet(QString("PROTO%1%2").arg(delimeter).arg(*cProtoVer)); netClientState = Connected; m_game_connected = true; emit adminAccess(false); return; } if (lst[0] == "SERVER_AUTH") { if(lst.size() < 2) { qWarning("Net: Malformed SERVER_AUTH message"); return; } if(lst[1] != m_serverHash) { Error("Server authentication error"); Disconnect(); } else { // empty m_serverHash variable means no authentication was performed // or server passed authentication m_serverHash.clear(); } return; } if (lst[0] == "PING") { if (lst.size() > 1) RawSendNet(QString("PONG%1%2").arg(delimeter).arg(lst[1])); else RawSendNet(QString("PONG")); return; } if (lst[0] == "ROOMS") { if(lst.size() % 9 != 1) { qWarning("Net: Malformed ROOMS message"); return; } m_roomsListModel->setRoomsList(lst.mid(1)); if (m_private_game == false && m_nick_registered == false) { emit NickNotRegistered(mynick); } return; } if (lst[0] == "SERVER_MESSAGE") { if(lst.size() < 2) { qWarning("Net: Empty SERVERMESSAGE message"); return; } emit serverMessage(lst[1]); return; } if (lst[0] == "CHAT") { if(lst.size() < 3) { qWarning("Net: Empty CHAT message"); return; } QString action = HWProto::chatStringToAction(lst[2]); if (netClientState == InLobby) { if (action != NULL) emit lobbyChatAction(lst[1], action); else emit lobbyChatMessage(lst[1], lst[2]); } else { emit chatStringFromNet(HWProto::formatChatMsg(lst[1], lst[2])); if (action != NULL) emit roomChatAction(lst[1], action); else emit roomChatMessage(lst[1], lst[2]); } return; } if (lst[0] == "INFO") { if(lst.size() < 5) { qWarning("Net: Malformed INFO message"); return; } emit playerInfo(lst[1], lst[2], lst[3], lst[4]); if (netClientState != InLobby) { QStringList tmp = lst; tmp.removeFirst(); emit chatStringFromNet(tmp.join(" ").prepend('\x01')); } return; } if (lst[0] == "SERVER_VARS") { QStringList tmp = lst; tmp.removeFirst(); while (tmp.size() >= 2) { if(tmp[0] == "MOTD_NEW") emit serverMessageNew(tmp[1]); else if(tmp[0] == "MOTD_OLD") emit serverMessageOld(tmp[1]); else if(tmp[0] == "LATEST_PROTO") emit latestProtocolVar(tmp[1].toInt()); tmp.removeFirst(); tmp.removeFirst(); } return; } if (lst[0] == "BANLIST") { QStringList tmp = lst; tmp.removeFirst(); emit bansList(tmp); return; } if (lst[0] == "CLIENT_FLAGS" || lst[0] == "CF") { if(lst.size() < 3 || lst[1].size() < 2) { qWarning("Net: Malformed CLIENT_FLAGS message"); return; } QString flags = lst[1]; bool setFlag = flags[0] == '+'; const QStringList nicks = lst.mid(2); while(flags.size() > 1) { flags.remove(0, 1); char c = flags[0].toAscii(); bool inRoom = (netClientState == InRoom || netClientState == InGame); switch(c) { // flag indicating if a player is ready to start a game case 'r': if(inRoom) foreach (const QString & nick, nicks) { if (nick == mynick) { emit setMyReadyStatus(setFlag); } m_playersModel->setFlag(nick, PlayersListModel::Ready, setFlag); } break; // flag indicating if a player is a registered user case 'u': foreach(const QString & nick, nicks) m_playersModel->setFlag(nick, PlayersListModel::Registered, setFlag); break; // flag indicating if a player is in room case 'i': foreach(const QString & nick, nicks) m_playersModel->setFlag(nick, PlayersListModel::InRoom, setFlag); break; // flag indicating if a player is contributor case 'c': foreach(const QString & nick, nicks) m_playersModel->setFlag(nick, PlayersListModel::Contributor, setFlag); break; // flag indicating if a player has engine running case 'g': if(inRoom) foreach(const QString & nick, nicks) m_playersModel->setFlag(nick, PlayersListModel::InGame, setFlag); break; // flag indicating if a player is the host/master of the room case 'h': if(inRoom) foreach (const QString & nick, nicks) { if (nick == mynick) { isChief = setFlag; emit roomMaster(isChief); } m_playersModel->setFlag(nick, PlayersListModel::RoomAdmin, setFlag); } break; // flag indicating if a player is admin (if so -> worship them!) case 'a': foreach (const QString & nick, nicks) { if (nick == mynick) emit adminAccess(setFlag); m_playersModel->setFlag(nick, PlayersListModel::ServerAdmin, setFlag); } break; default: qWarning() << "Net: Unknown client-flag: " << c; } } return; } if(lst[0] == "KICKED") { netClientState = InLobby; askRoomsList(); emit LeftRoom(tr("You got kicked")); m_playersModel->resetRoomFlags(); return; } if(lst[0] == "LOBBY:JOINED") { if(lst.size() < 2) { qWarning("Net: Bad JOINED message"); return; } for(int i = 1; i < lst.size(); ++i) { if (lst[i] == mynick) { // check if server is authenticated or no authentication was performed at all if(!m_serverHash.isEmpty()) { Error(tr("Server authentication error")); Disconnect(); } netClientState = InLobby; RawSendNet(QString("LIST")); emit connected(); } m_playersModel->addPlayer(lst[i], false); } return; } if(lst[0] == "ROOM" && lst.size() == 11 && lst[1] == "ADD") { QStringList tmp = lst; tmp.removeFirst(); tmp.removeFirst(); m_roomsListModel->addRoom(tmp); return; } if(lst[0] == "ROOM" && lst.size() == 12 && lst[1] == "UPD") { QStringList tmp = lst; tmp.removeFirst(); tmp.removeFirst(); QString roomName = tmp.takeFirst(); m_roomsListModel->updateRoom(roomName, tmp); // keep track of room name so correct name is displayed if(myroom == roomName && myroom != tmp[1]) { myroom = tmp[1]; emit roomNameUpdated(myroom); } return; } if(lst[0] == "ROOM" && lst.size() == 3 && lst[1] == "DEL") { m_roomsListModel->removeRoom(lst[2]); return; } if(lst[0] == "LOBBY:LEFT") { if(lst.size() < 2) { qWarning("Net: Bad LOBBY:LEFT message"); return; } if (lst.size() < 3) m_playersModel->removePlayer(lst[1]); else m_playersModel->removePlayer(lst[1], lst[2]); return; } if (lst[0] == "ASKPASSWORD") { // server should send us salt of at least 16 characters if(lst.size() < 2 || lst[1].size() < 16) { qWarning("Net: Bad ASKPASSWORD message"); return; } emit NickRegistered(mynick); m_nick_registered = true; // store server salt // when this variable is set, it is assumed that server asked us for a password m_serverSalt = lst[1]; m_clientSalt = QUuid::createUuid().toString(); maybeSendPassword(); return; } if (lst[0] == "NOTICE") { if(lst.size() < 2) { qWarning("Net: Bad NOTICE message"); return; } bool ok; int n = lst[1].toInt(&ok); if(!ok) { qWarning("Net: Bad NOTICE message"); return; } handleNotice(n); return; } if (lst[0] == "BYE") { if (lst.size() < 2) { qWarning("Net: Bad BYE message"); return; } if (lst[1] == "Authentication failed") { emit AuthFailed(); m_game_connected = false; Disconnect(); //omitted 'emit disconnected()', we don't want the error message return; } m_game_connected = false; Disconnect(); emit disconnected(HWApplication::translate("server", lst[1].toAscii().constData())); return; } if(lst[0] == "JOINING") { if(lst.size() != 2) { qWarning("Net: Bad JOINING message"); return; } myroom = lst[1]; emit roomNameUpdated(myroom); return; } if(netClientState == InLobby && lst[0] == "JOINED") { if(lst.size() < 2 || lst[1] != mynick) { qWarning("Net: Bad JOINED message"); return; } for(int i = 1; i < lst.size(); ++i) { if (lst[i] == mynick) { netClientState = InRoom; emit EnteredGame(); emit roomMaster(isChief); if (isChief) emit configAsked(); } m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick)); emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i])); } return; } if(netClientState == InRoom || netClientState == InGame) { if (lst[0] == "EM") { if(lst.size() < 2) { qWarning("Net: Bad EM message"); return; } for(int i = 1; i < lst.size(); ++i) { QByteArray em = QByteArray::fromBase64(lst[i].toAscii()); emit FromNet(em); } return; } if (lst[0] == "ROUND_FINISHED") { emit FromNet(QByteArray("\x01o")); return; } if (lst[0] == "ADD_TEAM") { if(lst.size() != 24) { qWarning("Net: Bad ADDTEAM message"); return; } QStringList tmp = lst; tmp.removeFirst(); emit AddNetTeam(tmp); return; } if (lst[0] == "REMOVE_TEAM") { if(lst.size() != 2) { qWarning("Net: Bad REMOVETEAM message"); return; } emit RemoveNetTeam(HWTeam(lst[1])); return; } if(lst[0] == "ROOMABANDONED") { netClientState = InLobby; m_playersModel->resetRoomFlags(); emit LeftRoom(tr("Room destroyed")); return; } if (lst[0] == "RUN_GAME") { netClientState = InGame; emit AskForRunGame(); return; } if (lst[0] == "TEAM_ACCEPTED") { if (lst.size() != 2) { qWarning("Net: Bad TEAM_ACCEPTED message"); return; } emit TeamAccepted(lst[1]); return; } if (lst[0] == "CFG") { if(lst.size() < 3) { qWarning("Net: Bad CFG message"); return; } QStringList tmp = lst; tmp.removeFirst(); tmp.removeFirst(); if (lst[1] == "SCHEME") emit netSchemeConfig(tmp); else emit paramChanged(lst[1], tmp); return; } if (lst[0] == "HH_NUM") { if (lst.size() != 3) { qWarning("Net: Bad TEAM_ACCEPTED message"); return; } HWTeam tmptm(lst[1]); tmptm.setNumHedgehogs(lst[2].toUInt()); emit hhnumChanged(tmptm); return; } if (lst[0] == "TEAM_COLOR") { if (lst.size() != 3) { qWarning("Net: Bad TEAM_COLOR message"); return; } HWTeam tmptm(lst[1]); tmptm.setColor(lst[2].toInt()); emit teamColorChanged(tmptm); return; } if(lst[0] == "JOINED") { if(lst.size() < 2) { qWarning("Net: Bad JOINED message"); return; } for(int i = 1; i < lst.size(); ++i) { emit chatStringFromNet(tr("%1 *** %2 has joined the room").arg('\x03').arg(lst[i])); m_playersModel->playerJoinedRoom(lst[i], isChief && (lst[i] != mynick)); } return; } if(lst[0] == "LEFT") { if(lst.size() < 2) { qWarning("Net: Bad LEFT message"); return; } if (lst.size() < 3) emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1])); else emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2])); m_playersModel->playerLeftRoom(lst[1]); return; } } qWarning() << "Net: Unknown message or wrong state:" << lst; }