[[http://www.siedler-games.de|{{:sg-link.jpg|}}]] ====== Größe von Gebäuden ====== Damit Mary auch mal was nützliches tut. Habe ich sie hier als Vermesser benutzt. Sie läuft an die Ecken der Entity und nachher wird Breite und Tiefe ausgegeben. Einfach in eine leere Karte. Man braucht die Delay-Funktion dazu. \\ \\ Habe alle Teile, die ich zum Testen gebraucht habe auskommentiert und drin gelassen. \\ **Move** habe ich durch **Laufe** ersetzt, dann braucht man nicht zu warten. Für den, ders braucht: (unten ist ein table) function FirstMapAction() Tools.ExploreArea( -1, -1, 900 ) _Pos= {X=6000,Y=6000} CreateEntity (1,Entities.CU_Mary_de_Mortfichet,_Pos,"Mary") --Vermesse() -- hab ich gebraucht, wenn in der DelayFunc ein Fehler war. Der wird ja nicht angezeigt StartDelayFunc(Vermesse) end --********************************************************************************** function Vermesse() -- wollte nicht Measure() local _Pos= {X=8000,Y=8000} nId=Logic.CreateEntity( Entities.PB_University1, --- hier die Entity rein _Pos.X, _Pos.Y, 0, 1 ); SetEntityName(nId,"willi") Camera.FollowEntity(GetEntityId("Mary")) ------------------------------------------------------------------------------------- Laufe("Mary", ZurEntity("willi",200)) -- Die Zahl muß manchmal angepasst werden --Delay(15) _pos =GetPosition("Mary") --Message(_pos.X.. "_____Y=___".. _pos.Y) x1=_pos.X-8000 --Message(x1) ------------------------------------------------------------------------------------- Laufe("Mary", RechtsVonPos("willi",-200)) --Delay(10) _pos =GetPosition("Mary") --Message(_pos.X.. "_____Y=___".. _pos.Y) y1=_pos.Y-8000 --Message(y1) ------------------------------------------------------------------------------------- Laufe("Mary", ZurEntity("willi",-200)) --Delay(10) _pos =GetPosition("Mary") --Message(_pos.X.. "_____Y=___".. _pos.Y) x2=_pos.X-8000 --Message(x2) ------------------------------------------------------------------------------------- Laufe("Mary", RechtsVonPos("willi",200)) --Delay(10) _pos =GetPosition("Mary") --Message(_pos.X.. "_____Y=___".. _pos.Y) y2=_pos.Y-8000 --Message(y2) breit=math.abs(x1)+math.abs(x2) tief =math.abs(y1)+math.abs(y2) Message( "Die Entity ist ".. breit.." breit und "..tief.." tief") end --*********************************************************************************************************** function ZurEntity(_entity, _range, _currPos) -- neu geschrieben -- _entity = die Entity zu deren Winkel man sich bewegen will -- _currPos Die Position auf der man sich befindet -- _tRange= die Entfernung zur Entity (im Winkel der Entity) Weiter weg ist dann negativ if type (_entity) == "table" then Message("Keine Position sondern Entity angeben") return nil end if type (_entity) == "string" then _entity = GetEntityId(_entity); end local tPos = GetPosition(_entity) if _currPos == nil then _currPos = tPos elseif type (_currPos) == "string" or type (_currPos) == "number" then _currPos = GetPosition(_currPos) end local nEntityAngle=Logic.GetEntityOrientation(_entity); local nSin=math.sin((math.rad(nEntityAngle))); local nCos=math.cos((math.rad(nEntityAngle))); local tPos = GetPosition(_entity) return {X=_currPos.X-nCos*_range,Y=_currPos.Y-nSin*_range}; -- Rückgabe=neue Position end --*********************************************************************************************************** function RechtsVonPos(_entity,_range,_currPos) -- neu geschrieben -- _entity = die Entity zu deren Winkel man nach rechts will -- _currPos Die Position auf der man sich befindet -- _tRange= die Entfernung nach rechts (im Winkel der Entity) Nach links ist dann negativ if type (_entity) == "table" then Message("Keine Position sondern Entity angeben") return nil end if type (_entity) == "string" then _entity = GetEntityId(_entity); end local tPos = GetPosition(_entity) if _currPos == nil then _currPos = tPos elseif type (_currPos) == "string" or type (_currPos) == "number" then _currPos = GetPosition(_currPos) end local nEntityAngle=Logic.GetEntityOrientation(_entity); local nSin=math.sin((math.rad(nEntityAngle))); local nCos=math.cos((math.rad(nEntityAngle))); return {X=_currPos.X+nSin*_range,Y=_currPos.Y-nCos*_range}; -- Rückgabe=neue Position end --*********************************************************************************************************** function Laufe(_entity,_tPos) -- vollte nicht RunTo schreiben local pEntityWarPos=GetPosition(_entity) if type (_tPos) == "string" or type (_tPos) == "number" then _tPos = GetPosition(_tPos); end Move(_entity,_tPos); DelayShort(2) local pEntityIstPos=GetPosition(_entity) while not (pEntityIstPos.X == pEntityWarPos.X and pEntityIstPos.Y == pEntityWarPos.Y) do --er läuft noch pEntityWarPos=GetPosition(_entity) DelayShort(2) pEntityIstPos=GetPosition(_entity) end end --*********************************************************************************************************** \\ FIXME Also ich habe da so meine Zweifel, dass die nachfolgenden Werte stimmen. Diese rühren u.a. daher, dass ich davon ausgehe, dass die Upgradestufe eines Gebäudes keine anderen Maße hat, als das Grundgebäude. Ferner bin ich bspw. auch der Meinung, dass ein Sägewerk wesentlich mehr Platz beansprucht, als ein Wohnhaus. Von daher sind die Werte wohl eher "mit Vorsicht" zu genießen. Ob das Script richtig funktioniert und nur beim Eintragen in die nachfolgende Tabelle Fehler passiert sind, habe ich nicht überprüft! --- //[[dedk-script-wiki@top-topics.com|Netsurfer]] 2007/01/12 15:51// -- Ohne Gewähr gebaeudeGroesse={ -- name, breit , tief {"CB_Abbey03",400,400}, {"CB_Abbey04",400,400}, {"CB_BarmeciaCastle",400,400}, {"CB_Bastille1",1800,1800}, {"CB_Camp01",800,900}, {"CB_Camp02",800,600}, {"CB_Camp03",800,600}, {"CB_Camp04",1000,600}, {"CB_Camp05",600,600}, {"CB_Camp06",600,600}, {"CB_Camp07",600,600}, {"CB_Camp08",600,600}, {"CB_Camp09",800,600}, {"CB_Camp10",800,600}, {"CB_Camp11",800,600}, {"CB_Camp12",1000,600}, {"CB_Camp13",600,600}, {"CB_Camp14",600,600}, {"CB_Camp15",600,600}, {"CB_Camp16",600,600}, {"CB_Camp17",600,600}, {"CB_Camp18",800,600}, {"CB_Camp19",600,600}, {"CB_Camp20",600,600}, {"CB_Camp21",600,600}, {"CB_Camp22",600,600}, {"CB_Camp23",800,600}, {"CB_Camp24",600,600}, {"CB_Castle1",600,600}, {"CB_CrawfordCastle",1600,2000}, {"CB_DarkCastle",1300,1300}, {"CB_DestroyAbleRuinHouse1",1900,1800}, {"CB_DestroyAbleRuinMonastery1",600,600}, {"CB_DestroyAbleRuinResidence1",1000,1400}, {"CB_DestroyAbleRuinSmallTower1",600,600}, {"CB_DestroyAbleRuinSmallTower3",600,600}, {"CB_Evil_Tower1",600,600}, {"CB_FolklungCastle",400,400}, {"CB_HermitHut1",2300,1900}, {"CB_InventorsHut1",800,600}, {"CB_KaloixCastle",1400,2000}, {"CB_Lighthouse",2200,1900}, {"CB_LighthouseActivated",800,900}, {"CB_Mercenary",800,900}, {"CB_MinerCamp1",800,600}, {"CB_MinerCamp2",1000,800}, {"CB_MinerCamp3",700,700}, {"CB_MinerCamp4",700,700}, {"CB_MinerCamp5",700,600}, {"CB_MinerCamp6",700,700}, {"CB_Mint1",500,500}, {"CB_MonasteryBuildingSite1",1300,1000}, {"CB_RobberyTower1",2000,3200}, {"CB_SteamMashine",800,900}, {"CB_TechTrader",400,400}, {"PB_Alchemist1",1000,600}, {"PB_Alchemist2",1600,1000}, {"PB_Archery1",1600,1000}, {"PB_Archery2",1700,1500}, {"PB_Bank1",1700,1500}, {"PB_Bank2",1000,1100}, {"PB_Barracks1",1000,1100}, {"PB_Barracks2",1600,1600}, {"PB_Blacksmith1",1600,1600}, {"PB_Blacksmith2",900,1100}, {"PB_Blacksmith3",900,1100}, {"PB_Brickworks1",900,1100}, {"PB_Brickworks2",1300,1000}, {"PB_DarkTower1",1300,1000}, {"PB_DarkTower2",400,400}, {"PB_DarkTower3",400,400}, {"PB_DrawBridgeClosed1",400,400}, {"PB_DrawBridgeClosed2",700,200}, {"PB_Farm1",200,700}, {"PB_Farm2",1200,800}, {"PB_Farm3",1200,800}, {"PB_Foundry1",1200,800}, {"PB_GunsmithWorkshop2",1200,1200}, {"PB_Headquarters1",1200,1200}, {"PB_Headquarters2",1400,1400}, {"PB_Headquarters3",1400,1400}, {"PB_Market1",1400,1400}, {"PB_Market2",1400,1400}, {"PB_MasterBuilderWorkshop",1400,1400}, {"PB_Monastery1",1000,1100}, {"PB_Monastery2",1700,1500}, {"PB_Monastery3",1700,1500}, {"PB_Outpost1",1700,1500}, {"PB_Outpost2",1400,1400}, {"PB_Outpost3",1400,1400}, {"PB_PowerPlant1",1400,1400}, {"PB_Residence1",700,700}, {"PB_Residence2",700,600}, {"PB_Residence3",700,600}, {"PB_Sawmill1",700,600}, {"PB_Sawmill2",1800,1100}, {"PB_Stable1",1800,1100}, {"PB_Stable2",2000,1800}, {"PB_StoneMason1",2000,1800}, {"PB_StoneMason2",1200,1000}, {"PB_Tower1",1400,1100}, {"PB_Tower2",400,400}, {"PB_Tower3",400,400}, {"PB_University1",400,400}, {"PB_University2",1700,1500}, {"PB_VillageCenter1",1700,1500}, {"PB_VillageCenter2",1300,1400}, {"PB_VillageCenter3",1300,1400}, {"PB_WeatherTower1",1300,1400}, {"PB_Weathermachine",600,600}}