DEFINE_ACTION(ContextNpcMgr, SPIREGRP) { CMgrNpc* mgr = CWorkPtr::mgrNpc(); if (!mgr) return; uint32 alias; string spireName; if (!getArgs(args, name(), alias, spireName)) return; string grpName = "spire_group_"+spireName; CGroupNpc* grp = new CGroupNpc(mgr, alias, grpName, RYAI_MAP_CRUNCH::Nothing); grp->setAutoSpawn(false); mgr->groups().addChild(grp); CWorkPtr::grp(grp); if (!CWorkPtr::grpNpc()) { nlwarning("Failed to select spire group %s as not found in manager: %s", grpName.c_str(), CWorkPtr::mgrNpc()->getName().c_str()); return; } CStateMachine* stateMachine = CWorkPtr::eventReactionContainer(); if (stateMachine) grp->setStartState(stateMachine->cstStates()[0]); CContextStack::setContext(ContextNpcGrp); }
COutpost::COutpost(CContinent* owner, uint32 alias, std::string const& name, std::string const& filename) : CAliasChild<CContinent>(owner, alias, name) , CAliasTreeRoot(filename) , _OwnerAllianceId(InvalidAllianceId) , _AttackerAllianceId(InvalidAllianceId) , _State(OUTPOSTENUMS::UnknownOutpostState) { static bool logInitDone = false; if ( ! logInitDone ) { OutpostDbgLog.addDisplayer( &OutpostDisplayer ); OutpostInfLog.addDisplayer( &OutpostDisplayer ); OutpostWrnLog.addDisplayer( &OutpostDisplayer ); logInitDone = true; } OUTPOST_DBG("Creating outpost %s' (%s)", name.c_str(), getAliasFullName().c_str()); if (LogOutpostDebug) OUTPOST_DBG("Creating outpost '%s'", getAliasFullName().c_str()); _OutpostName = getName(); COutpostManager* manager = NULL; // Create default squad manager manager = new COutpostSquadManager(this, 0, "default_squad_manager", filename); if (manager) { _Managers.addChild(manager); manager->init(); } // Create default building manager manager = new COutpostManager(this, 0, "default_building_manager", filename); if (manager) { _Managers.addChild(manager); manager->init(); CGroupNpc* group = new CGroupNpc(manager, NULL, /*AStarFlag*/RYAI_MAP_CRUNCH::Nothing); if (group) { manager->groups().addAliasChild(group); group->setAutoSpawn(false); group->setName("default_building_group"); group->clearParameters(); group->setPlayerAttackable(false); group->setBotAttackable(false); group->setBotsAreNamedFlag(); } } }