//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //Event Handler public override void processEvent(CGameEvent ge, CSubLog logger) { if (aiLogging_) { dlogger_.info("Event: " + ge.type_); } if (ge.type_ == CEventConstants.CONTINUETURNEVENT || ge.type_ == CEventConstants.ENDTURN || ge.type_ == CEventConstants.TURNCHANGE || ge.type_ == CEventConstants.CHAT_EVENT) { return; } if (ge.type_ == CEventConstants.GAMSESTATE) { processGameState((CStateEvent)ge); return; } if (ge.type_ == CEventConstants.STARTTURNEVENT) { processStartTurn((CStartTurn)ge, logger); return; } //data updates if (ge.type_ == CEventConstants.PLAYERNAMECHANGE) { CPlayer cp = players_[ge.value1_]; cp.pname_ = ge.info1_; return; } if (ge.type_ == CEventConstants.DRAIN_EVENT) { unitsBeforeDrain_ = ge.value1_; rdWeight_ = ge.value2_; return; } if (ge.type_ == CEventConstants.UNITUPDATE) { updateUnit(ge.cUpdate_, logger); return; } if (ge.type_ == CEventConstants.DEATHEVENT) { dlogger_.info("DEATH " + ge.gid_ + " " + ge.info1_); removeObject(ge.gid_); return; } if (ge.type_ == CEventConstants.FLYOVEREVENT) { if (ge.flag_) { foUnit_ = getUnit(ge.gid_); } else { foUnit_ = null; } return; } if (ge.type_ == CEventConstants.MAPLOCATION) { addMapLocation(ge.locInfo_); return; } if (ge.type_ == CEventConstants.NEWUNIT) { addObject(ge.unit_); return; } if (ge.type_ == CEventConstants.STOPTURNEVENT) { setHold(); return; } if (ge.type_ == CEventConstants.SPOTTER) { return; } if (ge.type_ == CEventConstants.PLAYERDEAD) { players_[ge.value1_].living_ = false; if (ge.value1_ == position_) { setHold(); } return; } if (ge.type_ == CEventConstants.PLAYERWIN) { setHold(); return; } if (ge.type_ == CEventConstants.END_OF_EVENTS) { setHold(); return; } if (ge.type_ == CEventConstants.REMOVE_SUPPLY_EVENT) { supplySources_.Remove(ge.gid_); return; } if (ge.type_ == CEventConstants.SUPPLY_EVENT) { CSupplyRoute csr = ge.supplyRoute_; if (supplySources_.ContainsKey(csr.rid_)) { supplySources_[csr.rid_] = csr; } else { supplySources_.Add(csr.rid_, csr); } return; } if (ge.type_ == CEventConstants.PLY_BUYPOINT_EVENT) { players_[position_].buypoints_ = ge.value1_; players_[position_].buypointsSpent_ = ge.value2_; return; } if (ge.type_ == CEventConstants.SCORE_EVENT) { players_[ge.value1_].score_ = ge.value2_; } }
//////////////////////////////////////////////////////////////////// //Reloading protected AIPlayerData( int position, string path, string logname, Dictionary <string, string> caMap, CEncodedObjectInputBufferI bin, AIEventInterfaceI aiEvent, AICommandInterfaceI command, AIQueryI query, AICheatI cheat, int logLevel) : base(position, path, logname, caMap, bin, aiEvent, command, query, cheat, logLevel) { dlogger_ = new CSubLog("PlayerData:" + Convert.ToString(position), realLog_); curturn_ = EncodeUtil.parseInt(caMap[CUR_TURN]); numPlayers_ = EncodeUtil.parseInt(caMap[NUM_PLAYERS]); rdWeight_ = EncodeUtil.parseInt(caMap[RD_WEIGHT]); unitsBeforeDrain_ = EncodeUtil.parseInt(caMap[UNITS_BEFORE_DRAIN]); bin.nextTag(CPlayer.TAGS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(CPlayer.TAGS)) { players_.Add(new CPlayer(bin)); } } bin.endTag(CPlayer.TAGS); bin.nextTag(SPOTU); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(SPOTU)) { CUnit u = CUnit.decodeCUnit(bin, query_); masterObjects_.Add(u.gid_, u); spotMap_.Add(u.gid_, u); spots_.Add(u); } } bin.endTag(SPOTU); bin.nextTag(SPOTC); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(SPOTC)) { CProducerUnit c = CProducerUnit.decodeCProducerUnit(bin, query_); masterObjects_.Add(c.gid_, c); knownCitiesVec_.Add(c); spotMap_.Add(c.gid_, c); spots_.Add(c); } } bin.endTag(SPOTC); bin.nextTag(SPOTP); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(SPOTP)) { CProducerUnit p = CProducerUnit.decodeCProducerUnit(bin, query); masterObjects_.Add(p.gid_, p); spotMap_.Add(p.gid_, p); spots_.Add(p); } } bin.endTag(SPOTP); bin.nextTag(CITIES); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(CITIES)) { CProducerUnit c = CProducerUnit.decodeCProducerUnit(bin, query_); masterObjects_.Add(c.gid_, c); knownCitiesVec_.Add(c); cities_.Add(c); cityMap_.Add(c.gid_, c); } } bin.endTag(CITIES); bin.nextTag(UNITS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(UNITS)) { CUnit u = CUnit.decodeCUnit(bin, query_); masterObjects_.Add(u.gid_, u); unitMap_.Add(u.gid_, u); units_.Add(u); } } bin.endTag(UNITS); bin.nextTag(PRODUCERS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(PRODUCERS)) { CProducerUnit p = CProducerUnit.decodeCProducerUnit(bin, query_); masterObjects_.Add(p.gid_, p); producers_.Add(p); producerMap_.Add(p.gid_, p); unitMap_.Add(p.gid_, p); units_.Add(p); } } bin.endTag(PRODUCERS); bin.nextTag(CSupplyRoute.TAGS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(CSupplyRoute.TAGS)) { var csr = new CSupplyRoute(bin); supplySources_.Add(csr.rid_, csr); } } bin.endTag(CSupplyRoute.TAGS); map_ = new AIMap(bin); mapUtil_ = map_.mapUtil_; gameRules_ = new CGameRules(bin); vc_ = new CVictoryConditions(bin); bin.nextTag(CProposal.TAGS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(CProposal.TAGS)) { var p = new CProposal(bin); proposals_.Add(p); } } bin.endTag(CProposal.TAGS); bin.nextTag(CProductionReportData.TAGS); if (bin.hasChildren()) { bin.firstChild(); while (!bin.reachedEndTag(CProductionReportData.TAGS)) { var prd = new CProductionReportData(bin); prodReport_.Add(prd); } } bin.endTag(CProductionReportData.TAGS); random_ = new CMTRandom(AI_RANDOM_TAG, bin); //retrieve flyover foUnit_ = null; if (caMap.ContainsKey(FOUNIT_ID)) { uint fid = EncodeUtil.parseUInt(caMap[FOUNIT_ID]); foUnit_ = masterObjects_[fid]; } }