LianJi.lua 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. LianJi = {}
  2. local this = LianJi;
  3. local filename = "LianJi";
  4. this.msgId = 90001025 --data [1]类型 0数据通知 l领取 2投资
  5. this.TotalConfig = {
  6. unlockItemName = "SD果实", --解锁连击功能道具名字
  7. addLianJi = { --连击加成道具配置
  8. itemName = "SD果实", --连击加成道具
  9. attr_id = 310012, --增加的属性id
  10. add_value = 10, --使用一个增加的属性值
  11. max_count = 6000, --最大使用数量
  12. },
  13. addSD = { --增加SD护盾道具配置
  14. itemName = "SD果实", --增加SD护盾道具
  15. attr_id = 301011, --增加的属性id
  16. add_value = 100, --增加的属性值
  17. max_count = 9000,
  18. },
  19. time = 3, --触发时间(秒)
  20. lianji_skill = 0, --最终的连击技能id
  21. --[[ 配置说明
  22. key(int):职业id
  23. key(int):连击方案index
  24. key(int):技能阶段 通常为【启动技】(StringList)-【衔接技】(StringList ,可为nil 或有多个衔接技) .... -【迸发技】(StringList)
  25. 各阶段[1]:为初始默认设置
  26. attr_name:方案对应cfg_att_info attribute值 只有1项时不分分支 属性值最高的生效
  27. ]]
  28. list = { --连击表
  29. [1] = {
  30. {
  31. { "旋风斩" },
  32. { "霹雳回旋斩", "雷霆裂闪" },
  33. { "袭风刺", "致命一击" },
  34. attr_name = "strength",
  35. },
  36. },
  37. [2] = {
  38. {
  39. { "冰封" },
  40. { "黑龙波术", "血龙波术" },
  41. { "爆炎术", "爆裂炎术" },
  42. },
  43. },
  44. [3] = {
  45. {
  46. { "冰封箭", "冰封冽箭" },
  47. { "多重箭" },
  48. { "穿透箭", "穿透刺箭" },
  49. },
  50. },
  51. [4] = {
  52. {
  53. { "天雷闪" },
  54. { "霹雳回旋斩" },
  55. { "玄月斩" },
  56. attr_name = "strength",
  57. },
  58. {
  59. { "掌心雷" },
  60. { "闪电轰顶" },
  61. attr_name = "intelligence",
  62. },
  63. },
  64. },
  65. list2 = {
  66. [1] = {
  67. [1100003] = 1, -- 旋风斩
  68. [1100005] = 1, -- 天地十字剑
  69. [1100004] = 1, -- 牙突刺
  70. [1100002] = 1, -- 地裂斩
  71. [1100001] = 1, -- 升龙击
  72. [1100006] = 2, -- 霹雳回旋斩
  73. [1100009] = 2, -- 雷霆裂闪
  74. [1100010] = 2, -- 致命一击
  75. [1100008] = 3, -- 袭风刺
  76. }
  77. }
  78. }
  79. this.charge_type = 21; --投资
  80. ---以下是实现逻辑 非程序误擅自改动
  81. local DBVar = "ZC_LianJi"; -- 连击
  82. local OpenVar = "ZC_LianJiOpenFlag"; -- 连击开启标记
  83. local AutoLianJiVar = "AutoLianJiVar"; -- 自动连击状态
  84. local LianJiRateItemVar = "ZC_LianJiRateItemVar"; -- 连击开启标记
  85. local SDHuDunItemVar = "ZC_SDHuDunItemVar"; -- 连击开启标记
  86. ; --连击db变量
  87. --[[
  88. DBVar={
  89. index顺序:首发技能名
  90. index顺序:衔接技能名 (可为nil)
  91. ...
  92. ...
  93. index顺序:释放技能名
  94. first_skill_time:起手技能释放时间/上一阶段技能释放时间
  95. jieduan:当前释放阶段
  96. }
  97. ]]
  98. function tableHasValue(ta, value)
  99. for i, v in ipairs(ta) do
  100. if v == value then
  101. return true
  102. end
  103. end
  104. return false
  105. end
  106. function APIGetTable(actor, varName, var_type)
  107. local val = nil
  108. if var_type == 0 then
  109. val = getplaydef(actor, "J$" .. varName)
  110. elseif var_type == 1 then
  111. val = getplaydef(actor, "@" .. varName)
  112. else
  113. val = getplaydef(actor, "T$" .. varName)
  114. end
  115. return val
  116. end
  117. ---设置玩家table变量 val类型必须是table var_type 0天变量 1缓存变量 其它正常保存数据库变量
  118. function APISetTable(actor, varName, val, var_type)
  119. if type(val) ~= "table" then
  120. return
  121. end
  122. if var_type == 0 then
  123. setplaydef(actor, "J$" .. varName, val)
  124. elseif var_type == 1 then
  125. setplaydef(actor, "@" .. varName, val)
  126. else
  127. setplaydef(actor, "T$" .. varName, val)
  128. -- info("记录成功",val,getplaydef(actor,"T$"..varName))
  129. end
  130. end
  131. function APIGetInt(actor, varName, var_type)
  132. local val = 0
  133. if var_type == 0 then
  134. val = getplaydef(actor, "J$" .. varName)
  135. elseif var_type == 1 then
  136. val = getplaydef(actor, "@" .. varName)
  137. else
  138. val = getplaydef(actor, "T$" .. varName)
  139. end
  140. return val or 0
  141. end
  142. ---设置玩家Int变量 val类型必须是number
  143. function APISetInt(actor, varName, val, var_type)
  144. if type(val) ~= "number" then
  145. return
  146. end
  147. if var_type == 0 then
  148. return setplaydef(actor, "J$" .. varName, val)
  149. elseif var_type == 1 then
  150. return setplaydef(actor, "@" .. varName, val)
  151. else
  152. return setplaydef(actor, "T$" .. varName, val)
  153. end
  154. end
  155. --获取数据
  156. function LianJi.getdata(actor)
  157. local dbdata = APIGetTable(actor, DBVar)
  158. return dbdata;
  159. end
  160. --检查开启
  161. function LianJi.checkOpen(actor)
  162. return APIGetInt(actor, OpenVar) == 1;
  163. -- return true
  164. end
  165. --刷新属性
  166. function LianJi.RefreshAttr(actor)
  167. if not LianJi.checkOpen(actor) then
  168. return
  169. end
  170. local lianji_count = APIGetInt(actor, LianJiRateItemVar)
  171. local sd_count = APIGetInt(actor, SDHuDunItemVar)
  172. local attr_tab = {}
  173. if lianji_count > 0 then
  174. attr_tab[this.TotalConfig.addLianJi.attr_id] = this.TotalConfig.addLianJi.add_value * lianji_count
  175. end
  176. if sd_count > 0 then
  177. attr_tab[this.TotalConfig.addSD.attr_id] = this.TotalConfig.addSD.add_value * sd_count
  178. end
  179. addrolekmlattributes(actor, AttCfg.LianJiGuoShiAtt, attr_tab)
  180. end
  181. --初始化默认连击
  182. function LianJi.InitLianJi(actor)
  183. local data = {}
  184. local baseCareer = getbaseinfo(actor, "getbasecareer")
  185. local conf = this.TotalConfig.list[baseCareer];
  186. if conf == nil then
  187. gameDebug.print("连击初始化错误,对应职业配置为nil,baseCareer=" .. baseCareer)
  188. return
  189. end
  190. if #conf > 1 then
  191. -- local strength = getattrinfo(actor, "strength")
  192. -- local agility = getattrinfo(actor, "agility")
  193. -- local intelligence = getattrinfo(actor, "intelligence")
  194. -- local stamina = getattrinfo(actor, "stamina")
  195. local max_key = ""
  196. local max_value = 0;
  197. for k, v in pairs(conf) do
  198. if v.attr_name then
  199. local value = getattrinfo(actor, v.attr_name)
  200. if value > max_value then
  201. max_key = k
  202. max_value = value
  203. end
  204. end
  205. end
  206. conf = conf[max_key]
  207. data.fangan = max_key
  208. else
  209. conf = conf[1]
  210. data.fangan = 1
  211. end
  212. if conf == nil then
  213. gameDebug.print("连击初始化错误2,对应职业配置为nil,baseCareer=" .. baseCareer)
  214. return
  215. end
  216. for i = 1, #conf do
  217. local skill_id = ConfigDataManager.getTableValue("cfg_skill", "id", "name", conf[i][1]);
  218. data[i] = skill_id
  219. end
  220. APISetTable(actor, DBVar, data)
  221. return data
  222. end
  223. --数据通知
  224. function LianJi.DataNotify(actor)
  225. if LianJi.checkOpen(actor) then
  226. local data = LianJi.getdata(actor)
  227. if data == nil then
  228. data = LianJi.InitLianJi(actor)
  229. end
  230. local conf = this.TotalConfig;
  231. local auto_state = APIGetInt(actor, AutoLianJiVar)
  232. local rate_count = APIGetInt(actor, LianJiRateItemVar)
  233. local sd_count = APIGetInt(actor, SDHuDunItemVar)
  234. sendluamsg(actor, this.msgId, {
  235. 0,
  236. conf,
  237. data,
  238. auto_state = auto_state,
  239. rate_count = rate_count,
  240. sd_count =
  241. sd_count
  242. })
  243. end
  244. end
  245. function APISendCenterMsg(actor, msg, color, log)
  246. if not color then
  247. tipinfo(actor, msg)
  248. else
  249. tipinfo(actor, "<color='" .. color .. "'>" .. msg .. "</color>")
  250. end
  251. if log then
  252. error(getbaseinfo(actor, "rolename"), msg)
  253. end
  254. end
  255. --连击设置变化请求
  256. function LianJi.LianJiChange(actor, jieduan, skillName, fangan)
  257. if not LianJi.checkOpen(actor) then
  258. APISendCenterMsg(actor, "连击未解锁,请使用" .. this.TotalConfig.unlockItemName .. "解锁")
  259. return
  260. end
  261. local data = LianJi.getdata(actor)
  262. if data == nil then
  263. data = LianJi.InitLianJi(actor)
  264. end
  265. fangan = fangan or 1
  266. -- info("data",fangan,data)
  267. if fangan ~= data.fangan then
  268. APISendCenterMsg(actor, "此方案未使用,不能设置")
  269. return
  270. end
  271. local skill_id = ConfigDataManager.getTableValue("cfg_skill", "id", "name", skillName);
  272. if data[jieduan] == skill_id then
  273. APISendCenterMsg(actor, "请勿重复设置")
  274. return
  275. end
  276. local skill_level = getskilllevel(actor, skill_id)
  277. if skill_level <= 0 then
  278. APISendCenterMsg(actor, "连击设置失败,未解锁" .. skillName)
  279. return
  280. end
  281. local baseCareer = getbaseinfo(actor, "getbasecareer")
  282. local conf = this.TotalConfig.list[baseCareer][data.fangan][jieduan];
  283. if conf == nil then
  284. APISendCenterMsg(actor, "连击配置为nil,请联系管理员,basecareer=" .. baseCareer .. " fangan=" .. data.fangan, nil, true)
  285. return
  286. end
  287. if not tableHasValue(conf, skillName) then
  288. APISendCenterMsg(actor, skillName .. "不能设置")
  289. return
  290. end
  291. data[jieduan] = skill_id;
  292. APISetTable(actor, DBVar, data)
  293. APISendCenterMsg(actor, "连击" .. jieduan .. "阶段," .. skillName .. "设置成功", "#00ff00")
  294. sendluamsg(actor, this.msgId, { 1, data })
  295. end
  296. function APItblkeytonumber(tbl)
  297. local newTable = {}
  298. for key, value in pairs(tbl) do
  299. local newKey = tonumber(key) or key
  300. if type(value) == "table" then
  301. newTable[newKey] = APItblkeytonumber(value)
  302. else
  303. newTable[newKey] = value
  304. end
  305. end
  306. return newTable
  307. end
  308. function LianJi.FangAnChange(actor, data)
  309. if not LianJi.checkOpen(actor) then
  310. APISendCenterMsg(actor, "连击未解锁,请使用" .. this.TotalConfig.unlockItemName .. "解锁")
  311. return
  312. end
  313. data = APItblkeytonumber(data)
  314. local baseCareer = getbaseinfo(actor, "getbasecareer")
  315. local conf = this.TotalConfig.list[baseCareer][data.fangan];
  316. if conf == nil then
  317. APISendCenterMsg(actor, "连击配置为nil,请联系管理员,basecareer=" .. baseCareer .. " fangan=" .. data.fangan, nil, true)
  318. return
  319. end
  320. -- info("???",data,#data,conf)
  321. for i = 1, #data do
  322. local skillName = ConfigDataManager.getTableValue("cfg_skill", "name", "id", data[i]);
  323. -- info("skillName",conf[i])
  324. if not tableHasValue(conf[i], skillName) then
  325. APISendCenterMsg(actor, skillName .. "不能设置")
  326. return
  327. end
  328. end
  329. APISetTable(actor, DBVar, data)
  330. APISendCenterMsg(actor, "连击方案替换成功", "#00ff00")
  331. sendluamsg(actor, this.msgId, { 1, data })
  332. end
  333. --自动连击状态变化请求
  334. function LianJi.AutoLianJiChange(actor)
  335. if not LianJi.checkOpen(actor) then
  336. APISendCenterMsg(actor, "连击未解锁,请使用" .. this.TotalConfig.unlockItemName .. "解锁")
  337. return
  338. end
  339. local data = LianJi.getdata(actor)
  340. if data == nil then
  341. APISendCenterMsg(actor, "开启自动连击失败,未设置连击")
  342. -- return
  343. end
  344. for i = 1, #data do
  345. if getskilllevel(actor, data[i]) <= 0 then
  346. local skill_name = ConfigDataManager.getTableValue("cfg_skill", "name", "id", data[i]);
  347. APISendCenterMsg(actor, "开启自动连击失败," .. skill_name .. "未解锁")
  348. return
  349. end
  350. end
  351. local auto_state = APIGetInt(actor, AutoLianJiVar)
  352. auto_state = auto_state == 1 and 0 or 1;
  353. APISetInt(actor, AutoLianJiVar, auto_state)
  354. APISendCenterMsg(actor, auto_state == 1 and "已开启自动连击" or "已关闭自动连击", "#00ff00")
  355. sendluamsg(actor, this.msgId, { 2, auto_state })
  356. end
  357. function APICheck(check_str, have_count, itemNum)
  358. check_str = check_str or ">="
  359. local result = true;
  360. if check_str == ">" or check_str == nil then
  361. if have_count <= itemNum then
  362. result = false
  363. end
  364. elseif check_str == "<" then
  365. if have_count >= itemNum then
  366. result = false
  367. end
  368. elseif check_str == "==" then
  369. if have_count ~= itemNum then
  370. result = false
  371. end
  372. elseif check_str == ">=" then
  373. if have_count < itemNum then
  374. result = false
  375. end
  376. elseif check_str == "<=" then
  377. if have_count > itemNum then
  378. result = false
  379. end
  380. end
  381. return result
  382. end
  383. function APICheckItem(actor, tcl, desc)
  384. if not next(tcl) then
  385. return false
  386. end
  387. for k, v in pairs(tcl) do
  388. if type(k) ~= "string" then
  389. local itemName = v[1]; --类型为变化或者道具时可用 道具名或者变量名
  390. local itemNum = tonumber(v[2]); --对应类型需要的检查值
  391. local bangding = v[3] or v.bind; --是否绑定 道具用 暂无用
  392. local item_type = v[4] or v.mold; --类型 1或者nil道具 2 Int变量 3开服天数 4龙魂连击等级 玩家等级 转职
  393. local var_type = v[5] or v.var_type; --变量类型 nil 存盘 0日变量 1 缓存小退清零
  394. local check_str = v[6] or v.checkStr; -- == > < >= <=
  395. local def_str = v[7] or v.desc --检查失败后的默认消息提示 不传没有
  396. -- info(v,itemName)
  397. if not item_type or item_type == 1 then
  398. local itemID = ConfigDataManager.getTableValue("cfg_item", "id", "name", itemName)
  399. local hasCount = getbagitemcountbyid(actor, itemID)
  400. if hasCount < itemNum then
  401. if desc then
  402. if desc ~= "" then
  403. APISendCenterMsg(actor, desc)
  404. end
  405. else
  406. APISendCenterMsg(actor, itemName .. "不足")
  407. end
  408. return false
  409. end
  410. --2 Int变量
  411. elseif item_type == 2 then
  412. local have_count = APIGetInt(actor, itemName, var_type)
  413. -- info(v,itemName,have_count)
  414. def_str = def_str or "变量不足!"
  415. if APICheck(check_str, have_count, itemNum) == false then
  416. if def_str and desc ~= "" then
  417. APISendCenterMsg(actor, def_str)
  418. end
  419. return false
  420. end
  421. --3 开服天数
  422. elseif item_type == 3 then
  423. local have_count = tonumber(getserveropendays(actor))
  424. -- info("开服天数",have_count)
  425. if APICheck(check_str, have_count, itemNum) == false then
  426. if def_str then
  427. APISendCenterMsg(actor, def_str)
  428. end
  429. return false
  430. end
  431. elseif item_type == 4 then
  432. -- local comboSkill = getrolefield(actor,"role.roleskill.comboskill")
  433. -- local have_count = comboSkill.skillLv
  434. local have_count = APIGetInt(actor, "ZC_NewDragonSoulComboLevel")
  435. if not APICheck(check_str, have_count, itemNum) then
  436. if desc then
  437. if desc ~= "" then
  438. APISendCenterMsg(actor, desc)
  439. end
  440. else
  441. APISendCenterMsg(actor, "龙魂连击等级不足")
  442. end
  443. return false
  444. end
  445. elseif item_type == "玩家等级" then
  446. local cur_level = tonumber(getbaseinfo(actor, "level")) or 0
  447. if APICheck(check_str, cur_level, itemNum) == false then
  448. if desc then
  449. if desc ~= "" then
  450. APISendCenterMsg(actor, desc)
  451. end
  452. else
  453. APISendCenterMsg(actor, "等级不足,需要" .. itemNum .. "级")
  454. end
  455. return false
  456. end
  457. elseif item_type == "转职" then
  458. local data = APIGetTable(actor, "ZC_ZhuanZhiVar") or {}
  459. local count = data.count or 0;
  460. if APICheck(check_str, count, itemNum) == false then
  461. if desc then
  462. if desc ~= "" then
  463. APISendCenterMsg(actor, desc)
  464. end
  465. else
  466. APISendCenterMsg(actor, "请" .. itemNum .. "转后再来吧")
  467. end
  468. return false
  469. end
  470. end
  471. end
  472. end
  473. -- info("来了122133","成功了澳")
  474. return true
  475. end
  476. function APItakeItem(actor, tcl, desc)
  477. if not next(tcl) then
  478. return false
  479. end
  480. if APICheckItem(actor, tcl) == false then
  481. return false
  482. end
  483. for k, v in pairs(tcl) do
  484. if type(k) ~= "string" then
  485. local itemName = v[1]
  486. local itemNum = tonumber(v[2])
  487. local bangding = v[3];
  488. local item_type = v[4] or v.mold; --检查 1或者nil道具 2 Int变量
  489. local var_type = v[5];
  490. if not item_type or item_type == 1 then
  491. local itemID = ConfigDataManager.getTableValue("cfg_item", "id", "name", itemName)
  492. removeitemfrombag(actor, itemID, itemNum, 0, 9999, desc)
  493. --2 Int变量
  494. elseif item_type == 2 then
  495. local var = APIGetInt(actor, itemName, var_type)
  496. var = var - itemNum
  497. APISetInt(actor, itemName, var, var_type)
  498. end
  499. end
  500. end
  501. return true
  502. end
  503. --增加连击加成
  504. function LianJi.addLianJiRate(actor, count)
  505. local add_count = APIGetInt(actor, LianJiRateItemVar)
  506. local conf = this.TotalConfig.addLianJi
  507. if add_count >= conf.max_count then
  508. APISendCenterMsg(actor, conf.itemName .. "使用已达上限")
  509. return
  510. end
  511. count = math.min(count, conf.max_count - add_count)
  512. if not APItakeItem(actor, { { conf.itemName, count } }, "连击") then
  513. return
  514. end
  515. APISetInt(actor, LianJiRateItemVar, add_count + count)
  516. LianJi.RefreshAttr(actor)
  517. APISendCenterMsg(actor, conf.itemName .. "使用成功,连击加成增加" .. (count * conf.add_value / 100) .. "%", "#00ff00")
  518. sendluamsg(actor, this.msgId, { 3, add_count + count })
  519. end
  520. --增加sd护盾
  521. function LianJi.addSDHuDun(actor, count)
  522. local add_count = APIGetInt(actor, SDHuDunItemVar)
  523. local conf = this.TotalConfig.addSD
  524. if add_count >= conf.max_count then
  525. APISendCenterMsg(actor, conf.itemName .. "使用已达上限")
  526. return
  527. end
  528. count = math.min(count, conf.max_count - add_count)
  529. if not APItakeItem(actor, { { conf.itemName, count } }, "连击") then
  530. return
  531. end
  532. APISetInt(actor, SDHuDunItemVar, add_count + count)
  533. LianJi.RefreshAttr(actor)
  534. APISendCenterMsg(actor, conf.itemName .. "使用成功,SD护盾值增加" .. count * conf.add_value, "#00ff00")
  535. sendluamsg(actor, this.msgId, { 4, add_count + count })
  536. end
  537. --玩家登录 login调用
  538. function LianJi.onLoginEnd(actor)
  539. -- LianJi.RefreshAttr(actor)
  540. LianJi.DataNotify(actor)
  541. APISetInt(actor, "ZC_LainJiRelease", 0)
  542. end
  543. --交互 handlerequest调用
  544. function LianJi.onHandlereQuest(actor, msgid, sMsg)
  545. --登录奖励领取
  546. if msgid == this.msgId then
  547. if sMsg[1] == 0 then
  548. --数据请求
  549. LianJi.DataNotify(actor)
  550. elseif sMsg[1] == 1 then
  551. --连击技能替换
  552. LianJi.LianJiChange(actor, sMsg[2], sMsg[3], sMsg[4])
  553. elseif sMsg[1] == 2 then
  554. --自动连击状态变化
  555. LianJi.AutoLianJiChange(actor, sMsg[2])
  556. elseif sMsg[1] == 3 then
  557. --增加连击加成
  558. LianJi.addLianJiRate(actor, sMsg[2])
  559. elseif sMsg[1] == 4 then
  560. --增加sd护盾
  561. LianJi.addSDHuDun(actor, sMsg[2])
  562. elseif sMsg[1] == 5 then
  563. --方案替换
  564. LianJi.FangAnChange(actor, sMsg[2])
  565. end
  566. return true
  567. end
  568. end
  569. --重载配置 reloadscript调用
  570. function LianJi.onReloadScript(actor)
  571. if LianJi.checkOpen(actor) then
  572. sendluamsg(actor, this.msgId, { -1, this.TotalConfig })
  573. end
  574. end
  575. function LianJi.Unlock(actor)
  576. APISetInt(actor, OpenVar, 1)
  577. APISendCenterMsg(actor, "恭喜解锁连击功能", "#00ff00")
  578. local comboSkill = getrolefield(actor, "role.roleskill.comboskill")
  579. local skillLv = comboSkill.skillLv
  580. local skillCfgId = comboSkill.skillCfgId
  581. if skillCfgId == 0 then
  582. local comboSkillInfo = ConfigDataManager.getTableValue("cfg_global", "value", "id", 1501)
  583. local baseCareer = getbaseinfo(actor, "getbasecareer")
  584. local comboSkillTable = string.split(comboSkillInfo, "|")
  585. for index, careerComboSkill in pairs(comboSkillTable) do
  586. local careerComboSkillInfo = string.split(careerComboSkill, "#")
  587. if tonumber(careerComboSkillInfo[1]) == tonumber(baseCareer) then
  588. skillCfgId = tonumber(careerComboSkillInfo[2])
  589. end
  590. end
  591. addcomboskill(actor, skillCfgId, 1)
  592. end
  593. LianJi.InitLianJi(actor)
  594. LianJi.DataNotify(actor)
  595. end
  596. --gm解锁连击
  597. function LianJi.OnGmUnlockLianji(actor, career_name)
  598. LianJi.Unlock(actor)
  599. end
  600. --道具使用后触发 useitemtrigger 调用
  601. function LianJi.onUseItem(actor, itemConfigId, count)
  602. local item_name = ConfigDataManager.getTableValue("cfg_item", "name", "id", itemConfigId)
  603. -- if this.TotalConfig.unlockItemName ~= item_name then
  604. -- return
  605. -- end
  606. if itemConfigId ~= 30030105 then
  607. return
  608. end
  609. LianJi.Unlock(actor)
  610. end
  611. function LianJi.isLainJiSkill(strSkillid, data)
  612. for index, value in ipairs(data) do
  613. if value == strSkillid then
  614. return true
  615. end
  616. end
  617. return false
  618. end
  619. function LianJi.releaseskill(actor, skillid, skilllevel, targetlist)
  620. if not LianJi.checkOpen(actor) then
  621. return 0
  622. end
  623. local strSkillId = tostring(skillid)
  624. local nowsec = getbaseinfo(actor, "nowsec")
  625. local lianjiTime = APIGetInt(actor, "ZC_LainJiTime", 1)
  626. APISetInt(actor, "ZC_LainJiTime", nowsec, 1)
  627. local lianJiSkillIndex = this.TotalConfig.list2[1][skillid] or 0
  628. local lianjiDatas = APIGetTable(actor, "ZC_LianJiSkills", 1) or {}
  629. if nowsec - lianjiTime > 15 or lianJiSkillIndex == 0 or lianJiSkillIndex == 1 or lianjiDatas[1] == nil then
  630. -- 连击中断
  631. local skills = {}
  632. if lianJiSkillIndex == 1 then
  633. skills[lianJiSkillIndex] = 1
  634. end
  635. APISetTable(actor, "ZC_LianJiSkills", skills, 1)
  636. return
  637. end
  638. local isRepeatReleases = lianjiDatas[lianJiSkillIndex] ~= nil;
  639. if isRepeatReleases then
  640. local skills = {}
  641. skills[strSkillId] = 1
  642. APISetTable(actor, "ZC_LianJiSkills", skills, 1)
  643. return
  644. end
  645. lianjiDatas[lianJiSkillIndex] = 1
  646. if table.count(lianjiDatas) <= 2 then
  647. APISetTable(actor, "ZC_LianJiSkills", lianjiDatas, 1)
  648. return
  649. end
  650. if targetlist[1] == nil then
  651. return
  652. end
  653. APISetTable(actor, "ZC_LianJiSkills", {}, 1)
  654. APISetInt(actor, "ZC_LainJiRelease", 1)
  655. -- local targetId = targetlist[1].toString();
  656. -- skill(actor, skillid, skilllevel, targetId)
  657. end
  658. -- function setcombovaluebefore(actor, skillCfgId, skillLevel, skill)
  659. -- return 0
  660. -- end
  661. function setcombovaluebefore(actor, skillCfgId, skillLevel, skill)
  662. local isRelease = APIGetInt(actor, "ZC_LainJiRelease") or 0
  663. -- info("setcombovaluebefore")
  664. if isRelease == 1 then
  665. APISetInt(actor, "ZC_LainJiRelease", 0)
  666. return 100000
  667. end
  668. return 0
  669. end
  670. -- function setcombovaluebefore(actor, skillCfgId, skillLevel, skill)
  671. -- -- info("没走吗??")
  672. -- if not LianJi.checkOpen(actor) then
  673. -- return 0
  674. -- end
  675. -- local skill_name = ConfigDataManager.getTableValue("cfg_skill", "name", "id", skill);
  676. -- -- APISendCenterMsg(actor,"释放技能"..skill_name,nil,true)
  677. -- local data = LianJi.getdata(actor);
  678. -- local now = getbaseinfo("nowsec");
  679. -- local jieduan = (data.jieduan and data.jieduan or 0) + 1
  680. -- data.first_skill_time = data.first_skill_time or 0
  681. -- if now > data.first_skill_time + this.TotalConfig.time then
  682. -- jieduan = 0;
  683. -- end
  684. -- if tonumber(data[1]) == skill then
  685. -- jieduan = 1;
  686. -- sendluamsg(actor, this.msgId, { 5 })
  687. -- end
  688. -- -- info("释放技能", data[jieduan] and data[jieduan] == skillid,skillid,data[jieduan],type(skillid),type(data[jieduan]))
  689. -- if data[jieduan] and tonumber(data[jieduan]) == skill then
  690. -- data.jieduan = jieduan;
  691. -- data.first_skill_time = now
  692. -- APISetTable(actor, DBVar, data)
  693. -- -- else
  694. -- -- data.jieduan = 1
  695. -- end
  696. -- if jieduan == #data then
  697. -- -- APISendCenterMsg(actor,"连击技能释放成功"..skillCfgId,nil,true)
  698. -- return 10000
  699. -- end
  700. -- return 0
  701. -- end