Initial MSVC 2008 projects workspace

This commit is contained in:
alexey.min
2012-02-01 05:25:08 +00:00
commit 03de3bdc95
1446 changed files with 476853 additions and 0 deletions

202
l2detect/UserAI_FolAsi.cpp Normal file
View File

@@ -0,0 +1,202 @@
#include "stdafx.h"
#include "UserAI.h"
#include "Logger.h"
#include "PacketInjector.h"
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> 250 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void UserAI::UAI_ProcessFollow( class UserAI *cls )
{
if( !cls->folAsiCfg.m_follow_enable ) return;
if( cls->folAsiCfg.m_follow_dist < 0 ) return;
// check time
unsigned int t_now = GetTickCount();
if( (t_now - cls->m_last_follow_time_msec) < 1000 ) return; // follow only once per second
// check party
if( cls->folAsiCfg.m_follow_only_in_party && cls->party.getCount() < 1 ) return;
// get follow target oid
L2Player *plFollow = NULL;
if( cls->m_follow_oid == 0 )
{
log_error( LOG_USERAI, "Follow enabled after [%S], searching for its objectID...\n",
cls->folAsiCfg.m_follow_name );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned int i = 0, cnt = CharArray_GetCount(), nc = 0;
CharArray_Lock();
for( i=0; i<CHARARRAY_MAX_CHARS; i++ )
{
if( chars_array[i] )
{
if( _wcsicmp( chars_array[i]->charName, cls->folAsiCfg.m_follow_name ) == 0 )
{
plFollow = chars_array[i];
break;
}
nc++;
}
if( nc >= cnt ) break;
}
CharArray_Unlock(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !plFollow ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> follow <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//log_error( LOG_USERAI, ":( cannot find follow target oid - not in range?\n" );
return;
}
// <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>
cls->m_follow_oid = plFollow->objectID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> objectID <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UAI_Check_Distance_And_Follow( cls, plFollow );
return;
}
else // <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> oid <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
int idx = -1;
L2OBJECT_TYPE objType = L2OT_NONE;
// <20> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> objectID <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( WorldObjectTree_GetInfoByObjectID( cls->m_follow_oid, &objType, &idx ) )
{
if( objType == L2OT_PC )
{
if( idx >= 0 )
UAI_Check_Distance_And_Follow( cls, chars_array[idx] );
}
else log_error( LOG_ERROR, "UAI Follow: follow target objType != L2OT_PC (%d)\n", (int)objType );
}
//else log_error( LOG_USERAI, "Follow: [%S] is not in range\n", cls->folAsiCfg.m_follow_name );
}
}
void UserAI::UAI_Check_Distance_And_Follow( class UserAI *cls, L2Player *followTarget )
{
float dx = (float)( followTarget->x - cls->usr.x );
float dy = (float)( followTarget->y - cls->usr.y );
float dz = (float)( followTarget->z - cls->usr.z );
float dist = sqrtf( dx*dx + dy*dy + dz*dz );
if( dist > 10000.0f ) // <20><><EFBFBD>-<2D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>?
{
log_error( LOG_USERAI, "!!! Dist to target is %0.2f!!! WTF???\n", dist );
return;
}
if( (int)dist > cls->folAsiCfg.m_follow_dist )
{
cls->m_last_follow_time_msec = GetTickCount();
PGen_MoveBackwardToLocation( followTarget->x, followTarget->y, followTarget->z,
cls->usr.x, cls->usr.y, cls->usr.z );
//log_error( LOG_USERAI, "Following... dist = %0.2f\n", dist );
}
}
void UserAI::followDisable()
{
this->folAsiCfg.m_follow_enable = 0;
this->m_follow_oid = 0;
}
void UserAI::assistDisable()
{
this->folAsiCfg.m_assist_enable = 0;
this->m_assist_oid = 0;
}
void UserAI::UAI_ProcessAssist( class UserAI *cls )
{
if( !cls->folAsiCfg.m_assist_enable ) return;
if( cls->folAsiCfg.m_assist_only_in_party && cls->party.getCount() < 1 ) return;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> oID <20><>
L2Player *plAssist = NULL;
if( cls->m_assist_oid == 0 )
{
log_error( LOG_USERAI, "Assist enabled by [%S], searching for its objectID...\n",
cls->folAsiCfg.m_assist_name );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned int i = 0, cnt = CharArray_GetCount(), nc = 0;
CharArray_Lock();
for( i=0; i<CHARARRAY_MAX_CHARS; i++ )
{
if( chars_array[i] )
{
if( _wcsicmp( chars_array[i]->charName, cls->folAsiCfg.m_assist_name ) == 0 )
{
plAssist = chars_array[i];
break;
}
nc++;
}
if( nc >= cnt ) break;
}
CharArray_Unlock(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( !plAssist ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> assist <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
//log_error( LOG_USERAI, ":( cannot find assist target oid - not in range?\n" );
return;
}
// <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>
log_error( LOG_USERAI, "Found assist oID: %u\n", plAssist->objectID );
cls->m_assist_oid = plAssist->objectID; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> objectID <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UAI_Check_Target_By_Assist( cls, plAssist );
}
else // <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> oid <20><>
{
int idx = -1;
L2OBJECT_TYPE objType = L2OT_NONE;
// <20> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> objectID <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( WorldObjectTree_GetInfoByObjectID( cls->m_assist_oid, &objType, &idx ) )
{
if( objType == L2OT_PC )
{
if( idx >= 0 )
UAI_Check_Target_By_Assist( cls, chars_array[idx] );
}
else log_error( LOG_ERROR, "UAI Assist: MA objType != L2OT_PC (%d)\n", (int)objType );
}
}
}
void UserAI::UAI_Check_Target_By_Assist( class UserAI *cls, L2Player *assistBy )
{
unsigned int now_time = GetTickCount();
if( (now_time - cls->m_last_assist_time_msec) < 500 ) return; // assist once in 500 msec
if( assistBy->targetObjectID != 0 ) // <20> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>...
unsigned int targetObjectID = assistBy->targetObjectID;
int idx = -1;
L2OBJECT_TYPE objType = L2OT_NONE;
bool target_valid = false;
L2Player *target = NULL;
if( WorldObjectTree_GetInfoByObjectID( targetObjectID, &objType, &idx ) )
{
if( objType == L2OT_PC && idx >= 0 )
{
target = chars_array[idx];
if( !target ) return;
target_valid = true;
if( cls->folAsiCfg.m_assist_dont_ally )
{
if( cls->party.getCount() > 0 && cls->party.isInParty( targetObjectID, NULL ) ) target_valid = false;
if( target->clanID == cls->usr.clanID ) target_valid = false;
if( target->allyID == cls->usr.allyID ) target_valid = false;
}
//if( target_valid )
// log_error( LOG_USERAI, "Assist: MA targeted %u [%S] (valid)\n", targetObjectID, target->charName );
//else
// log_error( LOG_USERAI, "Assist: MA targeted %u [%S] (invalid)\n", targetObjectID, target->charName );
}
//else if( objType == L2OT_NPC )
// log_error( LOG_USERAI, "Assist: MA targeted NPC (invalid)\n" );
}
if( !target_valid ) return;
if( cls->usr.targetObjectID != targetObjectID ) // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> != <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
{
log_error( LOG_USERAI, "ReAssist: MA targeted %u [%S] (valid)\n", targetObjectID, target->charName );
PGen_Action( targetObjectID, cls->usr.x, cls->usr.y, cls->usr.z, 0 );
cls->m_last_assist_time_msec = now_time; // remember Action time
}
}
}