mirror of
https://github.com/ErikasKontenis/SabrehavenServer.git
synced 2025-10-14 06:34:55 +02:00
little introduce drown and fix some monsters
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -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;
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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*);
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user