1461 lines
48 KiB
Lua
1461 lines
48 KiB
Lua
function takeonex(actor, -- object 玩家对象
|
||
item, --object 物品对象
|
||
where, --integer 穿/脱位置
|
||
itemName, --string 物品名
|
||
makeindex --integer
|
||
)
|
||
local idx = 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 777
|
||
offidx = oldtoint(offidx) or 0
|
||
--jhxbbgame.log(actor, ".delayequipchg.init = ")
|
||
makebodyitemindexs(actor, nil, 1+tp*100, offidx)
|
||
end
|
||
function zbcfg.reload(actor,tp,offidx)
|
||
tp = tp or 666
|
||
offidx = offidx or 0
|
||
delayequipchg(actor,tp,offidx)
|
||
--jhxbbgame.delayone(actor, 588, "delayequipchg",","..tp..","..offidx)
|
||
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() = ")
|