257 lines
8.9 KiB
Lua
257 lines
8.9 KiB
Lua
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();
|
||
|