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.

fritz_98
#8
28.08.2010 18:15
Beiträge: 472

Schon das mit dem techlevel korrigiert? (s. warrior1024)

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

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

Impressum