You last visited: Today at 10:37
Advertisement
[Client] MONSTER_OBJECT class
Discussion on [Client] MONSTER_OBJECT class within the 12Sky2 forum part of the MMORPGs category.
10/26/2022, 13:26
#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);
}
10/26/2022, 13:40
#2
elite*gold: 0
Join Date: Jan 2022
Posts: 32
Received Thanks: 5
how to use it?
how to use it?
how to use it?
10/27/2022, 03:08
#3
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.
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\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 +2. The time now is 10:39 .