function 字符串切割(数据,切割字符) 数据 = 数据 .. 切割字符 local t = {} local 目前位置 = 1 repeat local nexti = string.find(数据, 切割字符, 目前位置) table.insert(t, string.sub(数据, 目前位置,nexti-string.len(切割字符))) 目前位置 = nexti + string.len(切割字符) until 目前位置 > string.len(数据) return t end 临时NPC索引 = {}; --[[=========商城变量===========]] 商城数据 = {}; 商城数据.最新上架={}; 商城数据.促销商品={}; 商城数据.消耗商品={}; 商城数据.道具商品={}; 商城数据.宠物商品={}; 商城道具类型 = {{"爪",1},{"斧头",1},{"棍",1},{"枪",1},{"弓",1},{"盾",1},{"兜",1},{"凯",1},{"手环",1},{"乐器",1} ,{"首饰",1},{"首饰",1},{"带子",1},{"耳环",1},{"鼻环",1},{"护身符",1},{"特殊",0},{"回旋标",1},{"投掷斧",1},{"投掷石",1} ,{"未知",0},{"未知",0},{"未知",0},{"未知",0},{"腰带",1},{"盾",1},{"靴子",1},{"手套",1},{"使者信物",0},{"勇者信物",0}, {"未知",0},{"未知",0},{"未知",0},{"未知",0},{"未知",0},{"未知",0},{"未知",0},{"未知",0}} 道具属性链接 = {{"攻击力",%道具_附攻%,1}, {"防御力",%道具_附防%,1}, {"敏捷力",%道具_附敏%,1}, {"耐久力",%道具_附体%,1}, {"气力",%道具_附气%,1}, {"运气",%道具_附运%,1}, {"魅力",%道具_附魅%,1}, {"闪避",%道具_附避%,1}, {"格挡",%道具_格档率%,1}, {"攻序",%道具_攻序%,1}, {"负重",%道具_负重%,1}, {"命中",%道具_命中%,1}, {"抗毒",%道具_毒耐%,1}, {"抗麻",%道具_麻耐%,1}, {"抗睡",%道具_睡耐%,1}, {"抗石",%道具_石耐%,1}, {"抗酒",%道具_酒耐%,1}, {"抗混",%道具_混耐%,1}, {"会心一击",%道具_附一击%,1} }--说明,常量,被除数(考虑到有些值需要除于100设置) --[[=========================================================================]] function 商城NPC创建回调(NPC索引) 人物.注册对话框回调("", "商城对话框回调", NPC索引) return true; end function 创建商城NPC() 读取商城数据(); local 商品内容={}; 商品内容[1] = 商城数据解析(商城数据.最新上架,"道具"); 商品内容[2] = 商城数据解析(商城数据.促销商品,"道具"); 商品内容[3] = 商城数据解析(商城数据.消耗商品,"道具"); 商品内容[4] = 商城数据解析(商城数据.道具商品,"道具"); 商品内容[5] = 商城数据解析(商城数据.宠物商品,"宠物"); 系统.写商城数据(0,商品内容[1]); 系统.写商城数据(1,商品内容[2]); 系统.写商城数据(2,商品内容[3]); 系统.写商城数据(3,商品内容[4]); 系统.写商城数据(4,商品内容[5]); 商品内容=nil; 临时NPC索引.商城=系统.创建NPC("","商城NPC创建回调") end function 商城写入日志(玩家索引,购物车数据,扣除点数,临时商城数据,玩家没扣除前点数) local 重新计算价格=0; local 写入日志内容; local 商城道具名=""; for i=1,table.getn(购物车数据) do 商城道具名 = 商城道具名 .. 道具.取模板数据(购物车数据[i][1],%道具_原名%).."*"..购物车数据[i][2].."("..临时商城数据[购物车数据[i][3]][2]*购物车数据[i][2]..")|"; 重新计算价格=重新计算价格+临时商城数据[购物车数据[i][3]][2]*购物车数据[i][2]; end if 重新计算价格 > 扣除点数 then 商城道具名 = 商城道具名.."#扣除价格产生异常" end 写入日志内容 = string.format("玩家名:%s 计算商品的价格:%d 实际扣除点数:%d 没扣除金币前:%d 扣除后:%d\n购买商品:%s\n\n",Char.GetData(玩家索引,%对像_原名%), 重新计算价格,扣除点数,玩家没扣除前点数,人物.取数据(玩家索引,%对像_VIP%),商城道具名); 文件号=assert(io.open("./data/lua/onlineshop/shoplog.txt", "a+")) 文件号:write(写入日志内容); -- 读取所有内容 文件号:close(); end function 商城对话框回调( NPC索引, 玩家索引, 序号, 按钮, 数据) --[[ 当按钮不为0的时候,玩家选择的是其它页数 当为0的时候,数据中的内容分解 道具索引,数量#道具索引,数量# ]] if 按钮 == 0 then local 商城ID = 转整数(数据) if 商城ID == 1 then 封包.发送对话框(玩家索引,1001,1,1,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|1",NPC索引) elseif 商城ID == 2 then 封包.发送对话框(玩家索引,1001,2,2,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|2",NPC索引) elseif 商城ID == 3 then 封包.发送对话框(玩家索引,1001,3,3,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|3",NPC索引) elseif 商城ID == 4 then 封包.发送对话框(玩家索引,1001,4,4,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|4",NPC索引) elseif 商城ID == 5 then 封包.发送对话框(玩家索引,1001,5,5,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|5",NPC索引) end elseif 数据 ~= "" then local 购物车数据 = 字符串切割(数据,"#"); local 物品总数 = 0; local 物品总价 = 0; local 物品ID = {}; local 临时商城数据; if 按钮 == 1 then 临时商城数据 = 商城数据.最新上架; elseif 按钮 == 2 then 临时商城数据 = 商城数据.促销商品; elseif 按钮 == 3 then 临时商城数据 = 商城数据.消耗商品; elseif 按钮 == 4 then 临时商城数据 = 商城数据.道具商品; elseif 按钮 == 5 then 临时商城数据 = 商城数据.宠物商品; end for i=1,table.getn(购物车数据) do if 购物车数据[i] ~="" then local 购物车数据再分 = 字符串切割(购物车数据[i],"|"); 物品ID[i]={}; 物品ID[i][1] = 临时商城数据[转整数(购物车数据再分[1])][1]; 物品ID[i][2] = 转整数(购物车数据再分[2]); 物品ID[i][3] = 转整数(购物车数据再分[1]); 物品总价 = 物品总价 + 临时商城数据[物品ID[i][3]][2]*物品ID[i][2]; 物品总数 = 物品总数 + 物品ID[i][2]; end end local 玩家彩币 = 人物.取数据(玩家索引,%对像_VIP%); if 玩家彩币 < 物品总价 then 封包.说话(玩家索引,"系统:身上的金币不足。",%红色%); return; end if 人物.取道具空数量(玩家索引) < 物品总数 then 封包.说话(玩家索引,"系统:身上的道具位不足。",%红色%); return; end 人物.置数据(玩家索引,%对像_VIP%,玩家彩币-物品总价); for i=1,table.getn(物品ID) do 封包.给道具(玩家索引,物品ID[i][1],物品ID[i][2]); end 商城写入日志(玩家索引,物品ID,物品总价,临时商城数据,玩家彩币); 封包.说话(玩家索引,"系统:扣除"..物品总价.."金币!",%红色%); end end function 商城数据解析(道具ID数据组,类型) local 返回数据 = ""; if table.getn(道具ID数据组) < 1 then return ""; end for 道具索引=1,table.getn(道具ID数据组) do local 道具ID = 道具ID数据组[道具索引][1]; local 道具类型 = 道具.取模板数据(道具ID,%道具_类型%); local 道具图号 = 道具.取模板数据(道具ID,%道具_图号%); 返回数据 = string.format("%s%s|%d|%d|%d|道具类型:%s\n",返回数据,道具.取模板数据(道具ID,%道具_原名%),道具图号,道具图号,道具ID数据组[道具索引][2],商城道具类型[道具类型+1][1]); if 商城道具类型[道具类型+1][2]== 1 then if 道具.取模板数据(道具ID,%道具_MAX耐久%) == 0 then 返回数据 = 返回数据.."耐久度:不会损坏\n\n" else 返回数据 = string.format("%s耐久度:%d/%d\n\n",返回数据,math.ceil(道具.取模板数据(道具ID,%道具_耐久%)/100),math.ceil(道具.取模板数据(道具ID,%道具_MAX耐久%)/100)); end for 道具属性索引 = 1,table.getn(道具属性链接) do --//遍历常用属性的值 local 道具值 = 道具.取模板数据(道具ID,道具属性链接[道具属性索引][2]); if 道具值 ~= 0 then 返回数据 = string.format("%s%s %s\n",返回数据,道具属性链接[道具属性索引][1],道具属性符号(道具值)); end end if 道具.取模板数据(道具ID,%道具_精灵%) >= 0 then 返回数据 = string.format("%s\n精灵 %s",返回数据,技能.取精灵技能数据(道具.取模板数据(道具ID,%道具_精灵%),%精灵_名%)); end 返回数据 = 返回数据.."#"; else 返回数据 = 返回数据..道具.取模板数据(道具ID,%道具_说明%).."#"; end end return 返回数据; end function 道具属性符号(道具属性)--//增加道具值正负符号 if 道具属性 > 0 then return "+"..道具属性; else return 道具属性; end end function 职业需求(道具ID)--返回道具要求职业 local 道具职业 = 道具.取模板数据(道具ID,%道具_职业%); if 道具职业 == 0 then return "(通用)" elseif 道具职业 == 1 then return "(白狼勇士)" elseif 道具职业 == 2 then return "(暗灵法师)" elseif 道具职业 == 3 then return "(追猎者)" end end function ITRF_NEWSHOP(玩家索引)--相本回调 改为 新商城 --[[ 商城数据说明 人物道具空数量|彩币|页数|数据 ]] if 人物.取数据(玩家索引,%对像_战模%) == 0 and 人物.取数据(玩家索引,%对像_摆摊%) <= 0 then 封包.发送对话框(玩家索引,1001,1,1,人物.取道具空数量(玩家索引).."|"..人物.取数据(玩家索引,%对像_VIP%).."|1",临时NPC索引.商城) end end function 读取商城数据() local 文件号; local 数据,数量,临时商城数据; for i =1,5 do if i == 1 then 临时商城数据 = 商城数据.最新上架; elseif i == 2 then 临时商城数据 = 商城数据.促销商品; elseif i == 3 then 临时商城数据 = 商城数据.消耗商品; elseif i == 4 then 临时商城数据 = 商城数据.道具商品; elseif i == 5 then 临时商城数据 = 商城数据.宠物商品; end 文件号 = assert(io.open("./data/lua/onlineshop/shop"..i..".txt", "r")) 数据 = 文件号:read("*a"); -- 读取所有内容 文件号:close(); if 数据 ~= "" then 数量 = 0; 数据 = 字符串切割(数据,"\n"); for b = 1,table.getn(数据) do if string.sub(数据[b],1,1) ~= "#" and string.sub(数据[b],1,1) ~= "" then 数量 = 数量 + 1; 临时商城数据[数量] = 字符串切割(数据[b],"|"); 临时商城数据[数量][1] = tonumber(临时商城数据[数量][1]); 临时商城数据[数量][2] = tonumber(临时商城数据[数量][2]); end end end end end 创建商城NPC();