Цепочка вызовов.
В CFightAble::SkillTarEffect(SFireUnit*) при lOldHP>0 и lNowHP<=0: вызывается SetDie(pSrcCha)
▼
В CFightAble::SetDie(CCharacter* pCSkillSrcCha) если убийца игрок то идем в ветку lua DoString("after_player_kill_player")
если моб то JustDie(pCSkillSrcCha)
▼
В CCharacter::JustDie(pCSrcCha) вызывается g_EventHandler.Event_ChaDie(this, pCSrcCha)
▼
В CEventHandler::Event_ChaDie(pDead, pAtk) если убийца не игрок
CPlayer *pPlayer = pAtk->GetPlayer();
if(pPlayer==NULL)
идем в lua и по цепочке вызываем GetExp_New -> GetExp_MKP -> Dead_Punish
Как раз в Dead_Punish отображается строка в системе SystemNotice(dead, "Death penalty. EXP lost: " .. exp_red)
и вызывается Dead_Punish_ItemURE(dead) штраф на экипировку SystemNotice(role, "Death penalty: lost 5%% equipment durability")
▼
Возврат в CFightAble::SkillTarEffect(SFireUnit*) и вызов NotiSkillTarToEyeshot(pSFireSrc)
▼
В CFightAble::NotiSkillTarToEyeshot(SFireUnit *pSFireSrc) отправляем пакет CMD_MC_NOTIACTION клиенту с уведомлением всех персонажей (и себе тоже) в области видимости с полями
WRITE_LONG(pk, m_ID); ID трупа
WRITE_SHORT(pk, m_SFightProc.sState); статус ( должен быть enumFSTATE_DIE) устанавливается в SkillTarEffect
Клиент.
Сеть → CMD_MC_NOTIACTION
▼
SC_CharacterAction (PacketCmd_SC.cpp)
▼
case enumACTION_SKILL_TAR: разбор полей → NetActorSkillEff (NetProtocol.cpp)
▼
если SkillEff.sState & enumFSTATE_DIE и цель — главный персонаж:
CAttackEffect::ChaDied(pTarget, pAttack) (HMAttack.cpp)
▼
CReadyDieState::_Start (STReadyDie.cpp)
▼
CStartMgr::MainChaDied (UIStartForm.cpp)
▼
frmMainChaRelive->Show() — форма "frmRelive" из UI
Добавь в начало CFightAble::NotiSkillTarToEyeshot
C++:
LG("NotiSkillTar",
"NotiSkillTarToEyeshot tar=%s id=%u sState=0x%04X (%d) skillId=%d srcId=%u\n",
IsCharacter()->GetLogName(),
m_ID,
(unsigned)(unsigned short)m_SFightProc.sState,
(int)m_SFightProc.sState,
pSFireSrc->pCSkillRecord ? (int)pSFireSrc->pCSkillRecord->sID : -1,
pSFireSrc->ulID);
После смерти от моба в логе NotiSkillTar.log должно быть
[03-29 01:33:13]NotiSkillTarToEyeshot tar=Cha-zLuke2+2 id=2 sState=0x0100 (256) skillId=25 srcId=2952790346
Если все так, то надо добавлять логи уже в клиенте и смотреть что приходит и где обрывается.
Это все происходит на обычной карте? Например в Аргенте?