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.
 
 

444 lines
9.5 KiB

--------------------------------------------------------------------------------
-- Arena Progress Func --
--------------------------------------------------------------------------------
function InitSoccer( Var )
cExecCheck "InitSoccer"
if Var == nil
then
ErrorLog( "InitSoccer : Var nil" )
return
end
-- 플레이어의 첫 로그인을 기다린다.
if #Var["Player"] < 1
then
if Var["InitialSec"] + WAIT_PLAYER_MAP_LOGIN_SEC_MAX <= cCurrentSecond()
then
cEndOfKingdomQuest( Var[ "MapIndex" ] )
return
end
return
end
-- 투명한 Door를 소환해 DoorBlock 관려가 필요함.
local RegenInvisibleDoor = RegenInfo["InvisibleDoor"]
Var["InvisibleDoor"] = cDoorBuild( Var["MapIndex"], RegenInvisibleDoor["Index"], RegenInvisibleDoor["X"], RegenInvisibleDoor["Y"], RegenInvisibleDoor["Dir"], 1000 )
if Var["InvisibleDoor"] == nil
then
GoToFail( Var, "Invisible door regen fail" )
return
end
cDoorAction( Var["InvisibleDoor"], InvisibleDoor["BlockName"], "open" )
-- 축구공 소환
SoccerBall_Regen( Var, RegenInfo["SoccerBall"]["X"], RegenInfo["SoccerBall"]["Y"], RegenInfo["SoccerBall"]["Dir"] )
cDoorAction( Var["InvisibleDoor"], InvisibleDoor["BlockName"], "close" )
-- 심판 소환
local RegenReferee = RegenInfo["Referee"]
local RefereeHandle
RefereeHandle = cMobRegen_XY( Var["MapIndex"], RegenReferee["Index"], RegenReferee["X"], RegenReferee["Y"], RegenReferee["Dir"] )
if RefereeHandle == nil
then
GoToFail( Var, "Referee regen fail" )
return
end
Var["Referee"]["Handle"] = RefereeHandle
Var["Referee"]["FollowCheckTime"] = 0
Var["Referee"]["RoutineCheckTime"] = 0
cSetAIScript ( MainLuaScriptPath, RefereeHandle )
cAIScriptFunc( RefereeHandle, "Entrance", "Referee_Routine" )
-- 골키퍼 소환
for i = 1, #RegenInfo["GoalKeeper"]
do
local RegenKeeper = RegenInfo["GoalKeeper"][ i ]
local KeeperHandle
KeeperHandle = cMobRegen_XY( Var["MapIndex"], RegenKeeper["Index"], RegenKeeper["X"], RegenKeeper["Y"], RegenKeeper["Dir"] )
if KeeperHandle == nil
then
GoToFail( Var, "Goalkeeper regen fail" )
return
end
Var["Keeper"][ i ] = {}
Var["Keeper"][ i ]["Handle"] = KeeperHandle
Var["Keeper"][ i ]["TeamType"] = RegenKeeper["TeamType"]
Var["Keeper"][ i ]["RoutineCheckTime"] = 0
Var["Keeper"][ i ]["MoveStep"] = 1
Var["Keeper"][ i ]["MoveBack"] = false
cSetAIScript ( MainLuaScriptPath, KeeperHandle )
cAIScriptFunc( KeeperHandle, "Entrance", "Keeper_Routine" )
end
-- 관중 소환
for i = 1, #RegenInfo["Spectator"]
do
cGroupRegenInstance( Var["MapIndex"], RegenInfo["Spectator"][i] )
end
-- 다음 단계 설정
Var["StepFunc"] = StartWait
end
function StartWait( Var )
cExecCheck "StartWait"
if Var == nil
then
ErrorLog( "StartWait : Var nil" )
return
end
-- 스텝 초기화
local StartWaitInfo = Var["StartWait"]
if StartWaitInfo == nil
then
Var["StartWait"] = {}
StartWaitInfo = Var["StartWait"]
StartWaitInfo["NextSetpWaitTime"] = Var["CurSec"] + DelayTime["StartWait"]
StartWaitInfo["DialogTime"] = Var["CurSec"] + DelayTime["StartDialogInterval"]
StartWaitInfo["DialogStep"] = 1
end
-- 다이얼로그 출력
if StartWaitInfo["DialogTime"] ~= nil
then
if StartWaitInfo["DialogTime"] <= Var["CurSec"]
then
local DialogStep = StartWaitInfo["DialogStep"]
local MaxDialogStep = #Referee_Chat["StartDialog"]
if DialogStep <= MaxDialogStep
then
cScriptMsg( Var["MapIndex"], nil, Referee_Chat["StartDialog"][ DialogStep ] )
StartWaitInfo["DialogTime"] = Var["CurSec"] + DelayTime["StartDialogInterval"]
StartWaitInfo["DialogStep"] = DialogStep + 1
end
if StartWaitInfo["DialogStep"] > MaxDialogStep
then
StartWaitInfo["DialogTime"] = nil
StartWaitInfo["DialogStep"] = nil
end
end
end
-- 다음 단계 진행
if StartWaitInfo["NextSetpWaitTime"] <= Var["CurSec"]
then
Var["StepFunc"] = SoccerProcess
Var["StartWait"] = nil
StartWaitInfo = nil
end
end
function SoccerProcess( Var )
cExecCheck "SoccerProcess"
if Var == nil
then
ErrorLog( "SoccerProcess : Var nil" )
return
end
-- 스탭 초기화
if Var["KQLimitTime"] == 0
then
Var["KQLimitTime"] = Var[ "CurSec"] + DelayTime["LimitTime"]
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["Start"] )
cScoreInfo_AllInMap( Var["MapIndex"], KQ_TEAM["MAX"], Var["Team"][ KQ_TEAM["RED"] ], Var["Team"][ KQ_TEAM["BLUE"] ] )
cTimer( Var["MapIndex"], DelayTime["LimitTime"] )
end
-- 다음 단계 진행
if Var["KQLimitTime"] <= Var["CurSec"]
then
Var["StepFunc"] = SoccerEnd
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["End"] )
cScriptMsg( Var["MapIndex"], Var["Referee"]["Handle"], Referee_Chat["TimeOut"] )
return
end
-- 플레이어 관리자
if Player_Manager( Var ) == false
then
-- 어느 한쪽 팀이 전부 로그아웃되었을 경우
Var["Team"][ KQ_TEAM["RED"] ] = 0
Var["Team"][ KQ_TEAM["BLUE"] ] = 0
Var["StepFunc"] = SoccerEnd
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["End"] )
cScriptMsg( Var["MapIndex"], Var["Referee"]["Handle"], Referee_Chat["TimeOut"] )
return
end
BuffBox_Manager( Var )
SoccerBall_Manager( Var )
end
-- 경기 종료
function SoccerEnd( Var )
cExecCheck "SoccerEnd"
if Var == nil
then
ErrorLog( "SoccerEnd : Var nil" )
return
end
local TeamInfo = Var["Team"]
if TeamInfo == nil
then
ErrorLog( "SoccerEnd : Var[\"Team\"] nil" )
return
end
local PlayerList = Var["Player"]
if PlayerList == nil
then
ErrorLog( "SoccerEnd : PlayerList nil" )
return
end
Var["KQLimitTime"] = 0
cTimer( Var["MapIndex"], 0 )
local TeamReward = {}
local WinnerTeam = nil
-- 레드 팀 우승
if TeamInfo[ KQ_TEAM["RED"] ] > TeamInfo[ KQ_TEAM["BLUE"] ]
then
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["Win"][ KQ_TEAM["RED"] ] )
TeamReward[ KQ_TEAM["RED"] ] = SoccerResult["WIN"]
TeamReward[ KQ_TEAM["BLUE"] ] = SoccerResult["LOSE"]
WinnerTeam = KQ_TEAM["RED"]
-- 블루 팀 우승
elseif TeamInfo[ KQ_TEAM["RED"] ] < TeamInfo[ KQ_TEAM["BLUE"] ]
then
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["Win"][ KQ_TEAM["BLUE"] ] )
TeamReward[ KQ_TEAM["RED"] ] = SoccerResult["LOSE"]
TeamReward[ KQ_TEAM["BLUE"] ] = SoccerResult["WIN"]
WinnerTeam = KQ_TEAM["BLUE"]
-- 동점
else
cScriptMsg( Var["MapIndex"], nil, NoticeInfo["Draw"] )
TeamReward[ KQ_TEAM["RED"] ] = SoccerResult["DRAW"]
TeamReward[ KQ_TEAM["BLUE"] ] = SoccerResult["DRAW"]
end
-- 보상 지급
for i = 1, #PlayerList
do
local PlayerInfo = PlayerList[ i ]
local RewardInfo = TeamReward[ PlayerInfo["TeamType"] ]
if PlayerInfo["IsInMap"] == true and
RewardInfo ~= nil
then
cEffectMsg( PlayerInfo["Handle"], RewardInfo["EffectMsg"] )
cKQRewardIndex( PlayerInfo["Handle"], RewardInfo["RewardIndex"] )
cCharTitleAddValue( PlayerInfo["Handle"], SoccerResult["SoccerPlayerTitle"], 1 )
end
end
-- 최고 득점자 타이틀
if WinnerTeam ~= nil
then
local TopScore = 0
-- 가장 높은 점수 찾기
for i = 1, #PlayerList
do
local PlayerInfo = PlayerList[ i ]
if PlayerInfo["IsInMap"] == true
then
if TopScore < PlayerInfo["Goal"]
then
TopScore = PlayerInfo["Goal"]
end
end
end
if TopScore ~= 0
then
for i = 1, #PlayerList
do
local PlayerInfo = PlayerList[ i ]
if PlayerInfo["IsInMap"] == true
then
if TopScore == PlayerInfo["Goal"]
then
cCharTitleAddValue( PlayerInfo["Handle"], SoccerResult["SoccerTopScorerTitle"], 1 )
end
end
end
end
end
-- 도어 삭제
cNPCVanish( Var["InvisibleDoor"] )
-- 축구공 삭제
if Var["SoccerBall"] ~= nil
then
cNPCVanish( Var["SoccerBall"] )
end
-- 심판 삭제
if Var["Referee"] ~= nil
then
cNPCVanish( Var["Referee"]["Handle"] )
end
-- 골키퍼 삭제
if Var["Keeper"] ~= nil
then
for i = 1, #Var["Keeper"]
do
if Var["Keeper"][ i ]["Handle"] ~= nil
then
cNPCVanish( Var["Keeper"][ i ]["Handle"] )
end
end
end
-- 버프박스 삭제
for i = 1,#RegenInfo["BuffBox"]
do
cVanishAll( Var["MapIndex"], RegenInfo["BuffBox"][ i ]["Index"] )
end
-- 다음 단계 설정
Var["StepFunc"] = ReturnToHome
end
-- 귀환
function ReturnToHome( Var )
cExecCheck "ReturnToHome"
if Var == nil
then
ErrorLog( "ReturnToHome : Var nil" )
return
end
-- 스탭 초기화
if Var["ReturnToHome"] == nil
then
DebugLog( "Start ReturnToHome" )
Var["ReturnToHome"] = {}
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"]
Var["ReturnToHome"]["ReturnStepNo"] = 1
end
-- Return : return notice substep
if Var["ReturnToHome"]["ReturnStepNo"] <= #NoticeInfo["KQReturn"]
then
if Var["ReturnToHome"]["ReturnStepSec"] <= Var["CurSec"]
then
-- Notice of Escape
if NoticeInfo["KQReturn"][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] ~= nil
then
cNotice( Var["MapIndex"], NoticeInfo["KQReturn"]["ScriptFileName"], NoticeInfo["KQReturn"][ Var["ReturnToHome"]["ReturnStepNo"] ]["Index"] )
end
-- Go To Next Notice
Var["ReturnToHome"]["ReturnStepNo"] = Var["ReturnToHome"]["ReturnStepNo"] + 1
Var["ReturnToHome"]["ReturnStepSec"] = Var["CurSec"] + DelayTime["GapKQReturnNotice"]
end
return
end
-- Return : linkto substep
if Var["ReturnToHome"]["ReturnStepNo"] > #NoticeInfo["KQReturn"]
then
if Var["ReturnToHome"]["ReturnStepSec"] <= Var["CurSec"]
then
--Finish_KQ
cLinkToAll( Var["MapIndex"], LinkInfo["ReturnMap"]["MapIndex"], LinkInfo["ReturnMap"]["x"], LinkInfo["ReturnMap"]["y"] )
cVanishAll();
Var["ReturnToHome"] = nil
if cEndOfKingdomQuest( Var["MapIndex"] ) == nil
then
ErrorLog( "ReturnToHome::Function cEndOfKingdomQuest failed" )
end
end
return
end
end