252 lines
7.9 KiB
Plaintext
252 lines
7.9 KiB
Plaintext
local campType_Blue = 1
|
|
local campType_Red = 2
|
|
|
|
--复活超时
|
|
defaultHandlerActorReliveTimeOut = function (pActor,args)
|
|
AutoRelive(pActor)
|
|
end
|
|
|
|
--超时自动复活
|
|
function AutoRelive(pActor)
|
|
if Actor.getIntProperty(pActor,PROP_CREATURE_HP) ~= 0 then
|
|
return
|
|
end
|
|
if Actor.hasMapAreaAttri(pActor, aaSafeResurrection) then --限制10秒复活
|
|
if(System.getCurrMiniTime() < Actor.getDeadTimeRecent(pActor) + 10)then
|
|
--return
|
|
end
|
|
end
|
|
|
|
--获取当前副本复活配置
|
|
local pFuben = Actor.getFubenPrt(pActor)
|
|
local fbId = Fuben.getFubenIdByPtr(pFuben)
|
|
local ConfId = (StaticFubens[fbId] and StaticFubens[fbId].reliveConfId) or 1
|
|
local ReliveConf = ReliveConfig[ConfId] or ReliveConfig[1]
|
|
|
|
--回血回蓝
|
|
local maxhp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXHP)
|
|
Actor.changeHp(pActor, maxhp * ((ReliveConf.RecoverRatio.hp or 100)/100))
|
|
local maxmp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXMP)
|
|
Actor.changeMp(pActor, maxmp * ((ReliveConf.RecoverRatio.mp or 100)/100))
|
|
|
|
-- 静态场景安全区复活
|
|
if ReliveConf.autoType == 1 then
|
|
if Fuben.isFuben(pFuben) then
|
|
Actor.exitFubenAndBackCity(pActor)
|
|
else
|
|
Actor.relive(pActor)
|
|
end
|
|
-- 副本场景安全区复活
|
|
elseif ReliveConf.autoType == 2 then
|
|
Actor.relive(pActor)
|
|
-- 本图随机复活
|
|
elseif ReliveConf.autoType == 3 then
|
|
System.telportRandPos(pActor)
|
|
-- 原地复活
|
|
elseif ReliveConf.autoType == 4 then
|
|
-- 固定点复活
|
|
elseif ReliveConf.autoType == 5 then
|
|
if ReliveConf.FixedPosi then
|
|
local sceneId = Actor.getSceneId(pActor)
|
|
Actor.enterScene(pActor, sceneId, ReliveConf.FixedPosi.x, ReliveConf.FixedPosi.y)
|
|
else
|
|
Actor.relive(pActor)
|
|
end
|
|
--本方阵营复活
|
|
elseif ReliveConf.autoType == 6 then
|
|
local cacheData = FubenDispatcher.GetCacheData(pFuben)
|
|
if cacheData.atvId ~= nil then --全局配置里的复活类型和活动里重新分配阵营配置类型一致。
|
|
local ActorData = ActivityDispatcher.GetActorData(pActor,cacheData.atvId)
|
|
if ActorData.curCamp ==nil then return end
|
|
if ActorData.curCamp == campType_Blue then
|
|
if ReliveConf.camprevive.nEnterRangeA ~= nil then
|
|
Actor.enterScene(pActor,unpack(ReliveConf.camprevive.nEnterRangeA))
|
|
end
|
|
else
|
|
|
|
if ReliveConf.camprevive.nEnterRangeB ~= nil then
|
|
Actor.enterScene(pActor,unpack(ReliveConf.camprevive.nEnterRangeB))
|
|
end
|
|
end
|
|
else
|
|
Actor.relive(pActor)
|
|
end
|
|
end
|
|
|
|
--清除复活倒计时
|
|
Actor.clearReliveTimeOut(pActor)
|
|
Actor.onRelive(pActor)
|
|
--Actor.removeState(pActor, esStateDeath)
|
|
--Actor.updateActorEntityProp(pActor)
|
|
TranRedActorToRedSceen(pActor) --一定要放在复活的后面,先退出副本再进监狱
|
|
end
|
|
|
|
local ReliveType =
|
|
{
|
|
PlaceRelive = 1, --原地复活
|
|
SafeRelive = 2, -- 安全复活
|
|
}
|
|
|
|
local ReliveConsumeType =
|
|
{
|
|
item = 1, --消耗道具
|
|
yb = 2, --消耗元宝
|
|
}
|
|
|
|
local KillerType =
|
|
{
|
|
player = 0, --玩家
|
|
monster = 1, --怪物
|
|
other = 2, --其他
|
|
}
|
|
|
|
--点击确定 复活类型 1原地复活 2安全复活
|
|
function GoReliveFunc(pActor, type)
|
|
|
|
if Actor.hasMapAreaAttri(pActor, aaNotHereRelive) then --要判断是否禁止原地复活
|
|
safeResurrection(pActor)
|
|
end
|
|
|
|
local maxhp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXHP)
|
|
Actor.changeHp(pActor,maxhp)
|
|
|
|
local maxmp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXMP)
|
|
Actor.changeMp(pActor,maxmp)
|
|
|
|
Actor.clearReliveTimeOut(pActor)
|
|
Actor.onRelive(pActor)
|
|
|
|
--清除击杀者信息
|
|
ClearKillerData(pActor)
|
|
|
|
end
|
|
|
|
--检测复活消耗 复活类型 1消耗道具 2消耗元宝
|
|
function CheckReliveFunc(pActor, nType)
|
|
local nType = tonumber(nType)
|
|
if Actor.getIntProperty(pActor,PROP_CREATURE_HP) == 0 then
|
|
if nType == ReliveConsumeType.item then
|
|
--if(IsfreePlaceRelive(pActor) == false)then --免费复活
|
|
if Actor.getItemCount(pActor,ReliveConfig.item.id,-1,-1) < ReliveConfig.item.count
|
|
or Actor.removeItem(pActor,ReliveConfig.item.id,ReliveConfig.item.count,-1,-1,-1,OldLang.Log.relive0001, ReliveConfig.logId) < ReliveConfig.item.count then
|
|
Actor.messageBox(pActor,0,0,OldLang.Script.relive0001,OldLang.Script.relive0002.."/buyResurrecStone",OldLang.Script.relive0003.."/cancelFunc",nil)
|
|
return
|
|
end
|
|
--end
|
|
elseif nType == ReliveConsumeType.yb then
|
|
--if(IsfreePlaceRelive(pActor) == false)then --免费复活
|
|
if (Actor.getIntProperty( pActor, PROP_ACTOR_YUANBAO ) < ReliveConfig.yuanbao)
|
|
or Actor.changeMoney(pActor, mtYuanbao, -ReliveConfig.yuanbao, ReliveConfig.logId, OldLang.Log.relive0002) == false then
|
|
return
|
|
end
|
|
--end
|
|
end
|
|
GoReliveFunc(pActor, nType)
|
|
end
|
|
end
|
|
|
|
--红名传送到红名村
|
|
function TranRedActorToRedSceen(sysarg,bFlag)
|
|
local pkValue = Actor.getIntProperty(sysarg,PROP_ACTOR_PK_VALUE)
|
|
if pkValue < PkConfig.redName then --红名
|
|
return false
|
|
end
|
|
local sceneName = Fuben.getSceneNameById(PkConfig.nSceenId)
|
|
Actor.enterScene(sysarg,unpack(PkConfig.nEnterRange))
|
|
--System.telportSceneDefaultPoint(sysarg, sceneName)
|
|
if bFlag == true then
|
|
Actor.sendTipmsg(sysarg,Lang.Activity.t00038,2+128)
|
|
end
|
|
return true
|
|
end
|
|
|
|
--原地复活
|
|
function OnPlaceRelive(pActor)
|
|
|
|
if Actor.hasMapAreaAttri(pActor, aaNotHereRelive) then --要判断是否禁止原地复活
|
|
Actor.sendTipmsg(pActor, OldLang.Script.relive0005, ttTipmsgWindow)
|
|
local nLiveTime = Actor.getReliveTimeOut(pActor)
|
|
return
|
|
end
|
|
|
|
local liveTime = Actor.getReliveTimeOut(pActor)
|
|
local level = Actor.getIntProperty(pActor,PROP_CREATURE_LEVEL)
|
|
if level < ReliveConfig.limitLevel then
|
|
local tips = string.format(OldLang.Script.relive0006, ReliveConfig.limitLevel)
|
|
Actor.sendTipmsg(pActor,tips,ttTipmsgWindow)
|
|
return
|
|
end
|
|
|
|
local ItemCount = Actor.getItemCount(pActor,ReliveConfig.item.id,-1,-1)
|
|
local nMoneyCount = Actor.getIntProperty( pActor, PROP_ACTOR_YUANBAO )
|
|
--itemid为回魂丹的ID
|
|
if (ItemCount < ReliveConfig.item.count and nMoneyCount < ReliveConfig.yuanbao) then
|
|
local itemName = Item.getItemName(ReliveConfig.item.id) or " "
|
|
local tips = string.format(OldLang.Script.relive0004, itemName, ReliveConfig.yuanbao)
|
|
Actor.sendTipmsg(pActor,tips,ttTipmsgWindow)
|
|
return
|
|
else
|
|
if Actor.getItemCount(pActor,ReliveConfig.item.id,-1,-1) >= ReliveConfig.item.count then
|
|
CheckReliveFunc(pActor, ReliveConsumeType.item)
|
|
else
|
|
CheckReliveFunc(pActor, ReliveConsumeType.yb)
|
|
end
|
|
end
|
|
local svar = Actor.getStaticVar(pActor)
|
|
if(svar.freePlaceReliveFlag == nil)then
|
|
svar.freePlaceReliveFlag = 0
|
|
end
|
|
svar.freePlaceReliveFlag = svar.freePlaceReliveFlag + 1
|
|
end
|
|
|
|
--安全复活
|
|
function safeResurrection(pActor)
|
|
if Actor.getIntProperty(pActor,PROP_CREATURE_HP) ~= 0 then
|
|
return
|
|
end
|
|
if Actor.hasMapAreaAttri(pActor, aaSafeResurrection) then --限制10秒复活
|
|
if(System.getCurrMiniTime() < Actor.getDeadTimeRecent(pActor) + 10)then
|
|
--return
|
|
end
|
|
end
|
|
--回血回蓝
|
|
local maxhp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXHP)
|
|
Actor.changeHp(pActor, maxhp * ReliveConfig.safeRate)
|
|
|
|
local maxmp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXMP)
|
|
Actor.changeMp(pActor, maxmp * ReliveConfig.safeRate)
|
|
|
|
local bInCrossBattle = false
|
|
--在跨服中的处理
|
|
if System.isCommonServer() == true then
|
|
|
|
end
|
|
local fbid = Actor.getFubenId(pActor)
|
|
local nSceneId = Actor.getSceneId(pActor)
|
|
|
|
--复活
|
|
Actor.relive(pActor)
|
|
|
|
--清除复活倒计时
|
|
Actor.clearReliveTimeOut(pActor)
|
|
ClearKillerData(pActor) --清除击杀者信息
|
|
|
|
TranRedActorToRedSceen(pActor) --一定要放在复活的后面,先退出副本再进监狱
|
|
end
|
|
|
|
--清除击杀者信息
|
|
function ClearKillerData(pActor)
|
|
|
|
local svar = Actor.getStaticVar(pActor)
|
|
local data = svar.killerData --被击杀者记录被杀信息
|
|
if not data then
|
|
svar.killerData = {}
|
|
data = svar.killerData
|
|
end
|
|
data[1] = nil --击杀者等级
|
|
data[2] = nil --击杀者阵营ID
|
|
data[3] = nil --击杀者名字
|
|
data[4] = nil --击杀者类型
|
|
data[5] = nil --被击杀者掉落功勋
|
|
end
|