Initial MSVC 2008 projects workspace
This commit is contained in:
425
l2ooghelper/sys_scripts/sys_ai_general.lua
Normal file
425
l2ooghelper/sys_scripts/sys_ai_general.lua
Normal file
@@ -0,0 +1,425 @@
|
||||
-- script globals
|
||||
script_name = "AI: ";
|
||||
sys_isResting = false;
|
||||
|
||||
l2h_print( "Sys AI script started\n" );
|
||||
|
||||
-- sys config vars
|
||||
botting_combat_enable = 0;
|
||||
-- self heal
|
||||
self_heal_sit_hp_enable = 0;
|
||||
self_heal_sit_mp_enable = 0;
|
||||
self_heal_sit_hp = 0;
|
||||
self_heal_sit_mp = 0;
|
||||
self_heal_stand_hp_enable = 0;
|
||||
self_heal_stand_mp_enable = 0;
|
||||
self_heal_stand_hp = 0;
|
||||
self_heal_stand_mp = 0;
|
||||
self_heal_use_item_nConds = 0;
|
||||
self_heal_use_skill_nConds = 0;
|
||||
-- party
|
||||
party_loot = 0;
|
||||
--Iparty_auto_accept_enable=1 -- used by system
|
||||
--Sparty_auto_accept_names=EPLLI -- used by system
|
||||
party_auto_invite_enable = 0;
|
||||
party_auto_invite_names = "";
|
||||
party_assist_enable = 0;
|
||||
follow_enable = 0;
|
||||
follow_name = "";
|
||||
follow_dist = 0;
|
||||
|
||||
function cfg_load_self_heal()
|
||||
self_heal_sit_hp_enable = l2ccfg_getInt( "self_heal_sit_hp_enable" );
|
||||
self_heal_sit_mp_enable = l2ccfg_getInt( "self_heal_sit_mp_enable" );
|
||||
self_heal_sit_hp = l2ccfg_getInt( "self_heal_sit_hp" );
|
||||
self_heal_sit_mp = l2ccfg_getInt( "self_heal_sit_mp" );
|
||||
self_heal_stand_hp_enable = l2ccfg_getInt( "self_heal_stand_hp_enable" );
|
||||
self_heal_stand_mp_enable = l2ccfg_getInt( "self_heal_stand_mp_enable" );
|
||||
self_heal_stand_hp = l2ccfg_getInt( "self_heal_stand_hp" );
|
||||
self_heal_stand_mp = l2ccfg_getInt( "self_heal_stand_mp" );
|
||||
botting_combat_enable = l2c_isCombatEnabled();
|
||||
self_heal_use_item_nConds = l2ccfg_getInt( "self_heal_use_item_nConds" );
|
||||
self_heal_use_skill_nConds = l2ccfg_getInt( "self_heal_use_skill_nConds" );
|
||||
end
|
||||
|
||||
function cfg_load_party()
|
||||
party_loot = l2ccfg_getInt( "party_loot" );
|
||||
party_auto_invite_enable = l2ccfg_getInt( "party_auto_invite_enable" );
|
||||
party_auto_invite_names = l2ccfg_getStr( "party_auto_invite_names" );
|
||||
party_assist_enable = l2ccfg_getInt( "party_assist_enable" );
|
||||
follow_enable = l2ccfg_getInt( "follow_enable" );
|
||||
follow_name = l2ccfg_getStr( "follow_name" );
|
||||
follow_dist = l2ccfg_getInt( "follow_dist" );
|
||||
end
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
function ensurestand()
|
||||
local isSitting, isRunnig = l2c_getSitRun();
|
||||
if isSitting then
|
||||
l2c_sitStand();
|
||||
l2h_delay( 1000 );
|
||||
end
|
||||
end
|
||||
|
||||
function ensuresit()
|
||||
local isSitting, isRunnig = l2c_getSitRun();
|
||||
if not isSitting then
|
||||
l2c_sitStand();
|
||||
l2h_delay( 1000 );
|
||||
end
|
||||
end
|
||||
|
||||
function ensurerun()
|
||||
local isSitting, isRunnig = l2c_getSitRun()
|
||||
if not isRunnig then
|
||||
l2c_runWalk();
|
||||
l2h_delay( 50 );
|
||||
end
|
||||
end
|
||||
|
||||
function ensurewalk()
|
||||
local isSitting, isRunnig = l2c_getSitRun()
|
||||
if isRunnig then
|
||||
l2c_runWalk();
|
||||
l2h_delay( 50 );
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD><EFBFBD> <20><><EFBFBD> skillID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> have_buffs
|
||||
function isBuffPresent( skillID, have_buffs )
|
||||
if not have_buffs then return end
|
||||
local i = 0;
|
||||
for i=1, #have_buffs do
|
||||
if have_buffs[i].skillID == skillID then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function wait_end_of_cast()
|
||||
while l2c_isCastingNow() do l2h_delay( 50 ) end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function wait_skill_reuse( skillID )
|
||||
local msecLeft = l2c_getSkillReuseLeft( skillID );
|
||||
if msecLeft <= 0 then return end
|
||||
l2h_delay( msecLeft )
|
||||
end
|
||||
|
||||
-- true: <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>, false - <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
function isSkillReadyForReuse( skillID )
|
||||
local msecLeft = l2c_getSkillReuseLeft( skillID );
|
||||
if msecLeft <= 0 then return true end
|
||||
return false
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> objectID <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> timeoutSecs <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function myTargetObjectTimeout( objectID, timeoutSecs )
|
||||
local targetStartTime = l2h_time();
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
local targetObjectId = l2c_getTarget();
|
||||
if targetObjectId == objectID then return end -- <20><><EFBFBD>, <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
l2c_action( objectID );
|
||||
local timePassed = 0;
|
||||
repeat
|
||||
targetObjectId = l2c_getTarget();
|
||||
l2h_delay( 100 );
|
||||
if sys_should_exit() then return end
|
||||
local curTime = l2h_time();
|
||||
timePassed = curTime - targetStartTime;
|
||||
until (timePassed > timeoutSecs) or (targetObjectId == objectID)
|
||||
if( targetObjectId ~= objectID ) then
|
||||
l2h_print( script_name, " ERROR: cannot target [", objectID, "]\n" );
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100<30><30> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function myUseSkill( skillID )
|
||||
l2c_useSkill( skillID )
|
||||
l2h_delay( 150 )
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> [name] <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [distance]
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [distance], follow <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- randomness - <20><><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-100
|
||||
function follow( name, distance, randomness )
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> objectID <20><><EFBFBD><EFBFBD>
|
||||
local objectID = l2c_getCharObjectIdByName( name )
|
||||
-- <20> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
if objectID == nil then
|
||||
--l2h_print( script_name, " Character [", name, "] is not visible!\n" );
|
||||
l2h_delay( 200 );
|
||||
return
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20> 2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if randomness >= distance then randomness = distance/2; end
|
||||
local x, y, z -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
local c -- <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
-- <20> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
x,y,z = l2c_getPos() -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
c = l2c_getObjectInfoByObjectId( objectID ) -- <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
if not c then return end -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 25-50 <20><> :(
|
||||
if (math.abs(c.x - x) < distance) and (math.abs(c.y - y) < distance) then
|
||||
return -- <20><> <20><> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
repeat
|
||||
if sys_should_exit() then return end -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||||
c = l2c_getObjectInfoByObjectId( objectID );
|
||||
if not c then return end -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 25-50 <20><> :(
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local x_rand = math.random( (0-randomness), randomness );
|
||||
local y_rand = math.random( (0-randomness), randomness );
|
||||
l2c_moveTo( c.x + x_rand, c.y + y_rand, c.z ) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>
|
||||
l2h_delay( 300 ) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 300 ms
|
||||
x,y,z = l2c_getPos() -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
until (math.abs(c.x - x) < distance) and (math.abs(c.y - y) < distance)
|
||||
end
|
||||
|
||||
function isCharInParty( name, party )
|
||||
--l2c_getParty() always returns not nil
|
||||
if #party < 1 then return false end
|
||||
local i = 0
|
||||
for i=1, #party do
|
||||
if party[i].name == name then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemID
|
||||
sys_item_last_use_time_ms = { 0 };
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> true..
|
||||
function isItemReadyForReuse( itemID, reuseDelayMS )
|
||||
local cur_time_ms = l2h_timeMsec();
|
||||
local last_use_time_ms = cur_time_ms - reuseDelayMS - 1000;
|
||||
if sys_item_last_use_time_ms[ itemID ] ~= nil then
|
||||
last_use_time_ms = sys_item_last_use_time_ms[ itemID ];
|
||||
--l2h_print( "isItemReadyForReuse(): itemID ", itemID, " was used at ", last_use_time_ms, " ms\n" );
|
||||
end
|
||||
local next_use_time_ms = last_use_time_ms + reuseDelayMS;
|
||||
if next_use_time_ms <= cur_time_ms then return true end -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return false -- <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> )
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
function myUseItem( itemID )
|
||||
l2c_useItem( itemID );
|
||||
sys_item_last_use_time_ms[ itemID ] = l2h_timeMsec();
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
function general_ai_self_rest_sit_stand()
|
||||
local curHp, maxHp, curMp, maxMp = l2c_getHPMPCPWeight();
|
||||
local hpp = 100.0 * curHp / maxHp;
|
||||
local mpp = 100.0 * curMp / maxMp;
|
||||
-- check config
|
||||
cfg_load_self_heal();
|
||||
local hp_bad = false;
|
||||
local mp_bad = false;
|
||||
local hp_good = true;
|
||||
local mp_good = true;
|
||||
if self_heal_sit_hp_enable and (hpp < self_heal_sit_hp) then hp_bad = true; end
|
||||
if self_heal_sit_mp_enable and (mpp < self_heal_sit_mp) then mp_bad = true; end
|
||||
if self_heal_stand_hp_enable and (hpp < self_heal_stand_hp) then hp_good = false; end
|
||||
if self_heal_stand_mp_enable and (mpp < self_heal_stand_mp) then mp_good = false; end
|
||||
if not sys_isResting then -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
if hp_bad or mp_bad then -- <20><><EFBFBD><EFBFBD>
|
||||
l2h_print( script_name, " Rest start, HP ", hpp, "%, MP ", mpp, "%, sitting\n" );
|
||||
ensuresit();
|
||||
sys_isResting = true; -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return
|
||||
end
|
||||
else -- <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local isSitting, isRunning = l2c_getSitRun();
|
||||
if not isSitting then -- <20> <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>! <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>??
|
||||
sys_isResting = false; -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
l2h_print( script_name, " Rest interrupted (stand)?\n" );
|
||||
--l2h_soundAlert();
|
||||
return
|
||||
end
|
||||
if hp_good and mp_good then -- <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
l2h_print( script_name, " Rest end, HP ok ", hpp, "%, MP ok ", mpp, "%, standing\n" );
|
||||
sys_isResting = false; -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!
|
||||
ensurestand();
|
||||
l2h_delay( 1500 );
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function general_ai_follow()
|
||||
cfg_load_party();
|
||||
if follow_enable > 0 then
|
||||
follow( follow_name, follow_dist, 30 );
|
||||
end
|
||||
end
|
||||
|
||||
function general_ai_party_auto_invite()
|
||||
local party = l2c_getParty(); --l2c_getParty() always returns not nil
|
||||
local iw = 0;
|
||||
local ip = 0;
|
||||
local w = "";
|
||||
for w in string.gmatch( party_auto_invite_names, "%w+" ) do
|
||||
if not isCharInParty( w, party ) then
|
||||
local info = l2c_getCharObjectIdByName( w );
|
||||
if info ~= nil then
|
||||
l2c_partySendInvite( w, party_loot );
|
||||
l2h_delay( 300 );
|
||||
end
|
||||
end
|
||||
end
|
||||
l2h_delay( 50 );
|
||||
end
|
||||
|
||||
function general_ai_heal_self()
|
||||
local varname = "";
|
||||
local curHp, maxHp, curMp, maxMp, curCp, maxCp = l2c_getHPMPCPWeight();
|
||||
local usr = l2c_getStats();
|
||||
local cur_hpp = 100.0 * curHp / maxHp;
|
||||
local cur_mpp = 100.0 * curMp / maxMp;
|
||||
local cur_cpp = 100.0 * curCp / maxCp;
|
||||
local i = 0;
|
||||
if self_heal_use_item_nConds > 0 then
|
||||
for i=0, (self_heal_use_item_nConds - 1) do
|
||||
varname = string.format( "self_heal_use_item_[%d]_id", i );
|
||||
local itemID = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_hp", i );
|
||||
local hpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_mp", i );
|
||||
local mpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_cp", i );
|
||||
local cpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_hp_cond", i );
|
||||
local hp_cond = l2ccfg_getStr( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_mp_cond", i );
|
||||
local mp_cond = l2ccfg_getStr( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_cp_cond", i );
|
||||
local cp_cond = l2ccfg_getStr( varname );
|
||||
varname = string.format( "self_heal_use_item_[%d]_delayms", i );
|
||||
local delayms = l2ccfg_getInt( varname );
|
||||
local itemCnt = l2c_getItemCount( itemID );
|
||||
--l2h_print( "Use item ", itemID, " (we have count ", itemCnt, ") when HP ", hp_cond, " ", hpp, " and MP ", mp_cond, " ", mpp, " and CP ", cp_cond, " ", cpp, "\n" );
|
||||
if itemCnt > 0 then
|
||||
if isItemReadyForReuse( itemID, delayms ) then
|
||||
--l2h_print( "Cur hpp,mpp,cpp: ", cur_hpp, ",", cur_mpp, ",", cur_cpp, "\n" );
|
||||
local hp_cond_ok = false;
|
||||
local mp_cond_ok = false;
|
||||
local cp_cond_ok = false;
|
||||
if hp_cond == "eq" then hp_cond_ok = (cur_hpp == hpp) end
|
||||
if hp_cond == "lt" then hp_cond_ok = (cur_hpp < hpp) end
|
||||
if hp_cond == "le" then hp_cond_ok = (cur_hpp <= hpp) end
|
||||
if hp_cond == "gt" then hp_cond_ok = (cur_hpp > hpp) end
|
||||
if hp_cond == "ge" then hp_cond_ok = (cur_hpp >= hpp) end
|
||||
if mp_cond == "eq" then mp_cond_ok = (cur_mpp == mpp) end
|
||||
if mp_cond == "lt" then mp_cond_ok = (cur_mpp < mpp) end
|
||||
if mp_cond == "le" then mp_cond_ok = (cur_mpp <= mpp) end
|
||||
if mp_cond == "gt" then mp_cond_ok = (cur_mpp > mpp) end
|
||||
if mp_cond == "ge" then mp_cond_ok = (cur_mpp >= mpp) end
|
||||
if cp_cond == "eq" then cp_cond_ok = (cur_cpp == cpp) end
|
||||
if cp_cond == "lt" then cp_cond_ok = (cur_cpp < cpp) end
|
||||
if cp_cond == "le" then cp_cond_ok = (cur_cpp <= cpp) end
|
||||
if cp_cond == "gt" then cp_cond_ok = (cur_cpp > cpp) end
|
||||
if cp_cond == "ge" then cp_cond_ok = (cur_cpp >= cpp) end
|
||||
--l2h_print( "Hp_cond_ok: ", hp_cond_ok, "\n" );
|
||||
--l2h_print( "Mp_cond_ok: ", mp_cond_ok, "\n" );
|
||||
--l2h_print( "Cp_cond_ok: ", cp_cond_ok, "\n" );
|
||||
if hp_cond_ok and mp_cond_ok and cp_cond_ok then
|
||||
myUseItem( itemID );
|
||||
end
|
||||
end -- skill reuse
|
||||
end -- have this skill
|
||||
end
|
||||
end
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (self_heal_use_skill_nConds > 0) and (not sys_isResting) then
|
||||
for i=0, (self_heal_use_item_nConds - 1) do
|
||||
varname = string.format( "self_heal_use_skill_[%d]_id", i );
|
||||
local skillID = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_hp", i );
|
||||
local hpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_mp", i );
|
||||
local mpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_cp", i );
|
||||
local cpp = l2ccfg_getInt( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_hp_cond", i );
|
||||
local hp_cond = l2ccfg_getStr( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_mp_cond", i );
|
||||
local mp_cond = l2ccfg_getStr( varname );
|
||||
varname = string.format( "self_heal_use_skill_[%d]_cp_cond", i );
|
||||
local cp_cond = l2ccfg_getStr( varname );
|
||||
local skillLvl = l2c_getSkillLevel( skillID );
|
||||
--l2h_print( "Use skill ", skillID, " (we have lvl ", skillLvl, ") when HP ", hp_cond, " ", hpp, " and MP ", mp_cond, " ", mpp, " and CP ", cp_cond, " ", cpp, "\n" );
|
||||
if skillLvl > 0 then
|
||||
if isSkillReadyForReuse( skillID ) then
|
||||
--l2h_print( "Cur hpp,mpp,cpp: ", cur_hpp, ",", cur_mpp, ",", cur_cpp, "\n" );
|
||||
local hp_cond_ok = false;
|
||||
local mp_cond_ok = false;
|
||||
local cp_cond_ok = false;
|
||||
if hp_cond == "eq" then hp_cond_ok = (cur_hpp == hpp) end
|
||||
if hp_cond == "lt" then hp_cond_ok = (cur_hpp < hpp) end
|
||||
if hp_cond == "le" then hp_cond_ok = (cur_hpp <= hpp) end
|
||||
if hp_cond == "gt" then hp_cond_ok = (cur_hpp > hpp) end
|
||||
if hp_cond == "ge" then hp_cond_ok = (cur_hpp >= hpp) end
|
||||
if mp_cond == "eq" then mp_cond_ok = (cur_mpp == mpp) end
|
||||
if mp_cond == "lt" then mp_cond_ok = (cur_mpp < mpp) end
|
||||
if mp_cond == "le" then mp_cond_ok = (cur_mpp <= mpp) end
|
||||
if mp_cond == "gt" then mp_cond_ok = (cur_mpp > mpp) end
|
||||
if mp_cond == "ge" then mp_cond_ok = (cur_mpp >= mpp) end
|
||||
if cp_cond == "eq" then cp_cond_ok = (cur_cpp == cpp) end
|
||||
if cp_cond == "lt" then cp_cond_ok = (cur_cpp < cpp) end
|
||||
if cp_cond == "le" then cp_cond_ok = (cur_cpp <= cpp) end
|
||||
if cp_cond == "gt" then cp_cond_ok = (cur_cpp > cpp) end
|
||||
if cp_cond == "ge" then cp_cond_ok = (cur_cpp >= cpp) end
|
||||
--l2h_print( "Hp_cond_ok: ", hp_cond_ok, "\n" );
|
||||
--l2h_print( "Mp_cond_ok: ", mp_cond_ok, "\n" );
|
||||
--l2h_print( "Cp_cond_ok: ", cp_cond_ok, "\n" );
|
||||
if hp_cond_ok and mp_cond_ok and cp_cond_ok then
|
||||
myTargetObjectTimeout( usr.objectID, 1 );
|
||||
myUseSkill( skillID );
|
||||
end
|
||||
end -- skill reuse
|
||||
end -- have this skill
|
||||
end -- for
|
||||
end
|
||||
end
|
||||
|
||||
function general_ai_loop()
|
||||
general_ai_heal_self();
|
||||
general_ai_self_rest_sit_stand();
|
||||
general_ai_party_auto_invite();
|
||||
general_ai_follow();
|
||||
end
|
||||
|
||||
while true do
|
||||
if l2c_is_INGAME() then
|
||||
if sys_should_exit() then break end
|
||||
-- call func in protected mode, any errors wil be inside this loop and never returned to C++ program
|
||||
--pcall( general_ai_loop );
|
||||
general_ai_loop();
|
||||
if sys_should_exit() then break end
|
||||
end
|
||||
l2h_delay( 300 );
|
||||
if sys_should_exit() then break end
|
||||
end
|
||||
|
||||
l2h_print( "Sys AI script stopped\n" );
|
Reference in New Issue
Block a user