forked from github/server
38a754844e
http://bugs.eressea.de/view.php?id=1980 Der Test unten erzeugt eine Temp-Einheit welche nach dem Kampf die Burg hält, trotz einer vernichtenden Niederlage innerhalb von 2 Kampfrunden. Der Angreifer darf die Burg zwar betreten, bekommt aber nicht das Kommando. Grund ist das beim Betreten der Burg via u_set_building() nur dann die betretende Einheit zum Burgenbesitzer wird wenn es keinen Burgenbesitzer gibt. Die eher aufgerufene Funktion building_owner() versucht zwar nach dem Kampf einen neuen Burgenbesitzer zu finden, da sich zu diesem Zeitpunkt aber nur eine Tote Einheit und einen Temp Einheit, beide mit 0 Personen, in der Bug befinden schlägt dies Fehl. Es wird von der Funktion zwar 0 zurückgegeben, aber b->_owner wird nicht zurückgesetzt (Vermutlich da der Server an anderer Stelle sonst annimmt das noch nie jemand in der Burg war). Daher die Überprüfung bei u_set_building ob der Burgenbesitzer tot ist, und wenn ja wird die betretende Einheit neuer Burgenbesitzer. local r1 = region.create(1, 2, "plain") local f1 = faction.create("a@b.de", "human", "de") local f2 = faction.create("c@d.de", "human", "de") f1.age=20 f2.age=20 local b1 = building.create(r1, "castle") b1.size = 100 local u0 = unit.create(f1, r1, 10) u0.building = b1 u0:add_item("money", u0.number * 100) u0:clear_orders() u0:add_order("KÄMPFE") u0:add_order("MACHE TEMP 1") u0:add_order("ENDE") local u1 = unit.create(f1, r1, 100) u1.building = b1 u1:add_item("money", u1.number * 100) u1:clear_orders() u1:add_order("KÄMPFE FLIEHE") u1:add_order("GIB TEMP 1 ALLES PERSONEN") u1:add_order("GIB TEMP 1 ALLES") u1:add_order("GIB TEMP 1 Kommando") local u2 = unit.create(f2, r1, 101) u2:add_item("sword", u2.number) u2:add_item("money", u2.number * 100) u2:set_skill("melee", 16) u2:clear_orders() u2:add_order("KÄMPFE") u2:add_order("ATTACKIEREN " .. itoa36(u1.id)) u2:add_order("BETRETE BURG " .. itoa36(b1.id)) process_orders() Das sollte für Schiffe eigentlich das gleiche sein, also da die gleiche Änderung. |
||
---|---|---|
cJSON@43c04ad612 | ||
cmake@cd779ba36e | ||
conf | ||
core | ||
critbit@2a7af5e234 | ||
crypto@166fdc8c14 | ||
cutest@788659594e | ||
dlmalloc@4292cd5e81 | ||
doc | ||
game-e2 | ||
game-e3 | ||
iniparser@537ba2f174 | ||
lunit@155c965944 | ||
process | ||
quicklist@25ac9a7bf0 | ||
res | ||
s | ||
scripts | ||
se | ||
src | ||
storage@eabc730c24 | ||
support | ||
tests | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
LICENSE | ||
Makefile | ||
README.md | ||
autoconf.h.in | ||
configure | ||
eressea.ini | ||
todo.md | ||
vs2010-build.bat | ||
vs2012-build.bat | ||
vs2013-build.bat |
README.md
What is this?
This repository contains an the source code for the Play-by-Mail strategy game Eressea.
Prerequisites
Eressea depends on a number of external libraries. On a recent Debian-based Linux system, this is the apt-get command to install all of them:
sudo apt-get install git cmake gcc make libxml2-dev liblua5.2-dev libtolua-dev libncurses5-dev libsqlite3-dev
How to check out and build the Eressea server
This repository relies heavily on the use of submodules, and it pulls in most of the code from those. The build system being used is cmake, which can create Makefiles on Unix, or Visual Studio project files on Windows. Here's how you clone and build the source on Ubuntu:
git clone --recursive git://github.com/eressea/server.git
cd server
./configure
If you got this far and all went well, you have built a server (it is linked from the game
subdirectory), and it will have passed some basic functionality tests.