Hallo zusammen,
ich versuche mich seit einigen Wochen am Skripten!
Aber kapiere viele Sachen nicht.
Es wäre sehr nett wenn ihr mir dabei helfen würdet.
Vielen Dank im Vorraus.
Blogs
Hallo zusammen,
ich versuche mich seit einigen Wochen am Skripten!
Aber kapiere viele Sachen nicht.
Es wäre sehr nett wenn ihr mir dabei helfen würdet.
Vielen Dank im Vorraus.
Geändert von Marius94 (07.08.2008 um 13:12 Uhr)
Meine 1. Frage:
Ich habe es Bisher soweit Hinbekommen, dass sich eine Palisade um ein Kloster zwar selbst aufbaut, aber leider schon ganz am Anfang! Und ich krieg es einfach nicht hin, dass sich die Palisade erst später aufbaut (ich habe Quests erstellt, dass man erst Holz liefern soll) aber er baut sich trotzdem schon direkt nach Spielstart auf. Was kann ich tun?
Hi!
Nun, der erste Schritt wäre vielleicht, dass du uns mal etwas genauer schilderst, was du nicht kapierst.
Und bei solchen Dingen ist es immer hilfreich wenn du schreibst, wie du etwas gemacht, bzw. was du versuchst hast.
Als erstes könntest du nochmal das AI_Build_Log lesen, das Creewhawk dir im Ubi-Forum ja schon genannt hat. Und danach ggf. hier etwas genauer schildern, an welchen Stellen du mit was Schwierigkeiten hast.Und ich krieg es einfach nicht hin, dass sich die Palisade erst später aufbaut (ich habe Quests erstellt, dass man erst Holz liefern soll) aber er baut sich trotzdem schon direkt nach Spielstart auf. Was kann ich tun?
Wenn du vorher noch nichts mit der Scripterei zu tun gehabt hast, musst du dich allerdings wohl auf eine etwas längere Lernphase einstellen. Mit ein paar kurzen Erklärungen hier und da ist es leider nicht getan.
Aber wenn du hier die richtigen Fragen stellst und die relevanten Informationen postest, dann wird dir bestimmt weitergeholfen.
Gruß
Gunther
Hallo,
also möchte Marius helfen.
Hier mal was ich bisher gemacht habe.
Erst einmal die Quest zum Holzliefern. Muss ich denke ich nicht näher erläutern.
Dann kommt Trigger_OnQuestSuccessWait auf Holzliefern
Goal_InstantSuccess
Reward_AI_BuildOrder hier Spieler 3 und 19
Im Script steht.
[code]
function GameCallback_AIWallBuildingOrder(_PlayerID)
if _PlayerID == 3 then
return 20
end
Dies unten muss denke ich in First_MapAction
function GameCallback_AIWallBuildingOrder(3)
if _PlayerID == AIPlayerID then
return AIBuildingOrder
end
AICore.SetNumericalFact( 3, "BPMX", 1)
Ich denke es liegt an dem Zusammenspiel der Buildzahlen
Was müsste man ändern, damit erst die Palisade gebaut wird, wenn das Holz geliefert ist.
Sombeline
Geändert von Sombeline (31.07.2008 um 09:07 Uhr)
Hallo!
In welchem? Es gibt ja mind. immer 2!
Soweit, fast richtig! Wenn diese Funktion im globalen Map-Script steht und das fehlende end ergänzt wird. So etwas würde sofort auffallen, wenn man das Spiel mit der Option -DisplayScriptErrors starten würde (@Sombeline: Das hab' ich dir jetzt schon zum hunderten Male geschrieben!)Code:function GameCallback_AIWallBuildingOrder(_PlayerID) if _PlayerID == 3 then return 20 end end
Falsch. Und nicht denken, sondern (genau) lesen, was im AI_Build_Log steht!Dies unten muss denke ich in First_MapAction
Lediglich die Zeile
gehört in die Funktion Mission_FirstMapAction().Code:AICore.SetNumericalFact( 3, "BPMX", 1)
Was ist das wieder für ein "Unsinn"!?Code:function GameCallback_AIWallBuildingOrder(3) if _PlayerID == AIPlayerID then return AIBuildingOrder end
Erstens hast du doch bereits weiter oben eine Funktion GameCallback_AIWallBuildingOrder(), und zweitens würde diese Funktion nie etwas bewirken (außer Fehlern, da auch hier wieder ein end fehlt).
Die Werte in den Klammern hinter dem Funktionsnamen sind Parameter, die der Funktion beim Aufruf übergeben werden können und dann innerhalb der Funktion verarbeitet werden können. Und wenn man innerhalb einer Funktion Variablen verarbeiten möchte, müssen diese auch definiert sein.
Durch die obere, erste und richtige Version der Funktion GameCallback_AIWallBuildingOrder() wird die BuildingOrder für Spieler 3 für Pallisaden + Mauern auf 20 gesetzt. Sie sollten also dann errichtet werden, wenn die aktuelle BuildingOrder für Spieler 3 mind. den Wert 21 hat, da dieser wohl zwingend (um mind. 1) größer sein muss, als der festgelegte Wert für Gebäude und Palis/Mauern.Ich denke es liegt an dem Zusammenspiel der Buildzahlen
Was müsste man ändern, damit erst die Palisade gebaut wird, wenn das Holz geliefert ist.
Ergo müsste der Reward_AI_BuildOrder hier Spieler 3 und 21 lauten.
Dann sollte es eigentlich wie gewünscht funktionieren.
Gruß
Gunther
Es funktioniert aber immer noch nicht, er baut die Palisade ganz am anfang auf. Aber hier Mein Script:
Und Im Quest ist die Buildingorder auf 5.Code:---------------------------------------------------------------------------------------------------------------------- function Mission_InitPlayers() end ---------------------------------------------------------------------------------------------------------------------- function Mission_SetStartingMonth() Logic.SetMonthOffset(3) end ---------------------------------------------------------------------------------------------------------------------- function Mission_InitMerchants() local traderId = Logic.GetStoreHouse(2) AddOffer (traderId, 3,Goods.G_Sheep) AddOffer (traderId, 3,Goods.G_Stone) AddOffer (traderId, 3,Goods.G_Iron) AddOffer (traderId, 3,Goods.G_Cow) local traderId = Logic.GetStoreHouse(3) AddOffer (traderId, 3,Goods.G_Herb) AddOffer (traderId, 3,Goods.G_Medicine) AddOffer (traderId, 3,Goods.G_Leather) AddOffer (traderId, 3,Goods.G_Grain) local traderId = Logic.GetStoreHouse(5) AddMercenaryOffer( traderId, 2, Entities.U_MilitaryBandit_Melee_SE ) AddMercenaryOffer( traderId, 3, Entities.U_MilitaryBandit_Ranged_NA ) AddMercenaryOffer(traderId, 4, Entities.U_MilitaryBandit_Ranged_ME) AddMercenaryOffer(traderId, 4, Entities.U_MilitaryBandit_Melee_AS) end ---------------------------------------------------------------------------------------------------------------------- function Mission_FirstMapAction() -- init players in singleplayer games only if Framework.IsNetworkGame() ~= true then Startup_Player() Startup_StartGoods() Startup_Diplomacy() end -- create quests do local MapName = Framework.GetCurrentMapName() local ScriptName = "Maps\\ExternalMap\\"..MapName.."\\QuestSystemBehavior.lua" Script.Load(ScriptName) CreateQuests() end AICore.SetNumericalFact( 3, "BPMX", 1) end function GameCallback_AIWallBuildingOrder(_PlayerID) if _PlayerID == 3 then return 4 end end
Geändert von Marius94 (10.02.2009 um 14:03 Uhr) Grund: Ich hab beim in-erinnerungen-schwelgen :-D ein paar fehler entdeckt --10.2.09-15:03
Danke Netsurfer,
ich starte das spiel immer mit displayerrors. Wenn ich das einmal in die Verknüpfung rein habe, müsste es so sein.
Aber eine Meldung habe ich nicht bekommen.
Hatte das Script von Marius übernommen.
Jetzt in der Zwischenzeit habe ich auch gemerkt, daß sowieso
der Befehl ja doppelt und falsch drinsteht.
Sombeline
Hi Marius!
Sieht soweit schon sehr gut aus!
Lies mal bitte den kurzen Beitrag von BB_ScriptError und ändere deine Werte (die Zahlen für die BuildingOrder) entsprechend ab: AIBuildingOrder - Thema entwickelt von eve community
Gruß
Gunther
Danke, ich probier´s mal.
Es ist aber wenig "speditiv & produktiv" wenn man andere Sachen hier postet, als man in Wirklichkeit tatsächlich verwendet.
Wenn du also Code postest, der garantiert eine Fehlermeldung hervorruft, und dann keine angezeigt bekommst, weil du im Script etwas anderes stehen hast, was sollen wir uns dann den hier geposteten Code angucken!?
Schön.Jetzt in der Zwischenzeit habe ich auch gemerkt, daß sowieso
der Befehl ja doppelt und falsch drinsteht.(du meinst die Funktion
)
Und merke: Das Scripten verzeiht keine Schludrigkeit - ordentliches & konzentriertes Arbeiten ist absolute Grundvoraussetzung!
Gruß
Gunther
Nein, funktioniert immer noch nicht, ich hab die Palisade im Script auf 5 und die AIBuildingorder auf 9.
Geändert von Marius94 (31.07.2008 um 11:17 Uhr) Grund: Rechtschreibfehler :-)
Dann hast du vermutlich diesen Punkt AIBuildingOrder - Thema entwickelt von eve community vergessen.
Kannst du im Editor über den Karten-Assistent einstellen.
Gruß
Gunther
Danke, ich les mir mal dort alles durch !![]()
Hi, ich bin Aus dem Text nicht wirklich schlau geworden, da ich alles so gemacht hab, wie es da drin Stand!
Marius94
Nein, es geht und ging nur um den zweiten kurzen Beitrag von BB_ScriptError:
Du musst also im Editor mittels des Karten-Assistenten eine KI für die PlayerID einstellen/ aktivieren.Damit die AI Building Order funktioniert muss eine KI für den Spieler eingestellt sein.
Bei Dörfern und Banditen ist das normalerweise nicht der Fall.
Gruß
Gunther
PS: Und bitte, mit solchen Aussagen wie "ich bin aus dem Text nicht wirklich schlau geworden" kann kein Mensch etwas sinnvolles anfangen, geschweige denn konkrete Hilfestellung geben. Also soweit möglich bitte immer genau schreiben, was man nicht verstanden hat, bzw. womit man Schwierigkeiten hat.
hi Marius 94,
Palisadenbau mit AIBuildingOrder für Dörfer funktioniert seit Patch 1.5 (oder 1.6 ?) eigentlich nicht mehr.
Bei einer Map von mir (Version 1.3) habe ich es aber für ein Dorf so geschafft:
In meinem Beispiel für Player 6, AIBuildingOrder in 5er Schritten.
AIBuildingOrder 5 für irgendein Gebäude (bevorzugt ein OuterRimBuilding).
AIBuildingOrder 10 lässt du einfach aus, d.h. auch bei keinem Gebäude die AIBuildingOrder 10 vergeben.
AIBuildingOrder 15 wieder für irgendein OuterRimBuilding.
In die Mission_FirstMapAction() kommt folgendes:
Nach der Holzlieferung gibt es als Belohnung die AIBuildingOrder 14 (== Palisade) und AIBuildingOrder 15, aufrufen mit AI_BuildOrder(6, 14) bzw. AI_BuildOrder(6, 15)Code:AICore.SetNumericalFact(6, "BPMX", 0); AI_BuildOrder(6, 5);
Dafür brauchst du 2 Funktionen in deinem globalen Script.
Code:function GameCallback_AIWallBuildingOrder(_PlayerID) if _PlayerID == 6 then return 14 end endGrußCode:function AI_BuildOrder(_AIPlayerID, _Level) AICore.SetNumericalFact(_AIPlayerID, "BPMX", _Level); end
CineMachus
Hi CineMachus!
Wieso das nicht? Dann würden ja alle Maps, auf denen das verwendet wird, nicht mehr funktionieren. Da hätte es bestimmt schon mehr Forenbeiträge gegeben, wenn dem so wäre.
Warum dafür eine extra Funktion?Dafür brauchst du 2 Funktionen in deinem globalen Script.
Code:function AI_BuildOrder(_AIPlayerID, _Level) AICore.SetNumericalFact(_AIPlayerID, "BPMX", _Level); end
Kann man doch dann genausogut einfach direkt aufrufen:
GrußCode:AICore.SetNumericalFact(_AIPlayerID, "BPMX", _Level);
Gunther
Die KIs von Dörfern und Banditen werden normalerweise erst nach Aufruf der Mission_FirstMapAction() erstellt - man kann ihr also auch erst danach Befehle geben![]()
Hi,
Naja, aber bei Häfen, Klöstern und Dörfern ist doch im Kartenassistent, der Button, womit man die KI einstellt "grau"also nicht anzuklicken.Zitat von Netsurfer
Heißt das, dass man bei Häfen, Klöstern und Dörfern keine Ki gibt?
Marius94
Geändert von Marius94 (10.02.2009 um 14:09 Uhr) Grund: " Netsurfer schrieb" durch ein zitat ersetzt
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen