mirror of
https://github.com/edubart/otclient.git
synced 2025-10-14 11:34:54 +02:00
Added new stats to the skills module, fixed minor market error.
* Added Offline Training information. * Added Regeneration Time information. * Added Speed information. * Added base stats/skills information (will show the players increase in a skill e.g. magic level 43 = 40 + 3 bonus from an item). * Fixed the game feature constants in const.lua. * Fixed a market error when logging out. * Added removeTooltip function.
This commit is contained in:
@@ -514,11 +514,14 @@ void Creature::setOutfit(const Outfit& outfit)
|
||||
|
||||
void Creature::setSpeed(uint16 speed)
|
||||
{
|
||||
uint16 oldSpeed = m_speed;
|
||||
m_speed = speed;
|
||||
|
||||
// speed can change while walking (utani hur, paralyze, etc..)
|
||||
if(m_walking)
|
||||
nextWalkUpdate();
|
||||
|
||||
callLuaField("onSpeedChange", speed, oldSpeed);
|
||||
}
|
||||
|
||||
void Creature::setSkull(uint8 skull)
|
||||
|
@@ -39,6 +39,7 @@ LocalPlayer::LocalPlayer()
|
||||
m_walkLockExpiration = 0;
|
||||
|
||||
m_skillsLevel.fill(-1);
|
||||
m_skillsBaseLevel.fill(-1);
|
||||
m_skillsLevelPercent.fill(-1);
|
||||
|
||||
m_health = -1;
|
||||
@@ -51,8 +52,13 @@ LocalPlayer::LocalPlayer()
|
||||
m_maxMana = -1;
|
||||
m_magicLevel = -1;
|
||||
m_magicLevelPercent = -1;
|
||||
m_baseMagicLevel = -1;
|
||||
m_soul = -1;
|
||||
m_stamina = -1;
|
||||
m_baseSpeed = -1;
|
||||
m_regenerationTime = -1;
|
||||
m_offlineTrainingTime = -1;
|
||||
m_totalCapacity = -1;
|
||||
}
|
||||
|
||||
void LocalPlayer::lockWalk(int millis)
|
||||
@@ -248,6 +254,21 @@ void LocalPlayer::setSkill(Otc::Skill skill, int level, int levelPercent)
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setBaseSkill(Otc::Skill skill, int baseLevel)
|
||||
{
|
||||
if(skill >= Otc::LastSkill) {
|
||||
g_logger.traceError("invalid skill");
|
||||
return;
|
||||
}
|
||||
|
||||
int oldBaseLevel = m_skillsBaseLevel[skill];
|
||||
if(baseLevel != oldBaseLevel) {
|
||||
m_skillsBaseLevel[skill] = baseLevel;
|
||||
|
||||
callLuaField("onBaseSkillChange", skill, baseLevel, oldBaseLevel);
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setHealth(double health, double maxHealth)
|
||||
{
|
||||
if(m_health != health || m_maxHealth != maxHealth) {
|
||||
@@ -277,6 +298,16 @@ void LocalPlayer::setFreeCapacity(double freeCapacity)
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setTotalCapacity(double totalCapacity)
|
||||
{
|
||||
if(m_totalCapacity != totalCapacity) {
|
||||
double oldTotalCapacity = m_totalCapacity;
|
||||
m_totalCapacity = totalCapacity;
|
||||
|
||||
callLuaField("onTotalCapacityChange", totalCapacity, oldTotalCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setExperience(double experience)
|
||||
{
|
||||
if(m_experience != experience) {
|
||||
@@ -323,6 +354,16 @@ void LocalPlayer::setMagicLevel(double magicLevel, double magicLevelPercent)
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setBaseMagicLevel(double baseMagicLevel)
|
||||
{
|
||||
if(m_baseMagicLevel != baseMagicLevel) {
|
||||
double oldBaseMagicLevel = m_baseMagicLevel;
|
||||
m_baseMagicLevel = baseMagicLevel;
|
||||
|
||||
callLuaField("onBaseMagicLevelChange", baseMagicLevel, oldBaseMagicLevel);
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setSoul(double soul)
|
||||
{
|
||||
if(m_soul != soul) {
|
||||
@@ -377,6 +418,36 @@ void LocalPlayer::setPremium(bool premium)
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setBaseSpeed(double baseSpeed)
|
||||
{
|
||||
if(m_baseSpeed != baseSpeed) {
|
||||
double oldBaseSpeed = m_baseSpeed;
|
||||
m_baseSpeed = baseSpeed;
|
||||
|
||||
callLuaField("onBaseSpeedChange", baseSpeed, oldBaseSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setRegenerationTime(double regenerationTime)
|
||||
{
|
||||
if(m_regenerationTime != regenerationTime) {
|
||||
double oldRegenerationTime = m_regenerationTime;
|
||||
m_regenerationTime = regenerationTime;
|
||||
|
||||
callLuaField("onRegenerationChange", regenerationTime, oldRegenerationTime);
|
||||
}
|
||||
}
|
||||
|
||||
void LocalPlayer::setOfflineTrainingTime(double offlineTrainingTime)
|
||||
{
|
||||
if(m_offlineTrainingTime != offlineTrainingTime) {
|
||||
double oldOfflineTrainingTime = m_offlineTrainingTime;
|
||||
m_offlineTrainingTime = offlineTrainingTime;
|
||||
|
||||
callLuaField("onOfflineTrainingChange", offlineTrainingTime, oldOfflineTrainingTime);
|
||||
}
|
||||
}
|
||||
|
||||
double LocalPlayer::getWalkPing()
|
||||
{
|
||||
if(m_lastWalkPings.empty())
|
||||
|
@@ -41,27 +41,35 @@ public:
|
||||
|
||||
void setStates(int states);
|
||||
void setSkill(Otc::Skill skill, int level, int levelPercent);
|
||||
void setBaseSkill(Otc::Skill skill, int baseLevel);
|
||||
void setHealth(double health, double maxHealth);
|
||||
void setFreeCapacity(double freeCapacity);
|
||||
void setTotalCapacity(double totalCapacity);
|
||||
void setExperience(double experience);
|
||||
void setLevel(double level, double levelPercent);
|
||||
void setMana(double mana, double maxMana);
|
||||
void setMagicLevel(double magicLevel, double magicLevelPercent);
|
||||
void setBaseMagicLevel(double baseMagicLevel);
|
||||
void setSoul(double soul);
|
||||
void setStamina(double stamina);
|
||||
void setKnown(bool known) { m_known = known; }
|
||||
void setInventoryItem(Otc::InventorySlot inventory, const ItemPtr& item);
|
||||
void setVocation(int vocation);
|
||||
void setPremium(bool premium);
|
||||
void setBaseSpeed(double baseSpeed);
|
||||
void setRegenerationTime(double regenerationTime);
|
||||
void setOfflineTrainingTime(double offlineTrainingTime);
|
||||
|
||||
int getStates() { return m_states; }
|
||||
int getSkillLevel(Otc::Skill skill) { return m_skillsLevel[skill]; }
|
||||
int getSkillBaseLevel(Otc::Skill skill) { return m_skillsBaseLevel[skill]; }
|
||||
int getSkillLevelPercent(Otc::Skill skill) { return m_skillsLevelPercent[skill]; }
|
||||
int getVocation() { return m_vocation; }
|
||||
double getWalkPing();
|
||||
double getHealth() { return m_health; }
|
||||
double getMaxHealth() { return m_maxHealth; }
|
||||
double getFreeCapacity() { return m_freeCapacity; }
|
||||
double getTotalCapacity() { return m_totalCapacity; }
|
||||
double getExperience() { return m_experience; }
|
||||
double getLevel() { return m_level; }
|
||||
double getLevelPercent() { return m_levelPercent; }
|
||||
@@ -69,8 +77,12 @@ public:
|
||||
double getMaxMana() { return m_maxMana; }
|
||||
double getMagicLevel() { return m_magicLevel; }
|
||||
double getMagicLevelPercent() { return m_magicLevelPercent; }
|
||||
double getBaseMagicLevel() { return m_baseMagicLevel; }
|
||||
double getSoul() { return m_soul; }
|
||||
double getStamina() { return m_stamina; }
|
||||
double getBaseSpeed() { return m_baseSpeed; }
|
||||
double getRegenerationTime() { return m_regenerationTime; }
|
||||
double getOfflineTrainingTime() { return m_offlineTrainingTime; }
|
||||
ItemPtr getInventoryItem(Otc::InventorySlot inventory) { return m_inventoryItems[inventory]; }
|
||||
|
||||
bool hasSight(const Position& pos);
|
||||
@@ -111,6 +123,7 @@ private:
|
||||
std::deque<int> m_lastWalkPings;
|
||||
|
||||
std::array<int, Otc::LastSkill> m_skillsLevel;
|
||||
std::array<int, Otc::LastSkill> m_skillsBaseLevel;
|
||||
std::array<int, Otc::LastSkill> m_skillsLevelPercent;
|
||||
|
||||
bool m_known;
|
||||
@@ -121,6 +134,7 @@ private:
|
||||
double m_health;
|
||||
double m_maxHealth;
|
||||
double m_freeCapacity;
|
||||
double m_totalCapacity;
|
||||
double m_experience;
|
||||
double m_level;
|
||||
double m_levelPercent;
|
||||
@@ -128,8 +142,12 @@ private:
|
||||
double m_maxMana;
|
||||
double m_magicLevel;
|
||||
double m_magicLevelPercent;
|
||||
double m_baseMagicLevel;
|
||||
double m_soul;
|
||||
double m_stamina;
|
||||
double m_baseSpeed;
|
||||
double m_regenerationTime;
|
||||
double m_offlineTrainingTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@@ -383,6 +383,7 @@ void OTClient::registerLuaFunctions()
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("setInventoryItem", &LocalPlayer::setInventoryItem);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getStates", &LocalPlayer::getStates);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getSkillLevel", &LocalPlayer::getSkillLevel);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getSkillBaseLevel", &LocalPlayer::getSkillBaseLevel);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getSkillLevelPercent", &LocalPlayer::getSkillLevelPercent);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getHealth", &LocalPlayer::getHealth);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getMaxHealth", &LocalPlayer::getMaxHealth);
|
||||
@@ -396,6 +397,11 @@ void OTClient::registerLuaFunctions()
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getMagicLevelPercent", &LocalPlayer::getMagicLevelPercent);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getSoul", &LocalPlayer::getSoul);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getStamina", &LocalPlayer::getStamina);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getOfflineTrainingTime", &LocalPlayer::getOfflineTrainingTime);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getRegenerationTime", &LocalPlayer::getRegenerationTime);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getBaseSpeed", &LocalPlayer::getBaseSpeed);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getBaseMagicLevel", &LocalPlayer::getBaseMagicLevel);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getTotalCapacity", &LocalPlayer::getTotalCapacity);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getInventoryItem", &LocalPlayer::getInventoryItem);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("getVocation", &LocalPlayer::getVocation);
|
||||
g_lua.bindClassMemberFunction<LocalPlayer>("isPremium", &LocalPlayer::isPremium);
|
||||
|
@@ -876,7 +876,7 @@ void ProtocolGame::parsePlayerStats(const InputMessagePtr& msg)
|
||||
else
|
||||
freeCapacity = msg->getU16() / 100.0;
|
||||
|
||||
double totalCapacity;
|
||||
double totalCapacity = 0;
|
||||
if(g_game.getFeature(Otc::GameTotalCapacity))
|
||||
totalCapacity = msg->getU32() / 100.0;
|
||||
|
||||
@@ -892,42 +892,57 @@ void ProtocolGame::parsePlayerStats(const InputMessagePtr& msg)
|
||||
double maxMana = msg->getU16();
|
||||
double magicLevel = msg->getU8();
|
||||
|
||||
double baseMagicLevel;
|
||||
if(g_game.getFeature(Otc::GameSkillsBase))
|
||||
msg->getU8(); // base magic level
|
||||
baseMagicLevel = msg->getU8();
|
||||
else
|
||||
baseMagicLevel = magicLevel;
|
||||
|
||||
double magicLevelPercent = msg->getU8();
|
||||
double soul = msg->getU8();
|
||||
double stamina = msg->getU16();
|
||||
|
||||
double baseSpeed = 0;
|
||||
if(g_game.getFeature(Otc::GameSkillsBase))
|
||||
baseSpeed = msg->getU16();
|
||||
|
||||
double regeneration = 0;
|
||||
if(g_game.getFeature(Otc::GamePlayerRegenerationTime))
|
||||
regeneration = msg->getU16();
|
||||
|
||||
double training = 0;
|
||||
if(g_game.getFeature(Otc::GameOfflineTrainingTime))
|
||||
training = msg->getU16();
|
||||
|
||||
m_localPlayer->setHealth(health, maxHealth);
|
||||
m_localPlayer->setFreeCapacity(freeCapacity);
|
||||
m_localPlayer->setTotalCapacity(totalCapacity);
|
||||
m_localPlayer->setExperience(experience);
|
||||
m_localPlayer->setLevel(level, levelPercent);
|
||||
m_localPlayer->setMana(mana, maxMana);
|
||||
m_localPlayer->setMagicLevel(magicLevel, magicLevelPercent);
|
||||
m_localPlayer->setBaseMagicLevel(baseMagicLevel);
|
||||
m_localPlayer->setStamina(stamina);
|
||||
m_localPlayer->setSoul(soul);
|
||||
|
||||
if(g_game.getFeature(Otc::GameSkillsBase))
|
||||
msg->getU16(); // base speed
|
||||
|
||||
if(g_game.getFeature(Otc::GamePlayerRegenerationTime))
|
||||
msg->getU16();
|
||||
|
||||
if(g_game.getFeature(Otc::GameOfflineTrainingTime))
|
||||
msg->getU16();
|
||||
m_localPlayer->setBaseSpeed(baseSpeed);
|
||||
m_localPlayer->setRegenerationTime(regeneration);
|
||||
m_localPlayer->setOfflineTrainingTime(training);
|
||||
}
|
||||
|
||||
void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg)
|
||||
{
|
||||
for(int skill = 0; skill < Otc::LastSkill; skill++) {
|
||||
int level = msg->getU8();
|
||||
int baseLevel;
|
||||
if(g_game.getFeature(Otc::GameSkillsBase))
|
||||
msg->getU8(); // base
|
||||
baseLevel = msg->getU8(); // base
|
||||
else
|
||||
baseLevel = level;
|
||||
|
||||
int levelPercent = msg->getU8();
|
||||
|
||||
m_localPlayer->setSkill((Otc::Skill)skill, level, levelPercent);
|
||||
m_localPlayer->setBaseSkill((Otc::Skill)skill, baseLevel);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user