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/KDEgg/KDEggFunc.lua

547 lines
12 KiB

function PlayerMapLogin( Field, Player )
cExecCheck( "PlayerMapLogin" )
local Var = InstanceField[Field]
if Var == nil then
return
end
-- 이동속도 변경
--cStaticSpeed ( Player, STATIC_SPEED_RATE )
cSetAbstate( Player, ABSTATE_SPEED_UP_INDEX, 1, ABSTATE_SPEED_UP_KEEP )
-- 맵마킹 보내줌
local MapMarkTable = {}
for i=1, #ObjectTable do
local mmData = {}
local curMMT = MapMarkTypeTable[ObjectTable[i]["MapMarkType"]]
if curMMT ~= nil then
mmData["Group"] = MM_G_GATE + i
mmData["x"] = ObjectTable[i]["x"]
mmData["y"] = ObjectTable[i]["y"]
mmData["KeepTime"] = curMMT["KeepTime"]
mmData["IconIndex"] = curMMT["IconIndex"]
MapMarkTable[mmData["Group"]] = mmData
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_Obj( Player, MapMarkTable )
end
function PlayerItemUse( Field, Player, ItemID )
cExecCheck( "PlayerItemUse" )
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
RegenMob["Master"] = Player
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 MapMarking( Var )
cExecCheck( "MapMarking" )
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
function InitKingdomQuestDefence( Var )
cExecCheck( "InitKingdomQuestDefence" )
if Var == nil then
return
end
-- 최종 오브젝트 리젠
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"], MerchantNPC )
Var["StepFunc"] = DummyFunc
end
function WaveProcess( Var )
cExecCheck( "WaveProcess" )
if Var == nil then
return
end
if Var["MapIndex"] == nil then
return
end
-- 웨이브 처리 관련 정보 초기화
if Var["InitWave"] == nil then
Var["InitWave"] = 1
Var["WaveStep"] = 0
Var["Wave"] = {}
Var["WaveRunner"] = {}
Var["NextWave"] = true
for index, value in pairs( PathTypeTable ) do
Var["Wave"][index] = {}
Var["Wave"][index]["Wait"] = true -- 다른 그룹 완료 대기
Var["Wave"][index]["InnerStep"] = 1 -- 그룹 내 몹 리젠 스탭
Var["Wave"][index]["RegenCnt"] = 0 -- 몹 리젠 카운트
Var["Wave"][index]["WaveTime"] = cCurrentSecond() -- 몹 리젠 간격 체크
end
end
if Var["NextWave"] == true then
for index, value in pairs( PathTypeTable ) do
Var["Wave"][index]["Wait"] = false
end
Var["WaveStep"] = Var["WaveStep"] + 1
if Var["WaveStep"] > #WaveTable then
Var["InitWave"] = nil
Var["StepFunc"] = DummyFunc
return
else
Var["WaveDialog"] = DialogInfo[WaveTable[Var["WaveStep"]]["Dialog"]]
Var["WaveAnnounce"] = WaveTable[Var["WaveStep"]]["Announce"]
end
end
-- 웨이브 몹 리젠
Var["NextWave"] = true
for index, value in pairs( PathTypeTable ) do
if WaveTable[Var["WaveStep"]][index] == nil then
Var["Wave"][index]["Wait"] = true
end
if Var["Wave"][index]["Wait"] == false then
Var["NextWave"] = false
if Var["Wave"][index]["RegenCnt"] >= WaveTable[Var["WaveStep"]][index][Var["Wave"][index]["InnerStep"]]["Num"] then
Var["Wave"][index]["RegenCnt"] = 0
Var["Wave"][index]["InnerStep"] = Var["Wave"][index]["InnerStep"] + 1
end
if Var["Wave"][index]["InnerStep"] > #WaveTable[Var["WaveStep"]][index] then
Var["Wave"][index]["InnerStep"] = 1
Var["Wave"][index]["Wait"] = true
else
local CurWaveData = WaveTable[Var["WaveStep"]][index][Var["Wave"][index]["InnerStep"]]
local CurMobSettingData = MobSettingTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["MobSettingType"]]
local CurTime = cCurrentSecond()
local DlyTime = CurWaveData["RegenInterval"]
if Var["Wave"][index]["RegenCnt"] == 0 then
DlyTime = CurWaveData["WaveStepInterval"]
end
if Var["Wave"][index]["WaveTime"] > (CurTime - DlyTime) then
return
end
local RegenMob = {}
RegenMob["Handle"] = cMobRegen_XY( Var["MapIndex"], CurMobSettingData["Index"], value[1]["x"], value[1]["y"], 0 )
if RegenMob["Handle"] ~= nil then
RegenMob["MapIndex"] = Var["MapIndex"]
RegenMob["PathType"] = value
RegenMob["MobChatType"] = MobChatTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["MobChatType"]]
if RegenMob["MobChatType"] ~= nil then
RegenMob["MobChatTime"] = CurTime + cRandomInt( RegenMob["MobChatType"]["NormalChatTime"]["Min"], RegenMob["MobChatType"]["NormalChatTime"]["Max"] )
end
RegenMob["MapMarkType"] = MapMarkTypeTable[WaveMobTypeTable[CurWaveData["WaveMobType"]]["MapMarkType"]]
RegenMob["Damage"] = CurMobSettingData["Demage"]
cSetNPCParam( RegenMob["Handle"], "MaxHP", CurMobSettingData["HP"] )
cSetNPCParam( RegenMob["Handle"], "HP", CurMobSettingData["HP"] )
cSetNPCParam( RegenMob["Handle"], "RunSpeed", CurMobSettingData["Speed"] )
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["Wave"][index]["RegenCnt"] = Var["Wave"][index]["RegenCnt"] + 1
Var["Wave"][index]["WaveTime"] = cCurrentSecond()
end
end
end
-- 다이얼 로그 및 공지
if WarN_Dialog( Var, Var["WaveDialog"] ) == nil then
Var["WaveDialog"] = nil
end
if Var["WaveAnnounce"] ~= nil then
cScriptMessage( Var["MapIndex"], AnnounceInfo[Var["WaveAnnounce"]] )
Var["WaveAnnounce"] = nil
end
end
function WarN_Dialog( Var, Dialog )
cExecCheck( "WarN_Dialog" )
if Var == nil or Dialog == nil then
return nil
end
local CurSec = cCurrentSecond()
if Var["Dialog"] == nil then
Var["Dialog"] = Dialog
Var["DialogStep"] = 1
Var["DialogTime"] = CurSec
end
if Var["DialogStep"] <= #Var["Dialog"] then
if Var["DialogTime"] + Var["Dialog"][Var["DialogStep"]]["Delay"] > CurSec then
return Var["DialogStep"]
end
cMobDialog_FileName( Var["MapIndex"],
Var["Dialog"][Var["DialogStep"]]["Facecut"],
Var["Dialog"][Var["DialogStep"]]["FileName"],
Var["Dialog"][Var["DialogStep"]]["Index"] )
Var["DialogTime"] = CurSec
Var["DialogStep"] = Var["DialogStep"] + 1
return Var["DialogStep"]
end
Var["Dialog"] = nil
Var["DialogStep"] = nil
Var["DialogTime"] = nil
return nil
end
function WarN_Notice( Var, Notice )
cExecCheck( "WarN_Notice" )
if Var == nil or Notice == nil then
return nil
end
local CurSec = cCurrentSecond()
if Var["Notice"] == nil then
Var["Notice"] = Notice
Var["NoticeStep"] = 1
Var["NoticeTime"] = CurSec
end
if Var["NoticeStep"] <= #Var["Notice"] then
if Var["Noticed"] == nil then
cNotice( Var["MapIndex"], Var["Notice"][Var["NoticeStep"]]["FileName"], Var["Notice"][Var["NoticeStep"]]["Index"] )
Var["Noticed"] = 1
end
if Var["NoticeTime"] + Var["Notice"][Var["NoticeStep"]]["WaitTime"] > CurSec then
return Var["NoticeStep"]
end
Var["NoticeTime"] = CurSec
Var["NoticeStep"] = Var["NoticeStep"] + 1
Var["Noticed"] = nil
return Var["NoticeStep"]
end
Var["Notice"] = nil
Var["NoticeStep"] = nil
Var["NoticeTime"] = nil
Var["Noticed"] = nil
return nil
end