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