LianJi.lua 25 KB

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