AI Advance/TickOffensiveAIController
» Siedler Map Source Forum » Siedler DEdK Script Forum » AI Advance/TickOffensiveAIController
Seiten: 1
BrokenSun
|
#1 12.11.2017 23:15 Beiträge: 73 |
AI Advance/TickOffensiveAIController
Hi,
ich bräuchte mal eure hilfe:
Habe eine Multiplayer Map mit KI Zusatz gebastelt und es stellen sich EINIGE Probleme heraus die den Verlauf des Spiels etwas beeinträchtigen.
Außerdem noch ein paar Fragen, aber vorerst
Problem AI Advance/TickOffensiveAIController
Ich habe folgende Funktion in mein Script integriert ohne das etwas passiert:
retreatStrength = 2, baseDefenseRange = 1000, outerDefenseRange = 10000, AttackAllowed = true, AttackPos = { GetPosition("Haupthaus"), GetPosition("Dorfzentrum"), GetPosition("Außenposten"), }, pulse = true, }
(Quelle: Script.docuwiki)
Die ID's wurden zugordnet
2. Problem Countdown
Der ein sichtbarer 15MinutenCountdown geht bei der Muliplayermap alle 15 Minute oder bei regen los, warum verstehe ich nicht, habe ihn nur in einem Abteil unter
function MassenAngriff2() CreateAngriff1SP1() CreateAngriff2SP1() CreateAngriff1SP2() CreateAngriff2SP2() end --++++Massenangriff++++ function MassenAngriff() AngriffstruppIISP1() AngriffstruppIISP2() Message( "@color:238,0,0 Ihr seid ein zu starker Feind der Legionen, @cr ein Bote wurde entsand um euer Vorhaben zu unterbinden! @cr @color:139,0,0 Eine Armee wird folgen!" ); StartCountdown( 30 * 60, MassenAngriff2, true ) end eingefügt Die Startfunktion damit das Funktioniert ist ebenfalls Kopiert aus dem WIKI... function StartCountdown(_Limit, _Callback, _Show) assert(type(_Limit) == "number") assert( not _Callback or type(_Callback) == "function" ) Counter.Index = (Counter.Index or 0) + 1 if _Show and CountdownIsVisisble() then assert(false, "StartCountdown: A countdown is already visible") end Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false} if _Show then MapLocal_StartCountDown(_Limit) end if Counter.JobId == nil then Counter.JobId = StartSimpleJob("CountdownTick") end return Counter.Index end function StopCountdown(_Id) if Counter.Index == nil then return end if _Id == nil then for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end Counter["counter" .. i] = nil end end else if Counter.IsValid("counter" .. _Id) then if Counter["counter" .. _Id].Show then MapLocal_StopCountDown() end Counter["counter" .. _Id] = nil end end end function CountdownTick() local empty = true for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) then if Counter.Tick("counter" .. i) then Counter["counter" .. i].Finished = true end if Counter["counter" .. i].Finished and not IsBriefingActive() then if Counter["counter" .. i].Show then MapLocal_StopCountDown() end -- callback function if type(Counter["counter" .. i].Callback) == "function" then Counter["counter" .. i].Callback() end Counter["counter" .. i] = nil end empty = false end end if empty then Counter.JobId = nil Counter.Index = nil return true end end function CountdownIsVisisble() for i = 1, Counter.Index do if Counter.IsValid("counter" .. i) and Counter["counter" .. i].Show then return true end end return false end
Danke für rückmeldungen!
Script-Code
Script zu Groß, verweise zu "Edge of the World" MultiplayerMap
Dieser Beitrag wurde von BrokenSun am 13.11.2017 um 17:06 editiert.
BrokenSun
|
#2 12.11.2017 23:18 Beiträge: 73 |
Desynch
Was ich vergessen hatte,
Was ist so schlimm an Desynch?
Inwiefern beeinträchtigt das,das spiel Erlebnis?
mcb
|
#3 12.11.2017 23:49 Beiträge: 1472 |
Das Problem an einem Desync ist, das auf einem PC etwas anderes passiert, als auf dem anderen. Z.B. ein modifizierter Button: Auf dem PC wo der Button gedrückt wird, wird ausgeführt, was immer in der Action-Funktion programmiert ist (z.B. das Spawnen von Truppen) aber auf allen anderen nicht. Was hast du denn für Desyncs?
Zur AI: Ist die AI aktiviert und Truppen gespawnt?
Zum Countdown: Von Wo wird StartCountdown sonst aufgerufen? Wie wird MassenAngriff aufgerufen?
PS: Benutze bitte [code] lua [/code] für Lua hier im Forum, sieht dann so aus:
function foo() bar() end
(Kannst du auch nachträglich in deine Posts editieren)
BrokenSun
|
#4 13.11.2017 16:57 Beiträge: 73 |
Countdown
Das ding ist, ich habe im spiel alle 15Minuten einen Sichbaren 15Min. Countdown, mein "MassenAngriff" hat jedoch einen 30Minúten sichbaren Countdown...
Truppen KI funktioniert relativ
Human1- /
Human2- /
KI3- Steht nur herum (Agressive=4)
Läuft zum HQ und ignoriert die Befehle (Agressive=1-3)
KI4- Lediglich Feindlich, SetFriendly funktioniert nicht daher nicht aktiv
KI5- Bewegt sich von alleine, Produziert und Repairiert selbstständig, ignoriert befehle...
KI6- Nicht aktiv, Produziert keine Truppen, befolgt Marschbefehl, dennoch keinen TickOffensiveAIController Befehl.
Habe oben nochmal mein ganzes script eingefügt...
MFG Broken
mcb
|
#5 13.11.2017 17:55 Beiträge: 1472 |
Ich vermute mal, der Countdown wird auch von Standard-MP-Scripten verwendet und irgendwas funktioniert da nicht zusamen (z.B. Peacetime). Außerdem startet die Wetter-Funktion einen 30-min countdown.
Das mit der KI ist immer so ne Sache, die macht eigentlich nie das, was man von ihr will
Aber um Armeen (und TickOffensiveAIController) zu benutzen muss die KI aktiviert sein, Ein einfacher Aufruf von SetupPlayerAi sollte genügen.
Zu KI4: MapEditor_SetupAI setzt die KI auf feindlich, also den Diplostatus danach nochmal neu setzen sollte helfen.
BrokenSun
|
#6 13.11.2017 23:46 Beiträge: 73 |
WetterTimer liegt bei 15*60, da aber True/False nicht für Countdown Show angezeigt ist kann das gut sein ich probiers demnächst nochmal aus, danke für den Hinweis.
StartCountdown( 15*60, "Functionname", False)
sollte denke ich hinhauen
MFG BrokenSun
BrokenSun
|
#7 18.11.2017 17:41 Beiträge: 73 |
Countown
Der Wettercountdown stand auf sichtbar und aktivierte sich nach jedem Wetterwechsel, Problem elemeniert xD
Seiten: 1