Kampfmap scripten
» Siedler Map Source Forum » Siedler DEdK Script Forum » Kampfmap scripten
Seiten: 1
L_A
|
#1 12.03.2020 13:34 Beiträge: 1 |
Kampfmap scripten
Moin Leute,
wollte den Siedlern hiermal etwas zurück geben und eine eigene Karte gestalten. Geplant ist hierfür eine einfache Kampfmap ohne viel Quest Getue.
Allerdings könnte ich etwas Hilfe beim Scripten gebrauchen. Speziell sind es folgende Dinge, die mir zu schaffen machen... Gruppierte Angriffe der KI, Soldatenrekrutierung (nicht stupides gespawne von Einheiten) der KI, Selbstaufbau der KI und Einrichtung von Handelsstraßen.
Ich bin für jede Hilfe (besonders in Form von vorgefertigten Scripten) dankbar.
Mit den besten Siedlergrüßen
L_A
Messoras
|
#2 12.03.2020 16:33 Beiträge: 84 |
Möchtest du denn eine KI benutzen oder die feindlichen Armeen selber steuern? Du könntest dir natürlich die Ubisoft Armeen aus der Scripting Tutorial Map anschauen, allerdings sind die manchmal ziemllich nerfig und lassen sich nicht so gut verwalten. Zu dem können sie nur aus maximal 8 Trupps bestehen.
Für das Ausbilden von Truppen kannst du den Befehl Logic.BarracksBuyLeader benutzen und die Soldaten dann mit AI.Entity_ConnectUnemployedLeaderToArmy einer Armee zuweisen.
Ich verwende für meine Armeen immer golgendes Script:
--[[ // Troop Trainer // by Messoras ACHTUNG: mcbs Trigger Fix wird benötigt. == Funktionen == 1. BuyKITroops( UpgradeCategory leaderType, table troopTable, string bID ) - Aufrufen um Trupp bei Gebäude mit Scriptname bID auszubilden und an Table troopTable anzuhängen == Parameter == - leaderType: UpgradeCategory -- Typ der Truppe -- z.B. UpgradeCategories.LeaderSword - troopTable: table -- Truppenarray, dem die Truppe angehängt wird, um z.B. mit Attack(troopTable,target) anweisungen auszuführen - bID: string -- Scriptname des Ausbildungsgebäudes (Kaserne, Schiessplatz, Taverne, Kanonengießerei) 2. ArmyCommand( table/string/number troopTable, function command, args ) - Aufrufen um allen Leadern im Table den Befehl command zu geben = Parameter = - troopTable: table -- Table mit Leadern (oder einzelner Leader - command: function -- EntityCommand z.B. Attack / Move etc. - args: -- Parameter für Command Aufruf -- ]] function BuyKITroops(_leaderType, _troopTable, _bID) local barracks = GetID(_bID) Trigger.RequestTrigger(Events.LOGIC_EVENT_ENTITY_CREATED, nil, AttachToList,1,nil,{_troopTable}) --typ, con, act, active, acon, aact Logic.BarracksBuyLeader(barracks,_leaderType) end function AttachToList(_troopTable) if not _troopTable then _troopTable = {} end local eID = Event.GetEntityID() if eID and Logic.IsLeader(eID) and AI.Entity_GetConnectedArmy(eID) ~= nil and AI.Entity_GetConnectedArmy(eID) < 0 then table.insert(_troopTable,eID) end return true end function ArmyCommand(_troopTable,_command,args) if type(_trooptable) == "number" or type(_trooptable) == "string" then _command(_troopTable,args) elseif type(_troopTable) == "table" then for k = 1, table.getn(_troopTable) do if IsDead(_troopTable[k]) then table.remove(_troopTable,k) k = k - 1 else _command(_troopTable[k],args) end end end end
Benutzen könnte man das z.B. so:
function ControlAttacksJob() if Counter.Tick2("ControlAttacksJob",10) BuyKITroops(UpgradeCategories.LeaderSword,attackers,"spawnerbarracks") ArmyCommand(attackers,Attack,"player1HQ") end end
Es werden nur Truppen ausgebildet, wenn der Spieler, dem das Ausbildungsgebbäude gehört auch die nötigen Ressourcen hat.
Wenn du stärkere Einheiten ausbilden willst, musst du die UpgradeCategory der Truppentypen mit
Logic.UpgradeSettlerCategory( UpgradeCategories.LeaderSword, EnemyPlayerId ) Logic.UpgradeSettlerCategory( UpgradeCategories.SoldierSword, EnemyPlayerId )
aufwerten (max 3 mal)
Mit Selbstaufbau der KI kenne ich mich nicht so gut aus, da ich eigentlich fast nur Quest Maps mache, aber es gibt eine Funktion AI.Village_StartConstruction mit der man die KI ConstructionQueue startet - bin aber nicht sicher, wie man die editiert und Logic.CreateConstructionSite, mit der du manuell festlegen kannst, wo der Gegner etwas hinbaut. Ich würde vlt einen Job erstellen, der prüft, ob im Gebiet schon irgendwas gebaut ist und falls nicht eine ConstructionSite für den Gegner anlegt. Der wird sie dann automatisch fertig bauen, sofern die AI richtig inizialisiert ist.
Was du mit den Handelswegen meinst, habe ich jetzt nicht verstanden. Meinst du Travelling Salesmen die zwischen zwei Lagern hin und her laufen? Das ist einfach. Dafür musst du nur einen Job starten, z.B. so:
function TradersmoveJob() if not direction then direction = 1 end if direction == 1 then Move("haendler","lager1") if IsNear("haendler","lager1",1000) then direction = 2 end else Move("haendler","lager2") if IsNear("haendler","lager2",1000) then direction = 1 end end end
Hoffe ich konnte dir behilflich sein. Falls du Fragen hast komm doch einfach auf den Discord.
LG,
Messoras
____________________
Six feet of earth make us all equal.
Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.
Dieser Beitrag wurde von Messoras am 12.03.2020 um 16:58 editiert.
Play4FuN
|
#3 31.03.2020 18:53 Beiträge: 704 |
Hey, @Messoras
Ich habe mir die BuyKITroops Funktion nun auch mal angeschaut, weil ich ähliches auch selbst bastel... mir gefällt die Idee und unter perfekten Bedingungen funktioniert das auch super. Allerdings scheint mir das ganze sehr gefährlich. Denn sobald das Ausbilden nicht klappt (AI hat keinen Siedlungsplatz frei, zu wenige Rohstoffe oder es trainieren bereits 3 Leader an dem Gebäude...) wird ein Trigger "zu viel" erstellt, der nicht wie gewollt "erfüllt" wird (also durch eine trainierte Truppe korrekt im Rahmen von AttachToList beendet). Das kann dann dazu führen, dass ein beliebiger anderer Leader in diese Liste eingetragen wird, eventuell sogar von einem anderen Spieler, schlimmstenfalls vom menschlichen.
Anmerkung: Zudem gibt Logic.IsLeader 1 bzw. 0 zurück, wenn du also nur
if eID and Logic.IsLeader(eID) and
(...) prüfst, fängst du sogar Nicht-Leader ein. (ja ich weiß, sollte durch AI.Entity_GetConnectedArmy meistens klappen, aber dennoch...)
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Seiten: 1