Scripting Diskussion - SpellForce - Official Board

News:
08-17-2017, 15:02: SpellForce 3 OUT NOW! + Alle Trailer | Update: Alle Patchinfos
01-17-2017, 20:52: alte Forenlinks "reparieren"
07-04-2012, 21:36: SpellForce-Datenbank ist wieder da - Ein WiKi soll entstehen
08-30-2009, 20:03: Patchübersicht

Herzlich Willkommen im offiziellen SpellForce Forum!

Du betrachtest das Forum zur Zeit als Gast, was deine Zugriffsrechte bei Diskussionen und anderen Dingen enorm einschränkt. Wenn du dich hier registrierst, was natürlich völlig kostenlos ist, dann wirst du Beiträge und Themen erstellen, Private Konversationen mit anderen Mitgliedern führen, bei Umfragen abstimmen, Inhalte uploaden und vielen andere Dinge können. Die Anmeldung geht schnell von Statten, ist enorm einfach und kostenlos, daher würden wir dich ersuchen, dich zu registrieren!

Falls es Probleme mit der Anmeldung oder dem Zugriff auf einen Account gibt, stehen wir dir gerne über die Kontaktseite mit Rat und Tat zur Verfügung.

SpellForce Newsletter
Gib deine E-Mail Adresse in das Feld ein, um immer über die letzten Neuigkeiten zu SpellForce informiert zu werden

Zurück   SpellForce - Official Board > SpellForce - Deutsches Forum > SpellForce 2 - Shadow Wars > Editor & Modding
Registrieren Hilfe Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Editor & Modding Alles zum Editor und zum Thema Modding

Antwort
 
Themen-Optionen
Alt 07-04-2006, 21:46   #1
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Scripting Diskussion

Hi zusammen,

ich hab soeben mein erstes kleines Script zum laufen bekommen. Ich dachte mir es interessiert hier bestimmt einige was und wie *g*. Das ganze ist noch sehr primitiv, aber immerhin hab ich nen ersten Schritt gemacht

Als erstes muss man im entsprechenden Map-Ordner coopcommunity/pvpcommunity einen Unterordner erstellen der so lautet wie die Map betitelt wurde. Zum Beispiel : Bei einer Map Test_Script.map würde der Ordner Test_Script heißen. In diesem Ordner erstellt man wiederrum einen Ordner mit dem Namen "Script".

Im Ordner Script erstellt man die Start-Skript-Datei die im obigen Fall heißen müsste : _Test_Script.lua (Neues umbenanntes Text-Dokument).
In dieses Skript kopiert ihr den Inhalt zwischen den Trennenlinien hier:

------------------------------------------------------------

State
{
StateName = "FirstActions",

OnOneTimeEvent
{
Conditions =
{
FigureIsDead {Tag = "TestOpfer1"},
},
Actions =
{
PlayerResourceLenyaGive {Player = "pl_Human01", Amount = 12000},
PlayerResourceLenyaGive {Player = "pl_Human02", Amount = 12000},
PlayerResourceLenyaGive {Player = "pl_Human03", Amount = 12000},
ObjectSpawn {X = 45, Y = 47, ObjectId = 80, Direction = 223},
}
}

}

------------------------------------------------------------

Dieses Skript hat die Anforderung das eine Kreatur getötet wurde, nämlich die Kreatur mit dem Tag "TestOpfer1". Das heißt das ihr auf eurer Map eine Kreatur mit TestOpfer1 benamen müsst.

Sobald diese Kreatur dann getötet wurde bekommt jeder Spieler 12000 Lenya und auf der Koordinate x45 y47 erscheint ein liegendes Skelett.

Achja, unter eurem Level-Ordner "Test_Script" -> benötigt ihr einen Ordner "Dialog", leider reicht es nicht diesen nur zu erstellen, aber wenn ihr die Demo von Spellforce habt könnt ihr euch aus einem der Mapordner dort diesen Ordner, mit Inhalt, kopieren. Klar da stehen dann Dinge drin die mit euerer Map nichts zu tun haben, aber anders war es mir bisher noch nicht möglich das Skript ans Laufen zu bekommen

Hoffe ihr könnt damit was anfangen mit diesem ersten primitiven Schritt

Mfg
Veri
Veri ist offline   Mit Zitat antworten
Alt 07-05-2006, 01:31   #2
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Zum Portal aktivieren deaktivieren kann man in den Actions folgendes verwenden:

PortalEnable ( Tag = "Portal_test" )
PortalDisable ( Tag = "Portal_test" )
Veri ist offline   Mit Zitat antworten
Alt 07-05-2006, 01:45   #3
Kubi
Resurrected
 
Benutzerbild von Kubi
 
Registriert seit: Oct 2003
Ort: Stark Raving Sick Sad Little World
Alter: 29
Beiträge: 14.281
Hi

Danke - jetzt hat mir jemand doch die Arbeit abgenommen. Ich habe die ganze Zeit schon am Erarbeiten von komplizierteren Sachen geforscht (EXP, Teleport, etc.).

Der Thread soll generell als Scripting Referenz Diskussion dienen und daher wird er Sticky gemacht. Falls ihr etwas herausfindet - POSTEN!

Gruß
-kubi
__________________
Attention: PMs arent possible. For contacting me use this thread
DESPITE ALL MY RAGE I AM STILL JUST A RAT IN A CAGE

Kubi ist offline   Mit Zitat antworten
Alt 07-05-2006, 02:42   #4
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Ich hab das bei meinem ersten Script so ähnlich gehabt. Nur wollte ich einem Spieler eine neutrale Einheit übergeben UND zwar OHNE vorbedingung.
Dazu dachte ich mir, dass ich einfach die Conditions leer lassen müsste oder..? Aber das hat damals dann nicht so wirkllich hingehaut...
Naja ich werds nochmal probieren, einmal ohne und einmal mit Conditions. Mal schauen...

Bez. Dialog-Ordner: Ich glaube es gibt dort zwei Files die vorhanden sein müssen (hab das beim letzten mal herausgefunden).

Ich glaube der Inahlt ist normalerweise:
return
{
...
}

es reicht, wenn ich nicht falsch liege, da einfach
return
{
}

zu machen.
Fragt mich aber jetzt nicht, welche Files das waren (werde das nochmal nachschauen morgen, da werde ich dann auch schauen, dass ich das mit dem Einheiten übergeben hinbekomme).
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-05-2006, 02:50   #5
Kubi
Resurrected
 
Benutzerbild von Kubi
 
Registriert seit: Oct 2003
Ort: Stark Raving Sick Sad Little World
Alter: 29
Beiträge: 14.281
Hi

Ohne Bedingungen geht auch. Dazu sollte man aber folgendes hinschreiben:
Code:
Conditions =
{
},
Die Dateien im Dialog Ordner sind cutscenetext.lua und outcrytext.lua. Diese sind dann nur für Cutscenes und Ausrufe wichtig.

Gruß
-kubi
__________________
Attention: PMs arent possible. For contacting me use this thread
DESPITE ALL MY RAGE I AM STILL JUST A RAT IN A CAGE

Kubi ist offline   Mit Zitat antworten
Alt 07-05-2006, 02:55   #6
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Hmm... ich glaube das habe ich aber getan... Vielleicht war auch der übergeben Befehlt falsch

Werde das morgen (eh mittlerweile heute) nochmal testen
Obwohl ich mir jetzt nicht sicher bin, ob ich das '=' nach den Conditions hingeschrieben hatte... Werd ich überprüfen... Wär echt ärgerlich, wenn es das war, weil dann hätte ich mein erstes kleines Script schon am Freitag gehabt (danach hatte ich ja keine Zeit mehr mich damit zu beschäftigen, bis jetzt).
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-05-2006, 11:27   #7
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Ach ja wieso schreibt er VOR dem Kartennamen in Spellforce2 bei mir dauernd:
"TAG NOT FOUND: " und danach eben erst der Kartenname hin..?
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-05-2006, 14:26   #8
Kubi
Resurrected
 
Benutzerbild von Kubi
 
Registriert seit: Oct 2003
Ort: Stark Raving Sick Sad Little World
Alter: 29
Beiträge: 14.281
Hi

@ghost_zero5
Weil das System für die Community Maps leider nicht angepasst wurde und so nach einem Tag in der Datenbank für den Mapnamen sucht.

Gruß
-kubi
__________________
Attention: PMs arent possible. For contacting me use this thread
DESPITE ALL MY RAGE I AM STILL JUST A RAT IN A CAGE

Kubi ist offline   Mit Zitat antworten
Alt 07-05-2006, 16:54   #9
king22
Hacker auf abwegen
 
Benutzerbild von king22
 
Registriert seit: May 2005
Alter: 26
Beiträge: 53
RPG Character: Night
Talking

Hab mir mal die Scripts in der Demo angesehen (sehr interesant und zuweilen lustige Kommentare ) und eine Liste mit einpaar Befehlen erstellt.
Dammit dürfte schon einiges gehen, aber ne kommplette Liste von den Entwicklern wäre cool
Angehängte Dateien
Dateityp: zip Lua befehle.zip (3,2 KB, 186x aufgerufen)
king22 ist offline   Mit Zitat antworten
Alt 07-05-2006, 22:20   #10
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Die ist aber recht unvollständig, wenn ma ndie sf2_base01.pak mit dem Editor öffnet, kann man ein Haufen Actions, Events, Conditions darin finden.


So aber jetzt zu dem was ich machen wollte, jetzt weiß ich warum es nicht ging, dafür war ein Befehl nicht ausreichend. Es braucht mindestens zwei, bei RTS-Units sogar drei:

State
{
StateName = "FirstActions",
OnOneTimeEvent
{
Conditions =
{
},
Actions =
{
FigureTeamTransfer {Tag = "titan1", Team = "tm_Human"},
FigurePlayerTransfer {Tag = "titan1", Player = "pl_Human01"},
PlayerKitTransfer {Player = "pl_Human01", PlayerKit = "pk_Neutral"},
}
}
}


Der Punkt ist, dass man zuerst die Einheit einem anderen Team zuweise muss, dann einem anderen Spieler und da eine RTS-Einheit soweit ich weiß normalerweise auch ein PlayerKit haben sollte, muss man dem entsprechenden Player auch das entsprechende PlayerKit zuweisen, da die Einheit sonst nur der Gruppe aber nicht dem Player gehört und somit nicht gesteuert werden kann.

EDIT:
In dem Fall reicht ein PlayerKitTransfer aus:
Also nur:

State
{
StateName = "FirstActions",
OnOneTimeEvent
{
Conditions =
{
},
Actions =
{
PlayerKitTransfer {Player = "pl_Human01", PlayerKit = "pk_Neutral"},
}
}
}

In der Dun Mora Mission wurden jedoch die Funktionen:
FigureTeamTransfer {Tag = "titan1", Team = "tm_Human"},
FigurePlayerTransfer {Tag = "titan1", Player = "pl_Human01"},

verwendet, aber da haben die Einheiten auch kein PlayerKit bekommen. Werde schauen, ob sich da was machen lässt

Btw. mit PlayerKit-Transfer kann man auch z.B. Untote spielen.

EDIT2:
Das mit dem PlayerKit bez. RTS scheint nur bei Gebäuden so zu sein und nicht bei Einheiten, aber denoch funktioniert es ohne PlayerKitTransfer nicht...

EDIT3:
Habe das ganze jetzt auch so wie in der Dun Mora-Kampagne OHNE PlayerKit-Transfer geschafft und zwar folgendermaßen:
Das wichtige ist, dass man die NPCs-Units nimmt, die ganz normalen RTS-Units gibt es auch als NPCs-Units. den denen kann man ein Team zuordnen OHNE Ihnen ein PlayerKit zuzuordnen und damit funktioniert auch folgender Code:

State
{
StateName = "FirstActions",
OnOneTimeEvent
{
Conditions =
{
},
Actions =
{
FigureTeamTransfer {Tag = "titan1", Team = "tm_Human"},
FigurePlayerTransfer {Tag = "titan1", Player = "pl_Human01"},
}
}
}

EDIT4:
Für manche könnte auch jene Funktion interessant sein:
FigureUnitChange {ScriptTag, UnitId, Level}

wird z.B. so verwendet:
FigureUnitChange {Tag = "titan1", UnitId = 80, Level = 1}

Btw. UnitId = 80 bedeutet Menschen-Titan, aber das kann man mittels Editor eh auch rausfinden, was für eine UnitId zu welchem Unit gehört.

Geändert von ghost_zero5 (07-05-2006 um 22:49 Uhr).
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-05-2006, 22:56   #11
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Das mit dem Untoten spielen:
Dafür reicht ein PlayerKit-Transfer alleine doch nicht aus, da man dann zwar ein z.B. Mausoleum und Niedere Skelette bekommt, aber man kann nur die Gebäude der gewählten Fraktion bauen. Mal schauen, ob sich hier noch was machen lässt durch ein paar Tricks.
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-05-2006, 23:03   #12
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Das mit der sf2_base01.pak ist mir auch aufgefallen, die anderen sind codiert, hier müssen wir wohl auf ein Tool der Entwickler warten denke ich.

Unter dem FigureUnitChange kann ich mir jetzt im Moment nichts vorstellen, was bewirkt dies denn?

Der Gedanke mit den Untoten zwängte sich mir auch auf, ich denke Einheiten zu bauen wird ohne Eingriff in die Pak-Dateien nicht möglich sein, aber ich lasse mich gerne eines besseren belehren
Veri ist offline   Mit Zitat antworten
Alt 07-06-2006, 00:24   #13
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Es wird sicher nicht einfach

Das FitureUnitChange tauscht Einheiten gegen eine andere aus. z.B. eine Bogenschütin gegen einen Schwertkrieger oder was auch immer...
Könnt vielleicht hin und wieder recht praktisch sein.
Wurde in Dun Mora dazu verwendet, um aus den depressiven Einheiten --> Dun Mora Einheiten zu machen.
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-06-2006, 00:30   #14
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Ah, ok Danke, dachte mir schon soetwas, mir kam spontan nur nich in den Kopf wozu es gut sein könnte
Veri ist offline   Mit Zitat antworten
Alt 07-06-2006, 00:32   #15
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Naja z.B. beim Bauen von Menscheneineiten um die dann durch entsprechende Untote-Einheiten zu ersetzen
Wäre zumindest ein Anfang einer Untoten-Zivilisiation
Und sicher alles andere als perfekt
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-06-2006, 03:05   #16
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Weiß eigentlich wer, ob es irgendwie möglich ist in den Action-Tags irgendwelche Infos über diverse Informationen aus den Conditions zu verwenden..?
z.B. ein Gebäude, dass in den Conditions ermittelt wurden, dann weiterverwendne, für was auch immer. Zerstören, einem anderen Spieler geben oder was auch immer.

Ich dachte irgendwie, dass ich z.B. mit if then else LUA-Bedingungen arbeite und dadurch die Actions dann entsprechend abändere und festlege. Und mit den entsprechenden Funktionen die Tags oder was auch immer ermittle und dort dann hinzufüge (was an der Stelle ja möglich ist durch Variablen), das Problem ist nur, wenn man es tatsächlich so machen muss, WELCHE Funktionen muss man verwenden, um solche Informationen zu bekommen. Ich wollte einmal mit was einfaches anfange und zwar der GetAvatarSex()-Funktion, aber da kommt dann beim Laden ein Fehler und zwar ein Fehler der in dieser Funktion oder wohl eher in der IsAvatarFemale()-Funktion.

Ich mein eigentlich wollte ich die Funktion eh nur verwenden, weil ich sie schnell gefunden habe, was mich eher interessiert ist so eine Art Funktion um die Tags von allen Gebäuden eines bestimmten Typs auszulesen, nur konnte ich deren Namen noch nicht wirklich feststellen.

Es wäre echt nett, wenn bez. Scripting zumindest ein bischen Hilfe von den Entwicklern kommen würde...
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-06-2006, 22:01   #17
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Ich habe gerade das da entdeckt :

-- ================================================== ==================================
-- File: GdsQuestRewardSystem.lua
-- Desc: functions for Quest rewards
-- ================================================== ==================================

REM = [[
-- folgende dinge bei QuestSolve "rewarden":
Rewards =
{
-- [Item] = Menge (Item ist eine Misc/Equipment ItemId aus der Datenbank)
ItemsMisc = {[234] = 1, [567] = 1, [890] = 5},
ItemsEquip = {[123] = 10, [456] = 4, [789] = 1},
XP = 5000,
Gold = 100,
Lenya = 500,
Stone = 150,
Silver = 875,

-- [Unit] = Menge (Unit ist eine RTS UnitId aus der Datenbank)
-- Level = 14 (die übergebenen units haben diesen level)
SpawnRTSUnits = {Level = 14, 876 = 5, 432 = 10, 210 = 20},

-- transfer existing units to playercontrol (parameter sind scripttags)
-- die figuren müssen bereits auf der Karte platziert sein und neutral sein
TransferTags = {"unit1", "unit2", "unit3"},
}
]]

Wird daraus jemand schlau? Ich bisher nämlich nicht.
Veri ist offline   Mit Zitat antworten
Alt 07-06-2006, 23:00   #18
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Also ich hab jetzt ein TestQuest erstellt, der Outcry erfolgt auch (sofern im Ordner Dialog die OutCryText.lua hinterlegt ist und ein dort definierter Tag gestartet wird).

------------------------------------------
MapQuestStates
{
-- quest-typ spezifische parameter:
QuestParams =
{
-- Tag dieser Quest (siehe DB)
Quest = "TestQuest",
TimeLimit = 20,
StartWith = "Map",
Type = "Kill",
Tags = {"TestOpfer1"}, -- oder auch scriptgruppen
},

QuestSolveActions =
{
},

Outcries =
{
QuestBegin = {"Bor1"},
QuestSolve = {},
QuestUnsolvable = {},
},

Rewards =
{
XP = 1000,
Silver = 10000,
},
}
------------------------------------------

Der QuestBegin OutCry "Bor1" wird angezeigt bei mir, was zeigt das die Quest als solches in einem funktionellen Zustand ist. Mehr will aber noch nicht funktionieren... vielleicht hat darauf noch jemand eine Idee?
Veri ist offline   Mit Zitat antworten
Alt 07-06-2006, 23:10   #19
ghost_zero5
Registered User
 
Registriert seit: Dec 2003
Alter: 31
Beiträge: 774
Was genau verstehst du unter "mehr"..?
ghost_zero5 ist offline   Mit Zitat antworten
Alt 07-06-2006, 23:20   #20
Veri
Registered User
 
Registriert seit: Jul 2006
Alter: 35
Beiträge: 23
Naja, das Quest lässt sich nicht so starten (QuestSetActive) das man eine Nachricht dazu bekommt, und abschließen(QuestSetSolved) lässt es sich auch nicht um den Reward zu bekommen.

Edit:

Achja, ich hab gerade das da gefunden :

AvatarXPGive{Player = "pl_Human01", Amount = 10000 },

das dürften einige schon gesucht haben *gg*

Geändert von Veri (07-06-2006 um 23:44 Uhr).
Veri ist offline   Mit Zitat antworten
Antwort


Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:55 Uhr.


Powered by vBulletin® Version 3.6.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
© 2015 Nordic Games GmbH, Austria. All Rights Reserved.
Style © by Kubi