This commit is contained in:
aixianling
2024-12-16 13:51:31 +08:00
commit 00ee9dd8ea
1884 changed files with 817815 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
--被他人击杀 杀人者指针 损失经验
defaultHandlerActorBeKilled = function (pActor,pKiller,nExploit)
end

View File

@@ -0,0 +1,5 @@
--改名事件
defaultHandleChangeNameOp = function (pActor, oldName, newName)
end

View File

@@ -0,0 +1,4 @@
--消费元宝事件 消耗元宝数量
defaultHandleActorConsumeGameGold = function (pActor, nConsumeCount)
end

View File

@@ -0,0 +1,70 @@
local defReliveConfId = StaticFubens[0].reliveConfId or 1
local defReliveConf = ReliveConfig[defReliveConfId] or ReliveConfig[1]
--人物死亡事件
defaultHandlerActorDead = function (pActor)
local pFuben = Actor.getFubenPrt(pActor)
--Actor.addState(pActor, esStateDeath)
print("死亡")
Actor.updateActorEntityProp(pActor)
-- 静态场景
if Fuben.isFuben(pFuben) == false then
if Actor.getReliveTimeOut(pActor) == 0 then
--复活特权
local nCurReviveDuration = Actor.getIntProperty2(pActor, PROP_ACTOR_CURREVIVEDURATION);
if defReliveConf then
--复活特权
if nCurReviveDuration ~= 0 then
Actor.setReliveTimeOut(pActor, (defReliveConf.VipRevive or 5))
else
Actor.setReliveTimeOut(pActor, (defReliveConf.expire or 10))
end
local npack = DataPack.allocPacket(pActor, enDefaultEntitySystemID, sActorReliveInfo)
if npack then
DataPack.writeByte(npack, defReliveConfId)
DataPack.writeByte(npack, -1)
local count = (defReliveConf.selectInfo and #defReliveConf.selectInfo) or 0
DataPack.writeByte(npack, count)
local actorData = FubenDispatcher.GetActorData(pActor,0)
if actorData.relive == nil then
actorData.relive = {}
end
if count > 0 then
for i=1,count do
if actorData.relive[i] == nil then
actorData.relive[i] = defReliveConf.selectInfo[i].limit or -1
end
DataPack.writeByte(npack, actorData.relive[i])
end
end
-- 添加击杀者名字
local h_killer = Actor.getKillHandle(pActor)
local pKiller = Actor.getEntity(h_killer)
local name = ""
if pKiller then
name = Actor.getName(pKiller)
end
DataPack.writeString( npack, name )
DataPack.flush(npack)
end
else
--复活特权
if nCurReviveDuration ~= 0 then
Actor.setReliveTimeOut(pActor, 5)
else
Actor.setReliveTimeOut(pActor, 10)
end
end
end
-- 副本中
else
FubenDispatcher.OnActorDeath(pActor, pFuben)
end
end

View File

@@ -0,0 +1,39 @@
-- 人物活动时间进入泡点地图
defaultHandleEnterpaodianmap = function(pActor,args)
print("[ActorEtr_Exitpaodianmap],args: "..args)
for k, v in pairs(ActivitiesConf) do
if v.ActivityType == 5 then
local atvId = v.Id
if Activity5Config[atvId].sceneId and args== Activity5Config[atvId].sceneId then
local cacheData = ActivityDispatcher.GetCacheData(atvId)
if cacheData.actors == nil then
cacheData.actors = {}
end
local actorId = Actor.getIntProperty( pActor, PROP_ENTITY_ID )
cacheData.actors[actorId] = actorId
break
end
end
end
end
--人物退出泡点地图
defaultHandleExitpaodianmap = function(pActor,args)
for k, v in pairs(ActivitiesConf) do
if v.ActivityType == 5 then
local atvId = v.Id
if Activity5Config[atvId].sceneId and args== Activity5Config[atvId].sceneId then
local cacheData = ActivityDispatcher.GetCacheData(atvId)
if cacheData.actors == nil then
cacheData.actors = {}
end
local actorId = Actor.getIntProperty( pActor, PROP_ENTITY_ID )
cacheData.actors[actorId] = nil
break
end
end
end
end

View File

@@ -0,0 +1,5 @@
--人物转生事件
defaultHandlerActorCirclel = function ( pActor,nCircle )
local nLevel = Actor.getIntProperty(pActor, PROP_CREATURE_LEVEL)
end

View File

@@ -0,0 +1,31 @@
--#include "ActorBeKilledHandler.txt" once --角色被杀
--#include "ActorChangeNameHandle.txt" once --角色改名
--#include "ActorConsumeGameGoldHandler.txt" once --角色使用元宝
--#include "ActorLoginHandler.txt" once --角色登录
--#include "ActorLevelUpHandler.txt" once --角色升级
--#include "ActorEventCircleHandler.txt" once --角色转生
--#include "ActorDeadHandler.txt" once --角色死亡
--#include "ActorReliveHandler.txt" once --角色复活超时
--#include "ActorLeaveTeamHandler.txt" once --角色离队
--#include "ActorLogoutHandler.txt" once --角色登出
--#include "ActorNewDayHandler.txt" once --角色跨天
--#include "ActorWithDrawGameGoldHandler.txt" once --角色提取元宝(相当于充值)
--#include "BuffRemovedHandler.txt" once --角色移除BUFF
--#include "FuBenHandler.txt" once --角色副本操作
ActorEventDispatcher.Reg(aeLevel, defaultHandlerActorLevelUp, "ActorLevelUpHandler.txt")
ActorEventDispatcher.Reg(aeUserLogin, defaultHandlerPlayerLogin, "ActorLoginHandler.txt")
ActorEventDispatcher.Reg(aeUserLogout, defaultHandlerPlayerLogout, "ActorLogoutHandler.txt")
ActorEventDispatcher.Reg(aeOnActorDeath, defaultHandlerActorDead, "ActorDeadHandler.txt")
ActorEventDispatcher.Reg(aeReliveTimeOut, defaultHandlerActorReliveTimeOut, "ActorReliveHandler.txt")
ActorEventDispatcher.Reg(aeNewDayArrive, defaultHandleActorNewDay, "ActorNewDayHandler.txt")
ActorEventDispatcher.Reg(aeOnActorBeKilled, defaultHandlerActorBeKilled, "ActorBeKilledHandler.txt")
ActorEventDispatcher.Reg(aeWithDrawYuanBao, defaultHandleActorWithDrawGameGold, "ActorWithDrawGameGoldHandler.txt")
ActorEventDispatcher.Reg(aeConsumeYb, defaultHandleActorConsumeGameGold, "ActorConsumeGameGoldHandler.txt")
ActorEventDispatcher.Reg(aeOnEnterFuben, defaultHandlerEnterFuben, "FuBenHandler.txt")
ActorEventDispatcher.Reg(aeOnExitFuben, defaultHandlerExitFuben, "FuBenHandler.txt")
ActorEventDispatcher.Reg(aeBuffRemoved, defaultHandlerBuffRemoved, "BuffRemovedHandler.txt")
ActorEventDispatcher.Reg(aeLeaveTeam, defaultHandlerLeaveTeam, "ActorLeaveTeamHandler.txt")
ActorEventDispatcher.Reg(aeCircle, defaultHandlerActorCirclel, "ActorEventCircleHandler.txt")
ActorEventDispatcher.Reg(aeChangeName, defaultHandleChangeNameOp, "ActorChangeNameHandle.txt")

View File

@@ -0,0 +1,4 @@
--人物离队事件,参数一个 当前人物当前等级
defaultHandlerLeaveTeam = function ( pActor )
end

View File

@@ -0,0 +1,111 @@
--人物升级事件 当前人物当前等级
defaultHandlerActorLevelUp = function ( pActor,nLevel )
SendLevelMail( pActor,nLevel)
end
function SendLevelMail(pActor, nLevel)
--邮件
local mailData = getActorMailData(pActor)
if mailData == nil then
return
end
if mailData.lvMail == nil then
return
end
local Cfg = LevelMailConfig;
if Cfg == nil then
return
end
local mailCfg = MailIDConfig;
if mailCfg == nil then
return
end
local nActorId = Actor.getActorId(pActor)
if Cfg[nLevel] then
for _, id in pairs(Cfg[nLevel].idList) do
if not mailData.lvMail[id] then
if mailCfg[id] and mailCfg[id].isSend then
if mailCfg[id].attachment then
SendMail(nActorId, mailCfg[id].title, mailCfg[id].content, mailCfg[id].attachment)
else
SendMail(nActorId, mailCfg[id].title, mailCfg[id].content)
end
mailData.lvMail[id] = 1
end
end
end
end
end
function SendLoginMail(pActor)
--邮件
local mailData = getActorMailData(pActor)
if mailData == nil then
return
end
if mailData.loginMail == nil then
return
end
local day = System.getDaysSinceOpenServer();
local Cfg = LoginDayMailConfig;
if Cfg == nil then
return
end
local opentime = System.getOpenServerToday();
local mailCfg = MailIDConfig;
if mailCfg == nil then
return
end
opentime = opentime - (day -1)*24*3600;
local creattime = Actor.getActorCreateTime(pActor);
if creattime == 0 then
return
end
local nActorId = Actor.getActorId(pActor)
for _, cfg in pairs(Cfg) do
if cfg.day <= day then
--print("opentime.."..opentime)
--print("11111.."..creattime.."..day.."..(opentime + cfg.day*24*3600) )
if creattime < (opentime + cfg.day*24*3600) then
if mailData.loginMail[cfg.day] == nil then
for _, id in pairs(cfg.idList) do
if mailCfg[id] and mailCfg[id].isSend then
print("SendLoginMail"..Actor.getName(pActor) .."..id:"..id)
if mailCfg[id].attachment then
SendMail(nActorId, mailCfg[id].title, mailCfg[id].content, mailCfg[id].attachment)
else
SendMail(nActorId, mailCfg[id].title, mailCfg[id].content)
end
end
end
mailData.loginMail[cfg.day] = 1
end
end
end
end
end
function getActorMailData(pActor)
if Actor.getEntityType(pActor) ~= enActor then
return nil;
end
local var = Actor.getStaticVar(pActor)
if var.mailData == nil then
var.mailData = {}
end
if var.mailData.lvMail == nil then
var.mailData.lvMail = {}
end
if var.mailData.loginMail == nil then
var.mailData.loginMail = {}
end
return var.mailData;
end

View File

@@ -0,0 +1,74 @@
--人物登录事件注意此时部分DB数据可能尚未装载完毕
defaultHandlerPlayerLogin = function (pActor,nFirstLogin)
if nFirstLogin and nFirstLogin > 0 then
if( Actor.isFirstLogin(pActor) ) then
end
end
ProcActorData(pActor)
ActorEvnetPlayerLoginAfterDie( pActor )
loadActorData(pActor)
--登录邮件
SendLoginMail(pActor)
PersonalBoss.OnNewDayArrive(pActor,1);
end
--载入玩家的PK模式数据
function loadPKModeDataFunc(sysarg)
local var = Actor.getStaticVar( sysarg )
pkmode = var.pkmode
if pkmode == nil then
--print("pkmode is nil !!")
var.pkmode = {}
pkmode = var.pkmode
--Actor.setPkMode(sysarg,fpZY)
else
--print("pkmode:"..pkmode[1])
if pkmode[1]== nil then pkmode[1] = fpPeaceful end
if pkmode[1]~= nil then
Actor.setPkMode(sysarg,pkmode[1])
--print("get:"..Actor.getPkMode(sysarg))
end
end
end
--玩家登陆时读取玩家的.[数据参数玩家的ActorID]
function loadActorData(pActor)
local nLast = Actor.getLastLogoutTime(pActor) --上次下线的时间
if (nLast == 0) then
Actor.setPkMode(pActor,fpPeaceful)
--else
-- if (nLast < System.getToday()) then
-- Actor.removeQuestNewDay(pActor)
-- end
end
loadPKModeDataFunc(pActor)
end
--人物死亡后登录
function ActorEvnetPlayerLoginAfterDie( pActor )
if Actor.getIntProperty(pActor,PROP_CREATURE_HP) == 0 then
Actor.relive(pActor)
local maxhp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXHP)
Actor.changeHp(pActor,maxhp*0.3)
local actorMp = Actor.getIntProperty(pActor,PROP_CREATURE_MP)
local maxmp = Actor.getIntProperty(pActor,PROP_CREATURE_MAXMP)
Actor.changeMp(pActor,-(actorMp-maxmp*0.3))
end
end
--处理玩家数据
function ProcActorData(pActor)
local lastLogoutTime = Actor.getLastLogoutTime(pActor) --上次下线的时间
if (lastLogoutTime == 0) then --新注册玩家
else
if lastLogoutTime < System.getToday() then --昨天下线的,已经跨天了
end
end
end

View File

@@ -0,0 +1,27 @@
--lua script
--人物登出事件
defaultHandlerPlayerLogout = function (pActor,nActorId)
local fbId = Actor.getFubenId(pActor)
if fbId > 0 then
end
SaveData(pActor,Actor.getIntProperty(pActor,PROP_ENTITY_ID))
end
--保存玩家的PK模式数据
function savePKModeDataFunc(pActor,var)
local pkmode = var.pkmode
if pkmode == nil then
var.pkmode = {}
pkmode = var.pkmode
end
pkmode[1] = Actor.getPkMode(pActor)
end
--玩家退出时保存玩家的数据
function SaveData(pActor)
local var = Actor.getStaticVar( pActor )
savePKModeDataFunc(pActor,var) --玩家的PK模式数据
end

View File

@@ -0,0 +1,4 @@
--角色跨天事件
defaultHandleActorNewDay = function (pActor,args)
end

View File

@@ -0,0 +1,251 @@
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

View File

@@ -0,0 +1,5 @@
--提取元宝操作 参数1提取的元宝数
defaultHandleActorWithDrawGameGold = function (pActor,nArgWithDrawCount)
end

View File

@@ -0,0 +1,7 @@
BuffRemovedHandlers = {}
-- 角色Buff消失事件
function defaultHandlerBuffRemoved(pActor, buffId)
end

View File

@@ -0,0 +1,10 @@
function defaultHandlerEnterFuben(pActor, arg)
end
function defaultHandlerExitFuben( pActor, fubenId )
local curFbId = Actor.getFubenId(pActor)
if curFbId ~= fubenId then
return
end
end