eluna-scripts-ornfelt/lua/WowEmulationScriptPack/Lua/item_upgrade.lua
2024-09-23 07:59:23 +02:00

113 lines
No EOL
4.9 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--[[
简介: ELUNA 物品升级
原作者5L
修改:烟雨江南
致谢ayase
CREATE TABLE IF NOT EXISTS `item_up` (
`id` int(10) NOT NULL,
`id1` int(10) NOT NULL,
`id2` int(10) NOT NULL DEFAULT '0',
`amount` int(10) NOT NULL DEFAULT '0',
`amount1` int(10) NOT NULL DEFAULT '0',
`amount2` int(10) NOT NULL DEFAULT '0',
`upid` int(10) NOT NULL DEFAULT '0',
`chance` int(10) NOT NULL DEFAULT '0',
`crazing` int(10) NOT NULL DEFAULT '0',
`baoshi` int(10) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
]]--
print(">>Script: Item_up loading...OK")
math.randomseed(tonumber(tostring(os.time()):reverse():sub(1,6)))
local ITEMID = 71000 --合成宝珠(无效, target:GetEntry()直接写ID可以)
UP ={};
function Item_Up(event, player, item, target)
player:MoveTo(0,player:GetX()+0.01,player:GetY(),player:GetZ())
U = target:GetEntry();
--------------------------0----1------2-------3-------4--------5-----6------7---------8---
Q = WorldDBQuery("SELECT id1, id2, amount, amount1, amount2, upid, chance, crazing, baoshi FROM item_up WHERE `id` = '"..U.."';");
if (Q == nil) then
player:SendBroadcastMessage("装备无法升级。")
player:SendAreaTriggerMessage("装备无法升级。")
return;
end
UP[U] = {
upid = Q:GetString(5), --升级后的ID
amount = Q:GetString(2), --原始装备的数量
chance = Q:GetString(6), --成功几率
crazing = Q:GetString(7), --失败是否碎裂0不碎1碎
id1 = Q:GetString(0), --需要的物品1的ID
amount1 = Q:GetString(3), --需要的物品1的数量
id2 = Q:GetString(1), --需要的物品2的ID
amount2 = Q:GetString(4), --需要的物品2的数量
baoshi = Q:GetString(8) --防爆宝石ID
};
player:GossipClearMenu();
player:GossipMenuAddItem(1," 需要材料:"..GetItemLink(U).."×"..UP[U].amount.."",0,99);
if (tonumber(UP[U].id1) > 0 and tonumber(UP[U].amount1) > 0) then
player:GossipMenuAddItem(1," 需要材料:"..GetItemLink(UP[U].id1).."×"..UP[U].amount1.."",0,99);
end
if (tonumber(UP[U].id2) > 0 and tonumber(UP[U].amount2) > 0) then
player:GossipMenuAddItem(1," 需要材料:"..GetItemLink(UP[U].id2).."×"..UP[U].amount2.."",0,99);
end
player:GossipMenuAddItem(1," 升级后装备:"..GetItemLink(UP[U].upid),0,99);
player:GossipMenuAddItem(1," 成功几率:"..UP[U].chance.."%",0,99);
if (tonumber(UP[U].crazing) == 0) then
player:GossipMenuAddItem(1," 失败后不会碎裂",0,99);
end
if (tonumber(UP[U].crazing) == 1) then
player:GossipMenuAddItem(1," 失败后道具消失",0,99);
end
player:GossipMenuAddItem(1," |CFFFF1100确认合成|R",1,1);
player:GossipSendMenu(1,item);
end
function Item_Select(event, player, object, sender, intid, code, menu_id)
if (intid == 1) then
local ChanceUp = math.random(0,100)
if player:HasItem(U, tonumber(UP[U].amount)) and (tonumber(UP[U].id1) == 0 or tonumber(UP[U].amount1) == 0 or player:HasItem(tonumber(UP[U].id1), tonumber(UP[U].amount1))) and (tonumber(UP[U].id2) == 0 or tonumber(UP[U].amount2) == 0 or player:HasItem(tonumber(UP[U].id2), tonumber(UP[U].amount2))) then
if tonumber(UP[U].id1) > 0 and tonumber(UP[U].amount1) > 0 then
player:RemoveItem(UP[U].id1, UP[U].amount1);
end
if tonumber(UP[U].id2) > 0 and tonumber(UP[U].amount2) > 0 then
player:RemoveItem(UP[U].id2, UP[U].amount2);
end
if tonumber(UP[U].chance) >= ChanceUp then
if player:HasItem(tonumber(UP[U].baoshi), 1) then
player:RemoveItem(tonumber(UP[U].baoshi), 1);
end
player:RemoveItem(U,UP[U].amount);
player:AddItem(UP[U].upid, 1);
player:SendBroadcastMessage("|CFFFF0000合成成功!!|R");
player:SendAreaTriggerMessage("|CFFFF0000合成成功!!|R");
else
if (tonumber(UP[U].crazing) == 0) then
player:SendBroadcastMessage("|CFFFF0000合成失败|R");
player:SendAreaTriggerMessage("|CFFFF0000合成失败|R");
elseif player:HasItem(tonumber(UP[U].baoshi), 1) then
player:RemoveItem(tonumber(UP[U].baoshi), 1);
player:SendBroadcastMessage("|CFFFF0000合成失败破碎的防爆宝石抵消了灾厄的降临|R");
player:SendAreaTriggerMessage("|CFFFF0000合成失败破碎的防爆宝石抵消了灾厄的降临|R");
else
player:RemoveItem(U, UP[U].amount);
player:SendBroadcastMessage("|CFFFF0000合成失败物品破碎|R");
player:SendAreaTriggerMessage("|CFFFF0000合成失败物品破碎|R");
end
end
else
player:SendBroadcastMessage("|CFFFF0000装备或材料数量不足|R");
player:SendAreaTriggerMessage("|CFFFF0000装备或材料数量不足|R");
end
player:GossipComplete();
end
if(intid == 99) then
player:SendBroadcastMessage("|CFFFF0000请点击确定合成按钮|R");
player:SendAreaTriggerMessage("|CFFFF0000请点击确定合成按钮R");
player:GossipComplete();
end
end
RegisterItemEvent(ITEMID, 2, Item_Up);
RegisterItemGossipEvent(ITEMID, 2, Item_Select);