Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Enchant display system:
- --[[
- -- SQL:
- CREATE TABLE `custom_item_enchant_visuals` (
- `iguid` INT(10) UNSIGNED NOT NULL COMMENT 'item DB guid',
- `display` INT(10) UNSIGNED NOT NULL COMMENT 'enchantID',
- PRIMARY KEY (`iguid`)
- )
- COMMENT='stores the enchant IDs for the visuals'
- COLLATE='latin1_swedish_ci'
- ENGINE=InnoDB;
- ]]
- -- script variables:
- local EQUIPMENT_SLOT_MAINHAND = 15
- local EQUIPMENT_SLOT_OFFHAND = 16
- local PLAYER_VISIBLE_ITEM_1_ENCHANTMENT = 284
- local PERM_ENCHANTMENT_SLOT = 0
- local DD = {}
- -- functions
- local LoadDB, setVisual, applyVisuals, LOGOUT, LOGIN
- function LoadDB()
- DD = {}
- CharDBQuery("DELETE FROM custom_item_enchant_visuals WHERE NOT EXISTS(SELECT 1 FROM item_instance WHERE custom_item_enchant_visuals.iguid = item_instance.guid)")
- local Q = CharDBQuery("SELECT iguid, display FROM custom_item_enchant_visuals")
- if(Q) then
- repeat
- local iguid, display = Q:GetUInt32(0), Q:GetUInt32(1)
- DD[iguid] = display
- until not Q:NextRow()
- end
- end
- LoadDB()
- function setVisual(player, item, display)
- if(not player or not item or not item:IsEquipped()) then return false end
- local iguid = item:GetGUIDLow()
- if(not display) then
- if(not DD[iguid]) then return false end
- display = DD[iguid]
- elseif(display ~= 0) then
- CharDBExecute("REPLACE INTO custom_item_enchant_visuals (iguid, display) VALUES ("..iguid..", "..display..")")
- DD[iguid] = display
- end
- if(display == 0) then
- display = item:GetEnchantmentId(PERM_ENCHANTMENT_SLOT) or 0
- if(DD[iguid]) then
- CharDBExecute("DELETE FROM custom_item_enchant_visuals WHERE iguid = "..iguid)
- DD[iguid] = nil
- end
- end
- player:SetUInt16Value(PLAYER_VISIBLE_ITEM_1_ENCHANTMENT + (item:GetSlot() * 2), 0, display)
- return true
- end
- function applyVisuals(player)
- if(not player) then return end
- for i = EQUIPMENT_SLOT_MAINHAND, EQUIPMENT_SLOT_OFFHAND do
- setVisual(player, player:GetItemByPos(255, i))
- end
- end
- function LOGIN(event, player)
- applyVisuals(player)
- end
- RegisterPlayerEvent(3, LOGIN)
- RegisterPlayerEvent(29, function(e,p,i,b,s) setVisual(p, i) end)
- -- Enchant display gossip:
- -- Enchant IDs and their names
- local E = {
- {0, "Reset"},
- {3789, "Berserking"},
- {3854, "Spell Power"},
- {3273, "Deathfrost"},
- {3225, "Executioner"},
- {3870, "Blood Draining"},
- {1899, "Unholy Weapon"},
- {2674, "Spellsurge"},
- {2675, "Battlemaster"},
- {2671, "Arcane and Fire Spell Power"},
- {2672, "Shadow and Frost Spell Power"},
- {3365, "Rune of Swordshattering"},
- {2673, "Mongoose"},
- {2343, "Spell Power"},
- {425, "Black Temple Dummy"},
- {3855, "Spell Power"},
- {1894, "Icy Weapon"},
- {1103, "Agility"},
- {1898, "Lifestealing"},
- {3345, "Earthliving 1"},
- {1743, "MHTest02"},
- {3093, "Attack Power vs Undead and Demons"},
- {1900, "Crusader"},
- {3846, "Spell Power"},
- {1606, "Attack Power"},
- {283, "Windfury 1"},
- {1, "Rockbiter 3"},
- {3265, "Blessed Weapon Coating"},
- {2, "Frostbrand 1"},
- {3, "Flametongue 3"},
- {3266, "Righteous Weapon Coating"},
- {1903, "Spirit"},
- {13, "Sharpened (+3 Damage)"},
- {26, "Frost Oil"},
- {7, "Deadly Poison"},
- {803, "Fiery Weapon"},
- {1896, "Weapon Damage"},
- {2666, "Intellect"},
- {25, "Shadow Oil"},
- }
- -- script variables:
- local chatCommand = "asd"
- local maxGossipItems = 14 -- per page
- local menu_id = 123
- local safeGossipItems = 100 -- main menu: sender = safeGossipItems-1
- local EQUIPMENT_SLOT_MAINHAND = 15
- local EQUIPMENT_SLOT_OFFHAND = 16
- local D = {}
- -- functions:
- local showItems, HELLO, SELECT, CHAT
- function showItems(player, unit, offset)
- local temp = (maxGossipItems)*offset+1
- for i = temp, temp+maxGossipItems-1 do
- local v = E[i]
- if(not v) then break end
- player:GossipMenuAddItem(9, v[2], safeGossipItems+offset, v[1]+1)
- end
- if(temp+maxGossipItems-1 < #E) then
- player:GossipMenuAddItem(7, "Next..", safeGossipItems+offset+1, 0)
- end
- player:GossipMenuAddItem(7, "Back..", safeGossipItems+offset-1, 0)
- player:GossipSendMenu(100, unit, menu_id)
- end
- function HELLO(event, player, unit)
- player:GossipMenuAddItem(9, "Main hand", 0, EQUIPMENT_SLOT_MAINHAND)
- player:GossipMenuAddItem(9, "Off hand", 0, EQUIPMENT_SLOT_OFFHAND)
- player:GossipSendMenu(100, unit, menu_id)
- end
- function CHAT(event, player, msg, Type, lang)
- if(msg == chatCommand) then
- player:GossipClearMenu()
- HELLO(1, player, player)
- return false
- end
- end
- function SELECT(event, player, unit, sender, action, code)
- local guid = player:GetGUIDLow()
- if(not D[guid]) then
- D[guid] = {}
- end
- if(sender == safeGossipItems-1 and action == 0) then
- HELLO(event, player, unit)
- elseif(sender >= safeGossipItems) then
- if(action ~= 0) then
- D[guid].display = action-1
- if(D[guid].slot and D[guid].display) then
- local item = player:GetItemByPos(255, D[guid].slot)
- if(not item) then
- player:SendNotification("No item equipped in selected slot")
- else
- setVisual(player, item, D[guid].display)
- end
- end
- end
- showItems(player, unit, sender-safeGossipItems)
- elseif(sender == 0) then
- D[guid].slot = action
- showItems(player, unit, 0)
- else
- player:GossipCloseMenu()
- end
- end
- function LOGOUT(event, player)
- D[player:GetGUIDLow()] = nil
- end
- RegisterPlayerEvent(4, LOGOUT)
- RegisterPlayerEvent(18, CHAT)
- RegisterPlayerGossipEvent(menu_id, 2, SELECT)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement