--
-- c funciton
--[[
function Trace (string) end
function MoveToOwner (id) end
function Move (id,x,y) end
function Attack (id,id) end
function GetV (V_,id) end
function GetActors () end
function GetTick () end
function GetMsg (id) end
function GetResMsg (id) end
function Eat (id) end
function SkillObject (id,level,skill,target) end
function SkillGround (id,level,skill,x,y) end
function IsMonster (id) end -- id는 몬스터인가? yes -> 1 no -> 0
--]]
--------------------------------------------
-- List utility
--------------------------------------------
List = {}
function List.new ()
return { first = 0, last = -1}
end
function List.pushleft (list, value)
local first = list.first-1
list.first = first
list[first] = value;
end
function List.pushright (list, value)
local last = list.last + 1
list.last = last
list[last] = value
end
function List.popleft (list)
local first = list.first
if first > list.last then
return nil
end
local value = list[first]
list[first] = nil -- to allow garbage collection
list.first = first+1
return value
end
function List.popright (list)
local last = list.last
if list.first > last then
return nil
end
local value = list[last]
list[last] = nil
list.last = last-1
return value
end
function List.clear (list)
for i,v in ipairs(list) do
list[i] = nil
end
--[[
if List.size(list) == 0 then
return
end
local first = list.first
local last = list.last
for i=first, last do
list[i] = nil
end
--]]
list.first = 0
list.last = -1
end
function List.size (list)
local size = list.last - list.first + 1
return size
end
-------------------------------------------------
-------------------------------------------------
-- constants
-------------------------------------------------
--------------------------------
V_OWNER = 0
V_POSITION = 1
V_TYPE = 2
V_MOTION = 3
V_ATTACKRANGE = 4
V_ATTACKMT = 5
V_TARGET = 6
V_SKILLATTACKRANGE = 7
V_HOMUNTYPE = 8 -- 호문클루스 종류
---------------------------------
--------------------------------------------
PC_TYPE = 0; NPC_TYPE = 1;
ITEM_TYPE = 2; SKILL_TYPE = 3;
UNKNOWN_TYPE = 4; NPC_MOB_TYPE = 5;
NPC_EVT_TYPE = 6; NPC_PET_TYPE = 7;
--------------------------------------------
--------------------------------------------
-- 호문클루스 종류
--------------------------------------------
LIF = 1
AMISTR = 2
FILIR = 3
VANILMIRTH = 4
LIF_H = 5
AMISTR_H = 6
FILIR_H = 7
VANILMIRTH_H = 8
--------------------------------------------
--------------------------
MOTION_STAND = 0
MOTION_MOVE = 1
MOTION_ATTACK = 2
MOTION_DEAD = 3
MOTION_ATTACK2 = 9
--------------------------
--------------------------
-- command
--------------------------
NOME_CMD = 0
MOVE_CMD = 1
STOP_CMD = 2
ATTACT_OBJET_CMD = 3
ATTACK_AREA_CMD = 4
PATROL_CMD = 5
HOLD_CMD = 6
SKILL_OBJET_CMD = 7
SKILL_AREA_CMD = 8
EAT_CMD = 9
FOLLOW_CMD = 10
--------------------------
--[[ 명령어 구조
MOVE_CMD
{명령번호,X좌표,Y좌표}
STOP_CMD
{명령번호}
ATTACT_OBJET_CMD
{명령번호,목표ID}
ATTACK_AREA_CMD
{명령번호,X좌표,Y좌표}
PATROL_CMD
{명령번호,X좌표,Y좌표}
HOLD_CMD
{명령번호}
SKILL_OBJECT_CMD
{명령번호,선택레벨,종류,목표ID}
SKILL_AREA_CMD
{명령번호,선택레벨,종류,X좌표,Y좌표}
EAT_CMD
{명령번호}
FOLLOW_CMD
{명령번호}
--]]
function GetDistance (x1,y1,x2,y2)
return math.sqrt( (x1-x2)^2 + (y1-y2)^2 )
end
function GetDistance2 (id1, id2)
local x1, y1 = GetV (V_POSITION,id1)
local x2, y2 = GetV (V_POSITION,id2)
if (x1 == -1 or x2 == -1) then
return -1
end
return GetDistance (x1,y1,x2,y2)
end
function GetOwnerPosition (id)
return GetV (V_POSITION,GetV(V_OWNER,id))
end
function GetDistanceFromOwner (id)
local x1, y1 = GetOwnerPosition (id)
local x2, y2 = GetV (V_POSITION,id)
if (x1 == -1 or x2 == -1) then
return -1
end
return GetDistance (x1,y1,x2,y2)
end
function IsOutOfSight (id1,id2)
local x1,y1 = GetV (V_POSITION,id1)
local x2,y2 = GetV (V_POSITION,id2)
if (x1 == -1 or x2 == -1) then
return true
end
local d = GetDistance (x1,y1,x2,y2)
if d > 20 then
return true
else
return false
end
end
function IsInAttackSight (id1,id2)
local x1,y1 = GetV (V_POSITION,id1)
local x2,y2 = GetV (V_POSITION,id2)
if (x1 == -1 or x2 == -1) then
return false
end
local d = GetDistance (x1,y1,x2,y2)
---[[
if (MySkill == 0) then
local a = GetV (V_ATTACKRANGE,id1)
else
local a = GetV (V_SKILLATTACKRANGE,MySkill)
end
--]]
local a = 1
if a >= d then
return true;
else
return false;
end
end
function IsRechargeTime (id,time)
local attackMT = GetV (V_ATTACKMT,id)
local tick = GetTick ()
if ((tick-time) >= attackMT) then
return true
else
return false
end
end
원본이며 수정하지 않았습니다
아니면 일일이 다 변화 시켜보고.. 알아내야겠내요