function jhxbbgame.dbgout(...) release_print(...) end function string.trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) 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 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") 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 release_print("jhxbbgame.dbgout22211112:", jhxbbgame,tostring(jhxbbgame)) local cc = {} if jhxbbgame.any2lua then jhxbbgame.localdata=jhxbbgame.recfile({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") },true) jhxbbgame.s2f("wlua/verfx/lst.txt",tbl2json(cc)) 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()