[[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}}