Skip to content

Commit

Permalink
mining test
Browse files Browse the repository at this point in the history
  • Loading branch information
vllworldbuilding committed Oct 24, 2024
1 parent 5c4979e commit 6b90187
Show file tree
Hide file tree
Showing 14 changed files with 54 additions and 20 deletions.
2 changes: 2 additions & 0 deletions data/scripts/talkactions/god/add_skill.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ local function getSkillId(skillName)
return SKILL_SHIELD
elseif skillName:sub(1, 4) == "fish" then
return SKILL_FISHING
elseif skillName:sub(1, 4) == "mining" then
return SKILL_MINING
else
return SKILL_FIST
end
Expand Down
10 changes: 10 additions & 0 deletions src/creatures/combat/condition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,16 @@ bool ConditionAttributes::setParam(ConditionParam_t param, int32_t value) {
return true;
}

case CONDITION_PARAM_SKILL_MINING: {
skills[SKILL_MINING] = value;
return true;
}

case CONDITION_PARAM_SKILL_MININGPERCENT: {
skillsPercent[SKILL_MINING] = value;
return true;
}

case CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE: {
skills[SKILL_CRITICAL_HIT_CHANCE] = value;
return true;
Expand Down
22 changes: 13 additions & 9 deletions src/creatures/creatures_definitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ enum ConditionParam_t {
CONDITION_PARAM_INCREASE_MANADRAINPERCENT = 80,
CONDITION_PARAM_INCREASE_DROWNPERCENT = 81,
CONDITION_PARAM_CHARM_CHANCE_MODIFIER = 82,
CONDITION_PARAM_SKILL_MINING = 83,
CONDITION_PARAM_SKILL_MININGPERCENT = 84,
};

enum stats_t {
Expand Down Expand Up @@ -412,15 +414,17 @@ enum skills_t : int8_t {
SKILL_DISTANCE = 4,
SKILL_SHIELD = 5,
SKILL_FISHING = 6,
SKILL_CRITICAL_HIT_CHANCE = 7,
SKILL_CRITICAL_HIT_DAMAGE = 8,
SKILL_LIFE_LEECH_CHANCE = 9,
SKILL_LIFE_LEECH_AMOUNT = 10,
SKILL_MANA_LEECH_CHANCE = 11,
SKILL_MANA_LEECH_AMOUNT = 12,

SKILL_MAGLEVEL = 13,
SKILL_LEVEL = 14,
SKILL_MINING = 7,
SKILL_CRITICAL_HIT_CHANCE = 8,
SKILL_CRITICAL_HIT_DAMAGE = 9,
SKILL_LIFE_LEECH_CHANCE = 10,
SKILL_LIFE_LEECH_AMOUNT = 11,
SKILL_MANA_LEECH_CHANCE = 12,
SKILL_MANA_LEECH_AMOUNT = 13,

SKILL_MAGLEVEL = 14,
SKILL_LEVEL = 15,


SKILL_FIRST = SKILL_FIST,
SKILL_LAST = SKILL_MANA_LEECH_AMOUNT
Expand Down
2 changes: 2 additions & 0 deletions src/creatures/players/imbuements/imbuements.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,8 @@ bool Imbuements::loadFromXml(bool /* reloading */) {
} else if (tmpStrValue == "manaleech") {
usenormalskill = 3;
skillId = SKILL_MANA_LEECH_AMOUNT;
} else if (tmpStrValue == "mining") {
skillId = SKILL_MINING;
} else {
g_logger().warn("Unknow skill name {} in imbuement name {}", tmpStrValue, imbuement.name);
continue;
Expand Down
4 changes: 2 additions & 2 deletions src/io/functions/iologindata_load_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,8 +298,8 @@ void IOLoginDataLoad::loadPlayerSkill(std::shared_ptr<Player> player, DBResult_p
return;
}

static const std::array<std::string, 13> skillNames = { "skill_fist", "skill_club", "skill_sword", "skill_axe", "skill_dist", "skill_shielding", "skill_fishing", "skill_critical_hit_chance", "skill_critical_hit_damage", "skill_life_leech_chance", "skill_life_leech_amount", "skill_mana_leech_chance", "skill_mana_leech_amount" };
static const std::array<std::string, 13> skillNameTries = { "skill_fist_tries", "skill_club_tries", "skill_sword_tries", "skill_axe_tries", "skill_dist_tries", "skill_shielding_tries", "skill_fishing_tries", "skill_critical_hit_chance_tries", "skill_critical_hit_damage_tries", "skill_life_leech_chance_tries", "skill_life_leech_amount_tries", "skill_mana_leech_chance_tries", "skill_mana_leech_amount_tries" };
static const std::array<std::string, 14> skillNames = { "skill_fist", "skill_club", "skill_sword", "skill_axe", "skill_dist", "skill_shielding", "skill_fishing", "skill_mining", "skill_critical_hit_chance", "skill_critical_hit_damage", "skill_life_leech_chance", "skill_life_leech_amount", "skill_mana_leech_chance", "skill_mana_leech_amount" };
static const std::array<std::string, 14> skillNameTries = { "skill_fist_tries", "skill_club_tries", "skill_sword_tries", "skill_axe_tries", "skill_dist_tries", "skill_shielding_tries", "skill_fishing_tries", "skill_mining_tries", "skill_critical_hit_chance_tries", "skill_critical_hit_damage_tries", "skill_life_leech_chance_tries", "skill_life_leech_amount_tries", "skill_mana_leech_chance_tries", "skill_mana_leech_amount_tries" };
for (size_t i = 0; i < skillNames.size(); ++i) {
uint16_t skillLevel = result->getNumber<uint16_t>(skillNames[i]);
uint64_t skillTries = result->getNumber<uint64_t>(skillNameTries[i]);
Expand Down
2 changes: 2 additions & 0 deletions src/io/functions/iologindata_save_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ bool IOLoginDataSave::savePlayerFirst(std::shared_ptr<Player> player) {
query << "`skill_shielding_tries` = " << player->skills[SKILL_SHIELD].tries << ",";
query << "`skill_fishing` = " << player->skills[SKILL_FISHING].level << ",";
query << "`skill_fishing_tries` = " << player->skills[SKILL_FISHING].tries << ",";
query << "`skill_mining` = " << player->skills[SKILL_MINING].level << ",";
query << "`skill_mining_tries` = " << player->skills[SKILL_MINING].tries << ",";
query << "`skill_critical_hit_chance` = " << player->skills[SKILL_CRITICAL_HIT_CHANCE].level << ",";
query << "`skill_critical_hit_chance_tries` = " << player->skills[SKILL_CRITICAL_HIT_CHANCE].tries << ",";
query << "`skill_critical_hit_damage` = " << player->skills[SKILL_CRITICAL_HIT_DAMAGE].level << ",";
Expand Down
2 changes: 1 addition & 1 deletion src/io/iologindata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ void IOLoginData::updateOnlineStatus(uint32_t guid, bool login) {
Database::getInstance().executeQuery(query.str());
}

// The boolean "disableIrrelevantInfo" will deactivate the loading of information that is not relevant to the preload, for example, forge, bosstiary, etc. None of this we need to access if the player is offline
// XXXXX LOADPLAYERBYID The boolean "disableIrrelevantInfo" will deactivate the loading of information that is not relevant to the preload, for example, forge, bosstiary, etc. None of this we need to access if the player is offline
bool IOLoginData::loadPlayerById(std::shared_ptr<Player> player, uint32_t id, bool disableIrrelevantInfo /* = true*/) {
Database &db = Database::getInstance();
std::ostringstream query;
Expand Down
2 changes: 2 additions & 0 deletions src/items/functions/item/item_parse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,8 @@ void ItemParse::parseSkills(const std::string &tmpStrValue, pugi::xml_attribute
itemType.getAbilities().skills[SKILL_DISTANCE] = pugi::cast<int32_t>(valueAttribute.value());
} else if (stringValue == "skillfish") {
itemType.getAbilities().skills[SKILL_FISHING] = pugi::cast<int32_t>(valueAttribute.value());
} else if (stringValue == "skillmining") {
itemType.getAbilities().skills[SKILL_MINING] = pugi::cast<int32_t>(valueAttribute.value());
} else if (stringValue == "skillshield") {
itemType.getAbilities().skills[SKILL_SHIELD] = pugi::cast<int32_t>(valueAttribute.value());
} else if (stringValue == "skillfist") {
Expand Down
1 change: 1 addition & 0 deletions src/items/functions/item/item_parse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ const phmap::flat_hash_map<std::string, ItemParseAttributes_t> ItemParseAttribut
{ "skillclub", ITEM_PARSE_SKILLCLUB },
{ "skilldist", ITEM_PARSE_SKILLDIST },
{ "skillfish", ITEM_PARSE_SKILLFISH },
{ "skillmining", ITEM_PARSE_SKILLMINING },
{ "skillshield", ITEM_PARSE_SKILLSHIELD },
{ "skillfist", ITEM_PARSE_SKILLFIST },
{ "criticalhitchance", ITEM_PARSE_CRITICALHITCHANCE },
Expand Down
10 changes: 5 additions & 5 deletions src/items/item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1238,7 +1238,7 @@ Item::getDescriptions(const ItemType &it, std::shared_ptr<Item> item /*= nullptr
skillBoost = true;
}

for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!it.abilities->skills[i]) {
continue;
}
Expand Down Expand Up @@ -1646,7 +1646,7 @@ Item::getDescriptions(const ItemType &it, std::shared_ptr<Item> item /*= nullptr
skillBoost = true;
}

for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!it.abilities->skills[i]) {
continue;
}
Expand Down Expand Up @@ -2098,7 +2098,7 @@ std::string Item::parseShowAttributesDescription(std::shared_ptr<Item> item, con
}

if (itemType.abilities) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!itemType.abilities->skills[i]) {
continue;
}
Expand Down Expand Up @@ -2396,7 +2396,7 @@ std::string Item::getDescription(const ItemType &it, int32_t lookDistance, std::
}

if (it.abilities) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!it.abilities->skills[i]) {
continue;
}
Expand Down Expand Up @@ -2664,7 +2664,7 @@ std::string Item::getDescription(const ItemType &it, int32_t lookDistance, std::
}

if (it.abilities) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!it.abilities->skills[i]) {
continue;
}
Expand Down
2 changes: 2 additions & 0 deletions src/items/items_definitions.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ enum ReturnValue {
RETURNVALUE_NOTENOUGHDISTANCELEVEL,
RETURNVALUE_NOTENOUGHSHIELDLEVEL,
RETURNVALUE_NOTENOUGHFISHLEVEL,
RETURNVALUE_NOTENOUGHMININGLEVEL,
RETURNVALUE_REWARDCHESTISEMPTY,
RETURNVALUE_REWARDCONTAINERISEMPTY,
RETURNVALUE_CONTACTADMINISTRATOR,
Expand Down Expand Up @@ -538,6 +539,7 @@ enum ItemParseAttributes_t {
ITEM_PARSE_SKILLCLUB,
ITEM_PARSE_SKILLDIST,
ITEM_PARSE_SKILLFISH,
ITEM_PARSE_SKILLMINING,
ITEM_PARSE_SKILLSHIELD,
ITEM_PARSE_SKILLFIST,
ITEM_PARSE_CRITICALHITCHANCE,
Expand Down
3 changes: 3 additions & 0 deletions src/lua/functions/core/game/lua_enums.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ void LuaEnums::initConditionParamEnums(lua_State* L) {
registerEnum(L, CONDITION_PARAM_SKILL_DISTANCE);
registerEnum(L, CONDITION_PARAM_SKILL_SHIELD);
registerEnum(L, CONDITION_PARAM_SKILL_FISHING);
registerEnum(L, CONDITION_PARAM_SKILL_MINING);
registerEnum(L, CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE);
registerEnum(L, CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE);
registerEnum(L, CONDITION_PARAM_SKILL_LIFE_LEECH_CHANCE);
Expand All @@ -396,6 +397,7 @@ void LuaEnums::initConditionParamEnums(lua_State* L) {
registerEnum(L, CONDITION_PARAM_SKILL_DISTANCEPERCENT);
registerEnum(L, CONDITION_PARAM_SKILL_SHIELDPERCENT);
registerEnum(L, CONDITION_PARAM_SKILL_FISHINGPERCENT);
registerEnum(L, CONDITION_PARAM_SKILL_MININGPERCENT);
registerEnum(L, CONDITION_PARAM_BUFF_SPELL);
registerEnum(L, CONDITION_PARAM_SUBID);
registerEnum(L, CONDITION_PARAM_FIELD);
Expand Down Expand Up @@ -960,6 +962,7 @@ void LuaEnums::initSkillEnums(lua_State* L) {
registerEnum(L, SKILL_DISTANCE);
registerEnum(L, SKILL_SHIELD);
registerEnum(L, SKILL_FISHING);
registerEnum(L, SKILL_MINING);
registerEnum(L, SKILL_CRITICAL_HIT_CHANCE);
registerEnum(L, SKILL_CRITICAL_HIT_DAMAGE);
registerEnum(L, SKILL_LIFE_LEECH_CHANCE);
Expand Down
6 changes: 3 additions & 3 deletions src/server/network/protocol/protocolgame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5835,7 +5835,7 @@ void ProtocolGame::sendMarketDetail(uint16_t itemId, uint8_t tier) {
std::ostringstream ss;
bool separator = false;

for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; i++) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; i++) {
if (!it.abilities->skills[i]) {
continue;
}
Expand Down Expand Up @@ -7794,7 +7794,7 @@ void ProtocolGame::AddPlayerSkills(NetworkMessage &msg) {
msg.addByte(0xA1);

if (oldProtocol) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; ++i) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; ++i) {
skills_t skill = static_cast<skills_t>(i);
msg.add<uint16_t>(std::min<int32_t>(player->getSkillLevel(skill), std::numeric_limits<uint16_t>::max()));
msg.add<uint16_t>(player->getBaseSkill(skill));
Expand All @@ -7806,7 +7806,7 @@ void ProtocolGame::AddPlayerSkills(NetworkMessage &msg) {
msg.add<uint16_t>(player->getLoyaltyMagicLevel());
msg.add<uint16_t>(player->getMagicLevelPercent() * 100);

for (uint8_t i = SKILL_FIRST; i <= SKILL_FISHING; ++i) {
for (uint8_t i = SKILL_FIRST; i <= SKILL_MINING; ++i) {
skills_t skill = static_cast<skills_t>(i);
msg.add<uint16_t>(std::min<int32_t>(player->getSkillLevel(skill), std::numeric_limits<uint16_t>::max()));
msg.add<uint16_t>(player->getBaseSkill(skill));
Expand Down
6 changes: 6 additions & 0 deletions src/utils/tools.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,9 @@ std::string getSkillName(uint8_t skillid) {
case SKILL_FISHING:
return "fishing";

case SKILL_MINING:
return "mining";

case SKILL_CRITICAL_HIT_CHANCE:
return "critical hit chance";

Expand Down Expand Up @@ -1487,6 +1490,9 @@ const char* getReturnMessage(ReturnValue value) {
case RETURNVALUE_NOTENOUGHFISHLEVEL:
return "You do not have enough fishing level";

case RETURNVALUE_NOTENOUGHMININGLEVEL:
return "You do not have enough mining level";

case RETURNVALUE_NOTPOSSIBLE:
return "Sorry, not possible.";

Expand Down

0 comments on commit 6b90187

Please sign in to comment.