Keron
|
12.03.2010 19:41 1041 mal angesehen |
Code für Gräber
Beim Tod eines Soldaten wird einfach ein Grab (3 Auswahlmöglichkeiten, siehe Screenshot) plaziert. Sieht viel schöner aus als diese Schwerter und Bögen immer:). Leider blockiert es bei einer größeren Schlacht dann das Gebiet :). Es ist jedoch nur für größere Maps mit wenig Kampf geeignet.
zusammen mit Mordred entwickelt :)
Auf das Bild klicken, um es in Originalgröße zu sehen (297,05 KB)
Kommentare
fighty
|
13.11.2015 17:32 |
Es sieht aber gut aus. Wenn man den Friedhof etwas abseits plaziert stört er nicht.
Siedler_Team
|
14.03.2010 11:05 |
Zitat von fritz 98:
Kann "mein" SucheAufDerWelt schon lange.
Aha! Man lernt eben nie aus.
andre111
|
14.03.2010 09:57 |
@fritz 98:
Ich hab die Funktion überarbeitet, weis aber nicht ob ich sie hier rein stellen soll.
FG
andre111
fritz_98
|
14.03.2010 09:40 |
@Keron: Nimm doch einfach einen Trigger: Events.LOGIC_EVENT_ENTITY_DESTROYED
Beispiele sind das hier und mein Waffenaufhebecode.
@Siedler_Team: Kann "mein" SucheAufDerWelt schon lange.
s. der Rote Baron 1 und alles, was danach kommt.
MfG
Fritz
Siedler_Team
|
13.03.2010 21:58 |
Naja fritz,
Keron meint sicherlich die abgeänderte Version SucheAufDerWelt von Kingsia, die auch andere Entities als ID null oder ID eins suchen kann.
Ich befürchte aber, dass die vielen HiResJobs ihm einen Strich durch die Rechnung machen, wenn sie auf einer "realen" Map verwendet werden.
Was auf einer recht kleinen Testmap Map laufen mag, wird da vermutlich einen Absturz verursachen.
Grund:
Wenn mit der Funktion abgefragt werden soll:
"Setze ein Grab, wenn irgendwo auf der Map eine stirbt." Dann müssen die vielen HiResJobs die ganze Karte absuchen!
Viel Vergnügen!
aCids Bedenken sind berechtigt und die teile ich hiermit.
fritz_98
|
13.03.2010 20:32 |
Von Kingsia?!
Keron
|
13.03.2010 12:08 |
Benötigt wird noch die SucheAufDerWelt - am besten die von Kingsia
function SucheAufDerWelt(_player, _entity, _groesse, _punkt) local punktX1, punktX2, punktY1, punktY2, data local gefunden = {} local rueck -- Version Kingsia if not _groesse then _groesse = Logic.WorldGetSize() _groesse = math.floor(_groesse * 0.71) end if not _punkt then _punkt = {X = _groesse/2, Y = _groesse/2} end if _player == 0 then data ={Logic.GetEntitiesInArea(_entity, _punkt.X, _punkt.Y, _groesse, 16)} else data ={Logic.GetPlayerEntitiesInArea(_player,_entity, _punkt.X, _punkt.Y, _groesse, 16)} end if data[1] >= 16 then local _klgroesse = _groesse / 2 local punktX1 = _punkt.X - _groesse / 4 local punktX2 = _punkt.X + _groesse / 4 local punktY1 = _punkt.Y - _groesse / 4 local punktY2 = _punkt.Y + _groesse / 4 rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX1,Y=punktY1}) for i = 1, table.getn(rueck) do if not IstDrin(rueck[i], gefunden) then table.insert(gefunden, rueck[i]) end end rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX1,Y=punktY2}) for i = 1, table.getn(rueck) do if not IstDrin(rueck[i], gefunden) then table.insert(gefunden, rueck[i]) end end rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX2,Y=punktY1}) for i = 1, table.getn(rueck) do if not IstDrin(rueck[i], gefunden) then table.insert(gefunden, rueck[i]) end end rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX2,Y=punktY2}) for i = 1, table.getn(rueck) do if not IstDrin(rueck[i], gefunden) then table.insert(gefunden, rueck[i]) end end else table.remove(data,1) for i = 1, table.getn(data) do if not IstDrin(data[i], gefunden) then table.insert(gefunden, data[i]) end end end return gefunden end function IstDrin(_wert, _table) for i = 1, table.getn(_table) do if _table[i] == _wert then return true end end return false end
Mordred
|
13.03.2010 11:06 |
Die ist die ungekürzte Version aus dem Kopf.
geht auch einfacher - nur ein HiResJob
aCid
|
13.03.2010 09:09 |
StartSimpleHiResJob("CSOM"
StartSimpleHiResJob("CBOM"
StartSimpleHiResJob("CAOM"
StartSimpleHiResJob("CShOM"
StartSimpleHiResJob("CSShOM"
StartSimpleHiResJob("CROMEins"
StartSimpleHiResJob("CROMZwei"
StartSimpleHiResJob("CPAOM"
also schön vorsichtig sein mit der funktion. kann unter umständen sehr viel ressourcen fressen.
Der_Falke
|
12.03.2010 21:23 |
Hut ab!
Keron
|
12.03.2010 21:17 |
Bedienung:
1. Die drei Teile sind unabhängig, solange alle im skript stehen
2. Kopiert jeden Teil, und fügt ihn irgendwo unten in euren Skript ein
3. Dann setzt in der ungefähren mitte eurer Map eine entity, die irgendeinen Namen hat, z.b. "Middle"
4. Dann schreibt das in die FirstMapAction():
KontrolliereDieMapAufDrops("Middle","Blumenbeet")
"Blumenbeet" ist eine von drei auswahlmöglichkeiten:
"Grab" oder "Blumenbeet" oder "Huenengrab"
fertig!
für die mapper, die es genauer wollen:
ihr könnt irgendwo in eurem skript die art der Gräber per
ChangeGraveTypeKDMAD("Huenengrab")
ändern. ebenso mit
AllowKDMAD(false)
die automatische Grabveränderung ausschalten und mit
AllowKDMAD(true)
wieder einschalten...
Viel Spaß!
Keron
|
12.03.2010 21:14 |
... und der Anfang.
function KontrolliereDieMapAufDrops(_pos,_art) -- this function is powered by Keron and Mordred... -- Choose Options only: "Grab","Blumenbeet","Huenengrab"! -- For this comfort you need "SucheAufDerWelt"! ControlDropsOnMapok = ControlDropsOnMapok or true ControlDropsOnMapPosition = GetPosition(_pos) if _art == "Grab" then ControlDropsOnMapArt = "Graab" elseif _art == "Blumenbeet" then ControlDropsOnMapArt = "Bluumenbeet" elseif _art == "Huenengrab" then ControlDropsOnMapArt = "Huueenengrab" elseif _art ~= "Graab" and _art ~= "Bluumenbeet" and _art ~= "Huueenengrab" then Message("KontrolliereDieMapAufDrops Error! Your choosen color:200,200,0 _art @color:255,255,255 is not existing!") end StartSimpleHiResJob("CSOM") StartSimpleHiResJob("CBOM") StartSimpleHiResJob("CAOM") StartSimpleHiResJob("CShOM") StartSimpleHiResJob("CSShOM") StartSimpleHiResJob("CROMEins") StartSimpleHiResJob("CROMZwei") StartSimpleHiResJob("CPAOM") end function CSOM() if ControlDropsOnMapok == true then _CSOM() end end function CBOM() if ControlDropsOnMapok == true then _CBOM() end end function CAOM() if ControlDropsOnMapok == true then _CAOM() end end function CShOM() if ControlDropsOnMapok == true then _CShOM() end end function CROMEins() if ControlDropsOnMapok == true then _CROMEins() end end function CROMZwei() if ControlDropsOnMapok == true then _CROMZwei() end end function CPAOM() if ControlDropsOnMapok == true then _CPAOM() end end function CSShOM() if ControlDropsOnMapok == true then _COSOM() end end function CSShOM() if ControlDropsOnMapok == true then _CSShOM() end end
Keron
|
12.03.2010 21:07 |
Da der 2te Teil...
function _CSOM() CSOM_ = SucheAufDerWelt(0,Entities.XD_DroppedSword,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CSOM_) > 0 then CSOM_ = CSOM_[1] Gravecontrol(ControlDropsOnMapArt,CSOM_) DestroyEntity(CSOM_) end end function _CBOM() CBOM_ = SucheAufDerWelt(0,Entities.XD_DroppedBow,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CBOM_) > 0 then CBOM_ = CBOM_[1] Gravecontrol(ControlDropsOnMapArt,CBOM_) DestroyEntity(CBOM_) end end function _CAOM() CAOM_ = SucheAufDerWelt(0,Entities.XD_DroppedAxeShield,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CAOM_) > 0 then CAOM_ = CAOM_[1] Gravecontrol(ControlDropsOnMapArt,CAOM_) DestroyEntity(CAOM_) end end function _CROMEins() CROMEins_ = SucheAufDerWelt(0,Entities.XD_SoldierRifle1_Rifle,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CROMEins_) > 0 then CROMEins_ = CROMEins_[1] Gravecontrol(ControlDropsOnMapArt,CROMEins_) DestroyEntity(CROMEins_) end end function _CROMZwei() CROMZwei_ = SucheAufDerWelt(0,Entities.XD_SoldierRifle2_Rifle,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CROMZwei_) > 0 then CROMZwei_ = CROMZwei_[1] Gravecontrol(ControlDropsOnMapArt,CROMZwei_) DestroyEntity(CROMZwei_) end end function _CPAOM() CShOM_ = SucheAufDerWelt(0,Entities.XD_DroppedShield,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CShOM_) > 0 then CShOM_ = CShOM_[1] Gravecontrol(ControlDropsOnMapArt,CShOM_) DestroyEntity(CShOM_) end end function _CShOM() CShOM_ = SucheAufDerWelt(0,Entities.XD_DroppedShield,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CShOM_) > 0 then CShOM_ = CShOM_[1] Gravecontrol(ControlDropsOnMapArt,CShOM_) DestroyEntity(CShOM_) end end function _CSShOM() CSShOM_ = SucheAufDerWelt(0,Entities.XD_DroppedSwordShield,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CSShOM_) > 0 then CSShOM_ = CSShOM_[1] Gravecontrol(ControlDropsOnMapArt,CSShOM_) DestroyEntity(CSShOM_) end end function _CPAOM() CPAOM_ = SucheAufDerWelt(0,Entities.XD_DroppedPoleArm,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition) if table.getn(CPAOM_) > 0 then CPAOM_ = CPAOM_[1] Gravecontrol(ControlDropsOnMapArt,CPAOM_) DestroyEntity(CPAOM_) end end
Keron
|
12.03.2010 21:03 |
ok, zu lang... hier nochmal: letzer Teil
function Gravecontrol(_type,_pos) _pos = GetPosition(_pos) local X = math.floor(_pos.X/100)*1 local Y = math.floor(_pos.Y/100)*1 local offsetX = -5 + X *100 local offsetY = -5 + Y *100 if ControlDropsOnMapArt == "Graab" then local Gravecontrolli={ {"XD_Tomb2",offsetX+0,offsetY+0,0,0,""}, {"XD_PlantDecal4",offsetX-10,offsetY+50,0,0,""}, {"XD_Flower1",offsetX+40,offsetY+150,0,0,""}, {"XD_PlantDecal1",offsetX-10,offsetY+100,0,0,""}, } for i = 1, table.getn(Gravecontrolli) do Logic.CreateEntity(Entities[Gravecontrolli[i][1]],Gravecontrolli[i][2],Gravecontrolli[i][3],Gravecontrolli[i][4],Gravecontrolli[i][5],Gravecontrolli[i][6]) end elseif ControlDropsOnMapArt == "Bluumenbeet" then local Gravecontrolli={ {"XD_Tomb4",offsetX+0,offsetY+0,0,0,""}, {"XD_PlantDecalLarge4",offsetX+0,offsetY+0,0,0,""}, {"XD_PlantDecal3",offsetX+0,offsetY-220,0,0,""}, {"XD_PlantDecal3",offsetX+0,offsetY-100,0,0,""}, {"XD_Plant3",offsetX+0,offsetY-50,0,0,""}, {"XD_NephilimFlower",offsetX+150,offsetY-100,0,0,""}, {"XD_NephilimFlower",offsetX+100,offsetY+0,100,0,""}, } for i = 1, table.getn(Gravecontrolli) do Logic.CreateEntity(Entities[Gravecontrolli[i][1]],Gravecontrolli[i][2],Gravecontrolli[i][3],Gravecontrolli[i][4],Gravecontrolli[i][5],Gravecontrolli[i][6]) end elseif ControlDropsOnMapArt == "Huueenengrab" then local Gravecontrolli={ {"XD_GraveComplete7",offsetX+0,offsetY+0,0,0,""}, {"XD_RockGrass5",offsetX+20,offsetY+150,70,0,""}, {"XD_GreeneryBush5",offsetX+150,offsetY-250,0,0,""}, {"XD_MiscSwordShield",offsetX+50,offsetY-50,300,0,""}, {"XD_BoneAnimal7",offsetX-100,offsetY+0,300,0,""}, {"XD_Bush2",offsetX-250,offsetY-20,300,0,""}, {"XD_AppleTree1",offsetX+190,offsetY+100,0,0,""}, } for i = 1, table.getn(Gravecontrolli) do Logic.CreateEntity(Entities[Gravecontrolli[i][1]],Gravecontrolli[i][2],Gravecontrolli[i][3],Gravecontrolli[i][4],Gravecontrolli[i][5],Gravecontrolli[i][6]) end end end function ChangeGraveTypeKDMAD(_what) if _what == "Grab" then ControlDropsOnMapArt = "Graab" elseif _what == "Blumenbeet" then ControlDropsOnMapArt = "Bluumenbeet" elseif _what == "Huenengrab" then ControlDropsOnMapArt = "Huueenengrab" elseif _what ~= "Graab" and _what ~= "Bluumenbeet" and _what ~= "Huueenengrab" then Message("ChangeGraveTypeKDMAD Error! Your choosen color:200,200,0 _what @color:255,255,255 is not existing!") end end function AllowKDMAD(_ok) if _ok == true then ControlDropsOnMapok = true elseif _ok == false then ControlDropsOnMapok = false elseif _ok ~= true and _ok ~= false then Message("AllowKDMAD Error! Your choosen color:200,200,0 _ok @color:255,255,255 is not existing!") end end
Keron
|
12.03.2010 21:00 |
In dem Screen ist die funktion zu sehen. Falls sie jemanden interresiert, ist sie hier:
[code]
function KontrolliereDieMapAufDrops(_pos,_art)
-- this function is powered by Keron and Mordred...
-- Choose Options only: "Grab","Blumenbeet","Huenengrab"!
-- For this comfort you need "SucheAufDerWelt"!
ControlDropsOnMapok = ControlDropsOnMapok or true
ControlDropsOnMapPosition = GetPosition(_pos)
if _art == "Grab" then
ControlDropsOnMapArt = "Graab"
elseif _art == "Blumenbeet" then
ControlDropsOnMapArt = "Bluumenbeet"
elseif _art == "Huenengrab" then
ControlDropsOnMapArt = "Huueenengrab"
elseif _art ~= "Graab" and _art ~= "Bluumenbeet" and _art ~= "Huueenengrab" then
Message("KontrolliereDieMapAufDrops Error! Your choosen color:200,200,0 _art @color:255,255,255 is not existing!"
end
StartSimpleHiResJob("CSOM"
StartSimpleHiResJob("CBOM"
StartSimpleHiResJob("CAOM"
StartSimpleHiResJob("CShOM"
StartSimpleHiResJob("CSShOM"
StartSimpleHiResJob("CROMEins"
StartSimpleHiResJob("CROMZwei"
StartSimpleHiResJob("CPAOM"
end
function CSOM()
if ControlDropsOnMapok == true then
_CSOM()
end
end
function CBOM()
if ControlDropsOnMapok == true then
_CBOM()
end
end
function CAOM()
if ControlDropsOnMapok == true then
_CAOM()
end
end
function CShOM()
if ControlDropsOnMapok == true then
_CShOM()
end
end
function CROMEins()
if ControlDropsOnMapok == true then
_CROMEins()
end
end
function CROMZwei()
if ControlDropsOnMapok == true then
_CROMZwei()
end
end
function CPAOM()
if ControlDropsOnMapok == true then
_CPAOM()
end
end
function CSShOM()
if ControlDropsOnMapok == true then
_COSOM()
end
end
function CSShOM()
if ControlDropsOnMapok == true then
_CSShOM()
end
end
function _CSOM()
CSOM_ = SucheAufDerWelt(0,Entities.XD_DroppedSword,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition)
if table.getn(CSOM_) > 0 then
CSOM_ = CSOM_[1]
Gravecontrol(ControlDropsOnMapArt,CSOM_)
DestroyEntity(CSOM_)
end
end
function _CBOM()
CBOM_ = SucheAufDerWelt(0,Entities.XD_DroppedBow,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition)
if table.getn(CBOM_) > 0 then
CBOM_ = CBOM_[1]
Gravecontrol(ControlDropsOnMapArt,CBOM_)
DestroyEntity(CBOM_)
end
end
function _CAOM()
CAOM_ = SucheAufDerWelt(0,Entities.XD_DroppedAxeShield,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition)
if table.getn(CAOM_) > 0 then
CAOM_ = CAOM_[1]
Gravecontrol(ControlDropsOnMapArt,CAOM_)
DestroyEntity(CAOM_)
end
end
function _CROMEins()
CROMEins_ = SucheAufDerWelt(0,Entities.XD_SoldierRifle1_Rifle,(Logic.WorldGetSize()*100),ControlDropsOnMapPosition)
if table.getn(CROMEins_) > 0 then
CROMEins_ = CROMEins_[1]
Gr
Mordred
|
12.03.2010 19:44 |
Hi Keron, kennen wir uns nicht?
Aber noch erwähnen: Benötigt wird noch Suche auf der Welt.
Der Code ist ein ganz schöner Brocken, also wird man es ich zweimal überlegen müssen. Aber der PC schafft ja ne menge, da ist der Skript das kleinste
Keine nervenden Schwerter mehr, nur noch schöne Blumenverzierte Gräber.