ExploreArea

» Siedler Map Source Forum » Siedler DEdK Script Forum » ExploreArea

Seiten: 1

Play4FuN
#1
20.01.2019 15:14
Beiträge: 704

ExploreArea

Aus tools.lua hab ich

function Tools.ExploreArea(_x, _y, _Range)
	local ViewCenter = Logic.CreateEntity(Entities.XD_ScriptEntity, _x, _y, 0, 1)
	Logic.SetEntityExplorationRange(ViewCenter, _Range)
	return ViewCenter
end


abgewandelt um es im MP auch für einzelne Spieler nutzbar zu machen. So sieht meine MP Version aus:

function MPTools_ExploreArea(_player, _pos, _range)
	local pos = GetPos(_pos)
	local ViewCenter = Logic.CreateEntity(Entities.XD_ScriptEntity, pos.X, pos.Y, 0, _player)
	Logic.SetEntityExplorationRange(ViewCenter, math.ceil(_range/100))
	LuaDebugger.Log(_player)
	LuaDebugger.Log(ViewCenter)
	return ViewCenter
end


Funktioniert. Nett. Aber: wenn ich dann folgendes aufrufe:

MPTools_ExploreArea(1, pos, 2000)
MPTools_ExploreArea(2, pos, 2000)


... (keine geteilte Sicht der beiden Spieler!) ... dann wird das Gebiet nur für einen der beiden Spieler aufgedeckt. Habe die Befehle vertauscht und festgestellt, dass immer der zuerst aufgerufene klappt, der zweite nicht.
Debugger Ausgabe ist beim zweiten Aufruf 0 - also keine Entity ViewCenter wurde dort erstellt...
Es sieht für mich jetzt so aus, als könne/wolle Siedler aus irgendeinem Grund keine zweite ScriptEntity an der selben Position erstellen.
Beleg:

local pos = GetPos("posCityGate")
	MPTools_ExploreArea(2, pos, 2000)
	MPTools_ExploreArea(1, {X = pos.X + 1, Y = pos.Y + 1}, 2000)

...funktioniert!

Wtf Siedler?

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#2
20.01.2019 17:32
Beiträge: 1472

Das ist mir auch schon aufgefallen. Zummindest scheint es deterministisch zu sein (das heißt es ist vorhersagbar was passiert). Einen Tick zu warten oder die Position leicht zu verändern ist das was ich dann immer mache.

MadShadow
#3
20.01.2019 17:36
Beiträge: 372

Ja, das ist mir auch schonmal aufgefallen.. ist wohl leider so.
Als Lösung könntest du in einem Table alle schon verwendeten Positionen mitspeichern oder per Logic.GetEntityAtPosition abfragen ob es da schon eine ScriptEntity gibt. Allerdings hat Logic.GetEntityAtPosition auch das Problem, dass nur jeweils eine Entity zurückgegeben wird, falls also auf der Position schon eine andere Entität ist. Villeicht hilft Logic.GetEntitiesInArea mit extrem kleiner Range um festzustellen ob da ne ScriptEntity ist.

Play4FuN
#4
20.01.2019 19:15
Beiträge: 704

Ok, also Position ändern geht wie ich gesehen habe.
Nen tick warten auch? Also hat es nichts damit zu tun, dass keine zweite ScriptEntity an der selben Stelle sein darf...

Das Vorhandensein der Funktion GetEntityAtPosition hat mich schon etwas stutzig gemacht (nur eine Rückgabe?), daher hatte ich sowas in der Art vermutet, als es mit geänderter Position dann ging...

Mir geht es ja nicht mal darum, herauszufinden, ob sich dort eine ScriptEntity befindet - ich will so oder so dort eine (mehrere) neue setzen

Na gut, dann ist das für mich abgehakt, seltsames Konzept

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

BalistiK
#5
24.01.2019 16:40
Beiträge: 70

Vielleicht, vielleicht auch nicht?

Da ich das selbe Verhalten bereits im Editor gesehen habe, unabhängig von scriptgebundenen Aktionen, scheinen es die Entwickler bewusst eingebaut zu haben, dass zwei Entities der selben Art auf den selben Koordinaten nicht existieren können, zumindest statische, und somit das neuer erzeugte Entitiy gelöscht wird.

Ich kann mir gut vorstellen, dass es eine Art "Failsave" darstellt, damit eine Karte nicht von Entities überschwemmt wird, sollte es irgendwo einen fehler im Code geben, bzw. die maximale Grenze der platzierbaren Entities nicht so schnell angekrazt wird, wenn zwei Entities nicht am selben Ort existieren dürfen. Die Entwickler hielten es dann aber auch nicht für nötig auch den Bereich um das Entity zu prüfen, da es ja mit pos.X+1 bzw. pos.Y+1 zu funktioneren scheint.

Ist nur meine Theorie, weiß nicht ob sie stimmt, kann es mir aber gut vorstellen.

Seiten: 1

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

Impressum