예제 #1
0
        ////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////
        //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_;
            }
        }
예제 #2
0
        ////////////////////////////////////////////////////////////////////
        //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];
            }
        }