mirror of
https://github.com/araxiaonline/awakening-lua.git
synced 2026-06-13 02:22:19 -04:00
188 lines
6.2 KiB
Lua
188 lines
6.2 KiB
Lua
local AIO = AIO or require("AIO")
|
|
|
|
local SlotIsuranceServer = AIO.AddHandlers("SlotIsurance", {})
|
|
--!NOTE: SERVERSIDE SLOTS STARTS FROM 0, NOT FROM 1.
|
|
--!SO HEAD AND OTHER SLOTS HAVE SLOTNUMBER-1
|
|
|
|
--Slot table Structure:
|
|
--PLAYERGUID, head, neck, shoulder etc (0 or 1)
|
|
local InsureCurrency = 98461
|
|
|
|
--[[
|
|
SET FOREIGN_KEY_CHECKS=0;
|
|
|
|
-- ----------------------------
|
|
-- Table structure for custom_iteminsurance
|
|
-- ----------------------------
|
|
DROP TABLE IF EXISTS `custom_iteminsurance`;
|
|
CREATE TABLE `custom_iteminsurance` (
|
|
`playerguid` int(30) NOT NULL DEFAULT '0',
|
|
`slot0` int(1) NOT NULL DEFAULT '0',
|
|
`slot1` int(1) NOT NULL DEFAULT '0',
|
|
`slot2` int(1) NOT NULL DEFAULT '0',
|
|
`slot3` int(1) NOT NULL DEFAULT '0',
|
|
`slot4` int(1) NOT NULL DEFAULT '0',
|
|
`slot5` int(1) NOT NULL DEFAULT '0',
|
|
`slot6` int(1) NOT NULL DEFAULT '0',
|
|
`slot7` int(1) NOT NULL DEFAULT '0',
|
|
`slot8` int(1) NOT NULL DEFAULT '0',
|
|
`slot9` int(1) NOT NULL DEFAULT '0',
|
|
`slot10` int(1) NOT NULL DEFAULT '0',
|
|
`slot11` int(1) NOT NULL DEFAULT '0',
|
|
`slot12` int(1) NOT NULL DEFAULT '0',
|
|
`slot13` int(1) NOT NULL DEFAULT '0',
|
|
`slot14` int(1) NOT NULL DEFAULT '0',
|
|
`slot15` int(1) NOT NULL DEFAULT '0',
|
|
`slot16` int(1) NOT NULL DEFAULT '0',
|
|
`slot17` int(1) NOT NULL DEFAULT '0',
|
|
`slot18` int(1) NOT NULL DEFAULT '0',
|
|
PRIMARY KEY (`playerguid`)
|
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
|
]]--
|
|
|
|
function SlotIsuranceServer.GetSlotList(player)
|
|
if not(GreedyDemonCheck(player)) then
|
|
return false
|
|
end
|
|
|
|
local Slots = { -- Empty ARRAY
|
|
[1] = {"Head", "SafeSlot1", false},
|
|
[2] = {"Neck", "SafeSlot2", false},
|
|
[3] = {"Shoulder", "SafeSlot3", false},
|
|
[4] = {"Body", "SafeSlot6", false},
|
|
[5] = {"Chest", "SafeSlot5", false},
|
|
[6] = {"Waist", "SafeSlot10", false},
|
|
[7] = {"Legs", "SafeSlot11", false},
|
|
[8] = {"Feet", "SafeSlot12", false},
|
|
[9] = {"Wrist", "SafeSlot8", false},
|
|
[10] = {"Hand", "SafeSlot9", false},
|
|
[11] = {"Finger", "SafeSlot13", false},
|
|
[12] = {"Finger", "SafeSlot14", false},
|
|
[13] = {"Trinket", "SafeSlot15", false},
|
|
[14] = {"Trinket", "SafeSlot16", false},
|
|
[15] = {"Back", "SafeSlot4", false},
|
|
[16] = {"Main Hand", "SafeSlot17", false},
|
|
[17] = {"Off Hand", "SafeSlot18", false},
|
|
[18] = {"Ranged", "SafeSlot19", false},
|
|
[19] = {"Tabard", "SafeSlot7", false},
|
|
}
|
|
|
|
local SlotlistSQL = CharDBQuery("SELECT slot0, slot1, slot2, slot3, slot4, slot5, slot6, slot7, slot8, slot9, slot10, slot11, slot12, slot13, slot14, slot15, slot16, slot17, slot18 FROM custom_iteminsurance WHERE playerguid = "..player:GetGUIDLow()..";")
|
|
|
|
if (SlotlistSQL) then
|
|
for i = 0, 18 do
|
|
if (SlotlistSQL:GetInt32(i) == 1) then
|
|
Slots[i+1][3] = true
|
|
end
|
|
end
|
|
end
|
|
SafeSlots_SendList(AIO.Msg(), player,Slots):Send(player)
|
|
end
|
|
|
|
function SafeSlots_SendList(msg,player,SlotList)
|
|
return msg:Add("SlotIsurance", "SafeSlots_GetList", SlotList)
|
|
end
|
|
|
|
function SlotIsuranceServer.InsureSlot(player,slot)
|
|
--AIO ADDITIONAL CHECK--
|
|
local expectedData = {"number"}
|
|
local values = {slot}
|
|
if not(DataTypeCheck(expectedData, values)) then
|
|
return false
|
|
end
|
|
--MAIN ACTION--
|
|
if not(GreedyDemonCheck(player)) then
|
|
return false
|
|
end
|
|
|
|
slot = slot - 1
|
|
if (player:GetItemCount(InsureCurrency) < 1) then
|
|
player:SendBroadcastMessage("You don't have enough Demon's Tears to do that!")
|
|
return false
|
|
end
|
|
|
|
local SlotSQL = CharDBQuery("SELECT slot"..slot.." FROM custom_iteminsurance WHERE playerguid = "..player:GetGUIDLow()..";")
|
|
if (SlotSQL and (SlotSQL:GetInt32(0) == 1)) then
|
|
player:SendBroadcastMessage("You have already insured that slot")
|
|
return false
|
|
end
|
|
|
|
player:RemoveItem(InsureCurrency, 1)
|
|
|
|
if (SlotSQL) then
|
|
CharDBExecute("UPDATE custom_iteminsurance SET slot"..slot.." = 1 WHERE playerguid = "..player:GetGUIDLow()..";")
|
|
else
|
|
CharDBExecute("INSERT IGNORE INTO custom_iteminsurance (playerguid, slot"..slot..") VALUES ("..player:GetGUIDLow()..", 1);")
|
|
end
|
|
|
|
--SlotIsuranceServer.GetSlotList(player)
|
|
end
|
|
|
|
function SlotIsuranceServer.UnInsureSlot(player,slot)
|
|
--AIO ADDITIONAL CHECK--
|
|
local expectedData = {"number"}
|
|
local values = {slot}
|
|
if not(DataTypeCheck(expectedData, values)) then
|
|
return false
|
|
end
|
|
--MAIN ACTION--
|
|
if not(GreedyDemonCheck(player)) then
|
|
return false
|
|
end
|
|
|
|
slot = slot - 1
|
|
local SlotSQL = CharDBQuery("SELECT slot"..slot.." FROM custom_iteminsurance WHERE playerguid = "..player:GetGUIDLow()..";")
|
|
|
|
if not(SlotSQL) then
|
|
return false
|
|
end
|
|
|
|
if (SlotSQL:GetInt32(0) == 0) then
|
|
player:SendBroadcastMessage("You have already removed insurance from that slot")
|
|
return false
|
|
end
|
|
|
|
CharDBExecute("UPDATE custom_iteminsurance SET slot"..slot.." = 0 WHERE playerguid = "..player:GetGUIDLow()..";")
|
|
player:AddItem(InsureCurrency)
|
|
--SlotIsuranceServer.GetSlotList(player)
|
|
end
|
|
|
|
|
|
--GOSSIP PART
|
|
local GreedyDemon = 75120
|
|
local GreedyDemon_menu = 45004
|
|
|
|
function SafeSlots_CloseMenu(msg,player)
|
|
return msg:Add("SlotIsurance", "SafeSlots_Close")
|
|
end
|
|
|
|
function SafeSlots_OpenMenu(msg,player)
|
|
return msg:Add("SlotIsurance", "SafeSlots_Init")
|
|
end
|
|
|
|
local function OnGossipHello_GreedyDemon(event, player, Demon)
|
|
player:GossipClearMenu()
|
|
if (Demon:GetOwner() == player) then
|
|
SafeSlots_OpenMenu(AIO.Msg(), player):Send(player)
|
|
end
|
|
player:GossipSendMenu(1, Demon, GreedyDemon_menu)
|
|
player:GossipComplete()
|
|
end
|
|
RegisterCreatureGossipEvent(GreedyDemon, 1, OnGossipHello_GreedyDemon)
|
|
|
|
function GreedyDemonCheck(player)
|
|
local Demon = nil
|
|
Demon = player:GetNearestCreature(3, GreedyDemon)
|
|
if (Demon) and (Demon:GetOwner() == player) then
|
|
return true
|
|
end
|
|
SafeSlots_CloseMenu(AIO.Msg(), player):Send(player)
|
|
return false
|
|
end
|
|
|
|
local function PlayerIsFar(event, creature, unit)
|
|
for k,player in pairs(creature:GetPlayersInRange(20)) do
|
|
GreedyDemonCheck(player)
|
|
end
|
|
end
|
|
RegisterCreatureEvent(GreedyDemon, 27, PlayerIsFar) |