Armeen IDs

» Siedler Map Source Forum » Siedler DEdK Script Forum » Armeen IDs

Seiten: 1

Niedersiedler
#1
17.01.2010 17:42
Beiträge: 47

Armeen IDs

Hi,

Armeen haben ja IDs. Aber was genau hat es damit auf sich, in welchem Zahlenbereich dürfen die IDs liegen und vor allem: was gibt es für Probleme, wenn ich IDs doppelt verwende?

Ach ja, es gibt ja einige verschiedene Möglichkeiten, Armeen zu erstellen. Ich beziehe mich hierbei auf folgendes Muster, sollte das in irgendeinerweise von Belang sein.

function CreateArmyTwo()
    armyTwo = {
        player      = 3,
        id          = 2,
        strength    = 4,
        position    = GetPosition("InvasionPoint1"),
        rodeLength  = 1000
    }
    SetupArmy(armyTwo)
 
    local troopDescription = {
        maxNumberOfSoldiers = 8,
        minNumberOfSoldiers = 0,
        experiencePoints    = VERYHIGH_EXPERIENCE,
        leaderType          = Entities.CU_Barbarian_LeaderClub1
    }
 
    for i = 1, 4 do
        EnlargeArmy(armyTwo, troopDescription)
    end
 
    StartSimpleJob("ControlArmyTwo")
	CreateHendrikTimer();
end

function ControlArmyTwo()
	FrontalAttack(armyTwo)
end



MfG
Niedersiedler

Noigi
#2
17.01.2010 17:50
Beiträge: 772

http://www.siedler-games.de/siedler5scriptwiki/dokuwiki/doku.php/tutorials:armeen_erstellen

Im letzten Punkt wird die Bedeutung der IDs erwähnt. Im Wesentlichen: Wenn du die Armeen selbst kontrollieren willst, nimm "große" IDs, wenn sie KI-gesteuert werden sollen, nimm die entsprechenden IDs aus der Tabelle.

Ob es für die Armeen-IDs eine Obergrenze gibt weiß ich nicht - Probieren geht über Studieren.

fritz_98
#3
17.01.2010 17:54
Beiträge: 472

Zitat von Noigi:

Ob es für die Armeen-IDs eine Obergrenze gibt weiß ich nicht - Probieren geht über Studieren.



http://www.siedler-games.de/si...php/tutorials:armeen_erstellen ...

Zitat:


-- Eine zulässige und pro Armee einmalige(!) ID von 0 bis 9



LG
Fritz

Niedersiedler
#4
21.01.2010 14:02
Beiträge: 47

Ach, das Wiki gibt's sogar noch... naja ok vielen dank, aber das bringt mich alles nicht wirklich weiter.

Was mich schon seit Monaten daran hindert, endlich weitere Maps rauszubringen, ist dass ich es einfach nicht schaffe, ein Armee-Script so zu schreiben, wie es mir passt. Ich hoffe mal ihr könnt mir helfen. Es ist eigentlich etwas, was so oder so ähnlich fast auf jeder Map vorkommt, aber ich krieg es einfach nicht hin:

Was ich will ist:

- Eine Armee wird immer wieder neu gespwant, entweder nachdem eine bestimmte Zeit seit dem letzten Spawn vergangen ist, oder weil die zuvor gespawnte Armee vernichtet wurde
- Diese Armee greift alles an, was feindlich ist, egal wo es sich auf der Map befindet
- Es können beliebig viele Armeescripte dieser Art sowohl parallel als auch hintereinander ablaufen.
- Die Hauptmänner der Armee rennen nicht zurück, um sich neue Soldaten zu beschaffen, sondern kämpfen bis zum Tod.
- Es sollte die Möglichkeit geben, dass die Armee bei der Zerstörung eines bestimmten Gebäudes nicht weiter nachgespwant wird. Trotzdem hätte ich gerne, dass dieses Armeescript auch funktionieren würde, wenn der Gegner gar keine Gebäude hat. In diesem Fall wäre es natürlich auch nicht möglich, den Respawn zu beenden.

Sowas muss doch möglich sein. Ich habe schon alles versucht, mit Countern, Flodders Rob-Army und was weiß ich noch alles, aber es geht nie etwas so wie ich will...

Dieser Beitrag wurde von Niedersiedler am 21.01.2010 um 14:19 editiert.

aCid
#5
21.01.2010 15:07
Beiträge: 275

das was du beschreibst, klappt auf jeden fall mit dem, was du als hilfsmittel angegeben hast.

dafür braucht der gegener auch keine gebäude oder ähnliches. keine AI oder irgendein setup. wichtig ist, dass du im skript und im editor die gleichen skriptnamen für die Entities benutzt.
sowas lässt sich aber am leichtesten per code nachvolziehen.

ich rate dir, dich nochmal mit flodder auszutauschen bzgl. der robarmee. weil die macht genau das was du willst. aber rede erst mit ihm.

ps: und denk dran, auch immer die nötigen comfortfunktionen mit ins skript zu hauen. vlt. dabei was vergessen.
und guck, ob die Aufrufe wie CreateEntity etc. auch die richtigen Parameter haben.
am besten Siedler im Debugmodus starten (gibt hier ne Anleitung im Forum). Vielleicht reicht schon die fehlermeldung aus, um zu sagen, was dabei nicht stimmt.

____________________
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

Niedersiedler
#6
21.01.2010 15:34
Beiträge: 47

@aCid
Flodder hat mir aber erklärt (oder zumindest hab ich es so verstanden), dass die RobArmee nicht alles angreift, was sich auf der Karte befindet, sondern nur das, was sich auf ihren Patrouillienwegen befindet. Ich will, aber das man überall angegriffen wird, egal wo man seine Siedlung baut.

Aber nochmal zu dem Armeescript von vorhin. Um alle Feinde in Reichweite (welche bei mir mehr als die ganze Karte entspricht), habe ich die Funktion "FrontalAttack(XYZ)" verwendet. Die Armeen sind aber stehengeblieben. Jetzt hat es aber funktioniert, nachdem ich diese Funktion noch ins Script gepackt habe:

function CreatePlayer2()
	player2 					= {}
	player2.id 					= 2
	local description 			= {serfLimit = 10}
	SetupPlayerAi(player2.id,description)
end



Aber du meintest doch, man braucht kein Setup oder derartiges? Oder hättest du anstatt FrontalAttack eine andere Funktion verwendet?

Naja, jetzt geht es ja vorerst, aber ich erwarte, dass ich trotzdem noch auf Probleme stoßen werden. Vor allem was die Geschichte mit der ID der Armeen angeht. Ich habe immer noch nicht verstanden, wozu die überhaupt nötig ist...

aCid
#7
21.01.2010 15:52
Beiträge: 275

das davor hatte sich angehört, wie "Erstelle XY Einheiten und greife ZIEL XY an". dazu brauchst du das nicht.

Aber da du die KI selber angreifen lassen willst, musst du natürlich die KI definieren.

Frontalattack für deinen Zweck ist Okay. Und Frontalattack als Aufruf erfordert eine KI des Gegners.

Das kommt auf die Map und die Aufgabe an. Aber für deinen Zweck ist das erstmal die beste Alternative. (Soweit ich weiss. Vielleicht gibt es auch noch die eine oder andere Comfortfunktion. habe mich KI an sich nicht sehr tief beschäftigt, da ich die Gegener einzeln kreieren. Truppenerstellung, etc.)

Bzgl. der IDs. Wenn du Armeen erstellst, die bestimmte Eigenschaften haben sollen und eine KI des Gegeners haben müssen, müssen sie eine bestimmte ID haben. Unabhängig davon, wieviele Einheiten innerhalb einer Armee sind.
Teile der Eigenschaften dieser Armee, übernimmt dann die KI. Wenn du beispielsweise sagst, dass sich die Armee auch zurückziehen soll, wenn sie schwach ist o.ä.. Und an dieser Stelle hat das Spiel die Grenze, dass es nur maximal 10 Armeen parallel verwaltet.
(So habe ich das prinzip verstanden.)

____________________
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

Emzet
#8
21.01.2010 21:08
Beiträge: 80

KI-Armeen

Zitat von Niedersiedler:
Es können beliebig viele Armeescripte dieser Art sowohl parallel als auch hintereinander ablaufen



Dafür bist du leider, wie schon Acid sagte, an den IDs gebunden. Aber ich glaube soviele willst du nicht erstellen.

Zitat von Niedersiedler:
Diese Armee greift alles an, was feindlich ist, egal wo es sich auf der Map befindet


Man kann Frontalattack benutzen, aber bei Kanonen und Reitern kann sich das unvorteilhaft auswirken, weil die diese Truppen zu langsam oder zu schnell für die regulären Truppen sind.

Zitat von Niedersiedler:
Die Hauptmänner der Armee rennen nicht zurück, um sich neue Soldaten zu beschaffen, sondern kämpfen bis zum Tod.


Hast du schon mal versucht beim Wert minNumberOfSoldiers einfach eine Null stehen zu lassen? Dann kämpfen diese Soldaten wirklich weiter und versuchen nicht sich irgendwo aufzufrischen.

Zitat von Niedersiedler:
Es sollte die Möglichkeit geben, dass die Armee bei der Zerstörung eines bestimmten Gebäudes nicht weiter nachgespwant wird. Trotzdem hätte ich gerne, dass dieses Armeescript auch funktionieren würde, wenn der Gegner gar keine Gebäude hat. In diesem Fall wäre es natürlich auch nicht möglich, den Respawn zu beenden.



Es gäbe eine Möglichkeit, die Truppen "ohne" Gebäude respawnen zu lassen. Man setzt irgendein Gebäude in den schwarzen Kartenrand(solang der nicht benutzt wird) und versteckt da ein Gebäude der KI. Dadurch können die Truppen ganz normal agieren und angreifen ohne Rücksicht auf Verluste.

Das wären ein paar Vorschläge.
Theoretisch könntest du auch deinen Dummycode vorstellen, wenn du willst. Dann kann man ein paar Vorschläge zur Verbesserung machen.

LG
Emzet

Siedler_Team
#9
22.01.2010 04:19
Beiträge: 847

Zitat von Niedersiedler:
Es sollte die Möglichkeit geben, dass die Armee bei der Zerstörung eines bestimmten Gebäudes nicht weiter nachgespwant wird.


Zu Dieser Frage kann ich definitiv folgendes sagen:
Genau das macht die Armee-Funktion von Robert Schmitz. Du hast vermutlich nicht richtig verstanden WAS die genau macht und welche Parameter voneinander abhängen.

Ausschlaggebend bei diese Armee-Funktion ist der Lebensfaden. Das kann irgendein ein Gebäude, oder meinetwegen auch ein Baum. eine Person... oder wenn man gemein wäre, sogar ein etwas grösserer Stein oder noch gemeiner: Eine Skriptentity sein. Die beiden letzteren Entities sind unzerstörbar und der Spieler würde gegen Windmühlen anrennen. Der Lebensfaden, also die Entity, von der das respawnen der gegnerischen Armee abhängt brauchen nur einen Namen, damit sie die Funktion erfassen kann. Ist dieser Lebensfaden hin, wird keine gegnerische Armee mehr nachproduziert, die von diesem Lebensfaden abhing.

Die Funktion von Robert Schmitz sorgt selbständig dafür, dass nicht unendlich produziert wird, sondern nur in genau dem Masse, wie Armeen getötet wurden. Es findet lediglich eine Nachproduktion im Gleichen Verhältnis zur Tötung statt. Also immer 1:1.

Viele Skripter, ich nicht ausgeschlossen, sind überaus dankbar, dass es diese Funktion gibt. Die lässt sich unglaublich vielseitig einsetzen und jeder Situation anpassen. Wenn ich ehrlich bin: Ich brauch gar keine andere Armee-Funktion. Robert Schmitz´s Armee-Funktion macht alles -entsprechend angepasst- was man will.

Zitat von Niedersiedler:

Trotzdem hätte ich gerne, dass dieses Armeescript auch funktionieren würde, wenn der Gegner gar keine Gebäude hat.


Macht sie doch Niedersiedler. Die R.Schm.- Armee-Funktion braucht keine Gebäude! Da geht alles Erdenkliche (...ausser Rehe und und Hasen vielleicht) Möglicherweise aber auch das. Hab ich noch nicht ausprobiert. Muss ich mal versuchen.
Evtl. Hasen per Skript erzeugen und gleich einen Namen verpassen? Töten dann aber auch nur wieder per Skriptbefehl, weil Krieger zwar in der Lage wären, u.U. die gesamte Map zu plätten, aber KEIN Krieger (...unter normalen Umständen) in der Lage ist, einen popeligen Hasen oder Rehe zu töten.

Zitat von Niedersiedler:

In diesem Fall wäre es natürlich auch nicht möglich, den Respawn zu beenden.


Aber sicher doch! Du brauchst die Entity per Skriptbefehl doch nur destroyen. Dann ist der Lebensfaden weg! Aber auch ohne destroyen wird nicht unendlich erzeugt, sondern nur die Leader-Menge, die Erfahrung, die Truppengattung, die Menge an Gefolgsleuten und die Agressivität, die Du der Funktion vorgibst. Erklärung etwas höher. Angreifen tun die alles, was ihnen auf ihren vorgegebenen Patroillen-Wegpunkten in die Quere kommt. Der Kriegsradius ist allerdings nicht unbegrenzt. das stimmt schon. Aber mit der Vergabe gezielter Wegpunkte, Aufsplittung in verschiedene Lebensfäden, -dann allerdings mit geringerer Truppenzahl- (wegen mögliche Rechnerbelastung, wenn es ZU VIELE sind), kann man auch das lückenlos abfangen. Wem das nicht reicht, der kann zusätzlich noch die Funktion MachKumpel und MachVieleKumpel einsetzen. Also Armeen die bei Angriffen herbei eilen und unterstützen. Was will man noch mehr?

____________________
Wer altes Wissen ehrt und neues Wissen erlangt, ist bereit, ein Lehrer zu sein. ( -Konfuzius- )

Dieser Beitrag wurde von Siedler_Team am 22.01.2010 um 05:01 editiert.

Siedler_Team
#10
22.01.2010 04:47
Beiträge: 847

Zitat von Niedersiedler:

Flodder hat mir aber erklärt (oder zumindest hab ich es so verstanden), dass die RobArmee nicht alles angreift, was sich auf der Karte befindet, sondern nur das, was sich auf ihren Patrouillienwegen befindet.


Kommt drauf an, wie gross Du den Angriffsradius (Kriegsradius) in der Funktion einstellst. Der ist allerdings nicht unendlich und auch nicht über eine grosse Karte "umfassend" einstellbar. Das ist richtig.

Zitat von Niedersiedler:

Ich will, aber das man überall angegriffen wird, egal wo man seine Siedlung baut.


...und da haben wir es schon. Einfach nur mal von der Logic, dem Spielverhalten und der Kartengestaltung ausgehen. Was macht der Spieler in der Regel? Er baut nicht da sein Dorf auf, wo er will, sondern wie Du es als Mapper duch Gestaltung der Karte also z.B. duch Minen, durch ein Dz, durch eine Burg, durch Gebirge, durch Seen, Flusse Übergänge, nicht Übergänge und was weiss ich nicht noch alles "GESTATTEST".

Es ist dann abzusehen, wo er das Dorf aufbaut und damit auch schon vorhersehbar, wo er sein erstes Militärgbaude setzt. Wenn Du das in etwa weisst, kannst Du über SucheAufDerWelt abfangen, WANN und WAS er fertiggestellt hat und dann schlägst Du zu! Man kann das natürlich auch anders abfangen. Es gibt viele Möglichkeiten (Bauverbotsfunktion etc...)

Du plasterst ihm in dem Moment ein Gebäude vor die Nase, wo er zuvor nicht hin konnte (durch ein verschlossenes Tor gesperrtes Areal z.B.) und lässt dann dieses Tor öffnen. Es gehen auch andere Dinge. Tor also mal als Beispiel.

So und nun reicht auch eine einzige RobArmeefunktion aus, jeden Spieler ins Schwitzen zu bringen!

____________________
Wer altes Wissen ehrt und neues Wissen erlangt, ist bereit, ein Lehrer zu sein. ( -Konfuzius- )

Seiten: 1

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

Impressum