Vorschläge für neue Maps von DEdK

» Siedler Map Source Forum » Mapping » Vorschläge für neue Maps von DEdK

Seiten: Zurück 1 ... 10 11 12 Nächste Seite

aCid
#251
17.11.2009 23:18
Beiträge: 275

mir ist folgendes aufgefallen, was ich nicht ganz verstehe.

wollte ganz normal den Befehl aufrufen:

CreateEntity(_playerId,_entity,_position,_name)



werte eingesetzt:

CreateEntity(0, Entities.XD_Rock7, {3000, 12000}, "sie")



ging nicht. dachte ich mir. na klar. du musst ja vorher den table machen.

 _pos = {3000, 12000}
CreateEntity(0, Entities.XD_Rock7, _pos, "sie")


ging wieder nicht.

also guckte ich zu der funktion, die ich schon nutze, die klappt:

CreateEntity(0, Entities.XD_Rock7, GetPosition("xyz"), "sie")


auf einmal ging es.

kann mir das bitte jemand erklären?

____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm

Noigi
#252
18.11.2009 01:26
Beiträge: 772

Jupp, ein kleiner aber feiner Unterschied:
Ein Positionstable braucht die Indizes "X" und "Y", nicht 1 und 2.
Also

_pos = {X=3000, Y=12000}

aCid
#253
18.11.2009 04:32
Beiträge: 275

das war ja mehr als dämlich.

danke für die schnelle erleuchtung. D:

____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm

totalwarANGEL
#254
21.12.2009 14:03
Beiträge: 2123

Zitat von Noigi:
_pos = {X=3000, Y=12000}


Ich persönlich bevorzuge immer GetPosition(...). Geht zwar nicht immer aber durch eine ScriptEntity kann man(so sehe ich das) viel besser eine Position abfragen. Gas ganze XY...und manchmal auch Z macht einen doch verrückt.
Und dieFunktion GetPosition(...) findet ja auch nur die XY-Koordinate einer Entity raus, oder nicht?

____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.

Noigi
#255
21.12.2009 18:56
Beiträge: 772

Zitat von totalwarANGEL:

Zitat von Noigi:
_pos = {X=3000, Y=12000}


Ich persönlich bevorzuge immer GetPosition(...). Geht zwar nicht immer aber durch eine ScriptEntity kann man(so sehe ich das) viel besser eine Position abfragen. Gas ganze XY...und manchmal auch Z macht einen doch verrückt.
Und dieFunktion GetPosition(...) findet ja auch nur die XY-Koordinate einer Entity raus, oder nicht?


Völlig richtig, man sollte nur im Zweifelsfall wissen, was einen Positionstable formal ausmacht; zB wenn du mit dem Ergebnis von GetPosition weiterrechnen willst um eine relative Posi zu bestimmen.

warrior1024
#256
04.02.2010 19:51
Beiträge: 345

Meine Funktionen der Marke Eigenbau

Bis jetzt habe ich immerhin schon 2 Funktionen, die ich gemeinfrei stelle(es darf ohne mein Einverständnis genutzt werden, darf verändert werden, darf kostenlos erworben und kommerziell verbreitet werden, darf kommerziell erworben und kostenlos verkauft werden und und und...)

Bei beiden Funktionen möchte ich Fritz98 für den Denkanstoß danken, ansonsten sind sie von der Marke Eigenbau.

Die erste Funktion erstellt eine Ruinenstadt, der Platzbedarf liegt bei 7*7 Siedlermeter pro Ruine.

function CreateRuinen(_Pos, _xLenght, _yLenght)
	local pos = _Pos
	local VonX = -0.5 * _xLenght
	local BisX = ((0.5 * _xLenght) - 1)
	local VonY = -0.5 * _yLenght
	local BisY = ((0.5 * _yLenght) - 1)
	for i = VonX, BisX, 1 do
		for j = VonY, BisY, 1 do
			Logic.CreateEntity(Entities.CB_DestroyAbleRuinHouse1, (pos.X + (i * 700)), (pos.Y + (j * 700)), 0, 1)
		end
	end
end



Die zweite ist etwas länger(gut 120 Zeilen) und erstellt ein Viertel mit 4 Sägewerken, 4 Lehmhütten, 4 Steinmetzen, ner Uni, einem DZ, ein Markt und ein par Wohnhäuser.
Und die Funktion löst eine Fehlermeldung aus, die mir nichts sagt und nicht behoben wurde, da sie die Funktion nicht stört!

function CreateGrundviertel(_x, _y, _player)
	local Grundviertel = {}
	Grundviertel.objekt[1] = {
		art = Entities.XD_VillageCenter,
		y_koordinate = -750,
		x_koordinate = -800
	}
	Grundviertel.objekt[2] = {
		art = Entities.PB_VillageCenter1,
		y_koordinate = -750,
		x_koordinate = -800
	}
	Grundviertel.objekt[3] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 650
	}
	Grundviertel.objekt[4] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 1950
	}
	Grundviertel.objekt[5] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 3250
	}
	Grundviertel.objekt[6] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 4550
	}
	Grundviertel.objekt[7] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 1000
	}
	Grundviertel.objekt[8] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 2200
	}
	Grundviertel.objekt[9] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 3400
	}
	Grundviertel.objekt[10] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 4600
	}
	Grundviertel.objekt[11] = {
		art = Entities.PB_Market1,
		y_koordinate = 800,
		x_koordinate = -800
	}
	Grundviertel.objekt[12] = {
		art = Entities.PB_University1,
		y_koordinate = 2550,
		x_koordinate = -650
	}
	Grundviertel.objekt[13] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 1000
	}
	Grundviertel.objekt[14] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 2200
	}
	Grundviertel.objekt[15] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 3400
	}
	Grundviertel.objekt[16] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 4600
	}
	Grundviertel.objekt[17] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4200,
		x_koordinate = -100
	}
	Grundviertel.objekt[18] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4200,
		x_koordinate = -1100
	}
	Grundviertel.objekt[19] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4100,
		x_koordinate = 900
	}
	Grundviertel.objekt[20] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4100,
		x_koordinate = 1900
	}
	Grundviertel.objekt[21] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 2800
	}
	Grundviertel.objekt[22] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 3600
	}
	Grundviertel.objekt[23] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 4400
	}
	Grundviertel.objekt[24] = {
		art = Entities.PB_Residence3,
		y_koordinate = 4750,
		x_koordinate = 2800
	}
	Grundviertel.objekt[25] = {
		art = Entities.PB_Residence3,
		y_koordinate = 4750,
		x_koordinate = 3600
	}
	for i = 1, 25, 1 do
		Logic.CreateEntity(Grundviertel.objekt[i].art, (_x + Grundviertel.objekt[i].x_koordinate), (_y + Grundviertel.objekt[i].y_koordinate), 0, _player)
	end
end



MfG Warrior1024

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Noigi
#257
04.02.2010 21:14
Beiträge: 772

Du verwendest in deinem "Grundviertel"-table einen "objekt"-Untertable, der nicht als solcher initialisiert wird - da liegt der Fehler.
Auf den ersten Blick kannst du den einfach weglassen, also nur noch

function CreateGrundviertel(_x, _y, _player)
	local Grundviertel = {}
	Grundviertel[1] = {
		...

warrior1024
#258
04.02.2010 21:31
Beiträge: 345

War dann wohl die alte Version

Sry, die Version war noch nicht getestet, in meiner Spielereinmap ist die Version, die einen seltsamen ERROR verursacht.

Aktuelle Version:

function CreateGrundviertel(_x, _y, _player)
	local Grundviertel = {}
	Grundviertel[1] = {
		art = Entities.XD_VillageCenter,
		y_koordinate = -750,
		x_koordinate = -800
	}
	Grundviertel[2] = {
		art = Entities.PB_VillageCenter1,
		y_koordinate = -750,
		x_koordinate = -800
	}
	Grundviertel[3] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 650
	}
	Grundviertel[4] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 1950
	}
	Grundviertel[5] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 3250
	}
	Grundviertel[6] = {
		art = Entities.PB_Sawmill1,
		y_koordinate = -500,
		x_koordinate = 4550
	}
	Grundviertel[7] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 1000
	}
	Grundviertel[8] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 2200
	}
	Grundviertel[9] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 3400
	}
	Grundviertel[10] = {
		art = Entities.PB_Brickworks1,
		y_koordinate = 1250,
		x_koordinate = 4600
	}
	Grundviertel[11] = {
		art = Entities.PB_Market1,
		y_koordinate = 800,
		x_koordinate = -800
	}
	Grundviertel[12] = {
		art = Entities.PB_University1,
		y_koordinate = 2550,
		x_koordinate = -650
	}
	Grundviertel[13] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 1000
	}
	Grundviertel[14] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 2200
	}
	Grundviertel[15] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 3400
	}
	Grundviertel[16] = {
		art = Entities.PB_StoneMason1,
		y_koordinate = 2700,
		x_koordinate = 4600
	}
	Grundviertel[17] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4200,
		x_koordinate = -100
	}
	Grundviertel[18] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4200,
		x_koordinate = -1100
	}
	Grundviertel[19] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4100,
		x_koordinate = 900
	}
	Grundviertel[20] = {
		art = Entities.PB_Farm3,
		y_koordinate = 4100,
		x_koordinate = 1900
	}
	Grundviertel[21] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 2800
	}
	Grundviertel[22] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 3600
	}
	Grundviertel[23] = {
		art = Entities.PB_Residence3,
		y_koordinate = 3850,
		x_koordinate = 4400
	}
	Grundviertel[24] = {
		art = Entities.PB_Residence3,
		y_koordinate = 4750,
		x_koordinate = 2800
	}
	Grundviertel[25] = {
		art = Entities.PB_Residence3,
		y_koordinate = 4750,
		x_koordinate = 3600
	}
	for i = 1, 25, 1 do
		Logic.CreateEntity(Grundviertel[i].art, (_x + Grundviertel[i].x_koordinate), (_y + Grundviertel[i].y_koordinate), 0, _player)
	end
end



____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

fritz_98
#259
06.02.2010 10:16
Beiträge: 472

Da soll ein XD_VillageCenter entstehen?

Dann musst du beachten, dass ein VillageCenter immer die ID 0 hat. Wenn man Entities mit ID0 erstellt, kommt immer eine Fehlermeldung, die Entity wird aber dennoch erschaffen. Damit du die Fehlermeldung los wirst, braust du das hier in der FirstMapAction()

  Score.Player[0] = {};
  Score.Player[0]["buildings"] = 0;
  Score.Player[0]["all"] = 0
  Score.Player[1].bisher=0



MfG
Fritz

aCid
#260
06.02.2010 13:41
Beiträge: 275

@fritz: Hmm, da verstehe ich was gar nicht.

Zum einen erstellt er ja XD_VillageCenter, obwohl es die ID0 hast, mit der ID des Spielers. Kann es eher daran liegen???

Habe auch so eine ähnliche kleine Siedlung und da erstelle ich ja auch Zäune, etc., die die ID0 haben. Habe allerdings keine Fehlermeldung und brauche diesen Workaround nicht.

Woran liegt das? Oder wo liegt da der Unterschied?

____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm

fritz_98
#261
06.02.2010 15:16
Beiträge: 472

Wahrscheinlich darin, dass ein VillageCenter so ne Art Gebäude ist. Bei Mauern hast du dasselbe Problem, wenn du sie mit ID0 erstellst.

Wladimir
#262
07.02.2010 10:07
Beiträge: 489

Alle Gebäude von Player ? erfassen

Kennt jemand einen Code, welcher alle bestehenden Gebäude einer ID(wenn er alles erfasst ist auch OK) erfasst und ich diese dann durch z.B.

SetHealth(data[i],5)


verwunden kann?

Wladimir.

____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

andre111
#263
07.02.2010 10:35
Beiträge: 220

Zitat von Wladimir:
Kennt jemand einen Code, welcher alle bestehenden Gebäude einer ID(wenn er alles erfasst ist auch OK) erfasst und ich diese dann durch z.B.

SetHealth(data[i],5)


verwunden kann?

Wladimir.



@Wladimir:

ich kenn da nur:

Logic.GetAllPlayerEntities(1)


1 = PlayerID
aber das erwischt dann alle Entities, nicht nur die Gebäude.

PS: habs jetzt(Glaub ich, konnte ich noch nicht testen):

function GebaudeHealth()
local data = Logic.GetAllPlayerEntities(1)
for i = 1,table.getn(data) do
if Logic.IsBuilding(data[i]) == 1 then
SetHealth(data[i],5)
end
end
end




FG
andre111

Dieser Beitrag wurde von andre111 am 07.02.2010 um 10:44 editiert.

andre111
#264
07.02.2010 10:38
Beiträge: 220

--gelöscht wegen doppeltem posts.

Wladimir
#265
07.02.2010 10:46
Beiträge: 489

Danke andre111,
ich schrieb bereits: ist auch ok, wenns alle erwischt.
Ist wie im echten Leben; manchmal erwischts alle, auch die Unschuldigen.

Jetzt bleibt noch zu lösen, ob diese Funktion auch mehr als 16 Entites erfassen kann, was ja bei vielen Funktionen nicht geht.

Wladimir.

____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

andre111
#266
07.02.2010 10:51
Beiträge: 220

@Wladimir:

Schau nochmal in meinen letzten Post, ich glaube es gelöst zu haben. (Musst du aber noch testen. Mein Siedler läuft gerade nicht mehr )

FG
andre111

Wladimir
#267
07.02.2010 11:03
Beiträge: 489

Leider...

...kommt bei der Funktion nur eine Fehlermeldung heraus:

[ 2010/02/07 11:00:34 ] ERROR: DEBUG ERROR!

Error: LUA_ERRRUN: [string "Map Script"]:70: bad argument #1 to `getn' (table expected, got number)



Auch wenn ichs so schreibe:

function GebaudeHealth()
local data = Logic.GetAllPlayerEntities(1)
for i = 1,table.getn(data[i]) do
if Logic.IsBuilding(data[i]) == 1 then
SetHealth(data[i],5)
end
end
end


...Absturz sogar OHNE Fehlermeldung.

Wladimir.

PS: Dein letzter Post wurde von dir selbst gelöscht!

____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

andre111
#268
07.02.2010 11:05
Beiträge: 220

@Wladimir:

Da weis ich auch nicht mehr weiter,
jetzt müssen die Profis her.

PS: Ja, dass weis ich doch

FG
andre111

Wladimir
#269
07.02.2010 11:08
Beiträge: 489

Zitat von andre111:
@Wladimir:

Da weis ich auch nicht mehr weiter,
jetzt müssen die Profis her.

PS: Ja, dass weis ich doch

FG
andre111



Fehler gefunden!!!!!

function GebaudeHealth()
local data = Logic.GetAllPlayerEntities(1)
for i = 1,table.getn(data) do
if Logic.IsBuilding(data[i]) == 1 then
SetHealth(data[i],5)
end
end
end



Die werden nur geschwächt, wenn Player 1 nur Gebäude hat!
(wegen

 if Logic.IsBuilding(data[i]) == 1 then 

)

Wladimir.

PS: So isses richtig:

function GebaudeHealth()
local data = Logic.GetAllPlayerEntities(1)
for i = 1,table.getn(data) do
SetHealth(data[i],5)
end
end


Da erwischts halt alles.

Edit: Leider immer noch:

[ 2010/02/07 11:10:44 ] ERROR: DEBUG ERROR!

Error: LUA_ERRRUN: [string "Map Script"]:70: bad argument #1 to `getn' (table expected, got number)



____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

andre111
#270
07.02.2010 11:35
Beiträge: 220

@Wladimir:

Ich habs jetzt:

function GebaudeHealth()
_groesse = Logic.WorldGetSize()
_punkt = {X = _groesse/2, Y = _groesse/2} 
local data ={Logic.GetPlayerEntitiesInArea(1,nil, _punkt.X, _punkt.Y, math.floor(_groesse * 0.71), 100)}
for i = 1,table.getn(data) do
if Logic.IsBuilding(data[i]) ~= 0 then
--Message(""..data[i].."") --zeigt die ID des gefundenen Gebäudes an.
SetHealth(data[i],5)
end
end



Erwischt aber allerhöchstens 16 Gebäude, werden auch noch andere Entities erfasst wird die Zahl der Gebäude entsprechend weniger

PS: Hätte auch noch ne andere Lösung, die alle Gebäude erwischt(braucht dann aber SucheAufDerWelt). Soll ich sie Posten?

PPS: Das konnte ich auch wieder testen. Funktioniert

FG
andre111

Dieser Beitrag wurde von andre111 am 07.02.2010 um 11:40 editiert.

Wladimir
#271
07.02.2010 11:55
Beiträge: 489

Zitat von andre111:
@Wladimir:

Ich habs jetzt:

function GebaudeHealth()
_groesse = Logic.WorldGetSize()
_punkt = {X = _groesse/2, Y = _groesse/2} 
local data ={Logic.GetPlayerEntitiesInArea(1,nil, _punkt.X, _punkt.Y, math.floor(_groesse * 0.71), 100)}
for i = 1,table.getn(data) do
if Logic.IsBuilding(data[i]) ~= 0 then
--Message(""..data[i].."") --zeigt die ID des gefundenen Gebäudes an.
SetHealth(data[i],5)
end
end



Erwischt aber allerhöchstens 16 Gebäude, werden auch noch andere Entities erfasst wird die Zahl der Gebäude entsprechend weniger

PS: Hätte auch noch ne andere Lösung, die alle Gebäude erwischt(braucht dann aber SucheAufDerWelt). Soll ich sie Posten?

PPS: Das konnte ich auch wieder testen. Funktioniert

FG
andre111



SucheaufderWelt habe ich auch. Poste sie ruhig!
Kann ja nur von Vorteil sein!

Wladimir.

PS: Die Siedlung um dies geht hat um die 80 Gebäude(inkl. Türmen), da ist 16 einfach zu wenig.

____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

aCid
#272
07.02.2010 12:05
Beiträge: 275

http://www.siedler-maps.de/for...rBuildings-fehlerhaft-8613.htm

____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm

Wladimir
#273
07.02.2010 12:44
Beiträge: 489



Brrrrr...
Das ist ein riesen Code!
Da warte ich erstmal auf den Vorschlag von andre111 und vergleiche die Größe der beiden.
Die Funktion SucheaufderWelt brauche ich ja so oder so, da wäre die Lösung von andre111 einfach praktischer.

Wladimir.

PS: Mein Script hat jetzt ~125 kb

____________________
Viele, die leben, verdienen den Tod und viele die tot sind, das Leben. Kannst du es ihnen geben? Dann sei auch nicht so rasch mit einem Todesurteil zur Hand!

Gandalf

Noigi
#274
07.02.2010 13:44
Beiträge: 772

Die Funktion Logic.GetAllPlayerEntities gibt ihre Ergebnisse nacheinander aus, und nicht in einem table. Du müsstest für die Schleifenverarbeitung selbst einen table draus machen.

function GebaudeHealth()
local data = {Logic.GetAllPlayerEntities(1,40)}; -- Menge angeben! Maximum ist afaik 40
for i = 1,data[1] do
SetHealth(data[i+1],5)
end
end



Ansonsten vllt:
http://www.siedler-portal.de/s...-durch-tore-durchlassen-2.html

andre111
#275
07.02.2010 16:26
Beiträge: 220

@Wladimir:

Hier ist sie nun(erfolgreich getestet und SucheAufDerWelt ist auch schon mit drin):

function GebaudeHealth()
local data = SucheAufDerWelt(1)
for i = 1,table.getn(data) do
if Logic.IsBuilding(data[i]) ~= 0 then
--Message(""..data[i].." ist ein Gebaeude!") --Messages nur TestAufrufe
SetHealth(data[i],5)
end
end
--Message("Das wars!")
end

function SucheAufDerWelt(_player, _entity, _groesse, _punkt)
	local punktX1, punktX2, punktY1, punktY2, data
	local gefunden = {}
	local rueck
	if not _groesse then
		_groesse = Logic.WorldGetSize() 
	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, math.floor(_groesse * 0.71), 16)}
	else
		data ={Logic.GetPlayerEntitiesInArea(_player,_entity, _punkt.X, _punkt.Y, math.floor(_groesse * 0.71), 16)}
	end
	if data[1] >= 16 then -- Aufteilen angesagt
		local _klgroesse = _groesse / 2 
		-- Ausgangspunkt ist _punkt
		-- _punkt verteilen
		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



Ich hoffe, dass das hilft

FG
andre111

Dieser Beitrag wurde von andre111 am 07.02.2010 um 16:33 editiert.

Seiten: Zurück 1 ... 10 11 12 Nächste Seite

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

Impressum