Eibon Postado Outubro 1, 2009 Denunciar Share Postado Outubro 1, 2009 estou a dias quebrando a cabeça com o comando __try , não consivo imaginar outra forma de fazer isto.#include "CBuffSystem.h" void CBuffSystem::Initialize() { if ( !GlobalVars::GVs()->pSubSystems->bBuffSystem ) { return; } // Abnormal System Extending WriteMemoryBYTE(0x850F7B, MAX_ABNORMALS); WriteMemoryBYTE(0x747B6B, MAX_ABNORMALS); WriteMemoryBYTE(0x827D54, MAX_ABNORMALS); WriteMemoryBYTE(0x827D80, MAX_ABNORMALS); WriteInstruction(0x5057FB, (INT32)CBuffSystem_GetMaxAmmountHook, 5, 0xE9); // Fixing Packets WriteInstruction(0x528A0C, (INT32)CBuffSystem_LoadInfectedSkillsHook1, 5, 0xE9); WriteInstruction(0x52882F, (INT32)CBuffSystem_SaveInfectedSkillsHook1, 0, 0xE9); WriteInstruction(0x52885A, (INT32)CBuffSystem_SaveInfectedSkillsHook2, 4, 0xE9); } INT32 nCBuffSystem_CalculateBuffSlots = 0; void CBuffSystem::CalculateBuffSlots(CCreature *pCreature, CSkillInfo *pSkillInfo) { L2SERVER_SHARED_GUARD(nCBuffSystem_CalculateBuffSlots); TLS_TRACE_BEGIN; INT32 nMaxBuffSlots = 20; if ( pCreature->IsValidCreature() ) { INT32 nCurrentLevel = pCreature->GetAcquiredSkillLevel(GlobalVars::GVs()->pSubSystems->nBuffSlotSkillID); if ( nMaxBuffSlots+nCurrentLevel > 20 ) { nMaxBuffSlots += nCurrentLevel; } } INT32 nFreeBuffSlots = nMaxBuffSlots; __try { if ( pSkillInfo->debuff == 0 ) { bool bFoundBuff = false; INT32 nBuffPos = 0; for ( int i = 0; i < pCreature->vBuff.size(); i++ ) { CBuffInfo BuffInfo = pCreature->vBuff[i]; if ( BuffInfo.pSkillInfo->debuff == 0 && nFreeBuffSlots > 0 ) { if ( !bFoundBuff ) { nBuffPos = i; bFoundBuff = true; } nFreeBuffSlots -= 1; if ( nFreeBuffSlots == 0 ) { break; } } } if ( nFreeBuffSlots == 0 && bFoundBuff ) { pCreature->vBuff.erase(pCreature->vBuff.begin()+nBuffPos, pCreature->vBuff.begin()+nBuffPos+1); } } } __except(EXCEPTION_EXECUTE_HANDLER) { CLog::AddAnsi(2,"Fatal Error At Function : %ls", __FUNCTIONW__); } TLS_TRACE_END; } INT32 nCBuffSystem_CalculateDebuffSlots = 0; void CBuffSystem::CalculateDebuffSlots(CCreature *pCreature, CSkillInfo *pSkillInfo) { L2SERVER_SHARED_GUARD(nCBuffSystem_CalculateDebuffSlots); TLS_TRACE_BEGIN; INT32 nMaxDebuffSlots = 10; INT32 nFreeDebuffSlots = nMaxDebuffSlots; __try { if ( pSkillInfo->debuff != 0 ) { bool bFoundDebuff = false; INT32 nDebuffPos = 0; for ( int i = 0; i < pCreature->vBuff.size(); i++ ) { CBuffInfo BuffInfo = pCreature->vBuff[i]; if ( BuffInfo.pSkillInfo->debuff != 0 && nFreeDebuffSlots > 0 ) { if ( !bFoundDebuff ) { nDebuffPos = i; bFoundDebuff = true; } nFreeDebuffSlots -= 1; if ( nFreeDebuffSlots == 0 ) { break; } } } if ( nFreeDebuffSlots == 0 && bFoundDebuff ) { pCreature->vBuff.erase(pCreature->vBuff.begin()+nDebuffPos, pCreature->vBuff.begin()+nDebuffPos+1); } } } __except(EXCEPTION_EXECUTE_HANDLER) { CLog::AddAnsi(2,"Fatal Error At Function : %ls", __FUNCTIONW__); } TLS_TRACE_END; } /* ASM Wrappers */ void CBuffSystem_CalculateBuffSlots(CCreature *pCreature, CSkillInfo *pSkillInfo) { CBuffSystem::CalculateBuffSlots(pCreature, pSkillInfo); } void CBuffSystem_CalculateDebuffSlots(CCreature *pCreature, CSkillInfo *pSkillInfo) { CBuffSystem::CalculateDebuffSlots(pCreature, pSkillInfo); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Outubro 3, 2009 Denunciar Share Postado Outubro 3, 2009 __try e __except é uma extensão do compilador do MSVC. (Microsoft Visual Studio)try e catch são o padrão.Qual compilador você está utlizando?Abraços. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eibon Postado Outubro 27, 2009 Autor Denunciar Share Postado Outubro 27, 2009 estou usando o propiro visual stuio, mas não entendi oque você quiz dizer com extesão, tenho que fazer algum up date? instalar plu in? ou algo do tipo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eibon
estou a dias quebrando a cabeça com o comando __try , não consivo imaginar outra forma de fazer isto.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.