PBeM-Spiele
Aktuelle Zeit: 28.03.2024 22:35

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Eressea + Lua = cool
BeitragVerfasst: 16.12.2003 00:43 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 2152
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
Für die neue Vinyambar-Partie habe ich mir den Spaß gemacht, lua-bindings für Eresseas wichtigste Funktionen zu machen. Das bedeutet, ass man jetzt den Server aus lua heraus skripten kann. Der Server ist in dem Sinne nicht mal mehr strikt ein Server, er kann auch für programmatische Änderungen am Datenfile benutzt werden. Das ist cool, und sieht z.B. so aus:

Code:
function process(infile, outfile, orders)
  if read_game(infile)~=0 then
    print("could not read game")
    return -1
  end
  read_orders(orders)
  process_orders()
  write_passwords()
  write_reports()
  if write_game(outfile)~=0 then
    print("could not write game")
    return -1
  end
end


Das ist eine normale Auswertung: Datenfile laden, Befehle lesen, Befehle abarbeiten, Passworte schreiben, Reports schreiben, Datenfile wieder speichern.

Für WdW müssen wir haufenweise Parteien in Allianzen einordnen, Aussetzen, und eine Menge Einheiten mit Startitems für jede der Parteien machen. Da die Daten dafür in der Datenbank stecken, generiere ich mir einfach ein kleines lua-skript daraus:

Code:
alliance = add_alliance(13, "Einwohner von Lummerland")
position = get_position(13)
faction = make_faction(position, alliance, 5, "bla@fasel.de", "Dämonen")
...
for faction in factions() do
  local u = add_unit(faction, position)
  u:set_skill("magic", 3)
  u:add_item("money", 1000)
end


Das ist nur beispielhaft, das wirkliche Skript ist 200 Zeilen lang.

Das schöne ist, sowas kann ich beliebig weitertreiben. Ich brauche eine Datei, in der der aktuelle Spielstand steht? Kein Problem, einfach eine lua-funktion gemacht, die den in eine Datei rausschriebt.

Das gute daran ist, dass man verschiedene Skripte für verschiedene Vinyambars (oder Eressea) benutzen kann, aber alles den gleichen Server benutzt. Der spielbezogene Teil muss nicht neu kompiliert werden, weil die Skripte zur Laufzeit interpretiert werden.

Das ist toll. Ich kann jedem, der ein eigenes PBEM schreibt, nur empfehlen sich einer Skriptsprache zu bedienen, zumindest um die Kern-Funktionen seines Programmes steuern zu können.

Als Tool benutze ich dazu luabind, das erlaubt es sehr einfach, C und C++ Code nach lua zu binden. Dafür ist der ganze Eressea-Server jetzt C++-verträglich geworden (schon vor einer Weile). Der luabind-code sieht in etwa so aus:

Code:
void
bind_region(lua_State * L)
{
  module(L)[
    def("regions", &get_regions, return_stl_iterator),
    def("get_region", &findregion),

    class_<struct region>("region")
      .property("name", ®ion_getname, ®ion_setname)
      .property("info", ®ion_getinfo, ®ion_setinfo)
      .property("terrain", ®ion_getterrain)
      .def_readonly("x", ®ion::x)
      .def_readonly("y", ®ion::y)
      .def_readwrite("age", ®ion::age)
      .property("units", ®ion_units, return_stl_iterator)
      .property("buildings", ®ion_buildings, return_stl_iterator)
      .property("ships", ®ion_ships, return_stl_iterator)
  ];
}


Ja, das ist wirklich reines C++, auch wenn es nicht so ausschaut. Habe ich auch erst nicht glauben können :-)

_________________
My Homepage | Eressea Twitter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 17.12.2003 10:46 
Offline
Fast-Mitglied
Fast-Mitglied

Registriert: 14.07.2002 20:45
Beiträge: 75
Ich dachte, dass Ihr schon vorher auf Skriptsprachen wie Python oder Perl zurückgegriffen hättet. Vor allem mit Perl/CGI kann kann feine Sachen für ein Web-Interface machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 17.12.2003 12:06 
Offline
PBEM-Gott
PBEM-Gott
Benutzeravatar

Registriert: 23.02.2002 19:29
Beiträge: 2152
Wohnort: Vestfold, Norwegen
Titel: Eressea Spielleiter
Das Web-Interface und die Datenbank-Geschichten sind alle Python, ja. Aber im Server selber war bishr keine Skriptsprache drin.

_________________
My Homepage | Eressea Twitter


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
Webhosting by sunrise design ohg