├── images ├── dummy.tga ├── icon.tga └── icon_hover.tga ├── Fonts ├── FUTURABC.TTF ├── FUTUXKCI.TTF ├── DUF_Font1.ttf ├── DUF_Font2.ttf ├── DUF_Font3.ttf ├── DUF_Font4.ttf ├── DUF_Font5.ttf ├── IX_Font_Bold.ttf ├── Montreal_Bold.ttf ├── IX_Font_Bold_Italic.ttf └── Montreal_Heavy_Bold.ttf ├── VCB.toc ├── localization ├── koKR.lua ├── enUS.lua └── deDE.lua ├── VCB_Buffframe.xml ├── README.md ├── LICENSE └── VCB_Buffframe.lua /images/dummy.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/images/dummy.tga -------------------------------------------------------------------------------- /images/icon.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/images/icon.tga -------------------------------------------------------------------------------- /Fonts/FUTURABC.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/FUTURABC.TTF -------------------------------------------------------------------------------- /Fonts/FUTUXKCI.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/FUTUXKCI.TTF -------------------------------------------------------------------------------- /Fonts/DUF_Font1.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/DUF_Font1.ttf -------------------------------------------------------------------------------- /Fonts/DUF_Font2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/DUF_Font2.ttf -------------------------------------------------------------------------------- /Fonts/DUF_Font3.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/DUF_Font3.ttf -------------------------------------------------------------------------------- /Fonts/DUF_Font4.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/DUF_Font4.ttf -------------------------------------------------------------------------------- /Fonts/DUF_Font5.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/DUF_Font5.ttf -------------------------------------------------------------------------------- /images/icon_hover.tga: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/images/icon_hover.tga -------------------------------------------------------------------------------- /Fonts/IX_Font_Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/IX_Font_Bold.ttf -------------------------------------------------------------------------------- /Fonts/Montreal_Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/Montreal_Bold.ttf -------------------------------------------------------------------------------- /Fonts/IX_Font_Bold_Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/IX_Font_Bold_Italic.ttf -------------------------------------------------------------------------------- /Fonts/Montreal_Heavy_Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tdymel/VCB/HEAD/Fonts/Montreal_Heavy_Bold.ttf -------------------------------------------------------------------------------- /VCB.toc: -------------------------------------------------------------------------------- 1 | ## Interface: 11200 2 | ## Title: VCB |cFFFF8080-Shino-|r 3 | ## Title-deDE: VCB |cFFFF8080-Shino-|r 4 | ## Title-enGB: VCB |cFFFF8080-Shino-|r 5 | ## Notes: Vanilla Consolidate Buff-Frames (VCB) is a smart system to manage your auras. The AddOn provides a lot functions to customize it to your tastes and adds a lot of helpful functions for a better overview, which is its purpose in the first place anyway. 6 | ## Notes-deDE: Vanilla Consolidate Buff-Frames (VCB) ist ein intelligentes Aura-Verwaltungs-System. Es verfügt über zahlreichen Funktionen, um das Modul nach eigenen Wünschen zu gestalten. Hauptsächlich verbessert es aber die Übersicht, was auch sein Hauptzweck ist. 7 | ## Notes-enGB: Vanilla Consolidate Buff-Frames (VCB) is a smart system to manage your auras. The AddOn provides a lot functions to customize it to your tastes and adds a lot of helpful functions for a better overview, which is its purpose in the first place anyway. 8 | ## Author: Shino - Kronos 9 | ## SavedVariables: VCB_Profile, VCB_Profile_Name 10 | ## SavedVariablesPerCharacter: Consolidated_Buffs, Banned_Buffs, VCB_BF_LOCKED, VCB_SAVE, VCB_CUR_PROFILE, VCB_WP_POSX, VCB_WP_POSY, VCB_WP_POINT, VCB_ICON_POINT, VCB_ICON_POSX, VCB_ICON_POSY, VCB_MM_ICON 11 | ## Version: 3.0 12 | VCB.lua 13 | VCB_Buffframe.lua 14 | VCB.xml 15 | VCB_Buffframe.xml 16 | 17 | -------------------------------------------------------------------------------- /localization/koKR.lua: -------------------------------------------------------------------------------- 1 | if (GetLocale() == "koKR") then 2 | VCB_MAIN_NAME = "VCB 버프/디버프 확장프레임" 3 | VCB_MAIN_VERSION = "v4.0" 4 | VCB_MINIMAP_TOOLTIP_NAME = "VCB 버프/디버프 확장프레임" 5 | VCB_MINIMAP_TOOLTIP_LEFTCLICK = "좌클릭: 토글옵션메뉴" 6 | VCB_MINIMAP_TOOLTIP_RIGHTCLICK = "우클릭 : 버프프레임 잠금 토글모드" 7 | VCB_MINIMAP_TOOLTIP_DRAG = "드레그 : 미니맵아이콘 이동" 8 | VCB_TOP_BUTTON_CLOSE = "구성 프레임 닫기" 9 | VCB_TOP_BUTTON_LOCK = "VCB 잠그기" 10 | VCB_TOP_BUTTON_MINIMAP = "미니맵 버튼 보기/가리기" 11 | VCB_TOP_BUTTON_DUMMY = "버프프레임 보기/가리기" 12 | VCB_MENU_HEAD = "메뉴" 13 | VCB_MENU_BUTTON1_LINK = "통합 버프" 14 | VCB_MENU_BUTTON1_NAME = "통합 버프" 15 | VCB_MENU_BUTTON2_LINK = "차단된 버프" 16 | VCB_MENU_BUTTON2_NAME = "차단된 버프" 17 | VCB_MENU_BUTTON3_LINK = "시간표시" 18 | VCB_MENU_BUTTON3_NAME = "시간표시" 19 | VCB_MENU_BUTTON4_LINK = "통합 프레임 -1-" 20 | VCB_MENU_BUTTON4_LINK2 = "통합 프레임 -2-" 21 | VCB_MENU_BUTTON4_NAME = "통합 프레임" 22 | VCB_MENU_BUTTON5_LINK = "버프 프레임 -1-" 23 | VCB_MENU_BUTTON5_LINK2 = "버프 프레임 -2-" 24 | VCB_MENU_BUTTON5_NAME = "버프 프레임" 25 | VCB_MENU_BUTTON6_LINK = "디버프 프레임 -1-" 26 | VCB_MENU_BUTTON6_LINK2 = "디버프 프레임 -2-" 27 | VCB_MENU_BUTTON6_NAME = "디버프 프레임" 28 | VCB_MENU_BUTTON7_LINK = "무기버프 프레임 -1-" 29 | VCB_MENU_BUTTON7_NAME = "무기버프 프레임" 30 | VCB_MENU_BUTTON8_LINK = "프로파일 매니져" 31 | VCB_MENU_BUTTON8_NAME = "프로파일 매니져" 32 | VCB_MENU_BUTTON9_LINK = "기타 사항" 33 | VCB_MENU_BUTTON9_NAME = "기타 사항" 34 | VCB_MENU_BUTTON10_LINK = "VCB에 대해" 35 | VCB_MENU_BUTTON10_NAME = "VCB에 대해" 36 | VCB_CONFIG_FRAME_TITLE_ONLOAD = "통합 버프" 37 | VCB_CB_BB_FRAME_LEFT_INSERT = "버프 이름 입력:" 38 | VCB_CB_BB_FRAME_LEFT_DELETE = "선택된 버프:" 39 | VCB_CB_BB_FRAME_LEFT_ADD = "우측 버프슬롯에 추가" 40 | VCB_CB_BB_FRAME_LEFT_DELETE_BUTTON = "선택된 버프 지우기" 41 | VCB_CB_BB_FRAME_LEFT_RA = "모두 제거" 42 | VCB_TIMER_FRAME_SHOW_HOURS = "시간 표시" 43 | VCB_TIMER_FRAME_SHOW_HOURS_TOOLTIP = "3600초 이상 남아 있는 경우 타이머를 시간 형식으로 지정하려면이 옵션을 선택하십시오." 44 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT = "시간과 분 표시(h:m)" 45 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT_TOOLTIP = "시간과 분을 모두 표시하려면이 옵션을 선택하십시오. 예 : 1:34h." 46 | VCB_TIMER_FRAME_SHOW_MINUTES = "분 표시" 47 | VCB_TIMER_FRAME_SHOW_MINUTES_TOOLTIP = "60초가 넘는 경우 타이머를 분 단위로 포맷하려면 이 옵션을 선택하십시오." 48 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT = "분과 초 표시(m:s)" 49 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT_TOOLTIP = "분과 초를 모두 표시하려면 이 옵션을 선택하십시오. 예 : 10:24m." 50 | VCB_TIMER_FRAME_SHOW_TENTH = "마지막 60초를 소수점 두자리까지 표시." --Show tenth the last 60 seconds 51 | VCB_TIMER_FRAME_SHOW_TENTH_TOOLTIP = "초단위 소수점 두자리 까지 표시하려면이 항목을 선택하십시오. 예 : 10:44s." 52 | VCB_TIMER_FRAME_ROUND_DOWN = "반 내림" --Round down 53 | VCB_TIMER_FRAME_ROUND_DOWN_TOOLTIP = "타이머를 반 내림하려면 이 항목을 선택하십시오. 예 : 70s->1m." 54 | VCB_TIMER_FRAME_ROUND_UP = "반 올림" 55 | VCB_TIMER_FRAME_ROUND_UP_TOOLTIP = "타이머를 반 올림하려면 이 옵션을 선택하십시오. 예 : 70s->2m." 56 | VCB_TIMER_FRAME_FLASH = "버프 만료시 깐박임 사용" 57 | VCB_TIMER_FRAME_FLASH_TOOLTIP = "버프가 만료 될 때 깐박임을 사용하려면 이 옵션을 선택하십시오(30초)." 58 | VCB_TIMER_FRAME_COLOR_BELOW_60 = "60초 미만 색상 변경" 59 | VCB_TIMER_FRAME_COLOR_BELOW_60_TOOLTIP = "버프가 60초 미만일때 색을 변경하려면 이 옵션을 선택하십시오." 60 | VCB_CF_FRAME_POSSIBLE_BUFFS = "통합버프아이콘의 많은 양의 버프를 보여 줌." 61 | VCB_CF_FRAME_POSSIBLE_BUFFS_TOOLTIP = "이 옵션을 선택하면 통합 할 수있는 통합버프아이콘에 보유하고있는 버프를 표시합니다." 62 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT = "누락 된 버프 표시 (회색으로 표시됨)" 63 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT_TOOLTIP = "통합되었을 수있는 누락 된 버프를 표시하려면이 항목을 선택하십시오." 64 | VCB_CF_FRAME_ICON_OPACITY = "통합버프아이콘 불투명도" 65 | VCB_CF_FRAME_ICON_OPACITY_TOOLTIP = "이 커서를 움직여 통합버프 아이콘의 불투명도를 변경합니다." 66 | VCB_CF_FRAME_ICON_TEXTURE = "텍스쳐" 67 | VCB_CF_FRAME_ICON_TEXTURE_TOOLTIP = "이 커서를 이동하여 아이콘 텍스처를 변경하십시오." 68 | VCB_CF_FRAME_BF_ANCHOR = "축" --Anchor 69 | VCB_CF_FRAME_BF_ANCHOR_TOOLTIP = "이 커서를 움직여 통합버프창의 축을 변경하십시오." 70 | VCB_CF_FRAME_BF_BACKGROUND = "백그라운드" 71 | VCB_CF_FRAME_BF_BACKGROUND_TOOLTIP = "이 커서를 움직여 버프의 배경 텍스처를 변경하십시오." 72 | VCB_CF_FRAME_BF_CUSTOM_BACKGROUND_PATH = "사용자 정의 배경 경로:" 73 | VCB_DBF_FRAME_COLOR_NONE = "없음" 74 | VCB_DBF_FRAME_COLOR_NONE_TOOLTIP = "불특정 디버프가 있는 경우 여기를 클릭하여 테두리 색상을 변경하십시오." 75 | VCB_DBF_FRAME_COLOR_POISON = "독" 76 | VCB_DBF_FRAME_COLOR_POISON_TOOLTIP = "독이 지정된 디버프가 있는 경우 디버프의 테두리의 색깔을 바꾸려면 여기를 클릭하십시오." 77 | VCB_DBF_FRAME_COLOR_MAGIC = "마법" 78 | VCB_DBF_FRAME_COLOR_MAGIC_TOOLTIP = "마법으로 지정된 디버프가 있는 경우 여기를 클릭하여 테두리 색상을 변경하십시오." 79 | VCB_DBF_FRAME_COLOR_CURSE = "저주" 80 | VCB_DBF_FRAME_COLOR_CURSE_TOOLTIP = "저주가 지정된 디버프가 있는 경우 테두리색상을 변경하려면 여기를 클릭하십시오." 81 | VCB_DBF_FRAME_COLOR_DISEASE = "질병" 82 | VCB_DBF_FRAME_COLOR_DISEASE_TOOLTIP = "질병이 지정된 디버프가 있는 경우 테두리색상을 변경하려면 여기를 클릭하십시오." 83 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME = "무기버프를 버프 프레임에 부착" 84 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME_TOOLTIP = "무기 프레임을 버프 프레임에 부착하려면 이 옵션을 선택하십시오. 무기 프레임은 버프 프레임 오라로서 취급됩니다." 85 | VCB_PM_FRAME_LEFT_INSERT_TEXT = "이름 입력:" 86 | VCB_PM_FRAME_LEFT_SELECT_TEXT = "선택한 프로필:" 87 | VCB_PM_FRAME_LEFT_CURRENT_TEXT = "현재 프로필:" 88 | VCB_PM_FRAME_LEFT_SAVE_TEXT = "저장" 89 | VCB_PM_FRAME_LEFT_DELETE_TEXT = "삭제" 90 | VCB_MISC_FRAME_TEXT_DISABLE_CF = "통합버프 아이콘 가리기" 91 | VCB_MISC_FRAME_TEXT_DISABLE_CF_TOOLTIP = "통합버프 아이콘을 사용하지 않으려면 이 옵션을 선택하십시오. 프레임은 고급 옵션이있는 일반 버프 프레임처럼 작동합니다." 92 | VCB_MISC_FRAME_TEXT_DISABLE_BB = "메카닉 금지 사용 안 함" --Disable banning mechanic 93 | VCB_MISC_FRAME_TEXT_DISABLE_BB_TOOLTIP = "매카닉 금지를 사용하지 않으려면 이 옵션을 선택하십시오." --Check this to disable the banning mechanic. 94 | VCB_MISC_FRAME_TEXT_THEME = "테마" 95 | VCB_MISC_FRAME_TEXT_THEME_TOOLTIP = "테마를 변경하려면 이 단추를 움직입니다. 테마를 로드하려면 옆에있는 버튼을 클릭하십시오." 96 | 97 | VCB_COMMON_COLOR_FONTCOLOR = "글꼴 색상 선택" 98 | VCB_COMMON_COLOR_FONTCOLOR_TOOLTIP = "글꼴의 색상을 변경하려면 여기를 클릭하십시오." 99 | VCB_COMMON_COLOR_BORDERCOLOR = "테두리 색 선택을 클릭하십시오." 100 | VCB_COMMON_COLOR_BORDERCOLOR_TOOLTIP = "테두리 색상을 변경하려면 여기를 클릭하십시오." 101 | VCB_COMMON_COLOR_BACKGROUNDCOLOR = "배경색 선택" 102 | VCB_COMMON_COLOR_BACKGROUNDCOLOR_TOOLTIP = "배경색상을 변경하려면 여기를 클릭하십시오." 103 | 104 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER = "글꼴 테두리" 105 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER_TOOLTIP = "글꼴 아웃라인을 확인하십시오." 106 | VCB_COMMON_BUTTON_INVERT_ORDER = "순서 반전" 107 | VCB_COMMON_BUTTON_INVERT_ORDER_TOOLTIP = "버프 주문을 반전하려면이 옵션을 선택하십시오." 108 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER = "사용자 정의 테두리 사용" 109 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER_TOOLTIP = "사용자정의 테두리를 사용하려면 이 옵션을 선택하십시오." 110 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND = "사용자정의 배경 사용" 111 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND_TOOLTIP = "사용자정의 배경을 사용하려면 이 옵션을 선택하십시오." 112 | VCB_COMMON_BUTTON_ENABLE_BORDER = "테두리 사용" 113 | VCB_COMMON_BUTTON_ENABLE_BORDER_TOOLTIP = "테두리를 추가하려면 이 옵션을 선택하십시오." 114 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR = "배경색 사용" 115 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR_TOOLTIP = "아이콘에 배경색을 추가하려면 이 옵션을 선택하십시오." 116 | VCB_COMMON_BUTTON_VERTICAL_MODE = "수직 모드" 117 | VCB_COMMON_BUTTON_VERTICAL_MODE_TOOLTIP = "이것을 확인하여 프레임을 수직 모드로 전환하십시오." 118 | VCB_COMMON_BUTTON_INVERT_ORIENTATION = "오라 방향을 반대로" --Invert aura orientation 119 | VCB_COMMON_BUTTON_INVERT_ORIENTATION_TOOLTIP = "오라 방향을 반대로하려면이 옵션을 선택하십시오. 버프가 오른쪽 대신에 왼쪽에 놓여 있다는 것을 의미합니다." 120 | VCB_COMMON_BUTTON_CUSTOMFONT = "사용자정의 글꼴" 121 | VCB_COMMON_BUTTON_CUSTOMFONT_TOOLTIP = "기본설정된 글꼴 대신 사용자정의 글꼴을 사용하십시오." 122 | 123 | VCB_COMMON_BUTTON_LOAD_TEXT = "불러오기" 124 | 125 | VCB_COMMON_SLIDER_FONT_SIZE = "폰트 사이즈" 126 | VCB_COMMON_SLIDER_FONT_SIZE_TOOLTIP = "글꼴 크기를 변경하려면이 커서를 좌우로 움직이세요." 127 | VCB_COMMON_SLIDER_FONT = "폰트" 128 | VCB_COMMON_SLIDER_FONT_TOOLTIP = "이 글꼴을 변경하려면 커서를 이동하십시오." 129 | VCB_COMMON_SLIDER_FONT_OPACITY = "폰트 불투명도" 130 | VCB_COMMON_SLIDER_FONT_OPACITY_TOOLTIP = "불투명도를 변경하려면이 값을 움직입니다." 131 | VCB_COMMON_SLIDER_SCALE = "크기" 132 | VCB_COMMON_SLIDER_SCALE_TOOLTIP = "이 커서를 좌우로 움직여 통합버프아이콘창의 폰트크기를 변경 하십시오." 133 | VCB_COMMON_SLIDER_BUFFS_PER_ROW = "행당(세로) 버프 수" --Buffs per row 134 | VCB_COMMON_SLIDER_BUFFS_PER_ROW_TOOLTIP = "통합버프아이콘창의 행당(세로)버프수를 변경하십시오." 135 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY = "배경 불투명도" 136 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY_TOOLTIP = "커서를 움직여 배경의 불투명도를 변경하십시오." 137 | VCB_COMMON_SLIDER_BORDER = "테두리" 138 | VCB_COMMON_SLIDER_BORDER_TOOLTIP = "테두리 텍스처를 변경하려면 이 커서를 움직입니다." 139 | VCB_COMMON_SLIDER_BORDER_OPACITY = "테두리 불투명도" 140 | VCB_COMMON_SLIDER_BORDER_OPACITY_TOOLTIP = "테두리 불투명도를 변경하려면 이 커서를 움직입니다." 141 | VCB_COMMON_SLIDER_PADDING_H = "페딩 H" 142 | VCB_COMMON_SLIDER_PADDING_H_TOOLTIP = "이 커서를 움직여 버프의 수평 간격을 변경하십시오." 143 | VCB_COMMON_SLIDER_PADDING_V = "페딩 V" 144 | VCB_COMMON_SLIDER_PADDING_V_TOOLTIP = "이 커서를 움직여 버프의 수직 간격을 변경하십시오." 145 | VCB_COMMON_SLIDER_FONT_OFFSET_X = "폰트 옵셋 X" 146 | VCB_COMMON_SLIDER_FONT_OFFSET_X_TOOLTIP = "폰트의 수평 옵셋을 변경하려면 이 값을 이동하십시오." 147 | VCB_COMMON_SLIDER_FONT_OFFSET_Y = "폰트 옵셋 Y" 148 | VCB_COMMON_SLIDER_FONT_OFFSET_Y_TOOLTIP = "폰트의 세로 옵셋을 변경하려면 이 값을 이동하십시오." 149 | 150 | VCB_COMMON_EDITBOX_CUSTOM_BORDER_PATH = "사용자정의 테두리 경로:" 151 | VCB_COMMON_EDITBOX_CUSTOMFONT_PATH = "사용자정의 글꼴 경로:" 152 | 153 | VCB_COMMON_PAGE_1 = "페이지 2에 1" 154 | VCB_COMMON_PAGE_2 = "페이지 2에 2" 155 | 156 | VCB_CAT_GENERAL = "일반" 157 | VCB_CAT_CONSOLIDATED_ICON = "통합버프 아이콘" 158 | VCB_CAT_BUFF_FRAME = "버프 프레임" 159 | VCB_CAT_AURA = "아우라(버프)" 160 | VCB_CAT_AURA_TIMER = "아우라 타이머" 161 | VCB_CAT_BORDER = "테두리" 162 | VCB_CAT_ABOUT_1 = "VCB 란 무엇입니까?" 163 | VCB_CAT_ABOUT_2 = "누가 VCB를 만들었습니까?" 164 | VCB_CAT_ABOUT_3 = "특별 감사 :" 165 | VCB_CAT_ABOUT_4 = "한글 애드온 다운로드" 166 | 167 | VCB_ABOUT_TEXT_1 = "Vanilla Consolidate Buff-Frames (VCB)는 오라를 관리하는 스마트 시스템입니다. AddOn은 취향에 맞게 사용자 정의 할 수있는 많은 기능을 제공하며 더 낳은 개요를 위해 많은 유용한 기능을 추가합니다. 이는 처음부터 그 목적입니다." 168 | VCB_ABOUT_TEXT_2 = "VCB는 Kronos (Twinstar.cz)에서 AddOn을 개발 한 Shino (Albea) 가 제작했습니다. 그는 공식적으로 Twinstar 커뮤니티에서 Geigerkind로 알려져 있습니다." 169 | VCB_ABOUT_TEXT_3 = "Flynn (Twinstar AddOn Master) - 처음부터 도와 줘서 고마워. Schaka (Questie의 저자) - 처음부터 나를 도와 주셔서 감사합니다. Sinsthar (PowerAuras의 저자) - 당신은 나에게 인터페이스를 만드는 영감을주었습니다." 170 | VCB_ABOUT_TEXT_4 = "Moosic - AddOn Fender 테스트 - Areina의 초기 피드백 -이 말을 도와주었습니다 ^^" 171 | VCB_ABOUT_TEXT_5 = "http://cafe.naver.com/vanillawow - again 길드" 172 | 173 | VCB_CUR_PROFILE_TEXT = "알수 없음" 174 | VCB_CONSOLIDATED_BUFFS_TEXT_1 = "야생의 징표" 175 | VCB_CONSOLIDATED_BUFFS_TEXT_2 = "야생의 선물" 176 | VCB_CONSOLIDATED_BUFFS_TEXT_3 = "신의 권능: 인내" 177 | VCB_CONSOLIDATED_BUFFS_TEXT_4 = "인내의 기원" 178 | VCB_CONSOLIDATED_BUFFS_TEXT_5 = "Divine Spirit" 179 | VCB_CONSOLIDATED_BUFFS_TEXT_6 = "Prayer of Spirit" 180 | VCB_CONSOLIDATED_BUFFS_TEXT_7 = "Shadow Protection" 181 | VCB_CONSOLIDATED_BUFFS_TEXT_8 = "Prayer of Shadow Protection" 182 | VCB_CONSOLIDATED_BUFFS_TEXT_9 = "Arcane Intellect" 183 | VCB_CONSOLIDATED_BUFFS_TEXT_10 = "Arcane Brilliance" 184 | VCB_CONSOLIDATED_BUFFS_TEXT_11 = "Greater Blessing of Sanctuary" 185 | VCB_CONSOLIDATED_BUFFS_TEXT_12 = "Greater Blessing of Kings" 186 | VCB_CONSOLIDATED_BUFFS_TEXT_13 = "Greater Blessing of Might" 187 | VCB_CONSOLIDATED_BUFFS_TEXT_14 = "Greater Blessing of Salvation" 188 | VCB_CONSOLIDATED_BUFFS_TEXT_15 = "Greater Blessing of Wisdom" 189 | VCB_CONSOLIDATED_BUFFS_TEXT_16 = "Greater Blessing of Light" 190 | VCB_CONSOLIDATED_BUFFS_TEXT_17 = "Trueshot Aura" 191 | 192 | VCB_WELCOME_TEXT = " 이제 로드되었습니다.! VCB를 구성하려면 /vcb 또는 /버프확장 명령을 사용하십시오!" 193 | VCB_HAS_BEEN_LOADED = " 로드되었습니다.!" 194 | VCB_HAS_BEEN_SAVED = " 저장 되었습니다.!" 195 | VCB_HAS_BEEN_REMOVED = " 제거 되었습니다.!" 196 | VCB_TEXT_PROFILE = "프로파일: " 197 | VCB_HAS_BEEN_CANCELLED = " 취소 되었습니다.!" 198 | VCB_HAS_BEEN_ADDED = " 추가 되었습니다.!" 199 | VCB_IS_ALREADY_IN_LIST = " 이미 목록에 있습니다.!" 200 | VCB_IS_NOT_IN_LIST = " 목록에 없습니다.!" 201 | VCB_CB_LIST_EMPTIED = "통합버프아이콘창의 목록이 비워졌습니다.!" 202 | VCB_BB_LIST_EMPTIED = "금지 된 버프 목록이 비워졌습니다.!" 203 | 204 | VCB_ABILITY_LOWER_SCRIPT_1 = "야생의 징표" 205 | VCB_ABILITY_LOWER_SCRIPT_2 = "야생의 선물" 206 | VCB_ABILITY_LOWER_SCRIPT_3 = "정조준 오라" 207 | VCB_ABILITY_LOWER_SCRIPT_4 = "상급 왕의 축복" 208 | VCB_ABILITY_LOWER_SCRIPT_5 = "왕의 축복" 209 | VCB_ABILITY_LOWER_SCRIPT_6 = "상급 힘의 축복" 210 | VCB_ABILITY_LOWER_SCRIPT_7 = "힘의 축복" 211 | VCB_ABILITY_LOWER_SCRIPT_8 = "상급 지혜의 축복" 212 | VCB_ABILITY_LOWER_SCRIPT_9 = "지혜의 축복" 213 | VCB_ABILITY_LOWER_SCRIPT_10 = "greater blessing of light" 214 | VCB_ABILITY_LOWER_SCRIPT_11 = "빛의 축복" 215 | VCB_ABILITY_LOWER_SCRIPT_12 = "greater blessing of salvation" 216 | VCB_ABILITY_LOWER_SCRIPT_13 = "blessing of salvation" 217 | VCB_ABILITY_LOWER_SCRIPT_14 = "신비한 지능" 218 | VCB_ABILITY_LOWER_SCRIPT_15 = "신비한 총명함" 219 | VCB_ABILITY_LOWER_SCRIPT_16 = "신의 권능: 인내" 220 | VCB_ABILITY_LOWER_SCRIPT_17 = "인내의 기원" 221 | VCB_ABILITY_LOWER_SCRIPT_18 = "divine spirit" 222 | VCB_ABILITY_LOWER_SCRIPT_19 = "prayer of spirit" 223 | VCB_ABILITY_LOWER_SCRIPT_20 = "암흑 보호" 224 | VCB_ABILITY_LOWER_SCRIPT_21 = "암흑 보호의 기원" 225 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT_TOOLTIP = "타이머의 유닛을 제거하려면 이 옵션을 선택하십시오.(즉, m/s/h)" 226 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT = "단위 제거" --Remove unit 227 | 228 | VCB_LOCKED_FRAMES = "프레임 잠금!" 229 | VCB_UNLOCKED_FRAMES = "프레임 잠금 해제!" 230 | end 231 | -------------------------------------------------------------------------------- /VCB_Buffframe.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | this:SetClampedToScreen(true) 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | this:SetClampedToScreen(true) 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | this:SetClampedToScreen(true) 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | VCB_BF_CONSOLIDATED_ICONIcon:SetTexture(nil) 79 | VCB_BF_CONSOLIDATED_ICONIcon:SetTexture("Interface\\AddOns\\VCB\\images\\"..VCB_SAVE["CF_icon_texture"].."_hover.tga") 80 | if (not VCB_BF_CF_FRAME:IsVisible()) and (not VCB_BF_CF_FRAME2:IsVisible()) and (VCB_BF_LOCKED) then 81 | VCB_BF_CONSOLIDATED_BUFFFRAME:Show() 82 | end 83 | 84 | 85 | VCB_BF_CONSOLIDATED_ICONIcon:SetTexture(nil) 86 | VCB_BF_CONSOLIDATED_ICONIcon:SetTexture("Interface\\AddOns\\VCB\\images\\"..VCB_SAVE["CF_icon_texture"]..".tga") 87 | if (not VCB_BF_CF_FRAME:IsVisible()) and (not VCB_BF_CF_FRAME2:IsVisible()) then 88 | VCB_BF_CONSOLIDATED_BUFFFRAME:Hide() 89 | end 90 | 91 | 92 | if (not VCB_BF_LOCKED) and VCB_IS_LOADED then 93 | if (not VCB_SAVE["CF_icon_attach"]) then 94 | this:StartMoving() 95 | else 96 | VCB_BF_BUFF_FRAME:StartMoving() 97 | end 98 | end 99 | 100 | 101 | if (not VCB_BF_LOCKED) and VCB_IS_LOADED then 102 | if (not VCB_SAVE["CF_icon_attach"]) then 103 | this:StopMovingOrSizing() 104 | else 105 | VCB_BF_BUFF_FRAME:StopMovingOrSizing() 106 | end 107 | end 108 | 109 | 110 | this:SetClampedToScreen(true) 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | if (not VCB_BF_CF_FRAME:IsVisible()) and (not VCB_BF_CF_FRAME2:IsVisible()) and (VCB_BF_LOCKED) then 154 | this:Show() 155 | end 156 | 157 | 158 | if (not VCB_BF_CF_FRAME:IsVisible()) and (not VCB_BF_CF_FRAME2:IsVisible()) then 159 | this:Hide() 160 | end 161 | 162 | 163 | 164 | 165 | 260 | 261 | 293 | 294 | 343 | 344 | 408 | 409 | 410 | 411 | 412 | VCB_BF_OnLoad() 413 | 414 | 415 | 416 | -------------------------------------------------------------------------------- /localization/enUS.lua: -------------------------------------------------------------------------------- 1 | VCB_MAIN_NAME = "Vanilla Consolidate Buff-Frames" 2 | VCB_MAIN_VERSION = "v4.0" 3 | VCB_MINIMAP_TOOLTIP_NAME = "Vanilla Consolidate Buff-Frames" 4 | VCB_MINIMAP_TOOLTIP_LEFTCLICK = "LeftClick: Toggle option menu" 5 | VCB_MINIMAP_TOOLTIP_RIGHTCLICK = "RightClick: Toggle frame lock" 6 | VCB_MINIMAP_TOOLTIP_DRAG = "Drag: Move MiniMap icon" 7 | VCB_TOP_BUTTON_CLOSE = "Close configuration frame" 8 | VCB_TOP_BUTTON_LOCK = "Lock VCB" 9 | VCB_TOP_BUTTON_MINIMAP = "Toggle MiniMap button" 10 | VCB_TOP_BUTTON_DUMMY = "Toggle Dummy Mode" 11 | VCB_MENU_HEAD = "MENU" 12 | VCB_MENU_BUTTON1_LINK = "Consolidated Buffs" 13 | VCB_MENU_BUTTON1_NAME = "Consolidated Buffs" 14 | VCB_MENU_BUTTON2_LINK = "Banned Buffs" 15 | VCB_MENU_BUTTON2_NAME = "Banned Buffs" 16 | VCB_MENU_BUTTON3_LINK = "Timer" 17 | VCB_MENU_BUTTON3_NAME = "Timer" 18 | VCB_MENU_BUTTON4_LINK = "Consolidated Frame -1-" 19 | VCB_MENU_BUTTON4_LINK2 = "Consolidated Frame -2-" 20 | VCB_MENU_BUTTON4_NAME = "Consolidated Frame" 21 | VCB_MENU_BUTTON5_LINK = "Buff Frame -1-" 22 | VCB_MENU_BUTTON5_LINK2 = "Buff Frame -2-" 23 | VCB_MENU_BUTTON5_NAME = "Buff Frame" 24 | VCB_MENU_BUTTON6_LINK = "Debuff Frame -1-" 25 | VCB_MENU_BUTTON6_LINK2 = "Debuff Frame -2-" 26 | VCB_MENU_BUTTON6_NAME = "Debuff Frame" 27 | VCB_MENU_BUTTON7_LINK = "Weapon Frame -1-" 28 | VCB_MENU_BUTTON7_NAME = "Weapon Frame" 29 | VCB_MENU_BUTTON8_LINK = "Profile Manager" 30 | VCB_MENU_BUTTON8_NAME = "Profile Manager" 31 | VCB_MENU_BUTTON9_LINK = "Miscellaneous" 32 | VCB_MENU_BUTTON9_NAME = "Miscellaneous" 33 | VCB_MENU_BUTTON10_LINK = "About VCB" 34 | VCB_MENU_BUTTON10_NAME = "About VCB" 35 | VCB_CONFIG_FRAME_TITLE_ONLOAD = "Consolidated Buffs" 36 | VCB_CB_BB_FRAME_LEFT_INSERT = "Insert a buff name:" 37 | VCB_CB_BB_FRAME_LEFT_DELETE = "Selected aura:" 38 | VCB_CB_BB_FRAME_LEFT_ADD = "Add" 39 | VCB_CB_BB_FRAME_LEFT_DELETE_BUTTON = "Delete" 40 | VCB_CB_BB_FRAME_LEFT_RA = "Remove all" 41 | VCB_TIMER_FRAME_SHOW_HOURS = "Show hours" 42 | VCB_TIMER_FRAME_SHOW_HOURS_TOOLTIP = "Check this to format the timer to hours if more than 3600s are left." 43 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT = "Show hours and minutes (h:m)" 44 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT_TOOLTIP = "Check this to show both hours and minutes. For example: 1:34h." 45 | VCB_TIMER_FRAME_SHOW_MINUTES = "Show minutes" 46 | VCB_TIMER_FRAME_SHOW_MINUTES_TOOLTIP = "Check this to format the timer to minutes if more than 60s are left." 47 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT = "Show minutes and seconds (m:s)" 48 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT_TOOLTIP = "Check this to show both minutes and seconds. For example: 10:24m." 49 | VCB_TIMER_FRAME_SHOW_TENTH = "Show tenth the last 60 seconds" 50 | VCB_TIMER_FRAME_SHOW_TENTH_TOOLTIP = "Check this to show tenths. For example: 10:44s." 51 | VCB_TIMER_FRAME_ROUND_DOWN = "Round down" 52 | VCB_TIMER_FRAME_ROUND_DOWN_TOOLTIP = "Check this to round down the timer. For example: 70s -> 1m." 53 | VCB_TIMER_FRAME_ROUND_UP = "Round up" 54 | VCB_TIMER_FRAME_ROUND_UP_TOOLTIP = "Check this to round up the timer. For example: 70s -> 2m." 55 | VCB_TIMER_FRAME_FLASH = "Enable flash animation" 56 | VCB_TIMER_FRAME_FLASH_TOOLTIP = "Check this to enable the flash animation if the aura is close to expire (30s)" 57 | VCB_TIMER_FRAME_COLOR_BELOW_60 = "Change color below 60s" 58 | VCB_TIMER_FRAME_COLOR_BELOW_60_TOOLTIP = "Check this to change the color if the aura remains less than 60s." 59 | VCB_CF_FRAME_POSSIBLE_BUFFS = "Show amount out of possible buffs" 60 | VCB_CF_FRAME_POSSIBLE_BUFFS_TOOLTIP = "Check this to show the amount of buffs, out of the buffs that you have, on the consolidate icon that could be consolidated if you had them." 61 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT = "Show missing buffs (grayed out)" 62 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT_TOOLTIP = "Check this to show possible missing buffs that could have been consolidated." 63 | VCB_CF_FRAME_ICON_OPACITY = "Icon opacity" 64 | VCB_CF_FRAME_ICON_OPACITY_TOOLTIP = "Move this to change the opacity of the icon." 65 | VCB_CF_FRAME_ICON_TEXTURE = "Texture" 66 | VCB_CF_FRAME_ICON_TEXTURE_TOOLTIP = "Move this to change the icon texture." 67 | VCB_CF_FRAME_BF_ANCHOR = "Anchor" 68 | VCB_CF_FRAME_BF_ANCHOR_TOOLTIP = "Move this to change the anchor of the buff frame." 69 | VCB_CF_FRAME_BF_BACKGROUND = "Background" 70 | VCB_CF_FRAME_BF_BACKGROUND_TOOLTIP = "Move this to change the background texture of the buff frame." 71 | VCB_CF_FRAME_BF_CUSTOM_BACKGROUND_PATH = "Custom background path:" 72 | VCB_DBF_FRAME_COLOR_NONE = "None" 73 | VCB_DBF_FRAME_COLOR_NONE_TOOLTIP = "Click here to change the color of the border if you have an unspecified debuff." 74 | VCB_DBF_FRAME_COLOR_POISON = "Poison" 75 | VCB_DBF_FRAME_COLOR_POISON_TOOLTIP = "Click here to change the color of the border if you have an as poison specified debuff." 76 | VCB_DBF_FRAME_COLOR_MAGIC = "Magic" 77 | VCB_DBF_FRAME_COLOR_MAGIC_TOOLTIP = "Click here to change the color of the border if you have an as magic specified debuff." 78 | VCB_DBF_FRAME_COLOR_CURSE = "Curse" 79 | VCB_DBF_FRAME_COLOR_CURSE_TOOLTIP = "Click here to change the color of the border if you have an as curse specified debuff." 80 | VCB_DBF_FRAME_COLOR_DISEASE = "Disease" 81 | VCB_DBF_FRAME_COLOR_DISEASE_TOOLTIP = "Click here to change the color of the border if you have an as disease specified debuff." 82 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME = "Attach to Buff-Frame" 83 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME_TOOLTIP = "Check this to attach the weapon frame to the buff frame. The weapon frame will be handled as buff frame aura then." 84 | VCB_PM_FRAME_LEFT_INSERT_TEXT = "Insert name:" 85 | VCB_PM_FRAME_LEFT_SELECT_TEXT = "Selected profile:" 86 | VCB_PM_FRAME_LEFT_CURRENT_TEXT = "Current Profile:" 87 | VCB_PM_FRAME_LEFT_SAVE_TEXT = "Save" 88 | VCB_PM_FRAME_LEFT_DELETE_TEXT = "Delete" 89 | VCB_MISC_FRAME_TEXT_DISABLE_CF = "Disable consolidate mechanic" 90 | VCB_MISC_FRAME_TEXT_DISABLE_CF_TOOLTIP = "Check this to disable the consolidate mechanic. The frame will work as normal buff frame with advanced options then." 91 | VCB_MISC_FRAME_TEXT_DISABLE_BB = "Disable banning mechanic" 92 | VCB_MISC_FRAME_TEXT_DISABLE_BB_TOOLTIP = "Check this to disable the banning mechanic." 93 | VCB_MISC_FRAME_TEXT_THEME = "Theme" 94 | VCB_MISC_FRAME_TEXT_THEME_TOOLTIP = "Move this to change the Theme. Click the button next to it to load the theme then." 95 | 96 | VCB_COMMON_COLOR_FONTCOLOR = "Select font color" 97 | VCB_COMMON_COLOR_FONTCOLOR_TOOLTIP = "Click here to change the color of the font." 98 | VCB_COMMON_COLOR_BORDERCOLOR = "Select border color" 99 | VCB_COMMON_COLOR_BORDERCOLOR_TOOLTIP = "Click here to change the color of the border." 100 | VCB_COMMON_COLOR_BACKGROUNDCOLOR = "Select background color" 101 | VCB_COMMON_COLOR_BACKGROUNDCOLOR_TOOLTIP = "Click here to change the color of the background." 102 | 103 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER = "Font Border" 104 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER_TOOLTIP = "Check this to outline the font." 105 | VCB_COMMON_BUTTON_INVERT_ORDER = "Invert order" 106 | VCB_COMMON_BUTTON_INVERT_ORDER_TOOLTIP = "Check this to invert the buff order." 107 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER = "Use custom border" 108 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER_TOOLTIP = "Check this to use your custom border." 109 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND = "Use custom background" 110 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND_TOOLTIP = "Check this to use your custom background." 111 | VCB_COMMON_BUTTON_ENABLE_BORDER = "Enable border" 112 | VCB_COMMON_BUTTON_ENABLE_BORDER_TOOLTIP = "Check this to add a border." 113 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR = "Enable background color" 114 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR_TOOLTIP = "Check this to add a background color to the icon." 115 | VCB_COMMON_BUTTON_VERTICAL_MODE = "Vertical mode" 116 | VCB_COMMON_BUTTON_VERTICAL_MODE_TOOLTIP = "Check this to turn the frames and switch into vertical mode." 117 | VCB_COMMON_BUTTON_INVERT_ORIENTATION = "Invert aura orientation" 118 | VCB_COMMON_BUTTON_INVERT_ORIENTATION_TOOLTIP = "Check this to invert the aura orientation. Meaning that the buffs are oriented on the left side instead of the right etc." 119 | VCB_COMMON_BUTTON_CUSTOMFONT = "Custom Font" 120 | VCB_COMMON_BUTTON_CUSTOMFONT_TOOLTIP = "Use the a custom font instead of the provided ones." 121 | 122 | VCB_COMMON_BUTTON_LOAD_TEXT = "Load" 123 | 124 | VCB_COMMON_SLIDER_FONT_SIZE = "Font size" 125 | VCB_COMMON_SLIDER_FONT_SIZE_TOOLTIP = "Move this to change the font size." 126 | VCB_COMMON_SLIDER_FONT = "Font" 127 | VCB_COMMON_SLIDER_FONT_TOOLTIP = "Move this to change the font." 128 | VCB_COMMON_SLIDER_FONT_OPACITY = "Font opacity" 129 | VCB_COMMON_SLIDER_FONT_OPACITY_TOOLTIP = "Move this to change the opacity." 130 | VCB_COMMON_SLIDER_SCALE = "Scale" 131 | VCB_COMMON_SLIDER_SCALE_TOOLTIP = "Move this to change the scale of the module." 132 | VCB_COMMON_SLIDER_BUFFS_PER_ROW = "Buffs per row" 133 | VCB_COMMON_SLIDER_BUFFS_PER_ROW_TOOLTIP = "Move this to change the amount of auras per row." 134 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY = "Background opacity" 135 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY_TOOLTIP = "Move this to change the background opacity." 136 | VCB_COMMON_SLIDER_BORDER = "Border" 137 | VCB_COMMON_SLIDER_BORDER_TOOLTIP = "Move this to change the border texture." 138 | VCB_COMMON_SLIDER_BORDER_OPACITY = "Border opacity" 139 | VCB_COMMON_SLIDER_BORDER_OPACITY_TOOLTIP = "Move this to change the border opacity." 140 | VCB_COMMON_SLIDER_PADDING_H = "Padding H" 141 | VCB_COMMON_SLIDER_PADDING_H_TOOLTIP = "Move this to change the horizontal padding of each aura." 142 | VCB_COMMON_SLIDER_PADDING_V = "Padding V" 143 | VCB_COMMON_SLIDER_PADDING_V_TOOLTIP = "Move this to change the vertical padding of each aura." 144 | VCB_COMMON_SLIDER_FONT_OFFSET_X = "Font offset X" 145 | VCB_COMMON_SLIDER_FONT_OFFSET_X_TOOLTIP = "Move this to change the horizontal offset of the font." 146 | VCB_COMMON_SLIDER_FONT_OFFSET_Y = "Font offset Y" 147 | VCB_COMMON_SLIDER_FONT_OFFSET_Y_TOOLTIP = "Move this to change the vertical offset of the font." 148 | 149 | VCB_COMMON_EDITBOX_CUSTOM_BORDER_PATH = "Custom border path:" 150 | VCB_COMMON_EDITBOX_CUSTOMFONT_PATH = "Custom Font path:" 151 | 152 | VCB_COMMON_PAGE_1 = "Page 1 of 2" 153 | VCB_COMMON_PAGE_2 = "Page 2 of 2" 154 | 155 | VCB_CAT_GENERAL = "General" 156 | VCB_CAT_CONSOLIDATED_ICON = "Consolidate Icon" 157 | VCB_CAT_BUFF_FRAME = "Buff Frame" 158 | VCB_CAT_AURA = "Aura" 159 | VCB_CAT_AURA_TIMER = "Aura Timer" 160 | VCB_CAT_BORDER = "Border" 161 | VCB_CAT_ABOUT_1 = "What is VCB?" 162 | VCB_CAT_ABOUT_2 = "Who created VCB?" 163 | VCB_CAT_ABOUT_3 = "Special thanks to:" 164 | VCB_CAT_ABOUT_4 = "Thanks for supporting!" 165 | 166 | VCB_ABOUT_TEXT_1 = "Vanilla Consolidate Buff-Frames (VCB) is a smart system to manage your auras. The AddOn provides a lot functions to customize it to your tastes and adds a lot of helpful functions for a better overview, which is its purpose in the first place anyway." 167 | VCB_ABOUT_TEXT_2 = "VCB was created by Shino (Albea) who developed the AddOn on Kronos (Twinstar.cz). He is formally known as Geigerkind in the Twinstar community." 168 | VCB_ABOUT_TEXT_3 = "Flynn (Twinstar AddOn Master) - Thanks for helping me in the beginning. Schaka (Author of Questie) - Thanks for helping me in the beginning. Sinsthar (Author of PowerAuras) - You kinda inspired me to create an interface." 169 | VCB_ABOUT_TEXT_4 = "Moosic - Tested the AddOn Fender - Feedback early on Areina - Helped phrasing this^^" 170 | VCB_ABOUT_TEXT_5 = "Dopefish - Feedback early on Helvete - Feedback early on Ayz - Feedback early on" 171 | 172 | VCB_CUR_PROFILE_TEXT = "Unknown" 173 | VCB_CONSOLIDATED_BUFFS_TEXT_1 = "Mark of the Wild" 174 | VCB_CONSOLIDATED_BUFFS_TEXT_2 = "Gift of the Wild" 175 | VCB_CONSOLIDATED_BUFFS_TEXT_3 = "Power Word: Fortitude" 176 | VCB_CONSOLIDATED_BUFFS_TEXT_4 = "Prayer of Fortitude" 177 | VCB_CONSOLIDATED_BUFFS_TEXT_5 = "Divine Spirit" 178 | VCB_CONSOLIDATED_BUFFS_TEXT_6 = "Prayer of Spirit" 179 | VCB_CONSOLIDATED_BUFFS_TEXT_7 = "Shadow Protection" 180 | VCB_CONSOLIDATED_BUFFS_TEXT_8 = "Prayer of Shadow Protection" 181 | VCB_CONSOLIDATED_BUFFS_TEXT_9 = "Arcane Intellect" 182 | VCB_CONSOLIDATED_BUFFS_TEXT_10 = "Arcane Brilliance" 183 | VCB_CONSOLIDATED_BUFFS_TEXT_11 = "Greater Blessing of Sanctuary" 184 | VCB_CONSOLIDATED_BUFFS_TEXT_12 = "Greater Blessing of Kings" 185 | VCB_CONSOLIDATED_BUFFS_TEXT_13 = "Greater Blessing of Might" 186 | VCB_CONSOLIDATED_BUFFS_TEXT_14 = "Greater Blessing of Salvation" 187 | VCB_CONSOLIDATED_BUFFS_TEXT_15 = "Greater Blessing of Wisdom" 188 | VCB_CONSOLIDATED_BUFFS_TEXT_16 = "Greater Blessing of Light" 189 | VCB_CONSOLIDATED_BUFFS_TEXT_17 = "Trueshot Aura" 190 | 191 | VCB_WELCOME_TEXT = " is now loaded! Use the command /vcb to configure VCB!" 192 | VCB_HAS_BEEN_LOADED = " has been loaded!" 193 | VCB_HAS_BEEN_SAVED = " has been saved!" 194 | VCB_HAS_BEEN_REMOVED = " has been removed!" 195 | VCB_TEXT_PROFILE = "Profile: " 196 | VCB_HAS_BEEN_CANCELLED = " has been cancelled!" 197 | VCB_HAS_BEEN_ADDED = " has been added!" 198 | VCB_IS_ALREADY_IN_LIST = " is already in the list!" 199 | VCB_IS_NOT_IN_LIST = " is not in the list!" 200 | VCB_CB_LIST_EMPTIED = "The Consolidated Buffs list was emptied!" 201 | VCB_BB_LIST_EMPTIED = "The Banned Buffs list was emptied!" 202 | 203 | VCB_ABILITY_LOWER_SCRIPT_1 = "mark of the wild" 204 | VCB_ABILITY_LOWER_SCRIPT_2 = "gift of the wild" 205 | VCB_ABILITY_LOWER_SCRIPT_3 = "trueshot aura" 206 | VCB_ABILITY_LOWER_SCRIPT_4 = "greater blessing of kings" 207 | VCB_ABILITY_LOWER_SCRIPT_5 = "blessing of kings" 208 | VCB_ABILITY_LOWER_SCRIPT_6 = "greater blessing of might" 209 | VCB_ABILITY_LOWER_SCRIPT_7 = "blessing of might" 210 | VCB_ABILITY_LOWER_SCRIPT_8 = "greater blessing of wisdom" 211 | VCB_ABILITY_LOWER_SCRIPT_9 = "blessing of wisdom" 212 | VCB_ABILITY_LOWER_SCRIPT_10 = "greater blessing of light" 213 | VCB_ABILITY_LOWER_SCRIPT_11 = "blessing of light" 214 | VCB_ABILITY_LOWER_SCRIPT_12 = "greater blessing of salvation" 215 | VCB_ABILITY_LOWER_SCRIPT_13 = "blessing of salvation" 216 | VCB_ABILITY_LOWER_SCRIPT_14 = "arcane intellect" 217 | VCB_ABILITY_LOWER_SCRIPT_15 = "arcane brilliance" 218 | VCB_ABILITY_LOWER_SCRIPT_16 = "power word: fortitude" 219 | VCB_ABILITY_LOWER_SCRIPT_17 = "prayer of fortitude" 220 | VCB_ABILITY_LOWER_SCRIPT_18 = "divine spirit" 221 | VCB_ABILITY_LOWER_SCRIPT_19 = "prayer of spirit" 222 | VCB_ABILITY_LOWER_SCRIPT_20 = "shadow protection" 223 | VCB_ABILITY_LOWER_SCRIPT_21 = "prayer of shadow protection" 224 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT_TOOLTIP = "Check this to remove the unit of the timer. (i.e. m/s/h)." 225 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT = "Remove unit" 226 | 227 | VCB_LOCKED_FRAMES = "Locked the frames!" 228 | VCB_UNLOCKED_FRAMES = "Unlocked the frames!" 229 | 230 | -------------------------------------------------------------------------------- /localization/deDE.lua: -------------------------------------------------------------------------------- 1 | if (GetLocale() == "deDE") then 2 | VCB_MAIN_NAME = "Vanilla Consolidate Buff-Frames" 3 | VCB_MAIN_VERSION = "v4.0" 4 | VCB_MINIMAP_TOOLTIP_NAME = "Vanilla Consolidate Buff-Frames" 5 | VCB_MINIMAP_TOOLTIP_LEFTCLICK = "Linksklick: Zeige/ Verstecke das Menü" 6 | VCB_MINIMAP_TOOLTIP_RIGHTCLICK = "Rechtsklick: (Un)/fixiere die Fenster" 7 | VCB_MINIMAP_TOOLTIP_DRAG = "Ziehen: Bewege den MiniMap Button" 8 | VCB_TOP_BUTTON_CLOSE = "Schließe das Menü" 9 | VCB_TOP_BUTTON_LOCK = "(un)/fixiere die Fenster" 10 | VCB_TOP_BUTTON_MINIMAP = "Zeige/ Verstecke den MiniMap Button" 11 | VCB_TOP_BUTTON_DUMMY = "Zeige/ Verstecke die Dummy Buttons" 12 | VCB_MENU_HEAD = "MENÜ" 13 | VCB_MENU_BUTTON1_LINK = "Konsolidierte Buffs" 14 | VCB_MENU_BUTTON1_NAME = "Konsolidierte Buffs" 15 | VCB_MENU_BUTTON2_LINK = "Verbannte Buffs" 16 | VCB_MENU_BUTTON2_NAME = "Verbannte Buffs" 17 | VCB_MENU_BUTTON3_LINK = "Timer" 18 | VCB_MENU_BUTTON3_NAME = "Timer" 19 | VCB_MENU_BUTTON4_LINK = "Konsolidierte Optionsmenü -1-" 20 | VCB_MENU_BUTTON4_LINK2 = "Konsolidierte Optionsmenü -2-" 21 | VCB_MENU_BUTTON4_NAME = "Konsolidierte Optionsmenü" 22 | VCB_MENU_BUTTON5_LINK = "Buff-Fenster -1-" 23 | VCB_MENU_BUTTON5_LINK2 = "Buff-Fenster -2-" 24 | VCB_MENU_BUTTON5_NAME = "Buff-Fenster" 25 | VCB_MENU_BUTTON6_LINK = "Debuff-Fenster -1-" 26 | VCB_MENU_BUTTON6_LINK2 = "Debuff-Fenster -2-" 27 | VCB_MENU_BUTTON6_NAME = "Debuff-Fenster" 28 | VCB_MENU_BUTTON7_LINK = "Waffenfenster -1-" 29 | VCB_MENU_BUTTON7_NAME = "Waffenfenster" 30 | VCB_MENU_BUTTON8_LINK = "Profilmanager" 31 | VCB_MENU_BUTTON8_NAME = "Profilmanager" 32 | VCB_MENU_BUTTON9_LINK = "Sonstiges" 33 | VCB_MENU_BUTTON9_NAME = "Sonstiges" 34 | VCB_MENU_BUTTON10_LINK = "über VCB" 35 | VCB_MENU_BUTTON10_NAME = "über VCB" 36 | VCB_CONFIG_FRAME_TITLE_ONLOAD = "Konsolidierte Buffs" 37 | VCB_CB_BB_FRAME_LEFT_INSERT = "Füge einen Buffnamen ein:" 38 | VCB_CB_BB_FRAME_LEFT_DELETE = "Ausgewählte Aura:" 39 | VCB_CB_BB_FRAME_LEFT_ADD = "Hinzufügen" 40 | VCB_CB_BB_FRAME_LEFT_DELETE_BUTTON = "Löschen" 41 | VCB_CB_BB_FRAME_LEFT_RA = "Alles löschen" 42 | VCB_TIMER_FRAME_SHOW_HOURS = "Zeige Stunden" 43 | VCB_TIMER_FRAME_SHOW_HOURS_TOOLTIP = "Kreuze das an, um die angezeigte Zeit in Stunden umzuwandeln, wenn mehr als 3600 Sekunden verbleiben." 44 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT = "Zeige Stunden und Minuten (h:m)" 45 | VCB_TIMER_FRAME_SHOW_HOURS_CONVERT_TOOLTIP = "Kreuze das an, um Stunden und Minuten zu zeigen. Zum Beispiel: 1:34h." 46 | VCB_TIMER_FRAME_SHOW_MINUTES = "Zeige Minuten" 47 | VCB_TIMER_FRAME_SHOW_MINUTES_TOOLTIP = "Kreuze das an, um die angezeigte Zeit in Minuten umzuwandeln, wenn mehr als 60 Sekunden verbleiben." 48 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT = "Zeige Minuten und Sekunden (m:s)" 49 | VCB_TIMER_FRAME_SHOW_MINUTES_CONVERT_TOOLTIP = "Kreuze das an, um Minuten und Sekunden zu zeigen. Zun Beispiel: 10:34m." 50 | VCB_TIMER_FRAME_SHOW_TENTH = "Zeige Zehntel in den letzten 60 Sekunden" 51 | VCB_TIMER_FRAME_SHOW_TENTH_TOOLTIP = "Kreuze das an, um Zehntel zu zeigen. Zum Beispiel: 10:44s." 52 | VCB_TIMER_FRAME_ROUND_DOWN = "Abrunden" 53 | VCB_TIMER_FRAME_ROUND_DOWN_TOOLTIP = "Kreuze das an, um die verbleibende Zeit abzurunden. Zum Beispiel: 70 Sekunden -> 1 Minute." 54 | VCB_TIMER_FRAME_ROUND_UP = "Aufrunden" 55 | VCB_TIMER_FRAME_ROUND_UP_TOOLTIP = "Kreuze das an, um die verbleibende Zeit aufzurunden. Zum Beispiel: 70 Sekunden -> 2 Minuten." 56 | VCB_TIMER_FRAME_FLASH = "Aktiviere Blink-Animation" 57 | VCB_TIMER_FRAME_FLASH_TOOLTIP = "Kreuze das an, um die Blink-Animation zu aktivieren, wenn weniger als 30 Sekunden verbleiben." 58 | VCB_TIMER_FRAME_COLOR_BELOW_60 = "Farbe unter 60s" 59 | VCB_TIMER_FRAME_COLOR_BELOW_60_TOOLTIP = "Kreuze das an, um die Farbe zu ändern, wenn weniger als 60s verbleiben." 60 | VCB_CF_FRAME_POSSIBLE_BUFFS = "Zeige die Anzahl an möglichen Buffs" 61 | VCB_CF_FRAME_POSSIBLE_BUFFS_TOOLTIP = "Kreuze das an, um die Anzahl an möglichen Buffs anzeigen zu lassen, die theoretisch konsolidiert sein könnten." 62 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT = "Zeige fehlende Buffs (ausgegraut)" 63 | VCB_CF_FRAME_SHOW_PB_GRAYED_OUT_TOOLTIP = "Kreuze das an, um mögliche konsolidierte Buffs anzeigen zu lassen" 64 | VCB_CF_FRAME_ICON_OPACITY = "Symbol-Transparenz" 65 | VCB_CF_FRAME_ICON_OPACITY_TOOLTIP = "Bewege das, um die Transparenz des Symboles zu änderen." 66 | VCB_CF_FRAME_ICON_TEXTURE = "Textur" 67 | VCB_CF_FRAME_ICON_TEXTURE_TOOLTIP = "Bewege das, um die Texture des Symboles zu ändern." 68 | VCB_CF_FRAME_BF_ANCHOR = "Angelpunkt" 69 | VCB_CF_FRAME_BF_ANCHOR_TOOLTIP = "Bewege das, um den Angelpunkt des Buff-Fensters zum Symbol zu ändern." 70 | VCB_CF_FRAME_BF_BACKGROUND = "Hintergrund" 71 | VCB_CF_FRAME_BF_BACKGROUND_TOOLTIP = "Bewege das, um die Hintergrundtexture zu ändern." 72 | VCB_CF_FRAME_BF_CUSTOM_BACKGROUND_PATH = "Eigener Hintergrundpfad:" 73 | VCB_DBF_FRAME_COLOR_NONE = "Nichts" 74 | VCB_DBF_FRAME_COLOR_NONE_TOOLTIP = "Klicke hier, um die Farbe der Umrandung zu ändern, wenn du einen unspezifizierten Debuff hast." 75 | VCB_DBF_FRAME_COLOR_POISON = "Gift" 76 | VCB_DBF_FRAME_COLOR_POISON_TOOLTIP = "Klicke hier, um die Farbe der Umrandung zu ändern, wenn du einen als Gift spezifizierten Debuff hast." 77 | VCB_DBF_FRAME_COLOR_MAGIC = "Magie" 78 | VCB_DBF_FRAME_COLOR_MAGIC_TOOLTIP = "Klicke hier, um die Farbe der Umrandung zu ändern, wenn du einen als Magie spezifizierten Debuff hast." 79 | VCB_DBF_FRAME_COLOR_CURSE = "Fluch" 80 | VCB_DBF_FRAME_COLOR_CURSE_TOOLTIP = "Klicke hier, um die Farbe der Umrandung zu ändern, wenn du einen als Fluch spezifizierten Debuff hast." 81 | VCB_DBF_FRAME_COLOR_DISEASE = "Krankheit" 82 | VCB_DBF_FRAME_COLOR_DISEASE_TOOLTIP = "Klicke hier, um die Farbe der Umrandung zu ändern, wenn du einen als Krankheit spezifizierten Debuff hast." 83 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME = "An das Buff-Fenster anheften" 84 | VCB_WP_FRAME_ATTACH_TO_BF_FRAME_TOOLTIP = "Kreuze das an, um das Waffenfenster an das Buff-Fenster anzuheften. Das Waffenfenster wird dann als Buff-Fenster behandelt." 85 | VCB_PM_FRAME_LEFT_INSERT_TEXT = "Füge einen namen ein:" 86 | VCB_PM_FRAME_LEFT_SELECT_TEXT = "Ausgewähltes Profil:" 87 | VCB_PM_FRAME_LEFT_CURRENT_TEXT = "Momentanes Profil:" 88 | VCB_PM_FRAME_LEFT_SAVE_TEXT = "Speichern" 89 | VCB_PM_FRAME_LEFT_DELETE_TEXT = "Löschen" 90 | VCB_MISC_FRAME_TEXT_DISABLE_CF = "Deaktiviere die konsolidierende Mechanik" 91 | VCB_MISC_FRAME_TEXT_DISABLE_CF_TOOLTIP = "Kreue das an, um die konsolidierende Mechanik zu deaktivieren. Das AddOn wird dann als erweitertes normales Buff-Modul fungieren." 92 | VCB_MISC_FRAME_TEXT_DISABLE_BB = "Deaktiviere die Verbannungs-Mechanik" 93 | VCB_MISC_FRAME_TEXT_DISABLE_BB_TOOLTIP = "Kreuze das an, um die Verbannungs-Mechanik zu deaktivieren." 94 | VCB_MISC_FRAME_TEXT_THEME = "Thema" 95 | VCB_MISC_FRAME_TEXT_THEME_TOOLTIP = "Bewege das, um das Theme auszuwählen. Klicke anschließend auf Load, um das Thema zu laden." 96 | 97 | VCB_COMMON_COLOR_FONTCOLOR = "Wähle eine Schriftfarbe aus" 98 | VCB_COMMON_COLOR_FONTCOLOR_TOOLTIP = "Klicke hier, um die Schriftfarbe zu ändern." 99 | VCB_COMMON_COLOR_BORDERCOLOR = "Wähle eine Umrandungsfarbe aus" 100 | VCB_COMMON_COLOR_BORDERCOLOR_TOOLTIP = "Klicke hier, um die Umrandungsfarbe zu ändern." 101 | VCB_COMMON_COLOR_BACKGROUNDCOLOR = "Wähle eine Hintergrundfarbe aus" 102 | VCB_COMMON_COLOR_BACKGROUNDCOLOR_TOOLTIP = "Klicke hier, um die Hintergrundfarbe zu ändern." 103 | 104 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER = "Schriftumrandung" 105 | VCB_COMMON_BUTTON_ENABLE_FONT_BORDER_TOOLTIP = "Kreuze das an, um die Schrift zu umranden." 106 | VCB_COMMON_BUTTON_INVERT_ORDER = "Invertiere Reihenfolge" 107 | VCB_COMMON_BUTTON_INVERT_ORDER_TOOLTIP = "Kreuze das an, um die Reihenfolge der Auren zu invertieren." 108 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER = "Benutze eigene Umrandung" 109 | VCB_COMMON_BUTTON_USE_CUSTOM_BORDER_TOOLTIP = "Kreuze das an, um eine eigene Umrandung zu nutzen." 110 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND = "Benutze eigenen Hintergrund" 111 | VCB_COMMON_BUTTON_USE_CUSTOM_BACKGROUND_TOOLTIP = "Kreuze das an, um einen eigen Hintergrund zu nutzen." 112 | VCB_COMMON_BUTTON_ENABLE_BORDER = "Umrandung aktivieren" 113 | VCB_COMMON_BUTTON_ENABLE_BORDER_TOOLTIP = "Kreuze das an, um eine Umrandung hinzuzufügen" 114 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR = "Aktiviere Hintergrundfarbe" 115 | VCB_COMMON_BUTTON_ENABLE_BACKGROUND_COLOR_TOOLTIP = "Kreuze das an, um die Hintergrundfarbe zu aktivieren." 116 | VCB_COMMON_BUTTON_VERTICAL_MODE = "Vertikaler Modus" 117 | VCB_COMMON_BUTTON_VERTICAL_MODE_TOOLTIP = "Kreuze das an, um das Modul zu drehen, sodass man es vertikal nutzen kann." 118 | VCB_COMMON_BUTTON_INVERT_ORIENTATION = "Invertiere Auraorientierung" 119 | VCB_COMMON_BUTTON_INVERT_ORIENTATION_TOOLTIP = "Kreuze das an, um die Orientierung der Auren zu ändern. Damit ist gemeint, dass das Modul gespiegelt wird nach rechts." 120 | 121 | VCB_COMMON_BUTTON_LOAD_TEXT = "Laden" 122 | 123 | VCB_COMMON_SLIDER_FONT_SIZE = "Schriftgröße" 124 | VCB_COMMON_SLIDER_FONT_SIZE_TOOLTIP = "Bewege das, um die Schriftgröße zu ändern." 125 | VCB_COMMON_SLIDER_FONT = "Schriftart" 126 | VCB_COMMON_SLIDER_FONT_TOOLTIP = "Bewege das, um die Schriftart zu ändern." 127 | VCB_COMMON_SLIDER_FONT_OPACITY = "Schrift-Transparenz" 128 | VCB_COMMON_SLIDER_FONT_OPACITY_TOOLTIP = "Bewege das, um die Transparenz der Schrift zu ändern." 129 | VCB_COMMON_SLIDER_SCALE = "Skalar" 130 | VCB_COMMON_SLIDER_SCALE_TOOLTIP = "Bewege das, um das Modul zu skaliern." 131 | VCB_COMMON_SLIDER_BUFFS_PER_ROW = "Buffs pro Reihe" 132 | VCB_COMMON_SLIDER_BUFFS_PER_ROW_TOOLTIP = "Bewege das, um die Anzahl der Auren pro Reihe zu ändern." 133 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY = "Hintergrund-Deckkraft" 134 | VCB_COMMON_SLIDER_BACKGROUND_OPACITY_TOOLTIP = "Bewege das, um die Deckkraft des Hintergrundes zu ändern." 135 | VCB_COMMON_SLIDER_BORDER = "Umrandung" 136 | VCB_COMMON_SLIDER_BORDER_TOOLTIP = "Bewege das, um die Texture der Umrandung zu ändern." 137 | VCB_COMMON_SLIDER_BORDER_OPACITY = "Umrandungstransparenz" 138 | VCB_COMMON_SLIDER_BORDER_OPACITY_TOOLTIP = "Bewege das, um die Deckkraft der Umrandung zu ändern." 139 | VCB_COMMON_SLIDER_PADDING_H = "Abstand H" 140 | VCB_COMMON_SLIDER_PADDING_H_TOOLTIP = "Bewege das, um den horizontalen Abstand zueinander zu ändern." 141 | VCB_COMMON_SLIDER_PADDING_V = "Abstand V" 142 | VCB_COMMON_SLIDER_PADDING_V_TOOLTIP = "Bewege das, um den vertikalen Abstand zueinander zu ändern." 143 | VCB_COMMON_SLIDER_FONT_OFFSET_X = "Schriftabstand X" 144 | VCB_COMMON_SLIDER_FONT_OFFSET_X_TOOLTIP = "Bewege das, um den Schriftabstand in horizontaler Ebene anzupassen." 145 | VCB_COMMON_SLIDER_FONT_OFFSET_Y = "Schriftabstand Y" 146 | VCB_COMMON_SLIDER_FONT_OFFSET_Y_TOOLTIP = "Bewege das, um den Schriftabstand in vertikaler Ebene anzupassen." 147 | 148 | VCB_COMMON_EDITBOX_CUSTOM_BORDER_PATH = "Eigener Umrandungspfad:" 149 | 150 | VCB_COMMON_PAGE_1 = "Seite 1 von 2" 151 | VCB_COMMON_PAGE_2 = "Seite 2 von 2" 152 | 153 | VCB_CAT_GENERAL = "Generell" 154 | VCB_CAT_CONSOLIDATED_ICON = "Konsolidiertes Symbol" 155 | VCB_CAT_BUFF_FRAME = "Buff Fenster" 156 | VCB_CAT_AURA = "Aura" 157 | VCB_CAT_AURA_TIMER = "Aura Timer" 158 | VCB_CAT_BORDER = "Umrandung" 159 | VCB_CAT_ABOUT_1 = "Was ist VCB?" 160 | VCB_CAT_ABOUT_2 = "Wer programmierte VCB?" 161 | VCB_CAT_ABOUT_3 = "Besonderen Dank an:" 162 | VCB_CAT_ABOUT_4 = "Danke für das Unterstützen!" 163 | 164 | VCB_ABOUT_TEXT_1 = "Vanilla Consolidate Buff-Frames (VCB) ist ein intelligentes Aura-Verwaltungs-System. Es verfügt über zahlreichen Funktionen, um das Modul nach eigenen Wünschen zu gestalten. Hauptsächlich verbessert es aber die übersicht, was auch sein Hauptzweck ist." 165 | VCB_ABOUT_TEXT_2 = "VCB wurde von Shino (Albea) entwickelt, der auf Kronos (Twinstar.cz) gearbeitet hat. In der Twinstar-Community ist er als Geigerkind bekannt." 166 | VCB_ABOUT_TEXT_3 = "Flynn (Twinstar AddOn Master) - Danke für das Helfen am Anfang! Schaka (Author of Questie) - Danke für das Helfen am Anfang! Sinsthar (Author of PowerAuras) - Du hast mich inspiriert ein Interface zu bauen." 167 | VCB_ABOUT_TEXT_4 = "Moosic - Testet das AddOn Fender - Frühes Feedback Areina - Half formulieren^^" 168 | VCB_ABOUT_TEXT_5 = "Dopefish - Frühes Feedback Helvete - Frühes Feedback Ayz - Feedback early on" 169 | 170 | VCB_CUR_PROFILE_TEXT = "Unbekannt" 171 | VCB_CONSOLIDATED_BUFFS_TEXT_1 = "Mal der Wildnis" 172 | VCB_CONSOLIDATED_BUFFS_TEXT_2 = "Gabe der Wildnis" 173 | VCB_CONSOLIDATED_BUFFS_TEXT_3 = "Machtwort: Seelenstärke" 174 | VCB_CONSOLIDATED_BUFFS_TEXT_4 = "Gebet der Seelenstärke" 175 | VCB_CONSOLIDATED_BUFFS_TEXT_5 = "Göttlicher Willen" 176 | VCB_CONSOLIDATED_BUFFS_TEXT_6 = "Gebet der Willenskraft" 177 | VCB_CONSOLIDATED_BUFFS_TEXT_7 = "Schattenschutz" 178 | VCB_CONSOLIDATED_BUFFS_TEXT_8 = "Gebet des Schattenschutzes" 179 | VCB_CONSOLIDATED_BUFFS_TEXT_9 = "Arkane Intelligenz" 180 | VCB_CONSOLIDATED_BUFFS_TEXT_10 = "Arkane Brillanz" 181 | VCB_CONSOLIDATED_BUFFS_TEXT_11 = "Großer Segen des Refugiums" 182 | VCB_CONSOLIDATED_BUFFS_TEXT_12 = "Großer Segen der Könige" 183 | VCB_CONSOLIDATED_BUFFS_TEXT_13 = "Großer Segen der Macht" 184 | VCB_CONSOLIDATED_BUFFS_TEXT_14 = "Großer Segen der Rettung" 185 | VCB_CONSOLIDATED_BUFFS_TEXT_15 = "Großer Segen der Weisheit" 186 | VCB_CONSOLIDATED_BUFFS_TEXT_16 = "Großer Segen des Lichts" 187 | VCB_CONSOLIDATED_BUFFS_TEXT_17 = "Aura des Volltreffers" 188 | 189 | VCB_WELCOME_TEXT = " ist nun geladen! Benutze den Befehl /VCB, um es zu konfigurieren!" 190 | VCB_HAS_BEEN_LOADED = " wurde geladen!" 191 | VCB_HAS_BEEN_SAVED = " wurde gespeichert!" 192 | VCB_HAS_BEEN_REMOVED = " wurde gelöscht!" 193 | VCB_TEXT_PROFILE = "Profil: " 194 | VCB_HAS_BEEN_CANCELLED = " wurde abgebrochen!" 195 | VCB_HAS_BEEN_ADDED = " wurde hinzugefügt!" 196 | VCB_IS_ALREADY_IN_LIST = " ist bereits in der Liste!" 197 | VCB_IS_NOT_IN_LIST = " ist nicht in der Liste!" 198 | VCB_CB_LIST_EMPTIED = "Die Konsolidierte-Buff-Liste wurde geleert!" 199 | VCB_BB_LIST_EMPTIED = "Die Verbannten-Buffs-Liste wurde geleert!" 200 | 201 | VCB_ABILITY_LOWER_SCRIPT_1 = "Mal der Wildnis" 202 | VCB_ABILITY_LOWER_SCRIPT_2 = "Gabe der Wildnis" 203 | VCB_ABILITY_LOWER_SCRIPT_3 = "Aura des Volltreffers" 204 | VCB_ABILITY_LOWER_SCRIPT_4 = "Großer Segen der Könige" 205 | VCB_ABILITY_LOWER_SCRIPT_5 = "Segen der Könige" 206 | VCB_ABILITY_LOWER_SCRIPT_6 = "Großer Segen der Macht" 207 | VCB_ABILITY_LOWER_SCRIPT_7 = "Segen der Macht" 208 | VCB_ABILITY_LOWER_SCRIPT_8 = "Großer Segen der Weißheit" 209 | VCB_ABILITY_LOWER_SCRIPT_9 = "Segen der Weißheit" 210 | VCB_ABILITY_LOWER_SCRIPT_10 = "Großer Segen des Lichts" 211 | VCB_ABILITY_LOWER_SCRIPT_11 = "Segen des Lichts" 212 | VCB_ABILITY_LOWER_SCRIPT_12 = "Großer Segen der Rettung" 213 | VCB_ABILITY_LOWER_SCRIPT_13 = "Segen der Rettung" 214 | VCB_ABILITY_LOWER_SCRIPT_14 = "Arkane Intelligenz" 215 | VCB_ABILITY_LOWER_SCRIPT_15 = "Arkane Brillianz" 216 | VCB_ABILITY_LOWER_SCRIPT_16 = "Machtwort: Seelenstärke" 217 | VCB_ABILITY_LOWER_SCRIPT_17 = "Gebet der Seelenstärke" 218 | VCB_ABILITY_LOWER_SCRIPT_18 = "Göttlicher Willen" 219 | VCB_ABILITY_LOWER_SCRIPT_19 = "Gebet der Willenskraft" 220 | VCB_ABILITY_LOWER_SCRIPT_20 = "Schattenschutz" 221 | VCB_ABILITY_LOWER_SCRIPT_21 = "Gebet des Schattenschutzes" 222 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT_TOOLTIP = "Kreuze das an, um die Einheit zu deaktivieren. (z.B. m/s/h)." 223 | VCB_TIMER_FRAME_SHOW_DISABLEUNIT = "Einheit entfernen" 224 | 225 | VCB_LOCKED_FRAMES = "Die Fenster wurden fixiert!" 226 | VCB_UNLOCKED_FRAMES = "Die Fenster sind nun bewegbar!" 227 | end 228 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vanilla Consolidate Buff-Frames (VCB) # 2 | 3 | ### What is VCB? ### 4 | 5 | Vanilla Consolidate Buff-Frames (VCB) is a smart system to manage your auras. The AddOn provides a lot functions to customize it to your tastes and adds a lot of helpful functions for a better overview, which is its purpose in the first place anyway. 6 | 7 | ### What are the advantages with VCB? ### 8 | 9 | * A better overview for your auras due to consolidation 10 | * Never reach the aura cap because of useless auras that you don't need anyway with the Banning-System 11 | * Each frame is movable, independently from each other 12 | * Display even potential buffs, either grayed out or/and as number on the icon 13 | * Display more than 16 buffs 14 | * Customize the frames to your personal tastes 15 | * Nearly everything is customizable 16 | 17 | ### Installing Instructions ### 18 | 19 | * Download the AddOn [here](https://bitbucket.org/Albea/vcb/downloads) 20 | * Rename the unziped folder to "VCB" 21 | * Place the folder into your AddOn directory in your World of Warcraft folder 22 | * (If you had a previous version ( open menu, Rightclick -> lock VCB) 88 | -Reworked compatibillity with other addons 89 | -Updated textures 90 | -Added features to increase the using experience overall 91 | -Added Consolidated Buffs Frame with an overview for all buffs, adding and removing system 92 | -Added default consolidated buffs 93 | -Removed the all slash commands, which are replaced with the interface (/vcb) 94 | -Implemented Interface for Banned-Buffs (similiar to consolidated buffs) 95 | -Added banned buff list overview 96 | -Added banned buff add and remove functions 97 | -Implemented Timer interface 98 | -Added font timer slider 99 | -Added show hours checkbutton 100 | -Added show minutes checkbutton 101 | -Added show tenth checkbutton 102 | -Added round down/up checkbutton 103 | -Added show hours and minutes (h:m) checkbutton 104 | -Added show minutes and seconds (m:s) checkbutton 105 | -Added enable flash animation checkbutton 106 | -Added function to all those features mentioned above 107 | -Implemented Interface for Consolidated Frame 108 | -Implemented Consolidated Icon interface 109 | -For that: 110 | -Added select font color option 111 | -Added show amount out of possible buffs checkbutton (1/5 -> Depending on your group members) 112 | -Added show missing buffs (grayed out) checkbutton 113 | -Added enable font border checkbutton 114 | -Added font size slider 115 | -Added font slider 116 | -Added icon opacity slider 117 | -Added font opacity slider 118 | -Added texture slider 119 | -Added function for all those features added above (for the consolidated icon) 120 | -Implemented interface for Buff Frame 121 | -For that: 122 | -Added select border color colorpicker 123 | -Added select background color colorpicker 124 | -Added invert order checkbutton 125 | -Added use custom border checkbutton 126 | -Added use custom background checkbutton 127 | -Added invert aura orientation checkbutton 128 | -Added border opacity slider 129 | -Added background opacity slider 130 | -Added border slider 131 | -Added custom border path editbox 132 | -Added custom background path editbox 133 | -Added anchor slider 134 | -Added scale slider 135 | -Added buffs per row slider 136 | -Added background slider 137 | -Added functions for all those features mentioned above 138 | -Implemented pager for a lot of pages 139 | -Implemented aura frame 140 | -For that: 141 | -Added enable border checkbutton 142 | -Added enable background color checkbutton 143 | -Added use custom border checkbutton 144 | -Added select border color colorpicker 145 | -Added select background color colorpicker 146 | -Added select font color colorpicker 147 | -Added enable font border checkbutton 148 | -Added padding horizontal slider 149 | -Added padding vertical slider 150 | -Added font size slider 151 | -Added font offset x slider 152 | -Added font offset y slider 153 | -Added border slider 154 | -Added custom border path editbox 155 | -Added font slider 156 | -Added font opacity slider 157 | -Added background opacity slider 158 | -Added functions to all those features mentioned above 159 | -Implemented aura timer interface 160 | -For that: 161 | -Added enable font border checkbutton 162 | -Added select font color colorpicker 163 | -Added font size slider 164 | -Added font opacity slider 165 | -Added functions to those features mentioned above 166 | -Implemented interface for the Buff Frame 167 | -Implemented interface for general options 168 | -For that: 169 | -Added vertical mode checkbutton 170 | -Added enable background color checkbutton 171 | -Added select background color colorpicker 172 | -Added invert order checkbutton 173 | -Added select font color colorpicker 174 | -Added enable font border checkbutton 175 | -Added invert aura orientation checkbutton 176 | -Added buffs per row slider 177 | -Added padding horizontal slider 178 | -Added padding vertical slider 179 | -Added font size slider 180 | -Added font offset x slider 181 | -Added background opacity slider 182 | -Added scale slider 183 | -Added font slider 184 | -Added font opacity slider 185 | -Added font offset y slider 186 | -Added functions for all those features mentioned above 187 | -Implemented border interface for the buff frame 188 | -For that: 189 | -Added enable border checkbutton 190 | -Added use custom border checkbutton 191 | -Added select border color color picker 192 | -Added custom border path editbox 193 | -Added background opacity slider 194 | -Added border slider 195 | -Added functions for all those features mentioned above 196 | -Implemented aura timer interface for the buff frame 197 | -Added enable font border checkbutton 198 | -Added select font color colorpicker 199 | -Added font size slider 200 | -Added font opacity slider 201 | -Added functions for all those features mentioned above 202 | -Implemented debuff frame 203 | -Implemented debuff general frame 204 | -For that: 205 | -Added vertical mode checkbutton 206 | -Added enable background color checkbutton 207 | -Added select background color colorpicker 208 | -Added invert order checkbutton 209 | -Added select font color colorpicker 210 | -Added enable font border checkbutton 211 | -Added invert aura orientation checkbutton 212 | -Added buffs per row slider 213 | -Added padding horizontal slider 214 | -Added padding vertical slider 215 | -Added font size slider 216 | -Added font offset x slider 217 | -Added background opacity slider 218 | -Added scale slider 219 | -Added font slider 220 | -Added font opacity slider 221 | -Added font offset y slider 222 | -Added function for all those features mentioned above for the debuff frame 223 | -Implemented debuff border interface 224 | -For that: 225 | -Added enable border checkbutton 226 | -Added use custom border checkbutton 227 | -Added custom border path editbox 228 | -Added border checkbutton 229 | -Added backgroundopacity checkbutton 230 | -Added colorpicker for each debuff type (none, poison, magic, curse, disease) 231 | -Added functions for all those features mentioned above 232 | -Implemented debuff aura timer interface 233 | -For that: 234 | -Added enable font border checkbutton 235 | -Added selct font color colorpicker 236 | -Added font size slider 237 | -Added font opacity slider 238 | -Added functions for all those features mentioned above 239 | -Implemented interface for the weapon frame 240 | -Implemented weapon general frame 241 | -For that: 242 | -Added vertical mode checkbutton 243 | -Added enable background color checkbutton 244 | -Added select background color colorpicker 245 | -Added attach to Buff-Frame checkbutton 246 | -Added select font color colorpicker 247 | -Added enable font border checkbutton 248 | -Added padding horizontal slider 249 | -Added padding vertical slider 250 | -Added font size slider 251 | -Added font offset x slider 252 | -Added font offset y slider 253 | -Added background opacity slider 254 | -Added scale slider 255 | -Added font slider 256 | -Added font opacity slider 257 | -Added functions for all those features mentioned above 258 | -Implemented weapon border interface 259 | -Added enable border checkbutton 260 | -Added enable custom border checkbutton 261 | -Added select border color colorpicker 262 | -Added custom border path editbox 263 | -Added border slider 264 | -Added background opacity slider 265 | -Added functions for all those features mentioned above 266 | -Implemented weapon aura timer interface 267 | -Added enable border checkbutton 268 | -Added select font color colorpicker 269 | -Added font size slider 270 | -Added font opacity slider 271 | -Added functions for all those features mentioned above 272 | -Implemented profile manager frame 273 | -For that: 274 | -Made profiles global for the whole account 275 | -Added a list for the profiles list 276 | -Added editbox to save a profile 277 | -Added editbox to delete and load a profile 278 | -Added a current profile frame 279 | -Added functions for all those features mentioned above 280 | -Implemented miscellaneous interface 281 | -Implemented miscellaneous general interface 282 | -For That: 283 | -Added disable consolidated mechanic (if you dont want (I mean who does not want it?!)) 284 | -Added disable banning mechanic (If you dont need it) 285 | -Added Theme slider 286 | -Added load button 287 | -Added Default theme 288 | -Added functions for all those features mentioned above 289 | -Implemented about interface 290 | -Implemented all sorts of information for vcb 291 | -Implemented supporter tab 292 | -Done some polishing 293 | -Worked on the readme 294 | -Solved an updating issue when adding/removing a buff from a list 295 | 296 | **v2.4:** 297 | -Aura applications added 298 | 299 | **v2.3:** 300 | -GameTooltips are now shown properly 301 | -Auras arent funky anymore in the way of being displayed 302 | 303 | **v2.2:** 304 | -Timer finally fixed 305 | -Performance updated 306 | 307 | **v2.1:** 308 | -Timer fixed 309 | 310 | **v2.0:** 311 | -Buffs are now displayed correctly after adding them to the list 312 | -Debuffs can now be displayed twice 313 | -Timer should be fixed now 314 | -The consolidated frame is now shown and hidden correctly 315 | -Recolored the buffs border's 316 | -The module is now scalable 317 | -The autounbuffer sends out a message if a buff is cancelled 318 | 319 | **v1.9:** 320 | -Hotfix for a function name error 321 | 322 | **v1.8:** 323 | -Clean up 324 | -Solved some bugs 325 | 326 | **v1.7:** 327 | -A colored border depending on the debuff type was added at the debuffs 328 | -Timer fixed 329 | -Tooltips are now displayed properly 330 | 331 | **v1.6:** 332 | -Fully implemented Buff and Debuff Frames 333 | -The Frame is now dragable 334 | -Added the command "lock" 335 | -Added the command "ra" to clear the cons. buff list 336 | -Fixed some bugs 337 | -Did some visual stuff 338 | 339 | **v1.5:** 340 | -Some major bugs were fixed with the AutoUnbuffer 341 | -Some visual bugs were fixed 342 | -Buff Frames were implemented but not finished yet. 343 | -The Addons were split from another so they work independently. 344 | -The Command "Unbuff" was added for macro uses. 345 | ``` 346 | 347 | 348 | ### Known Bugs ### 349 | 350 | 351 | ``` 352 | 353 | **v2.5:** 354 | - NONE 355 | 356 | **v2.4:** 357 | - NONE 358 | 359 | **v2.3:** 360 | - No aura applications 361 | 362 | **v2.2:** 363 | - Aura frames sometimes dont vanish if they run out 364 | - GameTooltip not shown in the consolidated frame 365 | 366 | **v2.1:** 367 | - NONE 368 | 369 | **v2.0:** 370 | - Timer still a bit funky -- FIXED 371 | 372 | **v1.9:** 373 | - Buffs are not displayed correctly after adding them to the list (relogg fixes this problem) -- FIXED 374 | - Debuffs who are applied twice are not displayed correctly -- FIXED 375 | - Timer are not working correctly sometimes -- FIXED 376 | - All aura frames pop up the consolidated buff frame -- FIXED 377 | ``` 378 | 379 | 380 | 381 | ### Ideas ### 382 | 383 | 384 | ``` 385 | 386 | **Fender:** 387 | - Mirror consolidated buff frame -- DONE 388 | - Change order off buffs in the consolidated buff frame -- DONE 389 | - Change order in general -- DONE 390 | - Create an system to order buffs -- DONE 391 | 392 | **Moosic:** 393 | - Scale the whole module -- DONE 394 | - Change the buff border's color (red to gold/black(?)) -- DONE 395 | 396 | **Ayz:** 397 | - Let buffs and debuffs be movable independently of each other -- DONE 398 | - let the timers scale together with the icon-size, currently the timers are same size regardless of icon size -- DONE 399 | - option to show timers as example 0:24 instead of 24s -- DONE 400 | - Enable consolidated buffs for target debuffs - would be useful in raids for some classes if not all 401 | 402 | **Hallonkaka:** 403 | - Option to have buffs/debuffs flashing then they just have a couple of seconds left, like the normal buffbar -- DONE 404 | - Make the frames less mushed when there's no buffs ([image](http://i.imgur.com/SRFLNH3.png)) -- DONE 405 | - Had some issues with trying to move the frame, but realized later that i need to click to the left of the icon to move it. so make the icon the thing to click -- DONE 406 | - One major improvement could be to make it really like retail and have a counter that shows how many buffs out of how many possible buffs you have. -- DONE 407 | - Example: you add the buff "Power Word: Fortitude" along with the class "Priest", so whenever a priest is in your group, it will show 0/1 if the priest hasn't buffed stamina. -- DONE 408 | - the visual part with grayed out icons for missing buffs when you hover over the icon is probably a bit harder (or just annoying to code) so a simple list with "Missing Buffs" would work just as fine. -- DONE 409 | 410 | ``` 411 | 412 | 413 | ### Common Issues ### 414 | 415 | 416 | ``` 417 | 1. You have to bann/add buffs in the language of your client. If you ban an buff in english but you use an german client for example, it won't work. 418 | 2. I get an lua error after installing it, what should I do. You probably had an version before. I addded a lot of new variables that you need to reload therefore follow the instructions carefully! 419 | 420 | ``` -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /VCB_Buffframe.lua: -------------------------------------------------------------------------------- 1 | --Global Variables 2 | VCB_BUTTONNAME = {buff="VCB_BF_BUFF_BUTTON", debuff="VCB_BF_DEBUFF_BUTTON", weapon = "VCB_BF_WEAPON_BUTTON"} 3 | VCB_MININDEX = {buff=0, debuff=0, weapon=0} 4 | VCB_MAXINDEX = {buff=41, debuff=15, weapon=1} 5 | 6 | -- Local Variables 7 | local BUTTON_TEMPLATE_NAME = {buff="VCB_BF_BUFF_BUTTON", debuff="VCB_BF_DEBUFF_BUTTON", weapon = "VCB_BF_WEAPON_BUTTON"} 8 | local FRAME_NAME = {buff="VCB_BF_BUFF_FRAME", debuff="VCB_BF_DEBUFF_FRAME", weapon = "VCB_BF_WEAPON_FRAME"} 9 | local TEMPENCHANTGHOSTTEXT = {"MH", "OH"} 10 | local BUFF, DEBUFF, WEAPON = "buff", "debuff", "weapon" --cats 11 | local GHOST_COLOR = { buff = {r=0.2, g=0.8, b=0.2}, 12 | debuff= {r=0.8, g=0.2, b=0.2}, 13 | weapon= {r=0.2, g=0.2, b=0.8}, 14 | warning={r=1.0, g=0.2, b=0.2}, 15 | alpha=0.8} 16 | local BUFF_FILTER={buff="HELPFUL", debuff="HARMFUL"} 17 | local UPDATETIME = 0.2 18 | local VCB_BuffFrameUpdateTime = 0 19 | local VCB_BuffFrameFlashState = 0 20 | local VCB_BuffFrameFlashTime = 0 21 | local VCB_BUFF_ALPHA_VALUE = 1 22 | local updater = false 23 | 24 | local timeSinceWeaponUpdate = 0 25 | local timeSinceBuffUpdate = 0 26 | local grayedIcons = false 27 | local classicon = {} 28 | classicon = { 29 | [1] = "Interface\\ICONS\\Spell_Nature_Regeneration.tga", 30 | [2] = "Interface\\ICONS\\Ability_TrueShot.tga", 31 | [3] = "Interface\\ICONS\\Spell_Magic_GreaterBlessingofKings.tga", 32 | [4] = "Interface\\ICONS\\Spell_Holy_GreaterBlessingofKings.tga", 33 | [5] = "Interface\\ICONS\\Spell_Holy_GreaterBlessingofWisdom.tga", 34 | [6] = "Interface\\ICONS\\Spell_Holy_GreaterBlessingofLight.tga", 35 | [7] = "Interface\\ICONS\\Spell_Holy_GreaterBlessingofSalvation.tga", 36 | [8] = "Interface\\ICONS\\Spell_Holy_ArcaneIntellect.tga", 37 | [9] = "Interface\\ICONS\\Spell_Holy_PrayerOfFortitude.tga", 38 | [10] = "Interface\\ICONS\\Spell_Holy_PrayerofSpirit.tga", 39 | [11] = "Interface\\ICONS\\Spell_Holy_PrayerofShadowProtection.tga", 40 | } 41 | 42 | function VCB_BF_OnLoad() 43 | if (not VCB_BF_BUFF_BUTTON0) then 44 | VCB_BF_DisableBlizzardBuffs() 45 | VCB_BF_CreateBuffButtons() 46 | end 47 | end 48 | 49 | function VCB_BF_ButtonIterator(cat, n) 50 | local buttonName, ghostButtonLabel 51 | if(not n) then 52 | n=VCB_MININDEX[cat] 53 | buttonName=VCB_BUTTONNAME[cat].."0" 54 | elseif(VCB_MININDEX[cat]<=n and n 0) then -- SHOW_BUFF_DURATIONS ?? 160 | buffDuration:Show(); 161 | else 162 | buffDuration:Hide(); 163 | end 164 | end 165 | 166 | local icon = getglobal(button:GetName().."Icon"); 167 | icon:SetTexture(GetPlayerBuffTexture(buffIndex)); 168 | 169 | -- Set color of debuff border based on dispel class. 170 | local color; 171 | local debuffType = GetPlayerBuffDispelType(GetPlayerBuff(button:GetID(), "HARMFUL")); 172 | local debuffSlot = getglobal(button:GetName().."Border"); 173 | if ( debuffType ) or VCB_BF_DUMMY_MODE then 174 | color = {r=VCB_SAVE["DBF_BORDER_"..strlower(debuffType).."color_r"],g=VCB_SAVE["DBF_BORDER_"..strlower(debuffType).."color_g"],b=VCB_SAVE["DBF_BORDER_"..strlower(debuffType).."color_b"],a=1} 175 | elseif(buffIndex >= 0) then 176 | color = {r=VCB_SAVE["DBF_BORDER_nonecolor_r"],g=VCB_SAVE["DBF_BORDER_nonecolor_g"],b=VCB_SAVE["DBF_BORDER_nonecolor_b"],a=VCB_SAVE["DBF_BORDER_borderopacity"]} 177 | if VCB_IS_LOADED and button.cat == "buff" then 178 | if VCB_SAVE["CF_AURA_enableborder"] and button:GetParent() == VCB_BF_CONSOLIDATED_BUFFFRAME then 179 | color = {r=VCB_SAVE["CF_AURA_bordercolor_r"], g=VCB_SAVE["CF_AURA_bordercolor_r"], b=VCB_SAVE["CF_AURA_bordercolor_r"], a=VCB_SAVE["CF_AURA_borderopacity"]} 180 | elseif VCB_SAVE["BF_BORDER_enableborder"] and button:GetParent() == VCB_BF_BUFF_FRAME then 181 | color = {r=VCB_SAVE["BF_BORDER_bordercolor_r"], g=VCB_SAVE["BF_BORDER_bordercolor_g"], b=VCB_SAVE["BF_BORDER_bordercolor_b"], a=VCB_SAVE["BF_BORDER_borderopacity"]} 182 | end 183 | end 184 | else 185 | color = {r=0, g=0, b=0, a=0} 186 | end 187 | if ( debuffSlot ) or VCB_BF_DUMMY_MODE then 188 | debuffSlot:SetVertexColor(color.r, color.g, color.b, color.a); 189 | end 190 | 191 | -- Set the number of applications of an aura if its a debuff 192 | local buffCount = getglobal(button:GetName().."Count"); 193 | local count = GetPlayerBuffApplications(buffIndex); 194 | if ( count > 1 ) then 195 | buffCount:SetText(count); 196 | buffCount:Show(); 197 | else 198 | buffCount:Hide(); 199 | end 200 | 201 | if VCB_IS_LOADED and button.cat == "buff" and button:GetID() == 31 then 202 | VCB_BF_RepositioningAndResizing() -- Performance 203 | elseif VCB_IS_LOADED and button.cat == "debuff" and button:GetID() == 15 then 204 | if VCB_SAVE["DBF_GENERAL_invert"] then 205 | VCB_BF_RepositionDebuffs() 206 | end 207 | end 208 | end 209 | end 210 | 211 | function VCB_BF_RepositioningAndResizing() 212 | local a = 1 213 | local b = 1 214 | for i=0, VCB_MAXINDEX.buff do 215 | local button = getglobal("VCB_BF_BUFF_BUTTON"..i) 216 | local parent = button:GetParent() 217 | local buttonDuration = getglobal("VCB_BF_BUFF_BUTTON"..i.."Duration") 218 | local buttonBorder = getglobal("VCB_BF_BUFF_BUTTON"..i.."Border") 219 | local buttonIcon = getglobal("VCB_BF_BUFF_BUTTON"..i.."Icon") 220 | local buttonCount = getglobal("VCB_BF_BUFF_BUTTON"..i.."Count") 221 | local timeLeft = GetPlayerBuffTimeLeft(button.buffIndex or 1); 222 | 223 | if VCB_SAVE["BF_GENERAL_invert"] then 224 | local j = VCB_MAXINDEX.buff-i 225 | button = getglobal("VCB_BF_BUFF_BUTTON"..j) 226 | parent = button:GetParent() 227 | buttonDuration = getglobal("VCB_BF_BUFF_BUTTON"..j.."Duration") 228 | buttonBorder = getglobal("VCB_BF_BUFF_BUTTON"..j.."Border") 229 | buttonIcon = getglobal("VCB_BF_BUFF_BUTTON"..j.."Icon") 230 | buttonCount = getglobal("VCB_BF_BUFF_BUTTON"..j.."Count") 231 | end 232 | 233 | local CF = 0 234 | if VCB_SAVE["MISC_disable_CF"] then 235 | button:SetParent(VCB_BF_BUFF_FRAME) 236 | CF = 1 237 | end 238 | 239 | if (not button.buffIndex) then break end -- for /reload function 240 | 241 | if parent == VCB_BF_BUFF_FRAME and (button.buffIndex >= 0 or VCB_BF_DUMMY_MODE or (not VCB_BF_LOCKED)) then 242 | button:ClearAllPoints() 243 | 244 | buttonDuration:ClearAllPoints() 245 | buttonDuration:SetPoint("TOPLEFT", button, "BOTTOMLEFT", -20, VCB_SAVE["Timer_yoffset"]) 246 | buttonDuration:SetPoint("TOPRIGHT", button, "BOTTOMRIGHT", 20, VCB_SAVE["Timer_yoffset"]) 247 | 248 | local u = 0 249 | local o = 0 250 | if VCB_SAVE["WP_GENERAL_attach"] then 251 | if VCB_BF_DUMMY_MODE then 252 | u = 2 253 | if (not VCB_SAVE["CF_icon_attach"]) then u = u - 1 end 254 | else 255 | local hasMainHandEnchant, mainHandExpiration, mainHandCharges, hasOffHandEnchant, offHandExpiration, offHandCharges = GetWeaponEnchantInfo() 256 | if hasMainHandEnchant then u = u + 1 end 257 | if hasOffHandEnchant then u = u + 1 end 258 | if (not VCB_SAVE["CF_icon_attach"]) then u = u - 1 end 259 | end 260 | if VCB_SAVE["CF_icon_attach"] then 261 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 262 | end 263 | if a <= (VCB_SAVE["BF_GENERAL_numperrow"]-(3-CF)) then 264 | o = u 265 | end 266 | end 267 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 268 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 269 | if VCB_SAVE["CF_icon_attach"] then 270 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 271 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPLEFT", VCB_BF_BUFF_FRAME, "BOTTOMLEFT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])*(u-1)) -- WHY -1 ?! 272 | end 273 | button:SetPoint("TOPLEFT", VCB_BF_BUFF_FRAME, "BOTTOMLEFT", (36+VCB_SAVE["BF_GENERAL_padding_h"])*floor((a+u-o)/(VCB_SAVE["BF_GENERAL_numperrow"])),-(44+VCB_SAVE["BF_GENERAL_padding_v"])*(a+u) + floor((a+u)/(VCB_SAVE["BF_GENERAL_numperrow"]))*(VCB_SAVE["BF_GENERAL_numperrow"])*(44+VCB_SAVE["BF_GENERAL_padding_v"]) + 50) 274 | else 275 | if VCB_SAVE["CF_icon_attach"] then 276 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 277 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPRIGHT", VCB_BF_BUFF_FRAME, "BOTTOMRIGHT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])*(u-1)) 278 | end 279 | button:SetPoint("TOPRIGHT", VCB_BF_BUFF_FRAME, "BOTTOMRIGHT", -(36+VCB_SAVE["BF_GENERAL_padding_h"])*floor((a+u-o)/(VCB_SAVE["BF_GENERAL_numperrow"])),-(44+VCB_SAVE["BF_GENERAL_padding_v"])*(a+u) + floor((a+u)/(VCB_SAVE["BF_GENERAL_numperrow"]))*(VCB_SAVE["BF_GENERAL_numperrow"])*(44+VCB_SAVE["BF_GENERAL_padding_v"]) + 50) 280 | end 281 | else 282 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 283 | if VCB_SAVE["CF_icon_attach"] then 284 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 285 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPLEFT", (32+VCB_SAVE["BF_GENERAL_padding_h"])*u, 0) 286 | end 287 | button:SetPoint("TOPLEFT", VCB_BF_BUFF_FRAME, "TOPLEFT", (32+VCB_SAVE["BF_GENERAL_padding_h"])*(a+u) - floor((a+u-CF)/(VCB_SAVE["BF_GENERAL_numperrow"]))*(VCB_SAVE["BF_GENERAL_numperrow"])*(32+VCB_SAVE["BF_GENERAL_padding_h"]) - (32+VCB_SAVE["BF_GENERAL_padding_h"])*CF,-(44+VCB_SAVE["BF_GENERAL_padding_v"])*floor((a+u-o-CF)/(VCB_SAVE["BF_GENERAL_numperrow"]-o))) 288 | else 289 | if VCB_SAVE["CF_icon_attach"] then 290 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 291 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPRIGHT", -(32+VCB_SAVE["BF_GENERAL_padding_h"])*u, 0) 292 | end 293 | button:SetPoint("TOPRIGHT", VCB_BF_BUFF_FRAME, "TOPRIGHT", -(32+VCB_SAVE["BF_GENERAL_padding_h"])*(a+u) + floor((a+u-CF)/(VCB_SAVE["BF_GENERAL_numperrow"]))*(VCB_SAVE["BF_GENERAL_numperrow"])*(32+VCB_SAVE["BF_GENERAL_padding_h"]) + (32+VCB_SAVE["BF_GENERAL_padding_h"])*CF,-(44+VCB_SAVE["BF_GENERAL_padding_v"])*floor((a+u-o-CF)/(VCB_SAVE["BF_GENERAL_numperrow"]-o))) 294 | end 295 | end 296 | if VCB_SAVE["Timer_usecfont"] then 297 | if VCB_SAVE["BF_TIMER_border"] then 298 | buttonDuration:SetFont(VCB_SAVE["Timer_customfont"], VCB_SAVE["BF_TIMER_fontsize"], "OUTLINE") 299 | else 300 | buttonDuration:SetFont(VCB_SAVE["Timer_customfont"], VCB_SAVE["BF_TIMER_fontsize"]) 301 | end 302 | 303 | else 304 | if VCB_SAVE["BF_TIMER_border"] then 305 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["BF_TIMER_fontsize"], "OUTLINE") 306 | else 307 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["BF_TIMER_fontsize"]) 308 | end 309 | end 310 | if VCB_SAVE["Timer_below_60"] and timeLeft < 60 then 311 | buttonDuration:SetTextColor(VCB_SAVE["Timer_below_60_color_r"],VCB_SAVE["Timer_below_60_color_g"],VCB_SAVE["Timer_below_60_color_b"],VCB_SAVE["BF_TIMER_fontopacity"]) 312 | else 313 | buttonDuration:SetTextColor(VCB_SAVE["BF_TIMER_fontcolor_r"],VCB_SAVE["BF_TIMER_fontcolor_g"],VCB_SAVE["BF_TIMER_fontcolor_b"],VCB_SAVE["BF_TIMER_fontopacity"]) 314 | end 315 | if VCB_SAVE["BF_GENERAL_enablebgcolor"] then 316 | buttonIcon:SetVertexColor(VCB_SAVE["BF_GENERAL_bgcolor_r"],VCB_SAVE["BF_GENERAL_bgcolor_g"],VCB_SAVE["BF_GENERAL_bgcolor_b"],VCB_SAVE["BF_GENERAL_bgopacity"]) 317 | else 318 | buttonIcon:SetVertexColor(1,1,1,VCB_SAVE["BF_GENERAL_bgopacity"]) 319 | end 320 | if VCB_SAVE["BF_BORDER_enableborder"] then 321 | buttonBorder:SetTexture(nil) 322 | if VCB_SAVE["BF_BORDER_usecustomborder"] then 323 | buttonBorder:SetTexture(VCB_SAVE["BF_BORDER_customborderpath"]) 324 | else 325 | buttonBorder:SetTexture(VCB_AURABORDER_ARRAY[VCB_SAVE["BF_BORDER_border"]]) 326 | end 327 | buttonBorder:SetVertexColor(VCB_SAVE["BF_BORDER_bordercolor_r"],VCB_SAVE["BF_BORDER_bordercolor_g"],VCB_SAVE["BF_BORDER_bordercolor_b"],VCB_SAVE["BF_BORDER_borderopacity"]) 328 | else 329 | buttonBorder:SetTexture(nil) 330 | end 331 | if VCB_SAVE["BF_GENERAL_usecfont"] then 332 | if VCB_SAVE["BF_GENERAL_enableborder"] then 333 | buttonCount:SetFont(VCB_SAVE["BF_GENERAL_customfont"], VCB_SAVE["BF_GENERAL_fontsize"], "OUTLINE") 334 | else 335 | buttonCount:SetFont(VCB_SAVE["BF_GENERAL_customfont"], VCB_SAVE["BF_GENERAL_fontsize"]) 336 | end 337 | else 338 | if VCB_SAVE["BF_GENERAL_enableborder"] then 339 | buttonCount:SetFont(VCB_SAVE["BF_GENERAL_font"], VCB_SAVE["BF_GENERAL_fontsize"], "OUTLINE") 340 | else 341 | buttonCount:SetFont(VCB_SAVE["BF_GENERAL_font"], VCB_SAVE["BF_GENERAL_fontsize"]) 342 | end 343 | end 344 | buttonCount:SetVertexColor(VCB_SAVE["BF_GENERAL_fontcolor_r"],VCB_SAVE["BF_GENERAL_fontcolor_g"],VCB_SAVE["BF_GENERAL_fontcolor_b"],VCB_SAVE["BF_GENERAL_fontopacity"]) 345 | buttonCount:ClearAllPoints() 346 | buttonCount:SetPoint("BOTTOMRIGHT", VCB_SAVE["BF_GENERAL_fontoffset_x"], VCB_SAVE["BF_GENERAL_fontoffset_y"]) 347 | a = a + 1 348 | end 349 | 350 | if VCB_SAVE["CF_BF_invert"] then 351 | local j = VCB_MAXINDEX.buff-i 352 | button = getglobal("VCB_BF_BUFF_BUTTON"..j) 353 | parent = button:GetParent() 354 | buttonDuration = getglobal("VCB_BF_BUFF_BUTTON"..j.."Duration") 355 | buttonBorder = getglobal("VCB_BF_BUFF_BUTTON"..j.."Border") 356 | buttonIcon = getglobal("VCB_BF_BUFF_BUTTON"..j.."Icon") 357 | buttonCount = getglobal("VCB_BF_BUFF_BUTTON"..j.."Count") 358 | else 359 | button = getglobal("VCB_BF_BUFF_BUTTON"..i) 360 | parent = button:GetParent() 361 | buttonDuration = getglobal("VCB_BF_BUFF_BUTTON"..i.."Duration") 362 | buttonBorder = getglobal("VCB_BF_BUFF_BUTTON"..i.."Border") 363 | buttonIcon = getglobal("VCB_BF_BUFF_BUTTON"..i.."Icon") 364 | buttonCount = getglobal("VCB_BF_BUFF_BUTTON"..i.."Count") 365 | end 366 | 367 | CF = 0 368 | if VCB_SAVE["MISC_disable_CF"] then 369 | button:SetParent(VCB_BF_BUFF_FRAME) 370 | CF = 1 371 | end 372 | if parent == VCB_BF_CONSOLIDATED_BUFFFRAME and (button.buffIndex >= 0 or VCB_BF_DUMMY_MODE or (not VCB_BF_LOCKED)) then 373 | button:ClearAllPoints() 374 | if VCB_SAVE["CF_BF_invertorientation"] then 375 | button:SetPoint("TOPLEFT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPLEFT", ((32+VCB_SAVE["CF_AURA_padding_h"])*b)-(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) - (ceil(b/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(b/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 376 | else 377 | button:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*b)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(b/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(b/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 378 | end 379 | if VCB_SAVE["CF_TIMER_border"] then 380 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["CF_TIMER_fontsize"], "OUTLINE") 381 | else 382 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["CF_TIMER_fontsize"]) 383 | end 384 | if VCB_SAVE["CF_AURA_enableborder"] then 385 | if VCB_SAVE["CF_AURA_customborder"] then 386 | buttonBorder:SetTexture(VCB_SAVE["CF_AURA_customborderpath"]) 387 | else 388 | buttonBorder:SetTexture(VCB_AURABORDER_ARRAY[VCB_SAVE["CF_AURA_border"]]) 389 | end 390 | else 391 | buttonBorder:SetTexture(nil) 392 | end 393 | buttonBorder:SetVertexColor(VCB_SAVE["CF_AURA_bordercolor_r"],VCB_SAVE["CF_AURA_bordercolor_g"],VCB_SAVE["CF_AURA_bordercolor_b"],VCB_SAVE["CF_AURA_borderopactiy"]) 394 | if VCB_SAVE["CF_AURA_enablebgcolor"] then 395 | buttonIcon:SetVertexColor(VCB_SAVE["CF_AURA_bgcolor_r"],VCB_SAVE["CF_AURA_bgcolor_g"],VCB_SAVE["CF_AURA_bgcolor_b"],VCB_SAVE["CF_AURA_bgopacity"]) 396 | else 397 | buttonIcon:SetVertexColor(1,1,1,VCB_SAVE["CF_AURA_bgcolor_b"]) 398 | end 399 | if VCB_SAVE["Timer_usecfont"] then 400 | if VCB_SAVE["CF_TIMER_border"] then 401 | buttonDuration:SetFont(VCB_SAVE["Timer_customfont"], VCB_SAVE["CF_BF_scale"]*VCB_SAVE["CF_TIMER_fontsize"], "OUTLINE") 402 | else 403 | buttonDuration:SetFont(VCB_SAVE["Timer_customfont"], VCB_SAVE["CF_BF_scale"]*VCB_SAVE["CF_TIMER_fontsize"]) 404 | end 405 | else 406 | if VCB_SAVE["CF_TIMER_border"] then 407 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["CF_BF_scale"]*VCB_SAVE["CF_TIMER_fontsize"], "OUTLINE") 408 | else 409 | buttonDuration:SetFont(VCB_SAVE["Timer_font"], VCB_SAVE["CF_BF_scale"]*VCB_SAVE["CF_TIMER_fontsize"]) 410 | end 411 | end 412 | if VCB_SAVE["Timer_below_60"] and timeLeft < 60 then 413 | buttonDuration:SetTextColor(VCB_SAVE["Timer_below_60_color_r"],VCB_SAVE["Timer_below_60_color_g"],VCB_SAVE["Timer_below_60_color_b"],VCB_SAVE["CF_TIMER_fontopacity"]) 414 | else 415 | buttonDuration:SetTextColor(VCB_SAVE["CF_TIMER_fontcolor_r"],VCB_SAVE["CF_TIMER_fontcolor_g"],VCB_SAVE["CF_TIMER_fontcolor_b"],VCB_SAVE["CF_TIMER_fontopacity"]) 416 | end 417 | if VCB_SAVE["CF_AURA_usecfont"] then 418 | if VCB_SAVE["CF_AURA_enablefontborder"] then 419 | buttonCount:SetFont(VCB_SAVE["CF_AURA_customfont"], VCB_SAVE["CF_AURA_fontsize"], "OUTLINE") 420 | else 421 | buttonCount:SetFont(VCB_SAVE["CF_AURA_customfont"], VCB_SAVE["CF_AURA_fontsize"]) 422 | end 423 | else 424 | if VCB_SAVE["CF_AURA_enablefontborder"] then 425 | buttonCount:SetFont(VCB_SAVE["CF_AURA_font"], VCB_SAVE["CF_AURA_fontsize"], "OUTLINE") 426 | else 427 | buttonCount:SetFont(VCB_SAVE["CF_AURA_font"], VCB_SAVE["CF_AURA_fontsize"]) 428 | end 429 | end 430 | buttonCount:SetVertexColor(VCB_SAVE["CF_AURA_fontcolor_r"],VCB_SAVE["CF_AURA_fontcolor_g"],VCB_SAVE["CF_AURA_fontcolor_b"],VCB_SAVE["CF_AURA_fontopacity"]) 431 | buttonCount:ClearAllPoints() 432 | buttonCount:SetPoint("BOTTOMRIGHT", VCB_SAVE["CF_AURA_fontoffset_x"], VCB_SAVE["CF_AURA_fontoffset_y"]) 433 | b = b + 1 434 | end 435 | end 436 | if VCB_SAVE["CF_icon_showpbgrayedout"] or VCB_SAVE["CF_icon_possiblebuffs"] then 437 | VCB_BF_ADD_GRAYEDOUTICONS(b) 438 | else 439 | if grayedIcons then 440 | for i=0,10 do 441 | getglobal("GrayedIcon"..i):Hide() 442 | end 443 | end 444 | getglobal("VCB_BF_CONSOLIDATED_ICONCount"):SetText(b-1) 445 | VCB_BF_ResizeConsolidatedFrame(b-1) 446 | end 447 | end 448 | 449 | function VCB_BF_ADD_GRAYEDOUTICONS(x) 450 | if (not grayedIcons) then 451 | for i=0,10 do 452 | local GIcon = CreateFrame("Button", "GrayedIcon"..i, VCB_BF_CONSOLIDATED_BUFFFRAME, nil) -- Need to create xml template 453 | GIcon:SetWidth(32) 454 | GIcon:SetHeight(32) 455 | 456 | local t = GIcon:CreateTexture(nil,"BACKGROUND") 457 | t:SetTexture(classicon[i+1]) 458 | t:SetAllPoints(GIcon) 459 | t:SetVertexColor(0.3,0.3,0.3,1) 460 | GIcon.texture = t 461 | 462 | GIcon:SetScript("OnEnter", function() VCB_BF_CONSOLIDATED_BUFFFRAME:Show() end) 463 | GIcon:SetScript("OnLeave", function() VCB_BF_CONSOLIDATED_BUFFFRAME:Hide() end) 464 | GIcon:Hide() 465 | end 466 | grayedIcons = true 467 | else 468 | for i=0,10 do 469 | getglobal("GrayedIcon"..i):Hide() 470 | end 471 | end 472 | 473 | local buffs = {} 474 | local tchildren = { VCB_BF_CONSOLIDATED_BUFFFRAME:GetChildren() } 475 | local children = {} 476 | local numPaladins = 0 477 | local classes = {} 478 | local b = x 479 | local gd = 0 480 | 481 | -- Filter out grayed out icons 482 | for _,child in ipairs(tchildren) do 483 | if (not strfind(child:GetName(), "GrayedIcon")) then 484 | table.insert(children, child) 485 | end 486 | end 487 | 488 | -- Fill buffs array 489 | for _,child in pairs(children) do 490 | VCB_Tooltip:SetOwner(UIParent) 491 | VCB_Tooltip:SetPlayerBuff(GetPlayerBuff(child.buffIndex, "HELPFUL")) 492 | local name = VCB_TooltipTextLeft1:GetText() 493 | VCB_Tooltip:Hide() 494 | if (name) then 495 | table.insert(buffs, strlower(name)) 496 | end 497 | end 498 | 499 | -- Get number of Paladins and different classes of the group / raid 500 | if UnitInRaid("player") then 501 | for i=1, 40 do 502 | local _, englishClass = UnitClass("raid"..i); 503 | if (not englishClass) then break end 504 | if (not VCB_Contains(classes, englishClass)) then 505 | table.insert(classes, englishClass) 506 | end 507 | if englishClass == "PALADIN" then numPaladins = numPaladins + 1 end 508 | end 509 | else 510 | for i=1, GetNumPartyMembers() do 511 | if GetPartyMember(i) then 512 | local _, englishClass = UnitClass("party"..i); 513 | if (not VCB_Contains(classes, englishClass)) then 514 | table.insert(classes, englishClass) 515 | end 516 | if englishClass == "PALADIN" then numPaladins = numPaladins + 1 end 517 | end 518 | end 519 | end 520 | 521 | -- Add grayed out icons 522 | -- Druid 523 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_1)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_2)) and VCB_Contains(classes, "DRUID") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_2) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_1)) then 524 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 525 | GrayedIcon0:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 526 | GrayedIcon0:Show() 527 | end 528 | x = x + 1 529 | else 530 | GrayedIcon0:Hide() 531 | end 532 | -- Hunter 533 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_3)) and VCB_Contains(classes, "HUNTER") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_3)) then 534 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 535 | GrayedIcon1:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 536 | GrayedIcon1:Show() 537 | end 538 | x = x + 1 539 | else 540 | GrayedIcon1:Hide() 541 | end 542 | -- Paladin 543 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_4)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_5)) and VCB_Contains(classes, "PALADIN") and (numPaladins > VCB_BF_getNumPaladinBuffs(buffs, VCB_ABILITY_LOWER_SCRIPT_5)) and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_4) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_5)) then 544 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 545 | GrayedIcon2:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 546 | GrayedIcon2:Show() 547 | end 548 | x = x + 1 549 | else 550 | GrayedIcon2:Hide() 551 | end 552 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_6)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_7)) and VCB_Contains(classes, "PALADIN") and (numPaladins > VCB_BF_getNumPaladinBuffs(buffs, VCB_ABILITY_LOWER_SCRIPT_7)) and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_6) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_7)) then 553 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 554 | GrayedIcon3:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 555 | GrayedIcon3:Show() 556 | end 557 | x = x + 1 558 | else 559 | GrayedIcon3:Hide() 560 | end 561 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_8)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_9)) and VCB_Contains(classes, "PALADIN") and (numPaladins > VCB_BF_getNumPaladinBuffs(buffs, VCB_ABILITY_LOWER_SCRIPT_9)) and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_8) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_9)) then 562 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 563 | GrayedIcon4:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 564 | GrayedIcon4:Show() 565 | end 566 | x = x + 1 567 | else 568 | GrayedIcon4:Hide() 569 | end 570 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_10)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_11)) and VCB_Contains(classes, "PALADIN") and (numPaladins > VCB_BF_getNumPaladinBuffs(buffs, VCB_ABILITY_LOWER_SCRIPT_11)) and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_10) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_11)) then 571 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 572 | GrayedIcon5:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 573 | GrayedIcon5:Show() 574 | end 575 | x = x + 1 576 | else 577 | GrayedIcon5:Hide() 578 | end 579 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_12)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_13)) and VCB_Contains(classes, "PALADIN") and (numPaladins > VCB_BF_getNumPaladinBuffs(buffs, VCB_ABILITY_LOWER_SCRIPT_13)) and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_12) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_13)) then 580 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 581 | GrayedIcon6:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 582 | GrayedIcon6:Show() 583 | end 584 | x = x + 1 585 | else 586 | GrayedIcon6:Hide() 587 | end 588 | -- Mage 589 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_14)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_15)) and VCB_Contains(classes, "MAGE") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_14) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_15)) then 590 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 591 | GrayedIcon7:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 592 | GrayedIcon7:Show() 593 | end 594 | x = x + 1 595 | else 596 | GrayedIcon7:Hide() 597 | end 598 | -- Priest 599 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_16)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_17)) and VCB_Contains(classes, "PRIEST") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_17) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_16)) then 600 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 601 | GrayedIcon8:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 602 | GrayedIcon8:Show() 603 | end 604 | x = x + 1 605 | else 606 | GrayedIcon8:Hide() 607 | end 608 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_18)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_19)) and VCB_Contains(classes, "PRIEST") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_19) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_18)) then 609 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 610 | GrayedIcon9:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 611 | GrayedIcon9:Show() 612 | end 613 | x = x + 1 614 | else 615 | GrayedIcon9:Hide() 616 | end 617 | if (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_20)) and (not VCB_Contains(buffs, VCB_ABILITY_LOWER_SCRIPT_21)) and VCB_Contains(classes, "PRIEST") and (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_21) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_20)) then 618 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 619 | GrayedIcon10:SetPoint("TOPRIGHT", VCB_BF_CONSOLIDATED_BUFFFRAME, "TOPRIGHT", (-(32+VCB_SAVE["CF_AURA_padding_h"])*x)+(24-0.5*VCB_SAVE["CF_AURA_padding_h"]) + (ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)*VCB_SAVE["CF_BF_numperrow"]*(32+VCB_SAVE["CF_AURA_padding_h"]),-(44+VCB_SAVE["CF_AURA_padding_v"])*(ceil(x/VCB_SAVE["CF_BF_numperrow"]) - 1)-(6+VCB_SAVE["CF_AURA_padding_v"])) 620 | GrayedIcon10:Show() 621 | end 622 | x = x + 1 623 | else 624 | GrayedIcon10:Hide() 625 | end 626 | 627 | if VCB_SAVE["CF_icon_possiblebuffs"] then 628 | gd = x - b 629 | local cPB = VCB_BF_GetNumPBuffsInCF() 630 | if cPB > numPaladins then gd = gd - (cPB - numPaladins) end 631 | local result = (gd+b-1) 632 | if result < (b-1) then result = (b-1) end 633 | 634 | getglobal("VCB_BF_CONSOLIDATED_ICONCount"):SetText((b-1).."/"..result) 635 | else 636 | getglobal("VCB_BF_CONSOLIDATED_ICONCount"):SetText((b-1)) 637 | end 638 | if VCB_SAVE["CF_icon_showpbgrayedout"] then 639 | VCB_BF_ResizeConsolidatedFrame(x-1) 640 | else 641 | VCB_BF_ResizeConsolidatedFrame(b-1) 642 | end 643 | end 644 | 645 | function VCB_BF_getNumPaladinBuffs(buffs, ext) 646 | local paladinBuffs = {} 647 | local count = 0 648 | paladinBuffs = { 649 | [1] = VCB_ABILITY_LOWER_SCRIPT_5, 650 | [2] = VCB_ABILITY_LOWER_SCRIPT_7, 651 | [3] = VCB_ABILITY_LOWER_SCRIPT_9, 652 | [4] = VCB_ABILITY_LOWER_SCRIPT_11, 653 | [5] = VCB_ABILITY_LOWER_SCRIPT_13, 654 | [6] = VCB_ABILITY_LOWER_SCRIPT_4, 655 | [7] = VCB_ABILITY_LOWER_SCRIPT_6, 656 | [8] = VCB_ABILITY_LOWER_SCRIPT_8, 657 | [9] = VCB_ABILITY_LOWER_SCRIPT_10, 658 | [10] = VCB_ABILITY_LOWER_SCRIPT_12, 659 | } 660 | for i=1,10 do 661 | if VCB_Contains(buffs, paladinBuffs[i]) and (not strfind(paladinBuffs[i], ext)) then 662 | count = count + 1 663 | end 664 | end 665 | return count 666 | end 667 | 668 | function VCB_BF_GetNumPBuffsInCF() 669 | local count = 0 670 | 671 | if (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_4) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_5)) then count = count + 1 end 672 | if (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_6) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_7)) then count = count + 1 end 673 | if (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_8) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_9)) then count = count + 1 end 674 | if (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_10) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_11)) then count = count + 1 end 675 | if (VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_12) or VCB_Contains(Consolidated_Buffs, VCB_ABILITY_LOWER_SCRIPT_13)) then count = count + 1 end 676 | 677 | return count 678 | end 679 | 680 | function VCB_BF_RepositionDebuffs() 681 | local a = 0 682 | for i=0,15 do 683 | local j = 15-i 684 | local button = getglobal("VCB_BF_DEBUFF_BUTTON"..j) 685 | if button.buffIndex >= 0 then 686 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):ClearAllPoints() 687 | if VCB_SAVE["DBF_GENERAL_verticalmode"] then 688 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", -(32+VCB_SAVE["DBF_GENERAL_padding_h"])*floor(a/VCB_SAVE["DBF_GENERAL_numperrow"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*a + floor(a/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(44+VCB_SAVE["DBF_GENERAL_padding_v"])) 689 | else 690 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", -(32+VCB_SAVE["DBF_GENERAL_padding_h"])*a + floor(a/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(32+VCB_SAVE["DBF_GENERAL_padding_h"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*floor(a/VCB_SAVE["DBF_GENERAL_numperrow"])) 691 | end 692 | a = a + 1 693 | end 694 | end 695 | end 696 | 697 | function VCB_BF_ResizeConsolidatedFrame(i) 698 | local p = i 699 | if p >= VCB_SAVE["CF_BF_numperrow"] then p = VCB_SAVE["CF_BF_numperrow"] end 700 | VCB_BF_CONSOLIDATED_BUFFFRAME:SetWidth(16+2*VCB_SAVE["CF_AURA_padding_h"]+(p*(32+VCB_SAVE["CF_AURA_padding_h"]))) 701 | VCB_BF_CONSOLIDATED_BUFFFRAME:SetHeight(10+2*VCB_SAVE["CF_AURA_padding_v"]+(ceil(i/VCB_SAVE["CF_BF_numperrow"])*(44+VCB_SAVE["CF_AURA_padding_v"]))) 702 | 703 | if i == 0 then 704 | VCB_BF_CONSOLIDATED_BUFFFRAME:SetWidth(0) 705 | VCB_BF_CONSOLIDATED_BUFFFRAME:SetHeight(0) 706 | VCB_BF_CONSOLIDATED_BUFFFRAME:Hide() 707 | end 708 | end 709 | 710 | function VCB_BF_BUFF_BUTTON_OnUpdate(elapsed, button) 711 | local buffIndex, timeLeft, buttonid; 712 | buffIndex = button.buffIndex; 713 | timeLeft = GetPlayerBuffTimeLeft(buffIndex); 714 | buttonid = button:GetName() 715 | if VCB_SAVE["Timer_flash"] then -- Implements Blizzlike flashing 716 | if not updater or updater==buttonid then 717 | updater = buttonid; 718 | if ( VCB_BuffFrameUpdateTime > 0 ) then 719 | VCB_BuffFrameUpdateTime = VCB_BuffFrameUpdateTime - elapsed; 720 | else 721 | VCB_BuffFrameUpdateTime = VCB_BuffFrameUpdateTime + TOOLTIP_UPDATE_TIME; 722 | end 723 | 724 | VCB_BuffFrameFlashTime = VCB_BuffFrameFlashTime - 0.85*elapsed; 725 | if ( VCB_BuffFrameFlashTime < 0 ) then 726 | local overtime = -VCB_BuffFrameFlashTime; 727 | if ( VCB_BuffFrameFlashState == 0 ) then 728 | VCB_BuffFrameFlashState = 1; 729 | VCB_BuffFrameFlashTime = BUFF_FLASH_TIME_ON; 730 | else 731 | VCB_BuffFrameFlashState = 0; 732 | VCB_BuffFrameFlashTime = BUFF_FLASH_TIME_OFF; 733 | end 734 | if ( overtime < VCB_BuffFrameFlashTime ) then 735 | VCB_BuffFrameFlashTime = VCB_BuffFrameFlashTime - overtime; 736 | end 737 | end 738 | if ( VCB_BuffFrameFlashState == 1 ) then 739 | VCB_BUFF_ALPHA_VALUE = (BUFF_FLASH_TIME_ON - VCB_BuffFrameFlashTime) / BUFF_FLASH_TIME_ON; 740 | else 741 | VCB_BUFF_ALPHA_VALUE = VCB_BuffFrameFlashTime / BUFF_FLASH_TIME_ON; 742 | end 743 | VCB_BUFF_ALPHA_VALUE = (VCB_BUFF_ALPHA_VALUE * (1 - BUFF_MIN_ALPHA)) + BUFF_MIN_ALPHA; 744 | end 745 | if timeLeft < 30 and timeLeft ~= 0 then 746 | button:SetAlpha(VCB_BUFF_ALPHA_VALUE); 747 | else 748 | button:SetAlpha(VCB_BF_GETBUTTONALPHA(button)) 749 | end 750 | else 751 | button:SetAlpha(VCB_BF_GETBUTTONALPHA(button)) 752 | end 753 | 754 | button.timeSinceLastUpdate = button.timeSinceLastUpdate + elapsed 755 | if(button.timeSinceLastUpdate > UPDATETIME) then 756 | local buffDuration = getglobal(button:GetName().."Duration"); 757 | if ( button.untilCancelled == 1 and (not VCB_BF_DUMMY_MODE)) then 758 | buffDuration:Hide(); 759 | return; 760 | end 761 | 762 | -- Update duration 763 | if (timeLeft>0 or VCB_BF_DUMMY_MODE) then 764 | if VCB_BF_DUMMY_MODE then 765 | timeLeft = random(1,150)+(random(1,99)/100) 766 | end 767 | if VCB_SAVE["Timer_below_60"] and timeLeft < 60 then 768 | if button.cat == "buff" then 769 | buffDuration:SetTextColor(VCB_SAVE["Timer_below_60_color_r"],VCB_SAVE["Timer_below_60_color_g"],VCB_SAVE["Timer_below_60_color_b"],VCB_SAVE["BF_TIMER_fontopacity"]) 770 | elseif button.cat == "debuff" then 771 | buffDuration:SetTextColor(VCB_SAVE["Timer_below_60_color_r"],VCB_SAVE["Timer_below_60_color_g"],VCB_SAVE["Timer_below_60_color_b"],VCB_SAVE["CF_TIMER_fontopacity"]) 772 | end 773 | else 774 | if button.cat == "buff" then 775 | buffDuration:SetTextColor(VCB_SAVE["BF_TIMER_fontcolor_r"],VCB_SAVE["BF_TIMER_fontcolor_g"],VCB_SAVE["BF_TIMER_fontcolor_b"],VCB_SAVE["BF_TIMER_fontopacity"]) 776 | elseif button.cat == "debuff" then 777 | buffDuration:SetTextColor(VCB_SAVE["DBF_TIMER_fontcolor_r"],VCB_SAVE["DBF_TIMER_fontcolor_g"],VCB_SAVE["DBF_TIMER_fontcolor_b"],VCB_SAVE["CF_TIMER_fontopacity"]) 778 | end 779 | end 780 | buffDuration:SetText(VCB_BF_GetDuration(timeLeft)) 781 | buffDuration:Show() 782 | else 783 | buffDuration:Hide() 784 | end 785 | if ( BuffFrameUpdateTime > 0 ) then 786 | return; 787 | end 788 | if ( VCB_Tooltip:IsOwned(button) ) then 789 | VCB_Tooltip:SetPlayerBuff(buffIndex); 790 | end 791 | button.timeSinceLastUpdate = 0 792 | end 793 | end 794 | 795 | function VCB_BF_GETBUTTONALPHA(button) 796 | local a = 1 797 | if button.cat == "debuff" then 798 | a = VCB_SAVE["DBF_GENERAL_bgopacity"] 799 | elseif button.cat == "buff" then 800 | if button:GetParent() == VCB_BF_BUFF_FRAME then 801 | a = VCB_SAVE["BF_GENERAL_bgopacity"] 802 | else 803 | a = VCB_SAVE["CF_AURA_bgopacity"] 804 | end 805 | end 806 | return a 807 | end 808 | 809 | function VCB_BF_BUFF_BUTTON_OnClick(button) 810 | if button.cat == "buff" then 811 | CancelPlayerBuff(button.buffIndex) 812 | end 813 | end 814 | 815 | function VCB_BF_WEAPON_BUTTON_OnEvent(bool) 816 | local hasMainHandEnchant, mainHandExpiration, mainHandCharges, hasOffHandEnchant, offHandExpiration, offHandCharges = GetWeaponEnchantInfo(); 817 | local u = 0 818 | if hasMainHandEnchant then u = u + 1 end 819 | if hasOffHandEnchant then u = u + 1 end 820 | if (not VCB_SAVE["CF_icon_attach"]) then u = u - 1 end 821 | if VCB_SAVE["WP_GENERAL_attach"] then 822 | VCB_BF_CONSOLIDATED_ICON:ClearAllPoints() 823 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 824 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 825 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPLEFT", VCB_BF_BUFF_FRAME, "BOTTOMLEFT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])*(u-1)) -- WHY?! 826 | else 827 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPRIGHT", VCB_BF_BUFF_FRAME, "BOTTOMRIGHT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])*(u-1)) 828 | end 829 | else 830 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 831 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPLEFT", (32+VCB_SAVE["BF_GENERAL_padding_h"])*u, 0) 832 | else 833 | VCB_BF_CONSOLIDATED_ICON:SetPoint("TOPRIGHT", -(32+VCB_SAVE["BF_GENERAL_padding_h"])*u, 0) 834 | end 835 | end 836 | end 837 | 838 | if (not hasMainHandEnchant) and hasOffHandEnchant then -- Performance (?) 839 | VCB_BF_WEAPON_BUTTON0:ClearAllPoints() 840 | VCB_BF_WEAPON_BUTTON1:ClearAllPoints() 841 | if VCB_SAVE["WP_GENERAL_attach"] then 842 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 843 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 844 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])) 845 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, 0) 846 | else 847 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT",(32+VCB_SAVE["BF_GENERAL_padding_h"]), 0) 848 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, 0) 849 | end 850 | else 851 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 852 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])) 853 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 854 | else 855 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT",-(32+VCB_SAVE["BF_GENERAL_padding_h"]), 0) 856 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 857 | end 858 | end 859 | else 860 | if VCB_SAVE["WP_GENERAL_invert"] then 861 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT",-(32+VCB_SAVE["WP_GENERAL_padding_h"]), 0) 862 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 863 | else 864 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT",-(32+VCB_SAVE["WP_GENERAL_padding_h"]), 0) 865 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 866 | end 867 | end 868 | else 869 | VCB_BF_WEAPON_BUTTON0:ClearAllPoints() 870 | VCB_BF_WEAPON_BUTTON1:ClearAllPoints() 871 | if VCB_SAVE["WP_GENERAL_attach"] then 872 | if VCB_SAVE["BF_GENERAL_invertorientation"] then 873 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 874 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])) 875 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, 0) 876 | else 877 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT",(32+VCB_SAVE["BF_GENERAL_padding_h"]), 0) 878 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPLEFT", VCB_BF_WEAPON_FRAME, "TOPLEFT", 0, 0) 879 | end 880 | else 881 | if VCB_SAVE["BF_GENERAL_verticalmode"] then 882 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, -(44+VCB_SAVE["BF_GENERAL_padding_v"])) 883 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 884 | else 885 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT",-(32+VCB_SAVE["BF_GENERAL_padding_h"]), 0) 886 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 887 | end 888 | end 889 | else 890 | if VCB_SAVE["WP_GENERAL_invert"] then 891 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", -(32+VCB_SAVE["WP_GENERAL_padding_h"]), 0) 892 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 893 | else 894 | VCB_BF_WEAPON_BUTTON1:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", -(32+VCB_SAVE["WP_GENERAL_padding_h"]), 0) 895 | VCB_BF_WEAPON_BUTTON0:SetPoint("TOPRIGHT", VCB_BF_WEAPON_FRAME, "TOPRIGHT", 0, 0) 896 | end 897 | end 898 | end 899 | if VCB_SAVE["WP_GENERAL_attach"] and (bool) then 900 | VCB_BF_RepositioningAndResizing() 901 | end 902 | VCB_BF_WEAPON_BUTTON_OnUpdate(2.0) 903 | end 904 | 905 | function VCB_BF_WEAPON_BUTTON_OnUpdate(elapsed) 906 | timeSinceWeaponUpdate = timeSinceWeaponUpdate + elapsed 907 | if(timeSinceWeaponUpdate > UPDATETIME) then 908 | local hasMainHandEnchant, mainHandExpiration, mainHandCharges, hasOffHandEnchant, offHandExpiration, offHandCharges = GetWeaponEnchantInfo(); 909 | if(hasMainHandEnchant or VCB_BF_DUMMY_MODE) then 910 | local textureName = GetInventoryItemTexture("player", 16) 911 | if (VCB_BF_DUMMY_MODE == false) then 912 | VCB_BF_WEAPON_BUTTON0Icon:SetTexture(textureName) 913 | VCB_BF_WEAPON_BUTTON0Duration:SetText(VCB_BF_GetDuration(mainHandExpiration/1000)) 914 | else 915 | VCB_BF_WEAPON_BUTTON0Duration:SetText(VCB_BF_GetDuration(random(1,150)+(random(1,99)/100))) 916 | mainHandCharges = 100 917 | end 918 | VCB_BF_WEAPON_BUTTON0Border:SetVertexColor(VCB_SAVE["WP_BORDER_bordercolor_r"],VCB_SAVE["WP_BORDER_bordercolor_g"],VCB_SAVE["WP_BORDER_bordercolor_b"],VCB_SAVE["WP_BORDER_borderopacity"]) 919 | VCB_BF_WEAPON_BUTTON0Duration:Show() 920 | if(mainHandCharges > 0) then 921 | VCB_BF_WEAPON_BUTTON0Count:SetText(mainHandCharges) 922 | VCB_BF_WEAPON_BUTTON0Count:Show() 923 | else 924 | VCB_BF_WEAPON_BUTTON0Count:Hide() 925 | end 926 | VCB_BF_WEAPON_BUTTON0:SetID(16) 927 | VCB_BF_WEAPON_BUTTON0:Show() 928 | elseif (VCB_BF_LOCKED) then 929 | if (VCB_BF_DUMMY_MODE == false) then 930 | VCB_BF_WEAPON_BUTTON0:Hide() 931 | end 932 | else 933 | VCB_BF_WEAPON_BUTTON0Icon:SetTexture(nil) 934 | end 935 | 936 | if(hasOffHandEnchant or VCB_BF_DUMMY_MODE) then 937 | local textureName = GetInventoryItemTexture("player", 17) 938 | if (VCB_BF_DUMMY_MODE == false) then 939 | VCB_BF_WEAPON_BUTTON1Icon:SetTexture(textureName) 940 | VCB_BF_WEAPON_BUTTON1Duration:SetText(VCB_BF_GetDuration(offHandExpiration/1000)) 941 | else 942 | VCB_BF_WEAPON_BUTTON1Duration:SetText(VCB_BF_GetDuration(random(1,15)+(random(1,99)/100))) 943 | offHandCharges = 100 944 | end 945 | VCB_BF_WEAPON_BUTTON1Border:SetVertexColor(VCB_SAVE["WP_BORDER_bordercolor_r"],VCB_SAVE["WP_BORDER_bordercolor_g"],VCB_SAVE["WP_BORDER_bordercolor_b"],VCB_SAVE["WP_BORDER_borderopacity"]) 946 | VCB_BF_WEAPON_BUTTON1Duration:Show() 947 | if(offHandCharges > 0) then 948 | VCB_BF_WEAPON_BUTTON1Count:SetText(offHandCharges) 949 | VCB_BF_WEAPON_BUTTON1Count:Show() 950 | else 951 | VCB_BF_WEAPON_BUTTON1Count:Hide() 952 | end 953 | VCB_BF_WEAPON_BUTTON1:SetID(17) 954 | VCB_BF_WEAPON_BUTTON1:Show() 955 | elseif(VCB_BF_LOCKED) then 956 | if (VCB_BF_DUMMY_MODE == false) then 957 | VCB_BF_WEAPON_BUTTON1:Hide() 958 | end 959 | else 960 | VCB_BF_WEAPON_BUTTON1Icon:SetTexture(nil) 961 | end 962 | 963 | timeSinceWeaponUpdate = 0 964 | end 965 | end 966 | 967 | function VCB_BF_GetDuration(timeLeft) 968 | if VCB_IS_LOADED then 969 | local suffix = { 970 | [1] = " s", 971 | [2] = " m", 972 | [3] = " h" 973 | } 974 | if VCB_SAVE["Timer_disableUnit"] then 975 | suffix = { 976 | [1] = "", 977 | [2] = "", 978 | [3] = "" 979 | } 980 | end 981 | if VCB_SAVE["Timer_minutes"] and timeLeft > 60 then 982 | if VCB_SAVE["Timer_hours"] and timeLeft > 3600 then 983 | if VCB_SAVE["Timer_hours_convert"] then 984 | if VCB_SAVE["Timer_minutes_convert"] then 985 | if VCB_SAVE["Timer_round"] then 986 | return floor(timeLeft/3600)..":"..ceil(timeLeft)-3600*ceil(timeLeft/3600)..":"..ceil(timeLeft)-60*ceil(timeLeft/60)..suffix[3] 987 | else 988 | return floor(timeLeft/3600)..":"..floor(timeLeft)-3600*floor(timeLeft/3600)..":"..floor(timeLeft)-60*floor(timeLeft/60)..suffix[3] 989 | end 990 | else 991 | if VCB_SAVE["Timer_round"] then 992 | return floor(timeLeft/3600)..":"..ceil(timeLeft)-3600*ceil(timeLeft/3600)..suffix[3] 993 | else 994 | return floor(timeLeft/3600)..":"..floor(timeLeft)-3600*floor(timeLeft/3600)..suffix[3] 995 | end 996 | end 997 | else 998 | if VCB_SAVE["Timer_minutes_convert"] then 999 | if VCB_SAVE["Timer_round"] then 1000 | return floor(timeLeft/60)..":"..ceil(timeLeft)-60*ceil(timeLeft/60)..suffix[3] 1001 | else 1002 | return floor(timeLeft/60)..":"..floor(timeLeft)-60*floor(timeLeft/60)..suffix[3] 1003 | end 1004 | else 1005 | if VCB_SAVE["Timer_round"] then 1006 | return ceil(timeLeft/3600)..suffix[3] 1007 | else 1008 | return floor(timeLeft/3600)..suffix[3] 1009 | end 1010 | end 1011 | end 1012 | else 1013 | if VCB_SAVE["Timer_minutes_convert"] then 1014 | if VCB_SAVE["Timer_hours_convert"] then 1015 | if VCB_SAVE["Timer_round"] then 1016 | return "0:"..ceil(timeLeft/60)..":"..ceil(timeLeft)-60*ceil(timeLeft/60)..suffix[3] 1017 | else 1018 | return "0:"..floor(timeLeft/60)..":"..floor(timeLeft)-60*floor(timeLeft/60)..suffix[3] 1019 | end 1020 | else 1021 | if VCB_SAVE["Timer_round"] then 1022 | return ceil(timeLeft/60)..":"..ceil(timeLeft)-60*ceil(timeLeft/60)..suffix[2] 1023 | else 1024 | return floor(timeLeft/60)..":"..floor(timeLeft)-60*floor(timeLeft/60)..suffix[2] 1025 | end 1026 | end 1027 | else 1028 | if VCB_SAVE["Timer_hours_convert"] then 1029 | if VCB_SAVE["Timer_round"] then 1030 | return "0:"..ceil(timeLeft/60)..suffix[3] 1031 | else 1032 | return "0:"..floor(timeLeft/60)..suffix[3] 1033 | end 1034 | else 1035 | if VCB_SAVE["Timer_round"] then 1036 | return ceil(timeLeft/60)..suffix[2] 1037 | else 1038 | return floor(timeLeft/60)..suffix[2] 1039 | end 1040 | end 1041 | end 1042 | end 1043 | else 1044 | if VCB_SAVE["Timer_minutes_convert"] then 1045 | if timeLeft >=10 then 1046 | if VCB_SAVE["Timer_tenth"] then 1047 | if VCB_SAVE["Timer_round"] then 1048 | return "0:"..ceil(timeLeft)..":"..100*timeLeft-100*floor(timeLeft)..suffix[2] 1049 | else 1050 | return "0:"..floor(timeLeft)..":"..100*timeLeft-100*floor(timeLeft)..suffix[2] 1051 | end 1052 | else 1053 | if VCB_SAVE["Timer_round"] then 1054 | return "0:"..ceil(timeLeft)..suffix[2] 1055 | else 1056 | return "0:"..floor(timeLeft)..suffix[2] 1057 | end 1058 | end 1059 | else 1060 | if VCB_SAVE["Timer_tenth"] then 1061 | if VCB_SAVE["Timer_round"] then 1062 | return "0:0"..ceil(timeLeft)..":"..ceil(100*timeLeft-100*floor(timeLeft))..suffix[2] 1063 | else 1064 | return "0:0"..floor(timeLeft)..":"..floor(100*timeLeft-100*floor(timeLeft))..suffix[2] 1065 | end 1066 | else 1067 | if VCB_SAVE["Timer_round"] then 1068 | return "0:0"..ceil(timeLeft)..suffix[2] 1069 | else 1070 | return "0:0"..floor(timeLeft)..suffix[2] 1071 | end 1072 | end 1073 | end 1074 | else 1075 | if VCB_SAVE["Timer_tenth"] then 1076 | if VCB_SAVE["Timer_round"] then 1077 | return ceil(timeLeft)..":"..ceil(100*timeLeft-100*floor(timeLeft))..suffix[1] 1078 | else 1079 | return floor(timeLeft)..":"..floor(100*timeLeft-100*floor(timeLeft))..suffix[1] 1080 | end 1081 | else 1082 | if VCB_SAVE["Timer_round"] then 1083 | return ceil(timeLeft)..suffix[1] 1084 | else 1085 | return floor(timeLeft)..suffix[1] 1086 | end 1087 | end 1088 | end 1089 | end 1090 | else 1091 | if suffix then 1092 | if timeLeft > 60 then 1093 | return floor(timeLeft/60)..suffix[2] 1094 | else 1095 | return floor(timeLeft)..suffix[1] 1096 | end 1097 | end 1098 | end 1099 | end 1100 | 1101 | function VCB_BF_ToggleLock() 1102 | if (not VCB_BF_LOCKED) then 1103 | VCB_BF_LOCKED = true 1104 | VCB_BF_Lock(true) 1105 | VCB_SendMessage(VCB_LOCKED_FRAMES) 1106 | VCB_SAVEFRAMEPOS() 1107 | else 1108 | VCB_SAVEFRAMEPOS() 1109 | VCB_BF_LOCKED = false 1110 | VCB_BF_Lock(false) 1111 | VCB_SendMessage(VCB_UNLOCKED_FRAMES) 1112 | end 1113 | end 1114 | 1115 | function VCB_BF_Lock(lock) 1116 | for cat, templateName in pairs(VCB_BUTTONNAME) do 1117 | for i=VCB_MININDEX[cat], VCB_MAXINDEX[cat] do 1118 | if (lock) then 1119 | getglobal(templateName..i.."_Ghost_Label"):Hide() 1120 | getglobal(templateName..i.."_Ghost_Texture"):Hide() 1121 | else 1122 | getglobal(templateName..i):Show() 1123 | getglobal(templateName..i.."_Ghost_Label"):Show() 1124 | getglobal(templateName..i.."_Ghost_Texture"):Show() 1125 | end 1126 | end 1127 | end 1128 | VCB_BF_RepositioningAndResizing() 1129 | end 1130 | 1131 | function VCB_BF_DummyConfigMode_Enable() 1132 | VCB_BF_DUMMY_MODE = true 1133 | for cat, templateName in pairs(VCB_BUTTONNAME) do 1134 | for i=VCB_MININDEX[cat], VCB_MAXINDEX[cat] do 1135 | local button = getglobal(templateName..i) 1136 | local icon = getglobal(templateName..i.."Icon") 1137 | local buffDuration = getglobal(templateName..i.."Duration") 1138 | local border = getglobal(templateName..i.."Border") 1139 | local count = getglobal(templateName..i.."Count") 1140 | icon:SetTexture("Interface\\AddOns\\VCB\\images\\dummy.tga") 1141 | if i < 7 and cat == "buff" and (not VCB_SAVE["MISC_disable_CF"]) then 1142 | button:SetParent(VCB_BF_CONSOLIDATED_BUFFFRAME) 1143 | end 1144 | if cat == "buff" then 1145 | if button:GetParent() == VCB_BF_CONSOLIDATED_BUFFFRAME then 1146 | border:SetVertexColor(VCB_SAVE["CF_AURA_bordercolor_r"],VCB_SAVE["CF_AURA_bordercolor_g"],VCB_SAVE["CF_AURA_bordercolor_b"],VCB_SAVE["CF_AURA_borderopacity"]) 1147 | elseif button:GetParent() == VCB_BF_BUFF_FRAME then 1148 | border:SetVertexColor(VCB_SAVE["BF_BORDER_bordercolor_r"],VCB_SAVE["BF_BORDER_bordercolor_g"],VCB_SAVE["BF_BORDER_bordercolor_b"],VCB_SAVE["BF_BORDER_borderopacity"]) 1149 | end 1150 | elseif cat == "debuff" and VCB_SAVE["DBF_BORDER_enableborder"] then 1151 | if VCB_SAVE["DBF_GENERAL_invert"] then 1152 | local j = 15-i 1153 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):ClearAllPoints() 1154 | if VCB_SAVE["DBF_GENERAL_invertorientation"] then 1155 | if VCB_SAVE["DBF_GENERAL_verticalmode"] then 1156 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", (32+VCB_SAVE["DBF_GENERAL_padding_h"])*floor(i/VCB_SAVE["DBF_GENERAL_numperrow"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*i + floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(44+VCB_SAVE["DBF_GENERAL_padding_v"])) 1157 | else 1158 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", (32+VCB_SAVE["DBF_GENERAL_padding_h"])*i - floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(32+VCB_SAVE["DBF_GENERAL_padding_h"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])) 1159 | end 1160 | else 1161 | if VCB_SAVE["DBF_GENERAL_verticalmode"] then 1162 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", -(32+VCB_SAVE["DBF_GENERAL_padding_h"])*floor(i/VCB_SAVE["DBF_GENERAL_numperrow"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*i + floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(44+VCB_SAVE["DBF_GENERAL_padding_v"])) 1163 | else 1164 | getglobal("VCB_BF_DEBUFF_BUTTON"..j):SetPoint("TOPRIGHT", -(32+VCB_SAVE["DBF_GENERAL_padding_h"])*i + floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])*VCB_SAVE["DBF_GENERAL_numperrow"]*(32+VCB_SAVE["DBF_GENERAL_padding_h"]), -(44+VCB_SAVE["DBF_GENERAL_padding_v"])*floor(i/VCB_SAVE["DBF_GENERAL_numperrow"])) 1165 | end 1166 | end 1167 | end 1168 | if i < 3 then 1169 | border:SetVertexColor(VCB_SAVE["DBF_BORDER_nonecolor_r"],VCB_SAVE["DBF_BORDER_nonecolor_g"],VCB_SAVE["DBF_BORDER_nonecolor_b"],VCB_SAVE["DBF_BORDER_borderopacity"]) 1170 | elseif i >= 3 and i < 6 then 1171 | border:SetVertexColor(VCB_SAVE["DBF_BORDER_poisoncolor_r"],VCB_SAVE["DBF_BORDER_poisoncolor_g"],VCB_SAVE["DBF_BORDER_poisoncolor_b"],VCB_SAVE["DBF_BORDER_borderopacity"]) 1172 | elseif i >= 6 and i < 9 then 1173 | border:SetVertexColor(VCB_SAVE["DBF_BORDER_magiccolor_r"],VCB_SAVE["DBF_BORDER_magiccolor_g"],VCB_SAVE["DBF_BORDER_magiccolor_b"],VCB_SAVE["DBF_BORDER_borderopacity"]) 1174 | elseif i >= 9 and i < 12 then 1175 | border:SetVertexColor(VCB_SAVE["DBF_BORDER_cursecolor_r"],VCB_SAVE["DBF_BORDER_cursecolor_g"],VCB_SAVE["DBF_BORDER_cursecolor_b"],VCB_SAVE["DBF_BORDER_borderopacity"]) 1176 | else 1177 | border:SetVertexColor(VCB_SAVE["DBF_BORDER_diseasecolor_r"],VCB_SAVE["DBF_BORDER_diseasecolor_g"],VCB_SAVE["DBF_BORDER_diseasecolor_b"],VCB_SAVE["DBF_BORDER_borderopacity"]) 1178 | end 1179 | end 1180 | count:SetText(5) 1181 | count:Show() 1182 | button:Show() 1183 | end 1184 | end 1185 | VCB_BF_RepositioningAndResizing() 1186 | end 1187 | 1188 | function VCB_BF_DummyConfigMode_Disable() 1189 | VCB_BF_DUMMY_MODE = false 1190 | for cat, templateName in pairs(VCB_BUTTONNAME) do 1191 | for i=VCB_MININDEX[cat], VCB_MAXINDEX[cat] do 1192 | VCB_BF_BUFF_BUTTON_Update(getglobal(templateName..i)) 1193 | end 1194 | end 1195 | VCB_BF_WEAPON_BUTTON_OnEvent(false) 1196 | VCB_BF_RepositioningAndResizing() 1197 | end 1198 | 1199 | function VCB_BF_updateBuffs() 1200 | for i=0,VCB_MAXINDEX.buff do 1201 | VCB_BF_BUFF_BUTTON_Update(getglobal("VCB_BF_BUFF_BUTTON"..i)) 1202 | end 1203 | end 1204 | 1205 | function VCB_BF_ConsolidatedAdd(name) 1206 | if not VCB_Contains(Consolidated_Buffs, name) then 1207 | table.insert(Consolidated_Buffs, name) 1208 | VCB_SendMessage(name..VCB_HAS_BEEN_ADDED) 1209 | else 1210 | VCB_SendMessage(name..VCB_IS_ALREADY_IN_LIST) 1211 | end 1212 | VCB_BF_updateBuffs() 1213 | end 1214 | 1215 | function VCB_BF_ConsolidatedRemove(name) 1216 | if VCB_Contains(Consolidated_Buffs, name) then 1217 | table.remove(Consolidated_Buffs, VCB_Table_GetKeys(Consolidated_Buffs, name)) 1218 | VCB_SendMessage(name..VCB_HAS_BEEN_REMOVED) 1219 | else 1220 | VCB_SendMessage(name..VCB_IS_NOT_IN_LIST) 1221 | end 1222 | VCB_BF_updateBuffs() 1223 | end 1224 | 1225 | function VCB_BF_RemoveAllFromConsolidate() 1226 | Consolidated_Buffs = {} 1227 | VCB_SendMessage(VCB_CB_LIST_EMPTIED) 1228 | VCB_BF_updateBuffs() 1229 | end 1230 | 1231 | function VCB_BF_AddToBanned(name) 1232 | if not VCB_Contains(Banned_Buffs, name) then 1233 | table.insert(Banned_Buffs, name) 1234 | VCB_SendMessage(name..VCB_HAS_BEEN_ADDED) 1235 | else 1236 | VCB_SendMessage(name..VCB_IS_ALREADY_IN_LIST) 1237 | end 1238 | VCB_BF_updateBuffs() 1239 | end 1240 | 1241 | function VCB_BF_RemoveFromBanned(name) 1242 | if VCB_Contains(Banned_Buffs, name) then 1243 | table.remove(Banned_Buffs, VCB_Table_GetKeys(Banned_Buffs, name)) 1244 | VCB_SendMessage(name..VCB_HAS_BEEN_REMOVED) 1245 | else 1246 | VCB_SendMessage(name..VCB_IS_NOT_IN_LIST) 1247 | end 1248 | end 1249 | 1250 | function VCB_BF_RemoveAllFromBanned() 1251 | Banned_Buffs = {} 1252 | VCB_SendMessage(VCB_BB_LIST_EMPTIED) 1253 | end --------------------------------------------------------------------------------