Random-LUA-Script

In diesem Tutorial erkläre ich euch, wie man Subobjects an Einheiten per Zufall versteckt oder anzeigen lässt. Voraussetzung dafür ist natürlich ein Model mit vielen Waffen und Rüstungen als Subobjecte. Ich erkläre dies anhand der Morgul-Ork von The Dead Player.

Als erstes benötigt ihr diese zwei Dateien, zu finden in der DATA1.big:
data\scripts\scriptevents.xml
data\scripts\scripts.lua

Eine weitere Voraussetzung ist ein sauberes eincoden der MOrgul-Orks als Hordeneinheit im Spiel, ansonsten funktioniert dies hier nicht.

Wir beginnen in ihrer ini uns suchen diesen Pfad:
AIUpdateInterface

Ihr werdet jetzt den Behaviour finden und ändert diesen hierzu:
  Behavior = AIUpdateInterface ModuleTag_03
    AutoAcquireEnemiesWhenIdle	=	Yes
    MoodAttackCheckRate			=	20
    AILuaEventsList				= MordorMorgulOrcFunctions		;Modified by Lauri (was MordorFighterFunctions)
    MaxCowerTime				=	10000
    MinCowerTime				=	3000
    AttackPriority				= 	AttackPriority_Infantry
    BurningDeathTime				=	BURNINGDEATH_DURATION_INFANTRY
  End

Als nächstes geht ihr in das scriptevents.xml und fügt ganz unten dies ein:

    <EventList Name="MordorMorgulOrcFunctions" Inherit="MordorFighterFunctions">
		<!-- This contains events specific to the IsengardFighter. Kris -->
        <EventHandler EventName="OnCreated"				ScriptFunctionName="OnMordorMorgulOrcsCreated" DebugSingleStep="false"/>
    </EventList>

Jetzt geht ihr in das LUA-Script und fügt dies ein:

function OnMordorMorgulOrcsCreated(self)

	ObjectHideSubObjectPermanently( self, "weap01", true )
	ObjectHideSubObjectPermanently( self, "weap02", true )
	ObjectHideSubObjectPermanently( self, "weap03", true )
	ObjectHideSubObjectPermanently( self, "weap04", true )
	ObjectHideSubObjectPermanently( self, "weap05", true )
	ObjectHideSubObjectPermanently( self, "weap06", true )
	ObjectHideSubObjectPermanently( self, "weap07", true )
	
	ObjectHideSubObjectPermanently( self, "helmet01", true )
	ObjectHideSubObjectPermanently( self, "helmet02", true )
	ObjectHideSubObjectPermanently( self, "helmet03", true )
	ObjectHideSubObjectPermanently( self, "helmet04", true )
	
	ObjectHideSubObjectPermanently( self, "shield01", true )
	ObjectHideSubObjectPermanently( self, "shield02", true )
	ObjectHideSubObjectPermanently( self, "shield03", true )
	ObjectHideSubObjectPermanently( self, "shield04", true )
	ObjectHideSubObjectPermanently( self, "shield05", true )
	
	-- define the locals as random numbers
	local sword 	=	GetRandomNumber()
	local helmet 	=	GetRandomNumber()
	local shield 	=	GetRandomNumber()
	
	-- set the bow; note: we need one of them, so there's no "empty" possibility
	if sword <= 0.2 then
		ObjectHideSubObjectPermanently( self, "weap01", false )
	elseif sword <= 0.4 then
		ObjectHideSubObjectPermanently( self, "weap02", false )
	elseif sword <= 0.5 then
		ObjectHideSubObjectPermanently( self, "weap03", false )
	elseif sword <= 0.6 then
		ObjectHideSubObjectPermanently( self, "weap04", false )
	elseif sword <= 0.8 then
		ObjectHideSubObjectPermanently( self, "weap05", false )
	elseif sword <= 0.8 then
		ObjectHideSubObjectPermanently( self, "weap06", false )
	else
		ObjectHideSubObjectPermanently( self, "weap07", false )
	end
	
		-- set the bow; note: we need one of them, so there's no "empty" possibility
	if helmet <= 0.25 then
		ObjectHideSubObjectPermanently( self, "helmet01", false )
	elseif helmet <= 0.5 then
		ObjectHideSubObjectPermanently( self, "helmet02", false )
	elseif helmet <= 0.75 then
		ObjectHideSubObjectPermanently( self, "helmet03", false )
	else
		ObjectHideSubObjectPermanently( self, "helmet04", false )
	end
	
		-- set the bow; note: we need one of them, so there's no "empty" possibility
	if shield <= 0.15 then
		ObjectHideSubObjectPermanently( self, "shield01", false )
	elseif shield <= 0.3 then
		ObjectHideSubObjectPermanently( self, "shield02", false )
	elseif shield <= 0.5 then
		ObjectHideSubObjectPermanently( self, "shield03", false )
	elseif shield <= 0.65 then
		ObjectHideSubObjectPermanently( self, "shield04", false )
	elseif shield <= 0.80 then
		ObjectHideSubObjectPermanently( self, "shield05", false )
	else
		ObjectHideSubObjectPermanently( self, "shield_NOWAY", false )
	end
	
end

Hier erkennt ihr auf den ersten Blick nicht viel, bei genauerem Betrachten erkennt ihr aber, dass jedem Subobject ein Zufallswert zugeordnet ist. Wir gehen davon aus, das unser Grundwert 1.0 ist. Wenn das eine Subobject jetzt den Wert 0.65 erlangt werden die einen Subobjects gehidet und die anderen nicht.+
	local sword 	=	GetRandomNumber()
	local helmet 	=	GetRandomNumber()
	local shield 	=	GetRandomNumber()

Dies ist der wichtigste Bestandteil dieses Systems, über diesen sind die Waffen, Schilde und Rüstungen zugeordnet. Wenn ihr ein Model aufweist, welches nur bei einem Bereich verschiedene Varianten hat, so dürft ihr eben nur diesen Bereich angeben. Je nach Anzahl der Subobjecte müsst ihr den Zufallswert der zugeordneten Subobjecte so addieren lassen, damit am Ende 1.0 rauskommt. Wenn ihr also 4 Teile habt, sind die Werte: 0.25, 0.5, 0.75 und beim letzten kann es einfach weggelassen werden.
Probiert es ein wenig aus, viel Vergnügen dabei ;)

Ealendril der Dunkle

www.modding-union.com