Mehrere Scriptfragen
» Siedler Map Source Forum » Siedler DEdK Script Forum » Mehrere Scriptfragen
Seiten: 1
W0lfkri3g3r
|
#1 08.11.2023 21:52 Beiträge: 39 |
Mehrere Scriptfragen
Hallo zusammen,
ich bin gerade mal wieder nach langer Zeit an einer neuen Map dran und da sind einige Fragen bei mir aufgetaucht.
Ich hoffe mir kann die jemand beantworten
1. Quests
Ich erzeuge mit der Funktion im Script Quests. Allerdings hab ich das Problem dass mir im Questmenü nur der Questtitel angezeigt wird, jedoch keine Questbeschreibung.
Code:
Logic.AddQuestEx( 1, QUEST_dorf1, SUBQUEST_OPEN, "Unruhen", "Geht nach Gruenbach und findet heraus was hier vor sich geht!", pos.X, pos.Y, 1 ) Explore.Show( "ShowDorf", "dorf1", 1200 )
2. Armeen
Ich habe eine Armee für einen Spieler erstellt (folgender Code).
Die Armee spawnt auch, allerdings steht sie einfach nur da und macht nichts. Nach einer Zeit werden neue Truppen nachgespawnt, obwohl die alten ja noch leben..
createArmyDefenders1 = function() -- set up armyDefenders1 = {} armyDefenders1.player = 6 armyDefenders1.id = 7 armyDefenders1.strength = 5 armyDefenders1.position = GetPosition("armeep6") armyDefenders1.rodeLength = 3000 armyDefenders1.control = {} armyDefenders1.control.timer = 2 SetupArmy(armyDefenders1) armyDefenders1.troopDescription = { maxNumberOfSoldiers = 4, minNumberOfSoldiers = 2, experiencePoints = MEDIUM_EXPERIENCE, } armyDefenders1.troopDescription.leaderType = Entities.PU_LeaderSword1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) armyDefenders1.troopDescription.leaderType = Entities.PU_LeaderSpear1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) armyDefenders1.troopDescription.leaderType = Entities.PU_LeaderBow1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) armyDefenders1.troopDescription.leaderType = Entities.PV_Cannon1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) -- job StartSimpleJob("ControlArmyDefenders1") end ControlArmyDefenders1 = function() if Counter.Tick2("ArmyDefenders1counter",10) then if IsDead("zelt1") then if IsDead(armyDefenders1) then return true end else RespawnDefenders1() end Defend(armyDefenders1) return false end end function RespawnDefenders1() if not HasFullStrength(armyDefenders1) then if armyDefenders1.control.timer <= 0 then armyDefenders1.troopDescription.leaderType = Entities.PU_LeaderBow1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) armyDefenders1.troopDescription.leaderType = Entities.PU_LeaderSword1 EnlargeArmy(armyDefenders1,armyDefenders1.troopDescription) armyDefenders1.control.timer = 2 else armyDefenders1.control.timer = armyDefenders1.control.timer -1 end end end
3. Tribute
Ich möchte den Spieler an ein anderes Dorf mehrere Rohstoffe (Holz, Eisen, Stein) bezahlen lassen. Nachdem der Tribut bezahlt wurde, soll das nächste Briefing starten.
Ich finde allerdings nicht so recht was wie ich das in eine Tribut table packe. Bisher habe ich immer nur Tribute im Sinne von Zahle das und erhalte Truppen gemacht.
Wie fülle ich da denn die Table?
@Play4Fun. Falls du das liest, ich hab mir stundenlang deine Tutorials zu Quests und Tributen angeschaut, aber ich komm da einfach nicht weiter.
Ich hoffe mir kann jemand weiterhelfen.
Viele Grüße
Chris
Dieser Beitrag wurde von W0lfkri3g3r am 11.11.2023 um 08:25 editiert.
fritz_98
|
#2 09.11.2023 17:37 Beiträge: 472 |
Hi Wolfkrieger!
Zu Frage 1 und 3 kann ich direkt was sagen, für Frage 2 habe ich selbst zuerst ein paar Fragen.
Generell ist es gut für die Lesbarkeit, wenn du Code in eine Code-Umgebung packst, also
[code]
function foo()
bar()
end
[/code]
was dann so aussieht:
function foo() bar() end
Zu Frage 1:
Dass der Text nicht angezeigt wird, liegt vermutlich daran, dass QUEST_dorf1 nicht belegt ist. Die Variable muss eine Zahl sein, die von keiner anderen Quest belegt ist, zum Beispiel 3 (falls Quest Nr.1 und 2 schon existieren):
QUEST_dorf1 = 3 Logic.AddQuestEx( 1, QUEST_dorf1, SUBQUEST_OPEN, "Unruhen", "Geht nach Gruenbach und findet heraus was hier vor sich geht!", pos.X, pos.Y, 1 )
(ich gehe hier davon aus, dass pos existiert)
Die Zahl, die du einträgst, sollte pro Quest einzigartig sein, da du sonst die Inhalte anderer Quests überschreibst.
Zu Frage 2:
Wenn ich das so starte, wie von dir gepostet, stürzt bei mir das Spiel ab. Das liegt daran, dass Entities.PU_LeaderSpear1 kein gültiger Entity-Typ ist. Vermutlich hast du Entities.PU_LeaderPoleArm1 gemeint.
Darüber hinaus musst du beachten, dass pro Armee höchstens 8 Hauptmänner kontrolliert werden können, in deiner Definition sogar höchstens 5. Darunter allerdings erstellst du bereits 11 Truppen, was deutlich über das Limit hinaus geht.
Dass die Truppen bei dir gar nichts machen, erklärt sich dadurch aber nicht. Der erste Anhaltspunkt wäre zu schauen, ob du die KI für Spieler 6 aktivierst, beispielsweise mit SetupPlayerAi.
Um die KI für Spieler 6 ohne viel Drumrum zu aktivieren, genügt der Aufruf
AI.Player_EnableAi(6)
Am besten, bevor du die Armee erstellst. Achtung: Damit das funktioniert, muss Spieler 6 unbedingt mindestens 1 Gebäude besitzen, da sonst das Spiel abstürzt!
Benutzt du denn irgendwelche Skripterweiterungen für Armeen? Ich frage, weil das Spiel bei dir nicht abzustürzen scheint.
Zu Frage 3:
Bezüglich Tributen findest du hier einen brandneuen Skriptwiki-Artikel:
https://dedk.de/wiki/doku.php?id=scripting:tutorials:level2:tribute
Um ein Briefing nach der Bezahlung eines Tributs zu starten, musst du eine Funktion als Callback angeben, in der das Briefing gestartet wird.
Noch etwas Werbung fürs Wiki.
Es ist noch im Aufbau, aber du findest hier schon einige Artikel zu Einsteigerthemen bzgl. Siedler-Skripting:
https://dedk.de/wiki/doku.php?id=scripting:tutorials
Vielleicht findest du da den ein oder anderen hilfreichen Ansatz. Der Rest wird, sobald es die Zeit hergibt, ergänzt.
Viele Grüße
Fritz
Dieser Beitrag wurde von fritz_98 am 11.11.2023 um 11:26 editiert.
W0lfkri3g3r
|
#3 19.11.2023 20:09 Beiträge: 39 |
Hallo Fritz.
Danke für deine Antworten, die haben mir schon weitergeholfen?
Was mir noch bleibt ist, gibt es irgendwo eine Liste aller Technologien?
Also Ausbauten von Gebäuden, Erforschungen von Truppen etc.
Viele Grüße
Chris
fritz_98
|
#4 20.11.2023 17:57 Beiträge: 472 |
Hi Chris,
die Technologieliste ist noch im alten Wiki:
https://dedk.de/wiki/doku.php?id=reference:technologies
Viele Grüße
Fritz
W0lfkri3g3r
|
#5 14.12.2023 21:50 Beiträge: 39 |
Danke dir.
Ich nähere mich dem Ende der Karte. Eine kleine Frage habe ich noch.
Hier mal ein Beispiel eines Briefings von mir:
function Rebellen_Brief1() --Briefing Anführer Rebellen local briefing = {} local AP, ASP = AddPages(briefing); ASP("eisen1","Anführer",Umlaute("Schön zu hören. Der Aussenposten kontrolliert die Minen, die einst den Wohlstand über dieses Land gebracht haben."), true) ASP("rebel1","Anführer",Umlaute("Wir müssen den Aussenposten zerstören und die Minen wieder zurück erobern."), true)
Ich hab die meisten Briefings ja mit der Add Short Page funktion gemacht.
Nun ist es aber so, dass wenn ich z.B ein Gebäude im Briefing zeigen möchte, die Kamera gefühlt immer fast im Gebäude hängt.
Wie packe ich das denn in ein Briefing rein, dass das an der entsprechenden Seite da raus zoomt? Geht das?
Viele Grüße
Chris
fritz_98
|
#6 15.12.2023 10:42 Beiträge: 472 |
Hi Chris,
der letzte Parameter der ASP-Funktion bestimmt, ob die Kameraeinstellung die Option dialogCamera verwendet. Bei aktiver dialogCamera ist die Kamera näher am Geschehen, um den Dialog zwischen Charakteren plausibler zu machen.
Wenn du den Parameter auf false setzt, also schreibst
ASP("eisen1","Anführer",Umlaute("Schön zu hören. Der Aussenposten kontrolliert die Minen, die einst den Wohlstand über dieses Land gebracht haben."), false) ASP("rebel1","Anführer",Umlaute("Wir müssen den Aussenposten zerstören und die Minen wieder zurück erobern."), false)
sollte die Kamera weiter oben stehen.
Viele Grüße
Fritz
Seiten: 1