Mordred
18.10.2010 20:49
1029 mal angesehen

Kanonenkrater

So, ein neuer Skriptmod :)
Kleine Kanonen hinterlassen kleine Krater, Eisenkanone + Ballistaturm mittelgroße, Kanonentürme große und Belagerungskanonen sehr große Krater.
Gibt es Meinungen dazu?

Bei Interesse schreibe ich den Code noch dazu.


Auf das Bild klicken, um es in Originalgröße zu sehen (184,90 KB)


Kommentare

» Kommentar schreiben

Tjuri
20.10.2010 17:40

Wow echt cool

kindofthewold
20.10.2010 13:34

@ Mordred
er meint vermutlich


Logic.SetTerrainVertexColor

Was dasselbe ist, wie wenn Du im Mapeditor auf Map Einfärben klickst.

ja

@ Morderd
Hmm..
Mit Vertexfarbe kann ich momentan nicht arbeiten, weil mich ein Grafikkarten"update" dazu gezwungen hat, Landschaft auf Mittel zu stellen, wo man keine Vertexfarben sieht.

wohl eher ein downdate

Mordred
19.10.2010 19:09

er meint vermutlich

Logic.SetTerrainVertexColor


Was dasselbe ist, wie wenn Du im Mapeditor auf Map Einfärben klickst.

die-FREIE-enzyklopaedie
19.10.2010 18:42

Das mit der Grafik is bei mir auch nur dass ich auf ner GTX260 auf niedrig stellen muss

@kindofthewold
die Textur wird ja schon veändert mit:

Logic.SetTerrainNodeType

Mordred
19.10.2010 18:28

Hmm..
Mit Vertexfarbe kann ich momentan nicht arbeiten, weil mich ein Grafikkarten"update" dazu gezwungen hat, Landschaft auf Mittel zu stellen, wo man keine Vertexfarben sieht.

kindofthewold
19.10.2010 17:52

super! Sieht richtig echt aus. ich würde aber auch noch eine färbung eingeben. vll. cdass es dann um 25% dunkler wird?

Mordred
19.10.2010 16:54

In die FirstMapAction()

Allow_CannonCraters()


und diesen Teil unten in das Skript kopieren, nur nicht in eine Funktion

function Allow_CannonCraters()
 KraterTexture = {14,48,135}--{14,48,135}
 Trigger.RequestTrigger(Events.LOGIC_EVENT_ENTITY_HURT_ENTITY,"","KraterAngriff",1)
end
function KraterAngriff()
 local Ang = Event.GetEntityID1()
 local Opf = Event.GetEntityID2()
 local Typ = Logic.GetEntityTypeName(Logic.GetEntityType(Ang))
  if (Logic.IsBuilding(Opf) == 0)then
   if (Typ == "PV_Cannon1" or Typ == "PV_Cannon2" or Typ == "PV_Cannon3" or Typ == "PV_Cannon4" or Typ == "PB_Tower2_Ballista" or Typ == "PB_Tower3_Cannon" or Typ == "PB_DarkTower2_Ballista" or Typ == "PB_DarkTower3_Cannon")then
	 local Pos = GetPosition(Opf)
	if (Typ == "PV_Cannon1" or Typ == "PV_Cannon2" or Typ == "PB_Tower2_Ballista" or Typ == "PB_DarkTower2_Ballista") then
     Krater(Pos,30)
    elseif (Typ == "PV_Cannon3" or Typ == "PB_Tower3_Cannon" or Typ == "PB_DarkTower3_Cannon") then
     Krater(Pos,50)
	 Logic.SetTerrainNodeType(math.floor(Pos.X/100),math.floor(Pos.Y/100),KraterTexture[math.random(1,table.getn(KraterTexture))])
	elseif (Typ == "PV_Cannon4") then
     Krater(Pos,90)
	 Logic.SetTerrainNodeType(math.floor(Pos.X/100),math.floor(Pos.Y/100),135)
    end
   end
  end
end
function Krater(_pos,_deep)
 local posX = math.floor(_pos.X/100)
 local posY = math.floor(_pos.Y/100)
  SetEntityName(Logic.CreateEntity(Entities.XD_ScriptEntity,_pos.X+250,_pos.Y,0,1),"Test_Krater1")
  SetEntityName(Logic.CreateEntity(Entities.XD_ScriptEntity,_pos.X-250,_pos.Y,0,1),"Test_Krater2")
  SetEntityName(Logic.CreateEntity(Entities.XD_ScriptEntity,_pos.X,_pos.Y+250,0,1),"Test_Krater3")
  SetEntityName(Logic.CreateEntity(Entities.XD_ScriptEntity,_pos.X,_pos.Y-250,0,1),"Test_Krater4")
 local _,_,Z1 = Logic.EntityGetPos(GetEntityId("Test_Krater1"))
 local _,_,Z2 = Logic.EntityGetPos(GetEntityId("Test_Krater2"))
 local _,_,Z3 = Logic.EntityGetPos(GetEntityId("Test_Krater3"))
 local _,_,Z4 = Logic.EntityGetPos(GetEntityId("Test_Krater4"))
 local Z = (Z1+Z2+Z3+Z4)/4
  for i=1,4 do DestroyEntity("Test_Krater"..i) end
 if (Z1 <= Z+25 and Z2 <= Z+25 and Z3 <= Z+25 and Z4 <= Z+25)then
  Logic.SetTerrainNodeHeight(posX,posY,Z-(_deep+0.5*_deep))
  Logic.SetTerrainNodeHeight(posX+1,posY,Z-_deep)
  Logic.SetTerrainNodeHeight(posX-1,posY,Z-_deep)
  Logic.SetTerrainNodeHeight(posX,posY+1,Z-_deep)
  Logic.SetTerrainNodeHeight(posX,posY-1,Z-_deep)
  Logic.SetTerrainNodeHeight(posX+1,posY+1,Z-_deep)
  Logic.SetTerrainNodeHeight(posX-1,posY-1,Z-_deep)
  Logic.SetTerrainNodeHeight(posX+1,posY-1,Z-_deep)
  Logic.SetTerrainNodeHeight(posX-1,posY+1,Z-_deep)
 end
end

Mordred
19.10.2010 16:49

@kritiker:
Also, die Funktion hat einige Sicherheitsmaßnahmen.
Zwei Krater entstehen, aber sie können nur eine Bestimmte Tiefe ereichen --> Trifft nicht tiefer als das Terrain(eine riesige Stange erscheint)
Mit dem Wasser ist das ein Problem, aber da das Blocking nicht erneuert wird, kann man durch die entstandenen Pfützen durchlaufen.

Wenn die Kanone nichts trifft, dann gibts keinen Krater, deshalb wäre ich sehr dankbar für einen Tipp in diese Richtung.
Ich habs schon mit CreateEntity und CreateEffekt abfangen versucht, klappt aber nicht.
Nächster Post der (aktuelle) Code, gibts auch auf meinem Profil.

die-FREIE-enzyklopaedie
19.10.2010 12:05

Ich finde die Funktion super, kommt auch in meine Map

Flodder
18.10.2010 23:36

Zitat warrior1024:
>>Was passiert, wenn z.B. eine Belagerungskanone einen AoE macht und so 2 Einheiten trifft? Dann wird der Trigger zweimal aufgerufen und es entstehen 2 Krater.<<

wie jetzt?
im umkehrschluss bedeutet das ja, dass die Kanonen !gar keinen! Krater erzeugen, wenn sie keine Einheit treffen, oder hab ich das falsch verstanden, Mordred?

DAS wäre m.E, aber nicht mehr realistisch für Kanoneneinschläge. Einschläge sind Einschläge und zwar auch dann, wenn sie nichts treffen!

Flodder
18.10.2010 22:54

Ansich keine schlechte Idee Mordred. Sowas ist aber mit Vorsicht zu verwenden.

Warum? Darum:
"reissen" die Kanonen Löcher in Terrain, wo der Grundwasserpegel relativ hoch ist und stehen dort gerade auch noch "spielentscheidende" Figuren, saufen die entweder ab, oder stehen in einem blocking! Das wiederum könnte später zu Abstrüzen führen.

Ich will damit nur sagen, dass man etliches bedenken muss, bevor man vor hat, die Funktion zu veröffentlichen.

Also vorsicht mit sowas.

warrior1024
18.10.2010 22:45

Da ich mir den Code schon angesehen habe(Siehe Mordred´s Profil), habe ich einen Kritikpunkt:
Was passiert, wenn z.B. eine Belagerungskanone einen AoE macht und so 2 Einheiten trifft? Dann wird der Trigger zweimal aufgerufen und es entstehen 2 Krater.
Ansonsten reife Leistung!

Ivoleon
18.10.2010 21:55

cool, schreib den code mal dazu.

@legende
ja, ein ziemlich großer bolzen der brennt und explodiert.
-wenn mans ganz genau nimmt

Ivoleon

Legende
18.10.2010 21:41

als kleine Anregung:
Könnte man dazu noch eine Bodenverfärbung machen?
Etwas dunkler wie vorher...

klasse, 10Punkte!

würde den ballistaturm aber zu den kleinen zäheln, ist ja nur ein Pfeil/Bolzen...

fighty
18.10.2010 20:55

Wow! Imponierend die Detailtreue bei der Waffenwirkung.

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum