Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:waffenstillstandszeit_festlegen

Dieses Script basiert auf dem Referenzscript. Es wurden Funktionen integriert, die die Festlegung der Waffenstillstandszeit im Script ermöglichen, sowie die freie Teamwahl für Spieler erlauben. Das normale, für jede Mehrspielerkarte automatisch generierte, Script kann durch dieses Script ersetzt werden.
Die benötigten Comfort Funktionen aus dem Countdown / Zeitlimit Tutorial sind hier bereits integriert. Somit kann das Script ohne weitere Änderungen verwendet werden.

--------------------------------------------------------------------------------
-- MapName: XXX
--
-- Author: spiderfive
-- MP Reference Script für freie Peactimewahl mit Teamtausch während der Peacetime
--------------------------------------------------------------------------------
function GameCallback_OnGameStart() 	
    -- Der erste Teil diese Funktion ist für jede Karte identisch und sollte nicht verändert werden
 
	-- Include global tool script functions	
	Script.Load(Folders.MapTools.."Ai\\Support.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")
 
	--Init local map stuff
	Mission_InitWeatherGfxSets()
	Mission_InitWeather()
	Mission_InitGroups()	
	Mission_InitLocalResources()
 
	-- Init  global MP stuff
	MultiplayerTools.InitCameraPositionsForPlayers()	
	MultiplayerTools.SetUpGameLogicOnMPGameConfig()
	--Diese Funktion muß wegen der freien Peacetime deaktiviert sein, sie wird erst später nach dem Ablauf der Peacetime gesetzt
	--MultiplayerTools.SetUpDiplomacyOnMPGameConfig()
 
	if XNetwork.Manager_DoesExist() == 0 then		
		for i = 1, 8 do
			MultiplayerTools.DeleteFastGameStuff(i)
		end
		local PlayerID = GUI.GetPlayerID()
		Logic.PlayerSetIsHumanFlag( PlayerID, 1 )
		Logic.PlayerSetGameStateToPlaying( PlayerID )
	end
 
    -- Ab hier können Einstellungen vorgenommen oder eigener Code hinzugefügt werden
 
	-- Die Anzahl legt fest wieviel Helden der Spieler rekrutieren kann
	MultiplayerTools.GiveBuyableHerosToHumanPlayer( 3 )
 
    -- Hier wird die der Countdown für die Peacetime gestartet in Sekunden (Grundeinstellung 30 Min)
    SetPeacetime(30 * 60);
 
	LocalMusic.UseSet = HIGHLANDMUSIC
	--Befehlsatz einfach Kommentierung durch entfernen der beiden Bindestriche rausnehmen
	-- nicht vergessen das jeweils nur ein Set gesetzt werden kann
	--LocalMusic.UseSet = EUROPEMUSIC
	--LocalMusic.UseSet = HIGHLANDMUSIC
	--LocalMusic.UseSet = MEDITERANEANMUSIC
	--LocalMusic.UseSet = DARKMOORMUSIC
	--LocalMusic.UseSet = EVELANCENUSIC
end
 
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game is loaded, setup your weather gfx
-- sets here
function Mission_InitWeatherGfxSets()
 
	-- Use gfx sets
	SetupHighlandWeatherGfxSet()
	--Befehlsatz einfach Kommentierung durch entfernen der beiden Bindestriche rausnehmen nicht vergessen das man nur ein setzten sollte
	--SetupNormalWeatherGfxSet()
	--SetupHighlandWeatherGfxSet()
	--SetupSteppeWeatherGfxSet()
	--SetupMoorWeatherGfxSet()
	--SetupEvelanceWeatherGfxSet()
 
end
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start you should setup your weather periods here
function Mission_InitWeather()
 
	-- Hier wird der Wetterwechselfestgelegt Die Zahl 
	-- Beispiel 4 Min Sommer, dann 2 Minuten Winter, dann wieder alles von vorne
	AddPeriodicSummer(4 * 60) 
	AddPeriodicWinter(2 * 60) 
	--Befehlsatz einfach Kommentierung durch entfernen der beiden Bindestriche rausnehmen
	--AddPeriodicSummer(600) 
    --AddPeriodicWinter(300) 
    --AddPeriodicRain(120) 
end
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Build Groups and attach Leaders
function Mission_InitGroups()
end
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Limit the Technologies here. For example Weathermashine.
function Mission_InitTechnologies()
end
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Set local resources
function Mission_InitLocalResources()
    -- Startresourcen für die Spieler festlegen
    local InitGoldRaw 		= 1000
    local InitClayRaw 		= 1500
    local InitWoodRaw 		= 1000
    local InitStoneRaw 		= 1000
    local InitIronRaw 		= 1000
    local InitSulfurRaw		= 1000
 
 
    --Add Players Resources
    local HumenPlayer = XNetwork.GameInformation_GetMapMaximumNumberOfHumanPlayer()
    for i = 1, HumenPlayer do
        Tools.GiveResouces(i, InitGoldRaw , InitClayRaw, InitWoodRaw, InitStoneRaw, InitIronRaw, InitSulfurRaw)
 
        -- Hier werden die Technologien vorgegeben
        -- Beispiel Mathematik, Konstruktion und Sprengfähigkeit des Dieben
        ResearchTechnology(Technologies.GT_Mathematics,i)
        ResearchTechnology(Technologies.GT_Construction,i)	
        ResearchTechnology(Technologies.T_ThiefSabotage,i) 
 
        -- Es ist natürlich auch möglich, einzelne Technologien zu verbieten. Siehe dazu das entsprechende Tutorial
 
        --Befehlsatz einfach Kommentierung durch entfernen der beiden Bindestriche rausnehmen
        --Unitechnologien
 
        --ResearchTechnology(Technologies.GT_Mercenaries, i) -->Wehrpflicht	
        --ResearchTechnology(Technologies.GT_StandingArmy, i) -- -> stehendes Heer
        --ResearchTechnology(Technologies.GT_Tactics, i)--> Taktiken
        --ResearchTechnology(Technologies.GT_Strategies, i) ---> Pferdezucht
 
        --ResearchTechnology(Technologies.GT_Construction, i) ----> Konstruktion
        --ResearchTechnology(Technologies.GT_ChainBlock, i) --Flaschenzug
        --ResearchTechnology(Technologies.GT_GearWheel, i) --Zahnräder
        --ResearchTechnology(Technologies.GT_Architecture, i) --Architektur
 
        --ResearchTechnology(Technologies.GT_Alchemy, i) --Alchimie
        --ResearchTechnology(Technologies.GT_Alloying, i) --Legierungen
        --ResearchTechnology(Technologies.GT_Metallurgy, i) --Metallurgie
        --ResearchTechnology(Technologies.GT_Chemistry, i) --Chemie
 
 
        --ResearchTechnology(Technologies.GT_Taxation, i) --
        --ResearchTechnology(Technologies.GT_Trading, i) --Handelswesen
        --ResearchTechnology(Technologies.GT_Banking, i) --
        --ResearchTechnology(Technologies.GT_Gilds, i) --
 
        --ResearchTechnology(Technologies.GT_Literacy, i) --Bildung
        --ResearchTechnology(Technologies.GT_Printing, i) --Buchdruck
        --ResearchTechnology(Technologies.GT_Laws, i) --
        --ResearchTechnology(Technologies.GT_Library, i) --Büchereien
 
        --ResearchTechnology(Technologies.GT_Mathematics, i) --Mathematik
        --ResearchTechnology(Technologies.GT_Binocular, i) -- Ferngläser
        --ResearchTechnology(Technologies.GT_Matchlock, i) --Luntenschloss
        --ResearchTechnology(Technologies.GT_PulledBarrel, i) --gezogener Lauf
 
        --ResearchTechnology(Technologies.T_ChangeWeather, i)
        --ResearchTechnology(Technologies.T_WeatherForecast,i)
        --ResearchTechnology(Technologies.T_ThiefSabotage,i) 
    end
end 
 
function SetPeacetime( _seconds )
	---hier wird die Funktion special peacetime gestartet
	SpecialPeacetime();
    StartCountdown( _seconds, CountdownAbgelaufen, true );
end
 
function CountdownAbgelaufen()
    --Festlegung des Diplomatistatus für die Zeit nach der Peacetime 
    MultiplayerTools.SetUpDiplomacyOnMPGameConfig()
    --Nun wird auch die dramatische Musik gespielt
    Sound.PlayGUISound( Sounds.OnKlick_Select_kerberos, 127 )
 
    -- Text der nach Ende der Peacetime auf dem Bildschrim gezeigt wird..
	Message( "@color:255,255,0 Moege der Krieg beginnen !" );
end
 
function SpecialPeacetime()
	-- Anzahl der menschlichen Spieler wird hier ermittelt
	local _humenPlayer = XNetwork.GameInformation_GetMapMaximumNumberOfHumanPlayer()
	-- Abfrage ob Standardsituation gegeben ist das jeder sich  mit jedem  verbünden kann 
	if XNetwork.GameInformation_GetFreeAlliancesFlag() == 1 then
		-- Feststellung wer mit wem verbündet ist und Festlegung des Diplomatistatus für die Peacetime 
		if _humenPlayer > 1 then
			for _teamplayerID = 1, _humenPlayer do
                local _teamplayer = XNetwork.GameInformation_GetLogicPlayerTeam( _teamplayerID )
				for _oppoPlayerID = 1, _humenPlayer do
					if _teamplayerID ~= _oppoPlayerID then
						local _oppoPlayer = XNetwork.GameInformation_GetLogicPlayerTeam( _oppoPlayerID )
						if _teamplayer == _oppoPlayer then
							Logic.SetDiplomacyState( _oppoPlayerID, _teamplayerID, Diplomacy.Friendly )							
						else
							Logic.SetDiplomacyState( _oppoPlayerID, _teamplayerID, Diplomacy.Neutral )
						end
					end
				end
			end
		end
	end	
end
 
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
--+++++ Countdown Comfort Code ++++++++++++++++++++++++++++++++++++++++++++
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function StartCountdown(_Limit, _Callback, _Show)
    assert(type(_Limit) == "number")
 
    Counter.Index = (Counter.Index or 0) + 1
 
    if _Show and CountdownIsVisisble() then
        assert(false, "StartCountdown: A countdown is already visible")
    end
 
    Counter["counter" .. Counter.Index] = {Limit = _Limit, TickCount = 0, Callback = _Callback, Show = _Show, Finished = false}
 
    if _Show then
        MapLocal_StartCountDown(_Limit)
    end
 
    if Counter.JobId == nil then
        Counter.JobId = StartSimpleJob("CountdownTick")
    end
 
    return Counter.Index
end
 
function StopCountdown(_Id)
    if Counter.Index == nil then
        return
    end
 
    if _Id == nil then
        for i = 1, Counter.Index do
            if Counter.IsValid("counter" .. i) then
                if Counter["counter" .. i].Show then
                    MapLocal_StopCountDown()
                end
                Counter["counter" .. i] = nil
            end
        end
    else
        if Counter.IsValid("counter" .. _Id) then
            if Counter["counter" .. _Id].Show then
                MapLocal_StopCountDown()
            end
            Counter["counter" .. _Id] = nil
        end
    end
end
 
function CountdownTick()
    local empty = true
    for i = 1, Counter.Index do
        if Counter.IsValid("counter" .. i) then
            if Counter.Tick("counter" .. i) then
                Counter["counter" .. i].Finished = true
            end
 
            if Counter["counter" .. i].Finished and not IsBriefingActive() then
                if Counter["counter" .. i].Show then
                    MapLocal_StopCountDown()
                end
 
                -- callback function
                if type(Counter["counter" .. i].Callback) == "function" then
                    Counter["counter" .. i].Callback()
                end
 
                Counter["counter" .. i] = nil
            end
 
            empty = false
        end
    end
 
    if empty then
        Counter.JobId = nil
        Counter.Index = nil
        return true
    end
end
 
function CountdownIsVisisble()
    for i = 1, Counter.Index do
        if Counter.IsValid("counter" .. i) and Counter["counter" .. i].Show then
            return true
        end
    end
 
    return false
end



Zur Tutorial-Übersicht

tutorials/waffenstillstandszeit_festlegen.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)