mirror of
https://github.com/EQEmu/Server.git
synced 2026-08-27 02:29:43 +00:00
[Spells] Fixed issue with permanent Illusions not being consistent when zoning. (#1876)
* start of work * updates * [Spells] Fixed issue with permanent Illusions not being consistent when zoning.
This commit is contained in:
+117
-108
@@ -1397,114 +1397,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
||||
#ifdef SPELL_EFFECT_SPAM
|
||||
snprintf(effect_desc, _EDLEN, "Illusion: race %d", effect_value);
|
||||
#endif
|
||||
// Gender Illusions
|
||||
if(spell.base_value[i] == -1) {
|
||||
// Specific Gender Illusions
|
||||
if(spell_id == 1732 || spell_id == 1731) {
|
||||
int specific_gender = -1;
|
||||
// Male
|
||||
if(spell_id == 1732)
|
||||
specific_gender = 0;
|
||||
// Female
|
||||
else if (spell_id == 1731)
|
||||
specific_gender = 1;
|
||||
if(specific_gender > -1) {
|
||||
if(caster && caster->GetTarget()) {
|
||||
SendIllusionPacket
|
||||
(
|
||||
caster->GetTarget()->GetBaseRace(),
|
||||
specific_gender,
|
||||
caster->GetTarget()->GetTexture()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Change Gender Illusions
|
||||
else {
|
||||
if(caster && caster->GetTarget()) {
|
||||
int opposite_gender = 0;
|
||||
if(caster->GetTarget()->GetGender() == 0)
|
||||
opposite_gender = 1;
|
||||
|
||||
SendIllusionPacket
|
||||
(
|
||||
caster->GetTarget()->GetRace(),
|
||||
opposite_gender,
|
||||
caster->GetTarget()->GetTexture()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Racial Illusions
|
||||
else {
|
||||
auto gender_id = (
|
||||
spell.max_value[i] > 0 &&
|
||||
(
|
||||
spell.max_value[i] != 3 ||
|
||||
spell.limit_value[i] == 0
|
||||
) ?
|
||||
(spell.max_value[i] - 1) :
|
||||
Mob::GetDefaultGender(spell.base_value[i], GetGender())
|
||||
);
|
||||
|
||||
auto race_size = GetRaceGenderDefaultHeight(
|
||||
spell.base_value[i],
|
||||
gender_id
|
||||
);
|
||||
|
||||
if (spell.base_value[i] != RACE_ELEMENTAL_75) {
|
||||
if (spell.max_value[i] > 0) {
|
||||
if (spell.limit_value[i] == 0) {
|
||||
SendIllusionPacket(
|
||||
spell.base_value[i],
|
||||
gender_id
|
||||
);
|
||||
} else {
|
||||
if (spell.max_value[i] != 3) {
|
||||
SendIllusionPacket(
|
||||
spell.base_value[i],
|
||||
gender_id,
|
||||
spell.limit_value[i],
|
||||
spell.max_value[i]
|
||||
);
|
||||
} else {
|
||||
SendIllusionPacket(
|
||||
spell.base_value[i],
|
||||
gender_id,
|
||||
spell.limit_value[i],
|
||||
spell.limit_value[i]
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
SendIllusionPacket(
|
||||
spell.base_value[i],
|
||||
gender_id,
|
||||
spell.limit_value[i],
|
||||
spell.max_value[i]
|
||||
);
|
||||
}
|
||||
|
||||
} else {
|
||||
SendIllusionPacket(
|
||||
spell.base_value[i],
|
||||
gender_id,
|
||||
spell.limit_value[i]
|
||||
);
|
||||
}
|
||||
SendAppearancePacket(AT_Size, race_size);
|
||||
}
|
||||
|
||||
for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++) {
|
||||
SendWearChange(x);
|
||||
}
|
||||
|
||||
if (caster == this && spell.id != 287 && spell.id != 601 &&
|
||||
(spellbonuses.IllusionPersistence || aabonuses.IllusionPersistence ||
|
||||
itembonuses.IllusionPersistence))
|
||||
buffs[buffslot].persistant_buff = 1;
|
||||
else
|
||||
buffs[buffslot].persistant_buff = 0;
|
||||
ApplySpellEffectIllusion(spell_id, caster, buffslot, spells[spell_id].base_value[i], spells[spell_id].limit_value[i], spells[spell_id].max_value[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -8922,3 +8815,119 @@ void Mob::SetProcLimitTimer(int32 base_spell_id, uint32 proc_reuse_time, int pro
|
||||
}
|
||||
}
|
||||
|
||||
void Mob::ApplySpellEffectIllusion(int32 spell_id, Mob *caster, int buffslot, int base, int limit, int max)
|
||||
{
|
||||
// Gender Illusions
|
||||
if (base == -1) {
|
||||
// Specific Gender Illusions
|
||||
if (spell_id == SPELL_ILLUSION_MALE || spell_id == SPELL_ILLUSION_FEMALE) {
|
||||
int specific_gender = -1;
|
||||
// Male
|
||||
if (spell_id == SPELL_ILLUSION_MALE)
|
||||
specific_gender = 0;
|
||||
// Female
|
||||
else if (spell_id == SPELL_ILLUSION_FEMALE)
|
||||
specific_gender = 1;
|
||||
if (specific_gender > -1) {
|
||||
if (caster && caster->GetTarget()) {
|
||||
SendIllusionPacket
|
||||
(
|
||||
caster->GetTarget()->GetBaseRace(),
|
||||
specific_gender,
|
||||
caster->GetTarget()->GetTexture()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Change Gender Illusions
|
||||
else {
|
||||
if (caster && caster->GetTarget()) {
|
||||
int opposite_gender = 0;
|
||||
if (caster->GetTarget()->GetGender() == 0)
|
||||
opposite_gender = 1;
|
||||
|
||||
SendIllusionPacket
|
||||
(
|
||||
caster->GetTarget()->GetRace(),
|
||||
opposite_gender,
|
||||
caster->GetTarget()->GetTexture()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Racial Illusions
|
||||
else {
|
||||
auto gender_id = (
|
||||
max > 0 &&
|
||||
(
|
||||
max != 3 ||
|
||||
limit == 0
|
||||
) ?
|
||||
(max - 1) :
|
||||
Mob::GetDefaultGender(base, GetGender())
|
||||
);
|
||||
|
||||
auto race_size = GetRaceGenderDefaultHeight(
|
||||
base,
|
||||
gender_id
|
||||
);
|
||||
|
||||
if (base != RACE_ELEMENTAL_75) {
|
||||
if (max > 0) {
|
||||
if (limit == 0) {
|
||||
SendIllusionPacket(
|
||||
base,
|
||||
gender_id
|
||||
);
|
||||
}
|
||||
else {
|
||||
if (max != 3) {
|
||||
SendIllusionPacket(
|
||||
base,
|
||||
gender_id,
|
||||
limit,
|
||||
max
|
||||
);
|
||||
}
|
||||
else {
|
||||
SendIllusionPacket(
|
||||
base,
|
||||
gender_id,
|
||||
limit,
|
||||
limit
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
SendIllusionPacket(
|
||||
base,
|
||||
gender_id,
|
||||
limit,
|
||||
max
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
SendIllusionPacket(
|
||||
base,
|
||||
gender_id,
|
||||
limit
|
||||
);
|
||||
}
|
||||
SendAppearancePacket(AT_Size, race_size);
|
||||
}
|
||||
|
||||
for (int x = EQ::textures::textureBegin; x <= EQ::textures::LastTintableTexture; x++) {
|
||||
SendWearChange(x);
|
||||
}
|
||||
|
||||
if (caster == this && spell_id != SPELL_MINOR_ILLUSION && spell_id != SPELL_ILLUSION_TREE &&
|
||||
(spellbonuses.IllusionPersistence || aabonuses.IllusionPersistence || itembonuses.IllusionPersistence)) {
|
||||
buffs[buffslot].persistant_buff = 1;
|
||||
}
|
||||
else {
|
||||
buffs[buffslot].persistant_buff = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user