Tools.AttachSoldiersToLeader laggt

» Siedler Map Source Forum » Siedler DEdK Script Forum » Tools.AttachSoldiersToLeader laggt

Seiten: 1

Riesenadler
#1
03.02.2019 13:45
Beiträge: 19

Tools.AttachSoldiersToLeader laggt

Moin.

Jedes mal, wenn die Funktion

 Tools.AttachSoldiersToLeader(_leaderid, _soldierid) 

aufgerufen wird, friert kurz das Bild ein. Das Gleiche bei

 
GlobalMissionScripting.AttachSoldiersToLeader(_leaderid, _soldierid)

und

GlobalMissionScripting_AttachSoldiersToLeader(_leaderid, _soldierid)


Bei

Tools.CreateSoldiersForLeader(_leaderid, _soldieramount)


laggt es nicht, dafür werden die Soldaten immer im Hauptmann gespawnt.

Gibt es eine Möglichkeit, Soldaten an einer beliebigen Stelle zu erschaffen und diese einem Hauptmann zuzuweisen, ohne, dass es laggt?

Danke im voraus.

____________________
"Wer im Glashaus sitzt, sollte sich im Dunkeln ausziehen."
- Ein schlauer Mensch

Play4FuN
#2
03.02.2019 14:18
Beiträge: 704

Ich gehe stark davon aus, dass die attach Funktion so konzipiert wurde, dass der Soldat NAH am Hauptmann steht. Dementsprechend würde mich es nicht wundern, wenn der attach Versuch etwas aufwendig ist, wenn die Distanz groß ist. Daher die Frage: was hast du denn vor?

GlobalMissionScripting ruft zudem nix anderes auf als Tools.AttachSoldiersToLeader, also da wirst du auch keinen Unterschied sehen.
Das wiederum ruft (soldiers) mal Logic.LeaderGetOneSoldier( LeaderID ) auf ...

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Riesenadler
#3
03.02.2019 17:32
Beiträge: 19

Was hab ich vor?
Ich will Hauptmänner neue Soldaten aus einem Gebäude wie aus einer Kaserne rekrutieren lassen, wobei dieses Gebäude kein Militärgebäude sein muss. Ich will aus Gründen auch nicht einfach einer Kaserne ein anderes Model geben.

Zur großen Distanz:
Es laggt auch bei sehr kleinen Distanzen.

Wenn man mit Hauptmännern neue Soldaten rekrutiert und ihn dann wegschickt, führt es auch nicht zu Problemen.

____________________
"Wer im Glashaus sitzt, sollte sich im Dunkeln ausziehen."
- Ein schlauer Mensch

mcb
#4
04.02.2019 17:07
Beiträge: 1472

Das Problem dabei ist, das alles worauf wir in Lua zugruff haben Logic.LeaderGetOneSoldier ist, wasn nur den Leader als Parameter hat. Wenn du an der Kaserne kaufst, sind dem C++ code sowohl leader als auch soldier bekannt und es muss nur die Verbindung hergestellt werden, nicht die ganze map nach nem passenden soldier abgesucht werden.

Play4FuN
#5
04.02.2019 17:15
Beiträge: 704

Mh, ganz sicher, dass das Ruckeln daran liegt? Ich habe nämlich für eine neue Map meine auto-nachrekrutieren Funktion erweitert sodass man auch bei verbündeten Militärgebäuden auffüllen kann ... dort verwende ich auch diese Funktion und ich habe keine Laggs festgestellt.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#6
04.02.2019 18:48
Beiträge: 1472

Ist nur ne Vermutung von mir, aufgrund von Beobachtungen wie Siedler sonst so funktioniert.

Der_Deutsche
#7
05.02.2019 23:24
Beiträge: 349

Es könnte sein, dass die Abfrage dazu viel zu kompliziert gestaltet ist. @Riesenadler könntest du uns den Scriptausschnitt senden?

____________________
Nachbau von Siedler 5 Lobbys "Ubi.Com"

Updatelösungen Siedler 5 Patch 1.06

Creators Update Lösung Windows 10 Siedler 5

Riesenadler
#8
06.02.2019 22:26
Beiträge: 19

Sieht bei mir so in der Art aus:


spawn = GetPosition("Spawn"),

function Haupmann()
  hauptid = Logic.CreateEntity(Entities.PU_LeaderBow1, spawn.X, spawn.Y, 0, 3)
end

function Soldat()
  soldid = Logic.CreateEntity(Entities.PU_SoldierBow1, spawn.X, spawn.Y, 0, 3)
  Tools.AttachSoldiersToLeader(hauptid , soldid )
end  

Input.KeyBindDown(Keys.ModifierAlt + Keys.N, "Soldat()", 2)
Input.KeyBindDown(Keys.ModifierAlt + Keys.M, "Haupmann()", 2)



____________________
"Wer im Glashaus sitzt, sollte sich im Dunkeln ausziehen."
- Ein schlauer Mensch

mcb
#9
06.02.2019 23:31
Beiträge: 1472

Oh, ich sehe sofort wo da das Problem ist (du vielleicht auch, wenn du die Funktion siehst, die du da Aufrufst):

function Tools.AttachSoldiersToLeader(_leader,_amount)

	local LeaderID = 0

	-- Is leader a string
	if type(_leader) == "string" then
		LeaderID = Logic.GetEntityIDByName(_leader)
	else
		LeaderID = _leader
	end	
	
	local i
	for i=1, _amount, 1 do
		Logic.LeaderGetOneSoldier( LeaderID )
	end
	
end



Der 2. Parameter von Tools.AttachSoldiersToLeader ist nicht die id des soldiers, sondern wie viele soldier du dem leader geben willst. Und da die id soldier-id ne ziemlich hohe Zahl ist (ich glaube mindestens 65536), versucht Siedler dem einen leader ziemlich viele Soldier zu geben, die es dann natürlich nicht findet. (Die meisten Logic Funktionen würden in dem Fall einfach crashen )

daniBIGdani
#10
08.02.2019 11:27
Beiträge: 153

Ich weiß nicht ob dir das weiterhilft, aber mit dem Move-Befehl ordnen sich die Soldaten hinter dem Hauptmann an.

local eID = Tools.CreateGroup(1, Entities.PU_LeaderBow1, 4, GetPosition("pos").X, GetPosition("pos").Y, 0.0)
Move(eID,eID)



MfG daniBIGdani

Seiten: 1

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

Impressum