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).
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