local FILE_PATH = " Interface \\ AddOns \\ Narcissus \\ ART \\ Splash \\ Mawmart \\ " ;
local After = C_Timer.After
local pi = math.pi ;
local sin = math.sin ;
local L = Narci.L ;
local isMinimapHooked , SetUpMainButton , CreateMailButton ;
local COLORS = {
Blue = { 0 , 113 / 255 , 220 / 255 } , -- 0.44, 0.86
DarkBlue = { 4 / 255 , 30 / 255 , 60 / 255 } ,
LightBlue = { 91 / 255 , 177 / 255 , 1 } ,
Green = { 62 / 255 , 173 / 255 , 91 / 255 } ,
} ;
local function GetColor ( key )
return unpack ( COLORS [ key ] ) ;
end
local HEADER_HEIGHT = 32 ;
local FRAME_HEIGHT ;
local MainFrame , BuyButton , BackdropOverlay ;
local function outSine ( t , b , e , d )
return ( e - b ) * sin ( t / d * ( pi / 2 ) ) + b
end
local function Header_OnUpdate ( self , elapsed )
self.t = self.t + elapsed ;
local logoX , labelX ;
if self.t > 0 then
logoX = outSine ( self.t , - 256 , 8 , self.duration ) ;
labelX = outSine ( self.t , 256 , - 56 , self.duration ) ;
local h = outSine ( self.t , FRAME_HEIGHT , HEADER_HEIGHT , self.duration ) ;
if self.t > self.duration then
h = HEADER_HEIGHT ;
logoX = 8 ;
labelX = - 56 ;
self : SetScript ( " OnUpdate " , nil ) ;
MainFrame.Content . FadeIn : Play ( ) ;
MainFrame.Content : Show ( ) ;
end
BackdropOverlay : SetHeight ( h ) ;
else
logoX = - 256 ;
labelX = 256 ;
end
self.Logo1 : SetPoint ( " LEFT " , self , " LEFT " , logoX , 0 ) ;
self.Label1 : SetPoint ( " RIGHT " , self , " RIGHT " , labelX , 0 ) ;
end
local itemData = {
{ name = " Incense " , thumbnail = " Incense1 " , price = 1120 , rating = 1.5 , itemName = " Wrynnfall - Brass Incense Stick Holder - Limited Edition - Designed by Dan " , numPreview = 3 , category = " Home / Decor / Candles & Home Fragrance " , } ,
{ name = " Lego " , thumbnail = " Lego1 " , price = 69.99 , rating = 5.0 , itemName = " Mediocre Bad Guys: Reassembled Nathaniel Minifigure " , numPreview = 3 , category = " Toys / Building Sets & Blocks / LETGO " , } ,
{ name = " Mug " , thumbnail = " Mug1 " , price = 59.99 , rating = 2.8 , itemName = " Best Dad Ever - Ceramic Coffee Mug Sets - 11 oz - Father's Day Gifts " , numPreview = 3 , category = " Party & Occasions / Party Supplies / Party Tableware " } ,
{ name = " Castle " , thumbnail = " Castle1 " , price = 49.99 , rating = 4.6 , itemName = " The Moving Castle - Eredar Children \' s Sand Castle Building Kit " , numPreview = 4 , category = " Toys / Outdoor Play / Sandboxes & Water Tables " , } ,
{ name = " Jigsaw " , thumbnail = " Jigsaw1 " , price = 829 , rating = 3.4 , itemName = " House of Light Jigsaw 1000 Pieces " , numPreview = 2 , category = " Toys / Games & Puzzles / Puzzles " , } ,
} ;
local function ShowMinimapMailButton ( mailID )
local MapButton = MiniMapMailFrame ;
local senderName ;
if mailID == 1 then
senderName = " The Mailer " ;
else
senderName = " Oribos Customs and Portal Protection " ;
end
if not isMinimapHooked then
isMinimapHooked = true ;
MapButton : HookScript ( " OnEnter " , function ( f )
GameTooltip : Hide ( ) ;
GameTooltip : SetOwner ( f , " ANCHOR_BOTTOMLEFT " ) ;
if GameTooltip : IsOwned ( f ) then
local senders = { senderName , GetLatestThreeSenders ( ) } ;
local headerText = # senders >= 1 and HAVE_MAIL_FROM or HAVE_MAIL ;
FormatUnreadMailTooltip ( GameTooltip , headerText , senders ) ;
GameTooltip : Show ( ) ;
end
end ) ;
end
MapButton : Show ( ) ;
end
local function OtherItem_OnEnter ( self )
self.Underline . Expand : Play ( ) ;
self.Underline : Show ( ) ;
end
local function OtherItem_OnLeave ( self )
self.Underline . Expand : Stop ( ) ;
self.Underline : Hide ( ) ;
end
local function OtherItem_OnClick ( self )
MainFrame : DisplayItem ( self.index ) ;
end
local function SmallPreview_OnEnter ( self )
for i , button in pairs ( self : GetParent ( ) . Previews ) do
button.Underline : Hide ( ) ;
button.Underline . Expand : Stop ( ) ;
end
self.Underline . Expand : Play ( ) ;
self.Underline : Show ( ) ;
MainFrame.Content . MainPreview : SetTexture ( FILE_PATH .. itemData [ self.itemIndex ] . name .. self.order ) ;
end
NarciItemShopMixin = { } ;
function NarciItemShopMixin : OnLoad ( )
MainFrame = self ;
FRAME_HEIGHT = self : GetHeight ( ) ;
self.ShopLogoLeft : SetTexture ( FILE_PATH .. " EntranceLogoLeft " ) ;
self.ShopLogoRight : SetTexture ( FILE_PATH .. " EntranceLogoRight " ) ;
BackdropOverlay = self.BackdropOverlay ;
--self:PlayEntrance();
--Set Delivery Time
local futureDay = time ( ) + 86400 * 3 ;
local dateString = date ( " %a, %b %d " , futureDay ) ;
self.Content . ETA : SetText ( string.format ( " Arrives by %s " , dateString ) ) ;
--Create OtherItems
local OtherItemsFrame = self.Content . OtherItemsFrame ;
local NUM_BUTTONS = # itemData ;
local button ;
local buttonWidth , buttonOffset ;
for i = 1 , NUM_BUTTONS do
button = CreateFrame ( " Button " , nil , OtherItemsFrame , " NarciItemShopOtherItemButtonTemplate " ) ;
button : ClearAllPoints ( ) ;
button : SetScript ( " OnEnter " , OtherItem_OnEnter ) ;
button : SetScript ( " OnLeave " , OtherItem_OnLeave ) ;
button : SetScript ( " OnClick " , OtherItem_OnClick ) ;
button.Underline : SetColorTexture ( GetColor ( " Blue " ) ) ;
if i == 1 then
buttonWidth = button : GetWidth ( ) ;
local w = OtherItemsFrame : GetWidth ( ) ;
buttonOffset = ( w - NUM_BUTTONS * buttonWidth ) / ( NUM_BUTTONS - 1 ) ;
button : SetPoint ( " BOTTOMLEFT " , OtherItemsFrame , " BOTTOMLEFT " , 0 , 18 ) ;
else
button : SetPoint ( " BOTTOMLEFT " , OtherItemsFrame.ItemButtons [ i - 1 ] , " BOTTOMRIGHT " , buttonOffset , 0 ) ;
end
button.Thumbnail : SetTexture ( FILE_PATH .. itemData [ i ] . thumbnail , nil , nil , " TRILINEAR " ) ;
button.Name : SetText ( itemData [ i ] . itemName ) ;
button.Price : SetText ( string.format ( " $%.2f " , itemData [ i ] . price ) ) ;
button.index = i ;
end
--Small Previews
local PreviewFrame = self.Content . PreviewFrame ;
for i = 1 , 4 do
button = CreateFrame ( " Button " , nil , PreviewFrame , " NarciItemShopSmallPreviewTemplate " ) ;
button : ClearAllPoints ( ) ;
button : SetScript ( " OnEnter " , SmallPreview_OnEnter ) ;
button.Underline : SetColorTexture ( GetColor ( " Blue " ) ) ;
button.order = i ;
if i == 1 then
button : SetPoint ( " TOPLEFT " , PreviewFrame , " TOPLEFT " , 0 , 0 ) ;
else
button : SetPoint ( " TOP " , PreviewFrame.Previews [ i - 1 ] , " BOTTOM " , 0 , - 10 ) ;
end
button : Hide ( ) ;
end
self : DisplayItem ( 1 ) ;
end
function NarciItemShopMixin : OnMouseDown ( )
--self:PlayEntrance();
end
function NarciItemShopMixin : PlayEntrance ( )
self.BackdropOverlay : SetHeight ( FRAME_HEIGHT ) ;
self.BackdropOverlay : SetColorTexture ( GetColor ( " Blue " ) ) ;
self.ShopLogoLeft : ClearAllPoints ( ) ;
self.ShopLogoLeft : SetPoint ( " CENTER " , self , " CENTER " , 0 , 0 ) ;
self.ShopLogoRight : ClearAllPoints ( ) ;
self.ShopLogoRight : SetPoint ( " CENTER " , self , " CENTER " , 0 , 0 ) ;
self : StopAnimating ( ) ;
self.Header : Hide ( ) ;
self.Header : SetScript ( " OnUpdate " , nil ) ;
self.Content : Hide ( ) ;
self.Content : SetAlpha ( 0 ) ;
self.Backdrop : Hide ( ) ;
self.animationIndex = 0 ;
self : PlayNextAnimation ( ) ;
end
function NarciItemShopMixin : PlayNextAnimation ( )
local index = self.animationIndex + 1 ;
self.animationIndex = index ;
if index == 1 then
self.SponsoredBy . FadeIn : Play ( ) ;
elseif index == 2 then
self.SponsoredBy . FadeOut : Play ( ) ;
self.ShopLogoLeft . FlyUp : Play ( ) ;
elseif index == 3 then
self.ShopLogoLeft . FlyDown : Play ( ) ;
self.Slogan . Fade : Play ( ) ;
After ( 0.02 , function ( )
self.BackdropOverlay : SetColorTexture ( GetColor ( " DarkBlue " ) ) ;
self.Header : SetScript ( " OnUpdate " , Header_OnUpdate ) ;
self.Header : Show ( ) ;
end ) ;
self.Backdrop : Show ( ) ;
self.Header . t = - 3.5 ;
self.Header . duration = 1.5 ;
self.ShopLogoRight . FlyIn : Play ( ) ;
end
end
function NarciItemShopMixin : SetRating ( rating )
local f = self.Content . RatingFrame ;
local ratingCap = 5 ;
if rating > ratingCap then
rating = ratingCap ;
end
if not f.stars then
f.stars = { } ;
local star ;
for i = 1 , ratingCap do
star = f : CreateTexture ( nil , " OVERLAY " ) ;
star : SetSize ( 12 , 12 ) ;
star : SetPoint ( " LEFT " , f , " LEFT " , ( i - 1 ) * 12 , 0 ) ;
star : SetTexture ( FILE_PATH .. " RatingStar " ) ;
f.stars [ i ] = star ;
end
end
local numStars = math.ceil ( rating ) ;
local star ;
for i = 1 , numStars do
star = f.stars [ i ] ;
if i == numStars then
if rating == numStars then
star : SetTexCoord ( 0 , 0.25 , 0 , 1 ) ;
else
--half
star : SetTexCoord ( 0.25 , 0.5 , 0 , 1 ) ;
end
else
--full
star : SetTexCoord ( 0 , 0.25 , 0 , 1 ) ;
end
end
for i = numStars + 1 , ratingCap do
star = f.stars [ i ] ;
--hollow
star : SetTexCoord ( 0.5 , 0.75 , 0 , 1 ) ;
end
f.Number : SetText ( string.format ( " (%.1f) " , rating ) ) ;
end
function NarciItemShopMixin : DisplayItem ( index )
local data = itemData [ index ] ;
if not data then return end ;
if index ~= self.displayedItem then
self.displayedItem = index ;
else
return
end
--self.Content.MainPreview:SetTexture(FILE_PATH.. data.name.."1");
self.Content . ItemHeader : SetText ( data.itemName ) ;
self.Content . Price : SetText ( string.format ( " $oul %.2f " , data.price ) ) ;
self.Content . ItemCategory : SetText ( data.category ) ;
self : SetRating ( data.rating ) ;
BuyButton.index = index ;
BuyButton : SetState ( data.isPurchased ) ;
local numPreview = data.numPreview ;
local Previews = self.Content . PreviewFrame.Previews ;
for i = 1 , numPreview do
Previews [ i ] . Thumbnail : SetTexture ( FILE_PATH .. data.name .. i , nil , nil , " TRILINEAR " ) ;
Previews [ i ] . itemIndex = index ;
Previews [ i ] : Show ( ) ;
end
for i = numPreview + 1 , # Previews do
Previews [ i ] : Hide ( ) ;
end
SmallPreview_OnEnter ( Previews [ 1 ] ) ;
end
function NarciItemShopMixin : OnHide ( )
if self.hasBought then
self.hasBought = nil ;
NarcissusDB.ShowOrderConfirmation = true ;
CreateMailButton ( 1 ) ;
ShowMinimapMailButton ( 1 ) ;
ShowMinimapMailButton ( 1 ) ;
SetUpMainButton ( " The Mailer " , " Your Order Has Been Verified " , 365 , 133473 ) ;
end
end
NarciItemShopBuyButtonMixin = { } ;
function NarciItemShopBuyButtonMixin : OnLoad ( )
BuyButton = self ;
end
function NarciItemShopBuyButtonMixin : OnEnter ( )
self.Background : SetColorTexture ( GetColor ( " LightBlue " ) ) ;
end
function NarciItemShopBuyButtonMixin : OnLeave ( )
self.Background : SetColorTexture ( GetColor ( " Blue " ) ) ;
end
function NarciItemShopBuyButtonMixin : OnClick ( )
self : SetState ( true ) ;
itemData [ self.index ] . isPurchased = true ;
self.Shake : Play ( ) ;
MainFrame.hasBought = true ;
NarcissusDB.UserIsCurious = true ;
NarcissusDB.DeliveryArrival = time ( ) + 86400 * 3 ;
end
function NarciItemShopBuyButtonMixin : SetState ( isPurchased )
if isPurchased then
self : Disable ( ) ;
self.Background : SetColorTexture ( GetColor ( " Green " ) ) ;
self.ButtonText : SetText ( " Purchased " ) ;
else
self : Enable ( ) ;
self.Background : SetColorTexture ( GetColor ( " Blue " ) ) ;
self.ButtonText : SetText ( " Buy Now " ) ;
end
self.Shake : Stop ( ) ;
end
--Mail
local presets = { } ;
local MailButton ;
--MailButton.Button.Icon:SetTexture(133473);
local function SetOpenMain ( contentIndex )
OpenMailInvoiceFrame : Hide ( ) ;
OpenMailScrollFrame : Show ( ) ;
local data = presets [ contentIndex ] ;
OpenMailSender.Name : SetText ( data [ 1 ] ) ;
OpenMailSubject : SetText ( data [ 2 ] ) ;
--Text
local playerName = UnitName ( " player " ) ;
OpenMailBodyText : SetText ( string.format ( data [ 3 ] , playerName ) , true ) ;
OpenStationeryBackgroundLeft : SetTexture ( 136859 ) ;
OpenStationeryBackgroundRight : SetTexture ( 136860 ) ;
--Attachment
local attachmentText = OpenMailAttachmentText ;
if attachmentText then
local marginxl = 10 + 4 ;
local marginxr = 43 + 4 ;
local areax = OpenMailFrame : GetWidth ( ) - marginxl - marginxr ;
local gapy1 = 3 ;
local gapy2 = 3 ;
local indenty = 28 + gapy2 ;
local iconx , icony = MailButton.Button : GetSize ( ) ;
iconx , icony = iconx + 2 , icony + 2 ;
local itemRowCount = 0 ;
local areay = gapy2 + attachmentText : GetHeight ( ) + gapy2 + ( icony * itemRowCount ) + ( gapy1 * ( itemRowCount - 1 ) ) + gapy2 ;
local scrollHeight = 305 - areay ;
if ( scrollHeight > 256 ) then
scrollHeight = 256 ;
areay = 305 - scrollHeight ;
end
attachmentText : SetText ( NO_ATTACHMENTS ) ;
attachmentText : SetTextColor ( 0.5 , 0.5 , 0.5 ) ;
local height = attachmentText : GetHeight ( ) ;
attachmentText : SetPoint ( " TOPLEFT " , OpenMailFrame , " BOTTOMLEFT " , marginxl + ( areax - attachmentText : GetWidth ( ) ) / 2 , indenty + ( areay - height ) / 2 + height ) ;
-- Resize the scroll frame
local min = math.min ;
OpenMailScrollFrame : SetHeight ( scrollHeight ) ;
OpenMailScrollChildFrame : SetHeight ( scrollHeight ) ;
OpenMailHorizontalBarLeft : SetPoint ( " TOPLEFT " , " OpenMailFrame " , " BOTTOMLEFT " , 2 , 39 + areay ) ;
OpenScrollBarBackgroundTop : SetHeight ( min ( scrollHeight , 256 ) ) ;
OpenScrollBarBackgroundTop : SetTexCoord ( 0 , 0.484375 , 0 , min ( scrollHeight , 256 ) / 256 ) ;
OpenStationeryBackgroundLeft : SetHeight ( scrollHeight ) ;
OpenStationeryBackgroundLeft : SetTexCoord ( 0 , 1.0 , 0 , min ( scrollHeight , 256 ) / 256 ) ;
OpenStationeryBackgroundRight : SetHeight ( scrollHeight ) ;
OpenStationeryBackgroundRight : SetTexCoord ( 0 , 1.0 , 0 , min ( scrollHeight , 256 ) / 256 ) ;
-- Disable Button
OpenMailReplyButton : Disable ( ) ;
OpenMailDeleteButton : SetText ( MAIL_RETURN ) ;
OpenMailReportSpamButton : Hide ( ) ;
OpenMailSender : SetPoint ( " BOTTOMRIGHT " , OpenMailFrame , " TOPRIGHT " , - 12 , - 54 ) ;
end
--Hide Attachment Button
for key , itemButton in pairs ( OpenMailFrame.OpenMailAttachments ) do
itemButton : Hide ( ) ;
end
if not GetLatestThreeSenders ( ) then
MiniMapMailFrame : Hide ( ) ;
end
NarcissusDB.ShowOrderConfirmation = nil ;
end
function CreateMailButton ( mailID )
if not MailButton then
MailButton = CreateFrame ( " Frame " , nil , InboxFrame , " NarciMailItemTemplate " ) ;
MailButton : Hide ( ) ;
local anchorTo = MailItem1 ;
MailButton : SetPoint ( " TOPLEFT " , anchorTo , " TOPLEFT " , 0 , 0 ) ;
MailButton : SetPoint ( " BOTTOMRIGHT " , anchorTo , " BOTTOMRIGHT " , 0 , 0 ) ;
MailButton : SetFrameStrata ( " HIGH " ) ;
MailButton.mailID = mailID ;
local function MailButton_OnClick ( self )
if ( self : GetChecked ( ) ) then
--ShowUIPanel(OpenMailFrame);
OpenMailFrame : Show ( ) ;
OpenMailFrameInset : SetPoint ( " TOPLEFT " , 4 , - 80 ) ;
PlaySound ( SOUNDKIT.IG_SPELLBOOK_OPEN ) ;
InboxFrame.openMailID = nil ;
if MailButton.mailID == 1 then
SetOpenMain ( " confirm " ) ;
else
SetOpenMain ( " confiscate " ) ;
end
end
MailButton : Hide ( ) ;
end
local function MailButton_OnShow ( self )
anchorTo : SetAlpha ( 0 ) ;
end
local function MailButton_OnHide ( self )
MailButton : Hide ( ) ;
anchorTo : SetAlpha ( 1 ) ;
if not GetLatestThreeSenders ( ) then
MiniMapMailFrame : Hide ( ) ;
end
end
MailButton.Button : SetScript ( " OnClick " , MailButton_OnClick ) ;
MailButton.Button : SetScript ( " OnShow " , MailButton_OnShow ) ;
MailButton.Button : SetScript ( " OnHide " , MailButton_OnHide ) ;
end
end
function SetUpMainButton ( sender , subject , daysLeft , icon )
MailButton.Sender : SetText ( sender ) ;
MailButton.Subject : SetText ( subject ) ;
daysLeft = " |cff20ff20 " .. string.format ( DAYS_ABBR , math.floor ( daysLeft ) ) .. " |r " ; --GREEN_FONT_COLOR_CODE
MailButton.ExpireTime : SetText ( daysLeft ) ;
MailButton.Button . Icon : SetTexture ( icon ) ;
MailButton : Show ( ) ;
end
presets = {
confirm = { " The Mailer " , " Your Malmart Order Has Been Verified " , " %s, \n \n Thank you for your purchase. The master is pleased. For every Soul Coin you spend, a blade is forged, honed and ready to cut into the hearts of the non-believers. \n \n Kind regards, \n The Mailer " } ;
confiscate = { " Oribos Customs and Portal Protection " , " We Have Seized Your Package " , " Greetings Maw Walker, \n \n We just confiscated a package sent from the Maw, and the items inside seemed to be purchased under your name. We have started an investigation to find the perpetrator because we are sure that a hero like you won't do anything to jeopardize the Purpose? " } ;
} ;
local MailLoader = CreateFrame ( " Frame " ) ;
MailLoader : RegisterEvent ( " PLAYER_ENTERING_WORLD " ) ;
MailLoader : SetScript ( " OnEvent " , function ( self , event )
self : UnregisterEvent ( event ) ;
local language = GetLocale ( ) ;
if language ~= " enUS " then
return
end
if NarcissusDB.ShowOrderConfirmation then
C_Timer.After ( 2 , function ( )
CreateMailButton ( 1 ) ;
ShowMinimapMailButton ( 1 ) ;
SetUpMainButton ( " The Mailer " , " Your Order Has Been Verified " , 365 , 133473 ) ;
end )
end
if NarcissusDB.DeliveryArrival then
local now = time ( ) ;
if now > NarcissusDB.DeliveryArrival then
NarcissusDB.DeliveryArrival = nil ;
C_Timer.After ( 2.5 , function ( )
CreateMailButton ( 2 ) ;
ShowMinimapMailButton ( 2 ) ;
SetUpMainButton ( " Oribos Customs and Portal Protection " , " We Have Seized Your Package " , 365 , 354719 ) ;
end )
end
end
end )