-- Gegenueber sind sich Spieler 1-6, 2-5, 3-4 @cr -- Spielmods: 1v1(2v5); 2v2(1+3v4+6); 3v3 function MapspezifischeEinstellungen() SpecialMapInitialization = function() local _mapname = "(6) Bergweg" local _mapper = "Michi" 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, true, true, true, 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 = 1500, Wood = 1450, Stone = 700, 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 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 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 --mpc_Rules["Playermode"] = {"1v1","2v1","2v2","2v3","3v3"}--,"3v4","4v4"} if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v1" then mpc_MultiplayerPlaying = {false, true, false, false, true, false, false, false} local _pos1 = {X=200,Y=24100} local _pos2 = {X=60200,Y=24100} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=200,Y=38500} local _pos2 = {X=27000,Y=38500} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=27000,Y=38500} local _pos2 = {X=27000,Y=50000} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=34000,Y=38500} local _pos2 = {X=34000,Y=50000} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=34000,Y=38500} local _pos2 = {X=60200,Y=38500} CreateWallsFromTo(_pos1,_pos2) DestroyEntity( Logic.GetEntityAtPosition(30600,59900) ) end --mpc_Rules["Playermode"] = {"1v1","2v2_1Tor","2v2_2Tore","2v2_3Tore","3v3"}--,"3v4","4v4"} if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "2v2_3Tore" then mpc_MultiplayerPlaying = {true, false, true, true, false, true, false, false} end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "2v2_2Tore" then mpc_MultiplayerPlaying = {true, false, true, true, false, true, false, false} local _pos1 = {X=21100,Y=32200} local _pos2 = {X=21100,Y=29400} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=39700,Y=32200} local _pos2 = {X=39700,Y=29400} CreateWallsFromTo(_pos1,_pos2) end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "2v2_1Tor" then mpc_MultiplayerPlaying = {true, false, true, true, false, true, false, false} local _pos1 = {X=21400,Y=44400} local _pos2 = {X=21400,Y=41600} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=39500,Y=44400} local _pos2 = {X=39500,Y=41600} CreateWallsFromTo(_pos1,_pos2) CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=21300,Y=19700} local _pos2 = {X=21300,Y=16900} CreateWallsFromTo(_pos1,_pos2) local _pos1 = {X=39600,Y=19700} local _pos2 = {X=39600,Y=16900} CreateWallsFromTo(_pos1,_pos2) end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "2v2_KeineMauern" then mpc_MultiplayerPlaying = {true, false, true, true, false, true, false, false} local WorldSize = Logic.WorldGetSize() local Mitte = Logic.WorldGetSize()/2 for _y = 12000,47000,600 do table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, 26500, _y, 0, 0 )) table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, Mitte+(Mitte-26500), _y, 0, 0 )) end -- Allen Tore und Mauern zerstoeren local destr = SucheAufDerWelt(0,Entities.XD_DarkWallStraight) for i = 1, table.getn( destr ) do DestroyEntity( destr[i] ) end destr = SucheAufDerWelt(0,Entities.XD_DarkWallStraightGate_Closed) for i = 1, table.getn( destr ) do DestroyEntity( destr[i] ) end end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "3v3_KeineMauern" then local WorldSize = Logic.WorldGetSize() local Mitte = Logic.WorldGetSize()/2 for _y = 12000,47000,600 do table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, 26500, _y, 0, 0 )) table.insert( gvBlocking,Logic.CreateEntity( Entities.XD_Rock7, Mitte+(Mitte-26500), _y, 0, 0 )) end -- Allen Tore und Mauern zerstoeren local destr = SucheAufDerWelt(0,Entities.XD_DarkWallStraight) for i = 1, table.getn( destr ) do DestroyEntity( destr[i] ) end destr = SucheAufDerWelt(0,Entities.XD_DarkWallStraightGate_Closed) for i = 1, table.getn( destr ) do DestroyEntity( destr[i] ) end end for _pId = 1, 8 do if not(mpc_MultiplayerPlaying[_pId]) then for i = 1,2 do for v = 1,3 do for u = 1,table.getn(mpc_villageCenters[_pId][ v ] ) do DestroyEntity( Logic.GetEntityAtPosition(mpc_villageCenters[_pId][v][u].pos.X,mpc_villageCenters[_pId][v][u].pos.Y) ) end end end 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 mpc_HideLooseMsgForNotPlayersCounter = 2 StartSimpleJob("mpc_HideLooseMsgForNotPlayers") local Mitte = Logic.WorldGetSize()/2 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 = 15 -- **** 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","2v2_1Tor","2v2_2Tore","2v2_3Tore","2v2_KeineMauern","3v3","3v3_KeineMauern"}--,"3v4","4v4"} mpc_Rules["Playermode"].Cur = 3 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 = 2 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 = {true, 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 -- 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