diff options
author | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-08 13:31:33 +0000 |
---|---|---|
committer | Guillaume Melquiond <guillaume.melquiond@gmail.com> | 2007-07-08 13:31:33 +0000 |
commit | f23ebba72f01fc6fac49211a50ca008c8af4ed84 (patch) | |
tree | 65a603d92548643f4b7d197464c2942722bc374c /src/game-server/monster.cpp | |
parent | a4c7586b310a8be8ffd5c8acad88b5236695c1da (diff) | |
download | manaserv-f23ebba72f01fc6fac49211a50ca008c8af4ed84.tar.gz manaserv-f23ebba72f01fc6fac49211a50ca008c8af4ed84.tar.bz2 manaserv-f23ebba72f01fc6fac49211a50ca008c8af4ed84.tar.xz manaserv-f23ebba72f01fc6fac49211a50ca008c8af4ed84.zip |
Added monster drops.
Diffstat (limited to 'src/game-server/monster.cpp')
-rw-r--r-- | src/game-server/monster.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/game-server/monster.cpp b/src/game-server/monster.cpp index be9d6fa1..30f3a909 100644 --- a/src/game-server/monster.cpp +++ b/src/game-server/monster.cpp @@ -22,13 +22,29 @@ #include "game-server/monster.hpp" -#include "game-server/collisiondetection.hpp" +#include "game-server/item.hpp" #include "game-server/mapcomposite.hpp" - +#include "game-server/state.hpp" #include "utils/logger.h" -Monster::Monster(): +ItemClass *MonsterClass::getRandomDrop() const +{ + int p = rand() / (RAND_MAX / 10000); + for (MonsterDrops::const_iterator i = mDrops.begin(), + i_end = mDrops.end(); i != i_end; ++i) + { + p -= i->probability; + if (p < 0) + { + return i->item; + } + } + return NULL; +} + +Monster::Monster(MonsterClass *specy): Being(OBJECT_MONSTER, 65535), + mSpecy(specy), mCountDown(0), mAttackTime(0), mAttackPreDelay(5), @@ -230,6 +246,14 @@ void Monster::die() { mCountDown = 50; // sets remove time to 5 seconds Being::die(); + if (ItemClass *drop = mSpecy->getRandomDrop()) + { + Item *item = new Item(drop, 1); + item->setMap(getMap()); + item->setPosition(getPosition()); + DelayedEvent e = { EVENT_INSERT }; + GameState::enqueueEvent(item, e); + } } WeaponStats Monster::getWeaponStats() |