Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > 12Sky2
You last visited: Today at 03:35

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Client] MONSTER_OBJECT class

Discussion on [Client] MONSTER_OBJECT class within the 12Sky2 forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2011
Posts: 129
Received Thanks: 174
[Client] MONSTER_OBJECT class

Code:
MONSTER_OBJECT *__thiscall MONSTER_OBJECT::MONSTER_OBJECT(MONSTER_OBJECT *this)
{
    this->mCheckValidState = 0;
    return this;
}

void __thiscall MONSTER_OBJECT::Init(MONSTER_OBJECT *this)
{
    this->mCheckValidState = 0;
}

void __thiscall MONSTER_OBJECT::Free(MONSTER_OBJECT *this)
{
    this->mCheckValidState = 0;
}

void __thiscall MONSTER_OBJECT::PlayActionSound(MONSTER_OBJECT *This, int tObjIndex)
{
    GSOUND *v2; // eax

    if ( This->mCheckValidState )
    {
        v2 = GDATA::ReturnMonsterSound(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
        GSOUND::Play3(v2, This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
    }
}

void __thiscall MONSTER_OBJECT::Draw(MONSTER_OBJECT *This, int tDrawSort, int tObjIndex, float dTime)
{
    float tHeightForCulling; // [esp+Ch] [ebp-38h]
    float tHeightForCullingb; // [esp+Ch] [ebp-38h]
    float tHeightForCullinga; // [esp+Ch] [ebp-38h]
    float tHeightForCullingc; // [esp+Ch] [ebp-38h]
    float tLength; // [esp+14h] [ebp-30h]
    int v10; // [esp+20h] [ebp-24h]
    int v11; // [esp+24h] [ebp-20h]
    int v12; // [esp+28h] [ebp-1Ch]
    float tAngle; // [esp+2Ch] [ebp-18h] BYREF
    float v14; // [esp+30h] [ebp-14h]
    float v15; // [esp+34h] [ebp-10h]
    int v16; // [esp+38h] [ebp-Ch]
    int v17; // [esp+3Ch] [ebp-8h]
    GMOTION *tMOTION; // [esp+40h] [ebp-4h]

    if ( !This->mCheckValidState )
        return;
    if ( tDrawSort < 1 )
        return;
    if ( tDrawSort > 2 )
        return;
    tLength = This->mMONSTER_INFO->mSize[1];
    if ( !UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
        return;
    tAngle = 0.0;
    v14 = This->mDATA.mAction.aFront;
    v15 = 0.0;
    if ( This->mMONSTER_INFO->mIndex >= 589 && This->mMONSTER_INFO->mIndex <= 600 )
    {
        v12 = CHUGSOUNG_WAR_UI::ZoneIndex(mMYINFO[0].mPresentZoneNumber);
        if ( v12 != -1 )
        {
            v10 = mCHUGSOUNG_WAR_UI[0].c[v12] % 100;
            v11 = mCHUGSOUNG_WAR_UI[0].c[v12] / 100;
            if ( v11 == 1 || v11 == 3 || v11 == 5 || v11 == 7 )
            {
                v17 = UTIL::ReturnChugSoungWarObject(v10, v11);
                if ( v17 != -1 )
                {
                    GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[v17], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, &tAngle, 1);
                    if ( This->mDATA.mAction.aFrame >= 41.0 )
                        This->mDATA.mAction.aFrame = 0.0;
                }
                return;
            }
            if ( v10 == 3 )
                GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[v11 / 2 + 235], tDrawSort, 0.0, This->mDATA.mAction.aLocation, &tAngle, 1);
        }
    }
    tMOTION = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    tHeightForCulling = This->mMONSTER_INFO->mSize[1];
    if ( This->c26 )
        GSOBJECT::DisplaySObject(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], tDrawSort, 0.0, This->c33, This->cFront, tHeightForCulling, tMOTION, 1);
    else
        GSOBJECT::DisplaySObject(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCulling, tMOTION, 1);
    if ( This->mMONSTER_INFO->mType != 2 )
    {
        if ( This->mMONSTER_INFO->mIndex == 1141 || This->mMONSTER_INFO->mIndex == 1142 || This->mMONSTER_INFO->mIndex == 1143 || This->mMONSTER_INFO->mIndex == 1144 )
        {
            tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
            if ( This->mDATA.mLifeValue > 0 )
                GSOBJECT::DisplaySObject(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, tMOTION, 1);
            else
                GSOBJECT::DisplaySObject((576 * (This->mMONSTER_INFO->mDataSortNumber - 1) + 15907192), tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, tMOTION, 1);
            goto LABEL_34;
        }
        goto LABEL_33;
    }
    if ( mGAMEOPTION[0].mMetureMode != 1 )
    {
LABEL_33:
        tHeightForCullingc = This->mMONSTER_INFO->mSize[1];
        GSOBJECT::DisplaySObject(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingc, tMOTION, 1);
        goto LABEL_34;
    }
    v16 = 3 - (This->mDATA.mLifeValue * 100.0 / This->mMONSTER_INFO->mLife) / 30;
    tHeightForCullingb = This->mMONSTER_INFO->mSize[1];
    GSOBJECT::DisplaySObject(&mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296][v16], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingb, tMOTION, 1);
LABEL_34:
    tAngle = 0.0;
    v14 = This->mDATA.mAction.aFront;
    v15 = 0.0;
    switch ( This->mDATA.mAction.aSort )
    {
        case 0:
            v17 = UTIL::ReturnMonsterCreateObject(This->mMONSTER_INFO->mDataSortNumber);
            if ( v17 != -1 )
                goto LABEL_42;
            break;
        case 5:
            v17 = UTIL::ReturnMonsterAttackObject(This->mMONSTER_INFO->mDataSortNumber);
            if ( v17 != -1 )
                goto LABEL_42;
            break;
        case 7:
            v17 = UTIL::ReturnMonsterSkillObject(This->mMONSTER_INFO->mDataSortNumber);
            if ( v17 != -1 )
                goto LABEL_42;
            break;
        case 12:
            v17 = UTIL::ReturnMonsterDeathObject(This->mMONSTER_INFO->mDataSortNumber);
            if ( v17 != -1 )
LABEL_42:
                GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[v17], tDrawSort, This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, &tAngle, 0);
            break;
        default:
            break;
    }
    if ( This->c36 )
        GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[67], tDrawSort, This->c37, This->mDATA.mAction.aLocation, &tAngle, 0);
    if ( This->c38 )
        GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_005[68], tDrawSort, This->c39, This->mDATA.mAction.aLocation, &tAngle, 0);
    if ( This->c40 )
        GMOBJECT::DisplayMObject(&mGDATA[0].mMOB_004[138], tDrawSort, This->c41, This->mDATA.mAction.aLocation, &tAngle, 0);
}

void __thiscall MONSTER_OBJECT::DrawLowShadow(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    float tHeightForCulling; // [esp+Ch] [ebp-1Ch]
    float tHeightForCullinga; // [esp+Ch] [ebp-1Ch]
    float tHeightForCullingb; // [esp+Ch] [ebp-1Ch]
    float tLength; // [esp+18h] [ebp-10h]
    GMOTION *tMOTION; // [esp+24h] [ebp-4h]

    if ( This->mCheckValidState )
    {
        if ( UTIL::ReturnLengthXYZ(This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation) <= 300.0 )
        {
            tLength = This->mMONSTER_INFO->mSize[1];
            if ( UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
            {
                tMOTION = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
                tHeightForCulling = This->mMONSTER_INFO->mSize[1];
                if ( This->c26 )
                    GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], 0.0, This->c33, This->cFront, tHeightForCulling, &mGDATA[0].mZONE, tMOTION, 1);
                else
                    GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mNPC[This->mMONSTER_INFO->mDataSortNumber + 65], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCulling, &mGDATA[0].mZONE, tMOTION, 1);
                if ( This->mMONSTER_INFO->mType == 2 )
                {
                    tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
                    if ( mGAMEOPTION[0].mMetureMode == 1 )
                    {
                        GSOBJECT::DisplaySObjectLowShadow(&mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296][3 - (This->mDATA.mLifeValue * 100.0 / This->mMONSTER_INFO->mLife) / 30], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
                        return;
                    }
                    goto LABEL_10;
                }
                if ( This->mMONSTER_INFO->mIndex == 1141 || This->mMONSTER_INFO->mIndex == 1142 || This->mMONSTER_INFO->mIndex == 1143 || This->mMONSTER_INFO->mIndex == 1144 )
                {
                    tHeightForCullinga = This->mMONSTER_INFO->mSize[1];
                    if ( This->mDATA.mLifeValue > 0 )
                    {
LABEL_10:
                        GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
                        return;
                    }
                    GSOBJECT::DisplaySObjectLowShadow((576 * (This->mMONSTER_INFO->mDataSortNumber - 1) + 15907192), This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullinga, &mGDATA[0].mZONE, tMOTION, 1);
                }
                else
                {
                    tHeightForCullingb = This->mMONSTER_INFO->mSize[1];
                    GSOBJECT::DisplaySObjectLowShadow(mGDATA[0].mMONSTER_HEAD[4 * This->mMONSTER_INFO->mDataSortNumber + 296], This->mDATA.mAction.aFrame, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, tHeightForCullingb, &mGDATA[0].mZONE, tMOTION, 1);
                }
            }
        }
    }
}

void __thiscall MONSTER_OBJECT::DrawInfo(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v3; // eax
    float tLength; // [esp+0h] [ebp-18h]
    float tCoord[3]; // [esp+Ch] [ebp-Ch] BYREF

    if ( This->mCheckValidState )
    {
        tLength = This->mMONSTER_INFO->mSize[1];
        if ( UTIL::CheckPossibleDrawMeWithCamera(This->mDATA.mAction.aLocation, tLength) )
        {
            tCoord[0] = This->mDATA.mAction.aLocation[0];
            tCoord[1] = (This->mMONSTER_INFO->mSize[1] + This->mMONSTER_INFO->mSize[3] + 1) + This->mDATA.mAction.aLocation[1];
            tCoord[2] = This->mDATA.mAction.aLocation[2];
            v3 = UTIL::ReturnMonsterNameColor(This);
            UTIL::DrawFont3D(This->mMONSTER_INFO->mName, tCoord, v3);
        }
    }
}

void __thiscall MONSTER_OBJECT::InitForCreate(MONSTER_OBJECT *This, int tObjIndex)
{
    int v2; // [esp+0h] [ebp-14h]
    int v3; // [esp+4h] [ebp-10h]
    int i; // [esp+10h] [ebp-4h]
    int j; // [esp+10h] [ebp-4h]

    if ( This->mCheckValidState )
    {
        This->c02 = 0;
        This->c26 = 0;
        This->c36 = 0;
        This->c38 = 0;
        This->c40 = 0;
        switch ( This->mMONSTER_INFO->mDataSortNumber )
        {
            case 42:
            case 44:
            case 46:
            case 59:
            case 61:
            case 64:
            case 65:
            case 67:
            case 74:
            case 75:
            case 76:
            case 85:
            case 89:
                v3 = This->mMONSTER_INFO->mSpecialType;
                if ( v3 >= 2 && v3 <= 6 )
                {
                    for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
                        ;
                    if ( i < mPLAY[0].MAX_EFFECT_OBJECT )
                        EFFECT_OBJECT::SetZone175TypeMonsterEffect(&mPLAY[0].mEFFECT_OBJECT[i], 1, This);
                }
                break;
            case 48:
            case 53:
            case 62:
            case 66:
            case 72:
            case 81:
                v2 = This->mMONSTER_INFO->mSpecialType;
                if ( v2 >= 2 && v2 <= 6 )
                {
                    for ( j = 0; j < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[j].mCheckValidState; ++j )
                        ;
                    if ( j < mPLAY[0].MAX_EFFECT_OBJECT )
                        EFFECT_OBJECT::SetZone175TypeMonsterEffect(&mPLAY[0].mEFFECT_OBJECT[j], 2, This);
                }
                break;
            default:
                return;
        }
    }
}

void __thiscall MONSTER_OBJECT::InitForAction(MONSTER_OBJECT *This, int tObjIndex)
{
    double v2; // st7
    GMOTION *v3; // eax
    int v4; // [esp+1Ch] [ebp-60h]
    int v5; // [esp+20h] [ebp-5Ch]
    float v6; // [esp+2Ch] [ebp-50h]
    float v7; // [esp+30h] [ebp-4Ch]
    float v8; // [esp+34h] [ebp-48h]
    float v9; // [esp+38h] [ebp-44h]
    float v11; // [esp+54h] [ebp-28h]
    float v12; // [esp+58h] [ebp-24h]
    float v13; // [esp+5Ch] [ebp-20h]
    float v14; // [esp+5Ch] [ebp-20h]
    float v15; // [esp+64h] [ebp-18h]
    float v16; // [esp+64h] [ebp-18h]
    float tCoord[3]; // [esp+68h] [ebp-14h] BYREF
    int i; // [esp+74h] [ebp-8h]
    float v19; // [esp+78h] [ebp-4h]

    if ( This->mCheckValidState )
    {
        MONSTER_OBJECT::PlayActionSound(This, tObjIndex);
        This->c02 = 0;
        This->c23 = 0;
        switch ( This->mDATA.mAction.aSort )
        {
            case 0:
                if ( This->mMONSTER_INFO->mType == 4 )
                {
                    if ( (mMYINFO[0].mUseAvatar.aQuestInfo[2] == 1 || mMYINFO[0].mUseAvatar.aQuestInfo[2] == 5) && mMYINFO[0].mUseAvatar.aQuestInfo[3] == This->mMONSTER_INFO->mIndex )
                    {
                        if ( strcmp(This->mMONSTER_INFO->mChatInfo, aEmptyChar) )
                        {
                            This->c36 = 1;
                            This->c37 = 0.0;
                            BOARDUI::Set(mBOARDUI, 6, 1, This->mMONSTER_INFO->mChatInfo, aEmptyChar);
                        }
                    }
                }
                else
                {
                    if ( strcmp(This->mMONSTER_INFO->mChatInfo, aEmptyChar) )
                        BOARDUI::Set(mBOARDUI, 8, 1, This->mMONSTER_INFO->mChatInfo, aEmptyChar);
                    if ( This->mMONSTER_INFO->mIndex >= 589 && This->mMONSTER_INFO->mIndex <= 600 )
                        GSOUND::Play3(&mGDATA[0].mSOUND_05[398], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
                }
                return;
            case 5:
                switch ( This->mMONSTER_INFO->mAttackType )
                {
                    case 1:
                    case 2:
                        This->c02 = 1;
                        This->c03 = 1;
                        This->c04 = 1;
                        This->c05 = 0;
                        break;
                    case 3:
                    case 4:
                        if ( UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber) == -1 )
                        {
                            This->c02 = 1;
                            This->c03 = 1;
                        }
                        else
                        {
                            This->c02 = 1;
                            This->c03 = 2;
                        }
                        This->c04 = 1;
                        This->c05 = 0;
                        break;
                    case 5:
                    case 6:
                        This->c02 = 1;
                        This->c03 = 1;
                        This->c04 = 2;
                        This->c05 = 0;
                        break;
                    default:
                        return;
                }
                return;
            case 7:
                This->c02 = 1;
                This->c03 = 0;
                This->c04 = 0;
                This->c05 = 0;
                return;
            case 12:
                This->c23 = 1;
                if ( This->c19 )
                    v2 = (2 * This->mMONSTER_INFO->mDeathSpeed);
                else
                    v2 = This->mMONSTER_INFO->mDeathSpeed;
                This->mDeathSpeedFrame = v2;
                if ( This->mDATA.mAction.aSkillNumber == 1 )
                {
                    if ( mGAMEOPTION[0].mMetureMode == 1 )
                    {
                        This->c26 = 1;
                        v12 = This->mDATA.mAction.aFront * 0.01745329238474369;
                        v9 = sin(v12);
                        v13 = v9;
                        v11 = This->mDATA.mAction.aFront * 0.01745329238474369;
                        v8 = cos(v11);
                        v15 = v8;
                        v7 = v8 * v8 + 0.0 * 0.0 + v13 * v13;
                        v6 = sqrt(v7);
                        v19 = v6;
                        if ( v6 > 0.0 )
                        {
                            v13 = v9 / v19;
                            v15 = v8 / v19;
                        }
                        v14 = v13 * 50.0;
                        v16 = v15 * 50.0;
                        This->c27[0] = v14;
                        This->c27[1] = (rand() % 51 + 50);
                        This->c27[2] = v16;
                        This->c30 = rand() % 6 + 5;
                        This->c31 = 0;
                        v3 = GDATA::ReturnMonsterMotion(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
                        GSOBJECT::GetSObjectCoord(&mGDATA[0].mMONSTER_BODY[299][This->mMONSTER_INFO->mDataSortNumber + 3], 1, tCoord, 0.0, This->mDATA.mAction.aLocation, This->mDATA.mAction.aFront, v3, 1);
                        This->c32 = tCoord[1] - This->mDATA.mAction.aLocation[1];
                        CopyMemory(This->c33, This->mDATA.mAction.aLocation, 12);
                        This->cFront = This->mDATA.mAction.aFront;
                    }
                }
                else if ( This->mMONSTER_INFO->mIndex < 589 || This->mMONSTER_INFO->mIndex > 600 )
                {
                    GSOUND::Play3(&mGDATA[0].mSOUND_05[289], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
                }
                else
                {
                    GSOUND::Play3(&mGDATA[0].mSOUND_05[399], This->mDATA.mAction.aLocation, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
                }
                if ( This->mMONSTER_INFO->mDamageType != 2 )
                    goto LABEL_58;
                for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
                    ;
                if ( i == mPLAY[0].MAX_EFFECT_OBJECT )
                    goto LABEL_58;
                if ( This->mDATA.mAction.aSkillNumber == 1 )
                {
                    EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 7);
                }
                else
                {
                    v5 = This->c14;
                    if ( v5 != 1 )
                    {
                        if ( v5 != 2 )
                            goto LABEL_58;
LABEL_56:
                        EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 5);
                        goto LABEL_58;
                    }
                    v4 = This->c15;
                    switch ( v4 )
                    {
                        case 1:
                            EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 4);
                            break;
                        case 2:
                            goto LABEL_56;
                        case 3:
                            EFFECT_OBJECT::SetBloodForMonster(&mPLAY[0].mEFFECT_OBJECT[i], This, 6);
                            break;
                    }
                }
LABEL_58:
                if ( This->mMONSTER_INFO->mType == 4 )
                {
                    if ( (mMYINFO[0].mUseAvatar.aQuestInfo[2] == 1 || mMYINFO[0].mUseAvatar.aQuestInfo[2] == 5) && mMYINFO[0].mUseAvatar.aQuestInfo[3] == This->mMONSTER_INFO->mIndex && strcmp(This->mMONSTER_INFO->mChatInfo[1], aEmptyChar) )
                    {
                        This->c38 = 1;
                        This->c39 = 0.0;
                        BOARDUI::Set(mBOARDUI, 7, 1, This->mMONSTER_INFO->mChatInfo[1], aEmptyChar);
                    }
                }
                else if ( strcmp(This->mMONSTER_INFO->mChatInfo[1], aEmptyChar) )
                {
                    BOARDUI::Set(mBOARDUI, 9, 1, This->mMONSTER_INFO->mChatInfo[1], aEmptyChar);
                }
                break;
            default:
                return;
        }
    }
}

void __thiscall MONSTER_OBJECT::Update(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    float tPostYCoord; // [esp+20h] [ebp-48h]
    int v4; // [esp+28h] [ebp-40h]
    int v5; // [esp+2Ch] [ebp-3Ch]
    int v6; // [esp+34h] [ebp-34h]
    char v8[4]; // [esp+48h] [ebp-20h] BYREF
    float v9; // [esp+4Ch] [ebp-1Ch]
    int i; // [esp+54h] [ebp-14h]
    int v11; // [esp+58h] [ebp-10h]
    float x; // [esp+5Ch] [ebp-Ch] BYREF
    float y[2]; // [esp+60h] [ebp-8h] BYREF

    if ( This->mCheckValidState )
    {
        if ( This->c36 )
        {
            This->c37 = dTime * 30.0 + This->c37;
            if ( This->c37 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_005[67], 0) )
                This->c36 = 0;
        }
        if ( This->c38 )
        {
            This->c39 = dTime * 30.0 + This->c39;
            if ( This->c39 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_005[68], 0) )
                This->c38 = 0;
        }
        if ( This->c40 )
        {
            This->c41 = dTime * 30.0 + This->c41;
            if ( This->c41 >= GMOBJECT::GetTotalFrameNum(&mGDATA[0].mMOB_004[138], 0) )
                This->c40 = 0;
        }
        v6 = This->mDATA.mAction.aSort;
        if ( v6 == 5 )
        {
            if ( This->c02 == 1 )
            {
                v11 = 0;
                if ( This->c05 )
                {
                    if ( !PLAY::CheckMAttackFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
                        This->c05 = 0;
                }
                else if ( PLAY::CheckMAttackFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
                {
                    This->c05 = 1;
                    v11 = 1;
                }
                if ( v11 == 1 )
                {
                    if ( This->mMONSTER_INFO->mDataSortNumber == 113 || This->mMONSTER_INFO->mSpecialType == 18 )
                        goto LABEL_32;
                    for ( i = 0; i < mPLAY[0].MAX_AVATAR_OBJECT && (!mPLAY[0].mAVATAR_OBJECT[i].mCheckValidState || mPLAY[0].mAVATAR_OBJECT[i].mServerIndex != This->mDATA.mAction.aTargetObjectIndex || mPLAY[0].mAVATAR_OBJECT[i].mUniqueNumber != This->mDATA.mAction.aTargetObjectUniqueNumber); ++i )
                        ;
                    if ( i != mPLAY[0].MAX_AVATAR_OBJECT )
                    {
LABEL_32:
                        v5 = This->c03;
                        if ( v5 == 1 )
                        {
                            v4 = This->c04;
                            if ( v4 == 1 )
                            {
                                MONSTER_OBJECT::ProcessGAttackPacket(This);
                            }
                            else if ( v4 == 2 )
                            {
                                MONSTER_OBJECT::ProcessRAttackPacket(This);
                            }
                        }
                        else if ( v5 == 2 )
                        {
                            MONSTER_OBJECT::ProcessBAttackPacket(This);
                        }
                    }
                }
            }
        }
        else if ( v6 == 7 && This->c02 == 1 )
        {
            v11 = 0;
            if ( This->c05 )
            {
                if ( !PLAY::CheckMSkillFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
                    This->c05 = 0;
            }
            else if ( PLAY::CheckMSkillFrame(This->mMONSTER_INFO, This->mDATA.mAction.aFrame) )
            {
                This->c05 = 1;
                v11 = 1;
            }
            if ( v11 == 1 )
                MONSTER_OBJECT::ProcessSAttackPacket(This);
        }
        if ( This->c26 )
        {
            if ( This->c31 < This->c30 )
            {
                CopyMemory(v8, This->c33, 12);
                This->c27[1] = dTime * -300.0 + This->c27[1];
                This->c33[0] = This->c27[0] * dTime + This->c33[0];
                This->c33[1] = This->c27[1] * dTime + This->c33[1];
                This->c33[2] = This->c27[2] * dTime + This->c33[2];
                CopyMemory(&x, This->c33, 12);
                tPostYCoord = v9 + 20.0;
                if ( WORLD_FOR_GXD::GetYCoord(&mGDATA[0].mZONE.mWORLD, x, y[1], y, 1, tPostYCoord, 0, 0) )
                {
                    if ( This->c33[1] < y[0] - This->c32 )
                    {
                        ++This->c31;
                        This->c33[1] = y[0] - This->c32;
                        if ( This->c31 == 1 )
                            GSOUND::Play3(&mGDATA[0].mSOUND_05[26], This->c33, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation);
                    }
                }
            }
        }
        switch ( This->mDATA.mAction.aSort )
        {
            case 0:
                MONSTER_OBJECT::A001(This, tObjIndex, dTime);
                break;
            case 1:
                MONSTER_OBJECT::A002(This, tObjIndex, dTime);
                break;
            case 3:
                MONSTER_OBJECT::A004(This, tObjIndex, dTime);
                break;
            case 4:
                MONSTER_OBJECT::A005(This, tObjIndex, dTime);
                break;
            case 5:
                MONSTER_OBJECT::A006(This, tObjIndex, dTime);
                break;
            case 7:
                MONSTER_OBJECT::A008(This, tObjIndex, dTime);
                break;
            case 8:
                MONSTER_OBJECT::A009(This, tObjIndex, dTime);
                break;
            case 12:
                MONSTER_OBJECT::A013(This, tObjIndex, dTime);
                break;
            case 19:
                MONSTER_OBJECT::A020(This, tObjIndex, dTime);
                break;
            default:
                return;
        }
    }
}

void __thiscall MONSTER_OBJECT::ProcessGAttackPacket(MONSTER_OBJECT *This)
{
    ATTACK_FOR_PROTOCOL tAttackInfo; // [esp+4h] [ebp-48h] BYREF

    if ( mPLAY[0].mAVATAR_OBJECT[0].mServerIndex == This->mDATA.mAction.aTargetObjectIndex && mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber == This->mDATA.mAction.aTargetObjectUniqueNumber )
    {
        tAttackInfo.mCase = 4;
        tAttackInfo.mServerIndex1 = This->mIndex;
        tAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
        tAttackInfo.mServerIndex2 = mPLAY[0].mAVATAR_OBJECT[0].mServerIndex;
        tAttackInfo.mUniqueNumber2 = mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber;
        tAttackInfo.mSenderLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
        tAttackInfo.mSenderLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
        tAttackInfo.mSenderLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
        tAttackInfo.mAttackActionValue1 = 1;
        tAttackInfo.mAttackActionValue2 = 0;
        tAttackInfo.mAttackActionValue3 = 0;
        tAttackInfo.mAttackActionValue4 = 0;
        TRANSFER::T_PROCESS_ATTACK_SEND(&tAttackInfo);
    }
}

void __thiscall MONSTER_OBJECT::ProcessRAttackPacket(MONSTER_OBJECT *This)
{
    ATTACK_FOR_PROTOCOL tAttackInfo; // [esp+4h] [ebp-48h] BYREF

    if ( This->mMONSTER_INFO->mRadiusInfo[0] >= UTIL::ReturnLengthXYZ(mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation, This->mDATA.mAction.aLocation) )
    {
        tAttackInfo.mCase = 4;
        tAttackInfo.mServerIndex1 = This->mIndex;
        tAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
        tAttackInfo.mServerIndex2 = mPLAY[0].mAVATAR_OBJECT[0].mServerIndex;
        tAttackInfo.mUniqueNumber2 = mPLAY[0].mAVATAR_OBJECT[0].mUniqueNumber;
        tAttackInfo.mSenderLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
        tAttackInfo.mSenderLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
        tAttackInfo.mSenderLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
        tAttackInfo.mAttackActionValue1 = 1;
        tAttackInfo.mAttackActionValue2 = 0;
        tAttackInfo.mAttackActionValue3 = 0;
        tAttackInfo.mAttackActionValue4 = 0;
        TRANSFER::T_PROCESS_ATTACK_SEND(&tAttackInfo);
    }
}

void __thiscall MONSTER_OBJECT::ProcessBAttackPacket(MONSTER_OBJECT *This)
{
    int i; // [esp+Ch] [ebp-4h]

    for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
        ;
    if ( i != mPLAY[0].MAX_EFFECT_OBJECT )
    {
        mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 1;
        mPLAY[0].mEFFECT_OBJECT[i].mObjType = 3;
        mPLAY[0].mEFFECT_OBJECT[i].mObjSort = 2;
        mPLAY[0].mEFFECT_OBJECT[i].mServerIndex = This->mIndex;
        mPLAY[0].mEFFECT_OBJECT[i].mUniqueNumber = This->mUniqueNumber;
        mPLAY[0].mEFFECT_OBJECT[i].mDataSortNumber = This->mMONSTER_INFO->mDataSortNumber;
        mPLAY[0].mEFFECT_OBJECT[i].bb05 = 1;
        mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectIndex = This->mDATA.mAction.aTargetObjectIndex;
        mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectUniqueNumber = This->mDATA.mAction.aTargetObjectUniqueNumber;
        mPLAY[0].mEFFECT_OBJECT[i].bb08 = 0;
        mPLAY[0].mEFFECT_OBJECT[i].bb11 = 0;
        if ( This->mMONSTER_INFO->mDataSortNumber == 113 )
        {
            mPLAY[0].mEFFECT_OBJECT[i].bb08 = 1;
            switch ( This->mMONSTER_INFO->mSpecialType )
            {
                case 18:
                    mPLAY[0].mEFFECT_OBJECT[i].bb09 = 0;
                    break;
                case 35:
                    mPLAY[0].mEFFECT_OBJECT[i].bb09 = !mMYINFO[0].mUseAvatar.aTribe || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(0);
                    break;
                case 36:
                    mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 1 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(1);
                    break;
                case 37:
                    mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 2 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(2);
                    break;
                case 38:
                    mPLAY[0].mEFFECT_OBJECT[i].bb09 = mMYINFO[0].mUseAvatar.aTribe == 3 || mMYINFO[0].mUseAvatar.aTribe == PLAY::ReturnAllianceTribe(3);
                    break;
                default:
                    break;
            }
            mPLAY[0].mEFFECT_OBJECT[i].bb10 = 0.0;
        }
        mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx = UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber);
        if ( mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx == -1 )
        {
            mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 0;
        }
        else
        {
            mPLAY[0].mEFFECT_OBJECT[i].mFrame = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0] = This->mDATA.mAction.aLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1] = This->mMONSTER_INFO->mBulletInfo[0] + This->mDATA.mAction.aLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2] = This->mDATA.mAction.aLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[0] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[1] = This->mDATA.mAction.aFront;
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[2] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[0] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[1] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[2] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[0] = This->mDATA.mAction.aTargetLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[1] = This->mDATA.mAction.aTargetLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[2] = This->mDATA.mAction.aTargetLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].cc01 = This->mMONSTER_INFO->mBulletInfo[1];
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mCase = 4;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex1 = This->mIndex;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex2 = This->mDATA.mAction.aTargetObjectIndex;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber2 = This->mDATA.mAction.aTargetObjectUniqueNumber;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[0] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[1] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[2] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue1 = 1;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue2 = 0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue3 = 0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue4 = 0;
        }
    }
}

void __thiscall MONSTER_OBJECT::ProcessSAttackPacket(MONSTER_OBJECT *This)
{
    int i; // [esp+4h] [ebp-4h]

    for ( i = 0; i < mPLAY[0].MAX_EFFECT_OBJECT && mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState; ++i )
        ;
    if ( i != mPLAY[0].MAX_EFFECT_OBJECT )
    {
        mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 1;
        mPLAY[0].mEFFECT_OBJECT[i].mObjType = 3;
        mPLAY[0].mEFFECT_OBJECT[i].mObjSort = 2;
        mPLAY[0].mEFFECT_OBJECT[i].mServerIndex = This->mIndex;
        mPLAY[0].mEFFECT_OBJECT[i].mUniqueNumber = This->mUniqueNumber;
        mPLAY[0].mEFFECT_OBJECT[i].mDataSortNumber = This->mMONSTER_INFO->mDataSortNumber;
        mPLAY[0].mEFFECT_OBJECT[i].bb05 = 1;
        mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectIndex = This->mDATA.mAction.aTargetObjectIndex;
        mPLAY[0].mEFFECT_OBJECT[i].mTargetObjectUniqueNumber = This->mDATA.mAction.aTargetObjectUniqueNumber;
        mPLAY[0].mEFFECT_OBJECT[i].bb08 = 0;
        mPLAY[0].mEFFECT_OBJECT[i].bb11 = 1;
        mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx = UTIL::ReturnMonsterBulletObject(This->mMONSTER_INFO->mDataSortNumber);
        if ( mPLAY[0].mEFFECT_OBJECT[i].mMObjectIdx == -1 )
        {
            mPLAY[0].mEFFECT_OBJECT[i].mCheckValidState = 0;
        }
        else
        {
            mPLAY[0].mEFFECT_OBJECT[i].mFrame = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0] = This->mDATA.mAction.aLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1] = This->mMONSTER_INFO->mBulletInfo[0] + This->mDATA.mAction.aLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2] = This->mDATA.mAction.aLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[0] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[1] = This->mDATA.mAction.aFront;
            mPLAY[0].mEFFECT_OBJECT[i].mAngle[2] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[0] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[1] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mLocation[2] = mPLAY[0].mEFFECT_OBJECT[i].mDstLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[0] = This->mDATA.mAction.aTargetLocation[0];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[1] = This->mDATA.mAction.aTargetLocation[1];
            mPLAY[0].mEFFECT_OBJECT[i].mTargetLocation[2] = This->mDATA.mAction.aTargetLocation[2];
            mPLAY[0].mEFFECT_OBJECT[i].cc01 = This->mMONSTER_INFO->mBulletInfo[1];
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mCase = 4;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex1 = This->mIndex;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber1 = This->mUniqueNumber;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mServerIndex2 = This->mDATA.mAction.aTargetObjectIndex;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mUniqueNumber2 = This->mDATA.mAction.aTargetObjectUniqueNumber;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[0] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[1] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mSenderLocation[2] = 0.0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue1 = 1;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue2 = 0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue3 = 0;
            mPLAY[0].mEFFECT_OBJECT[i].mAttackInfo.mAttackActionValue4 = 1;
        }
    }
}

void __thiscall MONSTER_OBJECT::A001(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+4h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
    }
}

void __thiscall MONSTER_OBJECT::A002(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+4h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
        This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v4;
}

void __thiscall MONSTER_OBJECT::A004(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    float tSpeed; // [esp+0h] [ebp-18h]
    BOOL tCheckArrival; // [esp+10h] [ebp-8h] BYREF
    int v6; // [esp+14h] [ebp-4h]

    v6 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v6 )
        This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v6;
    tSpeed = This->mMONSTER_INFO->mWalkSpeed;
    if ( WORLD_FOR_GXD::Move(&mGDATA[0].mZONE.mRANGE1, This->mDATA.mAction.aLocation, This->mDATA.mAction.aTargetLocation, tSpeed, dTime, &tCheckArrival) )
    {
        if ( tCheckArrival )
        {
            This->mDATA.mAction.aSort = 1;
            This->mDATA.mAction.aFrame = 0.0;
        }
    }
    else
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
    }
}

void __thiscall MONSTER_OBJECT::A005(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    float tSpeed; // [esp+0h] [ebp-18h]
    BOOL tCheckArrival; // [esp+10h] [ebp-8h] BYREF
    int v6; // [esp+14h] [ebp-4h]

    v6 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v6 )
        This->mDATA.mAction.aFrame = This->mDATA.mAction.aFrame - v6;
    tSpeed = This->mMONSTER_INFO->mRunSpeed;
    if ( WORLD_FOR_GXD::Move(&mGDATA[0].mZONE.mRANGE1, This->mDATA.mAction.aLocation, This->mDATA.mAction.aTargetLocation, tSpeed, dTime, &tCheckArrival) )
    {
        if ( tCheckArrival )
        {
            This->mDATA.mAction.aSort = 1;
            This->mDATA.mAction.aFrame = 0.0;
        }
    }
    else
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
    }
}

void __thiscall MONSTER_OBJECT::A006(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+4h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
        This->c02 = 0;
    }
}

void __thiscall MONSTER_OBJECT::A008(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+4h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
        This->c02 = 0;
    }
}

void __thiscall MONSTER_OBJECT::A009(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+4h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
    {
        This->mDATA.mAction.aSort = 1;
        This->mDATA.mAction.aFrame = 0.0;
    }
}

void __thiscall MONSTER_OBJECT::A013(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    float tPostYCoord; // [esp+20h] [ebp-18h]
    float x; // [esp+28h] [ebp-10h]
    float y; // [esp+2Ch] [ebp-Ch] BYREF
    float z; // [esp+30h] [ebp-8h]
    int v8; // [esp+34h] [ebp-4h]

    v8 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aSkillNumber != 1 && This->c23 == 1 )
    {
        This->mDeathSpeedFrame = This->mDeathSpeedFrame - dTime * 100.0;
        if ( This->mDeathSpeedFrame < 0.0 )
            This->mDeathSpeedFrame = 0.0;
        x = This->mDATA.mAction.aTargetLocation[0] * This->mDeathSpeedFrame * dTime + This->mDATA.mAction.aLocation[0];
        y = This->mDATA.mAction.aLocation[1];
        z = This->mDATA.mAction.aTargetLocation[2] * This->mDeathSpeedFrame * dTime + This->mDATA.mAction.aLocation[2];
        tPostYCoord = This->mDATA.mAction.aLocation[1] + 20.0;
        if ( WORLD_FOR_GXD::GetYCoord(&mGDATA[0].mZONE.mRANGE1, x, z, &y, 1, tPostYCoord, 0, 1) )
        {
            This->mDATA.mAction.aLocation[0] = x;
            This->mDATA.mAction.aLocation[1] = y;
            This->mDATA.mAction.aLocation[2] = z;
        }
    }
    if ( This->mDATA.mAction.aFrame >= v8 )
    {
        This->mDATA.mAction.aFrame = (v8 - 1);
        if ( This->c23 == 1 )
        {
            This->c23 = 0;
            This->mLastDeathUpdate = mApp[0].hPresentElapsedSeconds;
        }
        else if ( mApp[0].hPresentElapsedSeconds - This->mLastDeathUpdate > 3.0 )
        {
            MONSTER_OBJECT::Free(This);
        }
    }
}

void __thiscall MONSTER_OBJECT::A020(MONSTER_OBJECT *This, int tObjIndex, float dTime)
{
    int v4; // [esp+8h] [ebp-4h]

    v4 = GDATA::ReturnMonsterMotionFrameNum(This->mMONSTER_INFO->mDataSortNumber - 1, This->mDATA.mAction.aSort);
    This->mDATA.mAction.aFrame = dTime * 30.0 + This->mDATA.mAction.aFrame;
    if ( This->mDATA.mAction.aFrame >= v4 )
        This->mDATA.mAction.aFrame = (v4 - 1);
}
lnwnuyhodd is offline  
Old 10/26/2022, 13:40   #2
 
elite*gold: 0
Join Date: Jan 2022
Posts: 28
Received Thanks: 5
how to use it?

how to use it?

how to use it?
java558 is offline  
Old 10/27/2022, 03:08   #3
 
RHNbaskan's Avatar
 
elite*gold: 0
Join Date: May 2016
Posts: 161
Received Thanks: 16
man i talk to a lot of people
also applies to myself
there is still no capacity to understand this.

To understand, you have to constantly look at the source code.

dude i read the codes a little
Can we get character positioning out of here?

but there is more than one in the source codes
I got control
There is no such table.
RHNbaskan is offline  
Reply


Similar Threads Similar Threads
what is the best class to grind metin2 yang(class selection guide for newbies)
07/07/2012 - Metin2 - 1 Replies
Again, I am using Enligsh. So if you cant read it well, just turn to google online translation. If i am supposed to say or answer what is the best class for grinding metin2 yang in Metin2, of course the most efficiently, i strongly recommand the Warrior, and promote to Sword Warrior at level 5. This class has both high defense and attack, as well as great area attack skill and control skill(I mean the stun skill). I recommend the BM sura as your second choice,because he has the sweetest...
[VK]Captain 2nd Class & 2nd.Leutant 2nd Class
12/28/2010 - CrossFire Trading - 9 Replies
Hallo liebe Elitepvpers Community , da ich jetzt leider aufhöre mit Crossfire und für was bestimmtes spare verkaufe ich nun meine beiden Crossfire Accounts. Captain Account 2nd Class Z8Games ? Home of the Best Free MMO Games - Clans - Character Details M4A1 Crystal AWM - Red Dragon AK Scope
WTB ANY CLASS LEVEL 100+ FOR LAST CHAOS ETERNIA!!!! ANY CLASS WTB WITH OR WITHOUT EQ
06/26/2010 - Last Chaos Trading - 0 Replies
What the title says, however the account for sale must not be past like £40, paypal will do and middleman the account must not been under any suspicon or anything!!
ANybody Knows how to change class to another class
08/20/2009 - Cabal Online - 5 Replies
I ve been wondering if a WA could wear a martial set or a wizard could wear battleset..Any one knows how to change class? ;)
Class change to TBC Class (bloodelf & Danei)
11/03/2006 - World of Warcraft - 127 Replies
habe das hier vor kurzem mal im icq gesendet bekommen, hoffe das steht hier noch net ^^ es ist zwar buggy z.b. wenn ihr ein troll mit tatoos in der fratze habt usw aber man kann es durch aus usen. am besten neuen char machen und richtig einstellen :). Anleitung: ladet die datei runter in euer World of Warcraft&#092;Data ordner und benennt sie in speech2.mpq um, dan einfach in wow einloggen wenn es ein stick wert ist bitte sticken :)



All times are GMT +1. The time now is 03:36.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.