You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
SigFiesta/LuaScript/PetSystem/PetBaseRoutineFunc.lua

593 lines
20 KiB

function PetBaseRoutine( PetMem )
cExecCheck( "PetBaseRoutine" )
if PetMem == nil
then
DebugLog( "PetBaseRoutine::PetMem is nil" )
return ReturnAI["END"]
end
local nHandle = PetMem["PetInfo"]["nHandle"]
-- 펫 사망시
if cIsObjectDead( nHandle ) == 1
then
-- AI 스크립트 해제
cAIScriptSet( nHandle )
-- 메모리 해제
gPetAIMemory["PetBase"][ nHandle ] = nil
DebugLog( "PetBaseRoutine::Pet Has Died - nHandle( "..nHandle.." )" )
return ReturnAI["END"]
end
-- 펫 대기모드
-- 주인 있는지 체크( 맵링크 때문에 )
-- 주인 죽었는지 체크 ( 사망 체크 )
-- 주인이 부른 상태인지 체크 ( 존에 셋팅된 주인이 불렀다 체크 )
-- 주인과의 거리 체크( 멀어지면 따라가라 )
-- 펫 성향 저장시간 체크
-- 펫 대기 시작 시간 체크
local nMasterHandle = PetMem["MasterInfo"]["nHandle"]
if cIsObjectDead( nMasterHandle ) == 1
then
-- 여긴 객체가 없거나 시체상태일때만 들어오는 곳.. 아직은 의미 없음
end
local sMasterMode = cGetObjectMode( nMasterHandle );
if sMasterMode == nil
then
-- 마스터 모드 못찾음 : 문제 있으므로 솬해제해쁘려 없거나 뭐 그런거니까
cAIScriptSet( nHandle )
gPetAIMemory["PetBase"][ nHandle ] = nil
DebugLog( "PetBaseRoutine::cGetObjectMode Fail - nHandle( "..nHandle.." )" )
return ReturnAI["END"]
end
DebugLog( "PetBaseRoutine:: Point 1 - 현재 마스터 상태에 따라서.." )
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
------ 마스터의 상태에 따라 내부 변수및 행동 변화 설정 : 상태진입처리, 특정상태에서의 상태진입처리
local tMode = PetMem["PetInfo"]["PetMode"] -- 모드 접근을 편하게 하기 위해
-- 죽었다 살아나면 우선순위가 낮은 AI를 위해 AI 초기화
if tMode["nMasterMode"] == PMM_DIE and sMasterMode ~= "corpse"
then
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
tMode["nMasterMode"] = PMM_NONE
tMode["nActionMode"] = PAM_NONE
end
-- 아이들 액션이 아닐땐 이 값 항상 초기화 해주기
if tMode["nMasterMode"] ~= PMM_IDLE or tMode["nActionMode"] ~= PAM_IDLE_ACT
then
PetMem["PetInfo"]["Time"]["EnterIdleAction"] = PetMem["InitialSec"]
end
if sMasterMode == "linking"
then
tMode["nMasterMode"] = PMM_LINK
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_LINK - nHandle( "..nHandle.." )" )
elseif sMasterMode == "corpse"
then
if tMode["nMasterMode"] < PMM_DIE -- 우선순위체크
then
-- Die 진입 셋팅
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- 제자리로 이동한것처럼 표시
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
tMode["nActionMode"] = PAM_NONE
-- PupCaseDesc 에서 펫 종류까지 고려해서 레코드 가져와서 PAI 타입을 확인 후 Valid 일 때 스크립트 메세지와 헤어이펙트, 사운드를 발생시킨다.
local tPetDieActRecord = { cPet_GetActionRecord( nHandle, "die" ) } -- { "PupAITypeString", "SM_Inx", "HairEffect", "SoundFile" }
if tPetDieActRecord ~= nil
then
if tPetDieActRecord[ 1 ] == "script"
then
if tPetDieActRecord[ 2 ] ~= "-"
then
PetBaseScriptMessage( nHandle, tPetDieActRecord[ 2 ] )
end
if tPetDieActRecord[ 3 ] ~= "-"
then
PetBaseObjectEffect( nHandle, tPetDieActRecord[ 3 ] )
end
if tPetDieActRecord[ 4 ] ~= "-"
then
PetBaseObjectSound( nHandle, tPetDieActRecord[ 4 ] )
end
cExecCheck( "PetBaseRoutine" )
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
CheckLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_DIE - nHandle( "..nHandle.." )" )
end
tMode["nMasterMode"] = PMM_DIE
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_DIE - nHandle( "..nHandle.." )" )
elseif sMasterMode == "normal" or sMasterMode == "fight" or sMasterMode == "riding" or sMasterMode == "house" or sMasterMode == "booth"
then
-- 주인이 불렀는지 체크
if cPet_IsMasterCalling( nHandle ) == true
then
-- 주인이 부름
if tMode["nMasterMode"] <= PMM_CALL -- 우선순위체크
then
-- Call 진입 셋팅
-- PupCaseDesc 에서 펫 종류까지 고려해서 레코드 가져와서 PAI 타입을 확인 후 Valid 일 때 스크립트 메세지와 헤어이펙트, 사운드를 발생시킨다.
local tPetCallActRecord = { cPet_GetActionRecord( nHandle, "call" ) } -- { "PupAITypeString", "SM_Inx", "HairEffect", "SoundFile" }
if tPetCallActRecord ~= nil
then
if tPetCallActRecord[ 1 ] == "script"
then
if tPetCallActRecord[ 2 ] ~= "-"
then
PetBaseScriptMessage( nHandle, tPetCallActRecord[ 2 ] )
end
if tPetCallActRecord[ 3 ] ~= "-"
then
PetBaseObjectEffect( nHandle, tPetCallActRecord[ 3 ] )
end
if tPetCallActRecord[ 4 ] ~= "-"
then
PetBaseObjectSound( nHandle, tPetCallActRecord[ 4 ] )
end
cExecCheck( "PetBaseRoutine" )
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
-- 일단 하던것 멈추기 : 상황봐서 뺄지말지 결정하기
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- 제자리 이동 요청시, 멈춘다기보다 클라와 싱크 맞춰서 약간 공간이동한것처럼되기 때문에 그냥 몹표지점 메모리만 표시.
-- cRunTo( nHandle, tPetCoord["x"], tPetCoord["y"], 1000 )
-- 제자리로 이동한것처럼 표시
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
tMode["nActionMode"] = PAM_NONE
CheckLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_CALL - nHandle( "..nHandle.." )" )
end
tMode["nMasterMode"] = PMM_CALL
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_CALL - nHandle( "..nHandle.." )" )
else
-- 주인이 부르지 않음
if tMode["nActionMode"] <= PAM_FAR_MISSED -- 더 상위 우선순위에 의해 행동하는것이 아닐때만 처리하기.
then
if tMode["nActionMode"] <= PAM_FAR_MISSED -- 더 상위 우선순위에 의해 행동하는것이 아닐때만 처리하기.
then
local nDistanceSquare = cDistanceSquar( nHandle, nMasterHandle )
----------------------------------------------------------------------
---------- //거리별 Pattern Decision ---------------------------------
if nDistanceSquare < PS_nDS_AwayStart
then
if tMode["nMasterMode"] == PMM_AWAY
then
-- 충분히 가까워졌으니 멈춘것 처럼
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- cRunTo( nHandle, tPetCoord["x"], tPetCoord["y"], 1000 )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
end
if tMode["nMasterMode"] ~= PMM_IDLE
then
local nWaitIdleActSec = cRandomInt( PetSystem_nSecMinWaitActAtIdle, PetSystem_nSecMaxWaitActAtIdle )
-- Idle 진입 셋팅
PetMem["PetInfo"]["Time"]["ExecSaveTendency"] = PetMem["CurSec"] + PetSystem_nSecWaitSaveTendencyAtIdle
PetMem["PetInfo"]["Time"]["ExecIdleActMode"] = PetMem["CurSec"] + nWaitIdleActSec
CheckLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_IDLE - nHandle( "..nHandle.." )" )
end
tMode["nMasterMode"] = PMM_IDLE
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_IDLE - nHandle( "..nHandle.." )" )
elseif nDistanceSquare < PS_nDS_FarStart
then
if tMode["nMasterMode"] ~= PMM_AWAY
then
-- Away 진입 셋팅
-- PupCaseDesc 에서 펫 종류까지 고려해서 레코드 가져와서 PAI 타입을 확인 후 Valid 일 때 스크립트 메세지와 헤어이펙트, 사운드를 발생시킨다.
local tPetFollowActRecord = { cPet_GetActionRecord( nHandle, "follow" ) } -- { "PupAITypeString", "SM_Inx", "HairEffect", "SoundFile" }
if tPetFollowActRecord ~= nil
then
if tPetFollowActRecord[ 1 ] == "script"
then
if tPetFollowActRecord[ 2 ] ~= "-"
then
PetBaseScriptMessage( nHandle, tPetFollowActRecord[ 2 ] )
end
if tPetFollowActRecord[ 3 ] ~= "-"
then
PetBaseObjectEffect( nHandle, tPetFollowActRecord[ 3 ] )
end
if tPetFollowActRecord[ 4 ] ~= "-"
then
PetBaseObjectSound( nHandle, tPetFollowActRecord[ 4 ] )
end
cExecCheck( "PetBaseRoutine" )
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
CheckLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_AWAY - nHandle( "..nHandle.." )" )
end
tMode["nMasterMode"] = PMM_AWAY
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_AWAY - nHandle( "..nHandle.." )" )
else
if tMode["nMasterMode"] == PMM_AWAY or tMode["nMasterMode"] == PMM_IDLE
then
-- 너무 멀어졌으니 멈춘것처럼
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- cRunTo( nHandle, tPetCoord["x"], tPetCoord["y"], 1000 )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
end
if tMode["nMasterMode"] ~= PMM_FAR
then
-- Far 진입 셋팅
PetMem["PetInfo"]["Time"]["EnterFarIdle"] = PetMem["CurSec"]
CheckLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_FAR - nHandle( "..nHandle.." )" )
end
tMode["nMasterMode"] = PMM_FAR
DebugLog( "PetBaseRoutine::PET_MASTER_MODE-PMM_FAR - nHandle( "..nHandle.." )" )
end
---------- 거리별 Pattern Decision// ---------------------------------
----------------------------------------------------------------------
end
end
end
elseif sMasterMode == "logoutwait"
then
-- 로그아웃대기 : 이건 뭔지 알아보기
else
-- 이상한 리턴값 : 문제 있으므로 솬해제
end
DebugLog( "PetBaseRoutine:: Point 2 - 행동하고 있는 것에 따라서.." )
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
------ 설정된 마스터 모드에 따라 행동 처리
if tMode["nMasterMode"] == PMM_IDLE -----------------------------------------------------------------------------------------------------------PMM_IDLE
then
-- 아이들 시간 카운팅 2가지 하기
-- 행동 타임에 행동 설정
if PetMem["PetInfo"]["Time"]["ExecIdleActMode"] < PetMem["CurSec"]
then
-- 행동할 시간이 왔음
--local tPetIdleActRecord = { cPet_GetActionRecord( nHandle, "idle" ) } -- { "PupAITypeString", "SM_Inx", "HairEffect", "SoundFile" }
if PetMem["PetInfo"]["tCurIdleActRecord"] == nil
then
PetMem["PetInfo"]["tCurIdleActRecord"] = { cPet_GetActionRecord( nHandle, "idle" ) }
end
--if tPetIdleActRecord ~= nil
if PetMem["PetInfo"]["tCurIdleActRecord"] ~= nil
then
if PetBaseIdleAction( PetMem, PetMem["PetInfo"]["tCurIdleActRecord"] ) == false
then
ErrorLog( "PetBaseRoutine::PetBaseIdleAction Failed ["..nHandle.."]" );
end
cExecCheck( "PetBaseRoutine" )
else
ErrorLog( "PetBaseRoutine::cPet_GetActionRecord Failed ["..nHandle.."]" );
end
-- 행동상태로 조정
tMode["nActionMode"] = PAM_IDLE_ACT
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_IDLE_ACT - nHandle( "..nHandle.." )" )
else
tMode["nActionMode"] = PAM_IDLE_WAIT
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_IDLE_WAIT - nHandle( "..nHandle.." )" )
end
-- 저장 타임에 저장 요청
if PetMem["PetInfo"]["Time"]["ExecSaveTendency"] < PetMem["CurSec"]
then
-- 저장할 시간이 왔음
if cPet_SaveTendency( nHandle ) == nil
then
ErrorLog( "PetBaseRoutine::cPet_SaveTendency Failed ["..nHandle.."]" )
else
CheckLog( "PetBaseRoutine::cPet_SaveTendency Failed ["..nHandle.."]" )
end
PetMem["PetInfo"]["Time"]["ExecSaveTendency"] = PetMem["CurSec"] + PetSystem_nSecWaitSaveTendencyAtIdle
end
elseif tMode["nMasterMode"] == PMM_AWAY -----------------------------------------------------------------------------------------------------------PMM_AWAY
then
-- 마스터 쪽으로 이동
local tMasterCoord = PetMem["MasterInfo"]["Coord"]["Cur"]
local tTargetCoord = {}
tTargetCoord["x"], tTargetCoord["y"] = cGetCoord_Circle( tMasterCoord["x"], tMasterCoord["y"], PetSystem_nDistanceFollowingStop )
if tTargetCoord["x"] ~= nil
then
cRunTo( nHandle, tTargetCoord["x"], tTargetCoord["y"], PetSystem_nSpeedRateFollowingMil )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tTargetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tTargetCoord["y"]
else
ErrorLog( "Following Move Target Coord is not Found" )-- 실패메세지
end
elseif tMode["nMasterMode"] == PMM_FAR -----------------------------------------------------------------------------------------------------------PMM_FAR
then
-- 이동 하던것 멈추고 정지 후(위에서 처리) 시간 카운팅
-- 너무 멀어져서 길 잃어 사라지는 시간 체크 후 소환 해제 처리
if PetMem["PetInfo"]["Time"]["EnterFarIdle"] + PetSystem_nSecWaitMissingAtFar < PetMem["CurSec"]
then
-- 소환 해제 요청
if cPet_Unsummon( nMasterHandle ) == nil
then
-- 소환해제에 문제 생김 : 심각한 문제 처리
end
-- AI 스크립트 해제
cAIScriptSet( nHandle )
-- 메모리 해제
gPetAIMemory["PetBase"][ nHandle ] = nil
DebugLog( "PetBaseRoutine::Pet Has Unsummoned - nHandle( "..nHandle.." )" )
return ReturnAI["END"]
end
elseif tMode["nMasterMode"] == PMM_CALL -----------------------------------------------------------------------------------------------------------PMM_CALL
then
-- 마스터 혹은 목표 지점 쪽으로 이동 후 쳐다보기
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
local tDestCoord = PetMem["PetInfo"]["Coord"]["Next"]
local tMasterCoord = PetMem["MasterInfo"]["Coord"]["Cur"]
local nCallingDistanceSquare = cDistanceSquar( tPetCoord["x"], tPetCoord["y"], tDestCoord["x"], tDestCoord["y"] )
local nFollowingDistanceSquare = cDistanceSquar( nHandle, nMasterHandle )
local nDistanceSquare
-- 불려서 오고있다면 그 목표지점에서의 거리를 보고
-- 그게 아니라면 현재 마스터와의 거리를 보자.
if tMode["nActionMode"] == PAM_CALL_COME
then
nDistanceSquare = nCallingDistanceSquare
else
nDistanceSquare = nFollowingDistanceSquare
end
if tMode["nActionMode"] == PAM_CALL_SEE
then
-- 설정된 시간만큼만 주인을 쳐다본다.
if PetMem["PetInfo"]["Time"]["LastEnterStayAtCallSee"] + PetSystem_nSecStayAtCallSee < PetMem["CurSec"]
then
-- 모든 모드 취소
tMode["nMasterMode"] = PMM_NONE
tMode["nActionMode"] = PAM_NONE
end
-- 쳐다보기
cSetObjectDirect( nHandle, tMasterCoord["x"], tMasterCoord["y"] )
-- 감정표현
--?????????????????????????????????????????????????????
else
----------------------------------------------------------------------
---------- //거리별 Pattern Decision ---------------------------------
if nDistanceSquare < PS_nDS_CallingStop
then
-- 가까워졌으면 도착한것이다.
if tMode["nActionMode"] == PAM_CALL_COME
then
-- 충분히 가까워졌으니 멈춘것처럼
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- cRunTo( nHandle, tPetCoord["x"], tPetCoord["y"], 1000 )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
end
if tMode["nActionMode"] ~= PAM_CALL_SEE
then
PetMem["PetInfo"]["Time"]["LastEnterStayAtCallSee"] = PetMem["CurSec"]
-- 주인 쳐다보기 진입 셋팅 : 몇초나 쳐다봐??????????????????????????????????
-- 이 상황을 어떻게 처리할지 추가 질문 필요
end
tMode["nActionMode"] = PAM_CALL_SEE
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_CALL_SEE - nHandle( "..nHandle.." )" )
else
if tMode["nActionMode"] ~= PAM_CALL_COME
then
-- 주인이 부르면 이동하기 진입 셋팅
-- 마스터 쪽으로 이동 : 주인이 부른 시점, 딱 한번만 체크하여 이동한다. 부른위치를 아는거지 마스터 위치를 아는게 아님.
local tMasterCoord = PetMem["MasterInfo"]["Coord"]["Cur"]
local tTargetCoord = {}
tTargetCoord["x"], tTargetCoord["y"] = cGetCoord_Circle( tMasterCoord["x"], tMasterCoord["y"], PetSystem_nDistanceCallingStop )
if tTargetCoord["x"] ~= nil
then
cRunTo( nHandle, tTargetCoord["x"], tTargetCoord["y"], PetSystem_nSpeedRateCallingMil )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tTargetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tTargetCoord["y"]
else
ErrorLog( "Calling Move Target Coord is not Found" )-- 실패메세지
end
end
tMode["nActionMode"] = PAM_CALL_COME
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_CALL_COME - nHandle( "..nHandle.." )" )
end
---------- 거리별 Pattern Decision// ---------------------------------
----------------------------------------------------------------------
end
elseif tMode["nMasterMode"] == PMM_DIE -----------------------------------------------------------------------------------------------------------PMM_DIE
then
-- 마스터 혹은 목표 지점 쪽으로 이동 후 쳐다보기
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
local tDestCoord = PetMem["PetInfo"]["Coord"]["Next"]
local tMasterCoord = PetMem["MasterInfo"]["Coord"]["Cur"]
local nDiedDistanceSquare = cDistanceSquar( tPetCoord["x"], tPetCoord["y"], tDestCoord["x"], tDestCoord["y"] )
local nFollowingDistanceSquare = cDistanceSquar( nHandle, nMasterHandle )
local nDistanceSquare
-- 불려서 오고있다면 그 목표지점에서의 거리를 보고
-- 그게 아니라면 현재 마스터와의 거리를 보자.
if tMode["nActionMode"] == PAM_DIE_COME
then
nDistanceSquare = nDiedDistanceSquare
else
nDistanceSquare = nFollowingDistanceSquare
end
if tMode["nActionMode"] == PAM_DIE_SAD
then
-- 설정된 시간만큼만 죽은 주인을 쳐다보며 슬퍼한다.
if PetMem["PetInfo"]["Time"]["LastEnterStayAtDiedSad"] + PetSystem_nSecStayAtDiedSad < PetMem["CurSec"]
then
-- 모든 모드 취소
tMode["nMasterMode"] = PMM_NONE
tMode["nActionMode"] = PAM_NONE
end
-- 쳐다보기
cSetObjectDirect( nHandle, tMasterCoord["x"], tMasterCoord["y"] )
-- 슬퍼하기는 말로서 표현
else
----------------------------------------------------------------------
---------- //거리별 Pattern Decision ---------------------------------
if nDistanceSquare < PS_nDS_DiedStop
then
-- 가까워졌으면 도착한것이다.
if tMode["nActionMode"] == PAM_DIE_COME
then
-- 충분히 가까워졌으니 멈추기
local tPetCoord = PetMem["PetInfo"]["Coord"]["Cur"]
-- cRunTo( nHandle, tPetCoord["x"], tPetCoord["y"], 1000 )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tPetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tPetCoord["y"]
end
if tMode["nActionMode"] ~= PAM_DIE_SAD
then
-- 슬픔 진입 셋팅 : 할거없고 다음루틴부터 할일함
PetMem["PetInfo"]["Time"]["LastEnterStayAtDiedSad"] = PetMem["CurSec"]
CheckLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_DIE_SAD - nHandle( "..nHandle.." )" )
end
tMode["nActionMode"] = PAM_DIE_SAD
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_DIE_SAD - nHandle( "..nHandle.." )" )
else
if tMode["nActionMode"] ~= PAM_DIE_COME
then
-- 주인이 부르면 이동하기 진입 셋팅
-- 마스터 쪽으로 이동 : 주인이 부른 시점, 딱 한번만 체크하여 이동한다. 부른위치를 아는거지 마스터 위치를 아는게 아님.
local tMasterCoord = PetMem["MasterInfo"]["Coord"]["Cur"]
local tTargetCoord = {}
tTargetCoord["x"], tTargetCoord["y"] = cGetCoord_Circle( tMasterCoord["x"], tMasterCoord["y"], PetSystem_nDistanceDiedStop )
if tTargetCoord["x"] ~= nil
then
cRunTo( nHandle, tTargetCoord["x"], tTargetCoord["y"], PetSystem_nSpeedRateMasterDiedMil )
PetMem["PetInfo"]["Coord"]["Next"]["x"] = tTargetCoord["x"]
PetMem["PetInfo"]["Coord"]["Next"]["y"] = tTargetCoord["y"]
else
ErrorLog( "Master Died Move Target Coord is not Found" )-- 실패메세지
end
CheckLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_DIE_COME - nHandle( "..nHandle.." )" )
end
tMode["nActionMode"] = PAM_DIE_COME
DebugLog( "PetBaseRoutine::PET_ACTION_MODE-PAM_DIE_COME - nHandle( "..nHandle.." )" )
end
---------- 거리별 Pattern Decision// ---------------------------------
----------------------------------------------------------------------
end
elseif tMode["nMasterMode"] == PMM_LINK -----------------------------------------------------------------------------------------------------------PMM_LINK
then
tMode["nActionMode"] = PAM_LINK
else
-- 정의 안된 모드이거나 아무것도 아니거나..
end
-- 원래 몹의 AI 를 적용
return ReturnAI["CPP"]
end