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