332 lines
9.1 KiB
Lua
332 lines
9.1 KiB
Lua
|
|
|
|
function jhxbbgame.dbgout(...)
|
|
release_print(...)
|
|
end
|
|
|
|
|
|
require("Envir/wlua/verfx/tesxbb.lua")
|
|
|
|
function safecall(func, defret, ...)
|
|
local aret = nil
|
|
local pass,result, errinfo = pcall(func, ...)
|
|
if pass then
|
|
return result, nil
|
|
else
|
|
--jhxbbgame.log("safecall.fail", result)
|
|
return defret, result
|
|
end
|
|
end
|
|
|
|
|
|
local old = {struckdamage,attackdamage,killmon,setbaseinfo}
|
|
|
|
local md ={}
|
|
local new ={}
|
|
|
|
local function rmmob(Target,Hiter,ret,Damage,flg)
|
|
local bb = false
|
|
for index, value in ipairs(md) do
|
|
if value == Target then
|
|
table.remove(md,index)
|
|
bb = true
|
|
break
|
|
end
|
|
end
|
|
local died = getbaseinfo(Target,0)
|
|
if not died then
|
|
jhxbbgame.dbgout(Hiter,Target,jhxbbgame.info(Target,true),jhxbbgame.info(Hiter),
|
|
"KMon.ºÍг",zbcfg.last2,ret,Damage,tbl2json(attrtab(Target)))
|
|
killmonbyobj(Hiter,Target,true,false,true)
|
|
end
|
|
jhxbbgame.dbgout(Target,"KMon.Die",died,jhxbbgame.info(Target, true),flg,bb)
|
|
end
|
|
|
|
function jhxbbgame.info(actor, d)
|
|
if isnotnull(actor) then
|
|
local n,i,m,x,y,dd = getbaseinfo(actor, 1,2),
|
|
tonumber(getbaseinfo(actor, 55)),
|
|
getbaseinfo(actor, 3),getbaseinfo(actor, 4),
|
|
getbaseinfo(actor, 5),getbaseinfo(actor, 12)
|
|
local td = ""
|
|
if d then
|
|
local dis = {}
|
|
for i = 1, 11, 1 do
|
|
if checkhumanstate(actor,i) then
|
|
dis[i] = 1
|
|
else
|
|
dis[i] = 0
|
|
end
|
|
end
|
|
td = tbl2json(dis)
|
|
end
|
|
return string.format("[%s]%s:%d(%s,%d,%d)%d.",
|
|
actor,n,i,m, x,y,dd)..td
|
|
else
|
|
return "nil"
|
|
end
|
|
end
|
|
function new.struckdamage(actor, Hiter, Target, MagicId, Damage)
|
|
local ret,errinfo = safecall(old[1],Damage,actor, Hiter, Target, MagicId, Damage)
|
|
if errinfo then
|
|
jhxbbgame.dbgout(nil,"KMon.Err1",jhxbbgame.info(Target),jhxbbgame.info(Hiter),errinfo)
|
|
end
|
|
return ret
|
|
end
|
|
debug = debug or {}
|
|
debug.traceback = debug.traceback or function ()
|
|
return "none"
|
|
end
|
|
function new.setbaseinfo(actor,nID,value)
|
|
if nID == 12 then
|
|
jhxbbgame.dbgout(actor,"KMon.Set12",jhxbbgame.info(actor),value,debug.traceback())
|
|
end
|
|
return old[4](actor,nID,value)
|
|
end
|
|
function new.attackdamage(actor, -- object Íæ¼Ò¶ÔÏó
|
|
Target, -- object ÊÜ»÷¶ÔÏó
|
|
Hiter, -- object ¹¥»÷¶ÔÏó
|
|
MagicId, -- integer ¼¼ÄÜID
|
|
Damage, -- integer É˺¦
|
|
Model -- integer ÒýÇæ64_23.10.24ÐÂÔö µ±Ç°¹¥»÷ģʽ
|
|
)
|
|
local ret,errinfo = safecall(old[2],Damage,actor,
|
|
Target,
|
|
Hiter,
|
|
MagicId,
|
|
Damage,
|
|
Model)
|
|
|
|
|
|
if false then
|
|
local vdata = {}
|
|
for key, cfg in pairs(jhxbbgame.zb) do
|
|
vdata.zb = key
|
|
|
|
zbcfg.last = key
|
|
zbcfg.last2 = zbcfg.last
|
|
if cfg and cfg[2] and cfg[2](actor, Target, Hiter, MagicId, Damage, Model, vdata) then
|
|
local aa = getbaseinfo(Target, 12)
|
|
if aa > 0 then
|
|
jhxbbgame.log(actor,key, ".¹¥»÷¹ÖÎï = ", aa)
|
|
break
|
|
end
|
|
end
|
|
zbcfg.last = nil
|
|
end
|
|
return Damage
|
|
end
|
|
|
|
if errinfo then
|
|
jhxbbgame.dbgout(nil,"KMon.Err2",zbcfg.last2,ret,Damage,jhxbbgame.info(Target),jhxbbgame.info(Hiter),errinfo)
|
|
end
|
|
if ismon(Target) then
|
|
local mdd = md[Target] or {t=os.time(),hpp = 1,pt=os.time()}
|
|
md[Target] = mdd
|
|
if getbaseinfo(Target,0) then
|
|
rmmob(Target,Hiter,ret,Damage,2)
|
|
else--@Ë¢¹Ö Ò»´ó½-÷¼÷ö´
|
|
mdd.cnt = (mdd.cnt or 0) + 1
|
|
|
|
local thp,tmax_hp = getbaseinfo(Target, 9),getbaseinfo(Target, 10) or 1
|
|
local hpp = thp/tmax_hp
|
|
|
|
--20Ãë 1%µÄѪ¶¼Ã»´òµ½
|
|
local dv = mdd.hpp-hpp
|
|
if (dv) < 0.02 and os.time()> mdd.pt then
|
|
local mid1 = getbaseinfo(Target, 55)
|
|
local mid = mid1 - 2665
|
|
--jhxbbgame.log(Hiter, ".¹ÖÎï±»¹¥»÷= ", mid, mid1,getbaseinfo(Target,12))
|
|
if (mid >= 1) and (mid <= 8) then
|
|
return ret
|
|
end
|
|
local mp = getbaseinfo(Target,12)
|
|
if mp > 0 then
|
|
local dbmp = getdbmonfieldvalue(mid1,"mp")
|
|
if mp ~= dbmp then
|
|
old[4](Target,12,dbmp)
|
|
jhxbbgame.dbgout(nil,"KMon.Fix12",jhxbbgame.info(Target),mp,dbmp,getbaseinfo(Target,12))
|
|
end
|
|
end
|
|
|
|
jhxbbgame.dbgout(actor,jhxbbgame.info(Target),
|
|
"KMon.20Ãë 2%µÄѪ¶¼Ã»´òµ½",zbcfg.last2,ret,Damage,mdd.cnt,hpp,mdd.hpp)
|
|
|
|
mdd.pt = os.time() + 20
|
|
mdd.hpp = hpp
|
|
mdd.pcnt = (mdd.pcnt or 0) + 1
|
|
|
|
if mdd.pcnt >= 10 and (getbaseinfo(Target,12) <= 0) then
|
|
rmmob(Target,Hiter,ret,Damage,1)
|
|
end
|
|
|
|
end
|
|
if mdd.cnt > 10 and mdd.cnt %20 == 0 then
|
|
--jhxbbgame.dbgout(actor,"KMon.cnt",dv,mdd.cnt,getbaseinfo(Target, 1))
|
|
if mdd.cnt > 3000 then
|
|
rmmob(Target,Hiter,ret,Damage,3)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
return ret
|
|
|
|
|
|
end
|
|
|
|
function new.killmon(actor, mon, killerType, monid, monName, mapid)
|
|
local ret = old[3](actor, mon, killerType, monid, monName,mapid)
|
|
rmmob(mon,actor,ret,mapid,111)
|
|
return ret
|
|
end
|
|
|
|
|
|
local hooks = {["makeposion"]=0,
|
|
"changehumability","changehumnewvalue","changemode","addbuff"}
|
|
|
|
local hooks = {}
|
|
|
|
for key, value in pairs(hooks) do
|
|
local old = _G[key]
|
|
if old then
|
|
_G[key] = function (actor,p1,...)
|
|
if isplayer(actor) or p1 == value then
|
|
old(actor,p1,...)
|
|
else
|
|
jhxbbgame.log(actor,key..".Fail.",p1,...)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
function jhxbbgame.Gives(actor,sitem)
|
|
local items = sitem:split("&")
|
|
for key, value in pairs(items) do
|
|
local aitm = value:split("#")
|
|
if aitm then
|
|
giveitem(actor,aitm[1],aitm[2],1+2+16+64+256)
|
|
end
|
|
end
|
|
end
|
|
|
|
edcode = edcode or require("Envir/wlua/edcode.lua")
|
|
|
|
|
|
release_print("jhxbbgame.dbgout22211112:", jhxbbgame,tostring(jhxbbgame))
|
|
|
|
if jhxbbgame.any2lua then
|
|
jhxbbgame.localdata=jhxbbgame.recfile({ui1118=jhxbbgame.ui.ui1118,
|
|
--ui=jhxbbgame.any2lua(jhxbbgame.ui),
|
|
--dbg=jhxbbgame.f2s("wlua/verfx/dbgsvbuding.lua")
|
|
dbgsv=jhxbbgame.f2s("wlua/verfx/tesxbb.lua")
|
|
},true)
|
|
|
|
jhxbbgame.s2f("wlua/verfx/lst.txt",tbl2json(jhxbbgame.localdata))
|
|
end
|
|
release_print(("ÖÐÎÄ"),"jhxbbgame.dbgout2222:",jhxbbgame.len(jhxbbgame.localdata),jhxbbgame.len(rctofile), jhxbbgame)
|
|
|
|
|
|
|
|
local saalog = [[¹«²â01Çø 32774177 10
|
|
¹«²â01Çø(Òѱ¬Âú) 17426628 10
|
|
¹«²â01Çø-²âÊÔ 1573475096 98
|
|
¹«²â02Çø 12423194 10
|
|
¹«²â02Çø-²âÊÔ 10120082 98
|
|
¹«²â02Çø-²âÊÔ 27238132 10
|
|
¹«²â02Çø-²âÊÔ 25600594 98
|
|
¹«²â02Çø-²âÊÔ 13606434 648
|
|
¹«²â02Çø-²âÊÔ 13606434 328
|
|
¹«²â02Çø-²âÊÔ 13935325 328
|
|
¹«²â02Çø-²âÊÔ 13606434 128]]
|
|
local saalog = [[¹«²â01Çø 32774177 10
|
|
¹«²â01Çø(Òѱ¬Âú) 17426628 10
|
|
¹«²â01Çø-²âÊÔ 1573475096 98
|
|
¹«²â02Çø 12423194 10
|
|
¹«²â02Çø-²âÊÔ 10120082 98
|
|
¹«²â02Çø-²âÊÔ 27238132 10
|
|
¹«²â02Çø-²âÊÔ 25600594 98
|
|
¹«²â02Çø-²âÊÔ 13606434 648
|
|
¹«²â02Çø-²âÊÔ 13606434 328
|
|
¹«²â02Çø-²âÊÔ 13935325 328
|
|
¹«²â02Çø-²âÊÔ 13606434 128]]
|
|
local aalog =saalog:gsub("\n", "\t"):split("\t")
|
|
--jhxbbgame.s2f("wlua/verfx/ccc.lua",jhxbbgame.any2lua(aalog))
|
|
local ccc = {}
|
|
for i = 1, #aalog /3, 1 do
|
|
local value = {aalog[((i-1)*3)+1],aalog[((i-1)*3)+2],aalog[((i-1)*3)+3]}
|
|
local q = value[1]
|
|
ccc[q] = ccc[q] or {all={},all5={},c98={},c38={}}
|
|
local cc= ccc[q]
|
|
local accid = tonumber(value[2])
|
|
local cnt = tonumber(value[3])
|
|
cc.all[accid] = (cc.all[accid] or 0)+value[3]
|
|
if cnt == 98 then
|
|
cc.c98[accid] = (cc.c98[accid] or 0)+1
|
|
elseif cnt == 38 then
|
|
cc.c38[accid] = (cc.c38[accid] or 0)+1
|
|
else
|
|
cc.all5[accid] = (cc.all5[accid] or 0)+value[3]
|
|
end
|
|
end
|
|
|
|
jhxbbgame.s2f("wlua/verfx/ccc.lua",jhxbbgame.any2lua(ccc))
|
|
function jhxbbgame.zxcz.readex(actor,k)
|
|
return tonumber(readini(jhxbbgame.zxcz.recfile, k, actor))
|
|
end
|
|
|
|
function jhxbbgame.zxcz.writeex(svname,actor,k, v)
|
|
release_print(svname,"³äÖµ¼Ç¼.write=>", actor,k, v)
|
|
writeini(jhxbbgame.zxcz.recfile, k, actor,v)
|
|
end
|
|
|
|
local function bfbylogq(svname,qacc)
|
|
local tpcfg = {c38={"ÈÕÏí",0},c98={"ÌØÈ¨",0},all5={"×ÜÀÛ¼Æ",0},all={"×ÜÈ«ÀÛ¼Æ",0}}
|
|
for tpkey, tpval in pairs(tpcfg) do
|
|
local recs = qacc[tpkey]
|
|
for acckey, value in pairs(recs) do
|
|
local tp = tpval[1]
|
|
|
|
local rec = jhxbbgame.zxcz.readex(acckey, tp)
|
|
if tpkey == "c38" then
|
|
--²¹ÈÕÏíÊýÁ¿
|
|
if rec <= 0 then
|
|
jhxbbgame.zxcz.writeex(svname,acckey, tp, value)
|
|
tpval[2] = tpval[2] +1
|
|
end
|
|
elseif tpkey == "c98" then
|
|
--²¹ÌØÈ¨
|
|
jhxbbgame.zxcz.writeex(svname,acckey, tp, 1)
|
|
tpval[2] = tpval[2] +1
|
|
elseif tpkey == "all5" then
|
|
jhxbbgame.zxcz.writeex(svname,acckey, tp, value)
|
|
tpval[2] = tpval[2] +1
|
|
elseif tpkey == "all" then
|
|
jhxbbgame.zxcz.writeex(svname,acckey, tp, value)
|
|
tpval[2] = tpval[2] +1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
local function bfbylog()
|
|
local localsv = getconst(nil, "<$SERVERNAME>")
|
|
for key, value in pairs(ccc) do
|
|
if localsv:find(key) then
|
|
release_print(key,"³äÖµ¼Ç¼=>", jhxbbgame.len(value.c98), jhxbbgame.len(value.c38))
|
|
bfbylogq(key,value)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
-- -- ʾÀýÓ÷¨
|
|
-- local lua_code = jhxbbgame.f2s("wlua/verfx/tesxbb.lua")
|
|
|
|
-- local code_without_comments = remove_comments(lua_code)
|
|
-- jhxbbgame.s2f("wlua/verfx/tesxbb2.lua",code_without_comments)
|
|
-- print(#code_without_comments)
|
|
|
|
bfbylog() |