Umlaute In Diplomatie Verzeichnes (KI Gegener Namen mit Umlaute)

» Siedler Map Source Forum » Siedler DEdK Script Forum » Umlaute In Diplomatie Verzeichnes (KI Gegener Namen mit Umlaute)

Seiten: 1

GiGaByTe
#1
08.09.2020 16:51
Beiträge: 19

Umlaute In Diplomatie Verzeichnes (KI Gegener Namen mit Umlaute)

Ich Glaube der Titel bringt es schon auf den Punkt! Ich würde gerene einigne KI Gegenern wie ind er Kampange Namen mit Umlauten geben z.b.: "Räuber", "Mühlenheim" etc. . Allerdings werden die Namen bei den Umlauten abgebrochen wenn ich die Map lade! Wass muss ichd dafür tun damit die Umlaute angezeigt und die Namen nicht abgerbrochen werden!

Für die Briefings habe ich dieses Umlaute script verwendet!

function Umlaute( _text )
local texttype = type( _text );
if texttype == "string" then
_text = string.gsub( _text, "ä", "\195\164" );
_text = string.gsub( _text, "ö", "\195\182" );
_text = string.gsub( _text, "ü", "\195\188" );
_text = string.gsub( _text, "ß", "\195\159" );
_text = string.gsub( _text, "Ä", "\195\132" );
_text = string.gsub( _text, "Ö", "\195\150" );
_text = string.gsub( _text, "Ü", "\195\156" );
return _text;
elseif texttype == "table" then
for k,v in _text do
_text[k] = Umlaute( v );
end
return _text;
else
return _text;
end
end

Zedeg
#2
08.09.2020 17:15
Beiträge: 428

Gude,

wenn ich mich recht entsinne, war es

SetPlayerName(_playerID, Umlaute(_playerName))

also bspw.

SetPlayerName(2, Umlaute("Lößhügelländer"))



Wie du an der Defintion von Umlaute sehen kannst, wird Umlaute("Lößhügelländer" ) zu "L\195\182\195\159h\195\156gell\195\164nder". Diese Zeichenkette stellt DEdK mit korrekten Umlauten dar.

____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski

Play4FuN
#3
08.09.2020 18:06
Beiträge: 704

Zitat von Zedeg:
Diese Zeichenkette stellt DEdK mit korrekten Umlauten dar.


Jo, kennt jemand eine Möglichkeit, dass das auch für GUI.MiniMapDebug_SetText funktioniert? Also Umlaute zu verwenden.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#4
08.09.2020 20:11
Beiträge: 1472

Nur wenn du in der xml ne andere Schriftart setzt.

GiGaByTe
#5
09.09.2020 09:55
Beiträge: 19

Danke... :P

Danke @Zedeg es funktioniert wunderbar! Vielen Dank für deine Hilfe!

GiGaByTe
#6
09.09.2020 10:22
Beiträge: 19

Zwei weitere Fragen! :P

@Zedeg da du dich anscheinend besser auskennst als ich, habe ich noch zwei fragen:

1. Weist du zufällig auch wie man einen Tribut erstellt, denn mit den Anweisungen die ich im Editor Wiki gefunden habe funktionierte es nicht oder ich bin zu dumm.

Im grunde möchte ich es ganz "simple" halten:

Einer verbündeten Stadt sollen 2000 Taller, 1000 Eisen & 1000 Holz gezahlt werden dmait diese eine verbündete Armee "aufstellen" kann die dann den Feind angreift... das mit der Armee würde ich schon hinkriegen,
aber das mit dem Tribute is halt so ne Sache bei der ich überfragt bin wie es genau funktioniert!

bzw. wie man einen Tribut erstellt und wo genau der eingetragen werden muss?!

2. Ich würde gerne eine bestimmte Einheit bzw. einen "Schwarzen Ritter" unverwundbar machen... dieser soll nähmlich Angriffe abwehren wie der "Heldenhafte Ritter" aus der Legenden Kampangie "der Wolf im Schafspelz", "Restauration". auch hir habe ich keine Ahnung welche Funktion dafür benötigt wird und im Wiki habe ich nichst gefunden... ich habe auch das Forum hier durchstöbert und bin dabei auf: "MakeInvulnerable" gestoßen, aber wie gesagt habe ich keine Ahnung wie diese function funktioniert!


Wenn du es nicht weist ist auch nich schlimmt, dann fliegt der Teil halt aus der Story der Map... quasie als "Delted Secene" wie im Film! xD

GiGaByTe
#7
09.09.2020 10:37
Beiträge: 19

*Ergänzung* Thema Tribute

Was ich vergessen habe zu erwäwhnen ist das der unten beschriebene Tribut nach einem Briefing mit einem gewissen "Hauptmann" erstellt werden soll, nach dem dieser einem Truppen zur unterstützung gegen hat.

Allerdings "hängt" sich das Briefing danach immer auf, bzw. die kamera fixiert sich auf den NPC, spingt immer wieder zurück zu dem NPC und lässt sich nicht mehr bewegen, Der Soundtrack "BridgeBuilding" hängt sich auf bzw. fängt immer wieder von vorne an und bricht nach einigen Sekunden ab.

Ohne den Tribut funktioniert es einwandfrei!

function BriefingCaptianFinished()
local troopDescription = {
minNumberOfSoldiers = 0,
maxNumberOfSoldiers = 8,
experiencePoints = HIGH_EXPERIENCE,
leaderType = Entities.PU_LeaderSword3,
position = GetPosition("support"
}
local army = {}
local a1 = CreateTroop(army,troopDescription)
local a2 = CreateTroop(army,troopDescription)
end

Play4FuN
#8
09.09.2020 17:32
Beiträge: 704

Hi GiGaByTe,

nutze mal bitte für deine Codeschnipsel sowas hier: [*code] (dein Code) [*/code] (ohne die Sternchen).

Tribute könnten so aussehen:

function CreateTributeA()
	AddTribute{
		playerId = 1,
		text = "kauf mich",
		cost =  { Gold = 350 },
		Callback = OnTributeAPaid,
	}
end

function OnTributeAPaid()
	-- mach was
end

CreateTributeA kann z.B. nach Kartenstart (FirstMapAction) oder nach einem Briefing aufgerufen werden. Spieler 1 bekommt dann den Tribut angezeigt, die Rohstoffkosten müssen hier immer groß geschrieben werden. Auch darauf achten, dass es "Callback" und nicht "callback" heißt. Wenn der Tribut bezahlt wurde, wird OnTributeAPaid aufgerufen, da kannst du dann Truppen erzeugen usw.
Du kannst es auch mehrere Rohstoffe kosten lassen:

cost =  { Gold = 1000, Wood = 2000, Iron = 500 },



Einheiten unverwundbar machen geht ganz einfach:

MakeVulnerable( entityId )--verwundbar
MakeInvulnerable( entityId )--unverwundbar

Du solltest nur aufpassen, dass diese Einheiten auch existieren (ggf. mit IsExisting(entityId) prüfen).
Verwendung: einfach einmalig Aufrufen, von da an ist die Einheit dann nicht mehr auf normale Art verwundbar.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Dieser Beitrag wurde von Play4FuN am 09.09.2020 um 17:38 editiert.

GiGaByTe
#9
10.09.2020 11:46
Beiträge: 19

Probleme :D

Mann möge mir bitte den Fehler nennen!

Bevor ich hier kritisiert werde, das das alles flasch ist und anders muss, denkt bitte dran das das meine erste "richtige map" mit script etc.ist und ich immer noch am lernen bin! ;D

Betreff: Tribut, Selbes Problem wie vorher:

Allerdings "hängt" sich das Briefing nach seiner Vollendung immer auf, bzw. die Kamera fixiert sich auf den NPC, spingt immer wieder zurück zu dem NPC und lässt sich nicht mehr bewegen, Der Soundtrack "BridgeBuilding" hängt sich auf bzw. fängt immer wieder von vorne an und bricht nach einigen Sekunden ab.

Außerdem wollte ich nach einem "neuen" Download Link für den LUA DEBUGGER fragen da der auf der Webseite nicht mehr funktioniert!


function BriefingCaptianFinished()
CreateTributeA() 								
local troopDescription 				= {
		minNumberOfSoldiers 			= 0,
		maxNumberOfSoldiers 			= 8,
		experiencePoints 				= HIGH_EXPERIENCE,
		leaderType 						= Entities.PU_LeaderSword3,
		position 						= GetPosition("support")
	}
	local army 							= {}
	local a1 							= CreateTroop(army,troopDescription)
  local a2 							= CreateTroop(army,troopDescription)
end

function CreateTributeA()
	AddTribute{
		playerId = 1,
		text = "kauf mich",
		cost =  { Gold = 350 },
		Callback = OnTributeAPaid,
	}
end

function OnTributeAPaid()


CreateArmySeven()
armySeven	 						= {}
armySeven	.player 					= 4
armySeven	.id							= 7
armySeven	.strength					= 10
armySeven	.position					= GetPosition("armySeven")
armySeven	.rodeLength					= 50
SetupArmy(armySeven	)
local troopDescription1 			= {
maxNumberOfSoldiers				= 3,
minNumberOfSoldiers				= 0,
experiencePoints 				= HIGH_EXPERIENCE,
leaderType         				= Entities.PU_LeaderHeavyCavalry2
	}
local troopDescription2 			= {
maxNumberOfSoldiers					= 3,
minNumberOfSoldiers					= 0,
experiencePoints 					= HIGH_EXPERIENCE,
leaderType         					= Entities.PU_LeaderCavalry2

	}
 local troopDescription3 			= {
maxNumberOfSoldiers					= 8,
minNumberOfSoldiers					= 0,
experiencePoints 					= HIGH_EXPERIENCE,
leaderType         					= Entities.PU_LeaderBow4
   
  }
	EnlargeArmy(armySeven,troopDescription1)
	EnlargeArmy(armySeven,troopDescription2)
	EnlargeArmy(armySeven,troopDescription3)
        EnlargeArmy(armySeven,troopDescription1)
	EnlargeArmy(armySeven,troopDescription2)
        EnlargeArmy(armySeven,troopDescription3)
	EnlargeArmy(armySeven,troopDescription1)
	EnlargeArmy(armySeven,troopDescription2)
	EnlargeArmy(armySeven,troopDescription1)
	EnlargeArmy(armySeven,troopDescription2)
	
		
Defend(armySeven)
	
  

end

Dieser Beitrag wurde von GiGaByTe am 10.09.2020 um 11:52 editiert.

Play4FuN
#10
10.09.2020 17:14
Beiträge: 704

Schau mal hier, der Link sollte klappen:
http://settlers.pro/debugger.html

Aus deiner Beschreibung heraus vermute ich mal, dass bei deinem NPC bzw. Aufruf vom Briefing was nicht stimmt. Ich sehe auf den ersten Blick keinen groben Fehler hier. Wenn es dann mit dem Debugger klappt, finden wir sicher eine Lösung (ich möchte dieses Tool definitiv nicht missen müssen !)

Unabhängig von dem Problem; die rodeLength wird in "Siedler-cm" angegeben, also häng da mal noch zwei Nullen dran.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#11
10.09.2020 18:48
Beiträge: 1472

Der neuese LuaDebugger ist hier: https://github.com/mcb5637/SettlersLuaDebugger auf meinem GitHub unter releases.

GiGaByTe
#12
11.09.2020 08:02
Beiträge: 19

vielen lieben dank! :D

Vielen lieben dank ihr zwei ... werde mal versuchen mit dem lua debugger
den Fehler zu finden und mich dann hir wieder melden!

GiGaByTe
#13
11.09.2020 08:31
Beiträge: 19

Aha!

Dirket beim erstmal laden meine Map hat Lua Debugger folgenden Fheler Code ausgespuckt... hab halt nur keine Ahnung was er bedeuted!

Fehler:

[string "Map Script"]:84: attempt to call global `CreateTribute1' (a nil value)

Function in Call Stack

globale Create TributeA()
field finished()
global EndBriefing()
global Action_Briefing()

globale Create TributeA()

function CreateTributeA()
(HIER IST DER GELBE PFEIL)-->	AddTribute{
		playerId = 1,
		text = "kauf mich",
		cost =  { Gold = 350 },
		Callback = OnTributeAPaid,
	}
end



field finished() :

function BriefingCaptianFinished()
(HIER IST DER GELBE PFEIL)-->CreateTributeA() 								
local troopDescription 				= {
		minNumberOfSoldiers 			= 0,
		maxNumberOfSoldiers 			= 8,
		experiencePoints 				= HIGH_EXPERIENCE,
		leaderType 						= Entities.PU_LeaderSword3,
		position 						= GetPosition("support")
	}
	local army 							= {}
	local a1 							= CreateTroop(army,troopDescription)
  local a2 							= CreateTroop(army,troopDescription)
end


global EndBriefing() :

EndBriefing = function()

	--	resume all entities

	--	Logic.ResumeAllEntities()

	--	disable sky box

		Display.SetRenderSky(0)

	--	unit handling

		Logic.SetGlobalInvulnerability(0)

	--	allow all minimap battle signals

		GUI.EnableBattleSignals(true)

	--	reactivate Selection

		GUI.ActivateSelectionState()

	--	set default camera mode

		Interface_SetCinematicMode(0)

	--	restore sound

		--	full volume
		Sound.SetVolumeAdjustment(3, briefingState.Effect)
		Sound.SetVolumeAdjustment(5, briefingState.Ambient)
		Music.SetVolumeAdjustment(briefingState.Music)

		--restart default  music
		LocalMusic.SongLength = 0

	--	default gui

		--	disable cutscene key mode
			Input.GameMode()

		--	allow feedback sounds

			GUI.SetFeedbackSoundOutputState(1)

		--	activate in game menu

			XGUIEng.ShowWidget("Normal",1)
			XGUIEng.ShowWidget("3dOnScreenDisplay",1)

		--	deactivate cinematic stuff

			XGUIEng.ShowWidget("Cinematic",0)
			XGUIEng.ShowWidget("Cinematic_Text",0)
			XGUIEng.ShowWidget("Cinematic_Headline",0)
			XGUIEng.ShowWidget("CinematicMiniMapContainer",0)

	--	jump back camera

		if briefingBook[1].restoreCamera == true then

			Camera.ScrollSetLookAt(briefingState.cameraPositionX,briefingState.cameraPositionY)

			end

	--	finishing callback

		if briefingBook[1].finished ~= nil then

(HIER IST DER GELBE PFEIL)-->		briefingBook[1].finished()

			end

	--	stop speech
		Stream.Stop()

		briefingIsActive = false

	--	remove book

		briefingBook = nil

	--	remove job id

		briefingState.jobId = nil

	end



global Action_Briefing() :

Action_Briefing = function()
	-------------------------------------------------------------------------------------------------------------------

		if briefingBook[1][briefingState.page +1] == nil then

	(HIER IST DER GELBE PFEIL)-->		EndBriefing()

			return true

			end

		if briefingBook[1][briefingState.page +1].text ~= nil then

			briefingState.timer = (GetBriefingTextLength(briefingBook[1][briefingState.page +1])) * BRIEFING_TIMER_PER_CHAR

		else

			briefingState.timer = BRIEFING_NEXTPAGE_TIME

			end

		-- allow next page after half second to prevent accidentally canceling
		briefingState.nextPageDelayTime = briefingState.timer - 5

		Briefing(briefingBook[1][briefingState.page +1],briefingState.page == 0)


		briefingState.page = briefingState.page +1

		miniMapResetCounter = 0

		return false

		end

Play4FuN
#14
11.09.2020 10:16
Beiträge: 704

Na siehste, mit dem Debugger weißt du schon mal, wo es hängt

[string "Map Script"]:84: attempt to call global `CreateTribute1' (a nil value)
... bedeutet, es wird versucht eine globale Funktion "CreateTribute1" in Zeile 84 vom "Map Script" aufzurufen, die nicht existiert (a nil value). Wenn du in die Zeile unten beim Debugger einen Funktionsnamen (ohne Klammern) eingibst und Enter drückst, zeigt es dir an, an welcher Stelle im Code diese Funktion definiert ist (und dann kannst wie bei einem Link gleich dorthin springen). Im obigen Fall bzw. wenn es diese Funktion nicht gibt, spuckt er dir stattdessen "nil" aus.
Die restlichen Zeilen, die dir der Debugger anzeigt, sind quasi eine Art "Verlauf" bzw. die Funktionen, die die Funktion aufgerufen hat/haben, welche den Fehler verursacht hat.

Nebenbei... hast du die "AddTribute" Funktion irgendwo im Skript stehen? Wenn nicht - hier:

function AddTribute( _tribute )
    assert( type( _tribute ) == "table", "Tribut muß ein Table sein" )
    assert( type( _tribute.text ) == "string", "Tribut.text muß ein String sein" )
    assert( type( _tribute.cost ) == "table", "Tribut.cost muß ein Table sein" )
    assert( type( _tribute.playerId ) == "number", "Tribut.playerId muß eine Nummer sein" )
    assert( not _tribute.Tribute , "Tribut.Tribute darf nicht vorbelegt sein")
    
    uniqueTributeCounter = uniqueTributeCounter or 1
    _tribute.Tribute = uniqueTributeCounter
    uniqueTributeCounter = uniqueTributeCounter + 1
    
    local tResCost = {}
    for k, v in pairs( _tribute.cost ) do
        assert( ResourceType[k] )
        assert( type( v ) == "number" )
        table.insert( tResCost, ResourceType[k] )
        table.insert( tResCost, v )
    end
    
    Logic.AddTribute( _tribute.playerId, _tribute.Tribute, 0, 0, _tribute.text, unpack( tResCost ) )
    SetupTributePaid( _tribute )
	
    return _tribute.Tribute
end



Ansonten schau mal nach, ob es bei dir die Funktion "CreateTribute1" gibt. Oftmals passiert einem einfach nur ein Schreibfehler...

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Seiten: 1

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

Impressum