diff options
author | Eugenio Favalli <elvenprogrammer@gmail.com> | 2007-09-10 09:19:19 +0000 |
---|---|---|
committer | Eugenio Favalli <elvenprogrammer@gmail.com> | 2007-09-10 09:19:19 +0000 |
commit | 2ed7628fb900f14b03cbf2843d0e0d4f301d7484 (patch) | |
tree | ab131d8043cf241990ddbac4c80bc5474ddbcc3a /src/game-server/spawnarea.cpp | |
parent | fab7e6acc11c30ab240300c81b01eec128b330fc (diff) | |
download | manaserv-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.cpp | 25 |
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); |