KI erstellen
» Siedler Map Source Forum » Siedler DEdK Script Forum » KI erstellen
Seiten: 1
BrokenSun
|
#1 21.11.2017 21:09 Beiträge: 73 |
KI erstellen
KI kann nicht erschaffen werden
Broken nochmals hier.
Nachdem die anderen Probleme schnell ausgehebelt wurden, stehe ich jetzt gerade wieder vor der Verzweiflung:
Das Einzelspieler KI Script.
Egal welche Funktion ich nutze, sie funktioniert einfach nicht...
Selbst die Original Siedler Einstellung mit der script hilfe...
KI wird nie erschaffen, egal ob mit FirstMapAction oder GameCallback Funktion.
Könnte mir jemand eine KI script Rohfassung schicken, am besten ein ganzes map script damit keine implementierungsfehler passieren, jetzt bezogen auf die KI Erstellung.
Danke um eure Hilfe
Zedeg
|
#2 21.11.2017 21:39 Beiträge: 428 |
Zitat von BrokenSun:
Selbst die Original Siedler Einstellung mit der script hilfe..
Kann nicht sein. Entweder wird das Skript nicht geladen wegen eines Syntaxfehlers oder die KI hat kein Gebäude, aber dann stürzt Siedler, glaube ich, sogar ab. Woran merkst du denn, dass keine KI ensteht?
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski
BrokenSun
|
#3 21.11.2017 21:55 Beiträge: 73 |
SetHostile(1, 2) funktioniert nicht
KI ist nicht im Diplomatie Menu aufgeführt
Zedeg
|
#4 21.11.2017 23:11 Beiträge: 428 |
Oh. Da fehlt Grundlagenwissen.
SetPlayerName(2, "Schnurzelchen")
ist für Namen im Diplomatiemenü zuständig. Die K"I" wird in diesem Hilfe-Fenster (bei einer neuen Map ode Datei->Karten-/Skript-Assistent) mit der Tabelle angegeben (wo du Tech-Level, Radius, Aggression etc. setzen kannst). Gibt da einiges, was beachtet werden muss -> bitte durchlesen: http://www.siedler-games.de/si...ls:computergegner_-_grundlagen
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski
BrokenSun
|
#5 22.11.2017 16:37 Beiträge: 73 |
Hab den krams jetzt um dekoriert, mir ne GameCallback Funktion auseinander gebaut und prektisch ne MP Version auf Einzelspieler zugeschnitten funktioniert einwandfrei, und ich krieg nicht immer diese Probleme mit den Init und FirstMapAction Funktionen.
PS. , SetPlayerName/ (Display.) SetPlayerMapColor hat bei mir nicht so hingehauen...
Problem gelöst danke
BalistiK
|
#6 22.11.2017 20:49 Beiträge: 70 |
KI-Rohfassung.
Also eine Möglichkeit warum eine KI nicht funktioniert liegt meistens daran, dass ihr keine Dorfmitte zugewiesen wurde. Das kann eine Entity sein oder ein ScriptingBlock. Sonst ist normalerweise das AI-Setup nicht richtig aufgerufen worden oder falsch.
Wenn du eine Rohfassung eines KI Setups für Singleplayer brauchst habe ich hier mal eine für dich, die ich selber gerne benutze (natürlich musst du dabei nur die Werte im table verändern):
function CreateAI() local AI = { -- general AI-Setup (needed) id = 2, strenght = 1, range = 4000, techlevel = 1, hq = "HQ", agressivity = 1, peacetime = 0, -- additional AI-Setup (optional) serflimit = 0, extracting = 0, constructing = false, repairing = false, -- resources the AI begins with resources = { gold = 0, wood = 0, clay = 0, iron = 0, stone = 0, sulfur = 0 }, -- resources the AI refresh in a certain Time (updateTime in sec.) until they reached resourced resfresh = { gold = 0, wood = 0, clay = 0, iron = 0, stone = 0, sulfur = 0, updateTime = 0 }, -- The delay until an AI rebuild a building. rebuild = { delay = 10, randomTime = 1 } } MapEditor_SetupAI(AI.id, AI.strenght, AI.range, AI.techlevel, AI.hq, AI.agressivity, AI.peacetime); SetupPlayerAi(AI.id, {serfLimit = AI.serflimit, extracting = AI.extracting, constructing = AI.constructing, repairing = AI.repairing, resources = AI.resources,refresh = AI.refresh, rebuild = AI.rebuild }) end
Den Code kannst du ohne Bedenken in einen Script reinkopieren und mal ausprobieren. Einfach in eine eigene Methode die KI setzen und in der FirstMapAction die Funktion aufrufen. Bedenke: Die KI muss mindestens ein Gebäude haben oder mehr und auch die richtige Spielerfarbe mit eine Position. Das kann entweder die Burg mit der Beschreibung "HQ" sein oder Ähnlichem.
Für eine ausführliche Erklärung würde ich dann jedoch auf das Skriptwiki zurückgreifen. Die erklären die Punkte relativ verständlich. Rumprobieren hilft am meisten
BrokenSun
|
#7 22.11.2017 21:22 Beiträge: 73 |
explore
Danke Balistik, die Rohfassung behalte ich mir
Habe es bereits schon gelöst, jetzt stehe ich vor einem neuen:
explore...
--################################################################################################### --START function GameCallback_OnGameStart() -- Include global tool script functions Script.Load(Folders.MapTools.."Ai\\Support.lua") Script.Load( Folders.MapTools.."Main.lua" ) -- Unbedingt muß für die Einbindung der Ki hier auch dieses am Anfang geladen werden IncludeGlobals("MapEditorTools") Script.Load( "Data\\Script\\MapTools\\Counter.lua" ) Script.Load( "Data\\Script\\MapTools\\MultiPlayer\\MultiplayerTools.lua" ) Script.Load( "Data\\Script\\MapTools\\Tools.lua" ) Script.Load( "Data\\Script\\MapTools\\WeatherSets.lua" ) IncludeGlobals("Comfort") -- notwendig damit die Siegbedingungen greifen gvMission = {} gvMission.PlayerID = GUI.GetPlayerID() --Init local map stuff Mission_InitWeatherGfxSets() InitWeather() Mission_InitGroups() Mission_InitLocalResources() -- Init global MP stuff --MultiplayerTools.InitResources("normal") MultiplayerTools.InitCameraPositionsForPlayers() MultiplayerTools.SetUpGameLogicOnMPGameConfig() MultiplayerTools.GiveBuyableHerosToHumanPlayer( 1 ) -- 8 Helden pro Spieler StartSimpleJob("VictoryJob") if XNetwork.Manager_DoesExist() == 0 then for i = 1, 1 do -- Für 2 Spieler eingestellt MultiplayerTools.DeleteFastGameStuff(i) end local PlayerID = GUI.GetPlayerID() Logic.PlayerSetIsHumanFlag( PlayerID, 1 ) Logic.PlayerSetGameStateToPlaying( PlayerID ) end LocalMusic.UseSet = MEDITERANEANMUSIC --LocalMusic.UseSet = EUROPEMUSIC --LocalMusic.UseSet = HIGHLANDMUSIC --LocalMusic.UseSet = MEDITERANEANMUSIC --LocalMusic.UseSet = DARKMOORMUSIC --LocalMusic.UseSet = EVELANCEMUSIC MapEditor_SetupDestroyVictoryCondition(2) MapEditor_CreateHQDefeatCondition() --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --MESSAGE Message( "Willkommen im Land am Rande der Welt! @cr @color:128,128,160 Erkunde Gut und Jeden Winkel - Das Glueck sei mit Dir!" ); --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --TRIBUTE GameCallback_FulfillTribute() --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --BRIEFING JadeBriefing() StartSimpleJob("WacheOneIsNear") NPCTraderOne() NPCWacheOne() LeenzViewDorf() --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --TRUHEN --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --ARMEEN --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --CREATE KI Leenz() InitPlayerColorMapping() end --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --******************************************************************************************** --******************************************************************************************** --******************************************************************************************** --******************************************************************************************** --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --KI 2 LEENZ function Leenz() local aiID = 2; local strength = 3; local range = 0; local techlevel = 3; local position = "LeenzHQ"; local aggressiveness = 1; local peacetime = 0; local explore = true; MapEditor_SetupAI( aiID, strength, range, techlevel, position, aggressiveness, peacetime, explore ); SetupPlayerAi( aiID, { extracting = 0, repairing = 1, serflimit= 4, } ); SetPlayerName( aiID, "Leenz" ); SetupPlayerAi( 2, { resources = { gold = 100, clay = 100, iron = 150, sulfur = 150, stone = 100, wood = 100, } } ); SetupPlayerAi( 2, { refresh = { gold = 1000, clay = 1000, iron = 500, sulfur = 150, stone = 100, wood = 1000, updateTime = 120 } } ); end function LeenzFrieden() SetNeutral(1, 2); end function LeenzViewDorf() Explore.Show("ShowLeenz", "LeenzViewOne", 50) end --++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --MAP COLOR function InitPlayerColorMapping() Display.SetPlayerColorMapping(2,NPC_COLOR) end
function LeenzViewDorf() Explore.Show("ShowLeenz", "LeenzViewOne", 50) end
XD.EntinityScript ID = LeenzViewOne
Wenn ich gerade schon bei KI bin, gibt es die Möglichkeit mit local explore = true im SetupPlayerAI zu bewirken, das ich sehe was die KI zwei sieht, oder gibt es da eine andere variante, welche funktioniert.
mcb
|
#8 22.11.2017 21:33 Beiträge: 1472 |
Explore.Show nimmt Scm (Siedler-Zentimeter) als Reichweitenangabe, die 50 ist also zu wenig (Ich würde mindestens 1000 empfehlen).
Komplette Sicht teilen geht so:
Logic.SetShareExplorationWithPlayerFlag(_playerObserver, _playerObserved, _flag)
In deinem Fall dann:
Logic.SetShareExplorationWithPlayerFlag(1, 2, 1)
Edit: Das mit der KI ist in Siedler so ne Sache. Auch wenn du die KI so aktivierst, erwarte nicht das sie Gebäude baut, oder auch nur eine halbwegs Sinnvolle entscheidung trifft. (Bin mir nicht mal Sicher, ob Truppen Kaufen drin ist...)
BrokenSun
|
#9 22.11.2017 22:23 Beiträge: 73 |
mcb, du bist ein Gott, danke
Die Funktion suche ich praktisch schon ewig
Zedeg
|
#10 23.11.2017 16:41 Beiträge: 428 |
Nur mal so als Frage: Von woher hast du dein bisheriges Skriptwissen?
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski
BrokenSun
|
#11 23.11.2017 21:05 Beiträge: 73 |
Das scriptwissen hab ich mir aus dem Script Docu.Wiki, Foru und einer Hand voll maps gefischt...
Hab noch einmal ne frage zu 2 weiteren Funktionen, da deren Umsetzung noch hapern:
1. isNear
function WacheOneIsNear() if IsNear( "Jack", "WacheOne",5000) then BRIEFINGWacheOne(); return true end end
liegt das am return oder warum funktioniert die Funktion nicht.
Wird im Callback aufgerufen.
2. Explore
Explore.Show(_Name, _Where, _Range)
Explore = 1000 funktionier im Briefuing nicht
isObserved = als alternative ebenso wenig
Kann die Explore Funktion per function aufgerufen werden, oder muss sie mit Simplejob über _Name gestartet werden?
Das wären erst mal die wichtigsten fragen, ich dank euch schonmal für eure hilfe
Und schonmal sorry für die viele fragerrei, aber ich glaub das war grad erst der anfang '
Play4FuN
|
#12 23.11.2017 23:22 Beiträge: 704 |
Zu 1.
Du musst die Abfrage so aufrufen:
StartSimpleJob("WacheOneIsNear")
damit sie jede Sekunde 1x aufgerufen wird, bis sie erfüllt ist (return true).
Generell immer auf Groß- und Kleinschreibung achten!
Zu 2.
Explore.Show rufst du seperat auf, also als ganz normaler Funktionsaufruf, z.B. eben
Explore.Show("ShowP4HQ","P4HQ",2000) -- gebiet 2000 siedlercm um position aufdecken
In einem Briefing kannst du alternativ, je nach Schreibweise, sowas verwenden:
BriefingWanderer1[page].explore = BRIEFING_EXPLORATION_RANGE
oder statt der "statischen" Variable auch einfach einen Wert eingeben.
Nachtrag: schau mal HIER nach, dort sollte deine Frage auch beantwortet werden und du findest einfache Beispiele.
____________________
LG Play4FuN
Siedler DEdK Mapping + Scripting Tutorials
Seiten: 1