Weiterspielen am Ende

» Siedler Map Source Forum » Siedler DEdK Script Forum » Weiterspielen am Ende

Seiten: 1

ArisSchwester
#1
26.03.2010 01:34
Beiträge: 48

Weiterspielen am Ende

Hallo an alle coolen ScrpiterfreaksInnen,

bin noch im Uebungsstatus und hab in meiner Uebungsmap begonnen, einige wichtige Sachen ausprobieren. Wichtig war mir unter anderem das weitersiedeln am Ende (ich selber habe beim Spielen nämlich auch keine Lust, rausgeschmissen zu werden, zu weil ich gewonnen habe).
Habe den Code, der hier veroeffentlicht wurde, reingegeben, hatte am Anfang den Viktory-Job noch drin. Dann passierte nichts mehr, als ein normales Viktory mit rausschmeissen.
Danach hab ich das Viktory rausgestrichen und dann passierte garnichts, d.h. ich konnte zwar weitersiedeln, aber das Aufdecken der Karte etc. plus Briefing gabs trotzdem nicht. Natürlich auch kein Viktory.
Ich poste mal das Ganze, wie es jetzt aussieht (ohne Viktory). Was mache ich falsch? Lua ist ok.

--------------------------------------------------------------------------------
-- MapName: XXX
--
-- Author: XXX
--
--------------------------------------------------------------------------------

-- Include main function
Script.Load( Folders.MapTools.."Main.lua" )
IncludeGlobals("MapEditorTools"

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to initialize the diplomacy states
function InitDiplomacy()

SetHostile(1,2)
SetPlayerName(2, "Kerberos"

end


--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to init all resources for player(s)
function InitResources()

AddGold (1000000)
AddSulfur(1000000)
AddIron (1000000)
AddWood (1000000)
AddStone (1000000)
AddClay (1000000)
AddGold(2,1000) -- for player 2...

end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game is loaded, setup your weather gfx
-- sets here
function InitWeatherGfxSets()
SetupNormalWeatherGfxSet()
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start you should setup your weather periods here
function InitWeather()
AddPeriodicSummer(10)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start and after save game to initialize player colors
function InitPlayerColorMapping()
end

-- die "Erste Map Aktion", die Map startet
------------------------------------------------------------------------------
function FirstMapAction()

CreatePlayer2()
CreateArmyOne()
CreatePreludeBriefing()
CreateNpcs()

end

---------------------------------------------------------------------------------------------
-- hier jetzt eine lokale Funktion um den Computerspieler zu kreiieren
-- !!! Es muß mindestens ein Hauptgebäude des feindlichens Spielers auf der Map sein!!!
------------------------------------------------------------------------------
function CreatePlayer2()

player2 = {}
player2.id = 2
local description = {}

description.serfLimit = 10
SetupPlayerAi(player2.id,description)

end

---------------------------------------------------------------------------------------------
-- creates an army, controlled by the AI
------------------------------------------------------------------------------
function CreateArmyOne()

armyOne = {}
armyOne.player = 2
armyOne.id = 1
armyOne.strength = 8
armyOne.position = GetPosition("armyOne"
armyOne.rodeLength = 4000
SetupArmy(armyOne)


local troopDescription = {}

troopDescription.maxNumberOfSoldiers = 4
troopDescription.minNumberOfSoldiers = 0
troopDescription.experiencePoints = LOW_EXPERIENCE
troopDescription.leaderType = Entities.PU_LeaderHeavyCavalry1

for i = 1,8,1 do
EnlargeArmy(armyOne,troopDescription)

end
StartSimpleJob("ControlArmyOne"

end

---------------------------------------------------------------------------------------------
-- Schaffe eine zweite Armee
------------------------------------------------------------------------------
function CreateArmyTwo()

armyTwo = {}

armyTwo.player = 2
armyTwo.id = 2
armyTwo.strength = 8
armyTwo.position = GetPosition("armyOne"
armyTwo.rodeLength = 4000

SetupArmy(armyTwo)
local troopDescription = {

maxNumberOfSoldiers = 4,
minNumberOfSoldiers = 0,
experiencePoints = LOW_EXPERIENCE,
leaderType = Entities.PU_LeaderHeavyCavalry1
}

EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)
EnlargeArmy(armyTwo,troopDescription)

StartSimpleJob("ControlArmyTwo"

end

---------------------------------------------------------------------------------------------
-- Funktion "VictoryJob"
------------------------------------------------------------------------------
function VictoryJob()

if IsDead("player2" then

ResolveBriefing(PreludeBriefingDestroyHQ)
StartSimpleJob ("AuswahlEndeJaNein()"

return true

end

end

---------------------------------------------------------------------------------------------
-- Job "ControlArmyOne"
------------------------------------------------------------------------------
function ControlArmyOne()

if IsDead(armyOne) then

CreateArmyTwo()
return true

else

Defend(armyOne)

end

end

---------------------------------------------------------------------------------------------
-- Job "ControlArmyTwo"
------------------------------------------------------------------------------
function ControlArmyTwo()

Advance(armyTwo)

end

---------------------------------------------------------------------------------------------
-- Briefing "Prelude"
------------------------------------------------------------------------------
function CreatePreludeBriefing()

PreludeBriefing = {}
PreludeBriefing.finished = PreludeBriefingFinished

page = 0
-- page 1
page = page + 1

PreludeBriefing[page] = {}

PreludeBriefing[page].title = "Hallo Testerin"
PreludeBriefing[page].text = "Ich versuche hier zu ueben. Mal sehen, ob es klappt"

PreludeBriefing[page].npc = {}
PreludeBriefing[page].npc.id = GetEntityId("Pilgrim"
PreludeBriefing[page].npc.isObserved= true
PreludeBriefing[page].dialogCamera = true
PreludeBriefingShowPilgrim = PreludeBriefing[page]

-- page 2

page = page + 1

PreludeBriefing[page] = {}
PreludeBriefing[page].title = "Ich bin Pilgrim, die meisten sind nicht nett zu mir"
PreludeBriefing[page].text = "Hier siehst Du die Armee, die zerstoert werden muß"

PreludeBriefing[page].position = GetPosition("armyOne"
PreludeBriefing[page].explore = BRIEFING_EXPLORATION_RANGE

PreludeBriefingShowArmy = PreludeBriefing[page]

-- page 3

page = page + 1

PreludeBriefing[page] = {}
PreludeBriefing[page].title = "Das Ziel ist . . ."
PreludeBriefing[page].text = "die Zerstoerung der Schwarzen Festung! Wie langweilig, gaehn."

PreludeBriefing[page].position = GetPosition("player2"
PreludeBriefing[page].explore = BRIEFING_EXPLORATION_RANGE
PreludeBriefing[page].marker = ANIMATED_MARKER

PreludeBriefing[page].quest = {}
PreludeBriefing[page].quest.id = 1
PreludeBriefing[page].quest.type = MAINQUEST_OPEN
PreludeBriefing[page].quest.title = "Zerstoere die Schwarze Festung"
PreludeBriefing[page].quest.text = "Was Besseres kommt spaeter, Pilgrim!"

PreludeBriefingDestroyHQ = PreludeBriefing[page]

-- page 4

page = page + 1

PreludeBriefing[page] = {}
PreludeBriefing[page].title = MISSION_OBJECTIVES
PreludeBriefing[page].text = "Zerstoere die Schwarze Festung und achte auf die Verteidiger!"

PreludeBriefing[page].position = GetPosition("Pilgrim"
StartBriefing(PreludeBriefing)

end

---------------------------------------------------------------------------------------------
-- BriefingFinished "Prelude"
------------------------------------------------------------------------------
function PreludeBriefingFinished()

ResolveBriefing(PreludeBriefingShowPilgrim)
ResolveBriefing(PreludeBriefingShowArmy)

end

------------------------------------------------------------------------------
-- Creates NPCs
------------------------------------------------------------------------------
function CreateNpcs()

-- Create briefing for NPC

NpcBriefing = {}
NpcBriefing.restoreCamera = true

page = 0

-- Page #1

page = page + 1

NpcBriefing[page] = {}

NpcBriefing[page].title = "NPC"
NpcBriefing[page].text = "Seid gewarnt, ich habe gehört, hier sind zwei Truppen, die besiegt werden müssen.."

NpcBriefing[page].position = GetPosition("npc"
NpcBriefing[page].dialogCamera = true


-- Rufe das Table für das NPC Briefing auf

local Npc = {}
Npc.name = "npc"
Npc.briefing = NpcBriefing
Npc.vanishPos = "npcVanishPos"
Npc.heroName = "Dario"
Npc.wrongHeroMessage = "Tut mir leid, ich rede nur mit Dario."

-- Schaffe den NPC
CreateNPC(Npc)
end

function AuswahlEndeJaNein()

Camera.FollowEntity(held("lager")
local briefing = {}
BRIEFING_ZOOMDISTANCE = 3000
BRIEFING_ZOOMANGLE = 35
local AP, ASP = AddPages(briefing)
ASP("lager","Mentor"," "..
"Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt."
local choiceEinsatzNeu = AP {
mc = {
title = "Das Ende entscheiden",
text = "Der Mentor erwartet eine Entscheidung",
firstText = "JA ICH WILL ALLES ERKUNDEN!",
secondText = "NEIN SCHLUSS JETZT",
firstSelected = 3,
secondSelected = 5
}
}
AP {text = "Mentor "..
"@cr Ihr koennt nun entscheiden, wie lange Ihr noch spielen wollt. "..
"@cr Wenn Ihr genug habt, fuehrt Euren Held zum Lagerfeuer."}
AP (nil);
AP {text = "Mentor "..
"@cr Gut, dann fuehrt Euren Held zum Lagerfeuer."}
briefing.finished
= function()
if GetSelectedBriefingMCButton( choiceEinsatzNeu ) == 1 then
Tools.ExploreArea( 1, -1, 900 ) --deckt als Dank die Map auf.
HeldAmLagerf()
return true
else
HeldAmLagerf()
end
end
StartBriefing(briefing);
end

function HeldAmLagerf()

local beiLf = {

EntityName = "held",
TargetName = "Lagerf",
Distance = 600,
Callback = function()
Victory()
end
}
SetupExpedition(beiLf)
end

ArisSchwester
#2
26.03.2010 01:44
Beiträge: 48

den Code mit Viktory

.....das andere wie vorher
function FirstMapAction()

CreatePlayer2()
CreateArmyOne()
CreatePreludeBriefing()
StartSimpleJob("VictoryJob"
CreateNpcs()

end
.....das andere wie vorher
function VictoryJob()

if IsDead("player2" then

ResolveBriefing(PreludeBriefingDestroyHQ)

Victory()

return true

end

end
.... das andere wie vorher
function AuswahlEndeJaNein()

Camera.FollowEntity(held("lager")
local briefing = {}
BRIEFING_ZOOMDISTANCE = 3000
BRIEFING_ZOOMANGLE = 35
local AP, ASP = AddPages(briefing)
ASP("lager","Mentor"," "..
"Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt."
local choiceEinsatzNeu = AP {
mc = {
title = "Das Ende entscheiden",
text = "Der Mentor erwartet eine Entscheidung",
firstText = "JA ICH WILL ALLES ERKUNDEN!",
secondText = "NEIN SCHLUSS JETZT",
firstSelected = 3,
secondSelected = 5
}
}
AP {text = "Mentor "..
"@cr Ihr koennt nun entscheiden, wie lange Ihr noch spielen wollt. "..
"@cr Wenn Ihr genug habt, fuehrt Euren Held zum Lagerfeuer."}
AP (nil);
AP {text = "Mentor "..
"@cr Gut, dann fuehrt Euren Held zum Lagerfeuer."}
briefing.finished
= function()
if GetSelectedBriefingMCButton( choiceEinsatzNeu ) == 1 then
Tools.ExploreArea( 1, -1, 900 ) --deckt als Dank die Map auf.
HeldAmLagerf()
return true
else
HeldAmLagerf()
end
end
StartBriefing(briefing);
end

function HeldAmLagerf()

local beiLf = {

EntityName = "held",
TargetName = "Lagerf",
Distance = 600,
Callback = function()
Victory()
end
}
SetupExpedition(beiLf)
end

ArisSchwester
#3
26.03.2010 02:08
Beiträge: 48

Grinsegesicht

Achso, das Grinsegesicht ist natuerlich nicht im Script, das ist ne normale Klammer zu.
Die benoetigten Entites sind auf der Map vorhanden.

aCid
#4
26.03.2010 03:03
Beiträge: 275

secondText = "NEIN SCHLUSS JETZT",
firstSelected = 3,
secondSelected = 5
}
}
AP {text = "Mentor "..
"@cr Ihr koennt nun entscheiden, wie lange Ihr noch spielen wollt. "..
"@cr Wenn Ihr genug habt, fuehrt Euren Held zum Lagerfeuer."}
AP (nil);
AP {text = "Mentor "..
"@cr Gut, dann fuehrt Euren Held zum Lagerfeuer."}
briefing.finished
= function()




das mal als ausschnitt. rein von der logik fehlt ein AP(nil)
also so

secondText = "NEIN SCHLUSS JETZT",
firstSelected = 3,
secondSelected = 5
}
AP (nil);
}
AP {text = "Mentor "..
"@cr Ihr koennt nun entscheiden, wie lange Ihr noch spielen wollt. "..
"@cr Wenn Ihr genug habt, fuehrt Euren Held zum Lagerfeuer."}
AP (nil);
AP {text = "Mentor "..
"@cr Gut, dann fuehrt Euren Held zum Lagerfeuer."}
briefing.finished
= function()



____________________
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

kingsia
#5
26.03.2010 05:34
Beiträge: 750

@aCid
Du hast eine Briefingzeile übersehen.
Diese extra AP(nil) ist nicht nötig.

@ ArisSchwester
Weil du beide die "alte" und "neue" Briefingform benutzt, frag ich mich ob du die beiden benötigten Comfortfunktion im Skript hast.
Ohne die kann dein Auswahlbriefing nicht funktionieren.

Gruss
Kingsia

function CreateShortPage( _entity, _title, _text, _dialog, _explore) 
    local page = {
        title = _title,
        text = _text,
        position = GetPosition( _entity ),
		action = function ()Display.SetRenderFogOfWar(0) end
    };
    if _dialog then 
        if type(_dialog) == "boolean" then
            page.dialogCamera = true; 
        elseif type(_dialog) == "number" then
            page.explore = _dialog;
        end
    end
    if _explore then 
        if type(_explore) == "boolean" then
            page.dialogCamera = true; 
        elseif type(_explore) == "number" then
            page.explore = _explore;
        end
    end
    return page;
end
function AddPages( _briefing )
    local AP = function(_page) table.insert(_briefing, _page); return _page; end
    local ASP = function(_entity, _title, _text, _dialog, _explore) return AP(CreateShortPage(_entity, _title, _text, _dialog, _explore)); end
    return AP, ASP;
end

ArisSchwester
#6
26.03.2010 06:10
Beiträge: 48

Oh danke an Euch beide

@aCid und @kinksia
Nicht zu fassen, dass um diese Zeit noch (oder schon) jemand antwortet. Vielen Dank aCid und vielen Dank kingsia, ich werd es gleich mal ausprobieren. Du hast natürlich recht, ich hab die Comfortfunktionen nicht im Script. Sage Bescheid, wenn es geklappt hat.
Gruss
ArisSchwester
(die alle hoffentlich bald mit einer ersten Map begluecken wird)

Mordred
#7
26.03.2010 08:20
Beiträge: 939

Du kannst dir ja auch ein eigenes Ende machen
Da hats quasi unbegrenzt viele Lösungen: Klick den an oder den, drücke die 1 oder die 2, bringe den oder den um, warte den Countdown ab oder net, ...
Schön, dass noch jemand Maps macht
Mordred

kingsia
#8
26.03.2010 17:24
Beiträge: 750

Zitat von ArisSchwester:
@aCid und @kinksia
Nicht zu fassen, dass um diese Zeit noch (oder schon) jemand antwortet.


Bei aCid war es vielleicht noch aber bei mir war es schon. Ich muss wegen Arbeit früh aufstehen und bei meine erste Kaffee schaue ich hier rein ob ich ein Skriptkollegin(nen) sofortige "erste Hilfe" leisten muss.

Zitat von ArisSchwester:

(die alle hoffentlich bald mit einer ersten Map begluecken wird)


Ich warte sehnsüchtig darauf aber bitte nicht voreilig die Karte veröffentlichen.

Hast du ein Testerteam parat und in die Startlöcher ?

Gruss
Kingsia

ArisSchwester
#9
26.03.2010 21:03
Beiträge: 48

Blutige Anfängerin

@mordred
Bin noch blutige Anfaengerin und muss noch gaanz viel testen und lesen, bis ich mich auf die Bühne wage . . .
@kingsia
Du hast natürlich Recht, ich habe übrigens das obige Problem immer noch nicht gelöst, aber ich knobel noch und lerne dabei. (Hatte das, was Du geschrieben, reinkopiert und dann nochmals testlaufen lassen. Wieder kann ich zwar weiterspielen aber weiter passiert nix.) Beim Herausfinden des Fehlers lernt man ja auch.
Uebrigens, ich hoffe, Du hast nichts dagegen, wenn ich Deine Idee, die Realitaet in die Story reinlaufen lasse, weiterentwickel. Es macht mir unheimlich Spaß, als ArisSchwester dort aufzutauchen. Und Pilgrim weint sich bei mir aus, weil sie ihn alle immer so schlecht behandeln. Ausserdem taucht noch Alice Schwarzer auf und regt sich ueber die Darstellung der Frauenrolle in DedK auf: Entweder Hexe oder Barbie, sonst gibts nichts weiter. Keine einfache Baeurerin, keine Wanderin, nur sexy Prinzessinnen, sexy böse Gräfinnen oder genauso barbihaft Ari, auch wenn sie noch am normalsten aussieht.
Also: Ideen sind genug da, die Umsetzung dauert noch. Habe mitnichten ein Testerteam, das rufe ich erst zusammen, wenn ich in ein paar Dingen fit bin. Zum Beispiel muss ich das obige Problem erstmal loesen. Keine Angst also, es dauert noch.
Finde ich ja lieb, dass Du vor der Arbeit an uns denkst. Da macht es Spass, weiterzuknobeln, damit man endlich auch auf die Buehne gehen kann.
Obwohl kingsia, Dein erster Auftritt (und auch Dein zweiter) waren so genial, damit kann sich so schnell keine/keiner messen.

Herzliche Gruesse
heute ist Freitag und beim schönen Krimi und was zu knabbern laesst sich gemuetlich weiterknobel.

Siedler_Team
#10
27.03.2010 00:15
Beiträge: 847

Zitat von ArisSchwester:
...ich habe übrigens das obige Problem immer noch nicht gelöst, aber ich knobel noch und lerne dabei. (Hatte das, was Du geschrieben, reinkopiert und dann nochmals testlaufen lassen. Wieder kann ich zwar weiterspielen aber weiter passiert nix.) Beim Herausfinden des Fehlers lernt man ja auch.


Hi ArisSchwester,
ich denke, das Problem, dass kein Victory() nach der Auswahl "Weiterspielen" kommen kann, liegt hier:

function VictoryJob()
   if IsDead("player2") then 
   ResolveBriefing(PreludeBriefingDestroyHQ)
   StartSimpleJob ("AuswahlEndeJaNein()" --<-- hier
   return true
   end
end



1.) Darfst Du AuswahlEndeJaNein() NICHT als Job starten, sondern als ganz normale Funktion. Wie ein ganz normales Briefing.

Die obige Funktion also dann so:

function VictoryJob()
   if IsDead("player2") then
   ResolveBriefing(PreludeBriefingDestroyHQ)
   AuswahlEndeJaNein() --<-- so
   return true
   end
end



Davon abgesehen hattest Du Dich bei dem Job verschrieben.
Wenn man einen Job startet (...was hier aber nicht sein darf) dann hätte der Aufruf so lauten müssen:

   StartSimpleJob("AuswahlEndeJaNein")


In dem Auswahlbriefing selbst war noch ein logic-Fehler.

Muster für AuswahlEndeJaNein():
Aufruf:

AuswahlEndeJaNein()


Die Funktion:

function AuswahlEndeJaNein()
   Camera.FollowEntity(GetEntityId("held"))  
   local briefing = {noEscape = true}  
   BRIEFING_TIMER_PER_CHAR = 0.8	
   BRIEFING_ZOOMDISTANCE = 2500 
   BRIEFING_ZOOMANGLE = 25 
   local AP, ASP = AddPages(briefing) 
   ASP("lager","Mentor"," "..  
	   "Ihr könnt nun entscheiden, "..
       "@cr ob Ihr noch weiterspielen wollt.", true)
      local choiceEinsatzNeu = AP { 
      mc = {
      title = "Das Ende entscheiden", 
      text = "Der Mentor erwartet eine Entscheidung.", 
      firstText = "ICH MÖCHTE WEITERSPIELEN", 
      secondText = "HIER SOLL SCHLUSS SEIN", 
      firstSelected = 3, 
      secondSelected = 5  
      }
      } 
      AP {text = "Mentor "..
	"@cr Vielen Dank! "..
        "@cr Entscheidet selbst, wann Schluss sein soll. ".. 
        "@cr Wenn Ihr genug habt, fuehrt Euren Held zum Lagerfeuer. ".. 
	"@cr Die Karte wird nun aufgedeckt!"}
      AP (nil);
      AP {text = "Mentor" "..
        "@cr Tja, des Menschen Wille ist sein Himmelreich. "..
	"@cr Dann ist eben jetzt Schluss! Vielen Dank!"} 
	briefing.finished = function()
	if GetSelectedBriefingMCButton( choiceEinsatzNeu ) == 1 then 
	Tools.ExploreArea( 1, -1, 900 )
	HeldAmLagerf()
	else
	Victory()
        end
    end
   StartBriefing(briefing); 
end


Erklärung:
Auch wenn der Spieler sich für "HIER SOLL SCHLUSS SEIN" entscheidet, sollte er mit einer Siegmeldung belohnt werden. Daher hinter else Victory()

Entscheidet er sich für "Weiterspielen", wird aufgedeckt und die Funktion HeldAmLagerf() aufgerufen.

Erreicht der Held per:

function HeldAmLagerf()
   local beiLf = {
   EntityName = "held",
   TargetName = "Lagerf",
   Distance = 600,
   Callback = function()
   Victory() 
   end
   }
   SetupExpedition(beiLf) 
end 


...die Entity "LagerF" auf eine Distanz von 600Scm, wird gleichfalls Victory() ausgelöst.

Das Auswahlbriefing ist wie eine Weiche zu verstehen.
Stellt man die Weiche nach rechts, fährt der Zug nach rechts und was am linken Schienenstrang passiert, bekommen die Fahrgäste nicht mit.

Anders herum genauso:
Stellt man die Weiche nach links, fährt der Zug nach links und was am rechten Schienenstrang passiert, bekommen die Fahrgäste nicht mit.

Wie kingsia bereits treffend schrieb, benötigst Du für obiges Briefing die function CreateShortPage und die function AddPages.

Ich hoffe mit diesem kleinen Beispiel wird das etwas klarer, was bei einem mcBriefing passiert.

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

Dieser Beitrag wurde von Siedler_Team am 27.03.2010 um 00:40 editiert.

Siedler_Team
#11
27.03.2010 00:18
Beiträge: 847

...doppelpost! Gelöscht!

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

ArisSchwester
#12
27.03.2010 07:32
Beiträge: 48

Dank an das Siedler-Team, leider Problem mit true

Hallo liebes Siedler-Team,

vielen Dank erstmal für Eure Mühe, das war gut erklärt. Leider gibt ein Problem mit den Zeilen:

ASP("lager","Mentor"," "..
"Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt.",true)-------HIER

LuaEdit meckert bei true, auch wenn ich es so ändere . . .


ASP("lager","Mentor"," "..
"Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt."--------------------und HIER
true --------------------HIER
local choiceEinsatzNeu = AP {
mc = {
title = "Das Ende entscheiden",
text = "Der Mentor erwartet eine Entscheidung",
firstText = "JA ICH WILL ALLES ERKUNDEN!",
secondText = "NEIN SCHLUSS JETZT",

.....usw.

Bin also weiter am knobeln, die vorher korrigierte Stelle ist ok., das mit der falschen Synthax beim Job hatte ich selber schon geaendert, das andere habe ich voll begriffen . . . und entsprechend geaendert.

Wie war es doch bei den alten Griechen . . . oder wem auch immer. Wenn man ein Problem geloest hat, kommen zwei naechste ...

Ich melde mich mal, wenn ich alles geloest habe, verdammich!!! (fussstampf!!)

Herzliche Gruesse
ArisSchwester

Siedler_Team
#13
27.03.2010 08:36
Beiträge: 847

Zitat von ArisSchwester:

Leider gibt ein Problem mit den Zeilen:


ASP("lager","Mentor"," "..
 "Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt.", true)


Hi ArisSchwester,
dann liegt es an etwas anderem, was wir bisher übersehen haben. Da der debugger bei Dir und dieser Zeile meckert und bei mir nicht, ist davon auszugehen, dass wir beide zwei verschiedene Comfort-Funktionen für die Briefinggeschichte verwenden.

1. Schritt:
obige Zeile ändern zu:

ASP("lager","Mentor"," "..
 "Ihr könnt nun entscheiden, ob Ihr noch weiterspielen wollt.")


2. Sollte das nicht helfen, gehts ins Detail.
Mein Angebot siehe Private Nachricht.

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

kingsia
#14
27.03.2010 16:06
Beiträge: 750

Hallo ArisSchwester,

Welche Lua Editor benutzt du?
Vielleicht meckert es nicht wegen true aber wegen den umlaut.
Vorher hattest du "koentt" und jetzt steht "könnt".

Um Umlaute im Briefings angezeigt zu bekommen brauchst du noch ein Komfortfunktion.

Gruss
Kingsia

Siedler_Team
#15
27.03.2010 18:14
Beiträge: 847

Zitat von kingsia:
Hallo ArisSchwester,
Um Umlaute im Briefings angezeigt zu bekommen brauchst du noch ein Komfortfunktion.


Jupp! Ganz vergessen!
Damit Umlaute verarbeitet werden können, muss das hier:

ActivateBriefingsExpansion()


...in die FMA

Die Comfortfunktion dazu:

function ActivateBriefingsExpansion()
    if not unpack{true} then 
        local unpack2;
        unpack2 = function( _table, i )
                            i = i or 1;
                            assert(type(_table) == "table");
                            if i <= table.getn(_table) then
                                return _table[i], unpack2(_table, i);
                            end
                        end
        unpack = unpack2;
    end
    
    Briefing_ExtraOrig = Briefing_Extra;
    
    Briefing_Extra = function( _v1, _v2 )
                         for i = 1, 2 do
                             local theButton = "CinematicMC_Button" .. i;
                             XGUIEng.DisableButton(theButton, 1);
                             XGUIEng.DisableButton(theButton, 0);
                         end
                         
                         if _v1.action then
                             assert( type(_v1.action) == "function" );
                             if type(_v1.parameters) == "table" then 
                                 _v1.action(unpack(_v1.parameters));
                             else
                                 _v1.action(_v1.parameters);
                             end
                         end
                         
                         Briefing_ExtraOrig( _v1, _v2 );
                     end;
    
    GameCallback_EscapeOrig = GameCallback_Escape;
    StartBriefingOrig = StartBriefing;
    EndBriefingOrig = EndBriefing;
    MessageOrig = Message;
    CreateNPCOrig = CreateNPC;
    
    StartBriefing = function(_briefing)
                        assert(type(_briefing) == "table");
                        if _briefing.noEscape then
                            GameCallback_Escape = function() end;
                            briefingState.noEscape = true;
                        end
                        
                        StartBriefingOrig(Umlaute(_briefing));
                    end
    
    EndBriefing = function()
                      if briefingState.noEscape then
                          GameCallback_Escape = GameCallback_EscapeOrig;
                          briefingState.noEscape = nil;
                      end
                      
                      EndBriefingOrig();
                  end;
    
    Message = function(_text)
                  MessageOrig(Umlaute(tostring(_text)));
              end;
    
    CreateNPC = function(_npc)
                    CreateNPCOrig(Umlaute(_npc));
                end;
    
    Umlaute = function(_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;
end


...in die Abteilung Comfort Funktionen.

Die braucht man immer und die tut auch nicht weh.
Das true an der entsprechenden Stelle, wo bei Dir gemeckert wurde, war nicht ausschlaggebend. Es war der Umlaut ö in könnt.
Gut erkannt kingsia!

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

Dieser Beitrag wurde von Siedler_Team am 27.03.2010 um 18:33 editiert.

Mordred
#16
27.03.2010 20:08
Beiträge: 939

@arisschwester:
Hilfe findest du hier reichlich!
Aber bitte: (damit die anderen dir besser helfen können )

[quote]
function FirstMapAction()
-- Deine Skripte und funktionen
end
[/quote]

oder noch besser:

[code]
function FirstMapAction()
-- Deine Skripte und funktionen
end
...

[/code]

Sieht dann so aus: :) (keine Smileys mehr!) 


Mordred

ArisSchwester
#17
27.03.2010 22:44
Beiträge: 48

zwei Fehler erkannt, jetzt teste ich

Lieber Mordred, lieber kingsia, liebes Siedler-Team,

nehme an, es sind die zwei Fehler, das ö und die Comfort-Funktion Briefing. Bin ueberwaeltig von Euren gaaaaanz lieben Hilfen, dadurch konnte ich noch garnicht das Geaenderte testen.
Ich teste jetzt und sage sofort Bescheid, wenn es klappt. (Dauert ungefaehr eine halbe Stunde.)
Habe flodder meine Scripte geschickt, weitere Fehler wird er merken.

Vieeelen lieeben Dank
Gruss
ArisSchwester

ArisSchwester
#18
28.03.2010 00:36
Beiträge: 48

HURRAAAAAA, es klappt

Liebe freundlichen Ratgeber und Helfer,

Ihr wart ueberwaeltigend und beide Versionen klappen. Flodder hat alles. Im Prinzip war es das ö und fehlende Comfortfunktionen.
Was lange waert, wird endlich gut!!!

Jetzt faengt die Arbeit an!

Ich freue mich und bedanke mich nochmal

Gruss
ArisSchwester

Seiten: 1

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

Impressum