Umrechnung von Spiel- und Skriptwerten

» Siedler Map Source Forum » Siedler DEdK Script Forum » Umrechnung von Spiel- und Skriptwerten

Seiten: 1

Messoras
#1
16.08.2018 16:30
Beiträge: 84

Umrechnung von Spiel- und Skriptwerten

Hallo mal wieder,
Ich bin aktuell mit dem Versuch beschäftigt eine Teleportfunktion zu bauen, die die transportierten Einheiten nicht zerlegt und neu baut, sondern ihre ScriptingValues direkt ändert.

Mein Problem ist, dass ich keine Normalform sehe, mit der ich eine Funktion für die Umrechnung erstellen könnte.
Vielleicht bin ich auch einfach nicht begabt genug um mit sowas zu rechnen, aber aus Datenpaaren, wie

Pos     Script-Value
0	0
1	1065353216
100	1120403456
9000	1175232512
12000	1178304512
13000	1179328512
17000	1183109120


kann ich keine Funktion bilden...
Ich habe im Forum mehrfach gelesen, dass Bobby wohl mal Float2Int und Int2Float Funktionen hatte, die diese Umrechnung hinkriegen.
Leider kann ich die entsprechenden (echt irreführend benannten) Funktionen nirgends finden. Kann mir da wohl jemand weiterhelfen?

Gruß,
Messoras

PS: Für mich wäre eine Float2Int Funktion schlichtweg

function Float2Int(x) return math.floor(x) end



____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

mcb
#2
16.08.2018 17:31
Beiträge: 1472

Das habe ich auch schon versucht, führt aber zu mehr crashes als erfolgreichen teleportationen.

Die Int2Float/Float2Int Funktionen konvertieren das int (Zahl mit festem Komma) das aus den ScriptingValues kommt in ein Siedler-Nutzbares float (Fließkommazahl, wenn du mehr dazu wissen willst: IEEE 754)

Die Funktionen sind allerdings schon veraltet, der Hook macht das ganze deutlich komfortabler.

Falls du die Funktionen trotzdem haben willst, sieh hier: http://www.siedler-maps.de/for...rum/Scripting-Values-18361.htm

(Falls du was spezifisches willst, könnte schon in meiner Funktionssammlung sein: http://www.siedler-maps.de/for...Script-Forum/mcbEMan-21315.htm, da ist auch ein Link zum hook bitbucket repo)

Messoras
#3
16.08.2018 17:58
Beiträge: 84

Im Grunde suche ich nur nach einer vernünftigen Teleport-Funktion, damit die teleportierten Einheiten kein Blutbad hinterlassen und mit gleichem Leben, sowie gleicher Erfahrungsstufe und Modifikationen wieder auftauchen.
Da ich in meiner aktuellen Map (wer kennt noch Line-Tower-Wars?) mit vielen modifizierten Einheiten arbeite, ist es ein gigantischer Aufwand nach jeder Teleportation erneut eine Mod-Funktion aufzurufen, die anhand von Typ und Skriptnamen der Einheiten erneut alles verändert. Zudem dauert die Modifizierung immer einen Moment, was dazu führt, dass Endbosse mal eben ausversehen direkt mit einem Treffer umgeklatscht werden, oder Treffer wegen Unverwundbarkeit verschwendet werden nachdem sie teleportiert wurden.

Kannst du mir einen Teleport anbieten, bei dem die Einheit nicht erst mit DestroyEntity zerlegt und anschließend neu erzeugt wird?

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

mcb
#4
16.08.2018 18:29
Beiträge: 1472

Leider nicht, wie gesagt, die meisten meiner Versuche endeten in crashes. Nur über kurze Entfernungen und im selben Sector hatte ich einen gewissen Erfolg.
Was ich da gemacht hatte, war:
- obj+22 (sv -36) auf pos.X setzen
- obj+23 (sv -37) auf pos.Y setzen
- Move nach pos

Wie veränderst du denn die Entities?

Messoras
#5
16.08.2018 18:41
Beiträge: 84

Hab jetzt mit folgender Funktion auch diverse Crashes ausgelöst:

function SetPositionTraceless(_entity,_target)
	assert(type(_target) == "string" or type(_target) == "number","SetPositionTraceless: _target must be String or Number")
	assert(type(_entity) == "string" or type(_entity) == "number","SetPositionTraceless: _entity must be String or Number")
	local tg
	if (type(_target) == "string") then
		tg = GetID(_target)
	elseif (type(_target) == "number") then
		tg = _target
	end
	local id
	if (type(_entity) == "number") then
		id = _entity
	elseif (type(_entity) == "string") then
		id = GetID(_entity)
	end
	Logic.SetEntityScriptingValue(id,-36,Logic.GetEntityScriptingValue(tg,-36))
	Logic.SetEntityScriptingValue(id,-35,Logic.GetEntityScriptingValue(tg,-35))
	Logic.SetEntityScriptingValue(id,8,Logic.GetEntityScriptingValue(tg,-36))
	Logic.SetEntityScriptingValue(id,9,Logic.GetEntityScriptingValue(tg,-35))
	if Logic.IsLeader(id) == 1 then
		local troops = {Logic.GetSoldiersAttachedToLeader(id)}
		for i=2,troops[1],1 do
			SetPositionTraceless(troops[i],pos)
		end
	end
end



Scheint manchmal zu funktionieren, manchmal wird die Einheit dabei komplett unsichtbar und immer stürzt das Spiel nach einer Zeit ab.

Die Veränderungen der Entities habe ich hauptsächlich mit deiner EMan 0.2.1b durchgeführt.
Es werden unter anderem Overheadwidgets, Truppenstärke, Angriffsschaden, Rüstung und die Größe der Entities verändert. Gerade wegen Overheadwidgets und Truppenstärke muss man aufpassen, weil ein Schaaf, das als Leader behandelt wird ganz schnell mal das Spiel abstürzen lässt.

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

mcb
#6
16.08.2018 18:53
Beiträge: 1472

Da fehlt noch das Move (Wenn du das nicht benutzt, springt das Model andauernd zwischen der alten und neuen Position hin und her). Außerdem kannst du das mit dem Hook einfacher machen (den hast du ja schon, wenn du mcbEMan benutzt).

Veränderungen:
-Truppenstärke (LeaderMaxSoldiers) sollte sofort sein und beim Schaf ne Fehlermeldung produzieren.
-Overheadwidget ist mir auch aufgefallen, das das mehrmals gesetzt werden muss. Gibt glaub ich nix, was man da tun kann.
-Scale sollte auch sofort sein
-Damage/Armor im neuesten hook kannst du im entityhurtentity trigger den Schaden auslesen und ändern. Wäre ne alternative, bei der du nicht auf die mcbEMan Funktionen warten musst.

Messoras
#7
16.08.2018 19:01
Beiträge: 84

Zitat von mcb:
Da fehlt noch das Move (Wenn du das nicht benutzt, springt das Model andauernd zwischen der alten und neuen Position hin und her). Außerdem kannst du das mit dem Hook einfacher machen (den hast du ja schon, wenn du mcbEMan benutzt).

Veränderungen:
-Truppenstärke (LeaderMaxSoldiers) sollte sofort sein und beim Schaf ne Fehlermeldung produzieren.
-Overheadwidget ist mir auch aufgefallen, das das mehrmals gesetzt werden muss. Gibt glaub ich nix, was man da tun kann.
-Scale sollte auch sofort sein
-Damage/Armor im neuesten hook kannst du im entityhurtentity trigger den Schaden auslesen und ändern. Wäre ne alternative, bei der du nicht auf die mcbEMan Funktionen warten musst.



Klar könnte man das iwie schon hinkriegen, aber dann hab ich immernoch das Problem, dass da, wo die Entities despawnen ein Blutbad hinterlassen wird.
Gibt es nicht irgendwo eine Methode Entities zu entfernen, ohne, dass sie Dinge hinterlassen und ein Sterbe-Trigger aktiviert wird?
Ich benutze für die Map meinen violent mod, der gespawnte Reste direkt entdeckt und mit Knochen und Vertexfarben schmückt...

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

mcb
#8
16.08.2018 19:51
Beiträge: 1472

Ich glaube, wenn irgendein baum zum ResourceTree wird, gibt es keinen Trigger...
Einfachste Möglichkeit wäre, dir in einem table zu merken, welche id du gerade Teleportierst und die im Trigger zu ignorieren,

Ludwig
#9
16.08.2018 21:38
Beiträge: 440

Zitat von Messoras:

Klar könnte man das iwie schon hinkriegen, aber dann hab ich immernoch das Problem, dass da, wo die Entities despawnen ein Blutbad hinterlassen wird.
Gibt es nicht irgendwo eine Methode Entities zu entfernen, ohne, dass sie Dinge hinterlassen und ein Sterbe-Trigger aktiviert wird?
Messoras


Wenn Dich die hinterlassenen Waffen stören, da gibt es doch seit langem die Funktion 'AufraeumenWaffen(_pos, _range)' die beseitigt alle Hinterlassenschaften der gespawneten Trupps. Hat, so glaube ich, wohl mal Flodder zuerst angewendet. Wenn es Dich interessiert dann findest Du sie auch in meiner letzten Map Das einsame Dorf.
Gruß
Ludwig

Messoras
#10
16.08.2018 22:15
Beiträge: 84

Zitat von Ludwig:

Zitat von Messoras:

Klar könnte man das iwie schon hinkriegen, aber dann hab ich immernoch das Problem, dass da, wo die Entities despawnen ein Blutbad hinterlassen wird.
Gibt es nicht irgendwo eine Methode Entities zu entfernen, ohne, dass sie Dinge hinterlassen und ein Sterbe-Trigger aktiviert wird?
Messoras


Wenn Dich die hinterlassenen Waffen stören, da gibt es doch seit langem die Funktion 'AufraeumenWaffen(_pos, _range)' die beseitigt alle Hinterlassenschaften der gespawneten Trupps. Hat, so glaube ich, wohl mal Flodder zuerst angewendet. Wenn es Dich interessiert dann findest Du sie auch in meiner letzten Map Das einsame Dorf.
Gruß
Ludwig



Also hinterlassene Waffen aufräumen kann ich auch xD
Habe nur einen Trigger aktiviert, der sobald eine Einheit stirbt, das Gebiet erstmal schön mit Blut und Gedärmen eindeckt ;D
Bin noch am basteln... Könnte mir halt einen Haufen Arbeit ersparen, wenn ich einfach das DestroyEntity umgehen und die Entities irgendwie anders entfernen könnte.

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

Seiten: 1

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

Impressum