KI will nicht
» Siedler Map Source Forum » Siedler DEdK Script Forum » KI will nicht
Seiten: 1
Mordred
|
#1 27.08.2010 22:32 Beiträge: 939 |
KI will nicht
Schon wieder...
diesmal tut die Ki nicht. Sie macht einfach nichts!
das hier steht fast ganz oben:
--- Reich --- local aiID = 2 local strength = 3 local range = 100000 local techlevel = 4 local position = "Vorburg" local aggressiveness = 3 MapEditor_SetupAI(aiID,strength,range,techlevel,position,aggressiveness,0) SetupPlayerAi(aiID,{serfLimit = 8,repairing = true,constructing = true,extracting = 0})
Aber nichts funktioniert. Sie steuert auch nicht Ihre Armeen
function CreateArmyReich() ArmyReich = {} ArmyReich.id = ArmeeIds() ArmyReich.player = 2 ArmyReich.strength = 8 ArmyReich.position = GetPosition("ReichArmeeErholung") ArmyReich.rodeLength = 10000 ArmyReich.beAgressive = true ArmyReich.attackPosition = GetPosition("ReichArmeeAngriff") ArmyReich.refreshPosition = "ReichArmeeErholung" SetupArmy(ArmyReich) StartSimpleJob("ControlArmyReich") end function ControlArmyReich() if AreDead({"ReichKaserne","ReichSchiess","ReichStall","Vorburg"})then return true end if Counter.Tick2("ControlArmyReich",5)then DefensiveArmyController(ArmyReich,"Reich") -- fehlerfrei end end
einfach nichts.
Ich wäre sehr dankbar, falls jemand den Fehler findet(falls es einen gibt), oder eine schlagkräftige KI hinbekommen würde.
jugl
|
#2 27.08.2010 23:26 Beiträge: 803 |
if AreDead({"ReichKaserne","ReichSchiess","ReichStall","Vorburg"})then
return true
müsste es nicht stattdessen heissen
if IsDead{"ReichKaserne","ReichSchiess","ReichStall","Vorburg"})then
Gruß jugl
Mit "F10" oder "Ausführen" > "Variablencheck" in Notepad kommst du dem Fehler auf der Spur
____________________
Si tus vi late, in isse tabernit.
Dieser Beitrag wurde von jugl am 27.08.2010 um 23:33 editiert.
warrior1024
|
#3 27.08.2010 23:42 Beiträge: 345 |
Zitat von Skriptwiki:
#
Techlevel (Technologiestufe)
Dieser Wert zwischen 0 - 3 gibt an, welche Upgradestufe an Tuppen von der KI rekrutiert wird, wobei bei 0 Soldaten des niedrigsten Levels (also bspw. Swordman1), und bei 3 Soldaten des höchsten Levels (also bspw. Swordman4) rekrutiert werden (entsprechende Gebäude vorausgesetzt). Ebenso bestimmt der Wert, welche Kanonen von der KI produziert werden. Leider ist den Entwicklern hierbei ein (Denk-)Fehler unterlaufen , denn es wird der Wert selber an den Entitynamen angehängt. Das führt dazu, dass bei Level 0 keine Kanonen produziert werden, da es keine Entity PV_Cannon0 gibt. Genauso wird eine KI nie eine PV_Cannon4 produzieren, da der Wert ja nur maximal 3 sein kann. Vielleicht wird das ja mal mit einem zukünftigen Patch (aktuell Vers. 1.06) behoben indem man einfach Techlevelwert + 1 für die Kanonenproduktion verwendet
Hier zu finden
@jugl:
IsDead wird mit mehr als einem Parameter wahrscheinlich nicht funktionieren und Mordred hat ja die Comfort AreDead geschrieben. Zwar ist ({...}) unschön, aber es funktioniert.
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
jugl
|
#4 27.08.2010 23:58 Beiträge: 803 |
Zitat von warrior1024:
@jugl:
IsDead wird mit mehr als einem Parameter wahrscheinlich nicht funktionieren und Mordred hat ja die Comfort AreDead geschrieben. Zwar ist ({...}) unschön, aber es funktioniert.
Sorry, wo befindet sich in dem geposteten Skriptschnitzel die genannte Comfortfunktion AreDead ?
Wenn ich was übersehen habe , gehe ich morgen zu Fielmann
____________________
Si tus vi late, in isse tabernit.
kingsia
|
#5 28.08.2010 03:17 Beiträge: 750 |
Ich wurde gern auch diese Funktion von Mordred sehen, besonders wegen der Bermerkung von warrior1024 dass es unschön ist aber funktioniert.
So ein Funktion ist mit vier Skriptzeilen möglich, Sechs Zeilen wenn man die function _functionsname() und end Zeilen fur die Funktion auch zählt.
Gruss
Kingsia
warrior1024
|
#6 28.08.2010 10:03 Beiträge: 345 |
Hier ist sie zu finden:
Klick mich!
Und ({...}) ist unschön, da es sich kürzer mit {...} schreiben lässt. Oder schreibt jemand AP({...}) in Briefings?
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
Mordred
|
#7 28.08.2010 17:43 Beiträge: 939 |
na gut, dann halt so:
function AreDead(...) local tot = 0 local i for i=1,table.getn(arg) do if IsDead(arg[i])then tot = tot + 1 end end if (tot == table.getn(arg))then return true else return false end end
Aber die andere Funktion war quasi dasselbe, nur ohne {} - das macht die KI auch nicht stärker.
Wergat
|
#9 28.08.2010 20:17 Beiträge: 215 |
@ Mordred heißt dass nicht
IsDead (...)
?
Wergat :-?
____________________
Vielen dank an alle, die etwas wissen und es mit anderen teilen.
LG Wergat
Mordred
|
#10 28.08.2010 20:36 Beiträge: 939 |
@fritz_98
Klappt!
Sorry das ich den Beitrag nicht so genau gelesen habe
@Wergat:
Kann heißen wie man lustig ist, doch für eine funktion, die überprüft, ob mehrere Entities tot sind, ist "AreDead" doch gut gewählt, oder?
Falls du mehr über comforts wissen willst, PN
kingsia
|
#11 29.08.2010 20:01 Beiträge: 750 |
Zitat von Mordred:
na gut, dann halt so:
function AreDead(...) local tot = 0 local i for i=1,table.getn(arg) do if IsDead(arg[i])then tot = tot + 1 end end if (tot == table.getn(arg))then return true else return false end end
Ich hatte gesagt dass es mit nur vier Zeilen innerhalb Function und end geht.
Ich halte immer mein Wort
function AreDead(_entities) for Mordred_AreDead =1,table.getn(_entities) do if IsAlive(_entities[Mordred_AreDead]) then return false end end return true end
Kurzer, eleganter und viel, viel weniger Rechenschritte nötig.
Gruss
Kingsia
nevermind
Siedler Map Source Admin (Web) |
#12 29.08.2010 21:23 Beiträge: 483 |
Wenn du deine Armeen sowieso selber scriptest, lass doch einfach den Aufruf von MapEditor_SetupAI() weg. Dann ist das als Fehlerquelle zumindest schon mal ausgeschlossen und du hast sechs zusätzliche Armeen, die du frei verwenden kannst.
____________________
LUA_ERRSYNTAX: [string "?"]:1: `=' expected near `<eof>'
Seiten: 1