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

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

Impressum