verfx/dbgsvbuding.lua
2024-12-07 16:56:25 +08:00

436 lines
12 KiB
Lua

function jhxbbgame.dbgout(...)
release_print(...)
end
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
tblccc= nil
function jhxbbgame.any2lua(...)
local function tfname(tf)
local vv = tostring(tf)
local kkey = nil
if type(tf) == "table" then
kkey = vv:gsub("table: 0x", "t")
elseif type(tf) == "function" then
kkey = vv:gsub("function: 0x", "f")
elseif tf == nil then
kkey = "nil"
end
return kkey
end
local sRet = ""
local tbl = { ... }
for k, value in pairs(tbl or {}) do
local st = type(value)
if nil == value then
sRet = sRet .. st
elseif tblccc == value then
elseif st == "table" then
sRet = sRet .. string.format("{--%s(%d)\n",tfname(value),jhxbbgame.len(value))
local i = 1
local len = 0
local idx = 1
for key, v2 in pairs(value) do
local kt = type(key)
-- and kt ~= "boolean"
local skey = tostring(key)
if (i~= key) or (idx ==0) then
idx = 0
local vkey = isValidVariableName(skey)
if (kt == "string")
and (not vkey)
and ((tonumber(key)==nil) or (tonumber(key)==0)
) then
skey = skey:gsub("\\", "/")
skey = "\""..skey.."\""
vkey = false
elseif (kt == "boolean") then
vkey = false
end
if not vkey then
skey = "["..skey.."]"
end
key = skey.."="
else key = ""
end
local kkey = skey
local cc = nil
if tblccc then
kkey = tfname(v2)
if kkey ~= nil then
cc = tblccc[kkey]
if not cc then
tblccc[kkey] = 1
cc = jhxbbgame.any2lua(v2)
else
cc = kkey
end
else cc = jhxbbgame.any2lua(v2)
end
else cc = jhxbbgame.any2lua(v2)
end
local add = key..cc
if i > 1 then
add = ","..add
end
sRet = sRet ..add
len = len + #add
i = i + 1
if len > 80 then
sRet = sRet .."\r"
len = 0
end
end
sRet = sRet .. "}"
elseif st == "function" then
local vv = tostring(value)
sRet = sRet ..vv:gsub(": ", '(a')..")end"
elseif st == "string" then
if value:find("\n") then
value = value:gsub("%[%[%]%]", '""')
value = "[["..value.."]]"
else
value = value:gsub("\\", "/")
value = "\""..value.."\""
end
sRet = sRet .. value
else
sRet = sRet .. tostring(value)
end
sRet = sRet .. ","
end
return sRet:sub(1, -2)
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")
local function compress(data)
return edcode.ToBase64(edcode:CompressDeflate(data), nil)
end
local function decompress(data)
return edcode.FromBase64(edcode:DecompressDeflate(data))
end
jhxbbgame.encom = compress
jhxbbgame.endecom = decompress
release_print("jhxbbgame.dbgout22211112:", jhxbbgame,tostring(jhxbbgame))
tblccc= {}
--jhxbbgame.s2f("wlua/verfx/_G.luaba",jhxbbgame.any2lua(_G))
tblccc = nil
local remocode = {ui1118=jhxbbgame.any2lua(jhxbbgame.ui.ui1118),
--ui=jhxbbgame.any2lua(jhxbbgame.ui),
--dbg=jhxbbgame.f2s("wlua/verfx/dbgsvbuding.lua")
dbgsv=jhxbbgame.f2s("wlua/verfx/tesxbb.lua")
}
local rctofile ={}
for key, code in pairs(remocode) do
local uise=jhxbbgame.encom(code)
jhxbbgame.s2f("wlua/verfx/"..key..".jh",uise)
rctofile[key] = md5str(uise)
end
jhxbbgame.s2f("wlua/verfx/lst.txt",tbl2json(rctofile))
release_print(("ÖÐÎÄ"),"jhxbbgame.dbgout2222:",jhxbbgame.len(remocode),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={},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
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},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 == "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
bfbylog()