diff options
author | Roderic Morris <roderic@ccs.neu.edu> | 2008-07-28 22:03:03 +0000 |
---|---|---|
committer | Roderic Morris <roderic@ccs.neu.edu> | 2008-07-28 22:03:03 +0000 |
commit | 0e0986323c6ae8aed1e9efcf8663c11c0bdecad1 (patch) | |
tree | 436eaa3b0f1f429171436890279f26658b0c2181 /src | |
parent | 30f5a677644fc34fc7e8b3493f7af42056c3285f (diff) | |
download | manaserv-0e0986323c6ae8aed1e9efcf8663c11c0bdecad1.tar.gz manaserv-0e0986323c6ae8aed1e9efcf8663c11c0bdecad1.tar.bz2 manaserv-0e0986323c6ae8aed1e9efcf8663c11c0bdecad1.tar.xz manaserv-0e0986323c6ae8aed1e9efcf8663c11c0bdecad1.zip |
fix crash from last commit, guild fixes, damage calculation fix
Diffstat (limited to 'src')
-rw-r--r-- | src/account-server/dalstorage.cpp | 14 | ||||
-rw-r--r-- | src/chat-server/guild.cpp | 10 | ||||
-rw-r--r-- | src/chat-server/guild.hpp | 7 | ||||
-rw-r--r-- | src/game-server/being.cpp | 5 | ||||
-rw-r--r-- | src/game-server/character.cpp | 2 |
5 files changed, 18 insertions, 20 deletions
diff --git a/src/account-server/dalstorage.cpp b/src/account-server/dalstorage.cpp index 5772b547..aa29319f 100644 --- a/src/account-server/dalstorage.cpp +++ b/src/account-server/dalstorage.cpp @@ -999,7 +999,7 @@ std::list<Guild*> DALStorage::getGuildList() guild->setId(toShort(guildInfo(i,0))); guilds.push_back(guild); } - + string_to< unsigned > toUint; /** * Add the members to the guilds. */ @@ -1009,25 +1009,25 @@ std::list<Guild*> DALStorage::getGuildList() ++itr) { std::ostringstream memberSql; - memberSql << "select member_name from " << GUILD_MEMBERS_TBL_NAME + memberSql << "select member_name, rights from " << GUILD_MEMBERS_TBL_NAME << " where guild_id = '" << (*itr)->getId() << "';"; const dal::RecordSet& memberInfo = mDb->execSql(memberSql.str()); - std::list<std::string> names; + std::list<std::pair<std::string, int> > names; for (unsigned int j = 0; j < memberInfo.rows(); ++j) { - names.push_back(memberInfo(j, 0)); + names.push_back(std::pair<std::string, int>(memberInfo(j, 0), toUint(memberInfo(j, 1)))); } - for (std::list<std::string>::const_iterator i = names.begin(); + for (std::list<std::pair<std::string, int> >::const_iterator i = names.begin(); i != names.end(); ++i) { - Character *character = getCharacter((*i)); + Character *character = getCharacter((*i).first); if (character) { character->addGuild((*itr)->getName()); - (*itr)->addMember(character->getName()); + (*itr)->addMember(character->getName(), (*i).second); } } } diff --git a/src/chat-server/guild.cpp b/src/chat-server/guild.cpp index 7320ed7e..74ca17ea 100644 --- a/src/chat-server/guild.cpp +++ b/src/chat-server/guild.cpp @@ -24,17 +24,12 @@ #include <algorithm> -GuildMember::GuildMember(std::string name) : +GuildMember::GuildMember(const std::string &name) : mName(name), mPermissions(0) { } -std::string GuildMember::getName() const -{ - return mName; -} - void GuildMember::setPermission(int perm) { mPermissions = perm; @@ -54,9 +49,10 @@ Guild::~Guild() { } -void Guild::addMember(const std::string &playerName) +void Guild::addMember(const std::string &playerName, int permissions) { GuildMember *member = new GuildMember(playerName); + member->setPermission(permissions); mMembers.push_back(member); if (checkInvited(playerName)) { diff --git a/src/chat-server/guild.hpp b/src/chat-server/guild.hpp index 05a8bd70..258d27ac 100644 --- a/src/chat-server/guild.hpp +++ b/src/chat-server/guild.hpp @@ -45,12 +45,13 @@ class GuildMember /** * Constructor */ - GuildMember(std::string name); + GuildMember(const std::string &name); /** * Get name */ - std::string getName() const; + const std::string& getName() const + { return mName; } /** * Set permissions @@ -87,7 +88,7 @@ class Guild /** * Add a member to the guild. */ - void addMember(const std::string &playerName); + void addMember(const std::string &playerName, int permissions = GuildMember::NONE); /** * Remove a member from the guild. diff --git a/src/game-server/being.cpp b/src/game-server/being.cpp index b18914fa..a6ba4023 100644 --- a/src/game-server/being.cpp +++ b/src/game-server/being.cpp @@ -64,21 +64,22 @@ int Being::damage(Object *, Damage const &damage) /* Elemental modifier at 100 means normal damage. At 0, it means immune. And at 200, it means vulnerable (double damage). */ int mod1 = getModifiedAttribute(BASE_ELEM_BEGIN + damage.element); - + HPloss = HPloss * (mod1 / 100); /* Defence is an absolute value which is subtracted from the damage total. */ int mod2 = 0; switch (damage.type) { case DAMAGE_PHYSICAL: mod2 = getModifiedAttribute(BASE_ATTR_PHY_RES); + HPloss = HPloss - mod2; break; case DAMAGE_MAGICAL: mod2 = getModifiedAttribute(BASE_ATTR_MAG_RES); + HPloss = HPloss / (mod2 + 1); break; default: break; } - HPloss = HPloss * (mod1 / 100) - mod2; if (HPloss < 0) HPloss = 0; diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index b2420c31..46d7f5c5 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -96,7 +96,7 @@ void Character::perform() Damage damage; damage.base = getModifiedAttribute(BASE_ATTR_PHY_ATK_MIN) + - (rand() % getModifiedAttribute(CHAR_SKILL_WEAPON_BEGIN + type)); + (rand() % (getModifiedAttribute(CHAR_SKILL_WEAPON_BEGIN + type) + 1)); damage.delta = getModifiedAttribute(BASE_ATTR_PHY_ATK_DELTA); damage.type = DAMAGE_PHYSICAL; damage.cth = getModifiedAttribute(BASE_ATTR_HIT) + |