verfx/dbgsvbuding.lua
2024-12-07 21:22:21 +08:00

323 lines
8.8 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))
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()