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.
277 lines
9.1 KiB
277 lines
9.1 KiB
|
|
--------------------------------------------------------------------------------
|
|
-- KingSlime :: 최초낙하( 리젠 후 스킬 )
|
|
--------------------------------------------------------------------------------
|
|
|
|
function KS_ShowUp( Handle, MapIndex )
|
|
cExecCheck "KS_ShowUp"
|
|
|
|
local Var = InstanceField[ MapIndex ]
|
|
|
|
if Var["KingSlimeProcess"]["SkillEndTime"] > Var["CurSec"]
|
|
then
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
-- 스킬 처리 다끝났으면,
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = 0
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = 0
|
|
|
|
cAIScriptSet( Handle )
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- KingSlime :: 강림
|
|
--------------------------------------------------------------------------------
|
|
function KS_Warp( Handle, MapIndex )
|
|
cExecCheck "KS_Warp"
|
|
|
|
local Var = InstanceField[ MapIndex ]
|
|
|
|
if Var["KingSlimeProcess"]["SkillWorkTime"] > Var["CurSec"]
|
|
then
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
local SkillInfo = SkillInfo_KingSlime["KS_Warp"]
|
|
local AbStateList = SkillInfo["AbState_To_KingSlime"]
|
|
--------------------------------------------------------------------------------
|
|
-- ★ KS_Warp 처리상, 한번만 해줘야 하는 부분(초기화)
|
|
--------------------------------------------------------------------------------
|
|
if Var["KS_Warp"] == nil
|
|
then
|
|
DebugLog("KS_Warp 테이블 생성")
|
|
Var["KS_Warp"] = {}
|
|
|
|
-- 킹슬라임에 상태이상 걸어준다
|
|
cSetAbstate( Handle, AbStateList["NotTargetted"]["Index"], AbStateList["NotTargetted"]["Strength"], AbStateList["NotTargetted"]["KeepTime"], Handle )
|
|
|
|
-- 미리 몹을 타겟팅하고있던 플레이어들의 타겟팅 해제
|
|
local PlayerHandleList = { cGetPlayerList( Var["MapIndex"] ) }
|
|
-- DebugLog( "맵에 있는 유저의 수 : "..#PlayerHandleList )
|
|
for i = 1, #PlayerHandleList
|
|
do
|
|
cTargetChangeNull( PlayerHandleList[i], Handle )
|
|
end
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- ★ Var["KS_Warp"] 테이블 생성된 뒤 처리할 부분
|
|
--------------------------------------------------------------------------------
|
|
if Var["KS_Warp"] ~= nil
|
|
then
|
|
if Var["KingSlimeProcess"]["SkillEndTime"] > Var["CurSec"]
|
|
then
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
if Var["KingSlimeProcess"]["SkillEndTime"] <= Var["CurSec"]
|
|
then
|
|
DebugLog("KS_Warp 모든 스킬처리완료!")
|
|
--상태이상 해제
|
|
cResetAbstate( Handle, AbStateList["NotTargetted"]["Index"] )
|
|
|
|
Var["KS_Warp"] = nil
|
|
|
|
-- 스킬 처리 다끝났으면,
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = 0
|
|
Var["KingSlimeProcess"]["SkillWorkTime"] = 0
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = 0
|
|
|
|
Var["KingSlimeProcess"]["CurSkillIndex"] = nil
|
|
|
|
cAIScriptSet( Handle )
|
|
return ReturnAI["END"]
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- KingSlime :: 폭격( 몹 소환 )
|
|
--------------------------------------------------------------------------------
|
|
|
|
function KS_BombSlimePiece( Handle, MapIndex )
|
|
cExecCheck "KS_BombSlimePiece"
|
|
|
|
local Var = InstanceField[ MapIndex ]
|
|
|
|
if Var["KingSlimeProcess"]["SkillWorkTime"] > Var["CurSec"]
|
|
then
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
local SkillInfo = SkillInfo_KingSlime["KS_BombSlimePiece"]
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- ★ KS_BombSlimePiece 처리상, 한번만 해줘야 하는 부분(초기화)
|
|
--------------------------------------------------------------------------------
|
|
if Var["KS_BombSlimePiece"] == nil
|
|
then
|
|
Var["KS_BombSlimePiece"] = {}
|
|
--DebugLog("KS_BombSlimePiece 테이블 생성")
|
|
|
|
-- 몹을 소환할 좌표값 x, y를 SummonRegenLocate 테이블에 저장한다
|
|
if Var["KS_BombSlimePiece"]["SummonRegenLocate"] == nil
|
|
then
|
|
Var["KS_BombSlimePiece"]["SummonRegenLocate"] = {}
|
|
|
|
local CurKingSlimeX, CurKingSlimeY = cObjectLocate( Handle )
|
|
|
|
for i = 1, SkillInfo["SummonNum"]
|
|
do
|
|
Var["KS_BombSlimePiece"]["SummonRegenLocate"][i] = {}
|
|
Var["KS_BombSlimePiece"]["SummonRegenLocate"][i]["x"],
|
|
Var["KS_BombSlimePiece"]["SummonRegenLocate"][i]["y"] = cGetCoord_Circle( CurKingSlimeX, CurKingSlimeY, SkillInfo["SummonRadius"] )
|
|
|
|
--[[
|
|
-- 디버깅용, 몹이 소환될 좌표 정보를 출력
|
|
DebugLog("----["..i.."]----")
|
|
DebugLog("SummonRegenLocate X :"..Var["KS_BombSlimePiece"]["SummonRegenLocate"][i]["x"])
|
|
DebugLog("SummonRegenLocate Y :"..Var["KS_BombSlimePiece"]["SummonRegenLocate"][i]["y"])
|
|
--]]
|
|
end
|
|
end
|
|
|
|
-- 소환할 시간과, 소환할 몹 순서정보를 초기화한다
|
|
if Var["KS_BombSlimePiece"]["SummonTime"] == nil
|
|
then
|
|
Var["KS_BombSlimePiece"]["SummonTime"] = Var["CurSec"]
|
|
Var["KS_BombSlimePiece"]["CurSummonSequence"] = 1
|
|
|
|
--DebugLog("SummonTime : " ..Var["CurSec"])
|
|
--DebugLog("CurSummonSequence : " ..Var["KS_BombSlimePiece"]["CurSummonSequence"])
|
|
end
|
|
end
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- ★ Var["KS_BombSlimePiece"] 테이블 생성된 뒤 처리할 부분
|
|
--------------------------------------------------------------------------------
|
|
if Var["KS_BombSlimePiece"] ~= nil
|
|
then
|
|
if Var["KS_BombSlimePiece"]["SummonTime"] ~= nil
|
|
then
|
|
|
|
if Var["KS_BombSlimePiece"]["SummonTime"] > Var["CurSec"]
|
|
then
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
if Var["KS_BombSlimePiece"]["CurSummonSequence"] <= SkillInfo["SummonNum"]
|
|
then
|
|
-- 소환몹이 리젠될 좌표를 저장하는 변수
|
|
local CurSummonMob = Var["KS_BombSlimePiece"]["SummonRegenLocate"][Var["KS_BombSlimePiece"]["CurSummonSequence"]]
|
|
|
|
-- 소환몹의 인덱스와 소환몹이 사용할 스킬인덱스. 보스몹이 사용한 스킬인덱스에 따라 다르다.
|
|
local CurSummonMobIndex = nil
|
|
local CurSummonSkillIndex = nil
|
|
|
|
-- 킹슬라임이 SD_SlimeLump 만 소환하는 스킬 사용시.
|
|
if Var["KingSlimeProcess"]["CurSkillIndex"] == SkillInfo["SkillIndex_Lump"]
|
|
then
|
|
--DebugLog("킹슬라임 소환스킬.."..SkillInfo["SkillIndex_Lump"] )
|
|
CurSummonMobIndex = SkillInfo["SummonLump"]["SummonIndex"]
|
|
CurSummonSkillIndex = SkillInfo["SummonLump"]["SummonSkillIndex"]
|
|
|
|
-- 킹슬라임이 SD_SlimeIce 만 소환하는 스킬 사용시.
|
|
elseif Var["KingSlimeProcess"]["CurSkillIndex"] == SkillInfo["SkillIndex_Ice"]
|
|
then
|
|
--DebugLog("킹슬라임 소환스킬.."..SkillInfo["SkillIndex_Ice"] )
|
|
CurSummonMobIndex = SkillInfo["SummonIce"]["SummonIndex"]
|
|
CurSummonSkillIndex = SkillInfo["SummonIce"]["SummonSkillIndex"]
|
|
|
|
-- 킹슬라임이 둘 다 소환하는 스킬 사용시.( 짝수/홀수 교대로 소환몹 종류변경 )
|
|
elseif Var["KingSlimeProcess"]["CurSkillIndex"] == SkillInfo["SkillIndex_All"]
|
|
then
|
|
--DebugLog("킹슬라임 소환스킬.."..SkillInfo["SkillIndex_All"] )
|
|
|
|
if Var["KS_BombSlimePiece"]["CurSummonSequence"] % 2 == 0
|
|
then
|
|
CurSummonMobIndex = SkillInfo["SummonLump"]["SummonIndex"]
|
|
CurSummonSkillIndex = SkillInfo["SummonLump"]["SummonSkillIndex"]
|
|
|
|
elseif Var["KS_BombSlimePiece"]["CurSummonSequence"] % 2 == 1
|
|
then
|
|
CurSummonMobIndex = SkillInfo["SummonIce"]["SummonIndex"]
|
|
CurSummonSkillIndex = SkillInfo["SummonIce"]["SummonSkillIndex"]
|
|
end
|
|
-- 이런 경우는 없지만.. 디버깅 테스트용도..
|
|
else
|
|
ErrorLog("KS_BombSlimePiece 루틴, 알수없는 스킬 사용중..")
|
|
end
|
|
|
|
-- 소환한 몹의 핸들값을 갖는다.
|
|
local CurSummonHandle = cMobRegen_XY( MapIndex, CurSummonMobIndex, CurSummonMob["x"], CurSummonMob["y"] )
|
|
|
|
if CurSummonHandle == nil
|
|
then
|
|
-- DebugLog("몹 리젠 실패"..Var["KS_BombSlimePiece"]["CurSummonSequence"] )
|
|
-- 랜덤으로 추출한 좌표가 블럭인 경우, 몹리젠이 실패하지만 별도의 예외처리는 하지않는다.
|
|
-- 그냥 다음 몹 리젠하도록 넘어간다.
|
|
end
|
|
|
|
|
|
if CurSummonHandle ~= nil
|
|
then
|
|
if cSkillBlast( CurSummonHandle, CurSummonHandle, CurSummonSkillIndex ) == nil
|
|
then
|
|
ErrorLog("몹 스킬사용실패"..Var["KS_BombSlimePiece"]["CurSummonSequence"] )
|
|
end
|
|
end
|
|
|
|
|
|
-- 다음 몹 리젠을 위한 정보 세팅
|
|
Var["KS_BombSlimePiece"]["CurSummonSequence"] = Var["KS_BombSlimePiece"]["CurSummonSequence"] + 1
|
|
Var["KS_BombSlimePiece"]["SummonTime"] = Var["KS_BombSlimePiece"]["SummonTime"] + SkillInfo["SummonTick"]
|
|
|
|
--DebugLog("다음 리젠할 시간은 : "..Var["KS_BombSlimePiece"]["SummonTime"])
|
|
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
-- 리젠테이블 다 돌았으니깐, 초기화
|
|
Var["KS_BombSlimePiece"]["SummonTime"] = nil
|
|
Var["KS_BombSlimePiece"]["CurSummonSequence"] = nil
|
|
end
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- ▼ 몹 소환 작업이 끝났으므로, 스킬 종료해도 되는 시간인지 체크한다
|
|
--------------------------------------------------------------------------------
|
|
-- 스킬 처리는 완료했지만, 아직 소환애니메이션 중이라면 대기
|
|
if Var["KingSlimeProcess"]["SkillEndTime"] > Var["CurSec"]
|
|
then
|
|
--DebugLog("올라오기 대기중..")
|
|
return ReturnAI["END"]
|
|
end
|
|
|
|
if Var["KingSlimeProcess"]["SkillEndTime"] <= Var["CurSec"]
|
|
then
|
|
--DebugLog("KS_BombSlimePiece 모든 스킬처리완료!")
|
|
Var["KS_BombSlimePiece"] = nil
|
|
|
|
-- 스킬 처리 다끝났으면,
|
|
Var[Handle]["IsProgressSpecialSkill"] = false
|
|
|
|
Var["KingSlimeProcess"]["SkillStartTime"] = 0
|
|
Var["KingSlimeProcess"]["SkillWorkTime"] = 0
|
|
Var["KingSlimeProcess"]["SkillEndTime"] = 0
|
|
|
|
Var["KingSlimeProcess"]["CurSkillIndex"] = nil
|
|
|
|
cAIScriptSet( Handle )
|
|
return ReturnAI["END"]
|
|
end
|
|
end
|
|
|
|
return ReturnAI["END"]
|
|
end
|
|
|