little introduce drown and fix some monsters

This commit is contained in:
ErikasKontenis
2019-12-04 15:48:47 +02:00
parent 072fc24a87
commit a28bfd7171
56 changed files with 2788 additions and 4 deletions

View File

@@ -82,6 +82,9 @@ CombatType_t Combat::ConditionToDamageType(ConditionType_t type)
case CONDITION_POISON:
return COMBAT_EARTHDAMAGE;
case CONDITION_DROWN:
return COMBAT_DROWNDAMAGE;
default:
break;
}
@@ -101,6 +104,9 @@ ConditionType_t Combat::DamageToConditionType(CombatType_t type)
case COMBAT_EARTHDAMAGE:
return CONDITION_POISON;
case COMBAT_DROWNDAMAGE:
return CONDITION_DROWN;
default:
return CONDITION_NONE;
}

View File

@@ -131,6 +131,7 @@ Condition* Condition::createCondition(ConditionId_t id, ConditionType_t type, in
case CONDITION_POISON:
case CONDITION_FIRE:
case CONDITION_ENERGY:
case CONDITION_DROWN:
return new ConditionDamage(id, type, subId);
case CONDITION_HASTE:
@@ -994,6 +995,10 @@ uint32_t ConditionDamage::getIcons() const
icons |= ICON_POISON;
break;
case CONDITION_DROWN:
icons |= ICON_DROWNING;
break;
default:
break;
}

View File

@@ -171,7 +171,8 @@ enum Icons_t {
ICON_MANASHIELD = 1 << 4,
ICON_PARALYZE = 1 << 5,
ICON_HASTE = 1 << 6,
ICON_SWORDS = 1 << 7
ICON_SWORDS = 1 << 7,
ICON_DROWNING = 1 << 8,
};
enum WeaponType_t : uint8_t {

View File

@@ -1026,6 +1026,9 @@ void Creature::onTickCondition(ConditionType_t type, bool& bRemove)
case CONDITION_POISON:
bRemove = (field->getCombatType() != COMBAT_EARTHDAMAGE);
break;
case CONDITION_DROWN:
bRemove = (field->getCombatType() != COMBAT_DROWNDAMAGE);
break;
default:
break;
}

View File

@@ -102,8 +102,9 @@ enum CombatType_t : uint16_t {
COMBAT_LIFEDRAIN = 1 << 5,
COMBAT_MANADRAIN = 1 << 6,
COMBAT_HEALING = 1 << 7,
COMBAT_DROWNDAMAGE = 1 << 8,
COMBAT_COUNT = 9
COMBAT_COUNT = 10
};
enum CombatParam_t {
@@ -249,6 +250,7 @@ enum ConditionType_t {
CONDITION_EXHAUST = 1 << 17,
CONDITION_PACIFIED = 1 << 18,
CONDITION_AGGRESSIVE = 1 << 19,
CONDITION_DROWN = 1 << 20,
};
enum ConditionId_t : int8_t {

View File

@@ -3391,6 +3391,12 @@ void Game::combatGetTypeInfo(CombatType_t combatType, Creature* target, TextColo
effect = CONST_ME_MAGIC_RED;
break;
}
case COMBAT_DROWNDAMAGE: {
color = TEXTCOLOR_LIGHTBLUE;
effect = CONST_ME_LOSEENERGY;
break;
}
default: {
color = TEXTCOLOR_NONE;
effect = CONST_ME_NONE;

View File

@@ -1069,6 +1069,7 @@ void LuaScriptInterface::registerFunctions()
registerEnum(COMBAT_ENERGYDAMAGE)
registerEnum(COMBAT_EARTHDAMAGE)
registerEnum(COMBAT_FIREDAMAGE)
registerEnum(COMBAT_DROWNDAMAGE)
registerEnum(COMBAT_UNDEFINEDDAMAGE)
registerEnum(COMBAT_LIFEDRAIN)
registerEnum(COMBAT_MANADRAIN)
@@ -1091,6 +1092,7 @@ void LuaScriptInterface::registerFunctions()
registerEnum(CONDITION_POISON)
registerEnum(CONDITION_FIRE)
registerEnum(CONDITION_ENERGY)
registerEnum(CONDITION_DROWN)
registerEnum(CONDITION_HASTE)
registerEnum(CONDITION_PARALYZE)
registerEnum(CONDITION_OUTFIT)

View File

@@ -392,6 +392,8 @@ bool Monsters::deserializeSpell(const pugi::xml_node& node, spellBlock_t& sb, co
combat->setParam(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE);
} else if (tmpName == "energy") {
combat->setParam(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE);
} else if (tmpName == "drown") {
combat->setParam(COMBAT_PARAM_TYPE, COMBAT_DROWNDAMAGE);
} else if (tmpName == "lifedrain") {
combat->setParam(COMBAT_PARAM_TYPE, COMBAT_LIFEDRAIN);
} else if (tmpName == "manadrain") {
@@ -480,7 +482,7 @@ bool Monsters::deserializeSpell(const pugi::xml_node& node, spellBlock_t& sb, co
} else if (tmpName == "firecondition" || tmpName == "energycondition" ||
tmpName == "earthcondition" || tmpName == "poisoncondition" ||
tmpName == "icecondition" || tmpName == "freezecondition" ||
tmpName == "physicalcondition") {
tmpName == "physicalcondition" || tmpName == "drowncondition") {
ConditionType_t conditionType = CONDITION_NONE;
if (tmpName == "firecondition") {
@@ -489,6 +491,8 @@ bool Monsters::deserializeSpell(const pugi::xml_node& node, spellBlock_t& sb, co
conditionType = CONDITION_POISON;
} else if (tmpName == "energycondition") {
conditionType = CONDITION_ENERGY;
} else if (tmpName == "drowncondition") {
conditionType = CONDITION_DROWN;
}
int32_t cycle = 0;
@@ -828,6 +832,9 @@ bool Monsters::loadMonster(const std::string& file, const std::string& monsterNa
} else if (tmpStrValue == "fire") {
mType->info.damageImmunities |= COMBAT_FIREDAMAGE;
mType->info.conditionImmunities |= CONDITION_FIRE;
} else if (tmpStrValue == "drown") {
mType->info.damageImmunities |= COMBAT_DROWNDAMAGE;
mType->info.conditionImmunities |= CONDITION_DROWN;
} else if (tmpStrValue == "poison" ||
tmpStrValue == "earth") {
mType->info.damageImmunities |= COMBAT_EARTHDAMAGE;
@@ -861,6 +868,11 @@ bool Monsters::loadMonster(const std::string& file, const std::string& monsterNa
mType->info.damageImmunities |= COMBAT_FIREDAMAGE;
mType->info.conditionImmunities |= CONDITION_FIRE;
}
} else if ((attr = immunityNode.attribute("drown"))) {
if (attr.as_bool()) {
mType->info.damageImmunities |= COMBAT_DROWNDAMAGE;
mType->info.conditionImmunities |= CONDITION_DROWN;
}
} else if ((attr = immunityNode.attribute("poison")) || (attr = immunityNode.attribute("earth"))) {
if (attr.as_bool()) {
mType->info.damageImmunities |= COMBAT_EARTHDAMAGE;

View File

@@ -2951,6 +2951,10 @@ void Player::onAddCombatCondition(ConditionType_t type)
sendTextMessage(MESSAGE_STATUS_DEFAULT, "You are poisoned.");
break;
case CONDITION_DROWN:
sendTextMessage(MESSAGE_STATUS_SMALL, "You are drowning.");
break;
case CONDITION_PARALYZE:
sendTextMessage(MESSAGE_STATUS_DEFAULT, "You are paralyzed.");
break;

View File

@@ -398,6 +398,7 @@ bool Spell::configureSpell(const pugi::xml_node& node)
"firecondition",
"poisoncondition",
"energycondition",
"drowncondition",
};
//static size_t size = sizeof(reservedList) / sizeof(const char*);

View File

@@ -672,6 +672,7 @@ ShootTypeNames shootTypeNames[] = {
CombatTypeNames combatTypeNames[] = {
{"physical", COMBAT_PHYSICALDAMAGE},
{"energy", COMBAT_ENERGYDAMAGE},
{"drown", COMBAT_DROWNDAMAGE},
{"earth", COMBAT_EARTHDAMAGE},
{"poison", COMBAT_EARTHDAMAGE},
{"fire", COMBAT_FIREDAMAGE},
@@ -914,6 +915,8 @@ size_t combatTypeToIndex(CombatType_t combatType)
return 6;
case COMBAT_HEALING:
return 7;
case COMBAT_DROWNDAMAGE:
return 8;
default:
return 0;
}