Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > 12Sky2
You last visited: Today at 18:52

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

Advertisement



[Client] AutoHunt Class/Logic

Discussion on [Client] AutoHunt Class/Logic within the 12Sky2 forum part of the MMORPGs category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2011
Posts: 129
Received Thanks: 174
[Client] AutoHunt Class/Logic

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);
    }
}
lnwnuyhodd is offline  
Thanks
5 Users
Old 12/26/2022, 19:35   #2
 
elite*gold: 0
Join Date: Dec 2022
Posts: 3
Received Thanks: 0
those codes form client side or?
ynsgnr is offline  
Old 12/27/2022, 20:49   #3
 
RHNbaskan's Avatar
 
elite*gold: 0
Join Date: May 2016
Posts: 161
Received Thanks: 16
TR:
dostum kıymetli bir insansın.

baştan beridir yaptığın çalışmaları anlamıyorum
sebebi: bilgi ve kültür seviyem sana denk değil.

alternatif yorumda gelmiyor
ne yapmak istediğini yazsan insanlarda anlasa

bunca emek bir yere gitse , yıllar sonra baktığımızda bu adam bir şeyleri anlatıyor ama işte biz anlamadık diyebilelim.

emeklerin için teşekürler

EN :

My friend, you are a precious person.

I don't understand the work you've done from the beginning
The reason: my level of knowledge and culture is not equal to yours.

does not appear in the alternative comment
If you write what you want to do, people will understand

If all this effort goes somewhere, when we look at it years later, this man is telling something, but let's say we didn't understand.

thanks for your efforts
RHNbaskan is offline  
Old 12/28/2022, 14:13   #4
 
elite*gold: 0
Join Date: May 2015
Posts: 62
Received Thanks: 8
Quote:
Originally Posted by RHNbaskan View Post
TR:
dostum kıymetli bir insansın.

baştan beridir yaptığın çalışmaları anlamıyorum
sebebi: bilgi ve kültür seviyem sana denk değil.

alternatif yorumda gelmiyor
ne yapmak istediğini yazsan insanlarda anlasa

bunca emek bir yere gitse , yıllar sonra baktığımızda bu adam bir şeyleri anlatıyor ama işte biz anlamadık diyebilelim.

emeklerin için teşekürler

EN :

My friend, you are a precious person.

I don't understand the work you've done from the beginning
The reason: my level of knowledge and culture is not equal to yours.

does not appear in the alternative comment
If you write what you want to do, people will understand

If all this effort goes somewhere, when we look at it years later, this man is telling something, but let's say we didn't understand.

thanks for your efforts


Orhanım, güzel arkadaşım. Adamın yakasından düş artık. İnsanların emeğinin peşinden koltuğun kadar yazılım bilgini geliştirmeye çalışsaydın kimseyi darlamak zorunda kalmazdın.

Ekleme yapayım. Bu bilgi senin hiçbir işine yaramayacak. Clienti hooklamak istiyorsan veya yeniden client yazmak istiyorsan başka. Ama şu şartlarda senin için gereksiz
xmetrix is offline  
Thanks
3 Users
Reply


Similar Threads Similar Threads
Any idea how to add autohunt button appear in client 5517?
04/19/2021 - Conquer Online 2 - 9 Replies
Any idea how to add autohunt button appear in client 5517? just like in the image below https://i.ibb.co/dBVbSkq/Untitled.png
[Logic] Clientless --> Client
03/13/2019 - SRO Coding Corner - 22 Replies
Hey there! i was thinking about adding a Clientless to Client function to my not (yet) finished bot. i think "recording" all packets that come to my clientless and when i activate that function i am gonna send all packets to client that are recorded. Of course you have to manage when you send the packet(the client needs to get each packet when it is expected!!!). So i also figured that out. The current status of my function is that the client loggs in with the same sessionID of course and...
DarkShaDoWz-Autohunt-All in-5k Cps-All class Works
06/20/2013 - CO2 PServer Archive - 3 Replies
بسم الله الرحمن الرحيم How Are You Guys Today I am Glad To Present You DarkShaDowz http://im35.gulfup.com/isJ91.png » ?Features? « » VPS »Auto Hunt » Online 24 / 7 » Version 5730 » Drop 5.000 Cps Per Monsters



All times are GMT +1. The time now is 18:53.


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

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