Ir para conteúdo
Fórum Script Brasil
  • 0

comando __try invalido


Eibon

Pergunta

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); }

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...