function takeonex(actor, -- object 玩家对象 item, --object 物品对象 where, --integer 穿/脱位置 itemName, --string 物品名 makeindex --integer ) local idx = tonumber(zbcfg.idx(actor, item)) jhxbbgame.log(actor,"take.onex = ", itemName, where,idx) if takeonex6 then takeonex6(actor, item, where, itemName, makeindex) end zbcfg.reload(actor,999,-idx) end function takeoffex(actor, -- object 玩家对象 item, --object 物品对象 where, --integer 穿/脱位置 itemName, --string 物品名 makeindex --integer ) local idx = zbcfg.idx(actor, item) zbcfg.reload(actor,13,idx) jhxbbgame.log(actor,"take.offex = ", itemName, where, idx) end function delayequipchg(actor, tp, offidx) tp = oldtoint(tp) or VarInt(actor,"N$reload_tp") offidx = VarInt(actor,"N$reload_offidx") SetVarStr(actor,"N$reload_offidx",0) --jhxbbgame.log(actor, ".delayequipchg.init = ") makebodyitemindexs(actor, nil, 1+tp*100, offidx) end function zbcfg.reload(actor,tp,offidx) --jhxbbgame.log(actor,"zbcfg.reload = ", tp, offidx) tp = tp or 666 offidx = offidx or 0 SetVarStr(actor,"N$reload_tp",tp) if offidx > 0 then SetVarStr(actor,"N$reload_offidx",offidx) end --delayequipchg(actor,tp,offidx) jhxbbgame.delayone(actor, 588, "delayequipchg") end bodyitem_index = {} local oldpkpoint = {} function pkpointchanged(actor, pkv) pkv = pkv or 0 -- local old = oldpkpoint[actor] or 0 -- if old ~= pkv and pkv > old then -- --jhxbbgame.SetPKFlag(actor, 1) -- end -- oldpkpoint[actor] = pkv zbcfg.checkpkzb(actor, { pkv = pkv, timecur = jhxbbgame.ticksec(), zb = 111 }) end function zbcfg.NowRecalcAbil(actor) if not checkkuafuserver() then callscript(actor, "额外TXT执行", "@自定义属性重新计算") recalcabilitys(actor) end end function zbcfg.initex(actor, items) local cnt = 0 local vdata = { timecur = jhxbbgame.ticksec() } for key, value in pairs(items) do vdata.zb = key if value and value(actor, vdata) then jhxbbgame.log(actor, key, ".初始化 = ") end cnt = cnt + 1 end return cnt end function zbcfg.init(actor, items) local cnt = 0 local zlcnt = 0 local kkv = 0 local kk = {[1]=55555, [2]=33333, [3]=44444, [4]=66666} for key, value in pairs({ zbcfg.idxs[1], zbcfg.idxs[2], zbcfg.idxs[4], zbcfg.idxs[5]}) do if zbcfg.GetBodyItem(actor, value) then zlcnt = zlcnt + 1 kkv = kkv + kk[key] end end SetVarInt(actor, "N$对坤切割", kkv) -- 四大斩龙戒指做套装属性, SetVarInt(actor, "U018", 0) --jhxbbgame.log(actor, ".zbcfg.init = ",jhxbbgame.any2str(items)) --throughhum(actor, 0, 99999999, 0) addattlist(actor, "专属", "=","",0) delattlist(actor, "专属") addattlist(actor, "专属狂魔之怒", "=","",0) delattlist(actor, "专属狂魔之怒") setflagstatus(actor, 103, 0) zbcfg.NowRecalcAbil(actor) if zbcfg.GetBodyItem(actor, zbcfg.idxs[16]) then --燃烧的图腾 "龙魂爆发冷却时间-30秒龙魂爆发持续时间+15秒 SetVarInt(actor, "U025", 30) SetVarInt(actor, "U026", 15) else SetVarInt(actor, "U025", 0) SetVarInt(actor, "U026", 0) end local cdkt = 0 local cdzr = 0 local qgv = 0 local attr = 0 local qgadd = 0 --local hasmag = getskillinfo(actor,1002,1)~=nil if zlcnt >= 2 then --2件套属性 --对怪切割2W qgv = 20000 jhxbbgame.log(actor, "*2件套属性.切割+++20000") end if zbcfg.GetBodyItem(actor, zbcfg.idxs[18]) then --逐日剑法、开天斩冷却时间减少20%, cdkt = 6*0.2 cdzr = 6*0.2 end setskilldeccd(actor, "逐日剑法", "=", cdzr) setskilldeccd(actor, "开天斩", "=", cdkt) if zlcnt >= 3 then --3件套套装属性,攻击人物时,刀刀斩杀其当前血量的5%, --SetVarInt(actor, "U018", 5) qgadd = qgadd + 10 addattlist(actor, "专属", "+", "3#1#10000", 0) end if zlcnt >= 4 then --4件套,激活主动技能“游龙万象”,主动释放后解除自身一切负面或控制效果,CD180秒。 if getskilllevel(actor, 1002) <= 0 then addskill(actor, 1002, 3) local cur = jhxbbgame.ticksec() if cur >= VarInt(actor, "U019") then jhxbbgame.SettimeSec(actor, "U019", 3) end end else delskill(actor, 1002) end local kcnt = math.min(VarInt(actor, "U011"), 50) if (kcnt > 0) and zbcfg.GetBodyItem(actor, zbcfg.idxs[19]) then --滴水穿石 local abil = "3#4#" .. (kcnt * 10) .. "|3#1#" .. (kcnt * 100) jhxbbgame.log(actor, "*滴水穿石.+++"..kcnt,abil) addattlist(actor, "专属", "+", abil, 0) end if getflagstatus(actor, 102) == 1 then jhxbbgame.log(actor, "*磨刀.切割+++5000") qgv = qgv + 5000 end qgadd = qgadd + tonumber(getconst(actor, "<$ATTR[222]>")) local rmb = querymoney(actor, 16) + querymoney(actor, 17) if rmb > 0 and zbcfg.GetBodyItem(actor, zbcfg.idxs[17]) then rmb = math.min(rmb,50000) * 2 qgv = qgv + rmb jhxbbgame.log(actor, "*财神.切割+++ "..rmb) end if zbcfg.GetBodyItem(actor, zbcfg.idxs[3],1,true) then jhxbbgame.GMLog(actor,"*103 上架") setflagstatus(actor, 103, 1) end if qgadd > 0 then attr = tonumber(getconst(actor, "<$ATTR[74]>")) --jhxbbgame.log(actor, "*222.切割+++% ",attr,qgv,qgadd) qgv = qgv + math.floor((attr + qgv) * (qgadd / 100)) end if qgv > 0 then --jhxbbgame.log(actor, "*.切割+++ ",qgv) addattlist(actor, "专属", "=", "3#74#"..qgv, 0) end local kf = false--checkkuafu(actor) if not kf then zbcfg.initex(actor,items) end zbcfg.NowRecalcAbil(actor) -- jhxbbgame.log(actor, zbcfg.idxs[17], -- zbcfg.GetBodyItem(actor, zbcfg.idxs[17]),rmb, -- "--------------装备.init = " -- , qgv,attr,qgadd, -- cnt, jhxbbgame.len(items),cdkt,cdzr) end function zbcfg.uninit(actor, idx,itemName) --delayequipchg(actor,222) local vdata = { timecur = jhxbbgame.ticksec() } local value = zbcfg.zbx[idx] --local xh = "" if value then --xh = xh .. "," .. idx vdata.zb = idx value(actor, vdata) -- if then -- xh = xh .. "=1" -- end end --zbcfg.reload(actor) jhxbbgame.log(actor, "装备.卸货 = " , idx,itemName) end function zbcfg.GetBodyItem(actor, i, cnt,log) cnt = cnt or 1 local uid = getbaseinfo(actor, 2) local Itma = bodyitem_index[uid] if not Itma then zbcfg.reload(actor,555) return false -- makebodyitemindexs(actor, false,200000+i) -- Itma = bodyitem_index[uid] or {} end local Itm = Itma[11] or {} local ret = (Itm["i"..i] or 0) >= cnt -- if log then -- jhxbbgame.GMLog(actor,"*BodyItem",Itm["i"..i],i,"end") -- end return ret,"i"..i,Itm["i"..i] end --[[ {[92]=44 ,[84]=27,[75]=20,[91]=43,[86]=28,[88]=29,[90]=42,[83]=26} ]] zbcfg.eqpos = {77,111,74,108,112,101,105,109,79 ,75,106,110,107,78,9, 44,27,20,43,28,29,42,26,100,80,103,102,71,104 } function zbcfg.cdpass(actor, vdata, mode, tp) local cfg = zbcfg.CD[vdata.zb] local cd = (cfg and (cfg[1])) or 0 --release_print("cdpass.cd = ", cd,tbl2json(cfg)) if cd > 0 then local savedcd = VarInt(actor, cfg[2]) local otime = os.time() if otime > savedcd then --release_print("cdpass = ", vdata.zb, mode, cd, cfg[2]) --SetVarInt(actor, cfg[2], vdata.timecur + cd) return true else return false end end return true end function zbcfg.cdupdate(actor, vdata, mode) local cfg = zbcfg.CD[vdata.zb]; local cd = (cfg and cfg[1]) or 0 if cd > 0 then local ncd = os.time() + cd --jhxbbgame.log(actor, "cdupdate.cd = ", vdata.zb, ncd, tbl2json(cfg)) SetVarInt(actor, cfg[2], ncd) return cd end return 0 end function zbcfg.die(actor) local vdata = { timecur = jhxbbgame.ticksec(), max_hp = getbaseinfo(actor, 10), selfx = getbaseinfo(actor, 4), selfy = getbaseinfo(actor, 5) } SetVarInt(actor, "U011", 0) jhxbbgame.log(actor, jhxbbgame.len(zbcfg.zbd), ".die = 666") SetVarInt(actor, "N$死亡时间", vdata.timecur) svautoplay.die(actor) for key, value in pairs(zbcfg.zbd) do vdata.zb = key vdata.died = true if value and zbcfg.GetBodyItem(actor, vdata.zb, 1) and zbcfg.cdpass(actor, vdata, 2) and value(actor, vdata) then zbcfg.cdupdate(actor, vdata, 1) release_print(key, ".die = ") end end end function zbcfg.Realive(actor,m) local vdata = { timecur = jhxbbgame.ticksec(), max_hp = getbaseinfo(actor, 10), hp = getbaseinfo(actor, 9), hiter = getplayerbyid(VarStr(actor, "S$击杀者id")) } jhxbbgame.HideUI(actor, "fuhuotanchuang") local rethp = jhxbbgame.IncHP(actor, vdata.max_hp) jhxbbgame.log(actor,getbaseinfo(actor,1), ".Realive = ",m,vdata.hp,rethp,vdata.hiter,VarStr(actor, "S$击杀者id")) SetVarStr(actor, "S$击杀者id", "") for key, value in pairs(zbcfg.zbr) do vdata.zb = key if value and zbcfg.cdpass(actor, vdata, 2) and zbcfg.GetBodyItem(actor, vdata.zb, 1) and value(actor, vdata) then zbcfg.cdupdate(actor, vdata, 1) jhxbbgame.log(actor, key, ".复活 = ") end end end zbcfg.ResetVarAtLogin = { "D99" } function zbcfg.login(actor) svautoplay.die(actor) jhxbbgame.log(actor,"x"..getbaseinfo(actor, 2),getconst(actor, "<$USERACCOUNT>"),getbaseinfo(actor, 1), "zbcfg.login---------------") zbcfg.reload(actor,333, -1) --横行霸道 if jhxbbgame.timeSecAt(actor, "U10",os.time()) or VarInt(actor, "U10") < 1 then jhxbbgame.SettimeSec(actor, "U10", 300,os.time()) end setontimer(actor, 18, 1, 0, 1) SetVarInt(actor, "D99", jhxbbgame.ticksec() + 1001118) end function sendability(actor, bb) -- if false and getgmlevel(actor) > 1 then -- jhxbbgame.log(actor, -- "sendability:专属=", -- getattlist(actor, "专属") -- ,getconst(actor, "<$ATTR[74]>") -- ,getconst(actor, "<$ATTR[222]>") -- --,tbl2json(attrtab(actor)) -- )--) -- end sendability6(actor) end function kflogin(actor) jhxbbgame.bfcall(actor, "kflogined", {}) release_print(actor, ".kflogin **= ") --login(actor) -- makebodyitemindexs(actor) -- zbcfg.login(actor) end function kuafuend(actor) SetVarInt(actor,"N$kftime", os.time()) kuafusys.kend(actor) jhxbbgame.ShowTopBtn(actor) zbcfg.reload(actor,333, -1) release_print(actor, ".kuafuend = ") end function bfsyscall19(actor, arg1, arg2) local role_name = getbaseinfo(actor, 1) release_print("收到通知", role_name, arg1, arg2) local cfg = json2tbl(arg1) or {15,0} delaygoto(actor, 888, "makebodyitemindexs,r,"..(cfg[1] or 16)..","..(cfg[2] or 0)) --makebodyitemindexs(actor,nil,cfg[1] or 16,cfg[2] or 0) end function makebodyitemindexs(actor, r, tp, offidx) offidx = tonumber(offidx) or 0 tp = tonumber(tp) or 17 if checkkuafu(actor) and not checkkuafuserver() then --release_print("本服通知触发跨服QF") r = nil bfbackcall(19, getbaseinfo(actor, 2), tbl2json({tp, offidx})) --return end local uid = getbaseinfo(actor, 2) --repairall(actor) local pbodyitem_index = { {}, {}, {}, {}, {}, {}, {} } local itmInit = {} pbodyitem_index[11] = {} pbodyitem_index[20] = {} pbodyitem_index[21] = {} pbodyitem_index[22] = {} pbodyitem_index[23] = {} local ids = "" local ty = { 1, 2, 3, 5 } for k, v in pairs(zbcfg.eqpos) do local id = jhxbbgame.BodyItem(actor, v) if id then ids = ids .. "," .. id pbodyitem_index[11]["i"..id] = (pbodyitem_index[11]["i"..id] or 0) + 1 local cfg = jhxbbgame.zb[id] if cfg then pbodyitem_index[20][id] = cfg if cfg[11] then itmInit[id] = cfg[11] end if cfg[21] then pbodyitem_index[21][id] = cfg end if cfg[10] then pbodyitem_index[23][id] = cfg end if cfg[22] then pbodyitem_index[22][id] = cfg end for key, i in pairs(ty) do if cfg[i] then pbodyitem_index[i][#pbodyitem_index[i]+1] = id end end end end end pbodyitem_index[10] = itmInit jhxbbgame.log(actor,getbaseinfo(actor, 1),"make.bodyitemindexs = ", #ids, r,tp,offidx) bodyitem_index[uid] = pbodyitem_index if not checkkuafuserver() then --if offidx < 0 then zbcfg.init(actor, itmInit) --end if offidx > 0 then zbcfg.uninit(actor, offidx) end -- else -- if offidx < 0 -- then -- zbcfg.initex(actor, itmInit) -- end -- if offidx > 0 then -- zbcfg.uninit(actor, offidx) -- end end end function getbodyitemindexs(actor, mode) mode = mode or 1 local uid = getbaseinfo(actor, 2) local pbodyitem_index = bodyitem_index[uid] if pbodyitem_index then return pbodyitem_index[mode] end zbcfg.reload(actor,888+mode*1000000) return {} -- makebodyitemindexs(actor, nil, 10000+mode) -- return bodyitem_index[uid][mode] --release_print("makebodyitemindexs = "..tostring(bodyitem_index[0]).." "..tostring(bodyitem_index[1])) end function bfsyscall18(actor, arg1, arg2) local role_name = getbaseinfo(actor, 1) --release_print("收到通知", role_name, arg1, arg2) ontimer18(actor) end --每秒执行,跨服也执行 function ontimer18(actor) --setofftimer(actor, 18) if checkkuafuserver()--~=checkkuafu(actor) then -- release_print("本服通知触发跨服ontimer18") -- bfbackcall(18, getbaseinfo(actor, 2), "每秒执行") return end jhxbbgame.LogLuaMem() --local max_hp = getbaseinfo(actor, 10) --release_print("ontimer18 = ", max_hp * 0.01, jhxbbgame.ticksec(), checkkuafu(actor)) local cnt = 0 local vdata = { max_hp = getbaseinfo(actor, 10), hp = getbaseinfo(actor, 9), timecur = jhxbbgame.ticksec() } local myitems = getbodyitemindexs(actor, 23) --local log = {} for key, value in pairs(myitems) do vdata.zb = key if value and value.v then local v = VarInt(actor, value.v) --SetVarInt(actor, value.v,0) --release_print(".每秒11buf = ", value.v,v,vdata.timecur) if v > 0 and vdata.timecur <= v then value[10](actor, vdata) --release_print(".每秒22buf = ", value.v,VarInt(actor, value.v)) -- if then -- log[key] = { value.v, v } -- end end end cnt = cnt + 1 end -- if jhxbbgame.len(log) > 0 then -- jhxbbgame.log(actor, ".每秒buf = ", tbl2json(log)) -- end end function boomRange(player, r, eff) r = tonumber(r) local map_id = getbaseinfo(player, 3) local x = getbaseinfo(player, 4) local y = getbaseinfo(player, 5) local monster_list = getmapmon(map_id, "", x, y, r) local ret = #monster_list local pos = jhxbbgame.rpos[r] jhxbbgame.log(player, "boomRange----", #pos) for key, value in pairs(pos) do jhxbbgame.mapeff(player, eff, value.x + x, value.y + y) end if type(monster_list) == "table" then for k, mon in pairs(monster_list) do local mx = math.abs(getbaseinfo(mon, 4) - x) local my = math.abs(getbaseinfo(mon, 5) - y) jhxbbgame.log(player, "boomRange----", mx, my, r) if (mx == r and my <= r) or (mx <= r and my == r) then ret = jhxbbgame.DecHP(mon, 0.11) end end end jhxbbgame.log(player, "*boomRange" .. ret .. ",eff:" .. eff) end function canpush(actor, target,hiter, magid,result) --jhxbbgame.log(hiter,"*hiter",result) -- jhxbbgame.log(target,"->target") local ret = jhxbbgame.canpush(hiter, target) if ret then return 1 else return 2 end end function jhxbbgame.canpush(self, tag) local sr,tr = getbaseinfo(self, 39) , getbaseinfo(tag, 39) local sl,tl = getbaseinfo(self, 6) , getbaseinfo(tag, 6) local boret = (sr > tr) or ((sr == tr) and (sl > tl)) boret = boret or zbcfg.GetBodyItem(self, zbcfg.idxs[7]) or zbcfg.GetBodyItem(self, zbcfg.idxs[8]) jhxbbgame.log(self, "*canpush:", boret,sr , tr,sl,tl) return boret end function magtagfunc27(actor, target) if isnotnull(target) then if zbcfg.GetBodyItem(actor, zbcfg.idxs[7]) then makeposion(target, 5, 1) elseif zbcfg.GetBodyItem(actor, zbcfg.idxs[8]) then makeposion(target, 5, 2) end end end function magtag11111func1003(actor, target) if isnotnull(target) then if isplayer(actor) then local cnt = tonumber(jhxbbgame.CInt(actor, "<$ATTR[74]>")) * 2 jhxbbgame.sendmsg(actor, getbaseinfo(target, 5) .. "龙骨吞噬者+" .. cnt) end end end function magtagfunc66111(actor, target) --极度深寒 开天斩50%几率强制冰冻目标1秒 if isnotnull(target) then --jhxbbgame.HintEff(target, "极度深寒.神器") end end function magtagfunc71(actor, target) --擒龙手 if isnotnull(target) and jhxbbgame.canpush(actor, target) then makeposion(target,5,1.5) jhxbbgame.HintEff(target, "擒龙手.麻痹") jhxbbgame.HintEff(actor, "擒龙手.麻痹") end end function magtagfunc2012(actor, target) if isnotnull(target) then if isplayer(actor) then -- local cnt = tonumber(jhxbbgame.CInt(actor, "<$ATTR[74]>")) * 2 -- jhxbbgame.sendmsg(actor, -- getbaseinfo(target, 5) .. "tag龙骨吞噬者+" .. cnt) end end end function addwd(actor, time, hint) --changemode(actor,1,1) if isplayer(actor) then time = tonumber(time) if checkhumanstate(actor, 11, 1) then makeposion(actor, 0, 1, 0) end jhxbbgame.SettimeSec(actor, "N$无敌结束时间", time) jhxbbgame.showeff(actor, 141, time) jhxbbgame.log(actor, hint .. "+无敌") jhxbbgame.HintEff(actor, hint) else jhxbbgame.log(actor,getbaseinfo(actor,1), hint .. "+无gg敌") end end --技能释放 function beginmagic(actor, skillId, skillName, target, x, y) beginmagic6(actor, skillId, skillName, target, x, y) if "xdt316" == getbaseinfo(actor,3) and (skillId == 6 or skillId == 51) then return false end --jhxbbgame.GMLog(actor, "*",skillName,skillId,getbaseinfo(actor,3)) --jhxbbgame.log(actor, skillName..".2...="..getskilldqcd(actor,skillName)) --skillrestcd(actor,skillId,0) if VarInt(actor,"N$cd"..skillName) == 1 then jhxbbgame.log(actor, "*恢复CD.",skillName..".2...="..getskilldqcd(actor,skillName)) SetVarInt(actor,"N$cd"..skillName,0) setskilldeccd(actor,skillName,"=",0) end local vdata = { timecur = jhxbbgame.ticksec() } if skillId == 2002 then if jhxbbgame.timeSecAt(actor, "U138", vdata.timecur) then jhxbbgame.sendmsg(actor, "CD300秒") return false end jhxbbgame.SettimeSec(actor, "N$无敌结束时间", 3) jhxbbgame.SettimeSec(actor, "U138", 300) makeposion(actor, 12, 3) elseif skillId == 1002 then local bohave = false for key, value in pairs({ 7, 8, 9, 10, 11 }) do if checkhumanstate(actor, value) then bohave = true break end end if not bohave then for i = 1, 8, 1 do if checkhumanstate(actor, 12, i) then bohave = true break end end end if bohave and not jhxbbgame.timeSecAt(actor, "U019", vdata.timecur) then jhxbbgame.SettimeSec(actor, "U019", 180, vdata.timecur) delbuff(actor, 31126) delbuff(actor, 31121) delbuff(actor, 31124) delbuff(actor, 31118) delbuff(actor, 31119) detoxifcation(actor, -1) jhxbbgame.log(actor, "游龙万象*神技") jhxbbgame.HintEff(actor, "游龙万象*神技") end return elseif skillId == 1005 then if jhxbbgame.timeSecAt(actor, "U139", vdata.timecur) then jhxbbgame.sendmsg(actor, "CD300秒.") return false end jhxbbgame.SettimeSec(actor, "U139", 300) local mapid = getbaseinfo(actor, 3) local plays = getobjectinmap(mapid, x, y, 4, 1) jhxbbgame.mapeff(actor, 42, x, y) for key, value in pairs(plays) do if not ispropertarget(actor, value) then jhxbbgame.SettimeSec(value, "U150", 6) jhxbbgame.log(value, "火焰领主之冠.治愈") jhxbbgame.sendmsg(value, "火焰领主之冠.治愈") end end elseif skillId == 10051 then local timecur = jhxbbgame.ticksec() if jhxbbgame.timeSecAt(actor, "U139", timecur) then jhxbbgame.sendmsg(actor, "CD300秒.") return false end --jhxbbgame.SettimeSec(actor,"U139",300) jhxbbgame.sendmsg(actor, "Boom.") local eff = { 60450, 60451, 60452 } for i = 1, 3 do delaygoto(actor, i * 1000, "boomRange," .. (i * 2) .. "," .. eff[i], 1) end end local cnt = 0 local myitems = getbodyitemindexs(actor, 22) vdata.max_hp = getbaseinfo(actor, 10) or 1 vdata.hp = getbaseinfo(actor, 9) vdata.selfx = getbaseinfo(actor, 4) vdata.selfy = getbaseinfo(actor, 5) for key, value in pairs(myitems) do vdata.zb = key if zbcfg.cdpass(actor, vdata, nil, 2) then --local cfg = zbcfg.a21[value] local cfg = jhxbbgame.zb[key] --jhxbbgame.log(actor,"addbuff.a21:",cfg,value) if cfg and cfg[22] and cfg[22](actor, target, actor, skillId, 0, 0, vdata) then --release_print(value, ".释放技能A = ", skillId) zbcfg.cdupdate(actor, vdata, 3) end end cnt = cnt + 1 end end --受击 local cdmon = {} local posDamage = {} local MDposxy = {} local cdmon3 = {} function FnPosDamage(sysobj, Hiter) local cnt = posDamage[Hiter] or 0 local pos = MDposxy[Hiter] if cnt >= 1 and (pos) then cnt = cnt - 1 posDamage[Hiter] = cnt grobaldelaygoto(1000, "FnPosDamage," .. Hiter) local plays = getobjectinmap(pos[1], pos[2], pos[3], 2, 1) jhxbbgame.log(sysobj, "火焰泥潭.", jhxbbgame.len(plays)) for key, value in pairs(plays or {}) do local ret = jhxbbgame.DecHP(value, 0.2) jhxbbgame.log(value, "火焰泥潭.灼烧 -20%", ret) jhxbbgame.HintEff(value, "正在承受坤之火焰泥潭灼烧 血量-20%") end end end local strdamageing = 0 local strdamageingcnt = 0 function struckdamage(actor, Hiter, Target, MagicId, Damage) --struckdamage6(actor, Hiter, Target, MagicId, Damage) local dtime = gettcount64() local xbb = jhxbbgame if false --and hasbuff(actor, 31119) and isplayer(Target) then xbb.log(Target, "*struckdamage!" ,MagicId, getbaseinfo(Target, 5), ismon(Hiter),isplayer(Hiter)) --return 0 end local vdata = { timecur = xbb.ticksec() } svautoplay.struck(actor,Hiter,vdata) local hp = isplayer(Hiter) local hm = ismon(Hiter) local monmax = getbaseinfo(Target,12) if (not hp) and (not hm) and monmax > 0 then xbb.log(Hiter,"212.monmax:",monmax) return monmax end if isplayer(Target) and xbb.timeSecAt(Target, "N$万里雷霆衣19", vdata.timecur) then SetVarInt(Target, "N$万里雷霆衣19", 0) xbb.sendmsg(Hiter, "万里雷霆衣!免疫伤害") xbb.log(actor, Target, ".万里雷霆衣!免疫伤害", Damage) return 0 end if isplayer(Target) and xbb.timeSecAt(Target, "N$无敌结束时间", vdata.timecur) then xbb.HintEff(Hiter, "目标无敌中!免疫伤害") --jhxbbgame.HintEff(Target, "无敌中!免疫伤害1") xbb.log(actor, Target, ".无敌中!免疫伤害", Damage) xbb.showeff(Target, 141, 1) return 0 end if strdamageing == vdata.timecur then -- jhxbbgame.log(actor, "*Skip1. - ", strdamageingcnt,zbcfg.last, -- MagicId,zbcfg.last2) strdamageingcnt = strdamageingcnt + 1 return Damage end local retdam = Damage if isplayer(Target) and Target == actor then strdamageing = vdata.timecur vdata.max_hp = getbaseinfo(actor, 10) or 1 vdata.hp = getbaseinfo(actor, 9) vdata.selfx = getbaseinfo(actor, 4) vdata.selfy = getbaseinfo(actor, 5) if isplayer(Hiter) and isplayer(Target) and Target == actor then local myitems = getbodyitemindexs(actor, 3) local cnt = 0 --release_print(jhxbbgame.len(myitems).."struck.111.damage = ", Damage, MagicId) for i = 1, #myitems, 1 do local value = myitems[i] vdata.zb = value if zbcfg.cdpass(actor, vdata, 3) then local cfg = xbb.zb[value] zbcfg.last = value zbcfg.last2 = zbcfg.last if cfg and cfg[3] and cfg[3](actor, Target, Hiter, MagicId, Damage, 0, vdata) then zbcfg.cdupdate(actor, vdata, 3) --jhxbbgame.log(actor, value, ".被人物攻击 = ", Damage) end zbcfg.last = nil end cnt = cnt + 1 end elseif ismon(Hiter) then local myitems = getbodyitemindexs(actor, 5) local mid = tonumber(getbaseinfo(Hiter, 55)) - 2665 --release_print(Hiter, ".被怪物攻击 = ", mid, mcd) if mid == 1 then local mcd = tonumber(cdmon[Hiter]) if vdata.timecur >= mcd then cdmon[Hiter] = (vdata.timecur + 11) posDamage[Hiter] = 5 MDposxy[Hiter] = { getbaseinfo(Hiter, 3), vdata.selfx, vdata.selfy } --jhxbbgame.log(actor, "火焰泥潭.灼烧 -20%", jhxbbgame.any2str(false, MDposxy[Hiter])) xbb.mapeff(actor, 60344, nil, nil, nil, 5) grobaldelaygoto(1000, "FnPosDamage," .. Hiter) end elseif mid == 2 then if not zbcfg.GetBodyItem(actor, zbcfg.idxs[2]) then --local ret = xbb.DecHP(actor, 0.4) --jhxbbgame.log(actor, "忍术指环 -40%", ret) --jhxbbgame.HintEff(actor, "忍术指环") end elseif mid == 3 then local mcd = tonumber(cdmon3[Hiter]) if vdata.timecur >= mcd and (not zbcfg.GetBodyItem(actor, zbcfg.idxs[4])) then cdmon3[Hiter] = (vdata.timecur + 30) local ret = xbb.DecHP(actor, 0.1) makeposion(actor, 0, 10, ret) addbuff(actor, 31126, 10) --jhxbbgame.log(actor, "中毒伤害 -10%", ret) xbb.HintEff(actor, "中毒伤害") end end local cnt = 0 for i = 1, #myitems, 1 do local value = myitems[i] vdata.zb = value if zbcfg.cdpass(actor, vdata, 5) then local cfg = xbb.zb[value] zbcfg.last = value zbcfg.last2 = zbcfg.last if cfg and cfg[5] and cfg[5](actor, Target, Hiter, MagicId, Damage, 0, vdata) then zbcfg.cdupdate(actor, vdata, 3) --if > 0 then --jhxbbgame.log(value, ".被怪物攻击 = ", Damage) --end end zbcfg.last = nil end cnt = cnt + 1 end end local v = VarInt(actor, "D97") if v > 0 then --jhxbbgame.log(actor, "*寂静星魔铠.化血盾 - ", v) if v < retdam then retdam = retdam - v v = 0 else v = v - retdam retdam = 0 end xbb.showeff(actor, 141) SetVarInt(actor, "D97", v) end local xs = getbaseinfo(actor, 51, 223) if (vdata.pwRate and vdata.pwRate ~= 1) or xs > 0 then vdata.pwRate = (vdata.pwRate or 1) - (tonumber(getbaseinfo(actor, 51, 223)) / 100) if vdata.pwRate < 0 then --jhxbbgame.log(actor, "伤害.限制 = ", vdata.max_hp, vdata.pwRate) retdam = 0 else retdam = math.max(math.min(retdam * vdata.pwRate, 1000 * 10000), 0) end end if zbcfg.GetBodyItem(actor, zbcfg.idxs[13]) then local mhp = getbaseinfo(actor, 10) local v = math.floor(mhp * 0.33) if v > 0 and retdam > v then --jhxbbgame.log(actor, "炎君赤羽衣.限制 = ", v) retdam = math.min(retdam, v) end end if zbcfg.GetBodyItem(actor, zbcfg.idxs[14]) then local hpr = vdata.hp / vdata.max_hp if hpr <= 0.5 then local ret = math.floor(vdata.max_hp * 0.1) --jhxbbgame.log(actor, "末日灵魂披风.限制 = ", vdata.max_hp, ret) --jhxbbgame.HintEff(actor, "末日灵魂披风.限制" .. ret) retdam = math.min(retdam, ret) end end end if strdamageingcnt > 0 then xbb.log(actor, "*Skip.end. - ", strdamageingcnt,zbcfg.last, MagicId,zbcfg.last2) strdamageingcnt = 0 end strdamageing = 0 --release_print("attack.ret.damage = ",Damage,cnt) dtime = gettcount64()-dtime if dtime >= 60 then xbb.log(actor, getbaseinfo(actor, 1), "*dtime.end. - ", dtime,zbcfg.last, MagicId,zbcfg.last2, retdam) end return retdam end local attdamageing = 0 local attdamageingcnt = 0 function attackdamage(actor, -- object 玩家对象 Target, -- object 受击对象 Hiter, -- object 攻击对象 MagicId, -- integer 技能ID Damage, -- integer 伤害 Model -- integer 引擎64_23.10.24新增 当前攻击模式 ) --attacklong(actor, Target, Hiter, MagicId) -- if --true -- false -- then -- jhxbbgame.GMLog(Hiter, "*Att:",Model,MagicId,Damage,getbaseinfo(Target, 9),getbaseinfo(Target, 10)) -- end --jhxbbgame.GMLog(Hiter, ".怪物被攻击1= ", Model, MagicId,getbaseinfo(Target,12)) if Model ~= 0 then return Damage end local xbb = jhxbbgame -- local stime = gettcount64() kuafusys.pking(Target, actor,Damage) if isplayer(Hiter) and hasbuff(Hiter, 31119) then xbb.sendmsg(Hiter, "束缚中!攻击无效") xbb.log(Hiter, "*束缚中.攻击无效= ") return 0 end local hp = isplayer(Hiter) -- if isplayer(actor) -- and ismon(Target) -- --and hasbuff(actor, 31119) -- then -- --jhxbbgame.sendmsg(actor, MagicId.."attackdamage!攻击无效"..getbaseinfo(Target, 5)) -- return 0 -- end -- if isplayer(actor) -- and ismon(Target) -- --and hasbuff(actor, 31119) -- then -- --jhxbbgame.sendmsg(actor, Model.."attackdamage!"..getbaseinfo(Target, 5)) -- --return 0 -- end if hp -- and Model == 3 and MagicId == 1003 then -- local cnt = jhxbbgame.CInt(Hiter,"<$ATTR[74]>") -- cnt = jhxbbgame.DecHP(Target, cnt,101) -- jhxbbgame.sendmsg(Hiter, getbaseinfo(Target, 5) .. "龙骨吞噬者+" .. Model) return 0 end local retdam = Damage local vdata = { dam = 0, timecur = xbb.ticksec(), rate = math.random(1, 10000), hp = getbaseinfo(actor, 9), max_hp = getbaseinfo(actor, 10), tmax_hp = getbaseinfo(Target, 10), thp = getbaseinfo(Target, 9) } attackdamage6(actor, Target, Hiter, MagicId, Damage, Model,vdata) --jhxbbgame.GMLog(Hiter, ".怪物被攻击6= ", Model, MagicId,getbaseinfo(Target,12)) local hm = ismon(Hiter) local tp = isplayer(Target) local tm = ismon(Target) local monmax = getbaseinfo(Target,12) if (not hp) and (not hm) and monmax > 0 then --jhxbbgame.log(Hiter,"11.monmax:",monmax) --jhxbbgame.GMLog(Hiter, ".怪物被攻击.12= ", Model, MagicId,getbaseinfo(Target,12)) return monmax end vdata.selfx = getbaseinfo(actor, 4) vdata.selfy = getbaseinfo(actor, 5) --release_print("attack.111.damage = ", Damage, MagicId) if attdamageing == vdata.timecur then attdamageingcnt = attdamageingcnt + 1 -- jhxbbgame.log(actor, "*SkipAtt. - ",attdamageingcnt, zbcfg.last, -- MagicId,zbcfg.last2) --jhxbbgame.GMLog(Hiter, ".怪物被攻击.13= ", Model, MagicId,getbaseinfo(Target,12)) return Damage end --jhxbbgame.GMLog(Hiter, ".怪物被攻击.15= ", Model, MagicId,getbaseinfo(Target,12)) local function k95(aretdam) if tm and xbb.MonCanBuf(Target) then if getflagstatus(actor, 103) == 1 and (vdata.thp / vdata.tmax_hp)>=0.96 then --jhxbbgame.HintEff(actor, "坠天使") aretdam = aretdam + vdata.tmax_hp * 0.1 end end return aretdam end attdamageing = vdata.timecur if tp then if xbb.timeSecAt(Target, "D96", vdata.timecur) then xbb.sendmsg(Target, "九天繁星衣免疫中") elseif xbb.timeSecAt(Target, "N$无敌结束时间", vdata.timecur) then xbb.sendmsg(Target, "无敌中!免疫伤害") else local myitems = getbodyitemindexs(actor, 1) local cnt = 0 ---release_print("attack.222.damage = ", jhxbbgame.len(myitems)) for i = 1, #myitems, 1 do local value = myitems[i] vdata.zb = value if zbcfg.cdpass(actor, vdata, 1) then local cfg = xbb.zb[value] zbcfg.last = value zbcfg.last2 = zbcfg.last if cfg and cfg[1] and cfg[1](actor, Target, Hiter, MagicId, Damage, 0, vdata) then zbcfg.cdupdate(actor, vdata, 1) --jhxbbgame.log(value, ".攻击人物 = ", Damage) end zbcfg.last = nil end cnt = cnt + 1 end local vv = VarInt(actor, "U018") if vv > 0 then vv = vdata.thp*(vv / 100) --local hpv = xbb.DecHP(Target, vv) --jhxbbgame.log(Hiter, "*对人切割百分比= ", vv, hpv) end end elseif tm then local mid1 = tonumber(getbaseinfo(Target, 55)) if 2679 == mid1 then if MagicId > 100 then retdam = 1 end elseif monmax <= 0 then local mid = mid1 - 2665 --jhxbbgame.GMLog(Hiter, ".怪物被攻击= ", mid, mid1,getbaseinfo(Target,12)) if (mid >= 1) and (mid <= 8) then local kv = VarInt(actor, "N$对坤切割") if (kv > 0) then kv = xbb.DecHP(Target,kv,119,nil,nil,nil,nil,kv) --jhxbbgame.HintEff(actor, "对坤切割+"..kv) end end if mid == 3 then if (not zbcfg.GetBodyItem(actor, zbcfg.idxs[4])) then --jhxbbgame.log(actor, "四大路坤:坤〔毒〕〕免疫", ret) xbb.HintEff(actor, "坤〔毒〕〕免疫") return k95(0) end elseif mid == 4 then if (not zbcfg.GetBodyItem(actor, zbcfg.idxs[2])) or (not zbcfg.GetBodyItem(actor, zbcfg.idxs[4])) then --jhxbbgame.log(actor, "五大陆坤〔毒〕免疫", ret) xbb.HintEff(actor, "坤4〔毒〕〕免疫") return k95(0) end elseif mid == 5 then if (not zbcfg.GetBodyItem(actor, zbcfg.idxs[1])) then --jhxbbgame.log(actor, "六大陆坤〔御〕免疫", ret) xbb.HintEff(actor, "坤5〔御〕〕免疫") return k95(0) else return retdam + vdata.tmax_hp * 0.01 end elseif mid == 6 then if (not zbcfg.GetBodyItem(actor, zbcfg.idxs[5])) then --jhxbbgame.log(actor, "七大陆坤〔速〕免疫", ret) xbb.HintEff(actor, "坤6〔速〕〕免疫") return k95(0) end end if vdata.hp < vdata.max_hp then local monxx = xbb.CInt(actor, "<$ATTR[209]>") if hasbuff(actor, 31126) or hasbuff(actor, 31132) then --jhxbbgame.HintEff(actor, "*对怪吸血无效" .. monxx) --jhxbbgame.log(actor, "*对怪吸血无效", monxx) monxx = 0 end if monxx > 0 then --local ret = xbb.IncHP(actor, monxx) --jhxbbgame.log(actor, "*对怪吸血+", monxx,ret) end end local myitems = getbodyitemindexs(actor, 2) local cnt = 0 --jhxbbgame.GMLog(actor,jhxbbgame.len(myitems),"attack.ismon.damage = ", Damage, MagicId) for i = 1, #myitems, 1 do local value = myitems[i] vdata.zb = value --jhxbbgame.GMLog(actor,value, "*-cd.攻击怪物 = ", Target) if zbcfg.cdpass(actor, vdata, 2) then local cfg = xbb.zb[value] zbcfg.last = value zbcfg.last2 = zbcfg.last --jhxbbgame.GMLog(actor,value, "*攻击怪物 = ", Target) if cfg and cfg[2] and cfg[2](actor, Target, Hiter, MagicId, Damage, Model, vdata) then zbcfg.cdupdate(actor, vdata, 1) if 0 > 0 then --jhxbbgame.log(actor,value, ".攻击怪物 = ", Target) end end zbcfg.last = nil end cnt = cnt + 1 end end local vv = tonumber(getconst(actor, "<$ATTR[231]>")) if vv > 0 then local dc = tonumber(getconst(actor, "<$ATTR[4]>")) local dv = dc*(vv / 10000) --local hpv = xbb.DecHP(Target, dv,116) --jhxbbgame.log(Hiter, Model,MagicId,"*对怪增伤= ", hpv) end if monmax > 0 then retdam = math.min(retdam,monmax) end end if attdamageingcnt > 0 then xbb.log(actor, "*SkipAtt.end. - ", attdamageingcnt,zbcfg.last, MagicId,zbcfg.last2) attdamageingcnt = 0 end attdamageing = 0 --release_print("attack.ret.damage = ",Damage,cnt) if vdata.pwRate and vdata.pwRate ~= 1 then retdam = math.max(math.min(retdam * vdata.pwRate, 1000 * 10000), 0) end -- stime = gettcount64()-stime -- if stime >= 60 then -- jhxbbgame.log(actor, getbaseinfo(actor, 1), "*stime.end. - ", stime,zbcfg.last, -- MagicId,zbcfg.last2, retdam) -- end return k95(retdam) end function zbcfg.idx(actor, item) return getiteminfo(actor, item, 2) end function zbcfg.build() zbcfg.zbx = {} zbcfg.zbd = {} zbcfg.zbr = {} zbcfg.zbi = {} zbcfg.a21 = {} zbcfg.tim = {} for key, value in pairs(jhxbbgame.zb) do if value and value[15] then zbcfg.zbx[key] = value[15] end if value and value[16] then zbcfg.zbd[key] = value[16] end if value and value[17] then zbcfg.zbr[key] = value[17] end if value and value[21] then zbcfg.a21[key] = value[21] end if value and value[10] then zbcfg.tim[key] = value end end jhxbbgame.log(nil,".zbcfg.build(zbx,zbd,zbr) = ", jhxbbgame.len(zbcfg.zbx), jhxbbgame.len(zbcfg.zbd), jhxbbgame.len(zbcfg.zbr), jhxbbgame.len(zbcfg.tim), jhxbbgame.len(zbcfg.a21)) end function attackdamagebb(actor, -- object 玩家对象 Target, -- object 受击对象 Hiter, -- object 攻击对象 MagicId, -- integer 技能ID Damage -- integer 伤害 ) --jhxbbgame.log(actor, ".zbcfg.attackdamagebb() = ") --jhxbbgame.DecHP(Target, 10000) --攻击怪物时概率召唤5只地狱骷髅为你助战,骷髅刀刀对怪物造成20000固定伤害。持续60秒,期间骷髅处于无敌状态(cd180秒) if ismon(Target) and jhxbbgame.MonCanBuf(Target) then jhxbbgame.DecHP(Target, 20000,101) return 0 else return Damage end end function zbcfg.run(actor) --jhxbbgame.log(actor,"*run",getconst(actor,"<$MAP>")) kuafusys.run(actor) if hasbuff(actor, 31121) then --local ret = jhxbbgame.DecHP(actor, 0.05) jhxbbgame.showeff(actor, 14) --jhxbbgame.HintEff(actor, "奇毒") end end function attacklong(actor, Target, Hiter, MagicId) end function humanhpex(actor, monster_guid) if monster_guid then local mapID = getbaseinfo(actor, 3) local monobj = getmonbyuserid(mapID, monster_guid) if isnotnull(monobj) and jhxbbgame.MonCanBuf(monobj) then -- local x = getbaseinfo(actor, 4) -- local y = getbaseinfo(actor, 5) --monmission(monobj,tostring(x)..";",tostring(y)..";",0) local damage = getbaseinfo(actor, 20) --sendattackeff(monobj,107,damage,"*") humanhp(monobj, "-", damage, 1, 0, actor, 1, 1) --makeposion(monobj,0,3,1,1) end end end function qixinxin(actor,a) local vdata ={} vdata.m = getbaseinfo(actor, 3) vdata.selfx = getbaseinfo(actor, 4) vdata.selfy = getbaseinfo(actor, 5) local cnt = tonumber(getconst(actor, "<$ATTR[74]>")) local plays = getobjectinmap(vdata.m ,vdata.selfx,vdata.selfy,4,2) dotaunt(actor,5,999999) --jhxbbgame.log(actor, "*七星问斩.",jhxbbgame.len(plays),cnt) for i = 1, #plays, 1 do local val = plays[i] local ret = jhxbbgame.DecHP(val,cnt,101,nil,nil,actor) sendattackeff(val,101, ret) --sendattackeff(actor,113,ret) --jhxbbgame.HintEff(actor, "八方炎龙.-100%="..ret) end end function modaodao(actor,Target) --SetVarInt(actor, "N$魔刀千刃CD", 0) local vdata ={} vdata.selfx = getbaseinfo(actor, 4) vdata.selfy = getbaseinfo(actor, 5) local cfg = {} if isnotnull(Target) then cfg = { getbaseinfo(Target, 2) } end local mapID = getbaseinfo(actor, 3) local mons = getobjectinmap(mapID, vdata.selfx,vdata.selfy, 6, 2) if #mons < 2 then return end --local pw = tonumber(getconst(actor, "<$MAXDC>")) --jhxbbgame.sendmsg(actor, "魔刀千刃:" .. pw) dotaunt(actor, 8, 999999) for i, mon in ipairs(mons or {}) do local mid1 = tonumber(getbaseinfo(mon, 55)) if Target ~= mon and 2679 ~= mid1 then local mid = getbaseinfo(mon, 2) cfg[#cfg + 1] = mid delaygoto(actor, 200 * i, "humanhpex," .. mid, 0) --jhxbbgame.DecHP(mon, pw, nil, nil, nil, actor) if #cfg >= 8 then break end end end sendluamsg(actor, 0xeff, 0, 0, 23, tbl2json(cfg)) end function attack(actor, Target, Hiter, MagicId) local vdata = { timecur = jhxbbgame.ticksec() } local gb = getbaseinfo --attack6(actor, Target, Hiter, MagicId) --sendluamsg(actor, 0xeff, 10, --0,60549,getbaseinfo(actor,2)) --jhxbbgame.log(Hiter,"*60546") if MagicId == 56 then sendattackeff(actor, 114,1) elseif MagicId == 66 then sendattackeff(actor, 115,1) elseif MagicId == 26 then sendattackeff(actor, 118,1) end if isplayer(Target) then jhxbbgame.SettimeSec(actor,"U27",5,os.time()) kuafusys.pking(Target) kuafusys.pking(actor) jhxbbgame.SetPKFlag(Target, 2) jhxbbgame.SetPKFlag(Hiter, 3) elseif ismon(Target) then jhxbbgame.SettimeSec(actor,"U27",3,os.time()) svautoplay.attack(actor, vdata) if checkkuafuserver() then local monxx = jhxbbgame.CInt(actor, "<$ATTR[224]>") if monxx > 0 then jhxbbgame.DecHP(Target,monxx,107, nil,nil,nil,nil,monxx+1) sendattackeff(Target,107,monxx,actor) --jhxbbgame.HintEff(actor, "坠天使11") end end if jhxbbgame.MonCanBuf(Target) then local mid1 = tonumber(gb(Target, 55)) if 2679 ~= mid1 then makeposion(Target, 0, 3) local cnt = 0 vdata.max_hp = gb(actor, 10) or 1 vdata.hp = gb(actor, 9) vdata.m = gb(actor, 3) vdata.selfx = gb(actor, 4) vdata.selfy = gb(actor, 5) -- local myitems = getbodyitemindexs(actor, 21) -- for key, value in pairs(myitems) do -- vdata.zb = key -- if zbcfg.cdpass(actor, vdata) then -- --local cfg = zbcfg.a21[value] -- local cfg = jhxbbgame.zb[key] -- --jhxbbgame.log(actor,"addbuff.a21:",cfg,value) -- if cfg and cfg[21] and cfg[21](actor, Target, Hiter, MagicId, 0, 0, vdata) then -- --release_print(value, ".怪物被攻击A = ", 0) -- zbcfg.cdupdate(actor, vdata, 3) -- end -- end -- cnt = cnt + 1 -- end --开始龙魂爆发状态下,攻击时3%概率触发七星问斩技能, --对5x5范围内的敌人,造成100%的切割伤害。 local bb = (math.random(1,10000)<=300) --jhxbbgame.HintEff(actor, tostring(jhxbbgame.GetRate).."七星问斩.-100%="..tostring(bb)) if true and bb and (VarInt(actor, "U251") > os.time()) then delaygoto(actor, 100, "qixinxin,"..Target , 1) jhxbbgame.mapSelfeff(actor,60518) sendattackeff(actor,113, cnt,actor) end if getflagstatus(actor, 102) == 1 and (math.random(1,10000)<=900) and not jhxbbgame.timeSecAt(actor, "N$魔刀千刃CD", vdata.timecur) then jhxbbgame.SettimeSec(actor,"N$魔刀千刃CD",10) --delaygoto(actor, 1, "modaodao,"..Target , 1) modaodao(actor,Target) end end end end end release_print(".zbcfg.load() = ")