module("systems.neidan.neidan", package.seeall)
require("neidan.neidanconf")
local logger = Logger.GetLogger("NeidanSystem")
local sysId = siNeidan
local neidanConf = neidanConf
local function AddAttr(actor, type, value) -- 添加属性
LActor.luaAttrInit(actor, LuaAttrDef.NeidanAttr)
LActor.luaAttrClear(actor, LuaAttrDef.NeidanAttr)
LActor.luaAttrAdd(actor, LuaAttrDef.NeidanAttr, type, value)
LActor.refreshActor(actor)
end
local function InitActor(actor)
local ast = LActor.getStaticVar(actor)
if not ast.neidanSys then
ast.neidanSys =
{
level = 1,
upLevel = false
}
end
local neidan = ast.neidanSys
local levelTotalCount =
if neidan.attr then
end
if not neidan.attr then
neidan.attr = {}
for i = 1, levelTotalCount do
neidan.attr[i] = { value = 0 }
end
return neidan
elseif
for i = 1, levelTotalCount do
if not neidan.attr[i] then
neidan.attr[i] = { value = 0 }
end
end
end
return neidan
end
local function OnOneKeyHandler(actor, index)
local neidan = InitActor(actor)
local attrAst = neidan.attr
local level = neidan.level
local totalConf = neidanConf.totalAttrType
local levelConf = neidanConf.level
local attrConf = levelConf[level]
if index == 0 then
for i = 1,
local limit = attrConf[i].limit
local type = attrConf[i].type
local item = neidanConf.item[type]
local add = item.add
local id = item.id
local value = attrAst[i].value
local surplus = limit - value
local needNeiDanCount = surplus / add
local haveNeiDanCount = LActor.getItemCount(actor, id, -1, -1, -1)
if haveNeiDanCount ~= 0 then
local del = 0
if haveNeiDanCount > needNeiDanCount then
del = needNeiDanCount
neidan.upLevel = true
else
del = haveNeiDanCount
neidan.upLevel = false
end
attrAst[i].value = attrAst[i].value + del * add
AddAttr(actor, attrConf[i].type, del * add)
LActor.removeItem(actor, id, del, -1, -1, -1, "neidan_remove")
else
neidan.upLevel = false
SendTipMsg(actor, TipMsgId.tpLua10)
end
end
NetSendInfo(actor)
end
if index == -1 then
if neidan.upLevel and neidan.level<= 50 then
neidan.upLevel = false
neidan.level = neidan.level + 1
NetSendInfo(actor)
end
end
end
function NetSendInfo(actor)
if not LActor.isActorSystemOpen(actor, sysId) then return end
local neidan = InitActor(actor)
local pack = DataPack.allocPacket(actor, 179, 25)
DataPack.writeChar(pack,
DataPack.writeInt(pack, neidan.level)
for i = 1,
DataPack.writeInt(pack, neidan.attr[i].value)
end
DataPack.flush(pack)
end
function NetRequInfo(actor, pack) -- 全部 和 一个
if not LActor.isActorSystemOpen(actor, sysId) then return end
local index = DataPack.readChar(pack)
OnOneKeyHandler(actor, index)
end
local function GmClear(actor, args)
local neidan = InitActor(actor)
local level = neidan.level
local levelConf = neidanConf.level
local attrConf = levelConf[level]
for i = 1,
neidan.attr[i].value = 0
end
end
local function GmPrint(actor, args)
local neidan = InitActor(actor)
local level = neidan.level
local levelConf = neidanConf.level
local attrConf = levelConf[level]
for i = 1,
print("value[" .. i .. "]:" .. neidan.attr[i].value)
end
end
local function GmOpen(actor)
logger:Info("NeiDanSystemOpen")
OnOpenSystem(actor, {sysId})
end
local function GmAdd(actor, args)
AddAttr(actor, args[1], args[2])
end
function OnOpenSystem(actor, args)
InitActor(actor)
NetSendInfo(actor)
end
function OnLogin(actor)
end
local function OnInit()
ActorRegisterNetHandler(179, 25, NetRequInfo)
GmEventFuncList.register("neidan.clear", GmClear, 1)
GmEventFuncList.register("neidan.print", GmPrint, 1)
GmEventFuncList.register("neidan.open", GmOpen, 1)
GmEventFuncList.register("neidan.add", GmAdd, 1)
RegisterSystem(siNeidan, _M)
end
table.insert(InitFnTable, OnInit)