--Script.Load( "maps\\user\\T(4) No Deal.lua" ) --Script.Load("Data\\Maps\\ExternalMap\\T(4) No Deal.lua" ) function MapspezifischeEinstellungen() SpecialMapInitialization = function() local _mapname = "(4)No_Deal" local _mapper = "sfc_header" 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, 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 = 1000, Clay = 1900, Wood = 1400, Stone = 1000, Iron = 0, Sulfur = 0 } -- 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 if mpc_Rules["FlagActive"].Act[1] then DestroyEntity("CTF1") if not(mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v1") then DestroyEntity("CTF2") end end if mpc_Rules["Playermode"][mpc_Rules["Playermode"].Cur] == "1v1" then mpc_MultiplayerPlaying = {true,false,false,true,false,false,false,false} local WorldSize = Logic.WorldGetSize() local Mitte = Logic.WorldGetSize()/2 for _x = 300,WorldSize,600 do if _x > WorldSize then _x = WorldSize - 300 Logic.CreateEntity( Entities.XD_Rock7, _x, 25000, 0, 0 ) break end Logic.CreateEntity( Entities.XD_Rock7, _x, 25000, 0, 0 ) end -- Start Türme zerstören für Spieler 2 und 3 for i = 1, table.getn(gv_Entities_Tuerme) do for u = 1, table.getn( Track_Entity_Table[2][ gv_Entities_Tuerme[i] ] ) do Logic.ResumeEntity(Track_Entity_Table[2][ gv_Entities_Tuerme[i] ][1]) DestroyEntity(Track_Entity_Table[2][ gv_Entities_Tuerme[i] ][1]) --ChangePlayer(Track_Entity_Table[2][ gv_Entities_Tuerme[i] ][1],1) end end for i = 1, table.getn(gv_Entities_Tuerme) do for u = 1, table.getn( Track_Entity_Table[3][ gv_Entities_Tuerme[i] ] ) do Logic.ResumeEntity(Track_Entity_Table[3][ gv_Entities_Tuerme[i] ][1]) DestroyEntity(Track_Entity_Table[3][ gv_Entities_Tuerme[i] ][1]) --ChangePlayer(Track_Entity_Table[3][ gv_Entities_Tuerme[i] ][1],4) end end -- Starttürme neu erfassen ErfasseStartTuerme() -- 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 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"] = 2 -- **** 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 = 3 + 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"}--"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 = 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"] = {150,180,240,300} mpc_Rules["FlagMaxHoldtime"].Cur = 2 mpc_Rules["FlagMaxHoldtime"].Sel = true ---- Wie nah muss man an die Flagge mpc_Rules["FlagRange"].Flag = 1750 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 = "Prinzessin" -- *** 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