Jump to content

thenecromancer

Members
  • Posts

    110
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by thenecromancer

  1. Very good idea, and what with effect mechanics? ( Frostbolt, Frost Nova, Shadowfury, Shocks etc. )EDIT: I mean if those spells are calculated as binary on official as well.
  2. DoT ticks are not supposed to get full resists.
  3. Master branch automaticly mirrored on subversion would be nice ( if it is possible ) for non-devs to use and keep up with MaNGOS as well as to know on what they really are in just one number. On the other side 3rdP developers should like GIT much more, however using that thing on windows is still pain... EDIT: forgot about GIT usefulness for server admins as well, seems that GIT is really just windows unfriendly nothing more ...
  4. Icon of the debuff caused by this seal has been changed ( not sure when ) so this calculation is no logner used... Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 6633) +++ game/Unit.cpp (working copy) @@ -7360,7 +7360,7 @@ CastingTime = 2555; } // Seal of Vengeance - 17% per Fully Stacked Tick - 5 Applications - else if ((spellProto->SpellFamilyFlags & 0x80000000000LL) && spellProto->SpellIconID == 2040) + else if ((spellProto->SpellFamilyFlags & 0x80000000000LL) && spellProto->SpellIconID == 2292) { DotFactor = 0.17f; CastingTime = 3500;
  5. I use effect to set a guid of person that has it threat redirected to, but then again it could be all done just with that dummy aura ( And probably going to redo it that way ). Well, Misdirection is currently only spell using this effect, but basicly redirection is aura not an effect , so it is probably very useless. Maybe for effect_immunity? Didn't check that yet...
  6. Well, you are right. But the problem is that it does not send value modified by % healing recieved auras ( eg. Mortal Strike ). This must send value changed by spellhealingbonus() anyway thanks you for your suggestion it must be a little different EDIT: updated first post with code correctly sending overheal
  7. SendHealSpellLog should send gain instead of new_damage * multiplier, otherwise it shows misleading numbers. Index: game/SpellAuras.cpp =================================================================== --- game/SpellAuras.cpp (revision 6623) +++ game/SpellAuras.cpp (working copy) @@ -5735,10 +5735,10 @@ int32 gain = pCaster->SpellHealingBonus(spellProto, uint32(new_damage * multiplier), DOT, pCaster); - gain = pCaster->ModifyHealth(gain); - pCaster->getHostilRefManager().threatAssist(pCaster, float(gain) * 0.5f, spellProto); + float realGain = float(pCaster->ModifyHealth(gain)); + pCaster->getHostilRefManager().threatAssist(pCaster, realGain * 0.5f, spellProto); - pCaster->SendHealSpellLog(pCaster, spellProto->Id, uint32(new_damage * multiplier)); + pCaster->SendHealSpellLog(pCaster, spellProto->Id, uint32(gain)); break; } case SPELL_AURA_PERIODIC_HEAL:
  8. Revision 6541 This patch makes corpses looking yet more like players Hide helm/cloak option is applied to corpse Corpse guild field is filled, so guild tabards have correct graphics Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 6541) +++ game/Player.cpp (working copy) @@ -3700,9 +3700,15 @@ uint32 flags = 0x04; if(InBattleGround()) flags |= 0x20; // to be able to remove insignia + + if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM)) + flags |= 0x08; + if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK)) + flags |= 0x10; + corpse->SetUInt32Value( CORPSE_FIELD_FLAGS, flags ); - corpse->SetUInt32Value( CORPSE_FIELD_DISPLAY_ID, GetNativeDisplayId() ); + corpse->SetUInt32Value( CORPSE_FIELD_GUILD, GetGuildId() ); uint32 iDisplayID; uint16 iIventoryType;
  9. Well, you'd have to implement spells as scripts and it will still be useless, those numbers are not pointing to anything that is accessable for MaNGOS ( or at least I don't know of anything like that ). Unlike retail servers, ManGOS does not run spells as any scripts or programs, it just provides framework to run spells after data stored for client. While it would be much easier to implement things like this, it'd be barrely posible to provide scripts for almost 280k spells up there... And still you'd need to create scripts for spells to have something to override with
  10. Yes, there is spell targeting all enemies in area I believe, but I guess you should include it as a note and patch here as well, so you will not break anything. I'm sorry but I don't know the ID of it...
  11. Well bumping SMSG_FORCE_DISPLAY_UPDATE sounds to fit, unfortunate I couldn't found any single information about it's format... So I would be happy for every hints... EDIT: did testing, and seems that it takes only a unit guid ( or well at least player's unit )
  12. Well, straight on it, modifying the bits do not do the job ( take effect after relog or instance enter ). Workaround is to change display id to something and then set it back, that does also works. But needs a little more client resources. Does anyone know how to force client reload a character on run other than changing his display id?
  13. it is the original casting time ( eg 3500 for Firaball )
  14. SPELLMOD_SPELL_BONUS_DAMAGE mods seems to be mods to spell damage coefficient, not to spell damage bonus itselfs This means for example that flat +20 SPELLMOD_SPELL_BONUS_DAMAGE mod increases spell damage contribution for instant spell from 0.42X to 0.62X previously it did increase it to 0.42*1.2X which is only 0.504X This affect mostly Empowered Arcane Missiles, talents like Empowered Fireball does nothing more, just because 1 + mod is same as 1*(1+mod) Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 6405) +++ game/Unit.cpp (working copy) @@ -7306,14 +7306,14 @@ float LvlPenalty = CalculateLevelPenalty(spellProto); // Spellmod SpellDamage - float SpellModSpellDamage = 100.0f; + float CoefficientPtc = ((float)CastingTime/3500.0f)*DotFactor*100.0f; if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,SpellModSpellDamage); + modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,CoefficientPtc); - SpellModSpellDamage /= 100.0f; + CoefficientPtc /= 100.0f; - float DoneActualBenefit = DoneAdvertisedBenefit * (CastingTime / 3500.0f) * DotFactor * SpellModSpellDamage * LvlPenalty; + float DoneActualBenefit = DoneAdvertisedBenefit * CoefficientPtc * LvlPenalty; float TakenActualBenefit = TakenAdvertisedBenefit * (CastingTime / 3500.0f) * DotFactor * LvlPenalty; float tmpDamage = (float(pdamage)+DoneActualBenefit)*DoneTotalMod; @@ -7638,14 +7638,14 @@ float LvlPenalty = CalculateLevelPenalty(spellProto); // Spellmod SpellDamage - float SpellModSpellDamage = 100.0f; + float CoefficientPtc = ((float)CastingTime/3500.0f)*DotFactor*100.0f; if(Player* modOwner = GetSpellModOwner()) - modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,SpellModSpellDamage); + modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_SPELL_BONUS_DAMAGE,CoefficientPtc); - SpellModSpellDamage /= 100.0f; + CoefficientPtc /= 100.0f; - float ActualBenefit = (float)AdvertisedBenefit * ((float)CastingTime / 3500.0f) * DotFactor * SpellModSpellDamage * LvlPenalty; + float ActualBenefit = (float)AdvertisedBenefit * CoefficientPtc * LvlPenalty; // use float as more appropriate for negative values and percent applying float heal = healamount + ActualBenefit;
  15. AFAIK only player casted binary spell doing school damage is frostbolt ( but it can also crit unlike other binary spells ), but not sure if that was ever changed ( better said fixed ). On other side, all other spells can't crit, or be partialy resisted, this include all damage over time spells, and spells not doing school damage ( eg. Death Coil ) I'm not sure about Immolate, as that thing can crit... Apply aura check is not safe, Pyroblast and Fireball both apply auras, but are definetly not binary
  16. 143 - Aura casted by pet, affecting only master 119 is the same, however affecting both pet and master both effects are not targeting more than master and pet ( they have no effect on player's group )
  17. There are problems that these spells can miss or be immuned, this is however not good at all. This solves problem with certain spell failing on immune targets, like charge ( not the stun part though ) not charging immune targets. I'm however not sure if this shouldn't work just for immunity part or for whole spell hit stage. ( Hard to tell, charge spells cannot indeed be resisted, also there are several spells in game that ignore spell miss chance, and for example will land even with mods like spell 31224 ) But idea is still the same... revision 6183 Index: game/Unit.cpp =================================================================== --- game/Unit.cpp (revision 6183) +++ game/Unit.cpp (working copy) @@ -2697,6 +2697,9 @@ if (pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) return SPELL_MISS_EVADE; + if(spell->Attributes & SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY) + return SPELL_MISS_NONE; + // Check for immune (use charges) if (pVictim->IsImmunedToSpell(spell,true)) return SPELL_MISS_IMMUNE;
  18. Concussive Shot -> Improved Concussive Shot Bloodthirst -> Bloodlust
  19. Don't worry about multi-family checks, there aresome already ( eg. Hamstring and Imp. Hamstring )
  20. Problem: Focus is not affected by SPELL_AURA_MOD_POWER_REGEN_PERCENT, this is however required for one talent to work Revision 6007 note that this patch itselfs does not fix the talent, but it is required for it's fix, to have it fully working, pets must have aura 19589, and modifier from talent should affect it Index: game/Pet.cpp =================================================================== --- game/Pet.cpp (revision 6007) +++ game/Pet.cpp (working copy) @@ -570,6 +570,12 @@ uint32 maxValue = GetMaxPower(POWER_FOCUS); if (curValue >= maxValue) return; uint32 addvalue = 25; + + AuraList const& ModPowerRegenPCTAuras = GetAurasByType(SPELL_AURA_MOD_POWER_REGEN_PERCENT); + for(AuraList::const_iterator i = ModPowerRegenPCTAuras.begin(); i != ModPowerRegenPCTAuras.end(); ++i) + if ((*i)->GetModifier()->m_miscvalue == POWER_FOCUS) + addvalue *= ((*i)->GetModifier()->m_amount + 100) / 100.0; + ModifyPower(POWER_FOCUS, addvalue); }
  21. from DB you can set only mechanic immunity; school, dispel, aura and effects can be done from scripts for example this: m_creature->ApplySpellImmune(0,IMMUNITY_STATE,SPELL_AURA_PERIODIC_MANA_LEECH, true); will give you immunity to drain mana
  22. It'd be good to create also patch thread about recent bug where players begin to walk after charge abilities or when reciviewing fear players never have m_unit_movement_flags set, only in confuse movement generator Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 5656) +++ game/Player.cpp (working copy) @@ -125,6 +125,9 @@ // this must help in case next save after mass player load after server startup m_nextSave = rand32(m_nextSave/2,m_nextSave*3/2); + // initialize movement flags + m_unit_movement_flags = MOVEMENT_FLAG_RUN; + m_resurrectGUID = 0; m_resurrectX = m_resurrectY = m_resurrectZ = 0; m_resurrectHealth = m_resurrectMana = 0;
  23. Problem: If you use Finishing move that does not attack target in effect it is possible to completly avoid CP usage How to repeat: You just need to clear your m_attacking, for that just use macro for example /cast Expose Armor /stopattack In my opinion if you use Finishing move it shouldn't matter if you are attacking or not, also should be impossible to cast on another target ( and if that happens, our Combo Points should be still cleared to prevent cheating ) Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 5672) +++ game/Player.cpp (working copy) @@ -2709,7 +2709,7 @@ spellInfo->EffectPointsPerComboPoint[1] != 0 || spellInfo->EffectPointsPerComboPoint[2] != 0; - if(comboDamageUsed && m_attacking && (m_attacking->GetGUID() == GetComboTarget())) + if(comboDamageUsed) needClearCombo = true; // Check in duration calculations
  24. Index: game/Player.cpp =================================================================== --- game/Player.cpp (revision 5656) +++ game/Player.cpp (working copy) @@ -2723,6 +2723,9 @@ // overpower - need reset combopoints else if(spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && (spellInfo->SpellFamilyFlags & 0x4)) needClearCombo = true; + // Envenom + else if(spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE && (spellInfo->SpellFamilyFlags & 0x800000000LL)) + needClearCombo = true; // Reset if need if (needClearCombo)
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use