
Сообщение от
Nicholay
У нас случаем нигде не выкладывают код/формулы того как все это на серкле расчитыается? А то догадываться о том, как все работает, по логам и визуальным наблюдениям - довольно времязатратное занятие.
Там код такой, что одна функция переход в другую, та еще использует 10 и т.д. в итоге кода типо это работает вот так, его просто напросто нет, а так же, если имеются коэффициенты от апа или тому подобные то они хранятся в SQL базе, а еще часть данных хранится в dbc файлах, которые хранятся, как на сервере так и в клиенте у игрока и должны совпадать.
https://github.com/TrinityCore/Trini...scripts/Spells
https://github.com/TrinityCore/Trini...ll_warrior.cpp
Код:
// -12162 - Deep Wounds
class spell_warr_deep_wounds : public SpellScriptLoader
{
public:
spell_warr_deep_wounds() : SpellScriptLoader("spell_warr_deep_wounds") { }
class spell_warr_deep_wounds_SpellScript : public SpellScript
{
PrepareSpellScript(spell_warr_deep_wounds_SpellScript);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_1) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_2) || !sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_RANK_3))
return false;
return true;
}
void HandleDummy(SpellEffIndex /*effIndex*/)
{
int32 damage = GetEffectValue();
Unit* caster = GetCaster();
if (Unit* target = GetHitUnit())
{
ApplyPct(damage, 16 * GetSpellInfo()->GetRank());
SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC);
uint32 ticks = uint32(spellInfo->GetDuration()) / spellInfo->Effects[EFFECT_0].Amplitude;
// Add remaining ticks to damage done
if (AuraEffect const* aurEff = target->GetAuraEffect(SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, EFFECT_0, caster->GetGUID()))
damage += (aurEff->GetAmount() + aurEff->GetBonusAmount()) * aurEff->GetDonePct() * int32(ticks - aurEff->GetTickNumber());
damage /= int32(ticks);
caster->CastCustomSpell(target, SPELL_WARRIOR_DEEP_WOUNDS_PERIODIC, &damage, NULL, NULL, true);
}
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_warr_deep_wounds_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_warr_deep_wounds_SpellScript();
}
};
Так работает на паблик ядре, у wowcircle, ядро более старго образца, но со своими наработками за N лет, так что оно сильно отличается, но если вы сделаете верный код, то думаю разработчик сможет его интегрировать под это ядро.