-- function MapspezifischeEinstellungen() SpecialMapInitialization = function() local _mapname = "(3) Das Land der Bruecken" local _mapper = "White_Change" local _version = "2.8" local _specialtext = "Mod by Anarki" MapVersion_Write_Comfort(_mapname, _mapper, _version, _specialtext) --mpc_MultiplayerPlaying = {true, true, false, false, false, false, false, false} -- 2 Spieler --mpc_MultiplayerPlaying = {true, true, true, false, false, false, false, false} -- 3 Spieler mpc_MultiplayerPlaying = {true, true, true, false, false, false, false, false} -- 4 Spieler --mpc_MultiplayerPlaying = {true, true, true, true, true, false, false, false} -- 5 Spieler --mpc_MultiplayerPlaying = {true, true, true, true, true, true, false, false} -- 6 Spieler --mpc_MultiplayerPlaying = {true, true, true, true, true, true, true, false} -- 7 Spieler --mpc_MultiplayerPlaying = {true, true, true, true, true, true, true, true} -- 8 Spieler LocalMusic.UseSet = HIGHLANDMUSIC SetupHighlandWeatherGfxSet() g_MC_StR = { Gold =500, Clay = 2200, Wood = 1600, Stone = 800, Iron = 50, Sulfur = 50 } -- Winter und Brücken sind standardmaessig verboten vor WS Ende -- Man muss sie hier erlauben falls diese vor WS Ende erlaubt sein sollen! for _pId=1,8 do -- AllowTechnology(Technologies.T_MakeSnow, _pId); -- AllowTechnology(Technologies.B_Bridge, _pId); end -- Die während Friedenszeit blockenden Entitys erfassen -- Bei passenden Beispielen die zwei Striche entfernen -- relativ komplexes Beispiel aus No Deal: gvBlocking = {} ---- Mauern und Tore erfassen, setzt Mauern auf PlayerID 0 -- Tore werden bei WS Ende geöffnet Mauern_und_Tore_Erfassen() -- Blockende Gegenstaende die zerstoert werden sollen (ausser Tore!) --local WorldSize = Logic.WorldGetSize() --local Mitte = Logic.WorldGetSize()/2 --for _y = 300,WorldSize,600 do -- if _y > WorldSize then -- _y = WorldSize - 300 -- table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, Mitte, _y, 0, 0 )) -- break -- end -- table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, Mitte, _y, 0, 0 )) --end for i = 1,7 do --table.insert( gvBlocking, GetEntityId("Stein"..i)) -- ChangePlayer ( gvBlocking[i],0 ) end --for i = 1,table.getn(gvBlocking) do -- SetEntityName(gvBlocking[i] , "Blocking"..i ) -- gvBlocking[i] = GetEntityName( gvBlocking[i] ) -- ChangePlayer(gvBlocking[i],0) --end -- Beispiel 1: Direkt kreierte Entitys: --gvBlocking[1] = Logic.CreateEntity( Entities.XD_Rock7, 36050, 25250, 0, 0 ) --gvBlocking[2] = Logic.CreateEntity( Entities.XD_Rock7, 36050, 22300, 0, 0 ) -- Beispiel 2: Nach Namen, hier "Stein1", "Stein2"... bis "Stein10" --for i = 1,10 do -- gvBlocking[i] = GetEntityId("Stein"..i) --end -- Beispiel 3: Nach Namen "gate1" bis "gate4" --for i = 1,4 do -- gvBlocking[i] = GetEntityId("gate"..i) -- ChangePlayer ( gvBlocking[i],0 ) --end -- Beispiel 4: Hier werden 16 Steine im Abstand von 500 SiedlerCM erstellt --local blockingYPos = 26700 --local blockingXPos = 30000 --for i = 1,16 do -- gvBlocking[i] = Logic.CreateEntity( Entities.XD_Rock7, blockingXPos, blockingYPos, 90, 0 ) -- blockingYPos = blockingYPos + 500 --end -- Beispiel 5: Ein direkter Cut durch die Mitte mit blockenden Entitys --local WorldSize = Logic.WorldGetSize() --local Mitte = Logic.WorldGetSize()/2 --local i = 1 --local pos = 0 ---- Beispiel 5.1: von rechts unten nach links oben also \ --while pos <= WorldSize do -- gvBlocking[i] = Logic.CreateEntity( Entities.XD_Rock7, Mitte, pos, 90, 0 ) -- pos = pos + 500 -- i = i + 1 -- if pos > WorldSize then -- gvBlocking[i] = Logic.CreateEntity( Entities.XD_Rock7, Mitte, WorldSize, 90, 0 ) -- end --end ---- Beispiel 5.2: von links unten nach rechts oben also / --while pos <= WorldSize do -- gvBlocking[i] = Logic.CreateEntity( Entities.XD_Rock7, pos, Mitte, 90, 0 ) -- pos = pos + 500 -- i = i + 1 -- if pos > WorldSize then -- gvBlocking[i] = Logic.CreateEntity( Entities.XD_Rock7, WorldSize, Mitte, 90, 0 ) -- end --end end SpecialMapGameStartCallback = function() -- Mapspezifische Aktionen sobald das Spiel beginnt -- Brücken schließen Comfort_TrackEntityIni(0,Entities.XD_DrawBridgeOpen1) for i = 1, table.getn( Track_Entity_Table[0][Entities.XD_DrawBridgeOpen1] ) do MakeInvulnerable(ReplaceEntity(Logic.GetEntityName(Track_Entity_Table[0][Entities.XD_DrawBridgeOpen1][i]),Entities.PB_DrawBridgeClosed1)) end -- Söldnerquartiere Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 30700, 31900, 0, 8 ), "merc_1" ) Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 27100, 31800, 180, 8 ), "merc_2" ) Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 27100, 25900, 180, 8 ), "merc_3" ) Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 30600, 25800, 0, 8 ), "merc_4" ) Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 29000, 24600, 90, 8 ), "merc_5" ) Logic.SetEntityName ( Logic.CreateEntity( Entities.CB_Mercenary, 29000, 33300, 270, 8 ), "merc_6" ) Logic.AddMercenaryOffer( GetEntityId( "merc_5" ), Entities.CU_Barbarian_LeaderClub2, 20, ResourceType.Gold, 1000, ResourceType.Iron, 500 ) Logic.AddMercenaryOffer( GetEntityId( "merc_5" ), Entities.CU_BlackKnight_LeaderMace2, 100, ResourceType.Gold, 1000, ResourceType.Iron, 500 ) Logic.AddMercenaryOffer( GetEntityId( "merc_6" ), Entities.CU_Barbarian_LeaderClub2, 20, ResourceType.Gold, 1000, ResourceType.Iron, 500 ) Logic.AddMercenaryOffer( GetEntityId( "merc_6" ), Entities.CU_BlackKnight_LeaderMace2, 100, ResourceType.Gold, 1000, ResourceType.Iron, 500 ) for i = 1,4 do Logic.AddMercenaryOffer( GetEntityId( "merc_"..i ), Entities.PU_Scout, 50, ResourceType.Gold, 200, ResourceType.Iron, 100 ) Logic.AddMercenaryOffer( GetEntityId( "merc_"..i ), Entities.PU_Serf, 100, ResourceType.Gold, 75) end Logic.SetNumberOfBuyableHerosForPlayer(1,math.floor(mpc_Rules.MaxHeroes[mpc_Rules.MaxHeroes.Cur]*1.5)) end SpecialMapPeaceTimeEndActions = function() -- Hier z.B. können die nicht im TAble gvBlocking erfassten Gegenstände zerstört werden -- oder z.B. spezielle vorher verbotene Technologien wieder freigeschalten werden for i = 1,7 do SetNeutral(i,8) end end SpecialMapPlayerModeActions = function() -- in dieser Funktion werden spezielle Funktionen bei anders definierter Spielerzahl als in der Map vorgesehen ausgeführt -- Die Aktion wird direkt nach Regelauswahl bestätigung zuerst ausgeführt -- Beispiel für ein 1v1 statt einem 2v2 auf Toscana -- Es werden bei 2v2 QUER in der Mitte Steine platziert --local WorldSize = Logic.WorldGetSize() --local Mitte = Logic.WorldGetSize()/2 -- --if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v1" then -- mpc_MultiplayerPlaying = {true,false,false,true,false,false,false,false} -- for _y = 0,WorldSize,600 do -- if _y > WorldSize then -- _y = WorldSize -- Logic.CreateEntity( Entities.XD_Rock7, Mitte, _y, 0, 0 ) -- break -- end -- Logic.CreateEntity( Entities.XD_Rock7, Mitte, _y, 0, 0 ) -- end --end -- Allen Mauern die ID 0 zuweisen if mpc_Rules.WS.Cur < 4 then StartCountdown(15*60,Mercenaries2,false) elseif mpc_Rules.WS.Cur >= 4 then for i = 1,4 do Logic.AddMercenaryOffer( GetEntityId("merc_"..i) , Entities.PU_LeaderRifle2, 20, ResourceType.Gold, 2000, ResourceType.Sulfur, 1000 ) end end for i = 5,6 do Logic.AddMercenaryOffer( GetEntityId("merc_"..i) , Entities.CU_BlackKnight_LeaderMace1, 100, ResourceType.Gold, 1000, ResourceType.Iron, 500) Logic.AddMercenaryOffer( GetEntityId("merc_"..i) , Entities.CU_Barbarian_LeaderClub1, 20, ResourceType.Gold, 1000, ResourceType.Iron, 500 ) end function Mercenaries2() Message("Ab nun werden auch schwere Scharfschützen angeboten!") Message("Heavy Riflemen may now be hired!") for i = 1,4 do Logic.AddMercenaryOffer( GetEntityId("merc_"..i) , Entities.PU_LeaderRifle2, 20, ResourceType.Gold, 2000, ResourceType.Sulfur, 1000 ) end end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v2" then Tools.GiveResouces(1, 150 , 660, 480, 240, 15, 15) mpc_MultiplayerPlaying = {true,true,true,false,false,false,false,false} factor = 0 if mpc_Rules.WS.Cur < 8 then factor = 0.1 * (7 - mpc_Rules.WS.Cur) end Tools.GiveResouces(1, factor*g_MC_StR.Gold , factor*g_MC_StR.Clay, factor*g_MC_StR.Wood, factor*g_MC_StR.Stone, factor*g_MC_StR.Iron, factor*g_MC_StR.Sulfur) end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v1" then mpc_MultiplayerPlaying = {false,true,true,false,false,false,false,false} local WorldSize = Logic.WorldGetSize() local Mitte = Logic.WorldGetSize()/2 for _x = 300,21000,600 do Logic.CreateEntity( Entities.XD_Rock7, _x, Mitte, 0, 0 ) end for _x = 37000,57300,600 do Logic.CreateEntity( Entities.XD_Rock7, _x, Mitte, 0, 0 ) end Logic.CreateEntity( Entities.XD_Rock7, 57300, Mitte, 0, 0 ) for _x = 21000,37000,600 do Logic.CreateEntity( Entities.XD_Rock7, _x, 40000, 0, 0 ) end for _y = Mitte,40000,600 do Logic.CreateEntity( Entities.XD_Rock7, 21000, _y, 0, 0 ) Logic.CreateEntity( Entities.XD_Rock7, 37000, _y, 0, 0 ) end end -- HQs aller Nicht-Spieler zerstören for _pId = 1,8 do if not(mpc_MultiplayerPlaying[_pId]) then for u = 1, table.getn( gv_Entities_HQs ) do for v = 1, table.getn( Track_Entity_Table[_pId][gv_Entities_HQs[u]] ) do DestroyEntity( Track_Entity_Table[_pId][gv_Entities_HQs[u]][v] ) end end end end end ---- Hier die Grundeinstellungen machen MPC_Initialisierung = function() -- Capture the Flag Einstellungen: --local _Flagpos = GetPosition("Prinzessin") --for _pId = 1,8 do -- Die Helden für CtF in Table legen --table.insert(CtF_Helden[_pId],GetEntityId("Held".._pId)) -- Die Ziele für CtF in table legen --CtF_Ziele[_pId] = GetEntityId("Ziel".._pId) -- Erstellung des Sichtbereichs bei der Flagge --Logic.SetEntityExplorationRange ( Logic.CreateEntity( Entities.XD_ScriptEntity, _Flagpos.X+_pId, _Flagpos.Y+_pId, 0, _pId ), 10 ) --end -- Die Flagge(n) erfassen --table.insert(CtF_Flagge,GetEntityId("Prinzessin")) -- Bestimmt welches Dorfzentrumlevel wieder gesetzt wird bei Spielstart -- Die anderen gesetzten Dorfzentren sind für die "Zugeordnete DZs"-Regel mpc_Rules["DorfzentrumLvL"] = 1 -- **** Wartezeit nach Einstellung *** mpc_GameStartDelay = 1 -- **** Friedenszeiten *** -- Falls nicht auswaehlbar sel: false mpc_Rules["WS"] = {0, 5, 10, 15, 20, 30, 40, 60, 90} mpc_Rules["WS"].Cur = 6 mpc_Rules["WS"].Sel = true mpc_Rules["MaxHeroes"] = {0,1,2,3,4,5,6,7,8,9,10,11,12} mpc_Rules["MaxHeroes"].Cur = 2 + 1 mpc_Rules["MaxHeroes"].Sel = true mpc_Rules["TradeLimit"] = {g_MC_Loc[1].Deactivated,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,15000} mpc_Rules["TradeLimit"].Cur = 4 mpc_Rules["TradeLimit"].Sel = true mpc_Rules["Playermode"] = {"1v1","1v2"}--"1v1","2v1","2v2","2v3","3v3","3v4","4v4"} mpc_Rules["Playermode"].Cur = 2 mpc_Rules["Playermode"].Sel = true mpc_Rules["Weathermin"] = {0,1,1.5,2,3,5,10} mpc_Rules["Weathermin"].Cur = 2 mpc_Rules["Weathermin"].Sel = true mpc_Rules["Maxtowers"] = {0,1,2,3,5,7,10,15,20} mpc_Rules["Maxtowers"].Cur = 4 mpc_Rules["Maxtowers"].Sel = true -- **** Standardeinstellungen Regeln **** -- Einheiten: -- Schwere Kavallerie - Leichte Kavallerie - Schwere Kanonen - Leichte Kanonen - Scharfschuetzen - Diebe mpc_Rules["Units1"].Act = {false, false, false, false, true, true} -- Default Einheiten mpc_Rules["Units1"].Sel = {true, true, true, true, true, true} -- Auswaehlbare Einheiten -- Gebaeude: -- Kanonentuerme, Balistatuerme, Marktplaetze, Bruecke, Reserve, Reserve mpc_Rules["Buildings1"].Act = {false, false, false, true} -- Default Gebaeude mpc_Rules["Buildings1"].Sel = {true, true, true, true} -- Auswaehlbare Gebaeude -- Wetter: -- Winter, Regen, Sommer mpc_Rules["Weather"].Act = {true, true, true} -- Default Wetter mpc_Rules["Weather"].Sel = {true, true, true} -- Auswaehlbare Wetter -- Spezialregeln: -- Anti-Abreiss, Segnungsbeschränkung, Dz-Zuordnung(Team), Dz-Zuordnung(Spieler), Anti-Rush, NurSpieler1PAUSE mpc_Rules["Special1"].Act = {true, true, false, false, true, false} -- Default Specials mpc_Rules["Special1"].Sel = {true, true, true, true, true, true} -- Auswaehlbare Specials mpc_Rules["Special1"].TimeBetweenBlessings = 120 -- Unverkaufbare Starttürme, Unzerstörbare Starttürme, Keine Starttürme, Türmebeschränkung Mauerbau,SpeedStart mpc_Rules["Special2"] = {} mpc_Rules["Special2"].Act = {true, false, false, true, false,false} -- Default Specials mpc_Rules["Special2"].Sel = {true, true, true, true, true,true} -- Auswaehlbare Specials mpc_Rules.FastGame = {false} mpc_Rules.FastGame.Multiplicator = 1.25 mpc_Rules.FastGame.Sel = true -- **** Heldeneinstellungen **** -- Dario Ari Erec Salim Pilgrim Helias Drake Yuki Mary Kerberos Varg Kala mpc_Rules["Heroes"].Act = {true, true, true, true, true, true, true, true, true, true, true, true} -- Erlaubte Helden mpc_Rules["Heroes"].Sel = {true, true, true, true, true, true, true, true, true, true, true, true} -- Auswaehlbare Helden -- CtF Einstellungen ---- CtF Aktivieren / HQ unzerstörbar mpc_Rules["FlagActive"].Act = {false, true} mpc_Rules["FlagActive"].Sel = {false, true} ---- Wieviel Punkte gilt es zu sammeln mpc_Rules["FlagPoints"] = {1,3,5,7,10,15} mpc_Rules["FlagPoints"].Cur = 3 mpc_Rules["FlagPoints"].Sel = true ---- Maximale Haltezeit mpc_Rules["FlagMaxHoldtime"] = {90,120,150,180,240,300,600} mpc_Rules["FlagMaxHoldtime"].Cur = 4 mpc_Rules["FlagMaxHoldtime"].Sel = true ---- Wie nah muss man an die Flagge mpc_Rules["FlagRange"].Flag = 500 mpc_Rules["FlagRange"].Dest = 1500 --- muss man die Flagge ans HQ zurückbringen oder eine andere Entity? --- bei anderer Entity muss diese den Skriptnamen: "Ziel" + SpielerID haben mpc_Rules["FlagRange"].HQ = true --- Wenn das folgende True ist, dann können alle Helden die Flagge sammeln --- sonst muss ein Held mit namen "Held" + SpielerID im Spiel sein mpc_Rules["FlagRange"].AllHeroes = true --- Der EntityName der Flagge mpc_Rules["FlagRange"].FlagName = "Flagge" -- *** Sonstige Einstellungen *** lang = 1 -- Standardsprache Quickstart: Deutsch mpc_Rules.statisticLog = true -- Statistiklogging möglich -- *** Sonstige Einstellungen *** lang = 1 -- Standardsprache Quickstart: Deutsch mpc_Rules.statisticLog = true -- Statistiklogging möglich -- Rulesetauswahl starten (falls 0 gelten direkt Standardeinstellungen!!!) SetupRuleSets(99) -- Zeigt direkt anfangs für Spieler eins das Tributfenster GUIAction_ToggleMenu( "TradeWindow", 1) end end function Checksum() ChecksumString1 = string.dump(MPCOMFORT) ChecksumString2 = string.dump(GameCallback_OnGameStart) Checksum = 0 for i = 1, string.len(ChecksumString1) do Checksum = Checksum + string.byte(ChecksumString1,i) end for i = 1, string.len(ChecksumString2) do Checksum = Checksum + string.byte(ChecksumString2,i) end ChecksumNotOk = function() GameCallback_GUI_ChatStringInputDone("hat eine unerlaubte Scriptaenderung vorgenommen!") end if not(Checksum == 12345) then StartSimpleJob("ChecksumNotOk") end end