Inhaltsverzeichnis
Grafikeffekte
Grafikeffekte sind, teilweise von Sounds begleitete, Animationen, die auf dem Bildschirm dargestellt werden.
Die Effekte selber beeinflussen das Spielgeschehen nicht, sie werden nur für den Spieler angezeigt, haben aber keine Auswirkung auf die Spielwelt.
Mit diesen Effekten kann man Zwischensequenzen oder anderen Aktionen im Spiel noch mehr Effekt verleihen
Anwendung
Möglich sind beispielsweise Explosionen, Staubwolken, Blitze oder Feuer.
Einige Effekte halten nur wenige Sekunden, andere hingegen bis sie beendet werden.
Diese Zeile erzeugt eine einfache Explosion an X=500 und Y=700. Die SpielerID ist 1.
Logic.CreateEffect( GGL_Effects.FXExplosion, 500, 700, 1 );
Die SpielerID ist meisstens egal. In einigen Fällen wird jedoch dem Effekt darüber eine Farbe zugeordnet, wie in diesem Beispiel:
local pos = GetPosition( "roter_strahl" ); Logic.CreateEffect( GGL_Effects.FXDie, pos.X, pos.Y, 2 );
Hier wird an der Position „roter_strahl“ eben jener Effekt erzeugt, der normalerweise angezeigt wird, wenn eine Einheit von Spieler 2 stirbt.
Diese Zeile erzeugt ein Feuer. Es bleibt bestehen, bis es beendet wird. Daher muss man sich, wie beispielsweise bei Jobs oder Tributen auch, die ID merken.
effectID = Logic.CreateEffect( GGL_Effects.FXFire, 1000, 1000, 2 );
Später kann man dann den Effekt (ruckartig) mit dieser Zeile wieder entfernen:
Logic.DestroyEffect( effectID );
Achtung: Nicht alle Effekte sind für die Verwendung durch Scripte vorgesehen. Somit verursachen einige einen Absturz des Spiels.
Eine weitere Liste findet ihr in der Referenz.
Grafische Übersicht
Die Sichtbaren Effekte sind hier grafisch dargestellt. Es handelt sich um Animationen, daher sollen diese Screenshots nur eine grobe Übersicht geben:
Auflistung aller Effekte
Hier als Code in einem Table mit String wie ich die Effekte grafisch gezogen habe per Screenshot.
Im Code ausgeklammerte Effekte führen zum Absturz des Spiels!
TableGGL_Effects = { {GGL_Effects.FXArrow ,'FXArrow'}, --{GGL_Effects.FXBalistaTowerArrow ,'FXBalistaTowerArrow'}, {GGL_Effects.FXBuildingSmoke ,'FXBuildingSmoke'}, {GGL_Effects.FXBuildingSmokeLarge ,'FXBuildingSmokeLarge'}, {GGL_Effects.FXBuildingSmokeMedium ,'FXBuildingSmokeMedium'}, {GGL_Effects.FXBulletRifleman ,'FXBulletRifleman'}, --{GGL_Effects.FXCannonBall ,'FXCannonBall'}, --{GGL_Effects.FXCannonBallShrapnel ,'FXCannonBallShrapnel'}, {GGL_Effects.FXCannonFire ,'FXCannonFire'}, --{GGL_Effects.FXCannonTowerBall ,'FXCannonTowerBall'}, {GGL_Effects.FXCavalryArrow ,'FXCavalryArrow'}, {GGL_Effects.FXChopTree ,'FXChopTree'}, {GGL_Effects.FXChopTreeDead ,'FXChopTreeDead'}, {GGL_Effects.FXChopTreeInWinter ,'FXChopTreeInWinter'}, {GGL_Effects.FXCrossBowArrow ,'FXCrossBowArrow'}, {GGL_Effects.FXCrossBowCavalryArrow ,'FXCrossBowCavalryArrow'}, {GGL_Effects.FXCrushBuilding ,'FXCrushBuilding'}, {GGL_Effects.FXDarioFear ,'FXDarioFear'}, {GGL_Effects.FXDestroyTree ,'FXDestroyTree'}, {GGL_Effects.FXDie ,'FXDie'}, {GGL_Effects.FXDieHero ,'FXDieHero'}, {GGL_Effects.FXExplosion ,'FXExplosion'}, {GGL_Effects.FXExplosionPilgrim ,'FXExplosionPilgrim'}, {GGL_Effects.FXExplosionShrapnel ,'FXExplosionShrapnel'}, {GGL_Effects.FXExtractStone ,'FXExtractStone'}, {GGL_Effects.FXFire ,'FXFire'}, {GGL_Effects.FXFireLo ,'FXFireLo'}, {GGL_Effects.FXFireMedium ,'FXFireMedium'}, {GGL_Effects.FXFireSmall ,'FXFireSmall'}, {GGL_Effects.FXKalaArrow ,'FXKalaArrow'}, {GGL_Effects.FXKalaPoison ,'FXKalaPoison'}, {GGL_Effects.FXKerberosFear ,'FXKerberosFear'}, {GGL_Effects.FXLightning ,'FXLightning'}, {GGL_Effects.FXMaryDemoralize ,'FXMaryDemoralize'}, {GGL_Effects.FXMaryPoison ,'FXMaryPoison'}, {GGL_Effects.FXNephilimFlowerDestroy ,'FXNephilimFlowerDestroy'}, {GGL_Effects.FXRain ,'FXRain'}, {GGL_Effects.FXSalimHeal ,'FXSalimHeal'}, --{GGL_Effects.FXShotRifleman ,'FXShotRifleman'}, {GGL_Effects.FXSnow ,'FXSnow'}, {GGL_Effects.FXTemplarAltarEffect ,'FXTemplarAltarEffect'}, {GGL_Effects.FXTerrainPointer ,'FXTerrainPointer'}, {GGL_Effects.FXWeathermachineFakeFX ,'FXWeathermachineFakeFX'}, {GGL_Effects.FXYukiFireworksFear ,'FXYukiFireworksFear'}, {GGL_Effects.FXYukiFireworksJoy ,'FXYukiFireworksJoy'}, {GGL_Effects.FXYukiShuriken ,'FXYukiShuriken'} }
Comfort
Wer möchte, kann sich das Erstellen von Effekten erleichtern. Dazu wird dieser Code benötigt:
function CreateEffect( _player, _type, _position ) assert(type(_player) == "number" and _player >= 1 and _player <= 8 and type(_type) == "number", "fatal error: wrong input: _player or _type (function CreateEffect())"); assert((type(_position) == "table" and type(_position.X) == "number" and type(_position.Y) == "number") or type(_position) == "number" or type(_position) == "string", "fatal error: wrong input: _position (function CreateEffect())"); if type(_position) == "table" then assert(_position.X >= 0 and _position.Y >= 0 and _position.X < Logic.WorldGetSize() and _position.Y < Logic.WorldGetSize(), "error: wrong position-statement (function CreateEffect())" ); local effect = Logic.CreateEffect(_type, _position.X, _position.Y, _player); return effect; elseif type(_position) == "string" then local id = GetEntityId(_position); assert(IsExisting(id), "error: entity is dead or not existing (function CreateEffect())"); local position = GetPosition(id); local effect = Logic.CreateEffect(_type, position.X, position.Y, _player); return effect; else assert(IsExisting(_position), "error: entity is dead or not existing (function CreateEffect())"); local position = GetPosition(_position); local effect = Logic.CreateEffect(_type, position.X, position.Y, _player); return effect; end end function DestroyEffect( _effect ) assert(type(_effect) == "number", "fatal error: wrong input: _effect (function DestroyEffect()"); Logic.DestroyEffect( _effect ); end
Hier finden viele Fehler-Prüfungen statt.
Außerdem übernehmen die Funktionen viele Dinge für einen. So lautet der oben genannte Aufruf
local pos = GetPosition( "roter_strahl" ); Logic.CreateEffect( GGL_Effects.FXDie, pos.X, pos.Y, 2 );
jetzt nur noch
CreateEffect(2, GGL_Effects.FXDie, "roter_strahl");