423 lines
9.3 KiB
Lua
423 lines
9.3 KiB
Lua
|
--------------------------------------------------------------------------------
|
|||
|
-- Routine --
|
|||
|
--------------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
function DummyRoutineFunc()
|
|||
|
cExecCheck "DummyRoutineFunc"
|
|||
|
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- MapLogin Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function PlayerMapLogin( MapIndex, Handle )
|
|||
|
cExecCheck "PlayerMapLogin"
|
|||
|
|
|||
|
|
|||
|
local CurSec = cCurrentSecond()
|
|||
|
local TeamType = cGetKQTeamType( Handle )
|
|||
|
local CharNo = cGetCharNo( Handle )
|
|||
|
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : Var nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if CurSec == nil
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : CurSec nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType == nil
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : TeamType nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType ~= KQ_TEAM["RED"] and TeamType ~= KQ_TEAM["BLUE"]
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : Invalid TeamType "..TeamType )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if CharNo == nil
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : CharNo nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if Var["Team"] == nil
|
|||
|
then
|
|||
|
ErrorLog( "PlayerMapLogin : Var[\"Team\"] nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD>
|
|||
|
for i = 1, #LoginResetAbstate
|
|||
|
do
|
|||
|
cResetAbstate( Handle, LoginResetAbstate[ i ] )
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>, <20><><EFBFBD><EFBFBD>
|
|||
|
local PlayerInfo = Player_Get( Var, CharNo )
|
|||
|
if PlayerInfo == nil
|
|||
|
then
|
|||
|
|
|||
|
-- <20>ű<EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
|||
|
Player_Insert( Var, CharNo, Handle, TeamType )
|
|||
|
|
|||
|
else
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
PlayerInfo["Handle"] = Handle
|
|||
|
PlayerInfo["IsInMap"] = true
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD><D3B8><EFBFBD> ȭ<><C8AD>ǥ <20><><EFBFBD><EFBFBD><EFBFBD>̻<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
for i = 1, #TeamUniform[ TeamType ]
|
|||
|
do
|
|||
|
cViewSlotEquip( Handle, TeamUniform[ TeamType ][ i ] )
|
|||
|
cSetAbstate( Handle, TeamAbstate[ TeamType ]["Index"], TeamAbstate[ TeamType ]["Str"], TeamAbstate[ TeamType ]["KeepTime"], Handle )
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20>̵<EFBFBD> <20>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
cStaticWalkSpeed( Handle, true, 33 )
|
|||
|
cStaticRunSpeed( Handle, true, 127 )
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴϸ<C6B4> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
if Var["RoundEndTime"] <= 0
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>, Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
local RedTeamInfo = Var["Team"][ KQ_TEAM["RED"] ]
|
|||
|
local BlueTeamInfo = Var["Team"][ KQ_TEAM["BLUE"] ]
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if PlayerInfo ~= nil
|
|||
|
then
|
|||
|
if PlayerInfo["IsOut"] == false
|
|||
|
then
|
|||
|
Var["Team"][ TeamType ]["Score"] = Var["Team"][ TeamType ]["Score"] + 1
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>, <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD>
|
|||
|
cScoreBoard( Handle, true, Var["Round"], RedTeamInfo["RoundResultCount"]["Win"], RedTeamInfo["Score"], BlueTeamInfo["RoundResultCount"]["Win"], BlueTeamInfo["Score"] )
|
|||
|
cTimer_Obj( Handle, (Var["RoundEndTime"] - CurSec) )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- ServantSummon Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function ServantSummon( MapIndex, ServantHandle, ServantIndex, MasterHandle )
|
|||
|
cExecCheck "ServantSummon"
|
|||
|
|
|||
|
|
|||
|
if ServantIndex == Cake["MobIndex"]
|
|||
|
then
|
|||
|
|
|||
|
cSetAIScript ( MainLuaScriptPath, ServantHandle )
|
|||
|
cAIScriptFunc( ServantHandle, "Entrance", "Cake_Entrance" )
|
|||
|
cAIScriptFunc( ServantHandle, "NPCAction", "Cake_NPCAction" )
|
|||
|
|
|||
|
elseif ServantIndex == DrinkCannon["MobIndex"]
|
|||
|
then
|
|||
|
|
|||
|
cSetAIScript ( MainLuaScriptPath, ServantHandle )
|
|||
|
cAIScriptFunc( ServantHandle, "Entrance", "DrinkCannon_Entrance" )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- Cake_Explosion Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function Cake_Explosion( Var, NPCHandle )
|
|||
|
cExecCheck "Cake_Explosion"
|
|||
|
|
|||
|
|
|||
|
local CurSec = cCurrentSecond()
|
|||
|
local TeamType = cGetKQTeamType( NPCHandle )
|
|||
|
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : Var nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if NPCHandle == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : Var nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if CurSec == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : CurSec nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : TeamType nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType ~= KQ_TEAM["RED"] and TeamType ~= KQ_TEAM["BLUE"]
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : Invalid TeamType "..TeamType )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20>ƹ<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>
|
|||
|
if Var["RoundEndTime"] > 0
|
|||
|
then
|
|||
|
|
|||
|
-- <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD><C5B8><EFBFBD> Ȯ<><C8AE>
|
|||
|
local PlayerList = Var["Player"]
|
|||
|
if PlayerList == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Explosion : PlayerList nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
for i = 1, #PlayerList
|
|||
|
do
|
|||
|
local PlayerInfo = PlayerList[ i ]
|
|||
|
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
if PlayerInfo["IsInMap"] == true and -- <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|||
|
PlayerInfo["TeamType"] == OpposingTeamInfo[ TeamType ] and -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
PlayerInfo["PrisonLinkToWaitTime"] == 0 and -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
PlayerInfo["IsOut"] == false and -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۿ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
|
|||
|
cDistanceSquar( NPCHandle, PlayerInfo["Handle"] ) <= ( Cake["Dist"] * Cake["Dist"] ) -- <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|||
|
then
|
|||
|
|
|||
|
local Player_x, Player_y = cObjectLocate( PlayerInfo["Handle"] )
|
|||
|
|
|||
|
if Player_x ~= nil and Player_y ~= nil
|
|||
|
then
|
|||
|
|
|||
|
if cFindAttackBlockLocate( NPCHandle, Player_x, Player_y ) == true -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
then
|
|||
|
|
|||
|
PlayerInfo["CakeHandle"] = NPCHandle
|
|||
|
PlayerInfo["CakeAbstateTime"] = CurSec + Cake["SetAbstateWait"]
|
|||
|
PlayerInfo["PrisonLinkToWaitTime"] = CurSec + Cake["LinktoWait"]
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
cSkillBlast( NPCHandle, NPCHandle, Cake["SkillIndex"] )
|
|||
|
cVanishReserv( NPCHandle, 3 )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- Cake_Entrance Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function Cake_Entrance( Handle, MapIndex )
|
|||
|
cExecCheck "Cake_Entrance"
|
|||
|
|
|||
|
|
|||
|
-- <20><EFBFBD><D7BE><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectDead( Handle ) ~= nil
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD>
|
|||
|
if cIsObjectAlreadyDead( Handle ) == true
|
|||
|
then
|
|||
|
cAIScriptSet( Handle )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
--if cGetMoveState( Handle ) ~= 0
|
|||
|
local MoveState, MoveStateTime, MoveStateSetTime = cGetMoveState( Handle )
|
|||
|
if MoveState ~= 0 or MoveStateSetTime == 0
|
|||
|
then
|
|||
|
return ReturnAI["CPP"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_Entrance : Var nil" )
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
Cake_Explosion( Var, Handle )
|
|||
|
|
|||
|
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- Cake_NPCAction Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function Cake_NPCAction( MapIndex, NPCHandle, PlyHandle, PlyCharNo )
|
|||
|
cExecCheck "Cake_NPCAction"
|
|||
|
|
|||
|
|
|||
|
local TeamType = cGetKQTeamType( NPCHandle )
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
local MasterHandle = cGetMaster( NPCHandle )
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_NPCAction : Var nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType == nil
|
|||
|
then
|
|||
|
ErrorLog( "Cake_NPCAction : TeamType nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType ~= KQ_TEAM["RED"] and TeamType ~= KQ_TEAM["BLUE"]
|
|||
|
then
|
|||
|
ErrorLog( "Cake_NPCAction : Invalid TeamType "..TeamType )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
if MasterHandle == PlyHandle
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- NPC<50>̵<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
cMoveStop( NPCHandle )
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD>
|
|||
|
Cake_Explosion( Var, NPCHandle )
|
|||
|
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
----------------------------------------------------------------------
|
|||
|
-- DrinkCannon_Entrance Function
|
|||
|
----------------------------------------------------------------------
|
|||
|
function DrinkCannon_Entrance( Handle, MapIndex )
|
|||
|
cExecCheck "DrinkCannon_Entrance"
|
|||
|
|
|||
|
local CurSec = cCurrentSecond()
|
|||
|
local TeamType = cGetKQTeamType( Handle )
|
|||
|
local Var = InstanceField[ MapIndex ]
|
|||
|
|
|||
|
|
|||
|
if Var == nil
|
|||
|
then
|
|||
|
ErrorLog( "DrinkCannon_Entrance : Var nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD≯<EFBFBD> <20>ƹ<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
|||
|
if Var["RoundEndTime"] <= 0
|
|||
|
then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
if CurSec == nil
|
|||
|
then
|
|||
|
ErrorLog( "DrinkCannon_Entrance : CurSec nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType == nil
|
|||
|
then
|
|||
|
ErrorLog( "DrinkCannon_Entrance : TeamType nil" )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
if TeamType ~= KQ_TEAM["RED"] and TeamType ~= KQ_TEAM["BLUE"]
|
|||
|
then
|
|||
|
ErrorLog( "DrinkCannon_Entrance : Invalid TeamType "..TeamType )
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- <20>÷<EFBFBD><C3B7>̾<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD><C5B8><EFBFBD> Ȯ<><C8AE>
|
|||
|
local PlayerList = Var["Player"]
|
|||
|
if PlayerList == nil
|
|||
|
then
|
|||
|
ErrorLog( "DrinkCannon_Entrance : PlayerList nil" )
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
for i = 1, #PlayerList
|
|||
|
do
|
|||
|
local PlayerInfo = PlayerList[ i ]
|
|||
|
|
|||
|
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
if PlayerInfo["IsInMap"] == true and -- <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|||
|
PlayerInfo["TeamType"] == OpposingTeamInfo[ TeamType ] and -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
PlayerInfo["PrisonLinkToWaitTime"] == 0 and -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
PlayerInfo["IsOut"] == false and -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۿ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
|
|||
|
cDistanceSquar( Handle, PlayerInfo["Handle"] ) <= ( DrinkCannon["Dist"] * DrinkCannon["Dist"] ) -- <20><><EFBFBD><EFBFBD> <20>ȿ<EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD>
|
|||
|
then
|
|||
|
|
|||
|
local Player_x, Player_y = cObjectLocate( PlayerInfo["Handle"] )
|
|||
|
|
|||
|
if Player_x ~= nil and Player_y ~= nil
|
|||
|
then
|
|||
|
|
|||
|
if cFindAttackBlockLocate( Handle, Player_x, Player_y ) == true -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
|||
|
then
|
|||
|
|
|||
|
cSetAbstate( PlayerInfo["Handle"], DrinkCannon["Abstate"]["Index"], 1, DrinkCannon["Abstate"]["KeepTime"], Handle )
|
|||
|
PlayerInfo["PrisonLinkToWaitTime"] = CurSec + DrinkCannon["LinktoWait"]
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
cNPCVanish( Handle )
|
|||
|
|
|||
|
|
|||
|
return ReturnAI["END"]
|
|||
|
end
|