Exemplo n.º 1
0
static bool Cmd_GetRuntimeEditorID_Execute(COMMAND_ARGS)
{
	TESForm* BaseObject = NULL;

	if (!g_scriptIntfc->ExtractArgsEx(paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, &BaseObject) ||
		(thisObj == NULL && BaseObject == NULL))
	{
		g_strVarInfc->Assign(PASS_COMMAND_ARGS, "");
		return true;
	}

	UInt32 FormID = 0;
	if (thisObj)
		FormID = thisObj->refID;
	else if (BaseObject)
		FormID = BaseObject->refID;

	const char* EditorID = g_editorIDManager.LookupByFormID(FormID);
	if (EditorID == NULL && BaseObject)
		EditorID = BaseObject->GetEditorID();

	if (EditorID == NULL)
		g_strVarInfc->Assign(PASS_COMMAND_ARGS, "");
	else
	{
		g_strVarInfc->Assign(PASS_COMMAND_ARGS, EditorID);

		if (IsConsoleMode())
			Console_Print("EditorID: %s", EditorID);
	}

	return true;
}
bool TESLeveledList::WalkForCircularPath( std::string& Output, TESLeveledList* Check, TESLeveledList* Against )
{
	bool Result = true;
	
	TESForm* CheckBase = CS_CAST(Check, TESLeveledList, TESForm);
	TESForm* CheckAgainstBase = CS_CAST(Against, TESLeveledList, TESForm);
	SME_ASSERT(CheckBase && CheckAgainstBase);	

	for (TESLeveledList::LevListT::Iterator Itr = Check->levList.Begin(); Itr.Get() && Itr.End() == false; ++Itr)
	{
		TESForm* Item = Itr->form;
		TESLeveledList* Inner = CS_CAST(Item, TESForm, TESLeveledList);

		if (Item->formID == CheckAgainstBase->formID)
		{
			// the source lev list is an item
			Output += CheckBase->GetEditorID();
			Output += " >";
			Output += CheckAgainstBase->GetEditorID();

			Result = false;
			break;
		}
		else if (Inner)
		{
			std::string TempStr = Output + CheckBase->GetEditorID();
			TempStr += " >";
			
			// recurse
			if (WalkForCircularPath(TempStr, Inner, Against) == false)
			{
				Output = TempStr;
				Result = false;
				break;
			}
		}
	}

	return Result;
}