예제 #1
0
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);
}
예제 #2
0
DEFINE_ACTION(ContextNpcGrp, SPIREBOT)
{
	CGroupNpc* grp = CWorkPtr::grpNpc();
	if (!grp)
		return;
	
	uint32 alias;
	string spireName;
	if (!getArgs(args, name(), alias, spireName))
		return;
	
	string botName = "spire_bot_"+spireName;
	
	CBotNpc* bot = new CBotNpc(grp, alias, botName);
	grp->bots().addChild(bot);
	CWorkPtr::bot(bot);
	if (!CWorkPtr::botNpc())
	{
		nlwarning("Failed to select spire bot %s as not found in group: %s",
			botName.c_str(),
			CWorkPtr::grpNpc()->getName().c_str());
		return;
	}
	
	if (bot->getChat().isNull())
		bot->newChat();
	bot->getChat()->add(bot->getAIInstance(), "op:spire");

	bot->setStuck(true);
	
	// set workptr state to this state
	CContextStack::setContext(ContextNpcBot);
}
예제 #3
0
DEFINE_ACTION(ContextNpcBot, SPIRSHTS)
{
	CGroupNpc* grp = CWorkPtr::grpNpc();
	if (!grp)
		return;
	
	CBotNpc* bot = CWorkPtr::botNpc();
	if (!bot)
		return;
	
	FOREACHC(itArg, std::vector<CAIActions::CArg>, args)
	{
		string str, name, sheet;
		itArg->get(str);
		AI_SHARE::stringToKeywordAndTail(str, name, sheet);
		grp->setStrLogicVar(NLMISC::CStringMapper::map("$sheet_spire_"+name), sheet);
	}
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();
		}
	}
}