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