summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoderic Morris <roderic@ccs.neu.edu>2008-07-28 22:03:03 +0000
committerRoderic Morris <roderic@ccs.neu.edu>2008-07-28 22:03:03 +0000
commit0e0986323c6ae8aed1e9efcf8663c11c0bdecad1 (patch)
tree436eaa3b0f1f429171436890279f26658b0c2181 /src
parent30f5a677644fc34fc7e8b3493f7af42056c3285f (diff)
downloadmanaserv-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.cpp14
-rw-r--r--src/chat-server/guild.cpp10
-rw-r--r--src/chat-server/guild.hpp7
-rw-r--r--src/game-server/being.cpp5
-rw-r--r--src/game-server/character.cpp2
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) +