Mein erster Skript funktioniert nicht!

» Siedler Map Source Forum » Siedler DEdK Script Forum » Mein erster Skript funktioniert nicht!

Seiten: 1 2 Nächste Seite

Nils_1997
#1
17.09.2011 15:35
Beiträge: 13

Mein erster Skript funktioniert nicht!

Ich habe einen Skript nach einer Anleitung erstellt doch er funktioniert nicht!!
Ich weis nicht woran es liegen könnte!


-- MapName: tutorial_EinfacheMission
--
-- Author: NilsChaloupka
--
--------------------------------------------------------------------------------

-- 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)
SetNeutral(1,4)
SetNeutral(2,4)
end


--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called from main script to init all resources for player(s)
function InitResources()
-- set some resources
AddGold (300)
AddSulfur(0)
AddIron (150)
AddWood (1500)
AddStone (1500)
AddClay (1500)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
ForbildTechnologie(GT_Binocular,1)
ForbildTechnologie(GT_Trading,1)
ForbildTechnologie(GT_Alloying,1)
ForbildTechnologie(GT_Tactics,1)
ForbildTechnologie(GT_GearWheel,1)
end

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

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

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

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start after all initialization is done

function FirstMapAction()
createBriefingMiliz()
createBriefingSam()
createplayer2()
createArmyOne()
crateArmyTwo()
staratSimpleJob("VictoryJob"
createNPC(npcMiliz)
createNPC(npcSam)

createChest()

end

function createChest()

CreateRandomGoldChest(GetPosition("chest")
CreateCestOpner("dario"
StartChestQuest()

end

function createBriefingMiliz()
BriefingMiliz = {}
BriefingMiliz.restoreCamera = true
-- call on end of briefing
BriefingMiliz.finished = BriefingMilizFinished

local page = 0

-- Page #1

page = page+ 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Hallo Sir schön euch zu sehen."
BriefingMiliz[page].position = GetPosition("Miliz"
BriefingMiliz[page].dialogCamera = true

--Page #2

page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Wie ihr seht Sir, sind schwere zeiten aufgebrochen"
BriefingMiliz[page].positon = GetPosition("rubble"
BreifingMiliz[page].explore = Briefing_Exploration_Range

-- page #3

page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "In der Nähe soll ein Banditenturm sein aber wir konnten bisher nicht weiter als bis zum Lager der Banditen fordringen!"
BriefingMiliz[page].position = GetPosition("Camp"
BriefingMiliz[page].explore = Briefing_Exploration_Range

-- Page #4

page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Aber keine Angst Sir, ich habe einige Truppen zusammen gestellt die euch helfen wird.!"
BriefingMiliz[page].position = GetPosition("support"
function crateNPC(npcMiliz)

--crerate npc

createNPC(npcMiliz)

-- setup table for npc

local npcMiliz = {}
npcMiliz.name = "Milliz"
npcMiliz.briefing = BriefingMiliz

end

function BriefingMilizFinished()

local troopDescription = {
minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYHIGH_EXPERIENCE,
leaderType = Entities.PU_LeaderSword3
position =GetPosition("support"
}

local army
local a1
local a2

end

function create BriefingSam()

BreigingSam = {}
BriefingSam.restoreCamera = true
-- call on endof briefing
BreifingSam.finished = BriefingSamFinished

locale page = 0

-- pade #1

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Servus Sir mein Name ist Sam. Möchten Sie eine Geschichte von mir hören?"
briefingSam[page].dialogCamera = true
briefingSam[page].position = GetPosition("Sam"

-- page #2

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Dieses Haus ist das Leid von diesen Leuten. Sie wurden in disem Haus gequält und gefoltert. Dieser Mann der vor dieser Hütte steht würde ich nicht ansprechen!, er entfürt euch in seine Hütte, dort erlebt ihr etwas grauenvolles. Ich war selbst schon in der Hütte, ich hab mich hinein geschlichen als der Mann ein neues Opfer hatte. Ich habe geshen wie er sie gequält hat, ich bin heute noch nicht drüber hinweg. Diese Arme Frau!"
briefingSam[page].position = GetPosition("Gosthouse"
briefingSam[page].explore = BRIEFING_EXPLORATION_RANGE

-- page #3

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Nachdem er sie gequält hatte, hatte er sie in diese Höhle geschleppt und sie getötet, dass niemand erfährt, was passiert ist."
briefingSam[page].position = "cave"
briefingSam[page].explore = BRIEFING_EXPLORATION_RANGE

-- page #4

page = page +1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Meine Freund wollen euch helfen, das Böse entlich zu vernichten!"
briefingSam[page].position = GetPosition("Friends"
function crateNPC(npcSam)

-- create npc

createNPC(npcSam)

-- setup table for npc

local npcSam = {}
npcSam.name = "Sam"
npcSam.briefing = BriefingSam

end

function BriefingSamFinished()

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 5,
experiencePoints = VERYHIG_EXPERINCE,
leaderType = Entities.CU_BanditlLeaderBow1
position = GetPosition("Friends"
}

local army = {}
local a1 = CreateTroop(army,troopDescrption)
local a2 = CreateTroop(army,troopDescrption)

end

function createPlayer2()

player2 = {}
player2.id = 2

local description = {serflimit = 10}

SetupPlayerAI(player2.id,derscription

end

function CreateArmyTwo

armyTwo = {}

armyTwo.player = 2
armyTwo.id = 1
armyTwo.strength = 3
armyTwo.position = GetPosition("ArmyTwo"
armyTwo.rodeLegth = 500

SetupArmy(armyTwo)

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYLOW_EXPERIENCE,
}
troopDescription.leaderType = Entities.CU_BanditLeaderSword1

EnlareArmy(ArmyTwo,troopDescription)
EnlareArmy(ArmyTwo,troopDescription)
EnlareArmy(ArmyTwo,troopDescription)

Defend(ArmyTwo)

end

function CreateArmyOne()

amyOne = {}

armyOne.player = 2
armyOne.id = 1
armyOne.strength = 7
armyOne.position = GetPosition("ArmyOne"
armyOne.rodeLength = 500

SetupArmy(armyOne)

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYLOW_EXPERIENCE,
}

troopDescription.leaderType = Entities.CU_BanditLeaderSword1

EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)

Defend(ArmyOne)

end

function VictoryJop()

if IsDead("payer2" then
Victory()
end
end

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

FastBow
#2
17.09.2011 16:08
Beiträge: 353

Ganz einfach ! Du hast sehr viele Schreibfehler!
Und bereits ein Schreibfehler reicht für einen Syntaxerror!

Natürlich könnte ich den Skript jetzt für dich durchgehen und berichtigen aber dann lernst du ja nix

Edit: naja ich machs mal und zeig dir ein paar Fehler auf

Flodder
#3
17.09.2011 16:21
Beiträge: 2608

Hi Nils_1997,
abgesehen davon, dass man codes in dieses Forum immer in:


Am Anfang [ code ] und am Ende [ /code ]
...ohne Leerzeichen vor und hinter den eckigen Klammern!


...schreiben sollte, weil sonst smily`s entstehen können (...wie jetzt bei Dir) sind in dem code jede Menge Schreibfehler drin.

Setze bitte den gesamten Code noch mal in die o.a. eckigen code-klammern,

Zu den besagten Schreibfehlern:
So gibt es zum Beispiel nicht...

crateArmyTwo()


Es muss:

createArmyTwo()


...lauten.
Oder

staratSimpleJob("VictoryJob")


Das gibt es auch nicht!
Muss:

StartSimpleJob("VictoryJob")


...lauten!
Und so geht das leider laufend weiter.
Lua verzeit Dir keine Fehler und Du musst da peinlichst genau sein.

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 17.09.2011 um 16:29 editiert.

Nils_1997
#4
17.09.2011 18:47
Beiträge: 13

Ich hab das alles nach einer Anleitung gemacht es ist alles so darin gestanden

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Flodder
#5
17.09.2011 19:44
Beiträge: 2608

Zitat von Nils_1997:
Ich hab das alles nach einer Anleitung gemacht es ist alles so darin gestanden


Von welcher Anleitung sprichst Du?
Vom Tutorial, was ab dem Addon "Nebelreich" und/oder "Legenden" als PDF-Datei beigefügt ist, oder von was?

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

totalwarANGEL
#6
17.09.2011 21:33
Beiträge: 2123

Zitat von Nils_1997:
Ich hab das alles nach einer Anleitung gemacht es ist alles so darin gestanden


Das Tutorial mit translate.google übersetzt?

Bist du 1997 geboren? Bist du etwa erst 14?

____________________
Die Welt ist arschlochförmig und wir leben in der Mitte.

ForShadowsSake
#7
17.09.2011 22:01
Beiträge: 250

ob in irgendeiner Anleitung die Funktionen falsch angegeben sind oder nicht ist für Siedler vollkommen unwichtig, wenn das Ergebnis falsch ist...

Wenn die falschen Funktionsnamen so bleiben wird sich nichts bessern... es ist doch wohl kein Beinbruch "saratSimpleJob" durch "StartSimpleJob" zu ersetzen.

____________________
Sometimes people are beautiful. Not in looks, not in what they say, just in what they are.

ForShadowsSake
#8
17.09.2011 22:03
Beiträge: 250

Zitat von ForShadowsSake:
ob in irgendeiner Anleitung die Funktionen falsch angegeben sind oder nicht ist für Siedler vollkommen unwichtig wenn das Ergebnis falsch ist...

Wenn die falschen Funktionsnamen so bleiben wird sich nichts bessern... es ist doch wohl kein Beinbruch "saratSimpleJob" durch "StartSimpleJob" zu ersetzen.



( Edit: ) Außerdem gebe ich die Umlaute in Briefings zu bedenken.

EditvomEdit ( ): sorry, hab mich vertan...

____________________
Sometimes people are beautiful. Not in looks, not in what they say, just in what they are.

Nils_1997
#9
18.09.2011 01:05
Beiträge: 13

Das ab dem Addon "Nebelreich"
und wieso solte ich nicht 14 sein??
außerdem habe wollte ich nur meine Fehler wissen

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Dieser Beitrag wurde von Nils_1997 am 18.09.2011 um 01:32 editiert.

Nils_1997
#10
18.09.2011 01:38
Beiträge: 13

Das ab dem Addon "Nebelreich"
und wieso solte ich nicht 14 sein??
außerdem habe wollte ich nur meine Fehler wissen

Zitat von Nils_1997:
Inzwischen habe ich das diese Fehler ausgebessert aber ich glaube nicht dass das alle Fehler die ich machte verbessern wird! Und wie ich schon beim ERSTEN BEITRAG schon erwähnte ist das mein ERSTER SKRIPTING versuch



____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Peter-FS
#11
18.09.2011 09:55
Beiträge: 1086

Erste Fehler

Hallo Nils, ich denke das Alter spielt keine Rolle. Wenn du skripten willst, kannst und wirst du es lernen.
Ich habe dein Skript nur grob überarbeitet, d.h. die ersten Fehler wie fehlende Kommas, End und offensichtliche Schreibfehler beseitigt.
Zumindest kommen keine Lua Fehler mehr. Zum Ablauf und falsch geschriebenen Funktionsaufrufen kann ich im Moment nichts sagen, da musst du dich selbst durch kämpfen. So wird es noch nicht funktionieren!!

Gruß Peter

Tipp:
als Anfänger solltest du kleine Schritte vornehmen, d.h. ein Briefing aufbauen, testen und dann erst das Nächste.

Du kannst große Stellen im Skript mit diesen Zeichen auskommentieren.
--[[
hier steht dann das auskommentierte (momentan deaktivierte) Skript
--]]

was mir noch auffällt:
Funktionsnamen dürfen nur 1x vorkommen, diesen gibt es z.B. 2x und ist falsch.

function crateNPC(npcMiliz)
--crerate npc
createNPC(npcMiliz)
-- setup table for npc
local npcMiliz = {}
npcMiliz.name = "Milliz"
npcMiliz.briefing = BriefingMiliz
end



richtig wäre der Aufruf mit:
crateNPCMiliz()

function crateNPCMiliz()
-- zuerst de setup table für den npc erstellen
   local npcMiliz = {}
   npcMiliz.name = "Milliz"
   npcMiliz.briefing = BriefingMiliz
--dann der Aufruf CreateNPC
   CreateNPC(npcMiliz)--groß klein Schreibung beachten!!!!
end



hier ein Beispiel von mir

function CreateNpc_Scout()
    local npc = {
        name     	 = "scout",
	heroName 	 = "helias",
	wrongHeroMessage = "Ich spreche lieber mit Helias, der hat ein besseres Gedächtnis!",
        callback = BriefingScout,
    }
    CreateNPC(npc)
end



und hier dein teilweise korrigierter Code

-- MapName: tutorial_EinfacheMission
--
-- Author: NilsChaloupka
--
--------------------------------------------------------------------------------

-- 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)
SetNeutral(1,4)
SetNeutral(2,4)
end
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- This function is called from main script to init all resources for player(s)
function InitResources()
-- set some resources
AddGold (300)
AddSulfur(0)
AddIron (150)
AddWood (1500)
AddStone (1500)
AddClay (1500)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
ForbildTechnologie(GT_Binocular,1)
ForbildTechnologie(GT_Trading,1)
ForbildTechnologie(GT_Alloying,1)
ForbildTechnologie(GT_Tactics,1)
ForbildTechnologie(GT_GearWheel,1)
end

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

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

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

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start after all initialization is done

function FirstMapAction()
	createBriefingMiliz()
	createBriefingSam()
	createplayer2()
	createArmyOne()
	crateArmyTwo()
	StartSimpleJob("VictoryJob")
	createNPC(npcMiliz)
	createNPC(npcSam)
	createChest()
end

function createChest()

CreateRandomGoldChest(GetPosition("chest"))
CreateCestOpner("dario")
StartChestQuest()

end

function createBriefingMiliz()
BriefingMiliz = {}
BriefingMiliz.restoreCamera = true
-- call on end of briefing
BriefingMiliz.finished = BriefingMilizFinished

local page = 0
-- Page #1
page = page+ 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Hallo Sir schön euch zu sehen."
BriefingMiliz[page].position = GetPosition("Miliz")
BriefingMiliz[page].dialogCamera = true

--Page #2
page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Wie ihr seht Sir, sind schwere zeiten aufgebrochen"
BriefingMiliz[page].positon = GetPosition("rubble")
BreifingMiliz[page].explore = Briefing_Exploration_Range

-- page #3
page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "In der Nähe soll ein Banditenturm sein aber wir konnten bisher nicht weiter als bis zum Lager der Banditen fordringen!"
BriefingMiliz[page].position = GetPosition("Camp")
BriefingMiliz[page].explore = Briefing_Exploration_Range

-- Page #4
page = page + 1

BriefingMiliz[page] = {}
BriefingMiliz[page].title = "Milliz"
BriefingMiliz[page].text = "Aber keine Angst Sir, ich habe einige Truppen zusammen gestellt die euch helfen wird.!"
BriefingMiliz[page].position = GetPosition("support")
end

function crateNPC(npcMiliz)

--crerate npc
createNPC(npcMiliz)

-- setup table for npc
local npcMiliz = {}
npcMiliz.name = "Milliz"
npcMiliz.briefing = BriefingMiliz

end

function BriefingMilizFinished()

local troopDescription = {
minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYHIGH_EXPERIENCE,
leaderType = Entities.PU_LeaderSword3,
position =GetPosition("support")
}

local army
local a1
local a2

end

function createBriefingSam()

BreigingSam = {}
BriefingSam.restoreCamera = true
-- call on endof briefing
BreifingSam.finished = BriefingSamFinished

local page = 0

-- pade #1

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Servus Sir mein Name ist Sam. Möchten Sie eine Geschichte von mir hören?"
briefingSam[page].dialogCamera = true
briefingSam[page].position = GetPosition("Sam")

-- page #2

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Dieses Haus ist das Leid von diesen Leuten. Sie wurden in disem Haus gequält und gefoltert. Dieser Mann der vor dieser Hütte steht würde ich nicht ansprechen!, er entfürt euch in seine Hütte, dort erlebt ihr etwas grauenvolles. Ich war selbst schon in der Hütte, ich hab mich hinein geschlichen als der Mann ein neues Opfer hatte. Ich habe geshen wie er sie gequält hat, ich bin heute noch nicht drüber hinweg. Diese Arme Frau!"
briefingSam[page].position = GetPosition("Gosthouse")
briefingSam[page].explore = BRIEFING_EXPLORATION_RANGE

-- page #3

page = page + 1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Nachdem er sie gequält hatte, hatte er sie in diese Höhle geschleppt und sie getötet, dass niemand erfährt, was passiert ist."
briefingSam[page].position = "cave"
briefingSam[page].explore = BRIEFING_EXPLORATION_RANGE

-- page #4

page = page +1

briefingSam[page] = {}
briefingSam[page].title = "Sam"
briefingSam[page].text = "Meine Freund wollen euch helfen, das Böse entlich zu vernichten!"
briefingSam[page].position = GetPosition("Friends")
end

function crateNPC(npcSam)

-- create npc

createNPC(npcSam)

-- setup table for npc

local npcSam = {}
npcSam.name = "Sam"
npcSam.briefing = BriefingSam

end

function BriefingSamFinished()

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 5,
experiencePoints = VERYHIG_EXPERINCE,
leaderType = Entities.CU_BanditlLeaderBow1,
position = GetPosition("Friends")
}

local army = {}
local a1 = CreateTroop(army,troopDescrption)
local a2 = CreateTroop(army,troopDescrption)

end

function createPlayer2()

player2 = {}
player2.id = 2

local description = {serflimit = 10}

SetupPlayerAI(player2.id,description)

end

function CreateArmyTwo()

armyTwo = {}

armyTwo.player = 2
armyTwo.id = 1
armyTwo.strength = 3
armyTwo.position = GetPosition("ArmyTwo")
armyTwo.rodeLegth = 500

SetupArmy(armyTwo)

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYLOW_EXPERIENCE,
}
troopDescription.leaderType = Entities.CU_BanditLeaderSword1

EnlareArmy(ArmyTwo,troopDescription)
EnlareArmy(ArmyTwo,troopDescription)
EnlareArmy(ArmyTwo,troopDescription)

Defend(ArmyTwo)

end

function CreateArmyOne()

amyOne = {}

armyOne.player = 2
armyOne.id = 1
armyOne.strength = 7
armyOne.position = GetPosition("ArmyOne")
armyOne.rodeLength = 500

SetupArmy(armyOne)

local troopDescription = {

minNumberOfSoilders = 0,
maxNumberOfSoilders = 9,
experiencePoints = VERYLOW_EXPERIENCE,
}

troopDescription.leaderType = Entities.CU_BanditLeaderSword1

EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)
EnlareArmy(ArmyOne,troopDescription)

Defend(ArmyOne)

end

function VictoryJob()

if IsDead("payer2") then
Victory()
end
end



____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Siedler_Team
#12
18.09.2011 11:36
Beiträge: 847

Zitat von Peter-FS:

und hier dein teilweise korrigierter Code...


Ups...! Vorsicht, darin sind noch einige Syntax- und Funktionsfehler enthalten! Die Map wird mit dem Skriptvorschlag vermutlich leider auch weiterhin nicht laufen.

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

Dieser Beitrag wurde von Siedler_Team am 18.09.2011 um 11:45 editiert.

Peter-FS
#13
18.09.2011 12:09
Beiträge: 1086

Da steckt noch viel Arbeit drin!

Zitat von Siedler_Team:

Zitat von Peter-FS:

und hier dein teilweise korrigierter Code...


Ups...! Vorsicht, darin sind noch einige Syntax- und Funktionsfehler enthalten! Die Map wird mit dem Skriptvorschlag vermutlich leider auch weiterhin nicht laufen.



Ich weiß, deshalb auch der Hinweis "teilweise korrigierter Code" und "So wird es noch nicht funktionieren!!"
Und eine erste Hilfe für die Funktion "Create NPC"


Es hilft meiner Meinung nach auch nicht, ihm das fertige Skript zu liefern. Er muss ein Briefing und eine Funktion nach der anderen skripten und testen bis es funktioniert. Wenn es Fragen dazu gibt, bin ich gerne bereit zu helfen. Nur das ganze Skript werde ich nicht überarbeiten.

@Nils
Vorschlag:
1. unnötige Funktionen auskommentieren
2. erstes Briefing testen
3. je nach Ablauf eine Funktion nach der anderen wieder aktivieren und testen


Gruß Peter

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

warrior1024
#14
18.09.2011 12:11
Beiträge: 345

Ich habe noch etwas weiter an Peters Code korrigiert und hier das Ergebnis:

-- MapName: tutorial_EinfacheMission
--
-- Author: NilsChaloupka
--
--------------------------------------------------------------------------------

-- 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)
	SetNeutral(1,4)
	SetNeutral(2,4)
end
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-- This function is called from main script to init all resources for player(s)
function InitResources()
	-- set some resources
	AddGold (300)
	AddSulfur(0)
	AddIron (150)
	AddWood (1500)
	AddStone (1500)
	AddClay (1500)
end

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called to setup Technology states on mission start
function InitTechnologies()
	ForbildTechnologie(GT_Binocular,1)
	ForbildTechnologie(GT_Trading,1)
	ForbildTechnologie(GT_Alloying,1)
	ForbildTechnologie(GT_Tactics,1)
	ForbildTechnologie(GT_GearWheel,1)
end

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

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

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

--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- This function is called on game start after all initialization is done

function FirstMapAction()
	createBriefingMiliz()
	createBriefingSam()
	createplayer2()
	CreateArmyOne()
	CreateArmyTwo()
	StartSimpleJob("VictoryJob")
	createMilizNPC()
	createSamNPC()
	createChest()
end

function createChest() --überflogen
	
	CreateRandomGoldChest(GetPosition("chest"))
	CreateCestOpner("dario")
	StartChestQuest()
	
end

function createBriefingMiliz() --überflogen
	BriefingMiliz = {}
	BriefingMiliz.restoreCamera = true
	-- call on end of briefing
	BriefingMiliz.finished = BriefingMilizFinished
	
	local page = 0
	-- Page #1
	page = page+ 1
	
	BriefingMiliz[page] = {}
	BriefingMiliz[page].title = "Milliz"
	BriefingMiliz[page].text = "Hallo Sir schön euch zu sehen."
	BriefingMiliz[page].position = GetPosition("Miliz")
	BriefingMiliz[page].dialogCamera = true
	             
	--Page #2
	page = page + 1
	
	BriefingMiliz[page] = {}
	BriefingMiliz[page].title = "Milliz"
	BriefingMiliz[page].text = "Wie ihr seht Sir, sind schwere zeiten aufgebrochen"
	BriefingMiliz[page].positon = GetPosition("rubble")
	BreifingMiliz[page].explore = Briefing_Exploration_Range
	
	-- page #3
	page = page + 1
	
	BriefingMiliz[page] = {}
	BriefingMiliz[page].title = "Milliz"
	BriefingMiliz[page].text = "In der Nähe soll ein Banditenturm sein aber wir konnten bisher nicht weiter als bis zum Lager der Banditen fordringen!"
	BriefingMiliz[page].position = GetPosition("Camp")
	BriefingMiliz[page].explore = Briefing_Exploration_Range
	
	-- Page #4
	page = page + 1
	
	BriefingMiliz[page] = {}
	BriefingMiliz[page].title = "Milliz"
	BriefingMiliz[page].text = "Aber keine Angst Sir, ich habe einige Truppen zusammen gestellt die euch helfen wird.!"
	BriefingMiliz[page].position = GetPosition("support")
end

function createMilizNPC() --korrigiert
	--crerate npc
	local npcMiliz = {}
	npcMiliz.name = "Milliz"
	npcMiliz.briefing = BriefingMiliz
	createNPC(npcMiliz)
	-- setup table for npc
end

function BriefingMilizFinished() --korrigiert
	CreateMilitaryGroup( 1, Entities.PU_LeaderSword3, 8, GetPosition("support"), "leader1")
	CreateMilitaryGroup( 1, Entities.PU_LeaderSword3, 8, GetPosition("support"), "leader2")
end

function createBriefingSam() --korrigiert
	
	BriefingSam = {}
	BriefingSam.restoreCamera = true
	-- call on endof briefing
	BriefingSam.finished = BriefingSamFinished
	
	local page = 0
	
	-- pade #1
	
	page = page + 1
	
	BriefingSam[page] = {}
	BriefingSam[page].title = "Sam"
	BriefingSam[page].text = "Servus Sir mein Name ist Sam. Möchten Sie eine Geschichte von mir hören?"
	BriefingSam[page].dialogCamera = true
	BriefingSam[page].position = GetPosition("Sam")
	
	-- page #2
	
	page = page + 1
	
	BriefingSam[page] = {}
	BriefingSam[page].title = "Sam"
	BriefingSam[page].text = "Dieses Haus ist das Leid von diesen Leuten. Sie wurden in disem Haus gequält und gefoltert. Dieser Mann der vor dieser Hütte steht würde ich nicht ansprechen!, er entfürt euch in seine Hütte, dort erlebt ihr etwas grauenvolles. Ich war selbst schon in der Hütte, ich hab mich hinein geschlichen als der Mann ein neues Opfer hatte. Ich habe geshen wie er sie gequält hat, ich bin heute noch nicht drüber hinweg. Diese Arme Frau!"
	BriefingSam[page].position = GetPosition("Gosthouse")
	BriefingSam[page].explore = BRIEFING_EXPLORATION_RANGE
	
	-- page #3
	
	page = page + 1
	
	BriefingSam[page] = {}
	BriefingSam[page].title = "Sam"
	BriefingSam[page].text = "Nachdem er sie gequält hatte, hatte er sie in diese Höhle geschleppt und sie getötet, dass niemand erfährt, was passiert ist."
	BriefingSam[page].position = "cave"
	BriefingSam[page].explore = BRIEFING_EXPLORATION_RANGE
	
	-- page #4
	
	page = page +1
	
	BriefingSam[page] = {}
	BriefingSam[page].title = "Sam"
	BriefingSam[page].text = "Meine Freund wollen euch helfen, das Böse entlich zu vernichten!"
	BriefingSam[page].position = GetPosition("Friends")
end

function createSamNPC() --korrigiert
	local npcSam = {}
	npcSam.name = "Sam"
	npcSam.briefing = BriefingSam
	createNPC(npcSam)
end

function BriefingSamFinished() --korrigiert
	CreateMilitaryGroup( 1, Entities.CU_BanditLeaderBow1, 4, GetPosition("Friends"), "leader3")
	CreateMilitaryGroup( 1, Entities.CU_BanditLeaderBow1, 4, GetPosition("Friends"), "leader4")
end

function createplayer2() --korrigiert
	MapEditor_SetupAI(2, 0, 0, 0, "centerP2", 0, 0)
	local description = {serfLimit = 10}
	SetupPlayerAI(2,description)
end

function CreateArmyTwo() --korrigiert, Controljob fehlt
	armyTwo = {}
	armyTwo.player = 2
	armyTwo.id = 2
	armyTwo.strength = 3
	armyTwo.position = GetPosition("ArmyTwo")
	armyTwo.rodeLegth = 500
	SetupArmy(armyTwo)
	local troopDescription = {
		
		minNumberOfSoldiers = 0,
		maxNumberOfSoldiers = 9,
		experiencePoints = VERYLOW_EXPERIENCE,
	}
	troopDescription.leaderType = Entities.CU_BanditLeaderSword1
	EnlargeArmy(ArmyTwo,troopDescription)
	EnlargeArmy(ArmyTwo,troopDescription)
	EnlargeArmy(ArmyTwo,troopDescription)
	Defend(ArmyTwo)
end

function CreateArmyOne()  --korrigiert, Controljob fehlt
	amyOne = {}
	armyOne.player = 2
	armyOne.id = 1
	armyOne.strength = 7
	armyOne.position = GetPosition("ArmyOne")
	armyOne.rodeLength = 500
	SetupArmy(armyOne)
	local troopDescription = {
		minNumberOfSoldiers = 0,
		maxNumberOfSoldiers = 9,
		experiencePoints = VERYLOW_EXPERIENCE,
	}
	troopDescription.leaderType = Entities.CU_BanditLeaderSword1
	EnlargeArmy(ArmyOne,troopDescription)
	EnlargeArmy(ArmyOne,troopDescription)
	EnlargeArmy(ArmyOne,troopDescription)
	EnlargeArmy(ArmyOne,troopDescription)
	EnlargeArmy(ArmyOne,troopDescription)
	Defend(ArmyOne)
end

function VictoryJob() --vielleicht schreibfehler?
	if IsDead("payer2") then
		Victory()
	end
end



Zuerst wurde der Code vernünftig eingerückt. Das erhöht die Übersichtlichkeit enorm und fehlende/überflüssige Ends fallen schneller auf.
Des weiteren habe ich die NPCs korrigiert. Was Peter hier vergessen hat:
Das NPC-Table muss immer vor dem Aufruf von CreateNPC erstellt werden!
Außerdem habe ich die Hilfstruppen für den Spieler überarbeitet. Dem Spieler sind Armeen egal, Hauptsache, er hat Truppen. Deswegen spart man sich das ganze Armeezeug für den Spieler und schreibt einfach:

CreateMilitaryGroup


Auszug aus der Scriptingreferenz:

Zitat von BB:
CreateMilitaryGroup (_player,_entity,_soldiers,_position,_name,_lookAt)
Create military group with leader and given amount of soldiers.
Parameters
_player Number with the id of the player
_entity Number with the leadertype of the entity (see Entity Type List)
_soldiers Number amount of soldiers attached to leader
_position Table with the position of the entity (see Position Table)
_name String with the name of the entity...optional
_lookAt String with the name of the entity or Number with the id of the entity to look at after creation...optional



Auch fehlte der Aufruf der KI-Init-Funktion.
Hier gibts genaueres dazu.

Vermutlich wird auch dieser Code nicht fehlerfrei laufen, aber das gröbste wurde entfernt.

Außerdem solltest du folgendes in deinem Skript verwenden, sonst werden manche Briefingtexte einfach abgeschnitten:
BriefingsExpansion

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Dieser Beitrag wurde von warrior1024 am 18.09.2011 um 12:27 editiert.

Nils_1997
#15
18.09.2011 13:06
Beiträge: 13

Danke ich werde den verbesserten Skript gleich ausprobieren.
Aber das mit dem Controljop verseh ich nicht.

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Dieser Beitrag wurde von Nils_1997 am 18.09.2011 um 13:46 editiert.

Flodder
#16
18.09.2011 13:20
Beiträge: 2608

Zitat von Peter-FS:

Ich weiß, deshalb auch der Hinweis "teilweise korrigierter Code" und "So wird es noch nicht funktionieren!!"
Und eine erste Hilfe für die Funktion "Create NPC"


Schon klar. lieber Kollege, aber....
ich habe schon generell davor gewarnt, "Neumappern" ein fertiges Skript abzuliefern. Wenn dann aus mannigfaltigen Gründen die Map nach dem upload nicht so läuft, wie eigentlich erwartet, dann wird das nicht selten dem "Helfer" zur Last gelegt und der ist dann der "Bumann."

Ausserdem hilft ein fertiges Skript einem Neumapper sehr wenig, wenn er selbst nicht die Grundlegenden Dinge beherrscht.

Aber wenn man schon (...auch ansatzweise wie hier...) ein korrigiertes Skipt abliefert, dann sollte es auch fehlerfrei sein, ansonsten ist eine Hilfe m.E. sinnlos und führt zu noch mehr Verwirrungen.

Ist nicht bös gemeint, lieber Kollege!

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 18.09.2011 um 13:26 editiert.

Flodder
#17
18.09.2011 13:24
Beiträge: 2608

Zitat von Nils_1997:
Danke ich werde den verbesserten Skript gleich ausprobieren.


Kannste Dir getrost sparen, der VictoryJob() wir so vermutlich nicht laufen. Ob noch weitere Fehler drin sind, bedarf einer genaueren Überprüfung.

Ansonsten direkte Anfrage per eMail.

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Flodder
#18
18.09.2011 13:33
Beiträge: 2608

Allein dieser Abschnitt ist fragwürdig und m.E. unsinnig, ausser man möchte die Spieler verrückt machen:

function InitWeather()
   AddPeriodicSummer(60)
   AddPeriodicRain(60)
   AddPeriodicWinter(60)
end


Aber was schert mich das? Ist ja nicht meine Map.

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Nils_1997
#19
18.09.2011 13:59
Beiträge: 13

den Spieler durch das wetter verrückt zu machen war auch meine Absicht. Außerdem wieso sollte der VictoryJob() so nicht laufen??

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Flodder
#20
18.09.2011 14:59
Beiträge: 2608

Zitat von Nils_1997:
den Spieler durch das wetter verrückt zu machen war auch meine Absicht.


Dann ist ja gut.
Aber Du weisst hoffentlich, was mit der Funktion passiert?

Zitat von Nils_1997:

Außerdem wieso sollte der VictoryJob() so nicht laufen??


Weil er ein Ereignis abfragt. Eine Ereignisabfrage braucht aber eine Rückmeldung, ob dieses Ereignis eingetreten ist, oder nicht! Bekommt der Job keine Rückmeldung, dann wird jede Sekunde weiter abgefragt

Kurze Erklärung zum Verstehen:
if --> wenn
then --> dann
Dieser code:

function VictoryJob()
   if IsDead("payer2") then
   Victory()
   end
end 


...fragt jede Sekunde ab, ob die Entity "player2" auf der Karte noch existiert, oder nicht. Allerdings wird dem Job so nicht der Wahrheitsgehalt zurück gemeldet.

Der obige code mag zwar funzen, ist aber nicht sauber, weil ohne Rückmeldung jede Sekunde das Ereignis weiter abgefragt wird. Das mag in diesem Fall zwar nicht tragisch sein, weil mit Victory sowieso "Sense" ist, aber sowas geht bei anderen Jobs mit Sicherheit daneben!

Ich will Dir damit nur sagen:
Soll ein Job nur ein einziges mal durchlaufen, dann muss die Abfragefunktion ein return true beinhalten. Gerade als Newcomer sollte man das beherzigen, weil gerade deshalb oft unerwartete Probleme auftreten.

Ein "offener" Job, der öfters laufen soll, bis er "gezielt" beendet wird, ist wieder etwas anderes und braucht eine iD. Gute Beispiele dafür sind Jobs, wo eine Entity der anderen folgen soll, bis eine der beiden ans Ziel angekommen ist.

Kurz und gut: Dein code sollte also so lauten:

function VictoryJob()
   if IsDead("payer2") then
      Victory()
      return true  --< gibt dem Jobaufruf den Warheitsgehalt zurück. 
   end
end 


Soweit jetzt etwas deutlicher?

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Dieser Beitrag wurde von Flodder am 18.09.2011 um 15:05 editiert.

Mordred
#21
18.09.2011 17:53
Beiträge: 939

Hi Nils_1997!

"return true" gibt einfach einen Wert an die Funktion zurück, von der aus es aufgerufen wurde. Hier zum Beispiel:

function SagWas(_was)
 print(_was..GetSchlusszeichen())
end
function GetSchlusszeichen()
 return "!"
end

SagWas("Hallo")


Das ergibt "Hallo!".

"return true" bedeutet für das Sekundenprogramm (heißt StartSimpleJob) nur, dass dieser Job nicht mehr aufgerufen werden soll.

Du kannst zum verstehen einige solcher Konstruktionen auch selbst ausprobieren: http://www.lua.org/cgi-bin/demo (Da gibts aber keine SimpleJobs)

Viel Erfolg!

Flodder
#22
18.09.2011 19:34
Beiträge: 2608

Zitat von Mordred:

"return true" bedeutet für das Sekundenprogramm (heißt StartSimpleJob) nur, dass dieser Job nicht mehr aufgerufen werden soll.


Nichts anderes habe ich gemeint und wer lesen kann ist klar im Vorteil:

Zitat von Flodder:

Bekommt der Job keine Rückmeldung, dann wird jede Sekunde weiter abgefragt.




____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Nils_1997
#23
18.09.2011 20:13
Beiträge: 13

Ok jetzt ist es mir klar warum es so nicht funktioniert , Danke.
Mir ist eine Idee gekommen, und zwar würde ich noch gerne wissen was ich machen muss um einem das Gebäude zu schenken wenn der Held in die Nähe kommt.

____________________
Eine Pistole ist erst dann eine Mordwaffe, wenn man absichtlich auf andere schießt.

Dieser Beitrag wurde von Nils_1997 am 18.09.2011 um 20:22 editiert.

Mordred
#24
18.09.2011 20:13
Beiträge: 939

Zitat von Flodder:

Zitat von Mordred:

"return true" bedeutet für das Sekundenprogramm (heißt StartSimpleJob) nur, dass dieser Job nicht mehr aufgerufen werden soll.


Nichts anderes habe ich gemeint und wer lesen kann ist klar im Vorteil:

Zitat von Flodder:

Bekommt der Job keine Rückmeldung, dann wird jede Sekunde weiter abgefragt.




Ich meinte nur, dass "return true" nicht zwingend etwas beendet, sondern nur Daten von einer zur anderen Funktion überträgt

Mordred
#25
18.09.2011 20:18
Beiträge: 939

Zitat von Nils_1997:
Ok jetzt ist es mir klar warum es so nicht funktioniert , Danke.
Mir ist eine Idee gekommen, und zwar würde ich noch gerne wissen was ich machen muss um einem das Gebäude zu schenken wenn der Held in die Nähe kommt.


Eine Sekunde früher gepostet wie ich!

Zu deinem Problem gibt es natürlich auch eine Lösung:

function FirstMapAction()
StartSimpleJob("SchenkeHaus")
end

function SchenkeHaus()
 if IsNear("Held","Haus",1000) then
  ChangePlayer("Haus",1)
  return true
 end
end


Am Start der Karte wird der Job SchenkeHaus gestartet.
Sobald sich die im Editor oder per Skript "Held" benannte Entity der ebenfalls auf diese Weise benannten Entity "Haus" auf 1000 Siedlerzentimeter genähert hat, wird "Haus" zum Spieler 1 gewechselt (In Singleplayerkarten der Spieler) und der Job beendet.

LG

Seiten: 1 2 Nächste Seite

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

Impressum