Code:
typedef struct MONSTER_DISTANCE
{
int mIndex;
float fDistance;
BOOL bSomeValid;
} MONSTER_DISTANCE;
#include <list>
#define MAX_NEAR_MONSTER 15
class CInnerAuto
{
public:
BYTE bIsClick[12];
int unk3;
int unk4;
BYTE mActive;
int uY;
int uX;
USHORT mIsAutoState;
MONSTER_DISTANCE mNearMonster[MAX_NEAR_MONSTER];
USHORT mMaxNearMonster;
int mTargetObjIndex;
int mCurActionSort;
DWORD dSearchTick;
DWORD mCurActionSortTick;
DWORD dActionTick;
DWORD dSkillTick;
DWORD unk62;
DWORD dPotionTIck;
float aActLocation[3];
float aActTargetLocation[3];
BOOL mWantToMove;
BOOL bIsAction;
BOOL mChangeZone;
BOOL bTakeItem;
USHORT mItemSetupTab;
USHORT unk75;
std::list<std::string> stdObtianItem;
std::list<std::string> stdLoseItem;
void Wrapper( void );
BOOL SearchWall( float tCoord[3] );
BOOL SearchMonster( void );
int GetTargetMonster( void );
void SetTargetUnvalid0( void );
void SwapMinDistenceMonster( int a2, float a3, int a4 );
float GetDiatenceFromMonster( float tCoord[3] );
void ClearMonster( void );
BOOL GetIsTargetValid0( int a2 );
BOOL GetNearMonster( void );
void SetTargetUnvalid( int a2 );
int GetItemIndex( void );
void DrawSkillPosition( void );
void DrawForBuff( int mX, int mY );
void DrawForHunt( int mX, int mY );
void DrawForItemList( int mX, int mY );
BOOL LbuttonDownForBuff( int mX, int mY );
BOOL LbuttonDownForHunt( int mX, int mY );
BOOL LbuttonDownForItemList( int mX, int mY );
BOOL LbuttonUpForBuff( int mX, int mY );
BOOL LbuttonUpForHunt( int mX, int mY );
BOOL LbuttonUpForItemList( int mX, int mY );
BOOL IsAttackSkill( int tSort, int s );
BOOL IsBuffSkill( int tSort, int s );
BOOL GetWeponAttackKind( int tWeaponKind );
BOOL GetWeponKind( int tWeaponKind );
BOOL GetTribeKind( int tTribe );
BOOL TakeItem( void );
BOOL EatChunGongDan( void );
BOOL EatChunWangDan( void );
BOOL CheckPotion( void );
BOOL SetAvatarTarget( void );
BOOL MoveNoTarget( void );
BOOL GetIsTargetValid( void );
BOOL IsAbleKey( int a1, int a2 );
BOOL Init( void );
BOOL LoadObtainItemList( void );
BOOL LoadLoseItemList( void );
BOOL SaveObtainItemList( void );
BOOL SaveLoseItemList( void );
BOOL InitForMovezone( void );
BOOL UseItem( void );
BOOL CheckParty( void );
BOOL CheckIsBegin( void );
void Update( void );
BOOL KeyBoard( void );
BOOL LBUTTONDOWN( int mX, int mY );
BOOL LBUTTONUP( int mX, int mY );
void Draw( int mX, int mY );
int IsOnSkillBox( int mX, int mY );
BOOL IsItemListExist( char *iName );
BOOL IsPriorityObtainItem( char *iName );
BOOL IsPriorityLoseItem( char *iName );
BOOL HotKeyAutoStart( void );
BOOL HotKeyAutoStop( void );
void SetBuffSkill( int sSlot, int sIndex, int sLevel );
int GetIsBegin( void );
void SetIsTakeItem( BOOL bTakeItem );
void OnView( void );
};
#define self this
#define OBTIAN_ITEM_FILE_NAME "G02_GINFO\\011.BIN"
#define LOST_ITEM_FILE_NAME "G02_GINFO\\012.BIN"
#define MAX_AUTO_ITEM_LIST 48
char mObtianItem[MAX_AUTO_ITEM_LIST][MAX_ITEM_NAME_LENGTH];
char mLostItem[MAX_AUTO_ITEM_LIST][MAX_ITEM_NAME_LENGTH];
void FillItemList( char* data )
{
memset( data, '@', MAX_ITEM_NAME_LENGTH );
data[MAX_ITEM_NAME_LENGTH - 1] = '\0';
}
BOOL CInnerAuto::SearchWall( float tCoord[3] )
{
float tSpeed;
int i;
float *tFromPosition, tTargetLocation[3];
/*left-right*/
float x;
/*forward-backword*/
float z;
float tReturnPosition[3];
if ( !mGDATA[0].mZONE.mRANGE1.mCheckValidState )
return 0;
//grid slot 4x4
for ( i = 0; i < 8; i++ )
{
switch ( i )
{
case 0:
x = 1.0f;
z = 0.0f;
break;
case 1:
x = 1.0f;
z = 1.0f;
break;
case 2:
x = 0.0f;
z = 1.0f;
break;
case 3:
x = -1.0f;
z = 1.0f;
break;
case 4:
x = -1.0f;
z = 0.0f;
break;
case 5:
x = -1.0f;
z = -1.0f;
break;
case 6:
x = 0.0f;
z = -1.0f;
break;
case 7:
x = 1.0f;
z = -1.0f;
break;
}
tFromPosition = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation;
tTargetLocation[0] = x * 10.0f + tFromPosition[0];
tTargetLocation[1] = tFromPosition[1];
tTargetLocation[2] = z * 10.0f + tFromPosition[2];
tSpeed = FACTOR::GetRunSpeed();
WORLD_FOR_GXD::Path( &mGDATA[0].mZONE.mRANGE1, tFromPosition, tTargetLocation, tSpeed, 0.033f, tReturnPosition );
if ( tReturnPosition[0] == tTargetLocation[0] && tReturnPosition[2] == tTargetLocation[2] )
{
tCoord[0] = tTargetLocation[0];
tCoord[1] = tTargetLocation[1];
tCoord[2] = tTargetLocation[2];
return 1;
}
}
return 0;
}
BOOL CInnerAuto::SearchMonster( void )
{
float tAtkRadius;
float tSpeed;
float tMonPosition[3];
int bIsFoundForAuto;
float tReturnPosition[3];
int i;
MONSTER_INFO* info;
MONSTER_OBJECT* mon, *mon2;
float tDistance;
if ( !mGDATA[0].mZONE.mRANGE1.mCheckValidState )
return 0;
CInnerAuto::ClearMonster();
for ( i = 0; i < mPLAY[0].MAX_MONSTER_OBJECT; i++ )
{
mon = &mPLAY[0].mMONSTER_OBJECT[i];
info = MONSTER::Search( mon->mDATA.mIndex );
if ( !info || !mon->mCheckValidState || !mon->mDATA.mAction.aSort || mon->mDATA.mAction.aSort == 12 || info->mType > 3 || info->mSpecialType > 1 )
continue;
tReturnPosition[0] = 1.0f;
tReturnPosition[1] = 0.0f;
tReturnPosition[2] = 0.0f;
tMonPosition[0] = mon->mDATA.mAction.aLocation[0];
tMonPosition[1] = mon->mDATA.mAction.aLocation[1];
tMonPosition[2] = mon->mDATA.mAction.aLocation[2];
tDistance = CInnerAuto::GetDiatenceFromMonster( mon->mDATA.mAction.aLocation );
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type != 1 )
{
tSpeed = FACTOR::GetRunSpeed();
WORLD_FOR_GXD::Path( &mGDATA[0].mZONE.mRANGE1, mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation, tMonPosition, tSpeed, 0.033f, tReturnPosition );
if ( tReturnPosition[0] != tMonPosition[0] || tReturnPosition[2] != tMonPosition[2] )
continue;
}
else
{
mon2 = &mPLAY[0].mMONSTER_OBJECT[self->mTargetObjIndex];
if ( CInnerAuto::GetWeponAttackKind(2) )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] )
tAtkRadius = (float)FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] );
else
tAtkRadius = (float)FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] );
tAtkRadius += mon2->mRadiusForSize;
}
else
{
tAtkRadius = FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] ) + mon2->mRadiusForSize;
}
if ( tDistance > tAtkRadius )
continue;;
}
bIsFoundForAuto = mon->c23 != 1;
if ( self->mMaxNearMonster )
{
CInnerAuto::SwapMinDistenceMonster( i, tDistance, bIsFoundForAuto );
}
else
{
self->mNearMonster[self->mMaxNearMonster].fDistance = tDistance;
self->mNearMonster[self->mMaxNearMonster].mIndex = i;
self->mNearMonster[self->mMaxNearMonster].bSomeValid = bIsFoundForAuto;
self->mMaxNearMonster = 1;
}
}
return self->mMaxNearMonster != 0;
}
int CInnerAuto::GetTargetMonster()
{
float tSpeed;
float tMonPosition[3], tCharPosition[3];
float tReturnPosition[3];
int i;
MONSTER_INFO *info;
MONSTER_OBJECT* mon;
if ( !mGDATA[0].mZONE.mRANGE1.mCheckValidState )
return 0;
for ( i = 0; i < self->mMaxNearMonster; ++i )
{
if ( self->mNearMonster[i].bSomeValid )
{
self->mTargetObjIndex = self->mNearMonster[i].mIndex;
if ( self->mTargetObjIndex >= 0 )
{
mon = &mPLAY[0].mMONSTER_OBJECT[self->mTargetObjIndex];
info = MONSTER::Search( mon->mDATA.mIndex );
if ( info && mon->mDATA.mAction.aSort > 0 && mon->mDATA.mAction.aSort != 12 && mon->mCheckValidState )
{
if ( info->mType <= 3 && info->mSpecialType <= 1 )
{
tMonPosition[0] = mon->mDATA.mAction.aLocation[0];
tMonPosition[1] = mon->mDATA.mAction.aLocation[1];
tMonPosition[2] = mon->mDATA.mAction.aLocation[2];
tCharPosition[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
tCharPosition[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
tCharPosition[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
tSpeed = FACTOR::GetRunSpeed();
WORLD_FOR_GXD::Path( &mGDATA[0].mZONE.mRANGE1, tCharPosition, tMonPosition, tSpeed, 0.033f, tReturnPosition );
if ( tReturnPosition[0] == tMonPosition[0] && tReturnPosition[2] == tMonPosition[2] )
return self->mNearMonster[i].mIndex;
}
}
CInnerAuto::SetTargetUnvalid0();
}
}
}
return -1;
}
void CInnerAuto::SetTargetUnvalid0( void )
{
int i;
for ( i = 0; i < MAX_NEAR_MONSTER; i++ )
{
if ( self->mNearMonster[i].mIndex == self->mTargetObjIndex )
{
self->mNearMonster[i].bSomeValid = 0;
self->mNearMonster[i].fDistance = 0.0f;
self->mNearMonster[i].mIndex = -1;
self->mTargetObjIndex = -1;
return;
}
}
}
void CInnerAuto::SwapMinDistenceMonster( int a2, float a3, int a4 )
{
int i;
for ( i = 0; i < self->mMaxNearMonster; i++ )
{
if ( a3 < self->mNearMonster[i].fDistance )
{
self->mNearMonster[i].mIndex = a2;
self->mNearMonster[i].fDistance = a3;
self->mNearMonster[i].bSomeValid = a4;
a2 = self->mNearMonster[i].mIndex;
a3 = self->mNearMonster[i].fDistance;
a4 = self->mNearMonster[i].bSomeValid;
}
}
if ( self->mMaxNearMonster < MAX_NEAR_MONSTER )
{
self->mNearMonster[self->mMaxNearMonster].mIndex = a2;
self->mNearMonster[self->mMaxNearMonster].fDistance = a3;
self->mNearMonster[self->mMaxNearMonster++].bSomeValid = a4;
}
}
float CInnerAuto::GetDiatenceFromMonster( float tCoord[3] )
{
return sqrt(
pow((tCoord[0] - mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0]), 2) +
pow((tCoord[1] - mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1]), 2) +
pow((tCoord[2] - mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2]), 2)
);
}
void CInnerAuto::ClearMonster( void )
{
MONSTER_DISTANCE n[MAX_NEAR_MONSTER];
if ( !CInnerAuto::GetIsTargetValid0(self->mTargetObjIndex) )
CInnerAuto::SetTargetUnvalid0();
self->mMaxNearMonster = 0;
for ( int i = 0; i < MAX_NEAR_MONSTER; i++ )
{
n[i].mIndex = -1;
n[i].fDistance = 0.0f;
n[i].bSomeValid = 0;
}
CopyMemory( self->mNearMonster, n, sizeof(self->mNearMonster) );
}
BOOL CInnerAuto::GetIsTargetValid0( int mIndex )
{
if ( self->mMaxNearMonster >= MAX_NEAR_MONSTER )
return 0;
for ( int i = 0; i < self->mMaxNearMonster; i++ )
{
if ( self->mNearMonster[i].bSomeValid && self->mNearMonster[i].mIndex == mIndex )
return 1;
}
return 0;
}
BOOL CInnerAuto::GetNearMonster( void )
{
float tCoord[3];
int i;
int mon_num;
float tDistance;
int v8;
MONSTER_INFO *v9;
MONSTER_OBJECT* mon;
mon_num = 0;
tDistance = FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] );
for ( i = 0; i < self->mMaxNearMonster; i++ )
{
v8 = self->mNearMonster[i].mIndex;
if( v8 < 0 )
continue;
mon = &mPLAY[0].mMONSTER_OBJECT[v8];
v9 = MONSTER::Search( mon->mDATA.mIndex );
if( !v9 )
{
CInnerAuto::SetTargetUnvalid(v8);
continue;
}
if (
mon->mCheckValidState &&
mon->mDATA.mAction.aSort &&
mon->mDATA.mAction.aSort != 12 &&
v9->mType <= 3 && v9->mSpecialType <= 1
)
{
tCoord[0] = mPLAY[0].mMONSTER_OBJECT[v8].mDATA.mAction.aLocation[0];
tCoord[1] = mPLAY[0].mMONSTER_OBJECT[v8].mDATA.mAction.aLocation[1];
tCoord[2] = mPLAY[0].mMONSTER_OBJECT[v8].mDATA.mAction.aLocation[2];
if ( CInnerAuto::GetDiatenceFromMonster(tCoord) <= ( tDistance + mPLAY[0].mMONSTER_OBJECT[v8].mRadiusForSize ) )
mon_num++;
if ( mon_num >= mMYINFO[0].mUseAvatar.aAutoHunt.mon_num )
return 1;
}
else
{
CInnerAuto::SetTargetUnvalid(v8);
}
}
return 0;
}
void CInnerAuto::SetTargetUnvalid( int mIndex )
{
int i;
for ( i = 0; i < MAX_NEAR_MONSTER; i++ )
{
if ( self->mNearMonster[i].mIndex == mIndex )
{
self->mNearMonster[i].bSomeValid = 0;
self->mNearMonster[i].fDistance = 0.0f;
self->mNearMonster[i].mIndex = -1;
self->mTargetObjIndex = -1;
return;
}
}
}
int CInnerAuto::GetItemIndex( void )
{
int v1;
int v2;
int j;
int i;
int v5;
float v6;
float v7;
float v8;
v5 = -1;
for ( i = 0; i < mPLAY[0].MAX_ITEM_OBJECT; ++i )
{
if ( mPLAY[0].mITEM_OBJECT[i].mCheckValidState && ITEM_OBJECT::CheckPossibleGetItem(&mPLAY[0].mITEM_OBJECT[i]) && mPLAY[0].mITEM_OBJECT[i].mITEM_INFO->iSort == 1 )
{
if ( mPLAY[0].mITEM_OBJECT[i].mDATA.iQuantity + mMYINFO[0].mUseAvatar.aMoney > MAX_NUMBER_SIZE )
{
v5 = -1;
break;
}
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type != 1 )
{
v5 = i;
break;
}
v6 = CInnerAuto::GetDiatenceFromMonster(mPLAY[0].mITEM_OBJECT[i].mDATA.iLocation);
if ( v6 < 50.0f )
{
v5 = i;
break;
}
}
}
if ( v5 == -1 )
{
for ( j = 0; j < mPLAY[0].MAX_ITEM_OBJECT; ++j )
{
if ( mPLAY[0].mITEM_OBJECT[j].mCheckValidState && ITEM_OBJECT::CheckPossibleGetItem(&mPLAY[0].mITEM_OBJECT[j]) )
{
if ( CInnerAuto::IsPriorityObtainItem(mPLAY[0].mITEM_OBJECT[j].mITEM_INFO->iName) )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type != 1 )
return j;
v7 = CInnerAuto::GetDiatenceFromMonster(mPLAY[0].mITEM_OBJECT[j].mDATA.iLocation);
if ( v7 < 50.0f )
return j;
}
else
{
v1 = mPLAY[0].mITEM_OBJECT[j].mITEM_INFO->iType;
switch ( v1 )
{
case 1:
v2 = 1;
break;
case 2:
v2 = 2;
break;
case 3:
v2 = 4;
break;
case 4:
v2 = 8;
break;
default:
v2 = 0;
break;
}
if ( !v2 )
return -1;
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & v2) == v2 && !CInnerAuto::IsPriorityLoseItem(mPLAY[0].mITEM_OBJECT[j].mITEM_INFO->iName) )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type != 1 )
return j;
v8 = CInnerAuto::GetDiatenceFromMonster(mPLAY[0].mITEM_OBJECT[j].mDATA.iLocation);
if ( v8 < 50.0f )
return j;
}
}
}
}
}
return v5;
}
void CInnerAuto::DrawSkillPosition( void )
{
int i;
int v3;
SKILL_INFO *v4;
SKILL_INFO *v5;
SKILL_INFO *v6;
int v7;
if ( !self->mActive )
return;
MYINFO::AdjustScreenCoord(3420, 270, 182, &self->uX, &self->uY);
if ( !self->mIsAutoState )
{
for ( i = 0; ; ++i )
{
if ( i >= 8 )
return;
v3 = 93 * (i / 4) + 149;
v7 = ((i & 3) << 6) + 23;
if ( mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[i][0] )
{
v4 = SKILL::Search(mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[i][0]);
if ( !v4 )
continue;
GIMAGE2D::Display(&mGDATA[0].mUI_ICON[(v4->sDataNumber2D - 1)], self->uX + v7, self->uY + v3);
}
if ( mMYINFO[0].mUseAvatar.aAutoBuffTime <= 0 && i > 1 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3436], self->uX + v7, self->uY + v3);
}
}
if ( self->mIsAutoState == 1 )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] )
{
v5 = SKILL::Search(mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0]);
if ( !v5 )
return;
GIMAGE2D::Display(&mGDATA[0].mUI_ICON[(v5->sDataNumber2D + 1)], self->uX + 44, self->uY + 164);
}
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] )
{
v6 = SKILL::Search(mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0]);
if ( v6 )
GIMAGE2D::Display(&mGDATA[0].mUI_ICON[(v6->sDataNumber2D + 1)], self->uX + 74, self->uY + 164);
}
}
}
void CInnerAuto::DrawForBuff( int mX, int mY )
{
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3420], self->uX, self->uY);
CInnerAuto::DrawSkillPosition();
}
void CInnerAuto::DrawForHunt( int mX, int mY )
{
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3421], self->uX, self->uY);
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 100, self->uY + 117);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 225, self->uY + 117);
if ( mMYINFO[0].mUseAvatar.aAutoHunt.mon_num && mMYINFO[0].mUseAvatar.aAutoHunt.mon_num < 6 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[mMYINFO[0].mUseAvatar.aAutoHunt.mon_num + 782], self->uX + 12 * (mMYINFO[0].mUseAvatar.aAutoHunt.mon_num - 1) + 173, self->uY + 170);
if ( self->bIsClick[3] )
{
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[782], self->uX + 156, self->uY + 169);
}
else if ( self->bIsClick[4] )
{
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[788], self->uX + 235, self->uY + 169);
}
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 1) != 0 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 128, self->uY + 232);
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 2) != 0 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 163, self->uY + 232);
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 4) != 0 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 198, self->uY + 232);
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 8) != 0 )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 233, self->uY + 232);
if ( mMYINFO[0].mUseAvatar.aAutoHunt.inven_cmd )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 257);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 257);
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 282);
if ( mMYINFO[0].mUseAvatar.aAutoHunt.animal_prey_cmd )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 307);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 307);
if ( mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 332);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 332);
CInnerAuto::DrawSkillPosition();
}
void CInnerAuto::DrawForItemList( int mX, int mY )
{
int v3, v4, v5, v6, v7, v8;
int v13, v14, v15, v16, v18, v19;
char tString[1000];
int i;
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3422], self->uX, self->uY);
GetWindowTextA( mEDITBOX[0].mDATA[19], tString, 1000 );
v15 = self->uY + 282;
v3 = self->uX + 139;
v4 = UTIL::ReturnStringLength(tString);
UTIL::DrawFont2D(tString, v3 - v4 / 2, v15, 1);
if ( mEDITBOX[0].mDataIndex == 20 )
{
v19 = self->uY + 282;
v5 = self->uX;
v6 = UTIL::ReturnStringLength(tString);
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[43], v5 + v6 / 2 + 139, v19);
}
sprintf(tString, "%d / %d", self->unk75, 8);
v16 = self->uY + 326;
v7 = self->uX + 139;
v8 = UTIL::ReturnStringLength(tString);
UTIL::DrawFont2D(tString, v7 - v8 / 2, v16, 1);
if ( self->mItemSetupTab == 0 || self->mItemSetupTab == 1 )
{
//mItemSetupTab == 1 stdObtianItem
//mItemSetupTab == 1 stdLoseItem
//std::list<std::tString>::iterator itBegin;
//std::list<std::tString>::iterator itEnd;
//char** itList;
//if ( self->mItemSetupTab == 0 )
//{
// //itBegin = self->stdObtianItem.begin();
// //itEnd = self->stdObtianItem.end();
//}
//else
//{
// //itBegin = self->stdLoseItem.begin();
// //itEnd = self->stdLoseItem.end();
//}
//int iCount = 0;
//i = 0;
//while ( itBegin != itEnd )
//{
// int chk = i / 6 == self->unk75 - 1;
// if ( i / 6 == self->unk75 - 1 )
// {
// itList[iCount] = (char*)(itBegin)->c_str();
// iCount++;
// if( iCount == 6 )
// {
// break;
// }
// }
// i++;
// ++itBegin;
//}
int iPage, iSlot;
for ( i = 0; i < 6; i++ )
{
iPage = self->unk75 - 1;
//if ( i / 6 == iPage )
{
ZeroMemory( tString, MAX_ITEM_NAME_LENGTH );
iSlot = (iPage * 6) + i;
if ( self->mItemSetupTab == 0 )
strcpy( tString, (const char*)mObtianItem[iSlot] );
else
strcpy( tString, (const char*)mLostItem[iSlot] );
v18 = self->uY + 24 * (i % 6) + 139;
v13 = self->uX + 139;
v14 = UTIL::ReturnStringLength(tString);
UTIL::DrawFont2D(tString, v13 - v14 / 2, v18, 1);
}
}
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3476], self->uX + 74, self->uY + 303, mX, mY) )
{
if ( self->bIsClick[5] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3477], self->uX + 74, self->uY + 303);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3476], self->uX + 74, self->uY + 303);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3478], self->uX + 144, self->uY + 303, mX, mY) )
{
if ( self->bIsClick[6] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3479], self->uX + 144, self->uY + 303);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3478], self->uX + 144, self->uY + 303);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3484], self->uX + 26, self->uY + 103, mX, mY) )
{
if ( !self->bIsClick[7] )
{
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3484], self->uX + 26, self->uY + 103);
goto LABEL_45;
}
}
else if ( self->mItemSetupTab )
{
goto LABEL_45;
}
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3485], self->uX + 26, self->uY + 103);
LABEL_45:
if ( !GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3486], self->uX + 153, self->uY + 103, mX, mY) )
{
if ( self->mItemSetupTab != 1 )
goto LABEL_51;
LABEL_50:
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3487], self->uX + 153, self->uY + 103);
goto LABEL_51;
}
if ( self->bIsClick[8] )
goto LABEL_50;
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3486], self->uX + 153, self->uY + 103);
LABEL_51:
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[782], self->uX + 78, self->uY + 325, mX, mY) && self->bIsClick[9] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[782], self->uX + 78, self->uY + 325);
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[788], self->uX + 197, self->uY + 325, mX, mY) )
{
if ( self->bIsClick[10] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[788], self->uX + 197, self->uY + 325);
}
}
BOOL CInnerAuto::LbuttonDownForBuff( int mX, int mY )
{
BOOL result;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
self->bIsClick[0] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
self->bIsClick[1] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
self->bIsClick[2] = 1;
result = 1;
}
else
{
result = 0;
}
return result;
}
BOOL CInnerAuto::LbuttonDownForHunt( int mX, int mY )
{
BOOL result;
int i;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
if ( mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort == 2 )
{
BASICUI::Insert1(120);
}
else
{
self->bIsClick[0] = 1;
}
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
self->bIsClick[1] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
self->bIsClick[2] = 1;
result = 1;
}
else if ( mMYINFO[0].mUseAvatar.aAutoState == 1 )
{
BASICUI::Insert1(1905);
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[782], self->uX + 156, self->uY + 169, mX, mY) )
{
self->bIsClick[3] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[788], self->uX + 235, self->uY + 169, mX, mY) )
{
self->bIsClick[4] = 1;
result = 1;
}
else
{
for ( i = 1; i < 6; ++i )
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[i + 782], self->uX + 12 * (i - 1) + 173, self->uY + 177, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.mon_num = i;
break;
}
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 100, self->uY + 117, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 225, self->uY + 117, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type = 0;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 128, self->uY + 232, mX, mY) )
{
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 1) != 0 )
mMYINFO[0].mUseAvatar.aAutoHunt.item_type ^= 1;
else
mMYINFO[0].mUseAvatar.aAutoHunt.item_type |= 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 163, self->uY + 232, mX, mY) )
{
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 2) != 0 )
mMYINFO[0].mUseAvatar.aAutoHunt.item_type ^= 2;
else
mMYINFO[0].mUseAvatar.aAutoHunt.item_type |= 2;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 198, self->uY + 232, mX, mY) )
{
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 4) != 0 )
mMYINFO[0].mUseAvatar.aAutoHunt.item_type ^= 4;
else
mMYINFO[0].mUseAvatar.aAutoHunt.item_type |= 4;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 233, self->uY + 232, mX, mY) )
{
if ( (mMYINFO[0].mUseAvatar.aAutoHunt.item_type & 8) != 0 )
mMYINFO[0].mUseAvatar.aAutoHunt.item_type ^= 8;
else
mMYINFO[0].mUseAvatar.aAutoHunt.item_type |= 8;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 257, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.inven_cmd = 0;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 257, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.inven_cmd = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 307, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_prey_cmd = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 307, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_prey_cmd = 0;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 131, self->uY + 332, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[713], self->uX + 205, self->uY + 332, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd = 0;
}
mMYINFO[0].mUseAvatar.aAutoHunt.death_cmd = 1;
TRANSFER::T_AUTO_CONFIG_SEND(mMYINFO[0].mUseAvatar.aAutoState);
result = 1;
}
return result;
}
BOOL CInnerAuto::LbuttonDownForItemList( int mX, int mY )
{
BOOL result;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
self->bIsClick[0] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
self->bIsClick[1] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
self->bIsClick[2] = 1;
result = 1;
}
else if ( mX <= mEDITBOX[0].mEditBoxInfo[19][0] || mX >= mEDITBOX[0].mEditBoxInfo[19][2] || mY <= mEDITBOX[0].mEditBoxInfo[19][1] || mY >= mEDITBOX[0].mEditBoxInfo[19][3] )
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3476], self->uX + 74, self->uY + 303, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[5] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3478], self->uX + 144, self->uY + 303, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[6] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3484], self->uX + 26, self->uY + 103, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[7] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3486], self->uX + 153, self->uY + 103, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[8] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[782], self->uX + 78, self->uY + 325, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[9] = 1;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[788], self->uX + 197, self->uY + 325, mX, mY) )
{
GSOUND::Play(&mGDATA[0].mSOUND_05[2], 0, 100, 1);
self->bIsClick[10] = 1;
result = 1;
}
else
{
result = 0;
}
}
else
{
EDITBOX::Set(20);
result = 1;
}
return result;
}
BOOL CInnerAuto::LbuttonUpForBuff( int mX, int mY )
{
if ( self->bIsClick[0] )
{
self->bIsClick[0] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
if (CInnerAuto::CheckIsBegin())
{
if (CInnerAuto::CheckPotion())
{
mMYINFO[0].mHotKeyIndex = -1;
if (!mMYINFO[0].mUseAvatar.aAutoState)
{
mMYINFO[0].mUseAvatar.aAutoState = 1;
TRANSFER::T_AUTO_CONFIG_SEND(1);
SKILLUI::Off();
self->mActive = FALSE;
if (mEDITBOX[0].mDataIndex == 20)
EDITBOX::Set(0);
BASICUI::Insert1(1907);
self->mChangeZone = FALSE;
}
}
else
{
BASICUI::Insert1(1792);
}
}
else
{
BASICUI::Insert1(1790);
}
}
return 1;
}
if ( self->bIsClick[1] )
{
self->bIsClick[1] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoState = 0;
TRANSFER::T_AUTO_CONFIG_SEND(0);
CInnerAuto::ClearMonster();
BASICUI::Insert1(1908);
}
return 1;
}
if ( self->bIsClick[2] )
{
self->bIsClick[2] = 0;
if ( GIMAGE2D::CheckIn( &mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY ) )
{
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
}
return 1;
}
return 0;
}
BOOL CInnerAuto::LbuttonUpForHunt( int mX, int mY )
{
if ( self->bIsClick[0] )
{
self->bIsClick[0] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
if (CInnerAuto::CheckIsBegin())
{
if (CInnerAuto::CheckPotion())
{
mMYINFO[0].mHotKeyIndex = -1;
if (!mMYINFO[0].mUseAvatar.aAutoState)
{
mMYINFO[0].mUseAvatar.aAutoState = 1;
TRANSFER::T_AUTO_CONFIG_SEND(1);
SKILLUI::Off();
self->mActive = FALSE;
self->mChangeZone = FALSE;
if (mEDITBOX[0].mDataIndex == 20)
EDITBOX::Set(0);
BASICUI::Insert1(1907);
}
}
else
{
BASICUI::Insert1(1792);
}
}
else
{
BASICUI::Insert1(1790);
}
}
return 1;
}
if ( self->bIsClick[1] )
{
self->bIsClick[1] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoState = 0;
TRANSFER::T_AUTO_CONFIG_SEND(0);
CInnerAuto::ClearMonster();
BASICUI::Insert1(1908);
}
return 1;
}
if ( self->bIsClick[2] )
{
self->bIsClick[2] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
}
return 1;
}
if ( self->bIsClick[3] )
{
self->bIsClick[3] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[782], self->uX + 156, self->uY + 169, mX, mY) )
{
if ( --mMYINFO[0].mUseAvatar.aAutoHunt.mon_num < 1 )
mMYINFO[0].mUseAvatar.aAutoHunt.mon_num = 1;
}
return 1;
}
if ( self->bIsClick[4] )
{
self->bIsClick[4] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[788], self->uX + 235, self->uY + 169, mX, mY) )
{
if ( ++mMYINFO[0].mUseAvatar.aAutoHunt.mon_num > 5 )
mMYINFO[0].mUseAvatar.aAutoHunt.mon_num = 5;
}
return 1;
}
return 0;
}
BOOL CInnerAuto::LbuttonUpForItemList( int mX, int mY )
{
char tString[1000];
if ( self->bIsClick[0] )
{
self->bIsClick[0] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
if ( CInnerAuto::CheckIsBegin() )
{
if ( CInnerAuto::CheckPotion() )
{
mMYINFO[0].mHotKeyIndex = -1;
if ( !mMYINFO[0].mUseAvatar.aAutoState )
{
mMYINFO[0].mUseAvatar.aAutoState = 1;
TRANSFER::T_AUTO_CONFIG_SEND(1);
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
BASICUI::Insert1(MESSAGE::Return(1907));
self->mChangeZone = 0;
}
}
else
{
BASICUI::Insert1(MESSAGE::Return(1792));
}
}
else
{
BASICUI::Insert1(MESSAGE::Return(1790));
}
return 1;
}
}
if ( self->bIsClick[1] )
{
self->bIsClick[1] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
mMYINFO[0].mUseAvatar.aAutoState = 0;
TRANSFER::T_AUTO_CONFIG_SEND(0);
CInnerAuto::ClearMonster();
BASICUI::Insert1(MESSAGE::Return(1908));
return 1;
}
}
if ( self->bIsClick[2] )
{
self->bIsClick[2] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
return 1;
}
}
if ( self->bIsClick[7] )
{
self->bIsClick[7] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3484], self->uX + 26, self->uY + 103, mX, mY) )
self->mItemSetupTab = 0;
return 1;
}
if ( self->bIsClick[8] )
{
self->bIsClick[8] = 0;
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3486], self->uX + 153, self->uY + 103, mX, mY) )
self->mItemSetupTab = 1;
return 1;
}
if ( self->bIsClick[9] )
{
self->bIsClick[9] = 0;
if ( !GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[782], self->uX + 78, self->uY + 325, mX, mY) )
return 1;
if ( self->unk75 >= 2u )
--self->unk75;
else
self->unk75 = 1;
return 1;
}
if ( !self->bIsClick[10] )
{
if ( mMYINFO[0].mUseAvatar.aAutoState == 1 )
{
BASICUI::Insert1(MESSAGE::Return(1905));
self->bIsClick[5] = 0;
self->bIsClick[6] = 0;
return 1;
}
if ( self->bIsClick[5] )
{
self->bIsClick[5] = 0;
if ( !GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3476], self->uX + 74, self->uY + 303, mX, mY) )
return 1;
if ( !GetWindowTextA(mEDITBOX[0].mDATA[19], tString, 25) )
{
BASICUI::Insert1(MESSAGE::Return(1949));
return 1;
}
if ( !ITEM::IsItemExist(tString) )
{
BASICUI::Insert1(MESSAGE::Return(1948));
return 0;
}
if ( CInnerAuto::IsItemListExist(tString) )
{
BASICUI::Insert1(MESSAGE::Return(1947));
return 0;
}
if ( self->mItemSetupTab == 0 || self->mItemSetupTab == 1 )
{
int tAdd = MAX_AUTO_ITEM_LIST;
if ( self->mItemSetupTab == 0 )
{
if( !CInnerAuto::IsPriorityObtainItem(tString) && !CInnerAuto::IsPriorityLoseItem(tString) )
{
for ( tAdd = 0; tAdd < MAX_AUTO_ITEM_LIST; tAdd++ )
{
if ( strcmp( mObtianItem[tAdd], "" ) == 0 )
{
FillItemList( mObtianItem[tAdd] );
strcpy( mObtianItem[tAdd], tString );
CInnerAuto::SaveObtainItemList();
break;
}
}
}
else BASICUI::Insert1(MESSAGE::Return(1947));
}
else
{
if( !CInnerAuto::IsPriorityObtainItem(tString) && !CInnerAuto::IsPriorityLoseItem(tString) )
{
for ( tAdd = 0; tAdd < MAX_AUTO_ITEM_LIST; tAdd++ )
{
if ( strcmp( mLostItem[tAdd], "" ) == 0 )
{
FillItemList( mLostItem[tAdd] );
strcpy( mLostItem[tAdd], tString );
CInnerAuto::SaveLoseItemList();
break;
}
}
}
else BASICUI::Insert1(MESSAGE::Return(1947));
}
if ( tAdd == MAX_AUTO_ITEM_LIST)
{
BASICUI::Insert1(MESSAGE::Return(1980));
}
SetWindowTextA( mEDITBOX[0].mDATA[19], aEmptyChar );
return 1;
}
}
if ( !self->bIsClick[6] )
return 0;
self->bIsClick[6] = 0;
if ( !GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3478], self->uX + 144, self->uY + 303, mX, mY) )
return 1;
if ( !GetWindowTextA(mEDITBOX[0].mDATA[19], tString, 25) )
{
BASICUI::Insert1(MESSAGE::Return(1950));
return 1;
}
if ( !ITEM::IsItemExist(tString) )
{
BASICUI::Insert1(MESSAGE::Return(1948));
return 0;
}
if ( self->mItemSetupTab == 0 || self->mItemSetupTab == 1 )
{
int tAdd = 0;
if ( self->mItemSetupTab == 0 )
{
//Delete Obtian Item
if ( CInnerAuto::IsPriorityObtainItem(tString) )
{
for ( tAdd = 0; tAdd < MAX_AUTO_ITEM_LIST; tAdd++ )
{
if ( strcmp( mObtianItem[tAdd], tString ) == 0 )
{
FillItemList( mObtianItem[tAdd] );
mObtianItem[tAdd][0] = '\0';
CInnerAuto::SaveObtainItemList();
SetWindowTextA( mEDITBOX[0].mDATA[19], aEmptyChar );
return 1;
}
}
}
}
else
{
//Delete Lose Item
if ( CInnerAuto::IsPriorityLoseItem(tString) )
{
for ( tAdd = 0; tAdd < MAX_AUTO_ITEM_LIST; tAdd++ )
{
if ( strcmp( mLostItem[tAdd], tString ) == 0 )
{
FillItemList( mLostItem[tAdd] );
mLostItem[tAdd][0] = '\0';
CInnerAuto::SaveLoseItemList();
SetWindowTextA( mEDITBOX[0].mDATA[19], aEmptyChar );
return 1;
}
}
}
}
}
BASICUI::Insert1(MESSAGE::Return(1981));
SetWindowTextA(mEDITBOX[0].mDATA[19], aEmptyChar);
return 1;
}
self->bIsClick[10] = 0;
if ( !GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[788], self->uX + 197, self->uY + 325, mX, mY) )
return 1;
if ( ++self->unk75 > 8u )
self->unk75 = 8;
return 1;
}
Code:
BOOL CInnerAuto::IsAttackSkill( int tSort, int s )
{
BOOL result;
if ( tSort )
result = CInnerAuto::GetWeponKind(0) && (s == 10 || s == 112)
|| CInnerAuto::GetWeponKind(1) && (s == 14 || s == 113)
|| CInnerAuto::GetWeponKind(2) && (s == 18 || s == 114)
|| CInnerAuto::GetWeponKind(3) && (s == 29 || s == 115)
|| CInnerAuto::GetWeponKind(4) && (s == 33 || s == 116)
|| CInnerAuto::GetWeponKind(5) && (s == 37 || s == 117)
|| CInnerAuto::GetWeponKind(6) && (s == 48 || s == 118)
|| CInnerAuto::GetWeponKind(7) && (s == 52 || s == 119)
|| CInnerAuto::GetWeponKind(8) && (s == 56 || s == 120);
else
result = CInnerAuto::GetWeponKind(0) && (s == 8 || s == 9 || s == 58 || s == 59 || s == 85 || s == 86 || s == 121 || s == 122)
|| CInnerAuto::GetWeponKind(1) && (s == 12 || s == 13 || s == 60 || s == 61 || s == 87 || s == 88 || s == 123 || s == 124)
|| CInnerAuto::GetWeponKind(2) && (s == 16 || s == 17 || s == 62 || s == 63 || s == 89 || s == 90 || s == 125 || s == 126)
|| CInnerAuto::GetWeponKind(3) && (s == 27 || s == 28 || s == 64 || s == 65 || s == 91 || s == 92 || s == 127 || s == 128)
|| CInnerAuto::GetWeponKind(4) && (s == 31 || s == 32 || s == 66 || s == 67 || s == 93 || s == 94 || s == 129 || s == 130)
|| CInnerAuto::GetWeponKind(5) && (s == 35 || s == 36 || s == 68 || s == 69 || s == 95 || s == 96 || s == 131 || s == 132)
|| CInnerAuto::GetWeponKind(6) && (s == 46 || s == 47 || s == 70 || s == 71 || s == 97 || s == 98 || s == 133 || s == 134)
|| CInnerAuto::GetWeponKind(7) && (s == 50 || s == 51 || s == 72 || s == 73 || s == 99 || s == 100 || s == 135 || s == 136)
|| CInnerAuto::GetWeponKind(8) && (s == 54 || s == 55 || s == 74 || s == 75 || s == 101 || s == 102 || s == 137 || s == 138);
return result;
}
BOOL CInnerAuto::IsBuffSkill( int tSort, int s )
{
BOOL result;
switch ( tSort )
{
case 0:
case 1:
result = CInnerAuto::GetTribeKind(0) && s == 7 || CInnerAuto::GetTribeKind(1) && s == 26 || CInnerAuto::GetTribeKind(2) && s == 45 || CInnerAuto::GetWeponKind(0) && s == 11 || CInnerAuto::GetWeponKind(1) && s == 15 || CInnerAuto::GetWeponKind(2) && s == 19 || CInnerAuto::GetWeponKind(3) && s == 30 || CInnerAuto::GetWeponKind(4) && s == 34 || CInnerAuto::GetWeponKind(5) && s == 38 || CInnerAuto::GetWeponKind(6) && s == 49 || CInnerAuto::GetWeponKind(7) && s == 53 || CInnerAuto::GetWeponKind(8) && s == 57;
break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
result = s == 82 || s == 83 || s == 84 || s == 103 || s == 104 || s == 105;
break;
default:
result = 0;
break;
}
return result;
}
BOOL CInnerAuto::GetWeponAttackKind( int tWeaponKind )
{
ITEM_INFO *tITEM_INFO;
tITEM_INFO = ITEM::Search( mMYINFO[0].mUseAvatar.aEquip[7][0] );
if ( tWeaponKind )
{
if ( tWeaponKind == 1 )
{
if ( tITEM_INFO->iSort == 14 || tITEM_INFO->iSort == 17 || tITEM_INFO->iSort == 20 )
return 1;
}
else if ( tWeaponKind == 2 && (tITEM_INFO->iSort == 15 || tITEM_INFO->iSort == 18 || tITEM_INFO->iSort == 21) )
{
return 1;
}
}
else if ( tITEM_INFO->iSort == 13 || tITEM_INFO->iSort == 16 || tITEM_INFO->iSort == 19 )
{
return 1;
}
return 0;
}
BOOL CInnerAuto::GetWeponKind( int tWeaponKind )
{
return tWeaponKind + 13 == ITEM::Search(mMYINFO[0].mUseAvatar.aEquip[7][0])->iSort;
}
BOOL CInnerAuto::GetTribeKind( int tTribe )
{
return mMYINFO[0].mUseAvatar.aTribe == tTribe || mMYINFO[0].mUseAvatar.aPreviousTribe == tTribe;
}
BOOL CInnerAuto::TakeItem( void )
{
int tPage;
int tX;
int tIndex;
int tY;
int v7;
DWORD tTickCount;
v7 = CInnerAuto::GetItemIndex();
if ( v7 != -1 )
{
tTickCount = GetTickCount();
if ( tTickCount - self->dSkillTick < 50 )
return 1;
if (!MAIN::CheckForInventory())
return 1;
if (mPLAY[0].mITEM_OBJECT[v7].mITEM_INFO->iSort == 1)
{
MAIN::ProcessForGetItem1(mPLAY[0].mITEM_OBJECT[v7].mServerIndex, mPLAY[0].mITEM_OBJECT[v7].mUniqueNumber);
return 1;
}
tPage = 0;
tIndex = 0;
tX = 0;
tY = 0;
INVENUI::PutInventory1(-1, -1, mPLAY[0].mITEM_OBJECT[v7].mDATA.iIndex, mPLAY[0].mITEM_OBJECT[v7].mDATA.iQuantity, &tPage, &tIndex, &tX, &tY, -1);
if ((tPage & 0x80000000) == 0)
{
MAIN::ProcessForGetItem1(mPLAY[0].mITEM_OBJECT[v7].mServerIndex, mPLAY[0].mITEM_OBJECT[v7].mUniqueNumber);
self->dSkillTick = tTickCount;
return 1;
}
if ( mMYINFO[0].mUseAvatar.aAutoHunt.inven_cmd == 1 )
{
if (mMYINFO[0].mCheckSendActionPacket || !PLAY::CheckPossibleChangeAction())
return 1;
PLAY::ReturnToBonSungAuto(0);
}
}
return 0;
}
BOOL CheckInHotkey( int* tHkPage, int* tHkSlot, int tItemId )
{
int tPage = *tHkPage;
int tIndex = *tHkSlot;
BOOL bFound = FALSE;
for ( tPage = 0; tPage < MAX_HOT_KEY_PAGE; tPage++ )
{
for ( tIndex = 0; tIndex < MAX_HOT_KEY_NUM; tIndex++ )
{
if ( mMYINFO[0].mUseAvatar.aHotKey[tPage][tIndex][2] == 3 && mMYINFO[0].mUseAvatar.aHotKey[tPage][tIndex][0] == tItemId && mMYINFO[0].mUseAvatar.aHotKey[tPage][tIndex][1] > 0 )
{
bFound = TRUE;
break;
}
}
if( bFound ) break;
}
*tHkPage = tPage;
*tHkSlot = tIndex;
return tPage < MAX_HOT_KEY_PAGE && tIndex < MAX_HOT_KEY_NUM;
}
BOOL CheckNotInInventory( int tItemId, int tMsgId )
{
int i, j;
int tMaxInvPage = 1;
if ( mMYINFO[0].mUseAvatar.aInventoryDate > 0 )
tMaxInvPage = 2;
for ( i = 0; i < tMaxInvPage; i++ )
{
for ( j = 0; j < MAX_INVENTORY_SLOT_NUM; j++ )
{
if ( mMYINFO[0].mUseAvatar.aInventory[i][j][0] == tItemId )
return 0;
}
}
if ( i == tMaxInvPage && j == MAX_INVENTORY_SLOT_NUM )
{
BASICUI::Insert1(tMsgId);
TRANSFER::T_AUTO_CONFIG_SEND( mMYINFO[0].mUseAvatar.aAutoState );
return 1;
}
return 0;
}
BOOL BotUseHotKey( int tHkPage, int tHkSlot )
{
if ( mMYINFO[0].mMoveZoneState )
return 1;
if ( mMYINFO[0].mCheckSendItemPacket )
return 1;
mMYINFO[0].mHotKeyPage = tHkPage;
mMYINFO[0].mHotKeyIndex = tHkSlot;
if ( TRANSFER::T_USE_HOTKEY_ITEM_SEND( tHkPage, tHkSlot ) )
{
mMYINFO[0].mCheckSendItemPacket = 1;
mMYINFO[0].mSendItemPacketPostTime = mApp[0].hPresentElapsedSeconds;
}
return 1;
}
//Pet Food
BOOL CInnerAuto::EatChunGongDan( void )
{
int tHkPage, tHkSlot;
ITEM_INFO* v5;
v5 = ITEM::Search( mMYINFO[0].mUseAvatar.aEquip[8][0] );
if ( !v5 || v5->iSort != 22 )
return 0;
if ( mMYINFO[0].mUseAvatar.aAutoHunt.animal_prey_cmd != 1 || mMYINFO[0].mUseAvatar.aEquip[8][0] <= 0 || mMYINFO[0].mUseAvatar.aEquip[8][1] >= 50 )
return 0;
if ( !CheckInHotkey( &tHkPage, &tHkSlot, 1001 ) )
{
if ( CheckNotInInventory( 1001, 1793 ) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_prey_cmd = 0;
}
return 0;
}
return BotUseHotKey( tHkPage, tHkSlot );
}
//Mount Food
BOOL CInnerAuto::EatChunWangDan( void )
{
int tHkPage, tHkSlot;
int tActivity;
int tExp;
tActivity = 0;
tExp = 0;
if ( mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd != 1 || mMYINFO[0].mUseAvatar.aAnimalIndex <= 9 || mMYINFO[0].mUseAvatar.aAnimalIndex >= 20 )
return 0;
UTIL::GetAnimalExpActivity( mMYINFO[0].mUseAvatar.aAnimalExpActivity[mMYINFO[0].mUseAvatar.aAnimalIndex%10], &tActivity, &tExp );
if ( tActivity > 50 )
return 0;
if ( !CheckInHotkey( &tHkPage, &tHkSlot, 563 ) )
{
if ( CheckNotInInventory( 563, 2185 ) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd = 0;
}
return 0;
}
return BotUseHotKey( tHkPage, tHkSlot );
}
BOOL CInnerAuto::CheckPotion( void )
{
BOOL bHPPill, bMPPill;
int tHkPage, tHkIndex;
int tPage, tIndex;
int tMaxPage;
BOOL bFound = FALSE;
tMaxPage = 1;
bHPPill = 0;
bMPPill = 0;
for ( tHkPage = 0; tHkPage < MAX_HOT_KEY_PAGE; tHkPage++ )
{
for ( tHkIndex = 0; tHkIndex < MAX_HOT_KEY_NUM; tHkIndex++ )
{
if ( mMYINFO[0].mUseAvatar.aHotKey[tHkPage][tHkPage][2] == 3 )
{
switch ( mMYINFO[0].mUseAvatar.aHotKey[tHkPage][tHkPage][0] )
{
case 2:
case 3:
case 4:
case 23:
case 24:
case 25:
case 7007:
bHPPill = 1;
break;
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 7008:
bMPPill = 1;
break;
case 32:
case 33:
case 34:
bHPPill = 1;
bMPPill = 1;
break;
}
if ( bHPPill == 1 && bMPPill == 1 )
{
bFound = TRUE;
break;
}
}
}
if( bFound ) break;
}
if ( bHPPill && bMPPill )
return 1;
if ( mMYINFO[0].mUseAvatar.aInventoryDate > 0 )
tMaxPage = MAX_INVENTORY_PAGE_NUM;
for ( tPage = 0; tPage < tMaxPage; tPage++ )
{
for ( tIndex = 0; tIndex < MAX_INVENTORY_SLOT_NUM; tIndex++ )
{
switch ( mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] )
{
case 2:
case 3:
case 4:
case 23:
case 24:
case 25:
case 7007:
bHPPill = 1;
break;
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 7008:
bMPPill = 1;
break;
case 32:
case 33:
case 34:
bHPPill = 1;
bMPPill = 1;
break;
}
if ( bHPPill == 1 && bMPPill == 1 )
{
bFound = TRUE;
break;
}
}
if( bFound ) break;
}
if( bHPPill && bMPPill )
return TRUE;
return FALSE;
}
BOOL CInnerAuto::SetAvatarTarget( void )
{
BOOL result;
MONSTER_OBJECT* mon;
DWORD tTickCount = GetTickCount();
BOOL getTarget = CInnerAuto::GetIsTargetValid0(self->mTargetObjIndex);
if ( tTickCount - self->dSearchTick <= 1000 || getTarget )
{
if ( getTarget || CInnerAuto::GetTargetMonster() >= 0 )
{
if ( mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aFrame >= 0.0f && mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aFrame < 1.0f )
{
mon = &mPLAY[0].mMONSTER_OBJECT[self->mTargetObjIndex];
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectSort = 5;
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectIndex = mon->mIndex;
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectUniqueNumber = mon->mUniqueNumber;
mMYINFO[0].mSelectObjSort = 5;
mMYINFO[0].mSelectObjIndex = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectIndex;
mMYINFO[0].mSelectObjUniqueNumber = mon->mUniqueNumber;
}
result = 1;
}
else
{
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectSort = 5;
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectIndex = 0;
mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aTargetObjectUniqueNumber = -1;
mMYINFO[0].mSelectObjSort = 5;
mMYINFO[0].mSelectObjIndex = 0;
mMYINFO[0].mSelectObjUniqueNumber = -1;
CInnerAuto::ClearMonster();
result = 0;
}
}
else
{
if ( CInnerAuto::SearchMonster() )
self->dSearchTick = tTickCount;
result = 0;
}
return result;
}
BOOL CInnerAuto::MoveNoTarget( void )
{
BOOL result;
DWORD tTickCount = GetTickCount();
if ( self->mWantToMove )
{
MYINFO::A002(self->aActTargetLocation, 0, -1, 0, 0, 0, 0);
if ( self->aActTargetLocation[0] == mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0] && self->aActTargetLocation[2] == mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2] )
{
self->mWantToMove = FALSE;
memset(self->aActTargetLocation, 0, sizeof(self->aActTargetLocation));
self->bIsAction = 1;
self->dActionTick = tTickCount;
}
result = 1;
}
else
{
if ( !self->mCurActionSort || self->mCurActionSort != mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort )
{
self->mCurActionSort = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort;
self->unk62 = tTickCount;
}
if ( tTickCount - self->mCurActionSortTick > 2000 )
{
if ( mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0] == self->aActLocation[0] && mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2] == self->aActLocation[2] && tTickCount - self->unk62 > 3000 && (mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort == 2 || mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort == 1 && (!CInnerAuto::GetIsTargetValid() || !mMYINFO[0].mSelectObjIndex)) )
{
if ( !CInnerAuto::SearchWall(self->aActTargetLocation) )
{
CInnerAuto::ClearMonster();
return 1;
}
self->mWantToMove = TRUE;
}
self->aActLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
self->aActLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
self->aActLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
self->mCurActionSortTick = tTickCount;
}
result = 0;
}
return result;
}
BOOL CInnerAuto::GetIsTargetValid( void )
{
if ( self->mMaxNearMonster >= MAX_NEAR_MONSTER )
return 0;
for ( int i = 0; i < self->mMaxNearMonster; i++ )
{
if ( self->mNearMonster[i].bSomeValid )
return 1;
}
return 0;
}
BOOL CInnerAuto::IsAbleKey( int a1, int a2 )
{
if ( !mMYINFO[0].mUseAvatar.aAutoState || mMYINFO[0].mUseAvatar.aAutoState == 1 && mMYINFO[0].mUseAvatar.aAutoTime < 1 && mMYINFO[0].mUseAvatar.aAutoTime2 < 1 )
return 1;
if ( !a2 )
return 0;
if ( a1 == 1 )
{
switch ( a2 )
{
case 2:
case 3:
case 4:
case 5:
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
case 65:
case 66:
case 67:
case 68:
return 0;
default:
return 1;
}
}
else
{
switch ( a2 )
{
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 16:
case 17:
case 18:
case 19:
return 0;
default:
return 1;
}
}
}
BOOL CInnerAuto::Init( void )
{
DWORD tTickCount = GetTickCount();
self->mMaxNearMonster = 0;
self->mTargetObjIndex = -1;
self->mIsAutoState = 0;
self->uY = 0;
self->uX = 0;
self->mCurActionSort = 0;
self->dSearchTick = tTickCount;
self->mCurActionSortTick = tTickCount;
self->dActionTick = tTickCount;
self->dSkillTick = tTickCount;
self->unk62 = tTickCount;
self->dPotionTIck = tTickCount;
self->bIsAction = TRUE;
self->mChangeZone = TRUE;
self->bTakeItem = TRUE;
self->mItemSetupTab = 0;
self->unk75 = 1;
CInnerAuto::ClearMonster();
self->aActLocation[0] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0];
self->aActLocation[1] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[1];
self->aActLocation[2] = mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2];
memset( self->aActTargetLocation, 0, sizeof(self->aActTargetLocation) );
self->mWantToMove = FALSE;
mMYINFO[0].mUseAvatar.aAutoHunt.mon_num = 3;
mMYINFO[0].mUseAvatar.aAutoHunt.death_cmd = 1;
if ( !mMYINFO[0].mUseAvatar.aAutoHunt.item_type )
mMYINFO[0].mUseAvatar.aAutoHunt.item_type = 2;
mMYINFO[0].mUseAvatar.aAutoHunt.animal_food_cmd = 0;
CInnerAuto::LoadObtainItemList();
CInnerAuto::LoadLoseItemList();
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
return 1;
}
BOOL LoadItemList( const char* tFileName, std::list<std::string>& obj, char ptr[MAX_AUTO_ITEM_LIST][MAX_ITEM_NAME_LENGTH] )
{
HANDLE hFile;
char tBuffer[MAX_AUTO_ITEM_LIST][MAX_ITEM_NAME_LENGTH];
DWORD nReadBytes;
BOOL result = FALSE;
hFile = CreateFileA( tFileName, 2147483648, 1u, 0, 3u, 128u, 0 );
if ( hFile == INVALID_HANDLE_VALUE )
{
goto CLEANUP;
}
if( !ReadFile( hFile, tBuffer, sizeof(tBuffer), &nReadBytes, 0 ) || nReadBytes != sizeof(tBuffer) )
{
ZeroMemory( tBuffer, sizeof(tBuffer) );
CloseHandle( hFile );
goto CLEANUP;
}
if( !CloseHandle( hFile ) )
goto CLEANUP;
for ( int i = 0; i < MAX_AUTO_ITEM_LIST; i++ )
{
if ( strlen( tBuffer[i] ) > 0 )
{
if ( !ITEM::IsItemExist( tBuffer[i] ) )
{
tBuffer[i][0] = '\0';
}
}
}
CLEANUP:
for ( int i = 0; i < MAX_AUTO_ITEM_LIST; i++ )
{
FillItemList( ptr[i] );
size_t len = strlen( tBuffer[i] );
if ( len > 0 )
{
CopyMemory( ptr[i], tBuffer[i], len );
}
if( len <= (MAX_ITEM_NAME_LENGTH-1) )
{
ptr[i][len] = '\0';
}
}
return result;
}
BOOL CInnerAuto::LoadObtainItemList( void )
{
return LoadItemList( OBTIAN_ITEM_FILE_NAME, self->stdObtianItem, mObtianItem );
}
BOOL CInnerAuto::LoadLoseItemList( void )
{
return LoadItemList( LOST_ITEM_FILE_NAME, self->stdLoseItem, mLostItem );
}
BOOL SaveAutoItemToFile( const char* tFileName, char tBuffer[MAX_AUTO_ITEM_LIST][MAX_ITEM_NAME_LENGTH] )
{
HANDLE hFile;
DWORD NumberOfBytesWritten;
DWORD size = MAX_AUTO_ITEM_LIST * MAX_ITEM_NAME_LENGTH;
hFile = CreateFileA( tFileName, 1073741824u, 2u, 0, 2u, 128u, 0 );
if ( hFile == INVALID_HANDLE_VALUE )
{
return 0;
}
if ( WriteFile( hFile, tBuffer, size, &NumberOfBytesWritten, 0 ) && NumberOfBytesWritten == size )
{
return CloseHandle( hFile );
}
CloseHandle(hFile);
return 0;
}
BOOL CInnerAuto::SaveObtainItemList( void )
{
return SaveAutoItemToFile( OBTIAN_ITEM_FILE_NAME, mObtianItem );
}
BOOL CInnerAuto::SaveLoseItemList( void )
{
return SaveAutoItemToFile( LOST_ITEM_FILE_NAME, mLostItem );
}
BOOL CInnerAuto::InitForMovezone( void )
{
DWORD tTickCount = GetTickCount();
CInnerAuto::ClearMonster();
memset(self->aActTargetLocation, 0, sizeof(self->aActTargetLocation));
self->mWantToMove = 0;
self->mChangeZone = TRUE;
self->mCurActionSort = 0;
self->dSearchTick = tTickCount;
self->mCurActionSortTick = tTickCount;
self->dActionTick = tTickCount;
self->dSkillTick = tTickCount;
self->unk62 = tTickCount;
self->dPotionTIck = tTickCount;
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
return 1;
}
BOOL CInnerAuto::UseItem()
{
int tIndex;
int tPage;
int tMaxPage;
BOOL bFound = FALSE;
tMaxPage = 1;
if ( mMYINFO[0].mUseAvatar.aInventoryDate > 0 )
tMaxPage = MAX_INVENTORY_PAGE_NUM;
for ( tPage = 0; tPage < tMaxPage; tPage++ )
{
for ( tIndex = 0; tIndex < MAX_INVENTORY_SLOT_NUM; tIndex++ )
{
if ( mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 1045 ||
/*mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 1035 ||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 1036 ||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 1037 ||*/
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 1094 && mMYINFO[0].mUseAvatar.aMoney <= 1900000000
||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 691 ||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 692 ||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 693 ||
mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][0] == 694
)
{
bFound = TRUE;
break;
}
}
if( bFound )
break;
}
if ( tPage >= MAX_INVENTORY_PAGE_NUM || tIndex >= MAX_INVENTORY_SLOT_NUM )
{
return 0;
}
if ( mMYINFO[0].mMoveZoneState )
return 1;
if ( !mMYINFO[0].mCheckSendItemPacket )
{
mMYINFO[0].mUseInventoryPage = tPage;
mMYINFO[0].mUseInventoryIndex = tIndex;
TRANSFER::T_USE_INVENTORY_ITEM_SEND( tPage, tIndex, mMYINFO[0].mUseAvatar.aInventory[tPage][tIndex][1] );
mMYINFO[0].mCheckSendItemPacket = 1;
mMYINFO[0].mSendItemPacketPostTime = mApp[0].hPresentElapsedSeconds;
}
return 1;
}
BOOL CInnerAuto::CheckParty( void )
{
int i;
int v2;
v2 = 0;
for ( i = 0; i < MAX_PARTY_AVATAR_NUM; i++ )
{
if ( strcmp(mMYINFO[0].mUseAvatar.aPartyName[i], aEmptyChar) )
++v2;
}
if ( v2 != 1 || strcmp( mMYINFO[0].mUseAvatar.aPartyName[0], mMYINFO[0].mUseAvatar.aName ) )
return 0;
TRANSFER::T_PARTY_BREAK_SEND();
return 1;
}
BOOL CInnerAuto::CheckIsBegin()
{
int i, j;
for ( i = 0; i < 2; ++i )
{
for ( j = 0; j < 2; ++j )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[i][j] > 0 )
return 1;
}
}
return 0;
}
void CInnerAuto::Update( void )
{
float tAtkRadius;
int i;
DWORD tTickCount;
AVATAR_OBJECT* avt;
MONSTER_OBJECT* mon;
if ( mMYINFO[0].mUseAvatar.aAutoState != 1 || mMYINFO[0].mUseAvatar.aAutoTime <= 0 && mMYINFO[0].mUseAvatar.aAutoTime2 <= 0 )
{
return;
}
if ( self->mChangeZone )
{
mMYINFO[0].mUseAvatar.aAutoState = 0;
TRANSFER::T_AUTO_CONFIG_SEND(0);
self->mChangeZone = FALSE;
return;
}
if ( mMYINFO[0].mUseAvatar.aAutoBuffTime <= 0 )
{
for ( i = 2; i < MAX_AUTO_BUFF_SKILL_NUM; i++ )
{
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[i][0] = 0;
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[i][1] = 0;
}
}
tTickCount = GetTickCount();
if ( tTickCount - self->dSkillTick > 2000 )
{
self->dPotionTIck = tTickCount;
if ( !CInnerAuto::CheckPotion() )
{
PLAY::ReturnToBonSungAuto(0);
return;
}
}
if ( self->bTakeItem && (CInnerAuto::TakeItem() || CInnerAuto::UseItem() || CInnerAuto::CheckParty() || CInnerAuto::EatChunGongDan() || CInnerAuto::EatChunWangDan()) )
return;
avt = &mPLAY[0].mAVATAR_OBJECT[0];
mon = &mPLAY[0].mMONSTER_OBJECT[self->mTargetObjIndex];
#define AT_UPDATE_ACTION( x ) \
MAIN::ProcessForSkill1( -1, 0, 0, 0, x ); \
self->dSkillTick = tTickCount; \
self->bIsAction = 0; \
return;
//Stand Mode
if ( mMYINFO[0].mUseAvatar.aAutoHunt.hunt_type == 1 )
{
if ( mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort == 1 && !self->bIsAction )
{
self->bIsAction = 1;
self->dActionTick = tTickCount;
}
if ( !CInnerAuto::SetAvatarTarget() )
{
return;
}
if ( CInnerAuto::GetNearMonster() )
{
//AOE
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] && mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][1] && self->bIsAction )
{
AT_UPDATE_ACTION(1);
}
return;
}
//1-Hit
tAtkRadius = (float)FACTOR::GetAttackRadius(mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0]);
if ( !CInnerAuto::GetWeponAttackKind(2) )
tAtkRadius += mon->mRadiusForSize;
if ( tAtkRadius <= CInnerAuto::GetDiatenceFromMonster( mon->mDATA.mAction.aLocation) || !mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] || !mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][1] || !self->bIsAction )
{
return;
}
AT_UPDATE_ACTION(2);
}
//Walk Mode
if ( mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aSort == 1 && !self->bIsAction )
{
self->bIsAction = 1;
self->dActionTick = tTickCount;
}
if ( CInnerAuto::MoveNoTarget() || !CInnerAuto::SetAvatarTarget() )
{
return;
}
if ( CInnerAuto::GetNearMonster() )
{
//AOE
tAtkRadius = (float)FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] ) + mon->mRadiusForSize;
if ( tAtkRadius >= CInnerAuto::GetDiatenceFromMonster( mon->mDATA.mAction.aLocation ) )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][0] && mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[1][1] && self->bIsAction )
{
AT_UPDATE_ACTION(1);
}
return;
}
else
{
MYINFO::A002( mon->mDATA.mAction.aLocation, 5, mon->mIndex, mon->mUniqueNumber, 0, 0, 0 );
}
return;
}
//1-Hit
tAtkRadius = (float)FACTOR::GetAttackRadius( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] );
if ( !CInnerAuto::GetWeponAttackKind(2) )
tAtkRadius += mon->mRadiusForSize;
if ( tAtkRadius < CInnerAuto::GetDiatenceFromMonster( mon->mDATA.mAction.aLocation ) )
{
MYINFO::A002( mon->mDATA.mAction.aLocation, 5, mon->mIndex, mon->mUniqueNumber, 0, 0, 0 );
self->bIsAction = 1;
self->dActionTick = tTickCount;
return;
}
if ( mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][0] && mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[0][1] && self->bIsAction )
{
AT_UPDATE_ACTION(2);
}
}
BOOL CInnerAuto::KeyBoard( void )
{
DWORD i;
if ( !self->mActive )
return 0;
for ( i = 0; i < mGXD[0].mKeyboardBufferedDataNum && (mGXD[0].mKeyboardBufferedData[i].dwData & 0x80) == 0; ++i )
;
if ( i == mGXD[0].mKeyboardBufferedDataNum )
return 0;
if ( mGXD[0].mKeyboardBufferedData[i].dwOfs != DIK_ESCAPE )
return 0;
SKILLUI::Off();
self->mActive = 0;
if ( mEDITBOX[0].mDataIndex == 20 )
EDITBOX::Set(0);
return 1;
}
BOOL CInnerAuto::LBUTTONDOWN( int mX, int mY )
{
BOOL result = 0;
int v8;
BOOL v10;
BOOL v11;
v10 = 0;
if ( !self->mActive )
return 0;
v11 = CInnerAuto::IsOnSkillBox( mX, mY );
if ( v11 < 0 )
{
mMYINFO[0].mUseAvatar.aAutoHunt.death_cmd = 1;
MYINFO::AdjustScreenCoord(3420, 270, 182, &self->uX, &self->uY);
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3423], self->uX + 13, self->uY + 54, mX, mY) )
{
if ( mMYINFO[0].mUseAvatar.aAutoTime > 0 || mMYINFO[0].mUseAvatar.aAutoTime2 > 0 )
self->mIsAutoState = 0;
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3424], self->uX + 102, self->uY + 54, mX, mY) )
{
if ( mMYINFO[0].mUseAvatar.aAutoTime <= 0 && mMYINFO[0].mUseAvatar.aAutoTime2 <= 0 )
{
BASICUI::Insert1(1350);
}
else
{
self->mIsAutoState = 1;
}
result = 1;
}
else if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3425], self->uX + 189, self->uY + 54, mX, mY) )
{
if ( mMYINFO[0].mUseAvatar.aAutoTime <= 0 && mMYINFO[0].mUseAvatar.aAutoTime2 <= 0 )
{
BASICUI::Insert1(1350);
}
else
{
self->mIsAutoState = 2;
}
result = 1;
}
else
{
v8 = self->mIsAutoState;
if ( self->mIsAutoState )
{
if ( v8 == 1 )
{
v10 = CInnerAuto::LbuttonDownForHunt( mX, mY );
}
else if ( v8 == 2 )
{
v10 = CInnerAuto::LbuttonDownForItemList( mX, mY );
}
}
else
{
v10 = CInnerAuto::LbuttonDownForBuff( mX, mY );
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3420], self->uX, self->uY, mX, mY) )
v10 = 1;
result = v10;
}
}
else if ( mMYINFO[0].mUseAvatar.aAutoState == 1 )
{
result = 1;
}
else
{
if ( self->mIsAutoState )
{
if ( self->mIsAutoState == 1 )
{
CHOICEUI::Set( 20, 0, 0, mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[v11][0], mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[v11][1], 0, 0, 0, 0, 0, 0, 0 );
mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[v11][0] = 0;
mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[v11][1] = 0;
}
}
else
{
CHOICEUI::Set( 20, 0, 0, mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[v11][0], mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[v11][1], 0, 0, 0, 0, 0, 0, 0 );
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[v11][0] = 0;
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[v11][1] = 0;
}
result = 1;
}
return result;
}
BOOL CInnerAuto::LBUTTONUP( int mX, int mY )
{
BOOL result;
result = 0;
if ( !self->mActive )
return 0;
MYINFO::AdjustScreenCoord(3420, 270, 182, &self->uX, &self->uY);
if ( self->mIsAutoState )
{
if ( self->mIsAutoState == 1 )
{
result = CInnerAuto::LbuttonUpForHunt( mX, mY );
}
else if ( self->mIsAutoState == 2 )
{
result = CInnerAuto::LbuttonUpForItemList( mX, mY );
}
}
else
{
result = CInnerAuto::LbuttonUpForBuff( mX, mY);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3420], self->uX, self->uY, mX, mY) )
result = 1;
return result;
}
void CInnerAuto::Draw( int mX, int mY )
{
if ( self->mActive )
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3420], self->uX, self->uY, mX, mY) )
POINTER::Set(0);
MYINFO::AdjustScreenCoord(3420, 270, 182, &self->uX, &self->uY);
if ( self->mIsAutoState )
{
if ( self->mIsAutoState == 1 )
{
CInnerAuto::DrawForHunt( mX, mY);
}
else if ( self->mIsAutoState == 2 )
{
CInnerAuto::DrawForItemList( mX, mY);
}
}
else
{
CInnerAuto::DrawForBuff( mX, mY);
}
if ( self->mIsAutoState )
{
if ( self->mIsAutoState == 1 )
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3423], self->uX + 13, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3423], self->uX + 13, self->uY + 54);
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3425], self->uX + 189, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3425], self->uX + 189, self->uY + 54);
}
else if ( self->mIsAutoState == 2 )
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3423], self->uX + 13, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3423], self->uX + 13, self->uY + 54);
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3424], self->uX + 102, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3424], self->uX + 102, self->uY + 54);
}
}
else
{
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3424], self->uX + 102, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3424], self->uX + 102, self->uY + 54);
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3425], self->uX + 189, self->uY + 54, mX, mY) )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3425], self->uX + 189, self->uY + 54);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365, mX, mY) )
{
if ( self->bIsClick[0] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3427], self->uX + 14, self->uY + 365);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3426], self->uX + 14, self->uY + 365);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365, mX, mY) )
{
if ( self->bIsClick[1] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3429], self->uX + 103, self->uY + 365);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3428], self->uX + 103, self->uY + 365);
}
if ( GIMAGE2D::CheckIn(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365, mX, mY) )
{
if ( self->bIsClick[2] )
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3431], self->uX + 192, self->uY + 365);
else
GIMAGE2D::Display(&mGDATA[0].mUI_MAIN[3430], self->uX + 192, self->uY + 365);
}
}
}
BOOL CInnerAuto::IsOnSkillBox( int mX, int mY )
{
int i;
int v6;
int v7;
int v8;
int v9;
int v10;
if ( !self->mActive )
return -1;
MYINFO::AdjustScreenCoord(3420, 270, 182, &self->uX, &self->uY);
if ( self->mIsAutoState )
{
if ( self->mIsAutoState == 1 )
{
v7 = self->uY + 164;
v9 = self->uX + 44;
if ( v7 <= mY && v7 + 25 >= mY && v9 <= mX && v9 + 25 >= mX )
return 0;
v10 = self->uX + 74;
if ( v7 <= mY && v7 + 25 >= mY && v10 <= mX && v10 + 25 >= mX )
return 1;
}
}
else
{
for ( i = 0; i < 8; i++ )
{
v6 = 93 * (i / 4) + self->uY + 149;
v8 = ((i & 3) << 6) + self->uX + 23;
if ( v6 <= mY && v6 + 55 >= mY && v8 <= mX && v8 + 64 >= mX )
return i;
}
}
return -1;
}
BOOL CInnerAuto::IsItemListExist( char *iName )
{
if ( self->mItemSetupTab == 1 )
{
//for( std::list<std::tString>::iterator it = self->stdLoseItem.begin(); it != self->stdLoseItem.end(); ++it )
//{
// if( !_stricmp( it->c_str(), iName ) )
// {
// return TRUE;
// }
//}
return CInnerAuto::IsPriorityObtainItem( iName );
}
else
{
//for( std::list<std::tString>::iterator it = self->stdObtianItem.begin(); it != self->stdObtianItem.end(); ++it )
//{
// if( !_stricmp( it->c_str(), iName ) )
// {
// return TRUE;
// }
//}
return CInnerAuto::IsPriorityLoseItem( iName );
}
return FALSE;
}
BOOL CInnerAuto::IsPriorityObtainItem( char *iName )
{
//for( std::list<std::tString>::iterator it = self->stdLoseItem.begin(); it != self->stdLoseItem.end(); )
//{
// if( !_stricmp( it->c_str(), iName ) )
// {
// return TRUE;
// }
//}
//return FALSE;
for ( int i = 0; i < MAX_AUTO_ITEM_LIST; i++ )
{
if ( strcmp( mObtianItem[i], iName ) == 0 )
{
return TRUE;
}
}
return FALSE;
}
BOOL CInnerAuto::IsPriorityLoseItem( char *iName )
{
//for( std::list<std::tString>::iterator it = self->stdObtianItem.begin(); it != self->stdObtianItem.end(); )
//{
// if( !_stricmp( it->c_str(), iName ) )
// {
// return TRUE;
// }
//}
//return FALSE;
for ( int i = 0; i < MAX_AUTO_ITEM_LIST; i++ )
{
if ( strcmp( mLostItem[i], iName ) == 0 )
{
return TRUE;
}
}
return FALSE;
}
BOOL CInnerAuto::HotKeyAutoStart( void )
{
self->bIsClick[0] = 1;
return CInnerAuto::LbuttonUpForHunt( self->uX + 15, self->uY + 366 );
}
BOOL CInnerAuto::HotKeyAutoStop( void )
{
self->bIsClick[1] = 1;
return CInnerAuto::LbuttonUpForHunt( self->uX + 104, self->uY + 366 );
}
void CInnerAuto::SetBuffSkill( int sSlot, int sIndex, int sLevel )
{
int i;
if ( mMYINFO[0].mUseAvatar.aAutoState == 1 )
{
BASICUI::Insert1(1891);
return;
}
if ( !self->mIsAutoState )
{
if ( sSlot >= 8 )
return;
for ( i = 0; i < 8; ++i )
{
if ( mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[i][0] == sIndex )
{
BASICUI::Insert1(1655);
return;
}
}
if ( CInnerAuto::IsBuffSkill(sSlot, sIndex) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[sSlot][0] = sIndex;
mMYINFO[0].mUseAvatar.aAutoHunt.buff_store[sSlot][1] = sLevel;
TRANSFER::T_AUTO_CONFIG_SEND(0);
return;
}
BASICUI::Insert1(1652);
}
if ( self->mIsAutoState == 1 && sSlot < 2 )
{
if ( CInnerAuto::IsAttackSkill(sSlot, sIndex) )
{
mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[sSlot][0] = sIndex;
mMYINFO[0].mUseAvatar.aAutoHunt.attack_type[sSlot][1] = sLevel;
TRANSFER::T_AUTO_CONFIG_SEND(0);
return;
}
BASICUI::Insert1(1652);
}
}
int CInnerAuto::GetIsBegin( void )
{
return mMYINFO[0].mUseAvatar.aAutoState;
}
void CInnerAuto::SetIsTakeItem( BOOL bTakeItem )
{
self->bTakeItem = bTakeItem;
}
void CInnerAuto::OnView( void )
{
if ( mMYINFO[0].mUseAvatar.aAutoTime >= 1 || mMYINFO[0].mUseAvatar.aAutoTime2 >= 1 )
{
UI::OffAllSubUI(1);
SKILLUI::Set(2);
mSKILLUI[0].mActiveForAutoBuff = 0;
mCInnerAuto->mActive = 1;
SetWindowTextA(mEDITBOX[0].mDATA[19], aEmptyChar);
}
else
{
BASICUI::Insert1(1872);
}
}






