Statistik auslesen und abbaubaren Felsen

» Siedler Map Source Forum » Siedler DEdK Script Forum » Statistik auslesen und abbaubaren Felsen

Seiten: 1

Peter-FS
#1
20.03.2010 20:06
Beiträge: 1086

Statistik auslesen und abbaubaren Felsen

Hallo, habe im Moment 2 Probleme.

1.ich möchte wissen wie viele Soldaten der Spieler schon erledigt hat. Man kann ja die Anzahl der Arbeiter usw. auch auslesen. Nur über die toten Soldaten finde ich nichts.

2. Ich kann mich an eine Map erinnern, in der man die Felsen mit den Serfs bearbeiten konnte. Ähnlich der Funktion CreateWoodPile( "holz1", 100000 ) für Holzhaufen. Habe versucht diese Funktion für Felsen um zu bauen, finde aber keine Resource für Stein (Entities.XD_ResourceTree) die man verwenden könnte.

Wenn ich als Resource das Holz nehme und einen großen Stein verwende, kommen die Serfs nicht ran. Mit kleinem Stein gehts, nur sieht man da einen weißen Würfel.

Wäre super wenn jemand helfen kann.
Gruß Peter

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

andre111
#2
20.03.2010 20:35
Beiträge: 220

@Peter-FS:

Zu 1:
Ich weis zwar nicht, ob man die Statistik auslesen kann,
aber das hier macht auch genau das, was du willst(du must blos die ID des Gegners umändern)(schon getestet):

function Verwaltung_der_Todesfaelle()

	local kaputt = Event.GetEntityID(); -- hier wird die gerade zerstörte Entity erfasst
	if (Logic.IsEntityInCategory(kaputt,EntityCategories.Military) == 1) then -- eine Einheit!
            if GetPlayer(kaputt) == 2 then -- GegnerID eingeben!
			BesiegteEinheiten = ((BesiegteEinheiten or 0) +1);
		end
	end

end



In die FMA:

Trigger.RequestTrigger( Events.LOGIC_EVENT_ENTITY_DESTROYED, "", "Verwaltung_der_Todesfaelle", 1);



dann ist in der Variable BesiegteEinheiten die Anzahl der besiegten einheiten eingetragen.

FG
andre111

Dieser Beitrag wurde von andre111 am 20.03.2010 um 21:56 editiert.

Peter-FS
#3
20.03.2010 22:01
Beiträge: 1086

Super Idee, die Anzahl der erledigten Feinde zu speichern.
Werde ich ausprobieren. Die Variable or 0 um Eins erhöhen gefällt mir auch, ich habe bisher am Anfang die Variable immer auf 0 gesetzt. Echt cool!!

Danke

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Mordred
#4
20.03.2010 23:43
Beiträge: 939

Ja, das ist was spannendes.
da das eine ja schon geklärt ist, noch zum stein:
Es gibt ja die ganz normalen Steine zum abbauen.
Falls dir die aber nicht reichen, dann gibt es sogar noch "Geröll". Falls das dir nicht reicht, wirds kompliziert...
Du kannst primitiverweise eine SucheAufDerWelt laufen lassen, die jeden Stein abklappert, ob ein Leibeigener in der Nähe ist. Wenn ja, dann nimm ihn un gib ihm eine Task_List, dass er hackt, un wenn das ein SimpleJob ist, dann jede sekunde einen Stein mehr.
Ansonsten musst du dir das selbst überlegen

Peter-FS
#5
20.03.2010 23:59
Beiträge: 1086

Der Sinn ist nicht Steine zu beschaffen, sondern ein Hindernis nicht mit Pilgrims Sprengung, sondern durch die Serfs zu beseitigen.

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

andre111
#6
21.03.2010 07:15
Beiträge: 220

Zitat von Peter-FS:
Der Sinn ist nicht Steine zu beschaffen, sondern ein Hindernis nicht mit Pilgrims Sprengung, sondern durch die Serfs zu beseitigen.



@Peter-FS:

Dann nimm doch XD_Stone_BlockPath
der bleibt immer gleichgros bis der ganz abgebaut ist.

fritz_98
#7
21.03.2010 09:28
Beiträge: 472

Hi Peter!

Zu den Steinen: Ich glaube mal, du meinst die Map "Viel Geld viel Ehr", zufällig von mir.

Die Steinfunktion funktioniert, wie Mordred schon sagte, nach einem recht "primitiven" Prinzip, das schaut, ob in der Nähe des Steins Leibis sind, und wenn ja, fangen sie an zu klopfen. Das Problem an der ganzen Sache ist, dass insgesamt nur 1 Stein abbaubar ist, jedenfalls so lange, bis er weg ist. Dann kann der nächste dran.
Vllt will hier jemand den Code entprechend umskripten?!
(Wenn nicht, versuch ich mich mal dran... hoffentlich hab ich nicht allzu viel verlernt )

MfG
Fritz

andre111
#8
21.03.2010 11:02
Beiträge: 220

@fritz_98:

Hab ihn mal umgescriptet:

function CreateStone(_pos,amount)
  Steintable = Steintable or {}
  local data = {
  pos = _pos,
  sAmount = amount,
  bishier = 0,
  anzahls = 0,
  }
  table.insert(Steintable,data)
  controlStone = StartSimpleJob("ControlStone")
end
function ControlStone()
for i = 1,table.getn(Steintable) do
 if AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,1) then
   serf1 = SucheAufDerWelt(1,Entities.PU_Serf,650,GetPosition(Steintable[i].pos))
   for i = 1,table.getn(serf1) do
      Logic.SetTaskList(serf1[i],TaskLists.TL_SERF_EXTRACT_RESOURCE)
      LookAt(serf1[i],Steintable[i].pos)
   end
   Steintable[i].anzahls = Steintable[i].anzahls + 1
   Add1(i) 
 else 
   Steintable[i].anzahls = Steintable[i].anzahls - 1
   endingJob = StartSimpleJob("Beenden")
   return true
 end
 if Steintable[i].anzahls > 4 then
   Add1(i)
 end
 if Steintable[i].anzahls > 9 then
   Add1(i)
 end
 if Steintable[i].anzahls > 14 then
   Add1(i)
 end
 if Steintable[i].anzahls > 17 then
   Add1(i)
 end
 if Steintable[i].anzahls > 24 then
   Add1(i)
 end
 if not AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,5) then 
  Steintable[i].anzahls = 3
 end
 if not AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,10) then 
  Steintable[i].anzahls = 8
 end
 if not AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,15) then 
  Steintable[i].anzahls = 13
 end
 if not AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,18) then 
  Steintable[i].anzahls = 16
 end
 if not AreEntitiesInArea(1,Entities.PU_Serf,GetPosition(Steintable[i].pos),650,25) then 
  Steintable[i].anzahls = 23
 end
 if Steintable[i].sAmount < Steintable[i].bishier then
   CreateEffect(1,9,Steintable[i].pos) 
   serfs = SucheAufDerWelt(1,Entities.PU_Serf,1000,GetPosition(Steintable[i].pos)) 
   for i = 1,table.getn(serfs) do
     Logic.SetTaskList(serfs[i],TaskLists.TL_SERF_IDLE) 
   end 
   DestroyEntity(Steintable[i].pos)
   table.remove(Steintable,i)  
 end
end
end
function Add1(_nummer)
for i = _nummer,_nummer do
   Steintable[i].bishier = Steintable[i].bishier + 1
   AddStone(1)
end
end
function Beenden()
for i = 1,table.getn(Steintable) do
   pruefen = SucheAufDerWelt(1,Entities.PU_Serf,650,GetPosition(Steintable[i].pos))
   if table.getn(pruefen) == 0 then
     EndJob(controlStone)
     controlStone = StartSimpleJob("ControlStone")
   end
end
end



_pos = Die Steinentity
amount = Wie viel Stein der "stein" beinhaltet

FG
andre111

Noigi
#9
21.03.2010 16:25
Beiträge: 772

local id = CreateEntity(0, Entities.XD_Stone_BlockPath, GetPosition("blockade"));
Logic.SetResourceDoodadGoodAmount(id, 50);
Logic.SetModelAndAnimSet(id, Models.XD_RockDestroyable);

fritz_98
#10
21.03.2010 16:27
Beiträge: 472

@Noigi:
Ich dachte, das Model würde nicht immer seine Form behalten?

Oder haben diese Krankheit etwa nur Bäume?

Noigi
#11
21.03.2010 16:42
Beiträge: 772

Nein, die Krankheit haben alle Bäume und alle Rohstoffhaufen außer dem Geröllhaufen, weil bei denen intern das Modell beim Abbauen verändert wird (Baum wird zum Asthaufen, Haufen werden kleiner).

Mordred
#12
23.03.2010 14:09
Beiträge: 939

praktisch aber das geht nur bei XD? oder?

Noigi
#13
24.03.2010 19:34
Beiträge: 772

Alles außer Einheiten ist machbar.
Man sollte sich aber immer vor Augen halten, dass man als Spieler eine Map auch "beherrschen" können will und seine Erfahrungen und Taktiken wie gewohnt anwenden möchte. Es macht keinen Spaß jeden Stein 2x anzusehen, ob er nicht vielleicht doch eine Sägemühle ist.
Ich weiß, sagt der Richtige. *hust*

Peter-FS
#14
24.03.2010 22:02
Beiträge: 1086

Danke erstmal für eure Hilfe.
Hatte jetzt die Zeit um ein paar Tests zu machen.
zu1) erledigte Soldaten funktioniert super.

zu2) Felsen oder Steine abbauen geht zum Teil.
ein Logic. fehlt bei CreateEffect (nur falls jemand testen will) und bei LookAt(serf1....) kommt manchmal eine Fehlermeldung. Habe schon alles versucht, bringe ich nicht hin. Wenn es auskommentiert ist, geht der Rest, klopfen halt in eine andere Richtung.
Allerdings funktioniert es immer noch nicht mit mehreren Steinen gleichzeitig (ist für mich im Moment aber nicht wichtig).

Peter

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Seiten: 1

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

Impressum