Initial MSVC 2008 projects workspace
This commit is contained in:
214
l2detect/UserAI_HPMPCP.cpp
Normal file
214
l2detect/UserAI_HPMPCP.cpp
Normal file
@@ -0,0 +1,214 @@
|
||||
#include "stdafx.h"
|
||||
#include "UserAI.h"
|
||||
#include "Logger.h"
|
||||
//
|
||||
#include "GameClient.h" // to have reference to global GameClient object
|
||||
#include "PacketInjector.h" // to inject UseItem packets
|
||||
|
||||
extern class GameClient *g_game_client; // in main.cpp
|
||||
|
||||
void UserAI::UAI_CheckHP( class UserAI *cls )
|
||||
{
|
||||
int i = 0;
|
||||
unsigned int curTickCount = GetTickCount();
|
||||
double hp_percent = 101.1;
|
||||
if( (cls->usr.hp_max > 0) && (cls->usr.hp > 0) ) hp_percent = 100.0 * cls->usr.hp / cls->usr.hp_max;
|
||||
unsigned int objectID;
|
||||
unsigned int count;
|
||||
int ipercent = (int)hp_percent;
|
||||
if( hp_percent < 100.0 )
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP < 100 %\n" );
|
||||
HealItem hitem;
|
||||
hitem.itemID = 0;
|
||||
i = 0;
|
||||
objectID = 0;
|
||||
count = 0;
|
||||
int found_index = -1;
|
||||
while( 1 )
|
||||
{
|
||||
hitem.itemID = 0;
|
||||
if( !cls->healItems.getHPItem( i, hitem ) ) break;
|
||||
i++;
|
||||
if( i >= MAXNUMHEALITEMS ) break;
|
||||
if( (hitem.lastUseTime + (hitem.reuseDelayMsec) < curTickCount) &&
|
||||
(hitem.priority > 0) &&
|
||||
(hitem.percentUse >= ipercent) )
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: found usable item [%s] ID=%u pri=%d (i = %d)\n",
|
||||
// hitem.itemName, hitem.itemID, hitem.priority, i );
|
||||
// check inventory.. do we have this item?
|
||||
UserInventoryItem it;
|
||||
it.objectID = 0;
|
||||
it.count = 0;
|
||||
it.isEquipped = 0;
|
||||
cls->inv.getItemInfoByItemId( hitem.itemID, it );
|
||||
objectID = it.objectID;
|
||||
count = (int)it.count;
|
||||
if( (objectID>0) && (count>0) )
|
||||
{
|
||||
// yes!
|
||||
found_index = i-1;
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: have in inventory, oid=[%u], count %u\n", objectID, count );
|
||||
break;
|
||||
}
|
||||
//else
|
||||
//{
|
||||
//log_error( LOG_OK, "USerAIThread(): HP: not in inventory.. [%s] ID=%u\n",
|
||||
// hitem.itemName, hitem.itemID );
|
||||
//}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
if( hitem.itemID > 0 )
|
||||
{
|
||||
log_error( LOG_OK, "UserAIThread(): HP: item [%s] ID=%u next use time is %u (now %u, left %u)\n",
|
||||
hitem.itemName, hitem.itemID,
|
||||
hitem.lastUseTime + (hitem.reuseDelaySecs*1000), curTickCount,
|
||||
hitem.lastUseTime + (hitem.reuseDelaySecs*1000) - curTickCount );
|
||||
}
|
||||
}*/
|
||||
}
|
||||
//
|
||||
if( hitem.itemID > 0 )
|
||||
{
|
||||
// UseItem
|
||||
log_error( LOG_USERAI, "HP: ready to UseItem [%s] ID %u (oid %u) (HP %d <= %d )\n",
|
||||
hitem.itemName, hitem.itemID, objectID,
|
||||
ipercent, hitem.percentUse );
|
||||
cls->healItems.markUsedNow( HealItemsTable::HIT_HP, found_index, curTickCount );
|
||||
PGen_UseItem( objectID );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UserAI::UAI_CheckMP( class UserAI *cls )
|
||||
{
|
||||
int i = 0;
|
||||
unsigned int curTickCount = GetTickCount();
|
||||
double mp_percent = 101.1;
|
||||
if( (cls->usr.mp_max > 0) && (cls->usr.mp > 0) ) mp_percent = 100.0 * cls->usr.mp / cls->usr.mp_max;
|
||||
unsigned int objectID;
|
||||
unsigned int count;
|
||||
int ipercent = (int)mp_percent;
|
||||
if( mp_percent < 100.0 )
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP < 100 %\n" );
|
||||
HealItem hitem;
|
||||
hitem.itemID = 0;
|
||||
i = 0;
|
||||
objectID = 0;
|
||||
count = 0;
|
||||
int found_index = -1;
|
||||
while( 1 )
|
||||
{
|
||||
hitem.itemID = 0;
|
||||
if( !cls->healItems.getMPItem( i, hitem ) ) break;
|
||||
i++;
|
||||
if( i >= MAXNUMHEALITEMS ) break;
|
||||
if( (hitem.lastUseTime + (hitem.reuseDelayMsec) < curTickCount) && // nextReuseTime passed
|
||||
(hitem.priority > 0) && // we are allowed to use this item
|
||||
(hitem.percentUse >= ipercent) ) // Use GHP when hp below 50%, we have 40%... 50>=40
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: found usable item [%s] ID=%u pri=%d (i = %d)\n",
|
||||
// hitem.itemName, hitem.itemID, hitem.priority, i );
|
||||
// check inventory.. do we have this item?
|
||||
UserInventoryItem it;
|
||||
it.objectID = 0;
|
||||
it.count = 0;
|
||||
it.isEquipped = 0;
|
||||
cls->inv.getItemInfoByItemId( hitem.itemID, it );
|
||||
objectID = it.objectID;
|
||||
count = (int)it.count;
|
||||
if( (objectID>0) && (count>0) )
|
||||
{
|
||||
// yes!
|
||||
found_index = i-1;
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: have in inventory, oid=[%u], count %u\n",
|
||||
// objectID, count );
|
||||
break;
|
||||
}
|
||||
//else
|
||||
//{
|
||||
//log_error( LOG_OK, "USerAIThread(): HP: not in inventory.. [%s] ID=%u\n",
|
||||
// hitem.itemName, hitem.itemID );
|
||||
//}
|
||||
}
|
||||
}
|
||||
//
|
||||
if( hitem.itemID > 0 )
|
||||
{
|
||||
// UseItem
|
||||
log_error( LOG_USERAI, "MP: ready to UseItem [%s] ID %u (oid %u) (MP %d <= %d )\n",
|
||||
hitem.itemName, hitem.itemID, objectID,
|
||||
ipercent, hitem.percentUse );
|
||||
cls->healItems.markUsedNow( HealItemsTable::HIT_MP, found_index, curTickCount );
|
||||
PGen_UseItem( objectID );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UserAI::UAI_CheckCP( class UserAI *cls )
|
||||
{
|
||||
int i = 0;
|
||||
unsigned int curTickCount = GetTickCount();
|
||||
double cp_percent = 101.1;
|
||||
if( (cls->usr.cp_max > 0) && (cls->usr.cp > 0) ) cp_percent = 100.0 * cls->usr.cp / cls->usr.cp_max;
|
||||
unsigned int objectID;
|
||||
unsigned int count;
|
||||
int ipercent = (int)cp_percent;
|
||||
if( cp_percent < 100.0 )
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP < 100 %\n" );
|
||||
HealItem hitem;
|
||||
hitem.itemID = 0;
|
||||
i = 0;
|
||||
objectID = 0;
|
||||
count = 0;
|
||||
int found_index = -1;
|
||||
while( 1 )
|
||||
{
|
||||
hitem.itemID = 0;
|
||||
if( !cls->healItems.getCPItem( i, hitem ) ) break;
|
||||
i++;
|
||||
if( i >= MAXNUMHEALITEMS ) break;
|
||||
if( (hitem.lastUseTime + (hitem.reuseDelayMsec) < curTickCount) &&
|
||||
(hitem.priority > 0) &&
|
||||
(hitem.percentUse >= ipercent) )
|
||||
{
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: found usable item [%s] ID=%u pri=%d (i = %d)\n",
|
||||
// hitem.itemName, hitem.itemID, hitem.priority, i );
|
||||
// check inventory.. do we have this item?
|
||||
UserInventoryItem it;
|
||||
it.objectID = 0;
|
||||
it.count = 0;
|
||||
it.isEquipped = 0;
|
||||
cls->inv.getItemInfoByItemId( hitem.itemID, it );
|
||||
objectID = it.objectID;
|
||||
count = (int)it.count;
|
||||
if( (objectID>0) && (count>0) )
|
||||
{
|
||||
// yes!
|
||||
found_index = i-1;
|
||||
//log_error( LOG_OK, "UserAIThread(): HP: have in inventory, oid=[%u], count %u\n", objectID, count );
|
||||
break;
|
||||
}
|
||||
//else
|
||||
//{
|
||||
//log_error( LOG_OK, "USerAIThread(): HP: not in inventory.. [%s] ID=%u\n", hitem.itemName, hitem.itemID );
|
||||
//}
|
||||
}
|
||||
}
|
||||
//
|
||||
if( hitem.itemID > 0 )
|
||||
{
|
||||
// UseItem
|
||||
log_error( LOG_USERAI, "CP: ready to UseItem [%s] ID %u (oid %u) (CP %d <= %d )\n",
|
||||
hitem.itemName, hitem.itemID, objectID,
|
||||
ipercent, hitem.percentUse );
|
||||
cls->healItems.markUsedNow( HealItemsTable::HIT_CP, found_index, curTickCount );
|
||||
PGen_UseItem( objectID );
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user