Files
chuanqi-server-instance/LogicServer/data/functions/NpcEvent/NpcUIFuncs.txt
2024-12-16 20:45:03 +08:00

146 lines
4.8 KiB
Plaintext
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--UI展示功能类NPC
local NpcFuncType = 2
NpcFuncs[NpcFuncType] = {}
local EnUIType = {
RedName = 1, --洗红名
}
-- 主方法
NpcFuncs[NpcFuncType] = function(pActor, nNpcHandle, nNpcId, nFuncId, packet)
local thisNpcConf = NpcConf[nNpcId]
local funcGroup = thisNpcConf.funcGroup
-- 检查是否合法的请求NPC
if funcGroup then
for i,id in ipairs(funcGroup) do
if id == nFuncId then
local thisFunc = NpcFunctionsConf[id]
if thisFunc and thisFunc.funcType and thisFunc.funcType==NpcFuncType then
OnUIFunctions(pActor, thisFunc, packet)
end
end
end
end
end
-- 获取NpcUIFuncsUI展示功能类NPC的玩家数据
function GetUIFuncData(pActor)
local var = Actor.getStaticVar(pActor)
if var then
if var.UIFunc == nil then
var.UIFunc = {}
end
return var.UIFunc
end
return nil
end
--UI功能
function OnUIFunctions(pActor, thisFuncConf, packet)
if thisFuncConf.param2 == EnUIType.RedName then
OnRedNameCmd(pActor,thisFuncConf,packet)--洗红名
end
end
--UI功能清除红名PK值
function OnRedNameCmd(pActor, thisFuncConf, packet)
local useType = DataPack.readByte(packet)
local conf = thisFuncConf.param3
if conf and conf[useType+1] then
conf = conf[useType+1]
local data = GetUIFuncData(pActor)
-- PK值为0不处理
local curPk = Actor.getIntProperty(pActor,PROP_ACTOR_PK_VALUE)
if curPk <= 0 then
Actor.sendTipmsg(pActor, "PK值已经为0", tstUI)
return
end
-- 消耗检测
local consumes = {}
if conf.consume then
table.insert( consumes, conf.consume )
if CommonFunc.Consumes.Check(pActor, consumes) ~= true then
Actor.sendTipmsg(pActor, "道具或金币元宝不足!", tstEcomeny)
return
end
end
-- 次数检测,并增加
if conf.limitday and conf.limitday > 0 then
if data then
if data.PKLimit == nil then
data.PKLimit = {}
data.PKLimit[useType] = 0
end
if data.PKLimit[useType] then
if data.PKLimit[useType] >= conf.limitday then
Actor.sendTipmsg(pActor, "已超过今日次数!", tstUI)
return
end
data.PKLimit[useType] = data.PKLimit[useType] + 1
else
data.PKLimit[useType] = 1
end
else
assert("获取个人脚本数据出错")
end
end
-- 消耗
if CommonFunc.Consumes.Remove(pActor, consumes, GameLog.Log_CleanRedName, "清除红名PK值") ~= true then
return
end
-- 减PK值
if curPk <= conf.pkval then
Actor.sendTipmsg(pActor, "已减少"..curPk.."点pk值", tstEcomeny)
curPk = 0
else
Actor.sendTipmsg(pActor, "已减少"..conf.pkval.."点pk值", tstEcomeny)
curPk = curPk - conf.pkval
end
Actor.setUIntProperty(pActor,PROP_ACTOR_PK_VALUE,curPk)
-- 发送今天已洗红名次数
local netPack = DataPack.allocPacket(pActor, enMiscSystemID, sSendPkValueWashCount)
if netPack then
local num = 0;
if data.PKLimit then num = data.PKLimit[0] or 0 end;
DataPack.writeChar(netPack, num or 0)
DataPack.flush(netPack)
end
end
end
function OnNPCUIFuncNewDay(pActor,args)
local data = GetUIFuncData(pActor);
if data and data.PKLimit then
data.PKLimit = nil -- 清空洗PK值次数计数
end
-- 发送今天已洗红名次数
local netPack = DataPack.allocPacket(pActor, enMiscSystemID, sSendPkValueWashCount)
if netPack then
DataPack.writeChar(netPack, 0)
DataPack.flush(netPack)
end
end
function OnNPCUIFuncLogin(pActor,args)
-- 发送今天已洗红名次数
local netPack = DataPack.allocPacket(pActor, enMiscSystemID, sSendPkValueWashCount)
if netPack then
local data = GetUIFuncData(pActor)
if data and data.PKLimit then
DataPack.writeChar(netPack, (data.PKLimit[0] or 0))
--print("["..Actor.getName(pActor).."]剩余洗红名次数为:"..(data.PKLimit[0] or 0))
else
DataPack.writeChar(netPack, 0)
--print("["..Actor.getName(pActor).."]剩余洗红名次数为:".. 0)
end
DataPack.flush(netPack)
end
end
ActorEventDispatcher.Reg(aeNewDayArrive,OnNPCUIFuncNewDay,"NpcUIFuncs.txt")
ActorEventDispatcher.Reg(aeUserLogin,OnNPCUIFuncLogin,"NpcUIFuncs.txt")