-- require("Envir/QuestDiary/config/VarCfg.lua") -- require("Envir/Market_Def/denglujiemian.lua") --获取玩家自定义数值变量 function getint(player,bianlian) return GetInt(0,player,bianlian) end --获取玩家自定义字符变量 function getstr(player,bianlian) return GetStr(0,player,bianlian) end --设置玩家自定义数值变量 function setint(player,bianlian,zhi) SetInt(0,player,bianlian,zhi) end --设置玩家自定义字符变量 function setstr(player,bianlian,zhi) SetStr(0,player,bianlian,zhi) end --获取自定义数值系统变量 function getsysint(bianlian) return GetSysInt(bianlian) end --获取自定义字符系统变量 function getsysstr(bianlian) return GetSysStr(bianlian) end --设置自定义数值系统变量 function setsysint(bianlian,value,itype) if not itype then itype = 0 end if type(value) ~= "number" then release_print("SetTempDBInt类型错误:" .. type(value)) return end SetSysInt(bianlian,value,itype) end --设置自定义字符系统变量 function setsysstr(bianlian,value,itype) if not itype then itype = 0 end if type(value) ~= "string" then release_print("SetDBStr类型错误:" .. type(value)) return end SetSysStr(bianlian,value,itype) end --设置全局临时I变量 function SetIVar(index, value, itype) if not itype then itype = 0 end if index > 99 then release_print("SetTempDBInt超出范围:" .. index) return end if type(value) ~= "number" then release_print("SetTempDBInt类型错误:" .. type(value)) return end SetSysInt("I" .. index, value, itype) end --获取全局临时I变量 function GetIVar(index) if index > 99 then release_print("GetTempDBInt超出范围:" .. index) return end return GetSysStr("I" .. index) end --设置全局A变量 function SetAVar(index, value, itype) if not itype then itype = 0 end if index > 499 then release_print("SetDBStr超出范围:" .. index) return end if type(value) ~= "string" then release_print("SetDBStr类型错误:" .. type(value)) return end SetSysStr("A" .. index, value, itype) end --获取全局A变量 function GetAVar(index) if index > 499 then release_print("GetDBStr超出范围:" .. index) return end return GetSysStr("A" .. index) end --设置全局G变量 function SetGVar(index, value, itype) if not itype then itype = 0 end if index > 499 then release_print("SetDBInt超出范围:" .. index) return end if type(value) ~= "number" then release_print("SetDBInt类型错误:" .. type(value)) return end SetSysStr("G" .. index, value, itype) end --获取全局G变量 function GetGVar(index) if index > 499 then release_print("GetDBInt超出范围:" .. index) return end return GetSysStr("G" .. index) end --获取玩家数值型天变量 function getdayint(actor,bianliang) local biao = {} local s = GetStr(0,actor,"Z0") local n = 0 if s ~= "" then local z = json2tbl(s) if not z then SetStr(0,actor,"Z0","") end for k,v in pairs(z) do if k == bianliang then n = v break end end end return n end --设置玩家数值型天变量 function setdayint(actor,bianliang,num) if type(num) ~= "number" then return end local biao = {} local s = GetStr(0,actor,"Z0") if s ~= "" then biao = json2tbl(s) end biao[bianliang] = num SetStr(0,actor,"Z0",tbl2json(biao)) end --获取玩家字符型天变量 function getdaystr(actor,bianliang) local biao = {} local s = GetStr(0,actor,"Z1") local n = "" if s ~= "" then local z = json2tbl(s) if not z then SetStr(0,actor,"Z1","") end for k,v in pairs(z) do if k == bianliang then n = v break end end end return n end --设置玩家字符型天变量 function setdaystr(actor,bianliang,str) if type(str) ~= "string" then return end local biao = {} local s = GetStr(0,actor,"Z1") if s ~= "" then biao = json2tbl(s) end biao[bianliang] = str SetStr(0,actor,"Z1",tbl2json(biao)) end --检查一个对象的范围 function FCheckRange(obj, x, y, range) local cur_x, cur_y = getbaseinfo(obj, 4), getbaseinfo(obj, 5) local min_x, max_x = x-range, x+range local min_y, max_y = y-range, y+range if (cur_x >= min_x) and (cur_x <= max_x) and (cur_y >= min_y) and (cur_y <= max_y) then return true end return false end --带颜色的字符串 function sencolormsg(actor,idx,msg,co1,co2) local x = getconst(actor,'$SCREENWIDTH') * 0.5 local y = getconst(actor,'$SCREENHEIGHT') * 0.65 sendcustommsg(actor,idx,msg,co1,co2,x,y) end --获取宠物宝宝列表 function getbaobaolist(actor) local t = {} local ncount=getbaseinfo(actor,38) for i = 0 ,ncount-1 do mon = getslavebyindex(actor, i) table.insert(t,mon) end return t end --发送消息类型9 function sendmsg9(actor,msg,yanse,miaobian) if yanse == nil then yanse = "#FFFFFF" end if miaobian == nil then if getispc(actor) then miaobian = 1 else miaobian = 0 end end sendmsg(actor,1,[[{"Msg":" ]]..msg..[[ ","Type":9,"Time":"1"}]]) end --发送提示消息 function sendmsg6(actor,msg,yanse) if yanse == nil then yanse = "#ff0000" end callscriptex(actor, "SENDMSG", 6, "".. msg .."") end --全区上部缩放系统公告 function sendmsg13(actor,msg) sendmsg(actor,2,'{"Msg":"'.. msg ..'","FColor":255,"BColor":0,"Type":13,"Time":5}') end --全区聊天框系统公告 function sendmsg0(actor,msg,qianse,house) qianse = qianse or 255 --前景色 house = house or 56 --背景色 sendmsg(actor,2,'{"Msg":"'.. msg ..'","FColor":'.. qianse ..',"BColor":'.. house ..',"Type":1}') end --获取对象名字 function getname(actor) --名字 return getbaseinfo(actor,1) end --获取对象地图id function getmap(actor) --地图id return getbaseinfo(actor,3) end --获取对象x坐标 function getx(actor) --x坐标 return getbaseinfo(actor,4) end --获取对象y坐标 function gety(actor) --y坐标 return getbaseinfo(actor,5) end --获取等级 function getlevel(actor) --等级 return getbaseinfo(actor,6) end --设置等级 function setlevel(actor,zhi) --等级 changelevel(actor,"=",zhi) --setbaseinfo(actor,6,zhi) end --获取转生等级 function getzslevel(actor) return getbaseinfo(actor,39) end --获取职业 function getjob(actor) --职业0 1 2 战法道 return getbaseinfo(actor,7) end --设置职业 function setjob(actor,zhi) --职业0 1 2 战法道 setbaseinfo(actor,7,zhi) end --获取性别 function getsex(actor) --性别0男1女 return getbaseinfo(actor,8) end --设置性别 function setsex(actor,zhi) --性别0男1女 setbaseinfo(actor,8,zhi) end --判断是否为PC还是手机 function getispc(actor) --获取是否电脑端 if getconst(actor,"<$CLIENTFLAG>") == "1" then return true else return false end end --获取什么方式进入h5 -- 1=横版 -- 2=PC竖版 -- 3=PCWEB 横版 -- 4=PCWEB 竖版 -- 5=ios手机网页 横板 -- 6=ios手机网页 竖版 -- 7=安卓手机网页 横板 -- 8=安卓手机网页 竖版 -- 9=微信ios 横板 -- 10=微信ios 竖版 -- 11=微信安卓 横板 -- 12=微信安卓 竖版 function geth5state(actor) local state = tonumber(getconst(actor,"<$CLIENTFLAGH5>")) return state end ----屏幕大小 function getpingmusize(actor) return tonumber(getconst(actor,"<$CLIENTFLAG>")),tonumber(getconst(actor,"<$SCREENHEIGHT>")) end --天数差 function getDateNum(timeNow, timeNext) local ret = 0 if timeNow and timeNext then local now = os.date("*t", timeNow) local next = os.date("*t", timeNext) if now and next then local num1 = os.time({ year = now.year, month=now.month, day=now.day }) local num2 = os.time({ year = next.year, month=next.month, day=next.day }) if num1 and num2 then ret = math.abs(num1 - num2) / (3600*24) end end end return ret end --获取开区天数 function getkaiquday() local kqtime = getsysint("开区时间") --开区时间戳 if kqtime == 0 then return 1 end local curtime = os.time() --当前时间戳 return getDateNum(curtime,kqtime) + 1 end --获取背包物品数量 function itemcount(actor,name) local ncount=getbaseinfo(actor,34) --获取背包物品数量 local sl = 0 for i = 0 ,ncount-1 do local item = getiteminfobyindex(actor, i) --根据索引返回对象 local itemid = getiteminfo(actor,item,2) --物品id local iname = getstditeminfo(itemid,1) if iname == name then if getiteminfo(actor,item,5) == 0 then sl = sl + 1 else sl = sl + getiteminfo(actor,item,5) --叠加数量 end end end return sl end --是否在背包 function isinbag(actor,item) local ncount=getbaseinfo(actor,34) --获取背包物品数量 for i = 0 ,ncount-1 do local item1 = getiteminfobyindex(actor, i) --根据索引返回对象 if item1 == item then return true end end return false end --是否在装备栏 function isinrole(actor,makeid) for i = 0 ,100 do local item = linkbodyitem(actor,i) if item ~= "0" and makeid == getiteminfo(actor,item,1) then return true end end return false end --获取物品总幸运 function getluck(actor,item) local itemid = getiteminfo(actor,item,2) local jichuluck = getstditematt(itemid,39) --基础幸运 local addluck = getitemaddvalue(actor,item,1,5) --极品幸运 return jichuluck + addluck end --根据物品对象获取物品名称 function getitemname(actor,item,zidingyiname) --玩家 道具 自定义名字 if zidingyiname == 1 then local jsonstr = getitemcustomabil(actor,item) if jsonstr ~= "" then local json_t = json2tbl(jsonstr) if json_t["name"] ~= "" then return json_t["name"] end end end local id = getiteminfo(actor,item,2) return getstditeminfo(id,1) end --根据名字获取物品id function getidbyname(name) return getstditeminfo(name,0) end --获取背包物品对象列表 function getbaglist(actor) local t = {} local ncount=getbaseinfo(actor,34) local str = "" for i = 0 ,ncount-1 do table.insert(t,getiteminfobyindex(actor, i)) end return t end --获取人物装备列表 function getrolelist(actor) local t = {} for i = 0,100 do local item = linkbodyitem(actor,i) if item ~= "0" then table.insert(t,item) end end return t end -------物品标识使用段 标识范围0-31 --标识1 是否禁止捡取 function getisjianqu(actor,item) --是否禁止捡取 return getitemaddvalue(actor,item,3,1) end function setisjianqu(actor,item,zhi) --设置是否禁止捡取 setitemaddvalue(actor,item,3,1,zhi) end --标识2 是否捡取触发过 function getisjianquguo(actor,item) --是否禁止捡取 return getitemaddvalue(actor,item,3,2) end function setisjianquguo(actor,item,zhi) --设置是否禁止捡取 setitemaddvalue(actor,item,3,2,zhi) end --标识3 是否怪物爆 function getisguaibao(actor,item) --获取是否怪物爆出 return getitemaddvalue(actor,item,3,3) end function setisguaibao(actor,item,zhi) --设置是否怪物爆出 setitemaddvalue(actor,item,3,3,zhi) end ------- -----物品记录信息无效属性使用 --属性34 主属性 function getitem_sxzsx(actor,item) --升星主属性 return getitemaddvalue(actor,item,1,34) end function setitem_sxzsx(actor,item,zhi) -- setitemaddvalue(actor,item,1,34,zhi) end --属性35 防御 function getitem_sxfy(actor,item) --升星防御 return getitemaddvalue(actor,item,1,35) end function setitem_sxfy(actor,item,zhi) -- setitemaddvalue(actor,item,1,35,zhi) end --属性36 魔防 function getitem_sxmf(actor,item) --升星魔防 return getitemaddvalue(actor,item,1,36) end function setitem_sxmf(actor,item,zhi) -- setitemaddvalue(actor,item,1,36,zhi) end --属性37 祥运值 function getitem_zfz(actor,item) --祥运值 return getitemaddvalue(actor,item,1,37) end function setitem_zfz(actor,item,zhi) -- setitemaddvalue(actor,item,1,37,zhi) end --属性38 法宝融合编号 function getitem_fabaozhi(actor,item) --法宝融合编号 return getitemaddvalue(actor,item,1,38) end function setitem_fabaozhi(actor,item,zhi) --法宝融合编号 setitemaddvalue(actor,item,1,38,zhi) end --属性39 锻魂装备 function getitem_duanhun(actor,item) return getitemaddvalue(actor,item,1,39) end function setitem_duanhun(actor,item,zhi) setitemaddvalue(actor,item,1,39,zhi) end --属性40 武器神秘属性 function getitem_wqsmsx(actor,item) return getitemaddvalue(actor,item,1,40) end function setitem_wqsmsx(actor,item,zhi) setitemaddvalue(actor,item,1,40,zhi) end --属性39 武穆遗书等级 function getitem_wmyslv(actor,item) --武穆遗书等级 return getitemaddvalue(actor,item,1,39) end function setitem_wmyslv(actor,item,zhi) --武穆遗书等级 setitemaddvalue(actor,item,1,39,zhi) end --属性40 武穆遗书经验 和酒气值 共用属性 不冲突 function getitem_wmysjy(actor,item) --武穆遗书经验 return getitemaddvalue(actor,item,1,40) end function setitem_wmysjy(actor,item,zhi) --武穆遗书经验 setitemaddvalue(actor,item,1,40,zhi) end function getitem_jiuqizhi(actor,item) --酒气值 return getitemaddvalue(actor,item,1,40) end function setitem_jiuqizhi(actor,item,zhi) --酒气值 setitemaddvalue(actor,item,1,40,zhi) end function getitem_lhdyzlv(actor,item) --获取龙魂帝印珠等级 return getitemaddvalue(actor,item,1,39) end function setitem_lhdyzlv(actor,item,zhi) --设置龙魂帝印珠等级 setitemaddvalue(actor,item,1,39,zhi) end function getitem_lhdyztupolv(actor,item) --获取龙魂帝印珠突破等级 return getitemaddvalue(actor,item,1,40) end function setitem_lhdyztupolv(actor,item,zhi) --设置龙魂帝印珠突破等级 setitemaddvalue(actor,item,1,40,zhi) end function getitem_lhdyzlyxd(actor,item) --获取龙胤血盾上限 return getitemaddvalue(actor,item,1,41) end function setitem_lhdyzlyxd(actor,item,zhi) --设置龙胤血盾上限 setitemaddvalue(actor,item,1,41,zhi) end function getitem_lhdyzdxbl(actor,item) --获取抵消比例 return getitemaddvalue(actor,item,1,42) end function setitem_lhdyzdxbl(actor,item,zhi) --设置抵消比例 setitemaddvalue(actor,item,1,42,zhi) end function getitem_lhdyzxdcf(actor,item) --获取血盾触发上限 return getitemaddvalue(actor,item,1,43) end function setitem_lhdyzxdcf(actor,item,zhi) --设置血盾触发上限 setitemaddvalue(actor,item,1,43,zhi) end function getitem_lhdyzcurxd(actor,item) --获取当前龙胤血盾 return getitemaddvalue(actor,item,1,44) end function setitem_lhdyzcurxd(actor,item,zhi) --设置当前龙胤血盾 setitemaddvalue(actor,item,1,44,zhi) end function getitem_zhanqijy(actor,item) --神弧经验值 return getitemaddvalue(actor,item,1,40) end function setitem_zhanqijy(actor,item,zhi) --神弧经验值 setitemaddvalue(actor,item,1,40,zhi) end function getitem_zhanqilv(actor,item) --神弧等级 return getitemaddvalue(actor,item,1,39) end function setitem_zhanqilv(actor,item,zhi) --神弧等级 setitemaddvalue(actor,item,1,39,zhi) end --成长属性 神弧下限 function getitem_zhanqixiaxian(actor,item) --神弧下限 return getitemaddvalue(actor,item,2,9) end function setitem_zhanqixiaxian(actor,item,zhi) --神弧下限 setitemaddvalue(actor,item,2,9,zhi) end --成长属性 神弧上限 function getitem_zhanqishangxian(actor,item) --神弧上限 return getitemaddvalue(actor,item,2,10) end function setitem_zhanqishangxian(actor,item,zhi) --神弧上限 setitemaddvalue(actor,item,2,10,zhi) end -- 装备成长属性核心逻辑(修正版) -- 参数说明: -- actor - 玩家对象 -- item - 装备物品ID -- reforgeCount - 当前重塑次数(从1开始,仅重塑模式有效) -- isReforge - 是否为重塑模式(true=重塑,false=普通升级) function givezqczattr(actor, item, reforgeCount, isReforge) -- 1. 基础数据获取 local item_name = getitemname(actor, item) local item_color = getstditeminfo(item_name, 13) -- 品质颜色:255,250,254,253,70,249 -- 职业属性ID映射:[职业] = {下限属性, 上限属性} -- 明确对应关系:索引1=下限(3,5,7),索引2=上限(4,6,8) local shuxingid_t = { [0] = {3, 4}, -- 职业0:下限3,上限4 [1] = {5, 6}, -- 职业1:下限5,上限6 [2] = {7, 8} -- 职业2:下限7,上限8 } local t = shuxingid_t[getjob(actor)] -- 当前职业的属性组 -- 当前上下限属性值 local currentLower = getitem_zhanqixiaxian(actor, item) -- 下限值(对应3,5,7) local currentUpper = getitem_zhanqishangxian(actor, item) -- 上限值(对应4,6,8) -- 2. 配置表:各品质的最大属性点和初始概率 local qualityConfig = { [255] = { maxPoint = 15, initProb = 5 }, -- 白色 [250] = { maxPoint = 20, initProb = 15 }, -- 绿色 [254] = { maxPoint = 25, initProb = 25 }, -- 蓝色 [253] = { maxPoint = 30, initProb = 35 }, -- 紫色 [70] = { maxPoint = 30, initProb = 45 }, -- 橙色 [249] = { maxPoint = 30, initProb = 55 } -- 红色 } local cfg = qualityConfig[item_color] or qualityConfig[255] -- 默认配置 -- 3. 检查是否已达最大属性点 local totalPoint = currentLower + currentUpper if totalPoint >= cfg.maxPoint then return false -- 已达上限,不再添加属性 end -- 4. 计算属性添加概率(重塑模式动态递增) local addProb = cfg.initProb -- 基础概率 if isReforge then -- 各品质达到100%概率所需的重塑次数 local maxReforgeTimes = { [255] = 30, [250] = 30, [254] = 30, [253] = 40, [70] = 20, [249] = 10 } local maxTimes = maxReforgeTimes[item_color] or 30 -- 概率随重塑次数递增(最高100%) addProb = math.min( cfg.initProb + (100 - cfg.initProb) * (reforgeCount / maxTimes), 100 ) end -- 5. 判断是否触发属性添加 if math.random(1, 100) > addProb then return false -- 未触发属性添加 end -- 6. 计算上下限分配概率(重塑模式动态调整) local upperProb -- 上限属性(4,6,8)的分配概率(%) if isReforge then -- 各品质的上限概率配置:{初始概率, 最大次数, 每次增长步长} local upperRateConfig = { [255] = {10, 100, 1}, -- 白色:10%起始,逐步增长 [250] = {20, 100, 1}, -- 绿色:20%起始,逐步增长 [254] = {30, 100, 1}, -- 蓝色:30%起始,逐步增长 [253] = {30, 40, 1.75}, -- 紫色:30%起始,40次满 [70] = {40, 20, 3}, -- 橙色:40%起始,20次满 [249] = {50, 10, 5} -- 红色:50%起始,10次满 } local uCfg = upperRateConfig[item_color] or upperRateConfig[255] -- 计算当前上限概率(不超过100%) upperProb = math.min( uCfg[1] + (reforgeCount - 1) * uCfg[3], 100 ) else -- 普通升级模式:固定30%上限,70%下限 upperProb = 30 end -- 7. 确定添加上限还是下限(关键修正:确保upperProb对应上限属性) local attrType -- 1=上限属性(4,6,8),2=下限属性(3,5,7) if math.random(1, 100) <= upperProb then -- 命中上限概率:添加上限属性(4,6,8) attrType = (currentUpper < cfg.maxPoint - currentLower) and 1 or 2 else -- 未命中上限概率:添加下限属性(3,5,7) attrType = (currentLower < cfg.maxPoint - currentUpper) and 2 or 1 end -- 8. 执行属性更新(明确对应关系) if attrType == 1 then -- 添加上限属性(4,6,8) setitem_zhanqishangxian(actor, item, currentUpper + 1) else -- 添加下限属性(3,5,7) setitem_zhanqixiaxian(actor, item, currentLower + 1) end -- 9. 应用属性组(t[2]对应上限属性,t[1]对应下限属性) local targetAttrId = (attrType == 1) and t[2] or t[1] callscriptex(actor, "SETADDNEWABIL", 16, "+" ,"3#".. targetAttrId .."#1") return true end -- 重塑成长属性流程(执行30次成长判断) function reforgeZqczAttr(actor, item) -- 重置当前上下限属性(重塑前清零) setitem_zhanqixiaxian(actor, item, 0) setitem_zhanqishangxian(actor, item, 0) -- 执行30次重塑成长逻辑 for reforgeCount = 1, 30 do givezqczattr(actor, item, reforgeCount, true) end return true end --神弧神秘属性重塑次数 function getitem_shenhusmsxchongsu(actor,item) --神弧神秘属性重塑次数 return getitemaddvalue(actor,item,1,41) end function setitem_shenhusmsxchongsu(actor,item,zhi) --神弧神秘属性重塑次数 setitemaddvalue(actor,item,1,41,zhi) end --神弧成长属性重塑次数 function getitem_shenhuczsxchongsu(actor,item) --神弧成长属性重塑次数 return getitemaddvalue(actor,item,1,42) end function setitem_shenhuczsxchongsu(actor,item,zhi) --神弧成长属性重塑次数 setitemaddvalue(actor,item,1,42,zhi) end --神秘属性 神弧神秘属性编号 function getitem_zhanqismsxbh(actor,item) --神弧神秘属性编号 return getitemaddvalue(actor,item,1,43) end function setitem_zhanqismsxbh(actor,item,zhi) --神弧神秘属性编号 setitemaddvalue(actor,item,1,43,zhi) end --属性2 8 项链洗练次数 function getitem_xlxlcs(actor,item) --项链洗练次数 return getitemaddvalue(actor,item,2,8) end function setitem_xlxlcs(actor,item,zhi) --项链洗练次数 setitemaddvalue(actor,item,2,8,zhi) end --属性2 7 到期时间 function getitem_daoqishijian(actor,item) --到期时间 return getitemaddvalue(actor,item,2,7) end function setitem_daoqishijian(actor,item,zhi) --到期时间 setitemaddvalue(actor,item,2,7,zhi) end --属性2 11 沙巴克标识 function getitem_shabake(actor,item) --沙巴克标识 return getitemaddvalue(actor,item,2,11) end function setitem_shabake(actor,item,zhi) --沙巴克标识 setitemaddvalue(actor,item,2,11,zhi) end ----- --是否绑定 function isbind(actor,item) if getitemaddvalue(actor,item,2,1) == 0 then return false else return true end end -------货币操作 ----获取金币绑金总数 function getbindgold(actor) return getbindmoney(actor,"金币") end ----扣除金币 优先扣除绑定金币 function subbindgold(actor,num,beizhu) if beizhu == nil then beizhu = "" end if num > 0 then post(actor,beizhu.."通用金币货币消耗*"..num) end consumebindmoney(actor,"金币",num) end --加绑定金币 function addbindgold(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,8,"+",num,beizhu,true) end ---获取单获取金币 function getgold(actor) return querymoney(actor,7) end ---获取单获取绑定金币 function getbindjinbi(actor) return querymoney(actor,8) end --加金币 function addgold(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,7,"+",num,beizhu,true) end --减金币 function subgold(actor,num,beizhu) if beizhu == nil then beizhu = "" end if num > 0 then post(actor,beizhu.."非绑定金币货币消耗*"..num) end return changemoney(actor,7,"-",num,beizhu,true) end ----获取元宝绑元总数 function getbindyb(actor) return getbindmoney(actor,"元宝") end ----扣除元宝 优先扣除绑定元宝 function subbindyuanbao(actor,num,beizhu) if beizhu == nil then beizhu = "" end if num > 0 then -- post(actor,beizhu.."通用元宝货币消耗*"..num) end consumebindmoney(actor,"元宝",num) end --加绑定元宝 function addbindyuanbao(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,4,"+",num,beizhu,true) end ---获取单获取元宝 function getyuanbao(actor) return querymoney(actor,2) end ---获取单获取绑定元宝 function getbindyuanbao(actor) return querymoney(actor,4) end --加元宝 function addyuanbao(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,2,"+",num,beizhu,true) end --减元宝 function subyuanbao(actor,num,beizhu) if beizhu == nil then beizhu = "" end if num > 0 then post(actor,beizhu.."非绑定元宝货币消耗*"..num) end return changemoney(actor,2,"-",num,beizhu,true) end --获得军功数量 function getjungong(actor) return querymoney(actor,20) end --加军功 function addjungong(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,20,"+",num,beizhu,true) end --减军功 function subjungong(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,20,"-",num,beizhu,true) end --获得声望数量 function getshengwang(actor) return querymoney(actor,15) end --加声望 function addshengwang(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,15,"+",num,beizhu,true) end --减声望 function subshengwang(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,15,"-",num,beizhu,true) end --获得天赋点数量 function gettianfudian(actor) return querymoney(actor,5) end --加天赋点 function addtianfudian(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,5,"+",num,beizhu,true) end --减天赋点 function subtianfudian(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,5,"-",num,beizhu,true) end --获得灵韵值数量 function getlingyunzhi(actor) return querymoney(actor,10) end --加灵韵值 function addlingyunzhi(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,10,"+",num,beizhu,true) end --减灵韵值 function sublingyunzhi(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,10,"-",num,beizhu,true) end --获得猎魔值数量 function getliemozhi(actor) return querymoney(actor,11) end --加猎魔值 function addliemozhi(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,11,"+",num,beizhu,true) end --减猎魔值 function subliemozhi(actor,num,beizhu) if beizhu == nil then beizhu = "" end return changemoney(actor,11,"-",num,beizhu,true) end --脚本总耗时 function haoshistart(actor) callscriptex(actor, "PRINTUSETIME", 1) end function haoshiend(actor) callscriptex(actor, "PRINTUSETIME", 2) end --删除物品 function delitem(actor,item,sl) if sl == nil then sl = getiteminfo(actor,item,5) if sl == 0 then sl = 1 end end return delitembymakeindex(actor,getiteminfo(actor,item,1),sl) end --获取已装备的全套装备的最低极品等级 local jipintaozhuangjisuant = {1,0,4,3,7,8,5,6,2,11,12,10,13,14} function getjipintaozhuanglevel(actor) local _List = {} local t = jipintaozhuangjisuant for i = 1, #t do _List[i] = 0 local item = linkbodyitem(actor,t[i]) if item ~= "0" then local val = getitemaddvalue(actor,item,1,2) local val2 = getitemaddvalue(actor,item,1,3) local val3 = getitemaddvalue(actor,item,1,4) if val < val2 then val = val2 end if val < val3 then val = val3 end _List[i] = val end end table.sort(_List, function(l, r) return l > r end) return _List[10] end local taozhuanggeibuff_t = { [0]=10100,[1]=10101,[2]=10102,[3]=10103,[4]=10104,[5]=10105,[6]=10106,[7]=10107,[8]=10108,[9]=10109,[10]=10110, } local jptzjieshao = { "HP+3%", "HP+6%", "HP+9%", "HP+12%", "HP+15%,攻魔道+3%", "HP+18%,攻魔道+6%", "HP+20%,攻魔道+9%", "HP+20%,攻魔道+12%", "HP+20%,攻魔道+15%", "HP+20%,攻魔道+15%,暴击+2%", } function jipintaozhuanggeibuff(actor) local lev = getjipintaozhuanglevel(actor) --获取套装等级属性 --sendmsg6(actor,"套装等级"..lev) if not hasbuff(actor,taozhuanggeibuff_t[lev]) then addbuff(actor,taozhuanggeibuff_t[lev]) if lev > 0 then sendmsg6(actor,"触发极品+".. lev .."套:"..jptzjieshao[lev]) end end end --秒转时分秒 100 = 00:01:40 function ssrSecToHMS(sec) sec = sec or 0 local h,m,s = 0,0,0 if sec > 3600 then h = math.floor(sec/3600) end sec = sec % 3600 if sec > 60 then m = math.floor(sec/60) end s = sec % 60 return string.format("%02d:%02d:%02d", h, m, s) end function huicheng(actor) mapmove(actor,"3",330,330,6) end function getitemnamebymakeid(actor,makeid) local item = getitembymakeindex(actor,makeid) local name = getitemname(actor,item) return name end function jianhuanum(num) if num >= 100000000 then local yi = num/100000000 local zhi = yi - yi%0.01 return zhi .. "亿" end if num >= 10000 then local wan = num/10000 if wan >= 10 then return math.floor(wan) .. "万" end local zhi = wan - wan%0.01 return zhi .. "万" end return num end function isyongyou(actor,iname,weizi) --装备名 位置 if itemcount(actor,iname) > 0 then return true end local item = linkbodyitem(actor,weizi) --sendmsg9(actor,item) if item ~= "0" then if getitemname(actor,item) == iname then return true end end return false end -- 宝箱配置 local treasure_boxes = {0,30,60,120,180,255,} function chengjiuhongdian(actor) for i=1, #treasure_boxes do local today_total = getdayint(actor, "成就_今日总点数") local is_unlocked = today_total >= treasure_boxes[i] local is_claimed = getdayint(actor, "宝箱_"..i.."_已领取") == 1 if is_unlocked and not is_claimed then return true end end return false end local hongdianlv = {38,40,42,44,46,48,50,52,54,56,58,60} function dengjihongdian(actor) local rolelv = getlevel(actor) for i = 1,#hongdianlv do if rolelv < hongdianlv[i] then break end if getint(actor,"升级奖励_"..hongdianlv[i]) == 0 then return true end end return false end function cxxbhongdian(actor) local chongzhi = getint(actor, "3合后累充") if chongzhi < 10 then return false else if getint(actor,"初心相伴领取") == 0 then return true else return false end end return false end local hongdian_db = {38,88,188,288} function dbflhongdian(actor) for i = 1,#hongdian_db do local current = getint(actor,"单笔返利_"..hongdian_db[i]) local yiling = getint(actor,"已领返利_"..hongdian_db[i]) if (current - yiling) > 0 then return true end end return false end -- 累充档位配置(与你的leichong_t中的档位对应) local leichong_t = {30, 50, 100, 200, 500, 2000} -- 按顺序对应各档位的累充金额 -- 累充红点判断函数:存在已达条件但未领取的档位时返回true(显示红点) function leichongHongdian(actor) local totalRecharge = getint(actor, "累计充值") -- 玩家累计充值总额 -- 遍历所有累充档位 for i = 1, #leichong_t do local needRecharge = leichong_t[i] -- 该档位需要的累充金额 -- 若累计充值未达到该档位,后续档位无需判断(按档位顺序递增) if totalRecharge < needRecharge then break end -- 500档特殊处理(支持重复领取) if needRecharge == 500 then local receivedRounds = getint(actor, "累充500已领轮次") or 0 -- 已领轮次 local availableRounds = math.floor(totalRecharge / 500) -- 可领总轮次 -- 若有未领取的轮次,显示红点 if receivedRounds < availableRounds then return true end else -- 普通档位(一次性领取):判断是否未领取 if getint(actor, "累充奖励_"..needRecharge) == 0 then return true end end end return false -- 无未领取的奖励,不显示红点 end local richong_t = {300} function meirileichonghd(actor) local totalRecharge = getdayint(actor, "今日充值") -- 遍历所有累充档位 for i = 1, #richong_t do local needRecharge = richong_t[i] -- 该档位需要的累充金额 if totalRecharge < needRecharge then break end if getdayint(actor, "日充奖励_"..needRecharge) == 0 then return true end end return false end function isingongchengquyu(actor) if castleinfo(5) and (getmap(actor) == "0150" or (getmap(actor) == "3" and getx(actor) >= 544 and gety(actor) <= 390 )) then return true end return false end --获取经验值 function getjingyan(actor) local jingyan = getstr(actor,"经验值") return tonumber(jingyan) or 0 end --存储经验值 function setjingyan(actor,zhi) setstr(actor,"经验值",tostring(zhi)) zhuangtaijiemian(actor) end --post消息记录 function post(actor,xiaoxi) local fuwuqiname = getconst(actor,"<$SERVERNAME>") --服务器名称 if fuwuqiname == "" then fuwuqiname = "工具服" end local curtime = os.date("%Y-%m-%d %H:%M:%S", os.time()) end --post1消息记录 function post1(actor,xiaoxi) local fuwuqiname = getconst(actor,"<$SERVERNAME>") --服务器名称 if fuwuqiname == "" then fuwuqiname = "工具服" end local curtime = os.date("%Y-%m-%d %H:%M:%S", os.time()) end function getguaigongjitime(mon) local zhi = getcurrent(mon,6) if zhi == "" then zhi = 0 end return tonumber(zhi) or 0 end function setguaigongjitime(mon,zhi) setcurrent(mon,6,tostring(zhi)) end function getdiaoluodata() local t = {} local str = getsysstr("掉落查询数据") if str ~= "" then t = json2tbl(str) end return t end -----功能公用函数---------------------------------------------------- function tongyonggoumai(actor,title,danjia,max,huobi) if huobi == nil then huobi = 2 end local t = { title = title, danjia = danjia, max = max, huobi = huobi } sendluamsg(actor, 64000,0,0,0,tbl2json(t)) end function tongyongxuanzediejia(actor,title,wyid) local count = itemcount(actor, title) local t = { title = title, max = count, wyid=wyid, } sendluamsg(actor, 71000,5,0,0,tbl2json(t)) end --检查一个对象的范围 function FCheckRange(obj, x, y, range) local cur_x, cur_y = getbaseinfo(obj, 4), getbaseinfo(obj, 5) local min_x, max_x = x-range, x+range local min_y, max_y = y-range, y+range if (cur_x >= min_x) and (cur_x <= max_x) and (cur_y >= min_y) and (cur_y <= max_y) then return true end return false end --检查自己与npc的距离 function FCheckNPCRange(actor, npcidx, range) range = range or 15 local npcobj = getnpcbyindex(npcidx) local npc_mapid = getbaseinfo(npcobj, 3) local my_mapid = getbaseinfo(actor, 3) if npc_mapid ~= my_mapid then return false end local npc_x = getbaseinfo(npcobj, 4) local npc_y = getbaseinfo(npcobj, 5) return FCheckRange(actor, npc_x, npc_y, range) end --在gb2312编码下,计算字符串中中文字符的个数 function count_gb2312_chinese(str) local count = 0 local i = 1 -- 索引从1开始(Lua字符串索引规则) local str_len = string.len(str) -- 获取字符串总字节数(GB2312中文占2字节,ASCII占1字节) while i <= str_len do local byte1 = string.byte(str, i) -- 取当前字节(可能是中文高字节或ASCII) -- 判断是否为GB2312中文的高字节 if byte1 >= 0xA1 and byte1 <= 0xF7 then -- 是中文:需占用2字节,计数+1,索引跳2位 count = count + 1 i = i + 2 else -- 不是中文(ASCII字符):仅占1字节,索引跳1位 i = i + 1 end end return count end function GetDate(iTime) iTime = iTime or os.time() return os.date("%Y-%m-%d %H:%M:%S", iTime) end function GetYear(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.year end function GetMonth(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.month end function GetDay(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.day end function GetHour(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.hour end function GetMin(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.min end function GetSec(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) return t.sec end function GetWday(iTime) iTime = iTime or os.time() local t = os.date("*t", iTime) --周日 t.wday = 1 if t.wday == 1 then --周日 return 7 else return t.wday - 1 end end --麻痹 function setMabi(actor, sec, gongjizhe) makeposion(actor, 5, sec) sendattackeff(actor, 131, 0, gongjizhe) end --冰冻 function setBingDong(actor, sec, gongjizhe) makeposion(actor, 12, sec) sendattackeff(actor, 132, 0, gongjizhe) end --蛛网 function setZhuWang(actor, sec) makeposion(actor, 13, sec) end --居中显示公告 function sendCenterMsg(actor, msg, receiver, fColor, bColor, iTime, func) --[[ actor object 否 玩家对象 FColor int 否 前景色 BColor int 否 背景色 Msg string 否 消息内容 flag string 否 发送对象: 0=发送给自己; 1=发送所有人物; 2=发送行会; 3=发送国家; 4=发送当前地图; 5=替换模式; 7=组队 time int 是 显示时间 func string 是 倒计时结束后跳转的脚本位置,对应脚本需要放QFunction脚本中,使用跳转时,消息文字提示中必须包含%d,用于显示倒计时时间 ]] receiver = receiver or 0 fColor = fColor or 255 bColor = bColor or 0 iTime = iTime or 2 if func then sendcentermsg(actor, fColor, bColor, msg, receiver, iTime, func) else sendcentermsg(actor, fColor, bColor, msg, receiver, iTime) end end