SimpleJob ohne globale Funktion
» Siedler Map Source Forum » Siedler DEdK Script Forum » SimpleJob ohne globale Funktion
Seiten: 1
CytoPlays
|
#1 29.05.2018 14:20 Beiträge: 2 |
SimpleJob ohne globale Funktion
Hey,
ich wollte fragen ob es möglich ist einen SimpleJob eine Funktion ausführen zu lassen, die nicht global definiert ist. Habe es so probiert, aber man muss wohl einen String übergeben.
StartSimpleJob(function() Message("test") end)
Der_Deutsche
|
#2 29.05.2018 15:56 Beiträge: 349 |
StartSimpleJob (DeineFunktion) -- In die FirstMapAction DeineFunktion() Message("test") end
____________________
Nachbau von Siedler 5 Lobbys "Ubi.Com"
Updatelösungen Siedler 5 Patch 1.06
Creators Update Lösung Windows 10
Siedler 5
CytoPlays
|
#3 29.05.2018 16:02 Beiträge: 2 |
Zitat von Der_Deutsche:
StartSimpleJob (DeineFunktion) -- In die FirstMapAction DeineFunktion() Message("test") end
Mir ging es darum, wie man mit einem SimpleJob Code ausführen kann, der NICHT in einer globalen Funktion ist. Trotzdem danke für die Mühe.
totalwarANGEL
|
#4 29.05.2018 16:05 Beiträge: 2123 |
Du könntest ja Siedler 6 mappen. Da gibt es von Haus aus StartSimplpeJobEx, was genau das macht, was du willst.
Du könntest auch fragen, ob dir jemand den Quellcode von StartSimplpeJobEx gibt und ihn auf Siedler 5 anpassen.
____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.
mcb
|
#5 29.05.2018 16:41 Beiträge: 1472 |
Dazu gibt es einen Trigger-Fix:
Die ursprüngliche variante von Chromix: http://www.siedler-games.de/si...i/doku.php/utilscripts:cxtools
Und eine neuere von mir: http://www.siedler-maps.de/forum.php?action=showthread&threadid=19074
Einen von beiden einfach ins Script kopieren und dann funktioniert es. Außerdem kannst du tables/funktionen als Parameter übergeben.
Peter-FS
|
#6 30.05.2018 10:03 Beiträge: 1086 |
Sinn und Zweck
Ich sehe darin keinen Vorteil.
Was bringt das?
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
mcb
|
#7 30.05.2018 12:39 Beiträge: 1472 |
Es ist Softwaretechnisch deutlich schöner weniger globale Variablen zu benutzen. Außerdem macht es Modularisierung deutlich einfacher.
Beispiel:
function foo() counter = 5 StartSimpleJob("counting") end function counting() decrease() Message(counter) if isEnd() then return true end end function isEnd() return counter <= 0 end function decrease() counter = counter - 1 end
Du siehst ohne den Code kaum zusammenhang zwischen den 4 Funktionen und der Variable. Außerdem sind die Variablen mehrdeutig benannt, sie könnten genausogut von anderen Funktionen verwendet werden.
bar = {} function bar:foo() local t = {counter = 5} StartSimpleJob(self.counting, self, t) end function bar:counting(t) self:decrease(t) Message(t.counter) if self:isEnd(t) then return true end end function bar:isEnd(t) return t.counter <= 0 end function bar:decrease(t) t.counter = t.counter - 1 end
Das ist schon deutlich besser. Nur noch eine globale Variable bar (auch wenn sie einen besseren Namen braucht) und alle Funktionen und Variablen sind jetzt deutlich als modul erkennbar. Außerdem lässt sich der Job mehrmals parallel ausführen, da alle dafür notwendigen Variablen nur noch als Parameter übergeben werden. (Noch besser wird es, wenn du im foo noch ein CopyTable/metatable einbaust, dann bist du noch näher beim OOP.
Peter-FS
|
#8 03.06.2018 12:44 Beiträge: 1086 |
OOP
Klassen und OOP sind eine super Sache, wenn sie sinnvoll eingesetzt werden. In diesem Fall und bei Siedler nicht unbedingt nötig, man kann hier so ziemlich alles auf die alte Tour lösen.
Ich habe aber auch mit GW-Basic und QBasic angefangen, also ein Urgestein von Programmierer.
Allerdings weiß ich OOP in anderen Programmiersprachen zu schätzen und verwende diese auch.
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
mcb
|
#9 03.06.2018 16:02 Beiträge: 1472 |
Klar ist das nicht überall notwendig, aber wenn dein Script aus 10000 Zeilen geänderten Spielmechaniken besteht, kommst du ohne Modularisierung nicht weit
Ich hab mit Java/C/C++ angefangen. Je größer/komplizierter ein Projekt wird desdo mehr braucht man OOP. Das mag für die meisten Mapscripte sogar ohne Modularisierung funktionieren, aber bei meinen definitiv nicht.
Seiten: 1