Page 1 of 1

Lua Script Fragen "Class"

Posted: Wed Jan 03, 2018 12:13 pm
by Dimer24
Hallo

Mein Script:
-- BaleDestroyerTrigger2 class
--
-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
--
-- Geaender von: Dimer24
-- 03.01.2017
print ("")
print (" [ 09] -> ***** BaleDestroyerTrigger2 *****")
print (" [ 10] -> Script wird gestarte")
print ("")


BaleDestroyerTrigger2 = {};
print ("")
print (" [ 14] -> BaleDestroyerTrigger2 Tabelle wurde erstellt")
print (" [ 15] ---> Ausgabe der Tabelle -- BaleDestroyerTrigger2")
DebugUtil.printTableRecursively(BaleDestroyerTrigger2," --",0,5)
print ("")

print ("")
print (" [ 20] -> Ausgabe der Tabelle -- BaleDestroyerTrigger2_mt")
BaleDestroyerTrigger2_mt = Class(BaleDestroyerTrigger2);
print (" [ 22] -> BaleDestroyerTrigger2_mt Tabelle wurde erstellt")
print (" [ 23] ---> Ausgabe der Tabelle -- BaleDestroyerTrigger2")
DebugUtil.printTableRecursively(BaleDestroyerTrigger2," --",0,5)
print ("")

print (" [ 26] ---> Ausgabe der Tabelle -- BaleDestroyerTrigger2_mt")
DebugUtil.printTableRecursively(BaleDestroyerTrigger2_mt," --",0,5)
print ("")

InitObjectClass(BaleDestroyerTrigger2, "BaleDestroyerTrigger2");

function BaleDestroyerTrigger2.onCreate(id)
g_currentMission:addNonUpdateable(BaleDestroyerTrigger2:new(id));

end;

function BaleDestroyerTrigger2:new(id)
print (" -->>> new (id): ".. id)
DebugUtil.printTableRecursively(g_currentMission, "." , 0, 2);
local self = {};
setmetatable(self, BaleDestroyerTrigger2_mt);
self.triggerId = id;
addTrigger(self.triggerId, "TriggerCallback", self);
self.isBaleDestroyerTrigger2 = true;
self.isEnabled = true;
self.appearsOnPDA = Utils.getNoNil(getUserAttribute(id, "appearsOnPDA"), true)
if self.appearsOnPDA then
local mapPosition = id
local mapPositionIndex = getUserAttribute(id, "mapPositionIndex")
if mapPositionIndex ~= nil then
mapPosition = Utils.indexToObject(id, mapPositionIndex)
if mapPosition == nil then
mapPosition = id
end
end
local x, _, z = getWorldTranslation(mapPosition)
self.mapHotspot = g_currentMission.ingameMap:createMapHotspot("baleSellTrigger", "", nil, getNormalizedUVs({8, 520, 240, 240}), {1,1,1,1}, x, z, nil, nil, false, false, false, 0, nil, MapHotspot.CATEGORY_TRIGGER)
end
return self;
end;

function BaleDestroyerTrigger2:delete()
removeTrigger(self.triggerId);
if self.mapHotspot ~= nil then
g_currentMission.ingameMap:deleteMapHotspot(self.mapHotspot)
end
end;

function BaleDestroyerTrigger2:deleteMap()
end;
-- da wir das Script mit Mapstart gestartet haben, löschen wir das Script auch beim Beenden der Map

function BaleDestroyerTrigger2:keyEvent()
end;
-- diese Funktion registriert Tastatureingaben, wir benötigen sie zwar nicht, müssen sie aber hier mit einfügen, Erklärung folgt ***

function BaleDestroyerTrigger2:mouseEvent()
end;
-- diese Funktion registriert Mausbewegungen und -eingaben. Hier gilt das gleiche wie mit der oberen Funktion ***

function BaleDestroyerTrigger2:update()
end;

function BaleDestroyerTrigger2:draw()
-- string = "Ein Text zum Probeausgeben";
-- die Variable "string" enthält den Text, den wir auf dem Bildschirm ausgeben möchten

-- renderText(0,0.05,0.02,string);
end;

g_onCreateUtil.addOnCreateFunction("BaleDestroyerTrigger2", BaleDestroyerTrigger2.onCreate);

function BaleDestroyerTrigger2:TriggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
if self.isEnabled then
if onEnter then
-- this happens if a compound child of a deleted compound is entering
if otherActorId ~= 0 then
local object = g_currentMission:getNodeObject(otherActorId);
if object ~= nil then
if object:isa(Bale) and object:getCanBeSold() then
playSample(g_currentMission.cashRegistrySound, 1, 1, 0);
-- TODO: display a particle effect

if g_currentMission:getIsServer() then
local difficultyMultiplier = g_currentMission.missionInfo.sellPriceMultiplier;
local baseValue = object:getValue();
g_currentMission:addSharedMoney(baseValue * difficultyMultiplier * 1.8, "soldBales");
g_currentMission:addMoneyChange(baseValue * difficultyMultiplier * 1.8, FSBaseMission.MONEY_TYPE_SINGLE, true, g_i18n:getText("finance_soldBales"));
object:delete();
end;

end;
else
if g_currentMission.nodeToVehicle[otherActorId] == nil then
-- there is nothing that could end up here, since physics objects are an object, thus this could only introduce bugs
-- delete(otherActorId);
end;
end;
end;
end;
end
end;
Fragen Block 1:

Wenn diese Zeile ausgeführt wird die Tabelle BaleDestroyerTrigger2 erstellt.
BaleDestroyerTrigger2 = {};

Wo wird diese Tabelle eingetragen?
Ist es möglich dass mit DebugUtil.printTableRecursively(g_currentMission.XXX, "." , 0, 2); angezeigt werden kann wo die Tabelle eingetragen wurde?

Mir ist bewusst dass ich die Tabelle mit DebugUtil.printTableRecursively(BaleDestroyerTrigger2," --",0,1) anzeigen kann.
Ich möchte nicht wissen welche Einträge die Tabelle hat, sondern ich möchte wissen wo die Tabelle angehängt wurde.


Fragen Block 2:

BaleDestroyerTrigger2_mt = Class(BaleDestroyerTrigger2);
Ist es richtig, dass bei diesem Aufruf die Funktion Class ausgeführt wird:
Registriert diese Funktion mein Script als function?


Fragen Block 3:

function BaleDestroyerTrigger2:new(id)
Wird diese function für jeden Trigger, dem ich unter User Attributes den Eintrag on Create eingefügt habe ausgeführt.

Ist es richtig dass durch diese Zeile jeder Trigger eine eigene ID erhält?

Hat jemand Lust und die Nerven mir das zu beantworten? :hmm: :hi:

Liebe Grüsse

Dimer24

Re: Lua Script Fragen "Class"

Posted: Mon Jan 08, 2018 11:42 am
by mx11
HI Dimer,

Block 1:
BaleDestroyerTrigger2 = {};
Instanziert (erstellt) ein Objekt der Klasse.

Diese Klassen werden in der Regel "global" erzeugt, d.h. auf der gleichen Ebene wie g_currentMission

Die Table müsste somit unter _G.BaleDestroyerTrigger2 zugreifbar sein.

Block 2:
Dient zur Registierung der Klasse im der MetaTable (http://lua-users.org/wiki/ObjectOrientationTutorial)

Block 3:
Ja das ist die ID des Triggers
self.triggerId = id;
addTrigger(id, "triggerCallback", self);
https://gdn.giants-software.com/documen ... class=3378

Grüße
MX11

Re: Lua Script Fragen "Class"

Posted: Wed Jan 10, 2018 10:10 am
by Dimer24
Hallo mx11

Vielen Dank für die Infos.

Werde mir dass alles anschaue.

Gruss

Dimer24