Zufallszahlen
» Siedler Map Source Forum » Siedler DEdK Script Forum » Zufallszahlen
Seiten: 1
Fire_Bird
|
#1 22.02.2015 13:19 Beiträge: 719 |
Zufallszahlen
Hallo,
Ich habe in meiner Map in der FMA als ersten Befehl
math.randomseed(XGUIEng.GetSystemTime())
stehen.
Wenn ich jetzt aber mit
local ranPosNum = math.random(1,10)
einen Zufallswert haben will, bekomm ich immer die selben Werte...
Was mache ich falsch?
Fire_Bird
Peter-FS
|
#2 22.02.2015 14:30 Beiträge: 1086 |
GetSystemTime gibt die Laufzeit der Siedler.exe in Sekunden wieder.
d.h. wenn du neu startest, bekommst du immer ca. die gleiche Zeit zurück.
Ich mulitpliziere die Zahl immer:
math.randomseed(XGUIEng.GetSystemTime()*9132)
Probiers mal aus.
Gruss Peter
____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!
yoq
|
#3 22.02.2015 14:59 Beiträge: 91 |
Nimm einfach das aktuelle Datum+Zeit zum Seed:
function InitRand() local seed = XGUIEng.GetSystemTime() string.gsub(Framework.GetSystemTimeDateString(), "%d+", function(n)seed=seed*n;end) math.randomseed(seed) end
____________________
S5 & S6: Lua Script Debugger (Thread) | bbaTool
S5: S5Hook (Thread) | S5 GUI Editor | S5 Grafikupgrade + nVidia fix | Win10 Creators Update
totalwarANGEL
|
#5 22.02.2015 22:03 Beiträge: 2123 |
Oder du sorgst einfach dafür, dass die Zufallsbasis zu einem bestimmten Punkt in der Handlung erstellt wird. Jeder Spieler wird i.d.R. zu einem etwas anderen Zeitpunkt in der Handlung so weit fortgeschritten sein. Dann reicht ein simples Logic.GetTimeMs
____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.
wilma456
|
#6 23.02.2015 13:21 Beiträge: 460 |
Klick hier und scroll runter zum Beitrag von mcb.
____________________
Schlacht um Crawford
Wilmasmod
mcb
|
#7 23.02.2015 14:29 Beiträge: 1472 |
@wilma: GetRandom stammt nicht von mir.
Ich hab aber auch eine für mich angepasste Version:
--- GetRandom mcb 1.0 (Original ???) -- Gibt eine Pseudozufallszahl zwischen _min und _max zurück. -- Ist _max nicht gesetzt, zwischen 1 und _min. -- Wird ein numerisches table übergeben, wird ein pseudozufälliger Eintrag zurückgegeben. -- -- Benötigt: -- nix function GetRandom(_min, _max) if type(_min)=="table" then return _min[GetRandom(table.getn(_min))] end if not _max then _max = _min _min = 1 end if not gvRandomseed then gvRandomseed = true local seed = XGUIEng.GetSystemTime() local str = Framework.GetSystemTimeDateString() for i=1, string.len(str) do seed = seed * string.byte(str, i, i) end math.randomseed(seed) end assert(type(_min)=="number" and type(_max)=="number") return math.random(_min, _max) end
AdeBont
|
#8 24.02.2015 21:12 Beiträge: 666 |
I'm just using math.random, work perfect, every time another value returned.
____________________
AdB
---------------------------------
Now faith is the substance of things hoped for,
the evidence of things not seen.
Heb 11:1
Play4FuN
|
#9 26.02.2015 18:58 Beiträge: 704 |
In this case it doesnt primary matter if the next random number is different! In our issue its about getting a different seed for each game. Because if you note down some random numbers in one game, quit and start the same map again you dont want to have the same values like in the last game. Got it?
Randomly created numbers arent so effective when they are the same every time you start the map
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Seiten: 1