summaryrefslogtreecommitdiff
path: root/src/game-server/spawnarea.cpp
diff options
context:
space:
mode:
authorEugenio Favalli <elvenprogrammer@gmail.com>2007-09-10 09:19:19 +0000
committerEugenio Favalli <elvenprogrammer@gmail.com>2007-09-10 09:19:19 +0000
commit2ed7628fb900f14b03cbf2843d0e0d4f301d7484 (patch)
treeab131d8043cf241990ddbac4c80bc5474ddbcc3a /src/game-server/spawnarea.cpp
parentfab7e6acc11c30ab240300c81b01eec128b330fc (diff)
downloadmanaserv-2ed7628fb900f14b03cbf2843d0e0d4f301d7484.tar.gz
manaserv-2ed7628fb900f14b03cbf2843d0e0d4f301d7484.tar.bz2
manaserv-2ed7628fb900f14b03cbf2843d0e0d4f301d7484.tar.xz
manaserv-2ed7628fb900f14b03cbf2843d0e0d4f301d7484.zip
Spawn rate and limit are now read from map files and really fixed size of spawn area.
Diffstat (limited to 'src/game-server/spawnarea.cpp')
-rw-r--r--src/game-server/spawnarea.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/game-server/spawnarea.cpp b/src/game-server/spawnarea.cpp
index 5cc1f39f..fc6e40cd 100644
--- a/src/game-server/spawnarea.cpp
+++ b/src/game-server/spawnarea.cpp
@@ -39,13 +39,13 @@ struct SpawnAreaEventDispatch: EventDispatch
static SpawnAreaEventDispatch spawnAreaEventDispatch;
-SpawnArea::SpawnArea(MapComposite *map, MonsterClass *specy, const Rectangle &zone):
+SpawnArea::SpawnArea(MapComposite *map, MonsterClass *specy, const Rectangle &zone, int maxBeings, int spawnRate):
Thing(OBJECT_OTHER, map),
mSpecy(specy),
mSpawnedListener(&spawnAreaEventDispatch),
mZone(zone),
- mMaxBeings(10),
- mSpawnRate(10),
+ mMaxBeings(maxBeings),
+ mSpawnRate(spawnRate),
mNumBeings(0),
mNextSpawn(0)
{
@@ -65,12 +65,23 @@ SpawnArea::update()
Point position;
MapComposite *map = getMap();
Map *realMap = map->getMap();
- int width = mZone.w == 0 ? realMap->getWidth() : mZone.w;
- int height = mZone.h == 0 ? realMap->getHeight() : mZone.h;
+ int x = mZone.x;
+ int y = mZone.y;
+ int width = mZone.w;
+ int height = mZone.h;
+
+ // Reset the spawn area to the whole map in case of dimensionless zone
+ if (width == 0 || height == 0)
+ {
+ x = 0;
+ y = 0;
+ width = realMap->getWidth() * 32;
+ height = realMap->getHeight() * 32;
+ }
+
do
{
- position = Point(mZone.x + rand() % width,
- mZone.y + rand() % height);
+ position = Point(x + rand() % width, y + rand() % height);
c--;
} while (!realMap->getWalk(position.x / 32, position.y / 32) && c);