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

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum