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/KQ/KDMine/KDMineFunc.lua

1004 lines
24 KiB

function PlayerMapLogin( Field, Player )
local Var = InstanceField[Field]
if Var == nil then
return
end
-- 추가 개선 9. 클래스 별 대미지가 개별로 들어가게 변경
local BaseClassNum = cGetBaseClass( Player )
cStaticDamage ( Player, STATIC_DAMAGE[BaseClassNum] ) -- 데미지 변경
-- cStaticDamage ( Player, STATIC_DAMAGE ) -- 데미지 변경
cStaticSpeed ( Player, STATIC_SPEED_RATE ) -- 이동속도 변경
cStaticMoverSpeed( Player, STATIC_MOVER_SPEED ) -- 무버속도 변경
-- 게이트 위치 표시 위해 맵마킹 보내줌
local MapMarkTable = {}
for i=1, #GateSettingTable do
local mmData = {}
local curMMT = MapMarkTypeTable[GateSettingTable[i]["MapMarkType"]]
if curMMT ~= nil then
mmData["Group"] = MM_G_GATE + i
mmData["x"] = GateSettingTable[i]["RegenX"]
mmData["y"] = GateSettingTable[i]["RegenY"]
mmData["KeepTime"] = curMMT["KeepTime"]
mmData["IconIndex"] = curMMT["IconIndex"]
MapMarkTable[mmData["Group"]] = mmData
end
end
-- 방어오브젝트 쓰기
if Var["DefObjList"] ~= nil then
for index, value in pairs( Var["DefObjList"] ) do
if MapMarkTypeTable[value["CurMM"]] ~= nil then
local mmData = {}
mmData["Group"] = MM_G_FENCE + value["MMGroup"]
mmData["x"] = value["Data"]["x"]
mmData["y"] = value["Data"]["y"]
mmData["KeepTime"] = MapMarkTypeTable[value["CurMM"]]["KeepTime"]
mmData["IconIndex"] = MapMarkTypeTable[value["CurMM"]]["IconIndex"]
MapMarkTable[mmData["Group"]] = mmData
end
end
end
-- 메인오브젝트쓰기
if Var["MainObj"] ~= nil then
local mmData = {}
local curMMT = MapMarkTypeTable[Var["MainObj"]["Data"]["MapMarkType"]]
if curMMT ~= nil then
mmData["Group"] = MM_G_MAIN
mmData["x"] = Var["MainObj"]["Data"]["x"]
mmData["y"] = Var["MainObj"]["Data"]["y"]
mmData["KeepTime"] = curMMT["KeepTime"]
mmData["IconIndex"] = curMMT["IconIndex"]
MapMarkTable[mmData["Group"]] = mmData
end
end
cMapMark( Field, MapMarkTable )
end
function PlayerItemUse( Field, Player, ItemID )
for index, value in pairs( MineTable ) do
if value["ItemID"] == ItemID then
local Data = MineTable[index]
local dir = cGetDirect( Player )
local coord = {}
coord["x"], coord["y"] = cGetAroundCoord( Player, dir, Data["Dist"] )
if coord["x"] ~= nil and coord["y"] ~= nil then
local RegenMob = {}
RegenMob["Handle"] = cMobRegen_XY( Field, Data["MobIndex"], coord["x"], coord["y"], dir )
if RegenMob["Handle"] ~= nil then
RegenMob["MapIndex"] = Field
RegenMob["Data"] = Data
RegenMob["RegenTime"] = cCurrentSecond()
RegenMob["BoomFlag"] = 1
cSkillBlast( RegenMob["Handle"], RegenMob["Handle"], RegenMob["Data"]["Skill"] )
cResetAbstate( RegenMob["Handle"], ABSTATE_IMT_IDX )
cSetAIScript( SCRIPT_MAIN, RegenMob["Handle"] )
cAIScriptFunc( RegenMob["Handle"], "Entrance", "MineRoutine" )
MineMemory[RegenMob["Handle"]] = RegenMob -- 지뢰 개별 변수
end
end
end
end
end
function InitKingdomQuestDefence( Var )
if Var == nil then
return
end
-- 데이터 테이블 참조 관계 체크
-- [BoomTypeTable]
for index, value in pairs( BoomTypeTable ) do
if index ~= "None" then
if value == nil then
cDebugLog( "BoomTypeTable Data nil : " .. " Index = " .. index )
return
end
if value["AbstateType"] == nil then
cDebugLog( "BoomTypeTable AbstateType nil : " .. " Index = " .. index )
return
end
if value["FollowType"] == nil then
cDebugLog( "BoomTypeTable FollowType nil : " .. " Index = " .. index )
return
end
if FollowTypeTable[value["FollowType"]] == nil then
cDebugLog( "BoomTypeTable nil Value : " .. "FollowType = " .. value["FollowType"] .. " Index = " .. index )
return
end
end
end
-- [SummonMobTypeTable]
for index, value in pairs( SummonMobTypeTable ) do
if value == nil then
cDebugLog( "SummonMobTypeTable Data nil : " .. "Index = " .. index )
return
end
if value["MobSettingType"] == nil then
cDebugLog( "SummonMobTypeTable MobSettingType nil : " .. "Index = " .. index )
return
end
if value["BoomType"] == nil then
cDebugLog( "SummonMobTypeTable BoomType nil : " .. "Index = " .. index )
return
end
if value["ResistType"] == nil then
cDebugLog( "SummonMobTypeTable ResistType nil : " .. "Index = " .. index )
return
end
if MobSettingTypeTable[value["MobSettingType"]] == nil then
cDebugLog( "SummonMobTypeTable nil Value : " .. "MobSettingType = " .. value["MobSettingType"] .." Index = " .. index )
return
end
if BoomTypeTable[value["BoomType"]] == nil then
if value["BoomType"] ~= "None" then
cDebugLog( "SummonMobTypeTable nil Value : " .. "BoomType = " .. value["BoomType"] .." Index = " .. index )
return
end
end
if ResistTypeTable[value["ResistType"]] == nil then
cDebugLog( "SummonMobTypeTable nil Value : " .. "ResistType = " .. value["ResistType"] .." Index = " .. index )
return
end
end
-- [SummonGroupTypeTable]
for index, value in pairs( SummonGroupTypeTable ) do
if value == nil then
cDebugLog( "SummonGroupTypeTable Data nil : " .. " Index = " .. index )
return
end
for i=1, #value do
if value[i]["SummonMobType"] == nil then
cDebugLog( "SummonGroupTypeTable Data SummonMobType nil : " .. " Index = " .. index .. " no = " .. i )
return
end
if SummonMobTypeTable[value[i]["SummonMobType"]] == nil then
cDebugLog( "SummonGroupTypeTable nil Value : " .. " Index = " .. index .. " no = " .. i .. "[" .. value[i]["SummonMobType"] .. "]" )
return
end
end
end
-- [SummonTypeTable]
for index, value in pairs( SummonTypeTable ) do
if index ~= "None" then
if value == nil then
cDebugLog( "SummonTypeTable Data nil : " .. " Index = " .. index )
return
end
if value["SummonGroupType"] == nil then
cDebugLog( "SummonTypeTable Data SummonGroupType nil : " .. " Index = " .. index )
return
end
if value["CheckRange"] == nil then
cDebugLog( "SummonTypeTable Data CheckRange nil : " .. " Index = " .. index )
return
end
if value["CoolTime"] == nil then
cDebugLog( "SummonTypeTable Data CoolTime nil : " .. " Index = " .. index )
return
end
if SummonGroupTypeTable[value["SummonGroupType"]] == nil then
cDebugLog( "SummonTypeTable nil Value : " .. " Index = " .. index .. " SummonGroupType = " .. i .. "[" .. value["SummonGroupType"] .. "]" )
return
end
end
end
-- [EscortGroupTypeTable]
for index, value in pairs( EscortGroupTypeTable ) do
if index ~= "None" then
if value == nil then
cDebugLog( "EscortGroupTypeTable Data nil : " .. " Index = " .. index )
return
end
for i=1, #value do
if value[i]["SummonMobType"] == nil then
cDebugLog( "EscortGroupTypeTable Data SummonMobType nil : " .. " Index = " .. index .. " no = " .. i )
return
end
if SummonMobTypeTable[value[i]["SummonMobType"]] == nil then
cDebugLog( "EscortGroupTypeTable nil Value : " .. " Index = " .. index .. " no = " .. i .. "[" .. value[i]["SummonMobType"] .. "]" )
return
end
end
end
end
-- [MapMarkTypeTable]
for index, value in pairs( MapMarkTypeTable ) do
if index ~= "None" then
if value == nil then
cDebugLog( "MapMarkTypeTable Data nil : " .. " Index = " .. index )
return
end
if value["IconIndex"] == nil then
cDebugLog( "MapMarkTypeTable Data IconIndex nil : " .. " Index = " .. index )
return
end
if value["KeepTime"] == nil then
cDebugLog( "MapMarkTypeTable Data KeepTime nil : " .. " Index = " .. index )
return
end
if value["Order"] == nil then
cDebugLog( "MapMarkTypeTable Data Order nil : " .. " Index = " .. index )
return
end
end
end
-- [WaveMobTypeTable]
for index, value in pairs( WaveMobTypeTable ) do
if value == nil then
cDebugLog( "WaveMobTypeTable Data nil : " .. "Index = " .. index )
return
end
if value["MobSettingType"] == nil then
cDebugLog( "WaveMobTypeTable MobSettingType nil : " .. "Index = " .. index )
return
end
if value["BoomType"] == nil then
cDebugLog( "WaveMobTypeTable BoomType nil : " .. "Index = " .. index )
return
end
if value["ResistType"] == nil then
cDebugLog( "WaveMobTypeTable ResistType nil : " .. "Index = " .. index )
return
end
if value["SummonType"] == nil then
cDebugLog( "WaveMobTypeTable SummonType nil : " .. "Index = " .. index )
return
end
if value["EscortGroupType"] == nil then
cDebugLog( "WaveMobTypeTable EscortGroupType nil : " .. "Index = " .. index )
return
end
if value["MapMarkType"] == nil then
cDebugLog( "WaveMobTypeTable MapMarkType nil : " .. "Index = " .. index )
return
end
if MobSettingTypeTable[value["MobSettingType"]] == nil then
cDebugLog( "WaveMobTypeTable nil Value : " .. "MobSettingType = " .. value["MobSettingType"] .." Index = " .. index )
return
end
if BoomTypeTable[value["BoomType"]] == nil then
if value["BoomType"] ~= "None" then
cDebugLog( "WaveMobTypeTable nil Value : " .. "BoomType = " .. value["BoomType"] .." Index = " .. index )
return
end
end
if ResistTypeTable[value["ResistType"]] == nil then
cDebugLog( "WaveMobTypeTable nil Value : " .. "ResistType = " .. value["ResistType"] .." Index = " .. index )
return
end
if SummonTypeTable[value["SummonType"]] == nil then
if value["SummonType"] ~= "None" then
cDebugLog( "WaveMobTypeTable nil Value : " .. "SummonType = " .. value["SummonType"] .." Index = " .. index )
return
end
end
if EscortGroupTypeTable[value["EscortGroupType"]] == nil then
if value["EscortGroupType"] ~= "None" then
cDebugLog( "WaveMobTypeTable nil Value : " .. "EscortGroupType = " .. value["EscortGroupType"] .." Index = " .. index )
return
end
end
if MapMarkTypeTable[value["MapMarkType"]] == nil then
if value["MapMarkType"] ~= "None" then
cDebugLog( "WaveMobTypeTable nil Value : " .. "MapMarkType = " .. value["MapMarkType"] .." Index = " .. index )
return
end
end
end
-- [PathTypeTable]
for index, value in pairs( PathTypeTable ) do
if value == nil then
cDebugLog( "PathTypeTable Data nil : " .. "Index = " .. index )
return
end
if #value <= 0 then
cDebugLog( "PathTypeTable Data nil : " .. "Index = " .. index )
return
end
end
-- [WaveTable]
for index, value in pairs( WaveTable ) do
if value == nil then
cDebugLog( "WaveTable Data nil : " .. "No = " .. index )
return
end
for i=1, #value do
if value[i]["WaveMobType"] == nil then
cDebugLog( "WaveTable Data WaveMobType nil : " .. " Wave = " .. index .. " no = " .. i )
return
end
if value[i]["PathType"] == nil then
cDebugLog( "WaveTable Data PathType nil : " .. " Wave = " .. index .. " no = " .. i )
return
end
if value[i]["Num"] == nil then
cDebugLog( "WaveTable Data Num nil : " .. " Wave = " .. index .. " no = " .. i )
return
end
if value[i]["RegenInterval"] == nil then
cDebugLog( "WaveTable Data RegenInterval nil : " .. " Wave = " .. index .. " no = " .. i )
return
end
if value[i]["WaveStepInterval"] == nil then
cDebugLog( "WaveTable Data WaveStepInterval nil : " .. " Wave = " .. index .. " no = " .. i )
return
end
if WaveMobTypeTable[value[i]["WaveMobType"]] == nil then
cDebugLog( "WaveTable nil Value : " .. "WaveMobType = " .. value[i]["WaveMobType"] .. " Wave = " .. index .. " no = " .. i )
return
end
if PathTypeTable[value[i]["PathType"]] == nil then
cDebugLog( "WaveTable nil Value : " .. "PathType = " .. value[i]["PathType"] .. " Wave = " .. index .. " no = " .. i )
return
end
end
end
-- [GateSettingTable]
for index, value in pairs( GateSettingTable ) do
if value == nil then
cDebugLog( "PathTypeTable Data nil : " .. "Index = " .. index )
return
end
if value["Index"] == nil then
cDebugLog( "GateSettingTable Data Index nil : " .. " index = " .. index )
return
end
if value["RegenX"] == nil then
cDebugLog( "GateSettingTable Data RegenX nil : " .. " index = " .. index )
return
end
if value["RegenY"] == nil then
cDebugLog( "GateSettingTable Data RegenY nil : " .. " index = " .. index )
return
end
if value["RegenDir"] == nil then
cDebugLog( "GateSettingTable Data RegenDir nil : " .. " index = " .. index )
return
end
if value["GoalX"] == nil then
cDebugLog( "GateSettingTable Data GoalX nil : " .. " index = " .. index )
return
end
if value["GoalY"] == nil then
cDebugLog( "GateSettingTable Data GoalY nil : " .. " index = " .. index )
return
end
if value["MapMarkType"] == nil then
cDebugLog( "GateSettingTable Data MapMarkType nil : " .. " index = " .. index )
return
end
if MapMarkTypeTable[value["MapMarkType"]] == nil then
if value["MapMarkType"] ~= "None" then
cDebugLog( "GateSettingTable nil Value : " .. "MapMarkType = " .. value["MapMarkType"] .." Index = " .. index )
return
end
end
end
-- 게이트 리젠 및 스크립트 셋팅
local GateList = {}
for i=1, #GateSettingTable do
local RegenMob = {}
RegenMob["Handle"] = cMobRegen_XY( Var["MapIndex"],
GateSettingTable[i]["Index"],
GateSettingTable[i]["RegenX"],
GateSettingTable[i]["RegenY"],
GateSettingTable[i]["RegenDir"] )
if RegenMob["Handle"] ~= nil then
RegenMob["GateData"] = GateSettingTable[i]
-- 리젠시 걸리는 무적 상태이상 풀어줌
cResetAbstate( RegenMob["Handle"], ABSTATE_IMT_IDX )
cSetAIScript( SCRIPT_MAIN, RegenMob["Handle"] )
cAIScriptFunc( RegenMob["Handle"], "Entrance", "GateRoutine" )
cAIScriptFunc( RegenMob["Handle"], "NPCClick", "GateFunc" )
GateList[RegenMob["Handle"]] = RegenMob
GateMapIndex[RegenMob["Handle"]] = Var["MapIndex"] -- 게이트용 전역변수에 맵인덱스 저장
end
end
Var["GateList"] = GateList
-- 방어오브젝트 리젠
local DefObjList = {}
for i=1, #DefenceObjectTable do
local RegenMob = {}
RegenMob["Handle"] = cMobRegen_XY( Var["MapIndex"],
DefenceObjectTable[i]["Index"],
DefenceObjectTable[i]["x"],
DefenceObjectTable[i]["y"],
DefenceObjectTable[i]["dir"] )
if RegenMob["Handle"] ~= nil then
RegenMob["Data"] = DefenceObjectTable[i]
RegenMob["CurHP"] = RegenMob["Data"]["HP"]
RegenMob["CurAni"] = #AniStateTypeTable[RegenMob["Data"]["AniStateType"]] -- 애니상태 마지막값
RegenMob["CurMM"] = MMGroupTypeTable[RegenMob["Data"]["MMGroupType"]]["Normal"]
RegenMob["MMGroup"] = i
RegenMob["LastCheckTime"] = cCurrentSecond()
RegenMob["DestroyTime"] = cCurrentSecond()
-- 리젠시 걸리는 무적 상태이상 풀어줌
cResetAbstate( RegenMob["Handle"], ABSTATE_IMT_IDX )
cSetAIScript( SCRIPT_MAIN, RegenMob["Handle"] )
cAIScriptFunc( RegenMob["Handle"], "Entrance", "DefObjRoutine" )
cAIScriptFunc( RegenMob["Handle"], "NPCClick", "DefObjClick" )
cAIScriptFunc( RegenMob["Handle"], "NPCMenu", "DefObjCasting" ) -- 캐스팅 완료후 처리용
DefObjList[RegenMob["Handle"]] = RegenMob
DefObjMapIndex[RegenMob["Handle"]] = Var["MapIndex"]
end
end
Var["DefObjList"] = DefObjList
-- 최종 오브젝트 리젠
local MainObj = {}
MainObj["Handle"] = cMobRegen_XY( Var["MapIndex"],
MainDefenceObject["Index"],
MainDefenceObject["x"],
MainDefenceObject["y"],
MainDefenceObject["dir"] )
if MainObj["Handle"] ~= nil then
MainObj["Data"] = MainDefenceObject
MainObj["CurHP"] = MainObj["Data"]["HP"]
MainObj["LastCheckTime"] = cCurrentSecond()
MainObj["MapIndex"] = Var["MapIndex"]
-- 리젠시 걸리는 무적 상태이상 풀어줌
cResetAbstate( MainObj["Handle"], ABSTATE_IMT_IDX )
cSetAIScript( SCRIPT_MAIN, MainObj["Handle"] )
cAIScriptFunc( MainObj["Handle"], "Entrance", "MainObjRoutine" )
Var["MainObj"] = MainObj
end
-- 아무 기능 없는 오브젝트 리젠 [인부]
for i=1, #ObjectTable do
cMobRegen_XY( Var["MapIndex"],
ObjectTable[i]["Index"],
ObjectTable[i]["x"],
ObjectTable[i]["y"],
ObjectTable[i]["dir"] )
end
-- 상인 NPC 리젠
cNPCRegen( Var["MapIndex"], "MineDigger" )
Var["StepFunc"] = DummyFunc
end
function InitBalance( Var )
if Var == nil then
return
end
if Var["MapIndex"] == nil then
return
end
-- 캐릭터 입장 인원에 따른 밸런스테이블 참조 설정
local BalanceValue = 0
local Players = { cGetPlayerList( Var["MapIndex"] ) }
for i=1, #Players do
local class = cGetBaseClass( Players[i] )
local level = cGetLevel( Players[i] )
if class ~= nil and level ~= nil then
if ClassBalanceValue[class] ~= nil then
-- 밸런스값 = 레벨 * 클래스고유값
BalanceValue = BalanceValue + ( level * (ClassBalanceValue[class] / 1000) )
end
end
end
for i=1, #BalanceTable do
if BalanceValue <= BalanceTable[i]["BalanceValue"] then
Var["Balance"] = BalanceTable[i]
break
end
end
-- 값이 준비된 테이블의 값보다 크면 마지막 값으로
if Var["Balance"] == nil then
Var["Balance"] = BalanceTable[#BalanceTable]
end
-- 방어오브젝트 부서짐에 따라 변화할 밸런스값 초기화
local FenceBalance = {}
FenceBalance["DamageRate"] = 1000
FenceBalance["SpeedRate"] = 1000
FenceBalance["HPRate"] = 1000
Var["FenceBalance"] = FenceBalance
Var["StepFunc"] = DummyFunc
end
function WaveProcess( Var )
if Var == nil then
return
end
if Var["MapIndex"] == nil then
return
end
if Var["InitWave"] == nil then
Var["InitWave"] = 1 -- 아무값이나 넣어줌 초기화 체크용
Var["WaveStep"] = 1 -- 큰 단위의 웨이브 진행단계
Var["WaveInner"] = 1 -- 한 웨이브 내 진행단계
Var["WaveRegenCount"] = 0 -- 하나의 단계에서 소환된 몹의 수 저장용
Var["WaveTime"] = cCurrentSecond() -- 몹 리젠 간격 체크용
local WaveMaxInner = {}
local WaveMaxRegen = {}
local WaveRunner = {}
-- 추가 개선 2. 웨이브 등장할 때, 공지 처리 필요
local WaveMaxNo = 0
for i=1, #WaveTable do
WaveMaxInner[i] = #WaveTable[i]
WaveMaxRegen[i] = {}
for j=1, #WaveTable[i] do
WaveMaxRegen[i][j] = WaveTable[i][j]["Num"]
end
-- 추가 개선 2. 웨이브 등장할 때, 공지 처리 필요
WaveMaxNo = WaveMaxNo + #WaveTable[i]
end
Var["WaveMaxStep"] = #WaveTable -- 웨이브 체크용
Var["WaveMaxInner"] = WaveMaxInner -- 웨이브 체크용
Var["WaveMaxRegen"] = WaveMaxRegen -- 웨이브 체크용
Var["WaveRunner"] = WaveRunner -- 웨이브몹 정보 관리
-- 추가 개선 2. 웨이브 등장할 때, 공지 처리 필요
Var["WaveMaxNo"] = WaveMaxNo -- 웨이브 총 단계(Inner의 총 갯수)
Var["WaveCurNo"] = 1 -- 웨이브 현재 단계
end
-- 웨이브몹 단계 체크. 몹리젠수 -> 내부단계 -> 웨이브단계
if Var["WaveRegenCount"] >= Var["WaveMaxRegen"][Var["WaveStep"]][Var["WaveInner"]] then
Var["WaveRegenCount"] = 0
Var["WaveInner"] = Var["WaveInner"] + 1
Var["WaveCurNo"] = Var["WaveCurNo"] + 1
end
if Var["WaveInner"] > Var["WaveMaxInner"][Var["WaveStep"]] then
Var["WaveInner"] = 1
Var["WaveStep"] = Var["WaveStep"] + 1
end
if Var["WaveStep"] > Var["WaveMaxStep"] then
Var["InitWave"] = nil
Var["StepFunc"] = DummyFunc
return
end
local CurWaveData = WaveTable[Var["WaveStep"]][Var["WaveInner"]]
local CurMobSettingData = MobSettingTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["MobSettingType"]]
local CurWavePathDate = PathTypeTable[CurWaveData["PathType"]]
-- 웨이브몹 리젠 시간 체크
local CurTime = cCurrentSecond()
local DlyTime = CurWaveData["RegenInterval"]
if Var["WaveRegenCount"] == 0 then
DlyTime = CurWaveData["WaveStepInterval"]
end
if (Var["WaveTime"]) > (CurTime - DlyTime) then
return
end
-- 추가 개선 2. 웨이브 등장할 때, 공지 처리 필요
if Var["WaveRegenCount"] == 0 then
cScriptMessage( Var["MapIndex"], AnnounceInfo["KDMine_Wave_No"], Var["WaveMaxNo"], Var["WaveCurNo"] )
end
-- 몹 리젠 및 셋팅
local RegenMob = {}
RegenMob["Handle"] = cMobRegen_XY( Var["MapIndex"],
CurMobSettingData["Index"],
CurWavePathDate[1]["x"],
CurWavePathDate[1]["y"], 0 )
if RegenMob["Handle"] ~= nil then
RegenMob["MapIndex"] = Var["MapIndex"]
RegenMob["MobSettingType"] = MobSettingTypeTable [WaveMobTypeTable[CurWaveData["WaveMobType"]]["MobSettingType" ]]
RegenMob["BoomType"] = BoomTypeTable [WaveMobTypeTable[CurWaveData["WaveMobType"]]["BoomType" ]]
RegenMob["SummonType"] = SummonTypeTable [WaveMobTypeTable[CurWaveData["WaveMobType"]]["SummonType" ]]
RegenMob["EscortGroupType"] = EscortGroupTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["EscortGroupType"]]
RegenMob["PathType"] = PathTypeTable[CurWaveData["PathType"]]
RegenMob["MapMarkType"] = MapMarkTypeTable [WaveMobTypeTable[CurWaveData["WaveMobType"]]["MapMarkType"]]
local DamageRate = (Var["Balance"]["DamageRate"] + Var["FenceBalance"]["DamageRate"]) / 2000
local HPRate = (Var["Balance"]["HPRate"] + Var["FenceBalance"]["HPRate"] ) / 2000
local SpeedRate = (Var["Balance"]["SpeedRate"] + Var["FenceBalance"]["SpeedRate"] ) / 2000
RegenMob["Damage"] = CurMobSettingData["Demage"] * DamageRate
cSetNPCParam( RegenMob["Handle"], "MaxHP", CurMobSettingData["HP"] * HPRate )
cSetNPCParam( RegenMob["Handle"], "HP", CurMobSettingData["HP"] * HPRate )
cSetNPCParam( RegenMob["Handle"], "RunSpeed", CurMobSettingData["Speed"] * SpeedRate )
cSetNPCParam( RegenMob["Handle"], "HPRegen", CurMobSettingData["HPRegen"] )
cSetNPCParam( RegenMob["Handle"], "AC", CurMobSettingData["AC"] )
cSetNPCParam( RegenMob["Handle"], "MR", CurMobSettingData["MR"] )
cSetNPCParam( RegenMob["Handle"], "MobEXP", CurMobSettingData["Exp"] )
cSetNPCResist( RegenMob["Handle"], ResistTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["ResistType"]] )
cSetNPCIsItemDrop( RegenMob["Handle"], CurMobSettingData["ItemDrop"] )
-- 리젠시 걸리는 무적 상태이상 풀어줌
cResetAbstate( RegenMob["Handle"], ABSTATE_IMT_IDX )
cSetAIScript( SCRIPT_MAIN, RegenMob["Handle"] )
cAIScriptFunc( RegenMob["Handle"], "Entrance", "MobRoutine" )
Var["WaveRunner"][RegenMob["Handle"]] = RegenMob
end
-- 리젠카운트 증가시키고 체크시간 갱신
Var["WaveRegenCount"] = Var["WaveRegenCount"] + 1
Var["WaveTime"] = cCurrentSecond()
end
function MapMarking( Var )
if Var == nil then
return
end
if Var["MapIndex"] == nil then
return
end
if Var["InitMapMark"] == nil then
Var["InitMapMark"] = 1
Var["MapMarkTime"] = cCurrentSecond()
end
local CurSec = cCurrentSecond()
if Var["MapMarkTime"] + MAP_MARK_CHK_DLY > CurSec then -- 맵 마킹 갱신 시간 체크
return
end
Var["MapMarkTime"] = CurSec
-- 맵마킹 요청할 데이터 테이블 만들어줌
--{ { Group = 1, x = 100, y = 100, KeepTime = 1000, IconIndex = "chief" }, ... }
local MapMarkTable = {}
-- 웨이브몹 쓰기
if Var["WaveRunner"] ~= nil then
-- 웨이브 몹들 좌표 가져옴
local WaveMobCoord = {}
for index, value in pairs( Var["WaveRunner"] ) do
if cIsObjectDead( value["Handle"] ) == nil then
local coord = {}
coord["x"], coord["y"] = cObjectLocate( value["Handle"] )
WaveMobCoord[value["Handle"]] = coord
end
end
-- 표시할 맵 위치 계산
local MapMarkCheck = {}
for i=1, #MapMarkLocateTable do
for index, value in pairs( WaveMobCoord ) do
local CurMMT = Var["WaveRunner"][index]["MapMarkType"]
-- 맵 마킹 체크 하면서 체크되지 않은 좌표 이거나
-- 체크된 곳의 몹보다 현재 몹이 더 높은 Order를 가진경우만 계산
if (CurMMT ~= nil and MapMarkCheck[i] == nil) or
(CurMMT ~= nil and MapMarkCheck[i]["Order"] < CurMMT["Order"]) then
local dx = MapMarkLocateTable[i]["x"] - value["x"]
local dy = MapMarkLocateTable[i]["y"] - value["y"]
local distsquar = dx * dx + dy * dy
-- 거리 체크
if MapMarkLocateTable[i]["Range"] * MapMarkLocateTable[i]["Range"] > distsquar then
MapMarkCheck[i] = CurMMT
end
end
end
end
for i=1, #MapMarkLocateTable do
-- 위에서 체크된 좌표만 저장
if MapMarkCheck[i] ~= nil then
local mmData = {}
mmData["Group"] = MM_G_WAVEMOB + i
mmData["x"] = MapMarkLocateTable[i]["x"]
mmData["y"] = MapMarkLocateTable[i]["y"]
mmData["KeepTime"] = MapMarkCheck[i]["KeepTime"]
mmData["IconIndex"] = MapMarkCheck[i]["IconIndex"]
MapMarkTable[mmData["Group"]] = mmData
end
end
end
cMapMark( Var["MapIndex"], MapMarkTable )
end