Gebäude beschädigen

» Siedler Map Source Forum » Siedler DEdK Script Forum » Gebäude beschädigen

Seiten: 1

Legende
#1
07.07.2010 18:10
Beiträge: 183

Gebäude beschädigen

Ich will ein überfallendes Dorf erstellen und wie es sich gehört sollen auch manche Gebäude beschädigt sein, also brennen.
So wie in der alle ersten kapietelkarte vom Hauptspielt.

Wie kann ich das machen?

____________________
"Und ein Mensch, der sich für einen Gott hält spürt wie ihm ein allzu menschlicher Schauer über den Rücken jagt."
-300, die Karte zum Film, in Bearbeitung.

Im Moment mit "Barbareninvasion" beschäftigt.

Kalle
#2
07.07.2010 18:35
Beiträge: 1150

da würde ich

Logic.HurtEntity(id, Schaden)

benutzen.

Beispiel: Ein einfaches Haus hat den Wert von 500 (Lebenspunkten). Dieses Haus auf der Map zb Haus1 nennen.

Dann aufrufen:

id=GetEntityId("Haus" )
Logic.HurtEntity(id, 300)


... und damit brennt das Haus.

Mfg
Kalle

____________________
Lieber Siedeln statt (fern)sehen.....

jugl
#3
07.07.2010 18:43
Beiträge: 803

einfacher :

SetHealth("Haus1", 1)

____________________
Si tus vi late, in isse tabernit.

Mordred
#4
07.07.2010 18:55
Beiträge: 939

function BrenneNieder(_entity,_hurt,_brenntschon,_callback)
 if (Logic.IsBuilding(_entity) == 1)then
  if not _hurt then _hurt = 15 end
  if _brenntschon then SetHealth(_entity,45) end
   if not BrenneNiederT then
    BrenneNiederT = {}
    local ErsterAufruf = true
   end
   if not _callback then
    table.insert(BrenneNiederT,{false,_entity,_hurt})
   else
    table.insert(BrenneNiederT,{true,_entity,_hurt,_callback})
   end
  if ErsterAufruf then
   StartSimpleJob("BrenneNieder_Job")
  end
 else
  Message("ERR:BrenneNieder! _entity should be a building because of game safety!")
 end
end
function BrenneNieder_Job()
 for i=1,table.getn(BrenneNiederT) do
  if IsDead(BrenneNiederT[i][2])then
    if BrenneNiederT[i][1]then
     StartJob(BrenneNiederT[i][4])
    end
   table.remove(BrenneNiederT,i)
  else
   Logic.HurtEntity(BrenneNiederT[i][2],BrenneNiederT[i][3])
  end
 end
end


noch ungetestet.
einfach:

 BrenneNieder("HausEins")


HausEins wird nun stetig verletzt und niedergebrannt.
genauer:

 BrenneNieder("HausEins",20,true)


HausEins fängt sofort Feuer und wird in 20er Schritten niedergebrannt.
erweitert:

 BrenneNieder("HausEins",20,true,"HausEins_kaputt")


dasselbe wie oben, nur das, nachdem HausEins niedergebrannt ist, die

function HausEins_kaputt()
 -- Befehle
end


aufgerufen wird.
Lg Mordred

Flodder
#5
07.07.2010 21:18
Beiträge: 2608

Olle Kamellen Mordred!
Einfach mal versuchen eine meiner oder der Team-Maps zu spielen da ist eine komplette Comfortfunktion drin. Nennt sich:
"RandomBrand" und die Funktion sieht so aus:

function RandomBrand(_player, _mitte, _radius, _prozent)
	if type(_mitte) == "string" or type (_mitte) == "number" then
		_mitte = GetPosition(_mitte);
	end
	_prozent = math.min(_prozent,100)
	assert(type(_mitte) == "table", "Mittelpunkt ist falsch")
	assert((type(_mitte.X) == "number") and (type(_mitte.Y) == "number"), "Mittelpunkt ist falsch")
	local alleEntities = SucheAufDerWelt(_player, 0, _radius, _mitte)
	local anzahlEntities = table.getn(alleEntities)
	for i= anzahlEntities, 1, -1 do
		if not Logic.IsBuilding(alleEntities[i]) then
			table.remove(alleEntities,i);
		end
	end
	anzahlEntities = table.getn(alleEntities)
	local brennEntities = {}
	for i=1,anzahlEntities do
		brennEntities[i] = false
	end
	local sollenBrennen = math.floor(anzahlEntities* _prozent / 100)
	while sollenBrennen > 0 do
		local zahl = math.random(1,anzahlEntities)
		if  not brennEntities[zahl] then
			brennEntities[zahl] = true;
			sollenBrennen = sollenBrennen -1
		end
	end
	for i=1,anzahlEntities do
		if brennEntities[i] then	
			SetHealth (alleEntities[i] ,20)
		end
	end
	return alleEntities, brennEntities
end



____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

kingsia
#6
07.07.2010 21:20
Beiträge: 750

Zitat von Mordred:
noch ungetestet.

Lg Mordred



Hallo Mordred.

Ich habe sofort erkannt das es nicht getestet war und auch nicht funktionieren kann.

Ein Testmap war überhaupt nicht nötig. Den Fehler ist offensichtbar.

Sowas hier zu posten kann nur dein Ruf schaden.

Gruss
Kingsia

Mordred
#7
07.07.2010 21:25
Beiträge: 939

leider kann ich es auch nicht testen - was bleibt mir anderes übrig?
Was ist denn der Fehler?
Lg Mordred

Mordred
#8
07.07.2010 21:33
Beiträge: 939

Zitat von Flodder:
Olle Kamellen Mordred!
Einfach mal versuchen eine meiner oder der Team-Maps zu spielen da ist eine komplette Comfortfunktion drin. Nennt sich:
"RandomBrand" und die Funktion sieht so aus...


Ich vermute mal, Legende will einige Gebäude gezielt niederbrennen und nicht seine ganze Stadt.
Oder habe ich da was missverstanden?
Lg Mordred

kingsia
#9
07.07.2010 21:41
Beiträge: 750

Zitat von Mordred:
leider kann ich es auch nicht testen - was bleibt mir anderes übrig?
Was ist denn der Fehler?
Lg Mordred



Und warum kannst du nicht testen?
Du bist online daher hast du ein funktionierendes Rechner.
Falls du kein funktionierendes DVD hast dann geh nach MediaMarkt, Goldversion für 10 Euro. Ich habe 3 Stk. hier als Reserve falls eine kaputt geht.

Oder kannst du nicht 10 Euro ausgeben?

Gruss
Kingsia

kingsia
#10
07.07.2010 21:44
Beiträge: 750

Zitat von Mordred:

Zitat von Flodder:
Olle Kamellen Mordred!
Einfach mal versuchen eine meiner oder der Team-Maps zu spielen da ist eine komplette Comfortfunktion drin. Nennt sich:
"RandomBrand" und die Funktion sieht so aus...


Ich vermute mal, Legende will einige Gebäude gezielt niederbrennen und nicht seine ganze Stadt.
Oder habe ich da was missverstanden?
Lg Mordred



Ja, da hast du vieles misverstanden oder einfach nicht versucht es zu verstehen.
Alle Informationen sind da.

Gruss
Kingsia

Flodder
#11
07.07.2010 22:47
Beiträge: 2608

Zitat von Mordred:

Ich vermute mal, Legende will einige Gebäude gezielt niederbrennen und nicht seine ganze Stadt.
Oder habe ich da was missverstanden?
Lg Mordred


Ich denke, Legenden richtig verstanden zu haben.

Zitat von Legenden:

Ich will ein überfallendes Dorf erstellen und wie es sich gehört sollen auch manche Gebäude beschädigt sein, also brennen.
So wie in der alle ersten kapietelkarte vom Hauptspielt.


...und die von mir eingestellte Funktion macht genau was er will. Wieviel Prozent aller Stadtgebäude brennen sollen ist frei einstellbar. Bei der Funktion werden die gesamten Stadtgebäude, die in einen vorgegebenen Radius stehen nach dem Zufallsprinzip brennen.

Beispiel:
Stehen in festgelegten Radius 20 Gebäude, werden bei einer eingabe von 50 Prozent, 10 Gebäude brennen. Bei einer Eingabe von 100 Prozent eben alle. Wie starkt sie brennen, wird in diesem Abschitt der Gesamtfunktion eingetragen:

   for i=1,anzahlEntities do
   if brennEntities[i] then	
   SetHealth (alleEntities[i] ,20)
   end
end


...hier hätten die Gebäude also nur noch 20 Prozent und brennen damit schon recht heftig. Auch völlig wurscht, welche ID die Gebäude haben. Das kannste vorgeben.
Aufruf (Beispiel):

RandomBrand(7, "posBrandMitte", 10000, 100)



Edit
Zusätlich wird die Comfortfunktion:
SucheAufDerWelt
benötigt

Sollen allerdings gezielt bestimmte Gebäude und mit gezielten Werten brennen, ist jugls Vorschlag genau der richtige.

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 07.07.2010 um 22:52 editiert.

Mordred
#12
07.07.2010 22:49
Beiträge: 939

Zitat von kingsia:

Und warum kannst du nicht testen?
Du bist online daher hast du ein funktionierendes Rechner.
Falls du kein funktionierendes DVD hast dann geh nach MediaMarkt, Goldversion für 10 Euro. Ich habe 3 Stk. hier als Reserve falls eine kaputt geht.

Oder kannst du nicht 10 Euro ausgeben?

Gruss
Kingsia


Es kam zu gewissen - äh - Komplikationen und nun geht das Spiel, der Mapeditor und das TinyTool nicht mehr...
Die Normale Version habe ich schon, aber für die Goldversion muss ich leider nochmal zur Bibliothek.

Legende
#13
08.07.2010 10:35
Beiträge: 183

Klarstellung

Sie sollen nicht wirklich niederbrennen, nur beschädigt sein, so dass sie wie üblich brennen.Nicht so wie zum Beispiel in AeK.
War nicht ganz deutlich.
Benutze die Funktion von jugl(braucht doch keine weitere Comfort-Funktionen?), die scheint mir für meinen Nuztzen am Übersichtlichsten, da nur sehr wenige Gebäude dort stehen und auch nur bestimmte brennen sollen...

Die anderen sind auch hilfreich, komm ich vllt. noch mal drauf zurück

@jugls Vorschlag:Hat das Haus dann einen Lebenspunkt?

____________________
"Und ein Mensch, der sich für einen Gott hält spürt wie ihm ein allzu menschlicher Schauer über den Rücken jagt."
-300, die Karte zum Film, in Bearbeitung.

Im Moment mit "Barbareninvasion" beschäftigt.

Mordred
#14
08.07.2010 14:11
Beiträge: 939

Zitat von Legende:
Sie sollen nicht wirklich niederbrennen, nur beschädigt sein, so dass sie wie üblich brennen.Nicht so wie zum Beispiel in AeK.
War nicht ganz deutlich.
Benutze die Funktion von jugl(braucht doch keine weitere Comfort-Funktionen?), die scheint mir für meinen Nuztzen am Übersichtlichsten, da nur sehr wenige Gebäude dort stehen und auch nur bestimmte brennen sollen...

Die anderen sind auch hilfreich, komm ich vllt. noch mal drauf zurück



Ok. Denn ich meinte mich zu errinnern, dass die Häuser aus Thalgrund und co. danach weg waren.

Zitat von Legende:
@jugls Vorschlag:Hat das Haus dann einen Lebenspunkt?


Nein, es hat nur noch ein Prozent seines Lebens (also bei 500 Leben noch 5 Leben)
LG Mordred

Seiten: 1

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

Impressum