COINFRAME_BINDING_CACHE = {} function OpenCoinPickupFrame(multiplier, maxMoney, parent) if ( CoinPickupFrame.owner ) then CoinPickupFrame.owner.hasPickup = 0; end if ( GetCursorMoney() > 0 ) then if ( CoinPickupFrame.owner ) then MoneyTypeInfo[parent.moneyType].DropFunc(CoinPickupFrame); PlaySound("igBackPackCoinSelect"); end CoinPickupFrame:Hide(); return; end CoinPickupFrame.multiplier = multiplier; CoinPickupFrame.maxMoney = floor(maxMoney / multiplier); if ( CoinPickupFrame.maxMoney == 0 ) then CoinPickupFrame:Hide(); return; end if ( ENABLE_COLORBLIND_MODE == "1" ) then if ( not CoinPickupFrame.colorBlind ) then CoinPickupCopperIcon:Hide(); CoinPickupSilverIcon:Hide(); CoinPickupGoldIcon:Hide(); CoinPickupText:SetPoint("RIGHT", -38, 18); CoinPickupFrame.colorBlind = true; end if ( multiplier == 1 ) then CoinPickupFrame.symbol = COPPER_AMOUNT_SYMBOL; elseif ( multiplier == COPPER_PER_SILVER ) then CoinPickupFrame.symbol = SILVER_AMOUNT_SYMBOL; elseif ( multiplier == COPPER_PER_GOLD ) then CoinPickupFrame.symbol = GOLD_AMOUNT_SYMBOL; end else CoinPickupFrame.symbol = ""; if ( CoinPickupFrame.colorBlind ) then CoinPickupText:SetPoint("RIGHT", -38, 18); CoinPickupFrame.colorBlind = nil; end if ( multiplier == 1 ) then CoinPickupCopperIcon:Show(); else CoinPickupCopperIcon:Hide(); end if ( multiplier == COPPER_PER_SILVER ) then CoinPickupSilverIcon:Show(); else CoinPickupSilverIcon:Hide(); end if ( multiplier == (COPPER_PER_GOLD) ) then CoinPickupGoldIcon:Show(); else CoinPickupGoldIcon:Hide(); end end CoinPickupFrame.owner = parent; CoinPickupFrame.money = 1; CoinPickupFrame.typing = 0; CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol); CoinPickupLeftButton:Disable(); CoinPickupRightButton:Enable(); CoinPickupFrame:SetPoint("BOTTOMRIGHT", parent, "TOPRIGHT", 0, 0); CoinPickupFrame:Show(); PlaySound("igBackPackCoinSelect"); end function UpdateCoinPickupFrame(maxMoney) if ( not CoinPickupFrame.multiplier ) then return; end CoinPickupFrame.maxMoney = floor(maxMoney / CoinPickupFrame.multiplier); if ( CoinPickupFrame.maxMoney == 0 ) then if ( CoinPickupFrame.owner ) then CoinPickupFrame.owner.hasPickup = 0; end CoinPickupFrame:Hide(); return; end if ( not CoinPickupFrame.money or not CoinPickupFrame.maxMoney ) then -- Failsafe return; end if ( CoinPickupFrame.money > CoinPickupFrame.maxMoney ) then CoinPickupFrame.money = CoinPickupFrame.maxMoney; CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol); end if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then CoinPickupRightButton:Disable(); else CoinPickupRightButton:Enable(); end if ( CoinPickupFrame.money == 1 ) then CoinPickupLeftButton:Disable(); else CoinPickupLeftButton:Enable(); end end function CoinPickupFrame_OnChar(self, text) if ( text < "0" or text > "9" ) then return; end if ( self.typing == 0 ) then self.typing = 1; self.money = 0; end local money = (self.money * 10) + text; if ( money == self.money ) then if( self.money == 0 ) then self.money = 1; end return; end if ( money <= self.maxMoney ) then self.money = money; CoinPickupText:SetText(money .. CoinPickupFrame.symbol); if ( money == self.maxMoney ) then CoinPickupRightButton:Disable(); else CoinPickupRightButton:Enable(); end if ( money == 1 ) then CoinPickupLeftButton:Disable(); else CoinPickupLeftButton:Enable(); end elseif ( money == 0 ) then self.money = 1; end end function CoinPickupFrame_OnKeyDown(self, key) if ( key == "BACKSPACE" or key == "DELETE" ) then if ( self.typing == 0 or self.money == 1 ) then return; end self.money = floor(self.money / 10); if ( self.money <= 1 ) then self.money = 1; self.typing = 0; CoinPickupLeftButton:Disable(); else CoinPickupLeftButton:Enable(); end CoinPickupText:SetText(self.money .. self.symbol); if ( self.money == self.maxMoney ) then CoinPickupRightButton:Disable(); else CoinPickupRightButton:Enable(); end elseif ( key == "ENTER" ) then CoinPickupFrameOkay_Click(); elseif ( GetBindingFromClick(key) == "TOGGLEGAMEMENU" ) then CoinPickupFrameCancel_Click(); elseif ( key == "LEFT" or key == "DOWN" ) then CoinPickupFrameLeft_Click(); elseif ( key == "RIGHT" or key == "UP" ) then CoinPickupFrameRight_Click(); elseif ( not ( tonumber(key) ) and GetBindingAction(key) ) then --Running bindings not used by the CoinPickup frame allows players to retain control of their characters. RunBinding(GetBindingAction(key)); end COINFRAME_BINDING_CACHE[key] = true; end function CoinPickupFrame_OnKeyUp(self, key) if ( not ( tonumber(key) ) and GetBindingAction(key) ) then --If we don't run the up bindings as well, interesting things happen (like you never stop moving) RunBinding(GetBindingAction(key), "up"); end COINFRAME_BINDING_CACHE[key] = nil; end function CoinPickupFrameLeft_Click() if ( CoinPickupFrame.money == 1 ) then return; end CoinPickupFrame.money = CoinPickupFrame.money - 1; CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol); if ( CoinPickupFrame.money == 1 ) then CoinPickupLeftButton:Disable(); end CoinPickupRightButton:Enable(); end function CoinPickupFrameRight_Click() if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then return; end CoinPickupFrame.money = CoinPickupFrame.money + 1; CoinPickupText:SetText(CoinPickupFrame.money .. CoinPickupFrame.symbol); if ( CoinPickupFrame.money == CoinPickupFrame.maxMoney ) then CoinPickupRightButton:Disable(); end CoinPickupLeftButton:Enable(); end function CoinPickupFrameOkay_Click() if ( (CoinPickupFrame.money > 0) and CoinPickupFrame.owner ) then MoneyTypeInfo[CoinPickupFrame.owner.moneyType].PickupFunc(CoinPickupFrame, CoinPickupFrame.money * CoinPickupFrame.multiplier); end CoinPickupFrame:Hide(); PlaySound("igBackPackCoinOK"); end function CoinPickupFrameCancel_Click() CoinPickupFrame:Hide(); PlaySound("igBackPackCoinCancel"); end function CoinPickupFrame_OnHide() if ( CoinPickupFrame.owner ) then CoinPickupFrame.owner.hasPickup = 0; end for key in next, COINFRAME_BINDING_CACHE do if ( GetBindingAction(key) ) then RunBinding(GetBindingAction(key), "up"); end COINFRAME_BINDING_CACHE[key] = nil; end PlaySound("MONEYFRAMECLOSE"); end