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