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

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

Impressum