├── .github
├── FUNDING.yml
└── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ ├── feature_request.yml
│ └── taint_report.yml
├── .gitmodules
├── .upconfig
├── Bindings.xml
├── Changelog.md
├── Description.html
├── README.md
├── Scrap-Cata.toc
├── Scrap-Mainline.toc
├── Scrap-TBC.toc
├── Scrap-Vanilla.toc
├── Scrap-Wrath.toc
├── addons
├── config
│ ├── config.xml
│ ├── options.lua
│ └── tutorials.lua
├── main
│ ├── defaults.lua
│ ├── main.lua
│ ├── main.xml
│ ├── pricing.lua
│ ├── spotlight.lua
│ └── tests.lua
└── merchant
│ ├── button.lua
│ ├── learning.lua
│ ├── merchant.xml
│ ├── visualizer.lua
│ └── visualizer.xml
├── art
├── Discord.tga
├── Patreon.tga
├── Paypal.tga
├── Thumbsdown.tga
├── Thumbsup.tga
├── Tutorial-Button.tga
├── Tutorial-Drag.tga
├── Tutorial-Visualizer.tga
├── merchant-border.tga
├── scrap-big.tga
├── scrap-plugin.tga
├── scrap-small-disabled.tga
└── scrap-small.tga
├── libs
├── AceLocale-3.0
│ └── AceLocale-3.0.lua
├── LibStub
│ └── LibStub.lua
├── TaintLess
│ └── TaintLess.xml
├── config.xml
├── main.xml
└── merchant.xml
└── localization
├── cn.lua
├── de.lua
├── en.lua
├── es.lua
├── fr.lua
├── it.lua
├── ko.lua
├── localization.xml
├── nl.lua
├── pt.lua
├── ru.lua
└── tw.lua
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | patreon: jaliborc
2 | custom: "paypal.me/jaliborc"
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: "Bug Report"
2 | description: Create a report to help us improve
3 | labels: ['🐛 bug']
4 | body:
5 | - type: checkboxes
6 | attributes:
7 | label: Is there an existing issue for this?
8 | description: Please [search for existing issues](https://github.com/Jaliborc/Scrap/issues?q=is%3Aissue%20) to see if one already exists for the bug you encountered. If an issue exists but it is closed, it may be solved but not yet available in a stable release.
9 | options:
10 | - label: I have searched the existing open and closed issues.
11 | required: true
12 |
13 | - type: textarea
14 | attributes:
15 | label: Description
16 | description: What did you expect to happen and what happened instead?
17 | validations:
18 | required: true
19 |
20 | - type: input
21 | attributes:
22 | label: Scrap Version
23 | description: |
24 | You can see the current version in the ingame addons list, in the CurseForge app or in the `## Version:` field of the Scrap_X.toc file.
25 | placeholder: "Scrap 4.4.4"
26 | validations:
27 | required: true
28 |
29 | - type: dropdown
30 | id: flavor
31 | attributes:
32 | label: World of Warcraft Flavor
33 | description: What version of World of Warcraft are you running?
34 | options:
35 | - Retail
36 | - Classic Era
37 | - Cataclysm Classic
38 | - Beta (which one?)
39 | validations:
40 | required: true
41 |
42 | - type: dropdown
43 | id: region
44 | attributes:
45 | label: World of Warcraft Region
46 | description: Which region are you playing World of Warcraft in?
47 | options:
48 | - EU
49 | - TW/Asia
50 | - US/NA
51 | validations:
52 | required: true
53 |
54 | - type: dropdown
55 | id: interference
56 | attributes:
57 | label: Tested with only Scrap
58 | description: |
59 | Sometimes, addons can interfere with each other. We recommend testing with only Scrap enabled to see if the issue persists.
60 | options:
61 | - I got this issue with only Scrap enabled
62 | - This issue happens only with another specific enabled (which one?)
63 | validations:
64 | required: true
65 |
66 | - type: textarea
67 | attributes:
68 | label: Lua Error
69 | description: |
70 | Do you have an error log of what happened? If you don't see any errors, make sure that error reporting is enabled (type `/console scriptErrors 1` in the chat and reload the game).
71 | If multiple errors occur, type only the first (labelled 1/Many) that appeared.
72 | render: Text
73 | validations:
74 | required: false
75 |
76 | - type: textarea
77 | attributes:
78 | label: Reproduction Steps
79 | description: Please list out the steps to reproduce your bug. Please verify that your reproduction steps are enough to reproduce the problem.
80 | placeholder: |
81 | 1. Go to '...'
82 | 2. Click on '....'
83 | 3. Scroll down to '....'
84 | 4. See error
85 | validations:
86 | required: true
87 |
88 | - type: input
89 | attributes:
90 | label: Last Working Version
91 | description: |
92 | Was it working in a previous version? If yes, which was the last good one?
93 | placeholder: "Scrap 4.4.4"
94 | validations:
95 | required: false
96 |
97 | - type: textarea
98 | attributes:
99 | label: Screenshots
100 | description: If applicable, add screenshots to help explain your problem.
101 | placeholder: Click here to attach your screenshots via the editor button in the top right.
102 | validations:
103 | required: false
104 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Question
4 | url: https://bit.ly/discord-jaliborc
5 | about: Please ask and answer questions here.
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: "Feature Request"
2 | description: Suggest an idea for this addon
3 | labels: ['✨ enhancement']
4 | body:
5 | - type: checkboxes
6 | attributes:
7 | label: Is there an existing issue for this?
8 | description: Please [search for existing issues](https://github.com/Jaliborc/Scrap/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22%3Asparkles%3A%20enhancement%22) to see if one already exists for the idea you have. If one already exists, comment instead on the existing issue that you also would like to see that feature in the game.
9 | options:
10 | - label: I have searched the existing open and closed issues.
11 | required: true
12 |
13 | - type: textarea
14 | attributes:
15 | label: Feature Request
16 | description: |
17 | Describe the feature you'd like to see.
18 | validations:
19 | required: true
20 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/taint_report.yml:
--------------------------------------------------------------------------------
1 | name: "Taint Report"
2 | description: Report occurrence of a "This action has been blocked" error dialog.
3 | labels: ['🔒 taint']
4 | body:
5 | - type: checkboxes
6 | attributes:
7 | label: Is there an existing issue for this?
8 | description: Please [search for existing issues](https://github.com/Jaliborc/Scrap/issues?q=is%3Aissue%20) to see if one already exists for the bug you encountered.
9 | If an issue exists but it is closed, it may be solved but not yet available in a stable release, or simply not a solvable (not all taint issues can be resolved by mod developers).
10 | options:
11 | - label: I have searched the existing open and closed issues.
12 | required: true
13 |
14 | - type: input
15 | attributes:
16 | label: Scrap Version
17 | description: |
18 | You can see the current version in the ingame addons list, in the CurseForge app or in the `## Version:` field of the Scrap_X.toc file.
19 | placeholder: "Scrap 4.4.4"
20 | validations:
21 | required: true
22 |
23 | - type: dropdown
24 | id: flavor
25 | attributes:
26 | label: World of Warcraft Flavor
27 | description: What version of World of Warcraft are you running?
28 | options:
29 | - Retail
30 | - Classic Era
31 | - Cataclysm Classic
32 | - Beta (which one?)
33 | validations:
34 | required: true
35 |
36 | - type: dropdown
37 | id: region
38 | attributes:
39 | label: World of Warcraft Region
40 | description: Which region are you playing World of Warcraft in?
41 | options:
42 | - EU
43 | - TW/Asia
44 | - US/NA
45 | validations:
46 | required: true
47 |
48 | - type: checkboxes
49 | id: interference
50 | attributes:
51 | label: Tested with only Scrap
52 | description: |
53 | Due to the nature of taint, errors can easily be blamed by the client on the wrong addon. When running multiple ones, it is generally not clear which caused the issue.
54 | options:
55 | - label: I got this issue with only Scrap enabled.
56 | required: true
57 |
58 | - type: textarea
59 | attributes:
60 | label: Reproduction Steps
61 | description: Please list out the steps to reproduce your bug. Please verify that your reproduction steps are enough to reproduce the problem.
62 | placeholder: |
63 | 1. Go to '...'
64 | 2. Click on '....'
65 | 3. Scroll down to '....'
66 | 4. See error
67 | validations:
68 | required: true
69 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "libs/C_Everywhere"]
2 | path = libs/C_Everywhere
3 | url = https://github.com/Jaliborc/C_Everywhere.git
4 | [submodule "libs/Unfit-1.0"]
5 | path = libs/Unfit-1.0
6 | url = https://github.com/Jaliborc/Unfit-1.0.git
7 | [submodule "libs/CustomSearch-1.0"]
8 | path = libs/CustomSearch-1.0
9 | url = https://github.com/Jaliborc/CustomSearch-1.0
10 | [submodule "libs/ItemSearch-1.3"]
11 | path = libs/ItemSearch-1.3
12 | url = https://github.com/Jaliborc/ItemSearch-1.3
13 | [submodule "libs/CustomTutorials-2.1"]
14 | path = libs/CustomTutorials-2.1
15 | url = https://github.com/Jaliborc/CustomTutorials-2.1
16 | [submodule "libs/SecureTabs-2.0"]
17 | path = libs/SecureTabs-2.0
18 | url = https://github.com/Jaliborc/SecureTabs-2.0.git
19 | [submodule "libs/MutexDelay-1.0"]
20 | path = libs/MutexDelay-1.0
21 | url = https://github.com/Jaliborc/MutexDelay-1.0.git
22 | [submodule "libs/Poncho-2.0"]
23 | path = libs/Poncho-2.0
24 | url = https://github.com/Jaliborc/Poncho-2.0.git
25 | [submodule "libs/Sushi-3.2"]
26 | path = libs/Sushi-3.2
27 | url = https://github.com/Jaliborc/Sushi-3.2.git
28 | [submodule "libs/StaleCheck-1.0"]
29 | path = libs/StaleCheck-1.0
30 | url = https://github.com/Jaliborc/StaleCheck-1.0
31 | [submodule "libs/WildAddon-1.1"]
32 | path = libs/WildAddon-1.1
33 | url = https://github.com/Jaliborc/WildAddon-1.1.git
34 |
--------------------------------------------------------------------------------
/.upconfig:
--------------------------------------------------------------------------------
1 | [project]
2 | 5422
3 | [modules]
4 | Scrap_Config
5 | Scrap_Merchant
6 | [ignore]
7 | Scrap/libs/C_Everywhere/Tests.lua
8 | Scrap/libs/Unfit-1.0/Tests.lua
9 | Scrap/libs/ItemSearch-1.3/Tests.lua
10 | Scrap/libs/Poncho-2.0/Tests.lua
11 | Scrap/libs/Sushi-3.2/Tests
12 | Scrap/libs/Sushi-3.2/Classes/Buttons/Help.lua
13 | Scrap/libs/Sushi-3.2/Classes/Buttons/Gray.lua
14 | Scrap/libs/Sushi-3.2/Classes/Buttons/Icon.lua
15 | Scrap/libs/Sushi-3.2/Classes/Buttons/Expand.lua
16 | Scrap/libs/Sushi-3.2/Classes/Misc/GlowBox.lua
--------------------------------------------------------------------------------
/Bindings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | local item = GameTooltip:IsVisible() and select(2, GameTooltip:GetItem())
4 | if item then
5 | Scrap:ToggleJunk(tonumber(item:match('item:(%d+)')))
6 | end
7 |
8 |
9 | Scrap:DestroyCheapest()
10 |
11 |
12 | Scrap:DestroyJunk()
13 |
14 |
15 | if MerchantFrame:IsShown() and LoadAddOn('Scrap_Merchant') then
16 | Scrap.Merchant:Sell()
17 | end
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Changelog.md:
--------------------------------------------------------------------------------
1 | ### 11.1.5
2 | * Updated with workaround to serious flaw within Blizzard's EventRegistry.
3 |
4 | ### 11.1.4
5 | * TOC updated.
6 | * WildAddon-1.1 updated.
7 |
8 | ### 11.1.3
9 | * TOC update.
10 |
11 | ### 11.1.2
12 | * Retail: Updated description to match the new addon list formatting.
13 | * All: Updated dependencies.
14 |
15 | ### 11.1.1
16 | * All: Updated WildAddon library.
17 |
18 | ### 11.1
19 | * Retail: Updated for the "Undermined" game patch.
20 | * Retail: Added support for the new addon list native grouping capabilities.
21 |
22 | ### 11.0.15
23 | * All: Updated libraries.
24 |
25 | ### 11.0.14
26 | * All: Fixed issues found and reported on the beta version.
27 | * Cata: Fixed bug with spotlight.
28 | * All: Tagging release.
29 |
30 | ### 11.0.13 (beta)
31 | * All: Upgraded to WildAddon-1.1. Addon custom events now appear on the event tracing window.
32 |
33 | ### 11.0.12
34 | * All: Updated TOC
35 |
36 | ### 11.0.11
37 | * Retail: Fixed issue that prevented Spotlight from updating correctly on the combined bag frame.
38 |
39 | ### 11.0.10
40 | * All: Fixed bug that could occur due to a delay in obtaining item hyperlinks.
41 |
42 | ### 11.0.9
43 | * Cata, Retail: Improved uncollected appearance detection.
44 | * Cata, Classic: Fixed issues with unusable and quest item detection.
45 |
46 | ### 11.0.8
47 | * Classic, Cata: Updated C_Everywhere, which was causing an issue.
48 |
49 | ### 11.0.7
50 | * Retail: Updated spotlight for the war within default bag interface.
51 |
52 | ### 11.0.6
53 | * All: Added ability to detect new versions of the addon being available.
54 |
55 | ### 11.0.5
56 | * Cata, Retail: Will no longer consider uncollected appearances junk by default.
57 |
58 | ### 11.0.4
59 | * All: Changed how the item level threshold options are presented, for clarity of use.
60 | * Warning! Item threshold settings have been reset as part of the update.
61 |
62 | ### 11.0.3
63 | * All: Updated libraries that had bugs fixed during Bagnon's development.
64 |
65 | ### 11.0.2
66 | * Retail: Hotfix for 11.0.2.
67 |
68 | ### 11.0.1
69 | * Retail: Updated for WoW patch 11.0.2.
70 | * Classic, Cata: Verified support.
71 | * All: Updated TaintLess.
72 |
73 | ### 11.0.0
74 | * Updated for The War Within.
75 |
76 | #### 10.2.11
77 | * Dragonflight: Updated toc.
78 |
79 | #### 10.2.10
80 | * Cata: Updated popups to support the worsened API, fixing multiple bugs.
81 |
82 | #### 10.2.9
83 | * Updated for Cataclysm servers!
84 |
85 | #### 10.2.8
86 | * All: Fixed issue with ColorPicker detected by the community.
87 |
88 | #### 10.2.7
89 | * All: Fixed a bug with tutorials on new installs.
90 |
91 | #### 10.2.6
92 | * Retail: Added support to the new native Addon Compartment functionality.
93 | * All: Made the existence of keybinding options more obvious.
94 |
95 | #### 10.2.5
96 | * Now users can optionally configure the item level thresholds for an item to be considered too low level.
97 | * Removed deprecated hidden tooltip.
98 |
99 | #### 10.2.4
100 | * Updated main artwork!
101 |
102 | #### 10.2.3
103 | * New Help menu!
104 | * Merchant Scrap button now has entry to redirect to the new Help menu, instead of the tutorial alone.
105 | * Small tweaks to the tutorial to fit within the new setup.
106 | * Upgraded to Sushi-3.2:
107 | * Popup rework, with bugfixes and improved design.
108 | * Fixed dropdown issue that could create lag, improved design.
109 | * Function-chaining now possible.
110 | * Other minor optimizations.
111 | * Now prevents Titan from causing errors by requesting non-existing tooltips.
112 | * Now makes use of ExecuteFrameScript where sensible.
113 | * Fixed a bug in all localizations.
114 |
115 | #### 10.2.2
116 | * Season of Discovery: Prevented strange usage of the tooltip APIs from causing errors.
117 |
118 | #### 10.2.1
119 | * Classic: Fixed positioning of Visualizer tab.
120 |
121 | ### 10.2
122 | * Retail: TOC update.
123 |
124 | #### 10.1.8
125 | * Wrath: Updated for 3.4.3.
126 |
127 | #### 10.1.7
128 | * Classic: Fixed bug that caused away-from-vendor item prices to not account for the size of the stack.
129 | * All: Tweaked some locales.
130 |
131 | #### 10.1.6
132 | * All: Added assets for the new recommended addon list format for plugins.
133 | * All: Fixed bug in the new filters configuration panel that prevented changing settings.
134 |
135 | #### 10.1.5
136 | * All: Massive overall update to localizations.
137 |
138 | #### 10.1.4
139 | * Vanilla & Wrath: Fixed issues with loading config in modern option panels.
140 | * All: Reorganized options.
141 |
142 | #### 10.1.3
143 | * All: Bound on equip items marked as gray quality by Blizzard are no longer considered junk by default. (cheers to Ketrel for initial draft)
144 | * Vanilla: Updated to Vanilla now using C_Container that was causing errors on mousehover.
145 |
146 | #### 10.1.2
147 | * All: Added a "Forget Item" button to the Scrap merchant tab.
148 | * Dragonflight: Fixed issue that caused merchant "undo arrow" to appear while on the Scrap merchant tab.
149 |
150 | #### 10.1.1
151 | * Dragonflight: Updated for new merchant stock UI.
152 | * Dragonflight: Added support for the new addon logos API and multiple-TOC format. (no Compartiment support yet).
153 | * Dragonflight: Cosmetic items are now not considered junk by default.
154 | * Wrath: Updated TaintLess (previous version was causing issues on this version of the game).
155 | * All: Marked multiple items to be not junk by default given community feedback.
156 | * All: Fixed layout of the addon keybindings to fit both retail and classic.
157 | * All: Merccd "C:\Users\Jaliborc\Documents\Documents\Work\Addons\upmod"node cli hant button tooltip now updates as expected when button is clicked.
158 | * All: Removed need for 2 unused textures (smaller install size).
159 |
160 | ### 10.1
161 | * Dragonflight: Updated for Embers of Neltharion.
162 | * All: Added keybinding to destroy single least valuable junk item stack.
163 | * All: Changed how default settings are handled, so new features that are meant to be enabled by default do so for existing users.
164 | * Wrath: Fixed issue unintentionally turning the sell prices feature on.
165 | * Vanilla: Fixed two bugs in the new vendor prices feature triggered on inventory items.
166 |
167 | #### 10.0.11
168 | * Vanilla: Now shows item sell price in tooltips even when not at the vendor.
169 |
170 | #### 10.0.10
171 | * Wrath: Fixed for blizzard server bugs introduced with Secrets of Ulduar.
172 |
173 | #### 10.0.9
174 | * Classic: Fixed bug with relic items comparison.
175 | * All: Small optimization in equipment item comparison code.
176 |
177 | #### 10.0.8
178 | * Update addresses the majority of hang issues:
179 | * All: Now using ItemSearch-1.3 for tooltip queries.
180 | * All: Updated C_Everywhere for classic tooltip support.
181 | * All: Minor Unfit and CustomSearch optimizations.
182 |
183 | #### 10.0.7
184 | * All: Updated C_Everywhere
185 | * All: Embedded TaintLess.
186 |
187 | #### 10.0.6
188 | * All: Fixed issue with automatic learning.
189 |
190 | #### 10.0.5
191 | * All: Reimplemented using C_Everywhere.
192 | * All: Updated italian locales (thanks to simoflorence).
193 |
194 | #### 10.0.4
195 | * Dragonflight: Updated for WoW patch 10.0.2.
196 | * Dragonflight: Added support for the new Evoker class.
197 | * All: Updated socials.
198 |
199 | #### 10.0.3
200 | * Dragonflight: Added support for new reagents bag.
201 | * Fixed "location.GetItemID" bug.
202 | * Added italian locales.
203 |
204 | #### 10.0.2
205 | * Classic: Fixed issue with junk tagging on default bag UI.
206 |
207 | #### 10.0.1
208 | * Added pretty icons to merchant dropdown menu.
209 | * Visualizer now displays items as it queries the client for more. This should help players with very long lists.
210 | * Set "Baubleworms greys" as not junk by default.
211 | * Tagging release.
212 |
213 | ### 10 (beta)
214 | * Updated for the Dragonflight PTR.
215 | * Updated design of Scrap's merchant tab.
216 | * Improved display of junk items in inventory and bank.
217 | * Optimized download size using texture RLE compression.
218 |
219 | #### 9.2.1
220 | * Improved ilevel threshold for low level equipment/consumables.
221 | * Fixed bug and improved logic of the Usage Learning feature.
222 |
223 | ### 9.2
224 | * Classic: Updated for Wrath of the Lich King.
225 | * All: Fixed issue with closing vendor window.
226 |
227 | #### 9.1.2
228 | * Updated libraries to Shadowlands 9.1.5 which were mistakenly not updated last version.
229 |
230 | #### 9.1.1
231 | * Updated for Shadowlands 9.1.5
232 |
233 | ### 9.1
234 | * Updated for Chains of Domination
235 |
236 | #### 9.0.6
237 | * Updated for the Burning Crusade
238 |
239 | #### 9.0.5
240 | * Updated for WoW patches 9.0.5 and 1.13.6.
241 |
242 | #### 9.0.4
243 | * Updated for WoW patch 9.0.3.
244 |
245 | #### 9.0.3
246 | * Fixed "unsafe auto sell" mode.
247 |
248 | #### 9.0.2
249 | * Largely improved low level equipment detection in Shadowlands.
250 | * Fixed issue with marking junk in default bags.
251 |
252 | #### 9.0.1
253 | * Fixed issue with auto sell.
254 | * Fixed issue with auto learning.
255 | * Updated chinese locales.
256 |
257 | ### 9
258 | * Updated for Shadowlands
259 | * Fixed minor issue that could occur in plugins that load merchant API outside of merchant.
260 |
261 | #### 8.3.3
262 | * Added Dutch localization (thanks to Barrosy).
263 | * Updated French localization (thanks to Nelfym).
264 |
265 | #### 8.3.2
266 | * Fixed bug with the visualizer's "set as useful" button.
267 |
268 | #### 8.3.1
269 | * Fixed issue with dropdown.
270 |
271 | ### 8.3.0
272 | * Updated for Visions of Nzoth.
273 |
274 | #### 8.2.3
275 | * Fixed issue with `Sell Junk` keybinding.
276 | * Fixed visual issue with `Character Specific Junk List` option.
277 |
278 | #### 8.2.2
279 | * Fixed another issue with `Usage Learning` feature.
280 |
281 | #### 8.2.1
282 | * Fixed issue starting `Usage Learning` feature.
283 |
284 | ### 8.2.0
285 | * Changed when low level gray equipment is classified as junk by default.
286 | * Added new items to default junk exclusion as requested by users.
287 | * Added options to not destroy items with no sale value at the vendor.
288 | * Added keybinding to destroy junk items.
289 | * Complete internal rewrite of settings, variables and file internal structure.
290 | * `Scrap_Visualizer` is not part of `Scrap_Merchant`
291 | * Renamed `Scrap_Options` to `Scrap_Config`
292 | * Heavily reduced globals polution.
293 | * Now running on new libraries.
294 |
295 | #### 13.19
296 | * Fixed issue with auto repair in classic.
297 |
298 | #### 13.18
299 | * Fixed issue with patron list.
300 |
301 | #### 13.17
302 | * Now compatible with World of Warcraft Classic
303 |
304 | #### 13.16
305 | * Updated for World of Warcraft patch 8.2.0.
306 |
307 | #### 13.15
308 | * Hotfix
309 |
310 | #### 13.14
311 | * Fixed issue causing Visualizer tab button to display even if the module is disabled.
312 | * Fixed issue with item comparison to current equipment.
313 | * Item level detection is now faster (no longer requires internal tooltip scanning).
314 |
315 | #### 13.13
316 | * Updated for Tides of Vengeance.
317 | * Improved how equipment item level is detected.
318 | * Updated Russian localization.
319 | * Fixed English localization error.
320 |
321 | #### 13.12
322 | * Minor internal modification.
323 |
324 | #### 13.11
325 | * Fixed issue with settings default reset.
326 |
327 | #### 13.10
328 | * Added patron list in the configuration options. See patreon.com/jaliborc to learn how to join the list.
329 |
330 | #### 13.9
331 | * Including unnecessary files because game client is now picky about missing files.
332 |
333 | #### 13.8
334 | * Now knows that Shamans cant use plate.
335 |
336 | #### 13.7
337 | * Updated for Battle for Azeroth.
338 |
339 | #### 13.6
340 | * Updated for Shadow of Argus.
341 |
342 | #### 13.5
343 | * Updated for Tomb of Sargeras.
344 |
345 | #### 13.4
346 | * Updated for Return to Kharazan.
347 |
348 | #### 13.3
349 | * Minor bugfix.
350 |
351 | #### 13.2
352 | * Tagging as release.
353 |
354 | ### 13.1 (beta)
355 | * Updated for Legion.
356 | * Merchant tooltip now counts the number of items, and not the number of slots being sold.
357 |
358 | ### 13
359 | * Now you can choose between having character specific junk lists or a single shared list among your characters.
360 |
361 | #### 12.25
362 | * Made Eternium Rose not junk by default.
363 |
364 | #### 12.24
365 | * Updated for Fury of Hellfire
366 |
367 | #### 12.23
368 | * Updated for WoW patch 6.2.
369 | * Big Crates of Salvage are now considered not junk by default.
370 |
371 | #### 12.24
372 | * Updated for WoW patch 6.1
373 |
374 | #### 12.23
375 | * Follower upgrade items should no longer be sold by default.
376 | * Slight changes to inteligent learning behaviour.
377 | * Fixed chatframe possible bug.
378 |
379 | #### 12.22
380 | * Keybindings are now in the Addons category
381 |
382 | #### 12.21
383 | * Options menu now loads properly on first try.
384 |
385 | #### 12.20
386 | * Selling soulbound unusable equipment is now optional.
387 | * Minor changes for preventing bugs.
388 |
389 | #### 12.19
390 | * Updated chinese locale ^^(by scars377)^^
391 |
392 | #### 12.18
393 | * Fixed issue with Scrap keybinding on ElvUI.
394 |
395 | #### 12.17
396 | * Now "Low Consumables" option does not sell consumables with epic or rare quality.
397 |
398 | #### 12.16
399 | * Fixed issue with guild repair option.
400 |
401 | #### 12.15
402 | * Updated for The Iron Tide.
403 |
404 | #### 12.14
405 | * Guild masters can now prevent automatic guild repairs by writiing '[noautorepair]' in the guild information box.
406 |
407 | #### 12.13
408 | * Now the addon properly indicates it works in patch 5.4.
409 |
410 | #### 12.12
411 | * Fixed issue ocurring when printing messages in the chat frames.
412 |
413 | #### 12.11
414 | * Added dirty hack to prevent a Blizzard issue from causing dialog errors to pop up.
415 |
416 | #### 12.10
417 | * Added option to disable the usage of guild funds for repairs.
418 |
419 | #### 12.9
420 | * Hotfix.
421 |
422 | #### 12.8
423 | * Updated for Siege of Ogrimmar.
424 |
425 | #### 12.7
426 | * Updated Unfit-1.0.
427 |
428 | #### 12.6
429 | * Now translated for Korean clients! ^^(by 강남쌍칼)^^
430 |
431 | #### 12.5
432 | * Updated for patch 5.3: Escalation!
433 | * Now the merchant button properly highlights whenever there is junk, not only when it has a value.
434 | * Improvements to the merchant tooltip.
435 |
436 | #### 12.4
437 | * Updated for patch 5.2: The Thunder King.
438 | * Pet stones are now considered not junk by default, even with the "Low Consumables" option enabled.
439 |
440 | #### 12.3
441 | * Now fully translated to German! Translations by Noxxana.
442 |
443 | #### 12.2
444 | * Low level consumables and equipment without sell value will no longer be considered junk by default, even with the corresponding options enabled.
445 |
446 | #### 12.1
447 | * Scrap now accepts items with no sell value in the list. These will be deleted when trying to sell the scrap to the vendor.
448 | * Now properly detects wether an upgradable item is soulbound.
449 | * Now displays a message in the money log when equipment is automatically repaired.
450 | * Fixed issue possibly preventing players with unlimited permissions to use the guild bank for repairs.
451 |
452 | ### 12
453 | * Scrap can now optionally repair all your armor when you visit a merchant! You can enable the new feature at the interface options.
454 | * Battle pet bandages are no longer scrap by default.
455 |
456 | #### 11.6
457 | * Updated for patch 5.1: Landfall!
458 |
459 | #### 11.5
460 | * Scrap is now fully localized in french! (by Noaah)
461 |
462 | #### 11.4
463 | * Reduced the minimum required level for Scrap to sell gray-quality equipment.
464 |
465 | #### 11.3
466 | * Fixed bug causing merchant buttons to go out of place when guild withdraws are allowed.
467 |
468 | #### 11.2
469 | * Fixed bug causing Scrap Visualizer to display incorrectly.
470 |
471 | #### 11.1
472 | * Tagging as release.
473 |
474 | #### 11.0 (beta)
475 | * Added new options category: "Visuals". This includes options to configure Scrap Spotlight, Scrap Bagnon or Combuctor Scrap, which are now able to display visual icons besides glowing borders.
476 | * Fixed minor bug in the options window.
477 |
478 | #### 10.11
479 | * Updated and tested for Mists of Pandaria.
480 | * Added monk class filters.
481 |
482 | #### 10.10
483 | * Set guild cloaks and standards to "useful" by default
484 | * Now tabards, shirts and fishing poles are never junk by default
485 |
486 | #### 10.9
487 | * Changed the tutorials positions
488 | * Intelligent learning bug fixing
489 |
490 | #### 10.8
491 | * Tagging as release
492 |
493 | #### 10.7 (beta)
494 | * Started to build a list of items that are by default junk or useful, disregarding the item's characteristics.
495 |
496 | #### 10.6 (beta)
497 | * Largely improved reliability of toggle junk
498 | * Filters now properly react to users with equipment sets disabled
499 | * Bugfixes
500 |
501 | #### 10.5 (beta)
502 | * The scrap button tooltip now displays how many items of each quality will be sold
503 | * Junk/Useful preferences are now recorded permanently even when the user resets an item to the default state
504 |
505 | #### 10.4 (beta)
506 | * Another hotfix
507 |
508 | #### 10.3 (beta)
509 | * Small hotfix
510 |
511 | #### 10.2 (beta)
512 | * All behaviour settings are now global, filter settings are saved per character
513 | * Now truly fixed the bug causing "auto sell" and "safe mode" settings to reset on login
514 | * Now the tutorials are only fired when at the merchant
515 |
516 | #### 10.1 (beta)
517 | * Fixed a bug causing "auto sell" and "safe mode" settings to reset on login
518 |
519 | ### 10 (beta)
520 | * Intelligent Learning: this new feature now allows Scrap to learn from your actions and improve its filters.
521 | * Introducing a brand new algorithm to compare items levels and value. This will allow for much more accurate filtering results independently of level.
522 | * Now uses Poncho-1.0, Sushi-3.0 and CustomTutorials-2.1 to generate its options and tutorials. This should provide greater performance and stability.
523 | * The options panel, drop-down, tutorials and default settings have been completely redesigned. Therefore, the tutorials will be displayed again, even for old time users.
524 | * Fixed a bug causing items in the bank container to not be scanned properly.
525 | * Generally improved Scrap filtering performance.
526 |
527 | ### 9
528 | * Introducing Scrap Spotligh: this new optional feature will make your Scrap to glow in the default UI bags
529 | * Updated for patch 4.3
530 | * More on Portuguese translations (thanks to myself)
531 | * Reduced download size by about 70%
532 | * Internal changes
533 | * Bug fixes
534 |
535 | #### 8.6
536 | * New attempt to fix the Baggins bank bug
537 | * Centralized localization
538 |
539 | #### 8.5
540 | * Fix of bug affecting some Baggins users
541 |
542 | #### 8.4
543 | * Added russian translations for the advanced options and updated the spanish ones. Thank you LordKuper and Mitrax, respectively.
544 |
545 | #### 8.3
546 | * Added new french and german translations for the advanced options. Thank you Noeudtribal and blizzy78, respectively.
547 |
548 | #### 8.2
549 | * Corrected the tutorials position on the screen.
550 |
551 | #### 8.1
552 | * Added new translations for Scrap Visualizer. Once more, thank you to everyone who has helped to translate Scrap recently, as Resdulac, Althathwe and yunrong.
553 | * The advanced options are ready to be translated. If you whish to help, feel free to use our [[http://wow.curseforge.com/addons/scrap/localization/|localization tool]].
554 | * Removed Scrap Updater
555 |
556 | ### 8.0
557 | * Items that are part of user-defined equipment sets are no longer considered junk by default
558 | * Items which can be sold back for a full refund to the merchant are no longer considered junk by default
559 | * Fixed a bug causing temporarly tradeable items to be considered junk in some situations
560 | * Updated for patch 4.2
561 |
562 | #### 7.6
563 | * Fixed keybinding bugs
564 |
565 | #### 7.5
566 | * Added two new keybindings: one that sell all the junk (if at a merchant), and another that adds or removes any item you're hovering with your mouse cursor to the junk list
567 | * Reduced download size by 20%
568 |
569 | #### 7.4
570 | * No longer considers items with no sell value junk when a "Sell Low Level" option is enabled
571 | * Minor change to prevent Scrap from not loading properly due to a possible bug
572 | * Updated Scrap Updater accordingly
573 | * Advanced options improvements
574 | * //Version 7.3 has been accidentally deleted from the records//
575 |
576 | #### 7.3
577 | * Fixed a small bug causing Unusable items to not be considered junk by default and probably other situations as well
578 |
579 | #### 7.2
580 | * Grammatical bugfixes
581 | * Chat messages bugfix
582 | * Other minor bugfixes
583 |
584 | #### 7.1
585 | * Introducing the new **Advanced Options Panel**. Acessible from the //Interface Options// and from the //Scrap button's// right-click dropdown as well.
586 | * Made more clear that sell low equip/consumables will sell **any** low level item
587 | * Pawn Scrap works with this version
588 | * Added new **Safe Mode** option
589 |
590 | ### 7
591 | * Uses a new, much more reliable and faster junk list caching system, designed for tomorrow's needs
592 | * Faster detection and filtering of junk items
593 |
594 | * Low level //gray// equipement is now only not considered junk for low level characters
595 | * Altough Pawn Scrap is an experimental feature too, it does not work with this version yet
596 | * //Sell Low Equip// is available in this version
597 | ** Now also works for enchanters
598 |
599 | #### 6.4
600 | * Due to disturbing occurrences, disabled **temporarily** the "Sell Low Equip" option. Please keep in mind that this feature **is still experimetal**.
601 | * As a reminder, Pawn Scrap is also an **experimental feature**.
602 |
603 | #### 6.3
604 | * "Sell Low Equip" no longer considers fishing poles junk on all localization
605 | * Pawn Scrap no longer considers fishing rods, tabards, trinkets and shirts junk
606 |
607 | #### 6.2
608 | * Now uses library "Unfit-1.0" for detecting unusable equipment. This library was created for an easier data sharing between Scrap and other projects I'm working on, such as Bagnon and Combuctor.
609 |
610 | #### 6.1
611 | * Updated for 4.1
612 | * Now supports Bagnon Scrap
613 |
614 | ### 6
615 | * Fixed incorrect proficiences
616 | * Fixed a bug preventing "Sell Low Level Equipment" from actually working
617 | * Several improvements to the low level equipment detection filters
618 | * Fixed a bug causing anomalies in some clients when playing female characters ^^(this time is for real)^^
619 |
620 | #### 5.9
621 | * Made the unusable souldbound equipment features to work on any client language
622 | * Fixed a bug causing class-specific items to be considered junk in some locales for female characters
623 | * "Sell low consumables" should no longer sell items with no item level
624 |
625 | #### 5.8
626 | * Forgot to actually enable the new features announced last version: they are now listed in the options dropdown.
627 | * //Pawn Scrap// support was enabled too.
628 | * First steps to make the built-in feature "consider unusable soulbound equipment for non-enchanters junk by default" to work on all clients
629 |
630 | #### 5.7
631 | * Added new options: "Sell Low Level Equipment" and "Sell Low Level Consumables". These options are still experimental, if you find an useful item considered junk, please let us know. Feedback and suggestions are highly welcome.
632 | * Added support for //Pawn Scrap//.
633 |
634 | #### 5.6
635 | * Made the Visualizer completely load on demand
636 | * Finnaly added a description for the Visualizer
637 | * New features are on testing stage and should be released very soon
638 |
639 | #### 5.5
640 | * Items can now be added/removed from the junk list by clicking on the item in your bags and then on the button ^^(just as you can move items in your bags too)^^
641 | * Added a "Add to Junk List" and "Remove From Junk List" buttons to the Visualizer
642 | * Made a more convenient API for toggling the items in the junk list
643 | * Added a nice Visualizer picture to the site
644 |
645 | #### 5.4
646 | * Made Visualizer ready for localization
647 | * Updated a Traditional Chinese translations
648 | * Small tweak on the Visualizer
649 |
650 | #### 5.3
651 | * Added "Junk" and "Not Junk" tabs to the Visualizer window, so now you can also see which items you removed from the junk list
652 | * Now, when the item list is not long enough to show the scrolling bar, the lists resizes to fill that space
653 |
654 | #### 5.2
655 | * Updated for the last //CustomTutorials// version
656 | * Fixed a bug causing errors when printing chat messages in some situations
657 | * Fixed the weirdest bug ever reported
658 | * Small internal tweaks
659 |
660 | #### 5.1
661 | * Fixed a bug causing the "money pile" to be clickable when at the Visualizer tab
662 | * Fixed a bug causing the Visualizer icon to not show properly in some merchants
663 | * The Visualizer scrolling size is now more accurate
664 |
665 | ### 5
666 | * I'm glad to present you __Scrap Visualizer__, a long waited and asked feature!
667 | ** Displays your junk list in a separate tab on the merchant window
668 | ** Almost complete, but expect improvements and bug fixes in the next few weeks
669 | ** You still can only see which items you added to the list, but you will be able to see which ones you removed in future versions
670 | ** Feel free to provide suggestions ^^(keep them coming)^^
671 |
672 | #### 4.10
673 | * Minor tweaks
674 | * Updated CustomTutorials-2.0 //(otherwise, could crash with [[http://wow.curse.com/downloads/wow-addons/details/cornucopia.aspx|Cornucopia]])//
675 | * Removed many unnecessary library files (making download size a bit smaller)
676 |
677 | #### 4.9
678 | * Starting level poor equipment is no longer considered Scrap by default (as it can be useful at those levels)
679 |
680 | #### 4.8
681 | * Small tweak to the configuration dropdown
682 | * Updated CustomTutorials-2.0
683 |
684 | #### 4.7
685 | * Updated french translations (thank you //mius64//)
686 |
687 | #### 4.6
688 | * Minor tweaks
689 |
690 | #### 4.5
691 | * Fixed [[http://wow.curseforge.com/addons/scrap/tickets/19-cant-add-items-to-junk-list|recent bug]] with Scrap Launcher
692 |
693 | #### 4.4
694 | * Slight tutorial text improvement
695 | * Updated addon/modules descriptions
696 |
697 | #### 4.3
698 | * Auto sell was bugging for some users, should be fixed now. If not, let me know** which addons are you using**.
699 |
700 | #### 4.2
701 | * Tutorials are back: cheer up for CustomTutorials-2.0
702 |
703 | #### 4.1
704 | * Improved the options menu look
705 | * Disabled tutorials for now
706 | * Hopefully made a bug fix
707 | * Added compatibility to Scrap's new plugin: Scrap Cleaner!
708 |
709 | ### 4
710 | * Updated for 4.0.1
711 | * Scrap will no longer consider soulbound armor which your character will never use junk if you are an enchanter
712 | * Tutorials are not working yet
713 |
714 | #### 3.1
715 | * Scrap will now consider soul-bound equipment items your character can't equip junk by default //(careful enchanters!)//
716 | * Added Chinese and Spanish translations //(thanks to thwa and yllelder, respectively)//
717 | * Other translation updates
718 |
719 | ### 3
720 | * Tested on 3.3.3 patch
721 | * Added German and updated Russian translations //(thanks to ckaotik and RustamIrzaev, respectively)//
722 |
723 | #### 2.2
724 | * Added some French translations //(thanks to laumacwow)//
725 |
726 | #### 2.1
727 | * Moved the tutorials to a more convenient position on the screen
728 | * Added Russian translation //(thanks to p4tv)//
729 |
730 | ### 2
731 | * Went back to the old options dropdown. Without the junk lists option, the window does not make much sense.
732 | * Added new "blizzard-style" tutorials. Stop pressing F3!
733 | * Small code changes to allow compatibility with Scrap Launcher
734 |
735 | #### 1.2
736 | * Fixed a bug breaking SpamSentry
737 | * Fixed a bug causing lists to not be saved in some situations
738 | * Permanently deleted the old profile data
739 |
740 | #### 1.1
741 | * Fixed a bug breaking Combuctor_Scrap and Baggins_Scrap
742 |
743 | ### 1
744 | * New custom icon
745 | * Junk lists are now saved per-character (old global profiles will be kept for now, so this change is reversible). If you wish to have profiles, use Reflux.
746 | * New option window:
747 | ** Replaces the old options drop-down
748 | ** Was built using a new library (Sushi-2.0), so it may be unstable. Feedback is highly welcome
749 | ** As the junk lists are saved per-character, most of the window's space is empty. Ideas for new options are welcome.
750 | * Now items with no sell value can be added to the junk lists
751 | * No longer beta
--------------------------------------------------------------------------------
/Description.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Scrap sells all your junk when you visit a merchant, but not just grays.
10 |
11 |
It comes with multiple (optional) intelligent junk filters, and can even memorize which items you normally sell. More importantly, it is designed to be very easy to configure which items to sell and tags junk items in the inventory accordingly.
12 | It can also automatically repair your equipment.
13 | Finally, a wide assortment of plugins are available that add extra functionality, such as support for Bagnon, ElvUI and DataBroker, or an automatic inventory cleaner.
14 |
15 |
16 |
Now you inventory can breathe.
17 |
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | [](https://www.curseforge.com/wow/addons/pettracker)
4 | [](https://www.patreon.com/jaliborc)
5 | [](https://www.paypal.me/jaliborc)
6 | [](https://bit.ly/discord-jaliborc)
7 |
8 | # Scrap :moneybag:
9 | Scrap sells all your junk when you visit a merchant, but not just grays.
10 |
11 | It comes with multiple (optional) intelligent junk filters, and can even memorize which items you normally sell. More importantly, it is designed to be very easy to configure which items to sell and tags junk items in the inventory accordingly.
12 | It can also automatically repair your equipment.
13 | Finally, a wide assortment of plugins are available that add extra functionality, such as support for [Bagnon](https://www.curseforge.com/wow/addons/bagnon-scrap), [ElvUI](https://www.curseforge.com/wow/addons/scrap-elvui) [DataBroker](https://www.curseforge.com/wow/addons/scrap-broker), or an automatic [inventory cleaner](https://www.curseforge.com/wow/addons/scrap-cleaner).
14 |
15 | 
--------------------------------------------------------------------------------
/Scrap-Cata.toc:
--------------------------------------------------------------------------------
1 | ## Title: |TInterface/Addons/Scrap/art/scrap-small:16:16|t Scrap
2 | ## Notes: Sells all your junk at the merchant.|n|cffbbbbbbBy João Cardoso|r|n|n|TInterface/Addons/Scrap/art/patreon:12:12|t |cff82c5ffpatreon.com/jaliborc|r|n|TInterface/Addons/Scrap/art/paypal:12:12|t |cff82c5ffpaypal.me/jaliborc|r|n|TInterface/Addons/Scrap/art/discord:12:12:0:-2|t |cff82c5ffbit.ly/discord-jaliborc|r
3 | ## Author: Jaliborc (João Cardoso)
4 | ## X-License: All Rights Reserved
5 | ## Category: Bags & Inventory
6 |
7 | ## OptionalDeps: BagBrother, WoWUnit
8 | ## SavedVariablesPerCharacter: Scrap_CharSets
9 | ## SavedVariables: Scrap_Sets
10 | ## Interface: 40402
11 | ## Version: 11.1.5
12 |
13 | addons\main\main.xml
--------------------------------------------------------------------------------
/Scrap-Mainline.toc:
--------------------------------------------------------------------------------
1 | ## Title: Scrap
2 | ## IconTexture: Interface/Addons/Scrap/art/scrap-small
3 | ## Notes: Sells all your junk at the merchant.|n|cffbbbbbbBy João Cardoso|r|n|n|TInterface/Addons/Scrap/art/patreon:12:12|t |cff82c5ffpatreon.com/jaliborc|r|n|TInterface/Addons/Scrap/art/paypal:12:12|t |cff82c5ffpaypal.me/jaliborc|r|n|TInterface/Addons/Scrap/art/discord:12:12:0:-2|t |cff82c5ffbit.ly/discord-jaliborc|r
4 | ## Author: Jaliborc (João Cardoso)
5 | ## X-License: All Rights Reserved
6 | ## Category: Bags & Inventory
7 |
8 | ## OptionalDeps: BagBrother, WoWUnit
9 | ## SavedVariablesPerCharacter: Scrap_CharSets
10 | ## SavedVariables: Scrap_Sets
11 | ## Interface: 110105
12 | ## Version: 11.1.5
13 |
14 | addons\main\main.xml
--------------------------------------------------------------------------------
/Scrap-TBC.toc:
--------------------------------------------------------------------------------
1 | ## Title: |TInterface/Addons/Scrap/art/scrap-small:16:16|t Scrap
2 | ## Notes: Sells all your junk at the merchant.|n|cffbbbbbbBy João Cardoso|r|n|n|TInterface/Addons/Scrap/art/patreon:12:12|t |cff82c5ffpatreon.com/jaliborc|r|n|TInterface/Addons/Scrap/art/paypal:12:12|t |cff82c5ffpaypal.me/jaliborc|r|n|TInterface/Addons/Scrap/art/discord:12:12:0:-2|t |cff82c5ffbit.ly/discord-jaliborc|r
3 | ## Author: Jaliborc (João Cardoso)
4 | ## X-License: All Rights Reserved
5 | ## Category: Bags & Inventory
6 |
7 | ## OptionalDeps: BagBrother, WoWUnit
8 | ## SavedVariablesPerCharacter: Scrap_CharSets
9 | ## SavedVariables: Scrap_Sets
10 | ## Interface: 20504
11 | ## Version: 11.1.5
12 |
13 | addons\main\main.xml
--------------------------------------------------------------------------------
/Scrap-Vanilla.toc:
--------------------------------------------------------------------------------
1 | ## Title: |TInterface/Addons/Scrap/art/scrap-small:16:16|t Scrap
2 | ## Notes: Sells all your junk at the merchant.|n|cffbbbbbbBy João Cardoso|r|n|n|TInterface/Addons/Scrap/art/patreon:12:12|t |cff82c5ffpatreon.com/jaliborc|r|n|TInterface/Addons/Scrap/art/paypal:12:12|t |cff82c5ffpaypal.me/jaliborc|r|n|TInterface/Addons/Scrap/art/discord:12:12:0:-2|t |cff82c5ffbit.ly/discord-jaliborc|r
3 | ## Author: Jaliborc (João Cardoso)
4 | ## X-License: All Rights Reserved
5 | ## Category: Bags & Inventory
6 |
7 | ## OptionalDeps: BagBrother, WoWUnit
8 | ## SavedVariablesPerCharacter: Scrap_CharSets
9 | ## SavedVariables: Scrap_Sets
10 | ## Interface: 11507
11 | ## Version: 11.1.5
12 |
13 | addons\main\main.xml
--------------------------------------------------------------------------------
/Scrap-Wrath.toc:
--------------------------------------------------------------------------------
1 | ## Title: |TInterface/Addons/Scrap/art/scrap-small:16:16|t Scrap
2 | ## Notes: Sells all your junk at the merchant.|n|cffbbbbbbBy João Cardoso|r|n|n|TInterface/Addons/Scrap/art/patreon:12:12|t |cff82c5ffpatreon.com/jaliborc|r|n|TInterface/Addons/Scrap/art/paypal:12:12|t |cff82c5ffpaypal.me/jaliborc|r|n|TInterface/Addons/Scrap/art/discord:12:12:0:-2|t |cff82c5ffbit.ly/discord-jaliborc|r
3 | ## Author: Jaliborc (João Cardoso)
4 | ## X-License: All Rights Reserved
5 | ## Category: Bags & Inventory
6 |
7 | ## OptionalDeps: BagBrother, WoWUnit
8 | ## SavedVariablesPerCharacter: Scrap_CharSets
9 | ## SavedVariables: Scrap_Sets
10 | ## Interface: 30403
11 | ## Version: 11.1.5
12 |
13 | addons\main\main.xml
--------------------------------------------------------------------------------
/addons/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/addons/config/options.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local Sushi = LibStub('Sushi-3.2')
7 | local Options = Scrap:NewModule('Options', Sushi.OptionsGroup:NewClass())
8 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
9 |
10 | local PATRONS = {{title='Jenkins',people={'Gnare','Debora S Ogormanw','Johnny Rabbit','Shaun Potts'}},{title='Ambassador',people={'Julia F','Lolari ','Rafael Lins','Ptsdthegamer','Adam Mann','Bc Spear','Jury ','Swallow@area52','Peter Hollaubek','Michael Kinasz','Brian Joaquin','Lisa','M Prieto','Ronald Platz','Airdrigh','James G'}}} -- generated patron list
11 | local PATREON_ICON = ' |TInterface/Addons/Scrap/art/patreon:12:12|t'
12 | local HELP_ICON = ' |T516770:13:13:0:0:64:64:14:50:14:50|t'
13 | local FOOTER = 'Copyright 2012-2025 João Cardoso'
14 |
15 |
16 | --[[ Startup ]]--
17 |
18 | function Options:OnLoad()
19 | self.Main = self('|Tinterface/addons/scrap/art/scrap-small:16:16:2:0|t Scrap')
20 | :SetSubtitle(L.GeneralDescription):SetFooter(FOOTER):SetChildren(self.OnMain)
21 | self.Filters = self(self.Main, L.JunkList .. ' ' .. CreateAtlasMarkup('poi-workorders'))
22 | :SetSubtitle(L.ListDescription):SetFooter(FOOTER):SetChildren(self.OnFilters)
23 |
24 | self.Help = Sushi.OptionsGroup(self.Main, HELP_LABEL .. HELP_ICON)
25 | :SetSubtitle(L.HelpDescription):SetFooter(FOOTER):SetChildren(self.OnHelp)
26 | self.Credits = Sushi.OptionsGroup(self.Main, 'Patrons' .. PATREON_ICON)
27 | :SetSubtitle(L.PatronsDescription):SetFooter(FOOTER):SetOrientation('HORIZONTAL'):SetChildren(self.OnCredits)
28 | end
29 |
30 |
31 | --[[ Panels ]]--
32 |
33 | function Options:OnMain()
34 | self:Add('RedButton', SETTINGS_KEYBINDINGS_LABEL):SetKeys{top = -5, bottom = 15}:SetCall('OnClick', function()
35 | SettingsPanel:SelectCategory(SettingsPanel.keybindingsCategory)
36 | end)
37 |
38 | self:AddHeader(L.Behaviour)
39 | self:AddCheck {set = 'sell', text = 'AutoSell'}
40 | self:AddCheck {set = 'repair', text = 'AutoRepair'}
41 | self:AddCheck {set = 'guild', text = 'GuildRepair', parent = 'repair'}
42 | self:AddCheck {set = 'safe', text = 'SafeMode'}
43 | self:AddCheck {set = 'destroy', text = 'DestroyWorthless'}
44 |
45 | self:AddHeader(L.Visuals)
46 | self:AddCheck {set = 'icons', text = 'Icons'}
47 | self:AddCheck {set = 'glow', text = 'Glow'}
48 |
49 | if LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_CLASSIC then
50 | self:AddCheck {set = 'prices', text = 'SellPrices'}
51 | end
52 | end
53 |
54 | function Options:OnFilters()
55 | self:Add('Check', L.CharSpecific):SetChecked(not Scrap.charsets.share):SetCall('OnInput', function(share, v)
56 | Scrap.charsets.share = not v
57 | Scrap:SendSignal('SETS_CHANGED')
58 | end)
59 | self:AddCheck {set = 'learn', text = 'Learning'}
60 |
61 | self:AddHeader(CALENDAR_FILTERS)
62 | self:AddCheck {set = 'unusable', text = 'Unusable', char = true}
63 | self:AddCheck {set = 'equip', text = 'LowEquip', char = true}
64 | self:AddTreshold ('equip')
65 | self:AddCheck {set = 'consumable', text = 'LowConsumable', char = true}
66 | self:AddTreshold ('consumable')
67 | end
68 |
69 | function Options:OnHelp()
70 | for i = 1, #L.FAQ, 2 do
71 | self:Add('ExpandHeader', L.FAQ[i], GameFontHighlightSmall):SetExpanded(self[i]):SetCall('OnClick', function() self[i] = not self[i] end)
72 |
73 | if self[i] then
74 | local answer = self:Add('Header', L.FAQ[i+1], GameFontHighlightSmall)
75 | answer.left, answer.right, answer.bottom = 16, 16, 16
76 | end
77 | end
78 |
79 | self:Add('RedButton', 'Show Tutorial'):SetWidth(200):SetCall('OnClick', function() Scrap.Tutorials:Restart() end).top = 10
80 | self:Add('RedButton', 'Ask Community'):SetWidth(200):SetCall('OnClick', function()
81 | Sushi.Popup:External('bit.ly/discord-jaliborc')
82 | SettingsPanel:Close(true)
83 | end)
84 | end
85 |
86 | function Options:OnCredits()
87 | for i, rank in ipairs(PATRONS) do
88 | if rank.people then
89 | self:Add('Header', rank.title, GameFontHighlight, true).top = i > 1 and 20 or 0
90 |
91 | for j, name in ipairs(rank.people) do
92 | self:Add('Header', name, i > 1 and GameFontHighlight or GameFontHighlightLarge):SetWidth(180)
93 | end
94 | end
95 | end
96 |
97 | self:AddBreak()
98 | self:Add('RedButton', 'Join Us'):SetWidth(200):SetCall('OnClick', function()
99 | Sushi.Popup:External('patreon.com/jaliborc')
100 | SettingsPanel:Close(true)
101 | end).top = 20
102 | end
103 |
104 |
105 | --[[ API ]]--
106 |
107 | function Options:AddHeader(text)
108 | self:Add('Header', text, GameFontHighlight, true)
109 | end
110 |
111 | function Options:AddCheck(info)
112 | local sets = info.char and Scrap.charsets or Scrap.sets
113 | local b = self:Add('Check', L[info.text])
114 | b.left = b.left + (info.parent and 10 or 0)
115 | b:SetEnabled(not info.parent or sets[info.parent])
116 | b:SetTip(L[info.text], L[info.text .. 'Tip'])
117 | b:SetChecked(sets[info.set])
118 | b:SetSmall(info.parent)
119 | b:SetCall('OnInput', function(b, v)
120 | sets[info.set] = v
121 | Scrap:SendSignal('LIST_CHANGED')
122 | end)
123 | end
124 |
125 | function Options:AddTreshold(set)
126 | if Scrap.charsets[set] then
127 | local key = set .. 'Lvl'
128 | local Set = set:gsub('^%l', strupper)
129 | local s = self:Add('Slider', L.iLevelTreshold, Scrap.charsets[key] * 100, 0,100,1, '%s%')
130 | s:SetSmall(true):SetKeys {top = 5, left = 40, bottom = 15}
131 | s:SetTip(L['Low' .. Set], L[Set .. 'LevelTip'])
132 | s:SetCall('OnInput', function(s, v)
133 | Scrap.charsets[key] = v / 100
134 | Scrap:SendSignal('LIST_CHANGED')
135 | end)
136 | end
137 | end
--------------------------------------------------------------------------------
/addons/config/tutorials.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local Tutorials = Scrap:NewModule('Tutorials', 'CustomTutorials-2.1')
7 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
8 |
9 | function Tutorials:OnLoad()
10 | self:Register()
11 | self:TriggerTutorial(1)
12 | end
13 |
14 | function Tutorials:Register()
15 | self:RegisterTutorials {
16 | savedvariable = Scrap.sets,
17 | key = 'tutorial',
18 | title = 'Scrap',
19 |
20 | {
21 | text = L.Tutorial_Welcome,
22 | image = 'Interface/Addons/Scrap/art/scrap-big',
23 | imageW = 128, imageH = 128,
24 | point = 'CENTER',
25 | },
26 | {
27 | text = L.Tutorial_Button,
28 | image = 'Interface/Addons/Scrap/art/tutorial-button',
29 | point = 'TOPLEFT', relPoint = 'TOPRIGHT',
30 | shineTop = 5, shineBottom = -5,
31 | shineRight = 5, shineLeft = -5,
32 | shine = Scrap.Merchant,
33 | anchor = MerchantFrame,
34 | y = -16,
35 | },
36 | {
37 | text = L.Tutorial_Drag,
38 | image = 'Interface/Addons/Scrap/art/tutorial-drag',
39 | point = 'BOTTOMRIGHT', relPoint = 'BOTTOMRIGHT',
40 | anchor = MainMenuBarBackpackButton,
41 | shine = MainMenuBarBackpackButton,
42 | shineTop = 6, shineBottom = -6,
43 | shineRight = 6, shineLeft = -6,
44 | x = -150, y = 45,
45 | },
46 | {
47 | text = L.Tutorial_Visualizer,
48 | image = 'Interface/Addons/Scrap/art/tutorial-visualizer',
49 | shineRight = -2, shineLeft = 2, shineTop = 6,
50 | point = 'TOPLEFT', relPoint = 'TOPRIGHT',
51 | shine = Scrap.Visualizer and Scrap.Visualizer.ParentTab,
52 | anchor = MerchantFrame,
53 | y = -16,
54 | },
55 | {
56 | text = L.Tutorial_Bye,
57 | image = 'Interface/Addons/Scrap/art/scrap-big',
58 | imageW = 128, imageH = 128,
59 | point = 'CENTER',
60 | }
61 | }
62 | end
63 |
64 | function Tutorials:Start()
65 | self:Register()
66 | self:TriggerTutorial(5)
67 | end
68 |
69 | function Tutorials:Restart()
70 | self:Register()
71 | self:ResetTutorials()
72 | self:TriggerTutorial(1)
73 | end
--------------------------------------------------------------------------------
/addons/main/defaults.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | Scrap.Defaults = {list = {}, sell = true, repair = true, safe = true, destroy = true, glow = true, icons = true, prices=true}
7 | Scrap.CharDefaults = {list = {}, auto = {}, equipLvl = 0.15, consumableLvl = 0.15}
8 | Scrap.BaseList = {
9 | [90561] = false,
10 | [12709] = false,
11 | [2459] = false,
12 | [29532] = false,
13 | [29530] = false,
14 | [39878] = false,
15 | [40586] = false,
16 | [48954] = false,
17 | [48955] = false,
18 | [48956] = false,
19 | [48957] = false,
20 | [45688] = false,
21 | [45689] = false,
22 | [45690] = false,
23 | [45691] = false,
24 | [44934] = false,
25 | [44935] = false,
26 | [51560] = false,
27 | [51558] = false,
28 | [51559] = false,
29 | [51557] = false,
30 | [40585] = false,
31 | [43157] = false,
32 | [63206] = false,
33 | [63207] = false,
34 | [65274] = false,
35 | [63353] = false,
36 | [64402] = false,
37 | [64401] = false,
38 | [64400] = false,
39 | [63352] = false,
40 | [86143] = false,
41 | [92742] = false,
42 | [92741] = false,
43 | [92665] = false,
44 | [92675] = false,
45 | [92676] = false,
46 | [92677] = false,
47 | [92678] = false,
48 | [92679] = false,
49 | [92680] = false,
50 | [92681] = false,
51 | [92682] = false,
52 | [92683] = false,
53 | [33820] = false,
54 | [19969] = false,
55 | [89124] = false,
56 | [114131] = false,
57 | [114808] = false,
58 | [114129] = false,
59 | [114745] = false,
60 | [114128] = false,
61 | [120301] = false,
62 | [120302] = false,
63 | [114002] = false,
64 | [156631] = false,
65 | [24368] = false,
66 | [40772] = false,
67 | [114943] = false,
68 | [109253] = false,
69 | [67410] = false,
70 | [11406] = false,
71 | [11944] = false,
72 | [25402] = false,
73 | [3300] = false,
74 | [3670] = false,
75 | [6150] = false,
76 | [36812] = false,
77 | [62072] = false,
78 | [87216] = false,
79 | [6529] = false,
80 | [136377] = false,
81 | [160705] = false,
82 | }
--------------------------------------------------------------------------------
/addons/main/main.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local ADDON, Addon = ...
7 | local Scrap = LibStub('WildAddon-1.1'):NewAddon(ADDON, Addon, 'StaleCheck-1.0')
8 |
9 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
10 | local Search = LibStub('ItemSearch-1.3')
11 | local C = LibStub('C_Everywhere')
12 |
13 | local NUM_BAGS = NUM_TOTAL_EQUIPPED_BAG_SLOTS or NUM_BAG_SLOTS
14 | local WEAPON, ARMOR, CONSUMABLES = Enum.ItemClass.Weapon, Enum.ItemClass.Armor, Enum.ItemClass.Consumable
15 | local FISHING_POLE = Enum.ItemWeaponSubclass.Fishingpole
16 |
17 | local POOR, COMMON, UNCOMMON, RARE, EPIC = 0,1,2,3,4
18 | local ACTUAL_SLOTS = {
19 | ROBE = 'CHEST', CLOAK = 'BACK',
20 | RANGEDRIGHT = 'RANGED', THROWN = 'RANGED', RELIC = 'RANGED',
21 | WEAPONMAINHAND = 'MAINHAND', WEAPONOFFHAND = 'OFFHAND', HOLDABLE = 'OFFHAND', SHIELD = 'OFFHAND'}
22 |
23 | local SHOULDER_BREAKPOINT = LE_EXPANSION_LEVEL_CURRENT > 2 and 15 or 25
24 | local INTRO_BREAKPOINT = LE_EXPANSION_LEVEL_CURRENT > 2 and 5 or 15
25 |
26 | BINDING_NAME_SCRAP_TOGGLE = L.ToggleMousehover
27 | BINDING_NAME_SCRAP_DESTROY_ONE = L.DestroyCheapest
28 | BINDING_NAME_SCRAP_DESTROY_ALL = L.DestroyJunk
29 | BINDING_NAME_SCRAP_SELL = L.SellJunk
30 | SCRAP = 'Scrap'
31 |
32 |
33 | --[[ Startup ]]--
34 |
35 | function Scrap:OnLoad()
36 | self:OnSettings()
37 | self:RegisterSignal('SETS_CHANGED', 'OnSettings')
38 | self:RegisterEvent('MERCHANT_SHOW', function() C.AddOns.LoadAddOn('Scrap_Merchant'); self:SendSignal('MERCHANT_SHOW') end)
39 | self:CheckForUpdates(ADDON, self.sets, 'interface/addons/scrap/art/scrap-big')
40 |
41 | Scrap_Sets, Scrap_CharSets = self.sets, self.charsets
42 | if (Scrap_Sets.tutorial or 0) > 0 then
43 | SettingsPanel.CategoryList:HookScript('OnShow', function() C.AddOns.LoadAddOn('Scrap_Config') end)
44 | else
45 | C.AddOns.LoadAddOn('Scrap_Config')
46 | end
47 |
48 | if AddonCompartmentFrame then
49 | AddonCompartmentFrame:RegisterAddon {
50 | text = 'Scrap', keepShownOnClick = true, notCheckable = true,
51 | icon = 'interface/addons/scrap/art/scrap-small',
52 | func = function()
53 | if C.AddOns.LoadAddOn('Scrap_Config') then
54 | self.Options:Open()
55 | end
56 | end
57 | }
58 | end
59 | end
60 |
61 | function Scrap:OnSettings()
62 | self.sets, self.charsets = self:SetDefaults(Scrap_Sets or {}, self.Defaults), self:SetDefaults(Scrap_CharSets or {}, self.CharDefaults)
63 | self.junk = self:SetDefaults(self.charsets.share and self.sets.list or self.charsets.list, self.BaseList)
64 | self:SendSignal('LIST_CHANGED')
65 | end
66 |
67 |
68 | --[[ Public API ]]--
69 |
70 | function Scrap:IsJunk(id, ...)
71 | if id and self.junk and self.junk[id] ~= false then
72 | return self.junk[id] or (self.sets.learn and (self.charsets.auto[id] or 0) > .5) or self:IsFiltered(id, ...)
73 | end
74 | end
75 |
76 | function Scrap:ToggleJunk(id)
77 | local junk = self:IsJunk(id)
78 |
79 | self.junk[id] = not junk
80 | self:Print(format(junk and L.Removed or L.Added, select(2, C.Item.GetItemInfo(id))), 'LOOT')
81 | self:SendSignal('LIST_CHANGED', id)
82 | end
83 |
84 | function Scrap:IterateJunk()
85 | local numSlots = C.Container.GetContainerNumSlots(BACKPACK_CONTAINER)
86 | local bag, slot = BACKPACK_CONTAINER, 0
87 |
88 | return function()
89 | while true do
90 | if slot < numSlots then
91 | slot = slot + 1
92 | elseif bag < NUM_BAGS then
93 | bag, slot = bag + 1, 1
94 | numSlots = C.Container.GetContainerNumSlots(bag)
95 | else
96 | return
97 | end
98 |
99 | local id = C.Container.GetContainerItemID(bag, slot)
100 | if self:IsJunk(id, bag, slot) then
101 | return bag, slot, id
102 | end
103 | end
104 | end
105 | end
106 |
107 | function Scrap:DestroyCheapest()
108 | local best = {value = 2^128}
109 |
110 | for bag, slot in self:IterateJunk() do
111 | local _, family = C.Container.GetContainerNumFreeSlots(bag)
112 | if family == 0 then
113 | local item = C.Container.GetContainerItemInfo(bag, slot)
114 | local _,_,_,_,_,_,_, maxStack, _,_, price = C.Item.GetItemInfo(item.itemID)
115 |
116 | local value = price * (item.stackCount + sqrt(maxStack - item.stackCount) * 0.5)
117 | if value < best.value then
118 | best.bag, best.slot, best.item, best.value = bag, slot, item, value
119 | end
120 | end
121 | end
122 |
123 | if best.item then
124 | C.Container.PickupContainerItem(best.bag, best.slot)
125 | DeleteCursorItem()
126 | self:Print(L.Destroyed:format(best.item.hyperlink, best.item.stackCount), 'LOOT')
127 | end
128 | end
129 |
130 | function Scrap:DestroyJunk()
131 | LibStub('Sushi-3.2').Popup {
132 | text = L.ConfirmDelete, showAlert = true, button1 = OKAY, button2 = CANCEL,
133 | OnAccept = function()
134 | for bag, slot in self:IterateJunk() do
135 | C.Container.PickupContainerItem(bag, slot)
136 | DeleteCursorItem()
137 | end
138 | end
139 | }
140 | end
141 |
142 |
143 | --[[ Filters ]]--
144 |
145 | function Scrap:IsFiltered(id, ...)
146 | local location = self:GuessLocation(id, ...)
147 | local _, link, quality, level,_,_,_,_, slot, _, value, class, subclass, bound = C.Item.GetItemInfo(id)
148 | local level = location and C.Item.GetCurrentItemLevel(location) or level or 0
149 |
150 | if not value or value == 0 then
151 | return
152 |
153 | elseif class == ARMOR or class == WEAPON then
154 | if value and slot ~= 'INVTYPE_TABARD' and slot ~= 'INVTYPE_BODY' and subclass ~= FISHING_POLE then
155 | if self.charsets.uncollected or link and not Search:IsUncollected(id, link) then
156 | if quality == POOR then
157 | return bound ~= LE_ITEM_BIND_ON_EQUIP and ((slot ~= 'INVTYPE_SHOULDER' and level > INTRO_BREAKPOINT) or level > SHOULDER_BREAKPOINT)
158 | elseif quality >= UNCOMMON and quality <= EPIC and location and C.Item.IsBound(location) then
159 | if IsEquippableItem(id) and not Search:BelongsToSet(id) then
160 | return self:IsLowEquip(slot, level) or self.charsets.unusable and Search:IsUnusable(id)
161 | end
162 | end
163 | end
164 | end
165 |
166 | elseif quality == POOR then
167 | return bound ~= LE_ITEM_BIND_ON_EQUIP
168 | elseif class == CONSUMABLES then
169 | return self.charsets.consumable and quality < RARE and self:IsLowConsumable(level)
170 | end
171 | end
172 |
173 | function Scrap:IsLowEquip(slot, level)
174 | if self.charsets.equip and slot ~= '' then
175 | local slot1 = slot:sub(9)
176 | local slot2, double
177 |
178 | if slot1 == 'WEAPON' or slot1 == '2HWEAPON' then
179 | if slot1 == '2HWEAPON' then
180 | double = true
181 | end
182 |
183 | slot1, slot2 = 'MAINHAND', 'OFFHAND'
184 | elseif slot1 == 'FINGER' then
185 | slot1, slot2 = 'FINGER1', 'FINGER2'
186 | elseif slot1 == 'TRINKET' then
187 | slot1, slot2 = 'TRINKET1', 'TRINKET2'
188 | else
189 | slot1 = ACTUAL_SLOTS[slot1] or slot1
190 | end
191 |
192 | return self:IsBelowEquipped(slot1, level) and (not slot2 or self:IsBelowEquipped(slot2, level, double))
193 | end
194 | end
195 |
196 | function Scrap:IsBelowEquipped(slot, level, canEmpty)
197 | local item = ItemLocation:CreateFromEquipmentSlot(_G['INVSLOT_' .. slot])
198 | if C.Item.DoesItemExist(item) then
199 | return level < (C.Item.GetCurrentItemLevel(item) or 0) * self.charsets.equipLvl
200 | end
201 | return canEmpty
202 | end
203 |
204 | function Scrap:IsLowConsumable(level)
205 | return level > 1 and level < UnitLevel('player') * self.charsets.consumableLvl
206 | end
207 |
208 |
209 | --[[ Guessing ]]--
210 |
211 | function Scrap:GuessLocation(...)
212 | local bag, slot = self:GuessBagSlot(...)
213 | if bag and slot then
214 | local location = ItemLocation:CreateFromBagAndSlot(bag, slot)
215 | return C.Item.DoesItemExist(location) and location
216 | end
217 | end
218 |
219 | function Scrap:GuessBagSlot(id, bag, slot)
220 | if bag and slot then
221 | return bag, slot
222 | elseif C.Item.GetItemCount(id) > 0 then
223 | for bag = BACKPACK_CONTAINER, NUM_BAGS do
224 | for slot = 1, C.Container.GetContainerNumSlots(bag) do
225 | if id == C.Container.GetContainerItemID(bag, slot) then
226 | return bag, slot
227 | end
228 | end
229 | end
230 | end
231 | end
232 |
233 |
234 | --[[ Chat ]]--
235 |
236 | function Scrap:PrintMoney(pattern, value)
237 | self:Print(pattern:format(GetMoneyString(value, true)), 'MONEY')
238 | end
239 |
240 | function Scrap:Print(text, channel)
241 | local i = 1
242 | local frame = _G['ChatFrame' .. i]
243 | local channel = 'CHAT_MSG_' .. channel
244 |
245 | while frame do
246 | if frame:IsEventRegistered(channel) then
247 | ChatFrame_MessageEventHandler(frame, channel, text, '', nil, '')
248 | end
249 |
250 | i = i + 1
251 | frame = _G['ChatFrame' .. i]
252 | end
253 | end
254 |
--------------------------------------------------------------------------------
/addons/main/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/addons/main/pricing.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | if WOW_PROJECT_ID ~= WOW_PROJECT_CLASSIC then return end
7 | local Prices = Scrap:NewModule('TooltipPrices')
8 | local C = LibStub('C_Everywhere').Container
9 |
10 |
11 | --[[ Main ]]--
12 |
13 | function Prices:OnLoad()
14 | local meta = getmetatable(GameTooltip).__index
15 | hooksecurefunc(meta, 'SetBagItem', self.OnBag)
16 | hooksecurefunc(meta, 'SetLootItem', self.OnLoot)
17 | hooksecurefunc(meta, 'SetHyperlink', self.OnLink)
18 | hooksecurefunc(meta, 'SetQuestItem', self.OnQuest)
19 | hooksecurefunc(meta, 'SetQuestLogItem', self.OnQuest)
20 | hooksecurefunc(meta, 'SetInventoryItem', self.OnInventory)
21 | hooksecurefunc(meta, 'SetTradeSkillItem', self.OnSetTradeSkillItem)
22 | hooksecurefunc(meta, 'SetCraftItem', self.OnSetCraftItem)
23 | hooksecurefunc(meta, 'SetInboxItem', self.OnMail)
24 | end
25 |
26 | function Prices:AddLine(tip, item, count, silent)
27 | if item and Scrap.sets.prices and (not silent or not MerchantFrame:IsVisible()) and not tip:IsForbidden() then
28 | local price = select(11, GetItemInfo(item))
29 | if price and price > 0 then
30 | tip.__hasPrice = true
31 | tip:AddLine(GetCoinTextureString(price * max(1, count or 1)), 1,1,1)
32 | tip:Show()
33 | end
34 | end
35 | end
36 |
37 |
38 | --[[ Events ]]--
39 |
40 | function Prices.OnBag(tip, bag, slot)
41 | if bag and slot then
42 | local info = C.GetContainerItemInfo(bag, slot)
43 | if info then
44 | Prices:AddLine(tip, info.itemID, info.stackCount, true)
45 | end
46 | end
47 | end
48 |
49 | function Prices.OnInventory(tip, unit, slot)
50 | if unit and slot then
51 | local count = GetInventoryItemCount(unit, slot)
52 | local id = GetInventoryItemID(unit, slot)
53 | Prices:AddLine(tip, id, count)
54 | end
55 | end
56 |
57 | function Prices.OnQuest(tip, type, index)
58 | if index then
59 | local _,_, count, _,_, id = (type == 'reward' and GetQuestLogRewardInfo or GetQuestLogChoiceInfo)(index)
60 | Prices:AddLine(tip, id, count)
61 | end
62 | end
63 |
64 | function Prices.OnLoot(tip, slot)
65 | if slot then
66 | Prices:AddLine(tip, GetLootSlotLink(slot), GetLootInfo()[slot].quantity)
67 | end
68 | end
69 |
70 | function Prices.OnMail(tip, message, slot)
71 | if message and slot then
72 | local _, id, _, count = GetInboxItem(message, slot)
73 | Prices:AddLine(tip, id, count)
74 | end
75 | end
76 |
77 | function Prices.OnSetTradeSkillItem(tip, skill, index)
78 | if index then
79 | Prices:AddLine(tip, GetTradeSkillReagentItemLink(skill, index))
80 | elseif skill then
81 | Prices:AddLine(tip, GetTradeSkillItemLink(skill))
82 | end
83 | end
84 |
85 | function Prices.OnSetCraftItem(tip, ...)
86 | if ... then
87 | Prices:AddLine(tip, GetCraftReagentItemLink(...))
88 | end
89 | end
90 |
91 | function Prices.OnLink(tip, link)
92 | if link then
93 | Prices:AddLine(tip, link)
94 | end
95 | end
--------------------------------------------------------------------------------
/addons/main/spotlight.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | if Bagnon or Bagnonium then return end
7 | local Spotlight = Scrap:NewModule('Spotlight')
8 | local C = LibStub('C_Everywhere').Container
9 | local R,G,B = GetItemQualityColor(0)
10 |
11 |
12 | --[[ Display ]]--
13 |
14 | function Spotlight:OnLoad()
15 | self.Glows, self.Icons = {}, {}
16 | self:RegisterSignal('LIST_CHANGED', 'UpdateAll')
17 |
18 | local update = GenerateClosure(self.UpdateContainer, self)
19 | if ContainerFrame_Update then
20 | hooksecurefunc('ContainerFrame_Update', update)
21 | else
22 | hooksecurefunc(ContainerFrameCombinedBags, 'Update', update)
23 | self:IterateFrames('ContainerFrame', function(frame)
24 | hooksecurefunc(frame, 'Update', update)
25 | end)
26 | end
27 | end
28 |
29 | function Spotlight:UpdateAll()
30 | self:UpdateContainer(ContainerFrameCombinedBags)
31 | self:IterateFrames('ContainerFrame', GenerateClosure(self.UpdateContainer, self))
32 | end
33 |
34 | function Spotlight:UpdateContainer(frame)
35 | if frame then
36 | local update = GenerateClosure(self.UpdateButton, self, frame)
37 | if frame.Items then
38 | TableUtil.Execute(frame.Items, update)
39 | else
40 | self:IterateFrames(frame:GetName() .. 'Item', update)
41 | end
42 | end
43 | end
44 |
45 | function Spotlight:UpdateButton(frame, button)
46 | if button:IsShown() then
47 | local bag, slot = button.bagID or frame:GetID(), button:GetID()
48 | local id = C.GetContainerItemID(bag, slot)
49 | local isJunk = id and Scrap:IsJunk(id, bag, slot)
50 |
51 | local icon = (button.JunkIcon or self.Icons[button] or self:NewIcon(button))
52 | local glow = (self.Glows[button] or self:NewGlow(button))
53 |
54 | icon:SetShown(isJunk and Scrap.sets.icons)
55 | glow:SetShown(isJunk and Scrap.sets.glow)
56 |
57 | if button.IconBorder then
58 | button.IconBorder:SetAlpha(glow:IsShown() and 0 or 1)
59 | end
60 | end
61 | end
62 |
63 | function Spotlight:IterateFrames(namePrefix, call)
64 | local i = 1
65 | local frame = _G[namePrefix .. i]
66 | while frame do
67 | call(frame)
68 |
69 | i = i + 1
70 | frame = _G[namePrefix .. i]
71 | end
72 | end
73 |
74 |
75 | --[[ Construct ]]--
76 |
77 | function Spotlight:NewGlow(button)
78 | local glow = button:CreateTexture(nil, 'OVERLAY')
79 | glow:SetTexture('Interface/Buttons/UI-ActionButton-Border')
80 | glow:SetVertexColor(R,G,B, .7)
81 | glow:SetBlendMode('ADD')
82 | glow:SetPoint('CENTER')
83 | glow:SetSize(67, 67)
84 |
85 | self.Glows[button] = glow
86 | return glow
87 | end
88 |
89 | function Spotlight:NewIcon(button)
90 | local icon = button:CreateTexture(nil, 'OVERLAY')
91 | icon:SetTexture('Interface/Buttons/UI-GroupLoot-Coin-Up')
92 | icon:SetPoint('TOPLEFT', 2, -2)
93 | icon:SetSize(15, 15)
94 |
95 | self.Icons[button] = icon
96 | return icon
97 | end
98 |
--------------------------------------------------------------------------------
/addons/main/tests.lua:
--------------------------------------------------------------------------------
1 | local Tests = WoWUnit and WoWUnit('Scrap')
2 | if not Tests then return end
3 | local Replace, IsFalse = WoWUnit.Replace, WoWUnit.IsFalse
4 |
5 | local function NotJunk(id)
6 | Replace(Scrap, 'junk', Scrap.BaseList.__index)
7 | Replace(Scrap, 'charsets', {consumable = true, equip = true, auto={}})
8 |
9 | return IsFalse(Scrap:IsJunk(id))
10 | end
11 |
12 | function Tests:GrayShoulders()
13 | NotJunk(1769)
14 | end
15 |
16 | function Tests:ChefHat()
17 | NotJunk(46349)
18 | end
19 |
20 | function Tests:Fishing()
21 | NotJunk(33820)
22 | NotJunk(19969)
23 | end
24 |
25 | function Tests:VanityUsable()
26 | NotJunk(50471)
27 | end
28 |
--------------------------------------------------------------------------------
/addons/merchant/button.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local Button = Scrap:NewModule('Merchant', CreateFrame('Button', nil, MerchantBuyBackItem))
7 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
8 | local C = LibStub('C_Everywhere')
9 |
10 |
11 | --[[ Events ]]--
12 |
13 | function Button:OnLoad()
14 | local icon = self:CreateTexture()
15 | icon:SetTexture(MerchantSellAllJunkButton and 'Interface/Addons/Scrap/Art/Scrap-Big' or 'Interface/Addons/Scrap/Art/Scrap-Small')
16 | icon:SetPoint('CENTER')
17 | icon:SetSize(33, 33)
18 |
19 | self.icon, self.border = icon, self:CreateTexture(nil, 'OVERLAY')
20 | self:SetHighlightTexture('Interface/Buttons/ButtonHilight-Square', 'ADD')
21 | self:SetPushedTexture('Interface/Buttons/UI-Quickslot-Depress')
22 | self:RegisterForClicks('AnyUp')
23 | self:SetSize(37, 37)
24 |
25 | self:RegisterSignal('MERCHANT_SHOW', 'OnMerchant')
26 | self:RegisterEvent('MERCHANT_CLOSED', 'OnClose')
27 | self:SetScript('OnReceiveDrag', self.OnReceiveDrag)
28 | self:SetScript('OnEnter', self.OnEnter)
29 | self:SetScript('OnLeave', self.OnLeave)
30 | self:SetScript('OnClick', self.OnClick)
31 |
32 | if MerchantSellAllJunkButton then
33 | hooksecurefunc('MerchantFrame_UpdateMerchantInfo', function() MerchantSellAllJunkButton:Show() end)
34 | self:SetAllPoints(MerchantSellAllJunkButton)
35 | else
36 | local background = self:CreateTexture(nil, 'BACKGROUND')
37 | background:SetPoint('CENTER', -0.5, -1.2)
38 | background:SetColorTexture(0, 0, 0)
39 | background:SetSize(27, 27)
40 |
41 | self.border:SetTexture('Interface/Addons/Scrap/art/merchant-border')
42 | self.border:SetSize(35.9, 35.9)
43 | self.border:SetPoint('CENTER')
44 |
45 | hooksecurefunc('MerchantFrame_UpdateRepairButtons', function() self:UpdatePosition() end)
46 | end
47 | end
48 |
49 | function Button:OnMerchant()
50 | if Scrap.sets.sell then
51 | self:Sell()
52 | end
53 |
54 | if Scrap.sets.repair then
55 | self:Repair()
56 | end
57 |
58 | if (Scrap.sets.tutorial or 0) < 5 and C.AddOns.LoadAddOn('Scrap_Config') then
59 | Scrap.Tutorials:Start()
60 | end
61 |
62 | self:RegisterEvent('BAG_UPDATE_DELAYED', 'OnBagUpdate')
63 | self:RegisterSignal('LIST_CHANGED', 'UpdateState')
64 | self:UpdatePosition()
65 | self:UpdateState()
66 | end
67 |
68 | function Button:OnBagUpdate()
69 | if self.saleTotal then
70 | self:Sell()
71 | else
72 | self:UpdateState()
73 | end
74 | end
75 |
76 | function Button:OnClose()
77 | self:UnregisterEvent('BAG_UPDATE_DELAYED')
78 | self:UnregisterSignal('LIST_CHANGED')
79 | end
80 |
81 |
82 | --[[ Interaction ]]--
83 |
84 | function Button:OnClick(button)
85 | if GetCursorInfo() then
86 | self:OnReceiveDrag()
87 | elseif button == 'LeftButton' then
88 | self:Sell()
89 | self:UpdateTip(GameTooltip)
90 | elseif button == 'RightButton' and C.AddOns.LoadAddOn('Scrap_Config') then
91 | local drop = LibStub('Sushi-3.2').Dropdown:Toggle(self)
92 | if drop then
93 | drop:SetPoint('TOPLEFT', self, 'BOTTOMLEFT', 0, -12)
94 | drop:SetChildren {
95 | { text = 'Scrap', isTitle = 1 },
96 | {
97 | text = OPTIONS ..' |A:worldquest-icon-engineering:12:12|a',
98 | func = function() Scrap.Options:Open() end,
99 | notCheckable = 1
100 | },
101 | {
102 | text = HELP_LABEL .. ' |T516770:12:12:0:0:64:64:14:50:14:50|t',
103 | func = function() Scrap.Options.Help:Open() end,
104 | notCheckable = 1
105 | },
106 | { text = CANCEL, notCheckable = 1 }
107 | }
108 | end
109 | end
110 | end
111 |
112 | function Button:OnReceiveDrag()
113 | local type, id = GetCursorInfo()
114 | if type == 'item' then
115 | Scrap:ToggleJunk(id)
116 | ClearCursor()
117 | end
118 | end
119 |
120 | function Button:OnEnter()
121 | GameTooltip:SetOwner(self, 'ANCHOR_RIGHT')
122 | self:UpdateTip(GameTooltip)
123 | end
124 |
125 | function Button:OnLeave()
126 | if GameTooltip:IsOwned(self) then
127 | GameTooltip:Hide()
128 | end
129 | end
130 |
131 |
132 | --[[ Update ]]--
133 |
134 | function Button:UpdateState()
135 | local disabled = not self:AnyJunk()
136 | self.border:SetDesaturated(disabled)
137 | self.icon:SetDesaturated(disabled)
138 | end
139 |
140 | function Button:UpdateTip(tooltip)
141 | local type, id = GetCursorInfo()
142 | if type == 'item' then
143 | tooltip:SetText(Scrap:IsJunk(id) and L.Remove or L.Add, 1, 1, 1)
144 | else
145 | tooltip:SetText(MerchantFrame:IsShown() and L.SellJunk or L.DestroyJunk)
146 |
147 | local value, qualities = self:GetReport()
148 | for quality, count in pairs(qualities) do
149 | local r,g,b = C.Item.GetItemQualityColor(quality)
150 | tooltip:AddDoubleLine(_G['ITEM_QUALITY' .. quality .. '_DESC'], count, r,g,b, r,g,b)
151 | end
152 |
153 | tooltip:AddLine(value > 0 and GetCoinTextureString(value) or ITEM_UNSELLABLE, 1,1,1)
154 | end
155 |
156 | tooltip:Show()
157 | end
158 |
159 | if MerchantSellAllJunkButton then
160 | function Button:UpdatePosition() end
161 | else
162 | function Button:UpdatePosition()
163 | if CanMerchantRepair() then
164 | local off, scale
165 | if CanGuildBankRepair and CanGuildBankRepair() then
166 | off, scale = -3.5, 0.9
167 | MerchantRepairAllButton:SetPoint('BOTTOMRIGHT', MerchantFrame, 'BOTTOMLEFT', 120, 35)
168 | else
169 | off, scale = -1.5, 1
170 | end
171 |
172 | self:SetPoint('RIGHT', MerchantRepairItemButton, 'LEFT', off, 0)
173 | self:SetScale(scale)
174 | else
175 | self:SetPoint('RIGHT', MerchantBuyBackItem, 'LEFT', -17, 0.5)
176 | self:SetScale(1.1)
177 | end
178 |
179 | MerchantRepairText:Hide()
180 | end
181 | end
182 |
183 |
184 | --[[ Actions ]]--
185 |
186 | function Button:Sell()
187 | self.saleTotal = self.saleTotal or self:GetReport()
188 |
189 | local count = 0
190 | for bag, slot, id in Scrap:IterateJunk() do
191 | if not C.Container.GetContainerItemInfo(bag, slot).isLocked then
192 | local value = select(11, C.Item.GetItemInfo(id)) or 0
193 | if value > 0 then
194 | C.Container.UseContainerItem(bag, slot)
195 | elseif Scrap.sets.destroy then
196 | C.Container.PickupContainerItem(bag, slot)
197 | DeleteCursorItem()
198 | end
199 |
200 | if count < 11 then
201 | count = count + 1
202 | else
203 | break
204 | end
205 | end
206 | end
207 |
208 | local remaining = self:GetReport()
209 | if remaining == 0 or Scrap.sets.safe then
210 | if count > 0 then
211 | Scrap:PrintMoney(L.SoldJunk, self.saleTotal - remaining)
212 | end
213 |
214 | self.saleTotal = nil
215 | end
216 | end
217 |
218 | function Button:GetReport()
219 | local qualities = {}
220 | local total = 0
221 |
222 | for bag, slot in Scrap:IterateJunk() do
223 | local item = C.Container.GetContainerItemInfo(bag, slot)
224 | if not item.isLocked and item.quality then
225 | qualities[item.quality] = (qualities[item.quality] or 0) + item.stackCount
226 | total = total + item.stackCount * (select(11, C.Item.GetItemInfo(item.itemID)) or 0)
227 | end
228 | end
229 |
230 | return total, qualities
231 | end
232 |
233 | function Button:AnyJunk()
234 | return Scrap:IterateJunk()()
235 | end
236 |
237 | function Button:Repair()
238 | local cost = GetRepairAllCost()
239 | if cost > 0 then
240 | local guild = self:CanGuildRepair(cost)
241 | if guild or GetMoney() >= cost then
242 | Scrap:PrintMoney(L.Repaired, cost)
243 | RepairAllItems(guild)
244 | end
245 | end
246 | end
247 |
248 | function Button:CanGuildRepair(cost)
249 | if Scrap.sets.guild and CanGuildBankRepair and CanGuildBankRepair() and not GetGuildInfoText():find('%[noautorepair%]') then
250 | local money = GetGuildBankWithdrawMoney() or -1
251 | return money < 0 or money >= cost
252 | end
253 | end
254 |
--------------------------------------------------------------------------------
/addons/merchant/learning.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local Learn = Scrap:NewModule('Learning') -- dumb ml algortihm using exponential mean average
7 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
8 | local C = LibStub('C_Everywhere')
9 |
10 |
11 | --[[ Events ]] --
12 |
13 | function Learn:OnLoad()
14 | C.Container.hooksecurefunc('UseContainerItem', function(...)
15 | if self:IsActive() then
16 | self:OnItemSold(...)
17 | end
18 | end)
19 |
20 | local buyBack = BuybackItem
21 | BuybackItem = function(...)
22 | if self:IsActive() then
23 | self:OnItemRefund(...)
24 | end
25 | return buyBack(...)
26 | end
27 | end
28 |
29 | function Learn:OnItemSold(bag, slot)
30 | local id = C.Container.GetContainerItemID(bag, slot)
31 | if id and Scrap.junk[id] == nil and not Scrap:IsFiltered(id, bag, slot) then
32 | local rate = self:GetDecay(id, C.Container.GetContainerItemInfo(bag, slot).stackCount)
33 | local old = Scrap.charsets.auto[id] or 0
34 | local new = old + (1 - old) * rate
35 |
36 | Scrap.charsets.auto[id] = new
37 | if old <= .5 and new > .5 then
38 | Scrap:Print(L.Added:format(C.Container.GetContainerItemLink(bag, slot)), 'LOOT')
39 | Scrap:SendSignal('LIST_CHANGED', id)
40 | end
41 | end
42 | end
43 |
44 | function Learn:OnItemRefund(index)
45 | local link = GetBuybackItemLink(index)
46 | local id = link and tonumber(link:match('item:(%d+)'))
47 | local old = Scrap.charsets.auto[id]
48 | if old then
49 | local rate = self:GetDecay(id, select(4, GetBuybackItemInfo(index)))
50 | local new = (1 - rate * 2) * old
51 |
52 | Scrap.charsets.auto[id] = new > 0.1 and new or nil
53 | if old > .5 and new <= .5 then
54 | Scrap:Print(L.Removed:format(link), 'LOOT')
55 | Scrap:SendSignal('LIST_CHANGED', id)
56 | end
57 | end
58 | end
59 |
60 |
61 | --[[ API ]]--
62 |
63 | function Learn:IsActive()
64 | return Scrap.sets.learn and MerchantFrame:IsVisible()
65 | end
66 |
67 | function Learn:GetDecay(id, stack)
68 | local maxStack = select(8, C.Item.GetItemInfo(id))
69 | return 0.382 * stack / maxStack
70 | end
71 |
--------------------------------------------------------------------------------
/addons/merchant/merchant.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/addons/merchant/visualizer.lua:
--------------------------------------------------------------------------------
1 | --[[
2 | Copyright 2008-2025 João Cardoso
3 | All Rights Reserved
4 | --]]
5 |
6 | local Visualizer = Scrap:NewModule('Visualizer', ScrapVisualizer, 'MutexDelay-1.0')
7 | local L = LibStub('AceLocale-3.0'):GetLocale('Scrap')
8 | local C = LibStub('C_Everywhere')
9 |
10 |
11 | --[[ Startup ]]--
12 |
13 | function Visualizer:OnLoad()
14 | local title = self.TitleText or self.TitleContainer.TitleText
15 | title:SetText('Scrap')
16 |
17 | local portrait = self.portrait or self.PortraitContainer.portrait
18 | portrait:SetTexture('Interface/Addons/Scrap/Art/Scrap-Big')
19 |
20 | local backdrop = portrait:GetParent():CreateTexture(nil, 'BORDER')
21 | backdrop:SetColorTexture(0, 0, 0)
22 | backdrop:SetAllPoints(portrait)
23 |
24 | local mask = portrait:GetParent():CreateMaskTexture()
25 | mask:SetTexture('Interface/CharacterFrame/TempPortraitAlphaMask')
26 | mask:SetAllPoints(backdrop)
27 | backdrop:AddMaskTexture(mask)
28 | portrait:AddMaskTexture(mask)
29 |
30 | local tab = LibStub('SecureTabs-2.0'):Add(MerchantFrame)
31 | tab:SetText('Scrap')
32 | tab.frame = self
33 |
34 | self.numTabs, self.list, self.item = 2, {}, {}
35 | self.Tab1:SetText('|TInterface/Addons/Scrap/Art/Thumbsup:14:14:-2:2:16:16:0:16:0:16:73:255:73|t ' .. L.NotJunk)
36 | self.Tab2:SetText('|TInterface/Addons/Scrap/Art/Thumbsdown:14:14:-2:-2:16:16:0:16:0:16:255:73:73|t ' .. L.Junk)
37 | self.ForgetButton:SetText(L.Forget)
38 | self.ForgetButton:SetWidth(self.ForgetButton:GetTextWidth() + 20)
39 | self.Spinner.Anim:Play()
40 | self.ParentTab = tab
41 |
42 | self:SetScript('OnShow', self.OnShow)
43 | self:SetScript('OnHide', self.OnHide)
44 | self:UpdateButtons()
45 | self:SetTab(1)
46 | end
47 |
48 | function Visualizer:OnShow()
49 | CloseDropDownMenus()
50 | self:RegisterSignal('LIST_CHANGED', 'UpdateList')
51 | self:Delay(0, 'QueryItems')
52 |
53 | if UndoFrame then
54 | UndoFrame.Arrow:Hide()
55 | end
56 | end
57 |
58 | function Visualizer:OnHide()
59 | self:UnregisterSignal('LIST_CHANGED')
60 | wipe(self.list)
61 | end
62 |
63 |
64 | -- [[ API ]]--
65 |
66 | function Visualizer:QueryItems()
67 | local ready = true
68 | for id in pairs(Scrap.junk) do
69 | ready = ready and C.Item.GetItemInfo(id)
70 | end
71 |
72 | if not ready then
73 | self:Delay(0.2, 'QueryItems')
74 | end
75 |
76 | self.Spinner:SetShown(not ready)
77 | self:UpdateList()
78 | end
79 |
80 | function Visualizer:SetTab(i)
81 | PanelTemplates_SetTab(self, i)
82 | self:UpdateList()
83 | end
84 |
85 | function Visualizer:SetItem(id)
86 | self.item = {id = id, type = self.selectedTab}
87 | self.Scroll:update()
88 | self:UpdateButtons()
89 | end
90 |
91 | function Visualizer:ToggleItem()
92 | Scrap:ToggleJunk(self.item.id)
93 | self.item = {}
94 | end
95 |
96 | function Visualizer:ForgetItem()
97 | Scrap.junk[self.item.id] = nil
98 | Scrap:Print(format(L.Forgotten, select(2, C.Item.GetItemInfo(self.item.id))), 'LOOT')
99 | Scrap:SendSignal('LIST_CHANGED', self.item.id)
100 | self.item = {}
101 | end
102 |
103 |
104 | --[[ Update ]]--
105 |
106 | function Visualizer:UpdateList()
107 | if self:IsVisible() then
108 | self.list = {}
109 |
110 | local mode = self.selectedTab == 2
111 | for id, classification in pairs(Scrap.junk) do
112 | if classification == mode and C.Item.GetItemInfo(id) then
113 | tinsert(self.list, id)
114 | end
115 | end
116 |
117 | sort(self.list, function(A, B)
118 | if not A then
119 | return true
120 | elseif not B or A == B then
121 | return nil
122 | end
123 |
124 | local nameA, _ , qualityA, _,_,_,_,_,_,_,_, classA = C.Item.GetItemInfo(A)
125 | local nameB, _ , qualityB, _,_,_,_,_,_,_,_, classB = C.Item.GetItemInfo(B)
126 | if qualityA == qualityB then
127 | return (classA == classB and nameA < nameB) or classA > classB
128 | else
129 | return qualityA > qualityB
130 | end
131 | end)
132 |
133 | self.Scroll:update()
134 | self:UpdateButtons()
135 | end
136 | end
137 |
138 | function Visualizer.Scroll:update()
139 | local self = Visualizer
140 | if not self.Scroll.buttons then
141 | HybridScrollFrame_CreateButtons(self.Scroll, 'ScrapVisualizerButtonTemplate', 1, -2, 'TOPLEFT', 'TOPLEFT', 0, -3)
142 | end
143 |
144 | local focus = GetMouseFoci and GetMouseFoci()[1] or GetMouseFocus and GetMouseFocus()
145 | local offset = HybridScrollFrame_GetOffset(self.Scroll)
146 | local width = #self.list > 17 and 296 or 318
147 |
148 | for i, button in ipairs(self.Scroll.buttons) do
149 | local index = i + offset
150 | local id = self.list[index]
151 |
152 | if id then
153 | local name, link, quality = C.Item.GetItemInfo(id)
154 | button.item, button.link = id, link
155 | button:SetHighlightLocked(id == self.item.id)
156 | button.Text:SetTextColor(ITEM_QUALITY_COLORS[quality].color:GetRGB())
157 | button.Icon:SetTexture(GetItemIcon(id))
158 | button.Text:SetText(name)
159 | button:SetWidth(width)
160 | button:Show()
161 |
162 | if focus == button then
163 | ExecuteFrameScript(button, 'OnEnter')
164 | end
165 |
166 | if mod(index, 2) == 0 then
167 | button.Stripe:Show()
168 | else
169 | button.Stripe:Hide()
170 | end
171 | else
172 | button:Hide()
173 | end
174 | end
175 |
176 | HybridScrollFrame_Update(self.Scroll, #self.list * 20 + 2, #self.Scroll.buttons * 18)
177 | self.Scroll:SetWidth(width + 5)
178 | end
179 |
180 | function Visualizer:UpdateButtons()
181 | self.ForgetButton:SetEnabled(self.selectedTab == self.item.type)
182 | self.ToggleButton:SetEnabled(self.selectedTab == self.item.type)
183 | self.ToggleButton:SetText(self.selectedTab == 1 and L.Add or L.Remove)
184 | self.ToggleButton:SetWidth(self.ToggleButton:GetTextWidth() + 20)
185 | end
186 |
--------------------------------------------------------------------------------
/addons/merchant/visualizer.xml:
--------------------------------------------------------------------------------
1 |
3 |
74 |
75 |
113 |
114 |
115 |
116 |
121 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
158 |
168 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/art/Discord.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Discord.tga
--------------------------------------------------------------------------------
/art/Patreon.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Patreon.tga
--------------------------------------------------------------------------------
/art/Paypal.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Paypal.tga
--------------------------------------------------------------------------------
/art/Thumbsdown.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Thumbsdown.tga
--------------------------------------------------------------------------------
/art/Thumbsup.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Thumbsup.tga
--------------------------------------------------------------------------------
/art/Tutorial-Button.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Tutorial-Button.tga
--------------------------------------------------------------------------------
/art/Tutorial-Drag.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Tutorial-Drag.tga
--------------------------------------------------------------------------------
/art/Tutorial-Visualizer.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/Tutorial-Visualizer.tga
--------------------------------------------------------------------------------
/art/merchant-border.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/merchant-border.tga
--------------------------------------------------------------------------------
/art/scrap-big.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/scrap-big.tga
--------------------------------------------------------------------------------
/art/scrap-plugin.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/scrap-plugin.tga
--------------------------------------------------------------------------------
/art/scrap-small-disabled.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/scrap-small-disabled.tga
--------------------------------------------------------------------------------
/art/scrap-small.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Jaliborc/Scrap/895cf5f644d7df1402183849971ec273ca4edadb/art/scrap-small.tga
--------------------------------------------------------------------------------
/libs/AceLocale-3.0/AceLocale-3.0.lua:
--------------------------------------------------------------------------------
1 | --- **AceLocale-3.0** manages localization in addons, allowing for multiple locale to be registered with fallback to the base locale for untranslated strings.
2 | -- @class file
3 | -- @name AceLocale-3.0
4 | -- @release $Id: AceLocale-3.0.lua 1035 2011-07-09 03:20:13Z kaelten $
5 | local MAJOR,MINOR = "AceLocale-3.0", 6
6 |
7 | local AceLocale, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
8 |
9 | if not AceLocale then return end -- no upgrade needed
10 |
11 | -- Lua APIs
12 | local assert, tostring, error = assert, tostring, error
13 | local getmetatable, setmetatable, rawset, rawget = getmetatable, setmetatable, rawset, rawget
14 |
15 | -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
16 | -- List them here for Mikk's FindGlobals script
17 | -- GLOBALS: GAME_LOCALE, geterrorhandler
18 |
19 | local gameLocale = GetLocale()
20 | if gameLocale == "enGB" then
21 | gameLocale = "enUS"
22 | end
23 |
24 | AceLocale.apps = AceLocale.apps or {} -- array of ["AppName"]=localetableref
25 | AceLocale.appnames = AceLocale.appnames or {} -- array of [localetableref]="AppName"
26 |
27 | -- This metatable is used on all tables returned from GetLocale
28 | local readmeta = {
29 | __index = function(self, key) -- requesting totally unknown entries: fire off a nonbreaking error and return key
30 | rawset(self, key, key) -- only need to see the warning once, really
31 | geterrorhandler()(MAJOR..": "..tostring(AceLocale.appnames[self])..": Missing entry for '"..tostring(key).."'")
32 | return key
33 | end
34 | }
35 |
36 | -- This metatable is used on all tables returned from GetLocale if the silent flag is true, it does not issue a warning on unknown keys
37 | local readmetasilent = {
38 | __index = function(self, key) -- requesting totally unknown entries: return key
39 | rawset(self, key, key) -- only need to invoke this function once
40 | return key
41 | end
42 | }
43 |
44 | -- Remember the locale table being registered right now (it gets set by :NewLocale())
45 | -- NOTE: Do never try to register 2 locale tables at once and mix their definition.
46 | local registering
47 |
48 | -- local assert false function
49 | local assertfalse = function() assert(false) end
50 |
51 | -- This metatable proxy is used when registering nondefault locales
52 | local writeproxy = setmetatable({}, {
53 | __newindex = function(self, key, value)
54 | rawset(registering, key, value == true and key or value) -- assigning values: replace 'true' with key string
55 | end,
56 | __index = assertfalse
57 | })
58 |
59 | -- This metatable proxy is used when registering the default locale.
60 | -- It refuses to overwrite existing values
61 | -- Reason 1: Allows loading locales in any order
62 | -- Reason 2: If 2 modules have the same string, but only the first one to be
63 | -- loaded has a translation for the current locale, the translation
64 | -- doesn't get overwritten.
65 | --
66 | local writedefaultproxy = setmetatable({}, {
67 | __newindex = function(self, key, value)
68 | if not rawget(registering, key) then
69 | rawset(registering, key, value == true and key or value)
70 | end
71 | end,
72 | __index = assertfalse
73 | })
74 |
75 | --- Register a new locale (or extend an existing one) for the specified application.
76 | -- :NewLocale will return a table you can fill your locale into, or nil if the locale isn't needed for the players
77 | -- game locale.
78 | -- @paramsig application, locale[, isDefault[, silent]]
79 | -- @param application Unique name of addon / module
80 | -- @param locale Name of the locale to register, e.g. "enUS", "deDE", etc.
81 | -- @param isDefault If this is the default locale being registered (your addon is written in this language, generally enUS)
82 | -- @param silent If true, the locale will not issue warnings for missing keys. Must be set on the first locale registered. If set to "raw", nils will be returned for unknown keys (no metatable used).
83 | -- @usage
84 | -- -- enUS.lua
85 | -- local L = LibStub("AceLocale-3.0"):NewLocale("TestLocale", "enUS", true)
86 | -- L["string1"] = true
87 | --
88 | -- -- deDE.lua
89 | -- local L = LibStub("AceLocale-3.0"):NewLocale("TestLocale", "deDE")
90 | -- if not L then return end
91 | -- L["string1"] = "Zeichenkette1"
92 | -- @return Locale Table to add localizations to, or nil if the current locale is not required.
93 | function AceLocale:NewLocale(application, locale, isDefault, silent)
94 |
95 | -- GAME_LOCALE allows translators to test translations of addons without having that wow client installed
96 | local gameLocale = GAME_LOCALE or gameLocale
97 |
98 | local app = AceLocale.apps[application]
99 |
100 | if silent and app and getmetatable(app) ~= readmetasilent then
101 | geterrorhandler()("Usage: NewLocale(application, locale[, isDefault[, silent]]): 'silent' must be specified for the first locale registered")
102 | end
103 |
104 | if not app then
105 | if silent=="raw" then
106 | app = {}
107 | else
108 | app = setmetatable({}, silent and readmetasilent or readmeta)
109 | end
110 | AceLocale.apps[application] = app
111 | AceLocale.appnames[app] = application
112 | end
113 |
114 | if locale ~= gameLocale and not isDefault then
115 | return -- nop, we don't need these translations
116 | end
117 |
118 | registering = app -- remember globally for writeproxy and writedefaultproxy
119 |
120 | if isDefault then
121 | return writedefaultproxy
122 | end
123 |
124 | return writeproxy
125 | end
126 |
127 | --- Returns localizations for the current locale (or default locale if translations are missing).
128 | -- Errors if nothing is registered (spank developer, not just a missing translation)
129 | -- @param application Unique name of addon / module
130 | -- @param silent If true, the locale is optional, silently return nil if it's not found (defaults to false, optional)
131 | -- @return The locale table for the current language.
132 | function AceLocale:GetLocale(application, silent)
133 | if not silent and not AceLocale.apps[application] then
134 | error("Usage: GetLocale(application[, silent]): 'application' - No locales registered for '"..tostring(application).."'", 2)
135 | end
136 | return AceLocale.apps[application]
137 | end
138 |
--------------------------------------------------------------------------------
/libs/LibStub/LibStub.lua:
--------------------------------------------------------------------------------
1 | -- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
2 | -- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
3 | local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
4 | local LibStub = _G[LIBSTUB_MAJOR]
5 |
6 | if not LibStub or LibStub.minor < LIBSTUB_MINOR then
7 | LibStub = LibStub or {libs = {}, minors = {} }
8 | _G[LIBSTUB_MAJOR] = LibStub
9 | LibStub.minor = LIBSTUB_MINOR
10 |
11 | function LibStub:NewLibrary(major, minor)
12 | assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
13 | minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
14 |
15 | local oldminor = self.minors[major]
16 | if oldminor and oldminor >= minor then return nil end
17 | self.minors[major], self.libs[major] = minor, self.libs[major] or {}
18 | return self.libs[major], oldminor
19 | end
20 |
21 | function LibStub:GetLibrary(major, silent)
22 | if not self.libs[major] and not silent then
23 | error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
24 | end
25 | return self.libs[major], self.minors[major]
26 | end
27 |
28 | function LibStub:IterateLibraries() return pairs(self.libs) end
29 | setmetatable(LibStub, { __call = LibStub.GetLibrary })
30 | end
31 |
--------------------------------------------------------------------------------
/libs/TaintLess/TaintLess.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/libs/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/libs/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/libs/merchant.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/localization/cn.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'zhCN')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = '添加到垃圾列表'
6 | L.DestroyCheapest = '摧毁最便宜的垃圾物品'
7 | L.DestroyJunk = '摧毁所有垃圾'
8 | L.Forget = '忘记'
9 | L.Junk = '垃圾'
10 | L.JunkList = '垃圾列表'
11 | L.NotJunk = '非垃圾'
12 | L.SellJunk = '出售垃圾'
13 | L.Remove = '从垃圾列表移除'
14 | L.ToggleMousehover = '切换鼠标所指物品是否为垃圾'
15 |
16 | -- chat
17 | L.Added = '%s 已添加到垃圾列表'
18 | L.Destroyed = '你摧毁了: %s x %s'
19 | L.Forgotten = '忘记垃圾状态: %s'
20 | L.SoldJunk = '出售垃圾获得 %s'
21 | L.Repaired = '修理装备花费 %s'
22 | L.Removed = '%s 已从垃圾列表移除'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = '你确定要摧毁所有垃圾物品吗?此操作无法撤销。'
26 |
27 | -- options
28 | L.GeneralDescription = '这些选项让你可以更详尽地设置 Scrap。\n不留垃圾!'
29 | L.ListDescription = '这些选项允许你进一步配置你的垃圾列表和自动垃圾检测。'
30 |
31 | L.AutoSell = '自动出售'
32 | L.AutoSellTip = '开启此功能,Scrap 会在你访问商人时自动出售所有垃圾。'
33 | L.AutoRepair = '自动修理'
34 | L.AutoRepairTip = '开启此功能,Scrap 会在你访问商人时自动修理装备。'
35 | L.CharSpecific = '角色特定'
36 | L.DestroyWorthless = '摧毁无价值垃圾'
37 | L.DestroyWorthlessTip = '开启此功能, Scrap 会自动摧毁商人不要的垃圾.'
38 | L.GuildRepair = '公会修理'
39 | L.GuildRepairTip = '开启此功能,Scrap 会优先使用公会资金进行修理。'
40 | L.Glow = '高亮边框'
41 | L.GlowTip = '开启此功能,垃圾物品上会有|cffBBBBBB灰色的|r高亮边框。'
42 | L.Icons = '金币图标'
43 | L.IconsTip = '开启此功能,垃圾物品上会有金币的小图标。'
44 | L.SellPrices = '提示售价'
45 | L.SellPricesTip = '开启此功能,即使不在商人那里也会在提示中显示物品的售价。'
46 | L.Learning = '智能学习'
47 | L.LearningTip = '开启此功能,Scrap 会学习哪些物品经常被你出售,而将该物品分类为垃圾。'
48 | L.LowConsumable = '低等级消耗品'
49 | L.LowConsumableTip = '开启此功能,Scrap 会自动出售|cffff2020任何|r等级较你人物低的消耗品。'
50 | L.LowEquip = '低等级装备'
51 | L.LowEquipTip = '开启此功能,Scrap 会自动出售|cffff2020任何|r等级较你人物身上装备低的已绑定装备。'
52 | L.SafeMode = '安全模式'
53 | L.SafeModeTip = '开启此功能,Scrap 一次最多只会卖出 12 件物品,让你能再度买回。'
54 | L.Unusable = '无法装备的装备'
55 | L.UnusableTip = '开启此功能, Scrap 会自动出售 |cffff2020任何|r 你人物无法装备的已绑定装备.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = '欢迎使用 |cffffd200Scrap|r,这是一个智能的垃圾出售插件,由 |cffffd200Jaliborc|r 制作。这个简短的教程教你如何出售垃圾物品。|n|n它能节省你的时间,而且你的背包一定会很喜欢它,让我们开始吧!'
59 | L.Tutorial_Button = '当你访问商人的时候,Scrap 会自动出售你的垃圾,但你也能手动出售。|n|cffffd200左键点击|r Scrap 按钮出售垃圾。|n|cffffd200右键点击|r Scrap 按钮开启下拉菜单。'
60 | L.Tutorial_Drag = '如果你想教 Scrap 哪些该卖、哪些不该卖的话,怎么办呢?只需要|cffffd200拖曳|r该项物品 Scrap 按钮上。|n|n或者,你可以到|cffffd200按钮设置|r里,指定一个快捷键,切换鼠标所指的物品是否该是为垃圾'
61 | L.Tutorial_Visualizer = '要查看有哪些物品被分类为垃圾,开启 |cffffd200Scrap 查看器|r 页面。|n|n请注意这里只会列出被你|cffffd200手动分类|r的物品,而不是游戏中的每一项物品。'
62 | L.Tutorial_Bye = '祝你旅程愉快、|cffb400ff欧|r气逼人。不留垃圾!'
63 |
--------------------------------------------------------------------------------
/localization/de.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'deDE')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Zur Müll-Liste hinzufügen'
6 | L.DestroyCheapest = 'Günstigsten Müllgegenstand zerstören'
7 | L.DestroyJunk = 'Müll zerstören'
8 | L.Forget = 'Vergessen'
9 | L.Junk = 'Müll'
10 | L.JunkList = 'Müll Liste'
11 | L.NotJunk = 'Kein Müll'
12 | L.SellJunk = 'Müll verkaufen'
13 | L.Remove = 'Von der Müll-Liste entfernen'
14 | L.ToggleMousehover = 'Müllstatus für den Gegenstand unterm Mauszeiger ändern'
15 |
16 | -- chat
17 | L.Added = 'Zur Müll-Liste hinzugefügt: %s'
18 | L.Destroyed = 'Du hast zerstört: %s x %s'
19 | L.Forgotten = 'Müllstatus vergessen von: %s'
20 | L.SoldJunk = 'Du hast deinen Müll für %s verkauft'
21 | L.Repaired = 'Du hast deine Ausrüstung für %s repariert'
22 | L.Removed = 'Von der Müll-Liste entfernt: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Bist Du sicher, dass Du alle Deine Müllgegenstände zerstören möchtest? Du kannst dies nicht rückgängig machen.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Diese Optionen gestatten dir, Scrap noch weiter anzupassen. Auf das kein Müll durchkomme!'
29 | L.ListDescription = 'Diese Optionen gestatten dir, deine Müll-Liste und die automatische Müll-Erkennung weiter anzupassen.'
30 |
31 | L.AutoSell = 'Automatisch verkaufen'
32 | L.AutoSellTip = 'Wenn aktiviert, wird Scrap deinen Müll automatisch beim Händler verkaufen.'
33 | L.AutoRepair = 'Automatisch reparieren'
34 | L.AutoRepairTip = 'Wenn aktiviert, wird Scrap automatisch deine Ausrüstung reparieren, sobald du einen Händler besuchst.'
35 | L.CharSpecific = 'Charakterspezifisch'
36 | L.DestroyWorthless = 'Wertlosen Müll zerstören'
37 | L.DestroyWorthlessTip = 'Wenn aktiviert, wird Scrap Müllgegenstände zerstören, die keinen Verkaufswert haben.'
38 | L.GuildRepair = 'Mit Gildenkasse reparieren'
39 | L.GuildRepairTip = 'Wenn aktiviert, wird Scrap verfügbare Gildenmittel für Reparaturen vor deinem eigenen Geld verwenden.'
40 | L.Glow = 'Leuchtende Rahmen'
41 | L.GlowTip = 'Wenn aktiviert, werden |cffBBBBBBgrau|r leuchtende Rahmen deine Müll-Gegenstände umgeben.'
42 | L.Icons = 'Münz-Symbole'
43 | L.IconsTip = 'Wenn aktiviert, werden kleine Goldmünzen an deinen Müll-Gegenständen angezeigt.'
44 | L.SellPrices = 'Verkaufspreise im Tooltip anzeigen'
45 | L.SellPricesTip = 'Wenn aktiviert, werden Verkaufspreise der Gegenstände im Tooltip angezeigt, auch wenn du nicht bei einem Händler bist.'
46 | L.Learning = 'Intelligentes Lernen'
47 | L.LearningTip = 'Wenn aktiviert, wird Scrap lernen, welche Gegenstände du normalerweise beim Händler verkaufst und sie automatisch als Müll einstufen.'
48 | L.LowConsumable = 'Niedrigstufige Verbrauchsgüter'
49 | L.LowConsumableTip = 'Wenn aktiviert, wird Scrap |cffff2020alle|r Verbrauchsgüter verkaufen, die für deine Stufe zu niedrig sind.'
50 | L.LowEquip = 'Niedrigstufige Ausrüstung'
51 | L.LowEquipTip = 'Wenn aktiviert, wird Scrap |cffff2020alle|r seelengebundene Ausrüstung verkaufen, die im Wert weit unter deiner angelegten liegt.'
52 | L.SafeMode = 'Sicherheitsmodus'
53 | L.SafeModeTip = 'Wenn eingeschaltet, wird Scrap nicht mehr als 12 Gegenstände verkaufen, damit sie zurückgekauft werden können.'
54 | L.Unusable = 'Unbenutzbare Ausrüstung'
55 | L.UnusableTip = 'Wenn aktiviert, wird Scrap |cffff2020alle|r seelengebundene Ausrüstung verkaufen, die von deinem Charakter nie genutzt werden könnte.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Willkommen bei |cffffd200Scrap|r, der intelligenten Müllverkaufslösung von |cffffd200Jaliborc|r. Diese kurze Anleitung wird dir helfen, mit dem Verkauf deiner Müllgegenstände zu beginnen.|n|nEs wird dir Zeit sparen und deine Taschen werden es dir sicherlich danken. Sollen wir beginnen?'
59 | L.Tutorial_Button = 'Scrap wird automatisch all deinen Müll verkaufen, wann immer du einen Händler besuchst. Aber Du kannst ihn auch manuell verkaufen: mit einem einfachen |cffffd200Links-Klick|r auf die Scrap-Schaltfläche.|n|n|cffffd200Rechts-Klick|r führt dich zu weiteren Optionen.'
60 | L.Tutorial_Drag = 'Was, wenn du Scrap sagen willst, welche Gegenstände verkauft werden sollen und welche nicht? |cffffd200Zieh|r sie einfach aus deinen Taschen auf die Scrap-Schaltfläche.|n|nAlternativ dazu kannst du eine |cffffd200Tastaturbelegung|r im |cffffd200Spielmenü|r erstellen. Nutze diese, während sich der Mauszeiger über dem Gegenstand befindet.'
61 | L.Tutorial_Visualizer = 'Um zu sehen, welche Gegenstände du als Müll bzw. kein Müll festgelegt hast, öffne den |cffffd200Scrap Visualizer|r Reiter.|n|nBeachte dabei, daß nur die Gegenstände angezeigt werden, die du |cffffd200festgelegt|r hast, nicht jeder einzelne Gegenstand im Spiel.'
62 | L.Tutorial_Bye = 'Viel Glück auf deinen Reisen, und mögen |cffb400ffdie Epics|r mit dir sein. Auf das kein Müll durchkomme!'
63 |
--------------------------------------------------------------------------------
/localization/en.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'enUS', true, true)
2 |
3 | -- general
4 | L.Add = 'Set as Junk'
5 | L.DestroyCheapest = 'Destroy Cheapest Junk Item'
6 | L.DestroyJunk = 'Destroy Junk'
7 | L.Forget = 'Forget'
8 | L.Junk = 'Junk'
9 | L.JunkList = 'Junk List'
10 | L.NotJunk = 'Useful'
11 | L.SellJunk = 'Sell Junk'
12 | L.Remove = 'Set as Useful'
13 | L.ToggleMousehover = 'Toggle Item Under Mouse'
14 |
15 | -- chat
16 | L.Added = 'Set as junk: %s'
17 | L.Destroyed = 'You destroyed: %s x %s'
18 | L.Forgotten = 'Forgot junk status of: %s'
19 | L.SoldJunk = 'You sold your junk for %s'
20 | L.Repaired = 'You repaired your armor for %s'
21 | L.Removed = 'Set as useful: %s'
22 |
23 | -- dialogs
24 | L.ConfirmDelete = 'Are you sure you want to destroy all your junk items? You cannot undo this action.'
25 |
26 | -- options
27 | L.GeneralDescription = 'These are general features that can be toggled depending on your preferences. The trash shall not pass!'
28 | L.ListDescription = 'These options allow you to configure your junk list and automatic junk detection further.'
29 |
30 | L.AutoSell = 'Automatically Sell'
31 | L.AutoSellTip = 'If enabled, Scrap will automatically sell your junk when you visit a merchant.'
32 | L.AutoRepair = 'Automatically Repair'
33 | L.AutoRepairTip = 'If enabled, Scrap will automatically repair your armor when you visit a merchant.'
34 | L.DestroyWorthless = 'Destroy Worthless'
35 | L.DestroyWorthlessTip = 'If enabled, Scrap will destroy junk items with no vendor sale value.'
36 | L.GuildRepair = 'Use Guild Funds'
37 | L.GuildRepairTip = 'If enabled, Scrap will use available guild funds for repairs before your own money.'
38 | L.SafeMode = 'Safe Mode'
39 | L.SafeModeTip = 'If enabled, Scrap will not sell more than 12 items at once, so that you may always buy them back.'
40 |
41 | L.Glow = 'Glowing Borders'
42 | L.GlowTip = 'If enabled, |cffBBBBBBgray|r glowing borders will appear on your Scrap items.'
43 | L.Icons = 'Coin Icons'
44 | L.IconsTip = 'If enabled, small gold coins will appear on your Scrap items.'
45 | L.SellPrices = 'Tooltip Prices'
46 | L.SellPricesTip = 'If enabled, item sale prices will be shown in tooltips even when not at a merchant.'
47 |
48 | L.CharSpecific = 'Character Specific'
49 | L.Learning = 'Automatic Optimization'
50 | L.LearningTip = 'If enabled, Scrap will watch and learn which items you usually sell to the merchant and |cffff2020automatically|r mark them junk.'
51 | L.LowConsumable = 'Low Consumables'
52 | L.LowConsumableTip = 'If enabled, Scrap will sell |cffff2020any|r consumable which is too low for your level.'
53 | L.LowEquip = 'Low Equipment'
54 | L.LowEquipTip = 'If enabled, Scrap will sell |cffff2020any|r soulbound equipment which has a much lower value than the one you are wearing.'
55 | L.Unusable = 'Unusable Equipment'
56 | L.UnusableTip = 'If enabled, Scrap will sell |cffff2020any|r soulbound equipment that could never be used by your character.'
57 | L.iLevelTreshold = 'Item Level Threshold'
58 | L.EquipLevelTip = 'Controls the item level below which items are junk, based on a percentage of your current gear level.|n|nFor example: at 100%, any item below your equipped level is junk; at 50%, only items below half that level are.'
59 | L.ConsumableLevelTip = 'Controls the item level below which consumables are junk, calculated as a percentage of your character level.'
60 |
61 | -- help
62 | L.PatronsDescription = 'Scrap is distributed for free and supported trough donations. A massive thank you to all the supporters on Patreon and Paypal who keep development alive. You can become a patron too at |cFFF96854patreon.com/jaliborc|r.'
63 | L.HelpDescription = 'Here we provide answers to the most frequently asked questions. We also recommend following the ingame tutorial. If neither solve your problem, you might consider asking for help on the Scrap user community on discord.'
64 |
65 | L.FAQ = {
66 | 'How to add/remove an item from the junk list?',
67 | 'There are multiple ways:|n1) The simplest is to drag the item into the Scrap button while at a merchant (next to the armour repair buttons).|n2) You can set up a keybinding under Game -> Keybindings -> Scrap -> "Toggle Item Under Mouse". You can then mouse over items in the inventory and press your keybind to toggle them as junk.|n3) You can manage the items you have added or removed to the list on the Scrap tab at the bottom of the merchant panel (next to the Buyback tab).',
68 | 'The Scrap icon is not showing over items in Bagnon!',
69 | 'That functionallity is not part of core Scrap, it is part of a separate plugin. Try installing or updating |cffffd200Bagnon Scrap Support|r.'
70 | }
71 |
72 | L.Tutorial_Welcome = 'Welcome to |cffffd200Scrap|r, the intelligent junk vending solution by |cffffd200Jaliborc|r.|n|nPlease start this short tutorial by |cffffd200visiting a merchant|r. It will save you time, and your pockets will certainly appreciate. Shall we get started?'
73 | L.Tutorial_Button = 'Scrap will automatically sell all your junk whenever you visit a merchant. But you can manually sell it: simply |cffffd200Left-Click|r on the Scrap button.|n|n|cffffd200Right-Click|r on the button to bring extra options.'
74 | L.Tutorial_Drag = 'What if you want to tell Scrap which items to sell or not? Simply |cffffd200Drag|r it from your bags into the Scrap button.|n|nAlternatively, you may set a |cffffd200Keybinding|r at the |cffffd200Game Menu|r options. Press it while hovering the item.'
75 | L.Tutorial_Visualizer = 'To see what items you have specified as junk or not, open the |cffffd200Scrap Visualizer|r tab.|n|nNotice it will only display items which you have |cffffd200specified|r, not every single item in-game.'
76 | L.Tutorial_Bye = 'Good luck on your journeys, and may the |cffb400ffEpics|r be with you. The trash shall not pass!'
77 |
--------------------------------------------------------------------------------
/localization/es.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'esES') or LibStub('AceLocale-3.0'):NewLocale('Scrap', 'esMX')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Añadir a la Lista de Basura'
6 | L.DestroyCheapest = 'Destruir Basura Más Barata'
7 | L.DestroyJunk = 'Destruir Basura'
8 | L.Forget = 'Olvidar'
9 | L.Junk = 'Basura'
10 | L.JunkList = 'Lista de Basura'
11 | L.NotJunk = 'Útil'
12 | L.SellJunk = 'Vender Basura'
13 | L.Remove = 'Retirar de la Lista de Basura'
14 | L.ToggleMousehover = 'Alternar Artículo Bajo el Cursor'
15 |
16 | -- chat
17 | L.Added = 'Añadido a la lista de basura: %s'
18 | L.Destroyed = 'Has destruido: %s x %s'
19 | L.Forgotten = 'Definición se es basura olvidada: %s'
20 | L.SoldJunk = 'Has vendido basura por un valor de: %s'
21 | L.Repaired = 'Has reparado tu armadura por un valor de: %s'
22 | L.Removed = 'Has retirado de la lista de basura: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = '¿Estás seguro de que quieres destruir todos tus items basura? ¡No puedes deshacer esta acción!.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Estas opciones te permiten configurar Scrap aún más. ¡La basura no dominará tus bolsas!'
29 | L.ListDescription = 'Estas opciones te permiten configurar tu lista de basura y detección de basura automática más a fondo.'
30 |
31 | L.AutoSell = 'Vender automáticamente'
32 | L.AutoSellTip = 'Si está activado, Scrap venderá automáticamente tu basura cuando visites a un mercader.'
33 | L.AutoRepair = 'Reparar automáticamente'
34 | L.AutoRepairTip = 'Si está activado, Scrap reparará automáticamente tu armadura cuando visites a un mercader.'
35 | L.CharSpecific = 'Lista de basura específica del personaje'
36 | L.DestroyWorthless = 'Destruir objetos sin valor'
37 | L.DestroyWorthlessTip = 'Si está activado, Scrap destruirá los items basura sin valor de venta.'
38 | L.GuildRepair = 'Usar fondos de la hermandad'
39 | L.GuildRepairTip = 'Si está activado, Scrap utilizará los fondos de la hermandad disponibles para reparaciones antes que tu propio oro.'
40 | L.Glow = 'Bordes brillantes'
41 | L.GlowTip = 'Si está activado, aparecerán bordes brillantes en tus items basura.'
42 | L.Icons = 'Icono de moneda'
43 | L.IconsTip = 'Si está activado, aparecerá un pequeño icono de moneda de oro en tus items basura.'
44 | L.SellPrices = 'Precio de venta en los tooltips'
45 | L.SellPricesTip = 'Si está activado, el precio de venta de los items se mostrará en los tooltips incluso cuando no estés en un mercader.'
46 | L.Learning = 'Aprendizaje de uso'
47 | L.LearningTip = 'Si está activado, Scrap sabrá qué items le vendes habitualmente al mercader y automáticamente los considerará basura.'
48 | L.LowConsumable = 'Consumibles de bajo nivel'
49 | L.LowConsumableTip = 'Si está activado, Scrap venderá los consumibles que son demasiado bajos para tu nivel.'
50 | L.LowEquip = 'Equipo de bajo nivel'
51 | L.LowEquipTip = 'Si está activado, Scrap venderá el equipo ligado al alma que tiene un nivel mucho menor que el que estás usando .'
52 | L.SafeMode = 'Modo seguro'
53 | L.SafeModeTip = 'Si está activado, Scrap no venderá más de 12 items a la vez, por lo que siempre podrás recuperarlos.'
54 | L.Unusable = 'Equipo inutilizable'
55 | L.UnusableTip = 'Si está activado, Scrap venderá el equipo ligado al alma, que nunca podría ser usado por tu personaje.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Bienvenido a |cffffd200Scrap|r, la solución inteligente de venta de basura de |cffffd200Jaliborc|r. Este breve tutorial te ayudará a comenzar a vender tus items basura.|n|nLo que te ahorrará tiempo y tus bolsillos sin duda lo agradecerán. ¿Empezamos?'
59 | L.Tutorial_Button = 'Scrap venderá automáticamente toda tu basura cada vez que visites a un mercader. Pero puedes venderla manualmente, es muy simple: |cffffd200Click|r en el botón Scrap.|n|n|cffffd200Click derecho|r en el botón para ver opciones adicionales.'
60 | L.Tutorial_Drag = '¿Qué pasa si quieres decirle a Scrap cuales items vender o no? es muy simple: |cffffd200Arrastra|r los items de tus bolsas al botón Scrap.|n|nAlternativamente, puedes establecer un |cffffd200Keybinding|r en las opciones de |cffffd200Menú de juego|r. Presiónalo mientras colocas el item.'
61 | L.Tutorial_Visualizer = 'Para ver qué items has especificado como basura o no, abre el visualizador en la pestaña |cffffd200Scrap|r.|n|nTen en cuenta que solo mostrará los items que tienes |cffffd200especificados|r, no todos los items del juego.'
--------------------------------------------------------------------------------
/localization/fr.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'frFR')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = "Ajouter à la liste de camelote"
6 | L.DestroyCheapest = "Détruire l'objet de camelote le moins cher"
7 | L.DestroyJunk = 'Détruire la camelote'
8 | L.Forget = 'Oublier'
9 | L.Junk = 'Camelote'
10 | L.JunkList = 'Liste de Camelote'
11 | L.NotJunk = 'Utile'
12 | L.SellJunk = "Vendre la camelote"
13 | L.Remove = "Enlever de la liste de camelote"
14 | L.ToggleMousehover = 'Considère les objets sous le curseur comme indésirables'
15 |
16 | -- chat
17 | L.Added = 'Ajouté à la liste de camelote: %s'
18 | L.Destroyed = 'Vous avez détruit : %s x %s'
19 | L.Forgotten = 'Oublié le statut camelote de : %s'
20 | L.SoldJunk = 'Camelote vendue pour %s'
21 | L.Repaired = 'Vous avez réparé votre équipement pour %s'
22 | L.Removed = 'Enlevé de la liste de camelote: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Voulez-vous vraiment supprimer toute votre camelote ? Cette action ne peut pas être annulée.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Ces options vous permettent de configurer Scrap encore mieux. La camelote ne passera pas !'
29 | L.ListDescription = 'Ces options vous permettent de configurer votre liste de camelote et la détection automatique de camelote encore plus loin.'
30 |
31 | L.AutoSell = 'Vente Automatique'
32 | L.AutoSellTip = 'Si cette option est activée, Scrap vendra automatiquement toute votre camelote lors d\'une visite chez un marchand.'
33 | L.AutoRepair = 'Réparer Automatiquement'
34 | L.AutoRepairTip = 'Si cette option est activée, Scrap réparera automatiquement votre armure lorsque vous parlerez à un marchand.'
35 | L.CharSpecific = 'Liste de Camelote Spécifique au Personnage'
36 | L.DestroyWorthless = 'Détruire les invendables'
37 | L.DestroyWorthlessTip = 'Si cette option est activée, Scrap détruira la camelotte qui ne peut pas être vendue.'
38 | L.GuildRepair = 'Réparer avec l\'argent de la guilde'
39 | L.GuildRepairTip = 'Si cette option est activée, Scrap utilisera l\'argent de la guilde pour réparer avant d\'utiliser votre monnaie.'
40 | L.Glow = 'Bordures éclatantes'
41 | L.GlowTip = 'Si cette option est activée, des bordures |cffBBBBBBgrises|r apparaîtront sur les icônes de votre camelote.'
42 | L.Icons = 'Icônes des Monnaies'
43 | L.IconsTip = 'Si cette option est activée, des petites icônes de monnaie apparaîtront sur les icônes de votre camelote.'
44 | L.SellPrices = 'Prix de vente dans les info-bulles'
45 | L.SellPricesTip = 'Si cette option est activée, les prix de vente des objets seront affichés dans les info-bulles même lorsque vous n\'êtes pas chez un marchand.'
46 | L.Learning = 'Apprentissage Intelligent'
47 | L.LearningTip = 'Si cette option est activée, Scrap apprendra de lui-même quels articles vous vendez généralement aux marchands et les considérera automatiquement comme de la camelote.'
48 | L.LowConsumable = 'Vendre les consommables de faible niveau'
49 | L.LowConsumableTip = 'Si cette option est activée, Scrap vendra |cffff2020tous|r les objets consommables qui sont trop faibles pour votre niveau.'
50 | L.LowEquip = 'Vendre l\'équipement de faible niveau'
51 | L.LowEquipTip = 'Si cette option est activée, Scrap vendra |cffff2020tout|r l\'équipement lié ayant un niveau beaucoup plus bas que celui que vous portez.'
52 | L.SafeMode = 'Mode Sécurisé'
53 | L.SafeModeTip = 'Si cette option est activée, Scrap ne vendra pas plus de 12 objets à la fois, de façon à ce que vous puissiez les racheter.'
54 | L.Unusable = 'Équipement Inutilisable'
55 | L.UnusableTip = 'Si cette option est activée, Scrap vendra |cffff2020tout|r équipement inutilisable par votre personnage.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Bienvenue dans |cffffd200Scrap|r, la solution de vente intelligente par |cffffd200Jaliborc|r. Ce court tutoriel vous aidera à commencer à vendre votre camelote.|n|nCelà vous fera gagner un temps fou, et vos poches apprécieront grandement.|nOn commence ?'
59 | L.Tutorial_Button = 'Scrap vend automatiquement toute votre camelote à chaque visite chez un marchand. Mais vous pouvez le faire manuellement : faites simplement un |cffffd200clic-gauche|r sur le bouton de Scrap.|n|n|cffffd200Clic-droit|r sur le bouton pour afficher les options avancées.'
60 | L.Tutorial_Drag = 'Que faire si vous voulez dire à Scrap quels articles il doit vendre ou pas ? Il suffit simplement de |cffffd200glisser-déposer|r vos objets de vos sacs sur le bouton Scrap.|n|nVous pouvez également définir un |cffffd200raccourci clavier|r dans les options du |cffffd200menu du jeu|r. Appuyez dessus tout en survolant l\'élément.'
61 | L.Tutorial_Visualizer = 'Pour voir les articles que vous avez spécifié comme indésirables ou non, ouvrez l\'onglet |cffffd200Scrap Visualizer|r.|n|nRemarquez qu\'il n\'affichera que les articles que vous aurez |cffffd200spécifié|r indésirables, et non pas chaque élément unique dans le jeu.'
62 | L.Tutorial_Bye = 'Bonne chance dans vos aventures et puissent les |cffb400ffobjets épiques|r être avec vous.|nLes déchets ne passeront pas !'
--------------------------------------------------------------------------------
/localization/it.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'itIT')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Imposta come Cianfrusaglia'
6 | L.DestroyCheapest = 'Distruggi l\'oggetto Cianfrusaglia più Economico'
7 | L.DestroyJunk = 'Distruggi Cianfrusaglie'
8 | L.Forget = 'Dimentica'
9 | L.Junk = 'Cianfrusaglia'
10 | L.JunkList = 'Lista Rifiuti'
11 | L.NotJunk = 'Utile'
12 | L.SellJunk = 'Vendi Cianfrusaglie'
13 | L.Remove = 'Imposta come Utile'
14 | L.ToggleMousehover = 'Attiva/Disattiva Oggetto Sotto il Cursore'
15 |
16 | -- chat
17 | L.Added = 'Imposta come Cianfrusaglia: %s'
18 | L.Destroyed = 'Hai distrutto: %s x %s'
19 | L.Forgotten = 'Hai dimenticato lo stato di cianfrusaglia di: %s'
20 | L.SoldJunk = 'Hai venduto le tue Cianfrusaglie per %s'
21 | L.Repaired = 'Hai riparato il tuo equipaggiamento per %s'
22 | L.Removed = 'Imposta come Utile: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Sei sicuro di voler distruggere tutte le tue cianfrusaglie? Non puoi cancellare questa azione.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Queste opzioni ti permettono di configurare Scrap sempre più accuratamente. Le cianfrusaglie non passeranno!'
29 | L.ListDescription = 'Queste opzioni ti permettono di configurare ulteriormente la tua lista di cianfrusaglie e il rilevamento automatico di cianfrusaglie.'
30 |
31 | L.AutoSell = 'Vendi Automaticamente'
32 | L.AutoSellTip = 'Se abilitato, Scrap venderà automaticamente tutte le tue cianfrusaglie quando visiti un mercante.'
33 | L.AutoRepair = 'Ripara Automaticamente'
34 | L.AutoRepairTip = 'Se abilitato, Scrap riparerà automaticamente tutto il tuo equipaggiamento quando visiti un mercante.'
35 | L.CharSpecific = 'Lista Specifica del Personaggio di Cianfrusaglie'
36 | L.DestroyWorthless = 'Distruggi Senza Valore'
37 | L.DestroyWorthlessTip = 'Se abilitato, Scrap distruggerà tutte le cianfrusaglie senza un valore di vendita.'
38 | L.GuildRepair = 'Usa Fondi di Gilda'
39 | L.GuildRepairTip = 'Se abilitato, Scrap userà per riparare i fondi di gilda disponibili prima di usare i tuoi.'
40 | L.Glow = 'Bordi Luccicanti'
41 | L.GlowTip = 'Se abilitato, appariranno bordi |cffBBBBBBgrigi|r sugli oggetti che Scrap considera cianfrusaglie.'
42 | L.Icons = 'Icona Moneta'
43 | L.IconsTip = 'Se abilitato, appariranno piccole monete dorate sugli oggetti che Scrap considera cianfrusaglie.'
44 | L.SellPrices = 'Prezzi sul Tooltip'
45 | L.SellPricesTip = 'Se abilitato, i prezzi di vendita degli oggetti saranno mostrati nei tooltip anche quando non si è presso un mercante.'
46 | L.Learning = 'Auto Apprendimento'
47 | L.LearningTip = 'Se abilitato, Scrap autoapprenderà quali oggetti vendi generalmente ad un mercante e li considererà |cffff2020automaticamente|r come cianfrusaglie.'
48 | L.LowConsumable = 'Consumabili Minori'
49 | L.LowConsumableTip = 'Se abilitato, Scrap venderà |cffff2020qualsiasi|r oggetto consumabile che è molto inferiore rispetto al tuo livello.'
50 | L.LowEquip = 'Equipaggiamento Inferiore'
51 | L.LowEquipTip = 'Se abilitato, Scrap venderà |cffff2020qualsiasi|r equipaggiamento vincolato che ha un valore di vendita molto inferiore a quello che stai indossando.'
52 | L.SafeMode = 'Modalità di Sicurezza'
53 | L.SafeModeTip = 'Se abilitato, Scrap non venderà più di 12 oggetti alla volta, così puoi deciderli di riacquistarli se cambi idea.'
54 | L.Unusable = 'Equipaggiamento Non Utilizzabile'
55 | L.UnusableTip = 'Se abilitato, Scrap venderà |cffff2020qualsiasi|r|r equipaggiamento vincolato che non potrà mai essere usato dal tuo personaggio.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Benvenuti in |cffffd200Scrap|r, la soluzione intelligente di vendita automatica di cianfrusaglie di |cffffd200Jaliborc|r. Questa breve guida vi aiuterà ad iniziare a vendere le vostre cianfrusaglie.|n|nSarà un prezioso salvatempo, e le vostre tasche apprezzeranno. Iniziamo?'
59 | L.Tutorial_Button = 'Scrap venderà automaticamente tutte le tue cianfrusaglie nel tuo inventario quando visiti un mercante. Ma puoi anche venderli tu manualmente: fai semplicemente |cffffd200Clic Sinistro|r sul pulsante di Scrap.|n|n|cffffd200Clic Destro|r sul pulsante per visualizzare altre opzioni.'
60 | L.Tutorial_Drag = 'Cosa fare per dire a Scrap di vendere o meno i vari oggetti? Semplicemente |cffffd200trascinali|r dalle tue borse sul pulsante di Scrap.|n|nAlternativamente, puoi impostare un |cffffd200Assegnazione|r tra le opzioni del |cffffd200Menù di Gioco|r.'
61 | L.Tutorial_Visualizer = 'Per vedere quali oggetti hai impostato come cianfrusaglie oppure no, apri la scheda |cffffd200Scrap Visualizer|r.|n|nRicorda che verranno mostrati solo gli oggetti che |cffffd200tu hai specificato|r, e non qualsiasi oggetto del gioco.'
62 | L.Tutorial_Bye = 'Buona fortuna nei tuoi viaggi, e che gli |cffb400ffepici|r siano con te. La spazzaturà non prevarrà!'
63 |
--------------------------------------------------------------------------------
/localization/ko.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'koKR') -- by Jaliborc, 강남쌍칼(GangnamDualblade)
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = '잡템으로 설정'
6 | L.DestroyCheapest = '가장 싼 잡템 파괴'
7 | L.DestroyJunk = '모든 잡템 파괴'
8 | L.Forget = '잊어버리다'
9 | L.Junk = '잡템'
10 | L.NotJunk = '예외 아이템'
11 | L.SellJunk = '잡템 판매'
12 | L.Remove = '예외 아이템으로 설정'
13 | L.ToggleMousehover = '커서 아래의 아이템을 잡템으로 온/오프'
14 |
15 | -- chat
16 | L.Added = '잡템으로 설정: %s'
17 | L.Destroyed = '파괴됨: %s x %s'
18 | L.Forgotten = '잡템 상태를 잊어버림: %s'
19 | L.SoldJunk = '잡템을 판매하고 %s를 획득하였습니다.'
20 | L.Repaired = '장비를 수리하는데 %s를 소모하였습니다.'
21 | L.Removed = '예외 아이템으로 설정: %s'
22 |
23 | -- dialogs
24 | L.ConfirmDelete = '모든 잡템을 파괴하시겠습니까? 이 작업은 취소할 수 없습니다.'
25 |
26 | -- options
27 | L.GeneralDescription = '이러한 일반적인 기능들은 당신의 선호도에 따라 활성화/비활성화할 수 있습니다. 잡템은 잡템일 뿐!'
28 | L.ListDescription = '이러한 옵션을 통해 잡템 목록 및 자동 잡템 탐지를 더욱 구성할 수 있습니다.'
29 |
30 | L.AutoSell = '자동 판매'
31 | L.AutoSellTip = '활성화된 경우, 상점을 방문하면 자동으로 잡템을 판매합니다.'
32 | L.AutoRepair = '자동 수리'
33 | L.AutoRepairTip = '활성화된 경우, 상점을 방문하면 자동으로 장비를 수리합니다.'
34 | L.CharSpecific = '캐릭터 별'
35 | L.DestroyWorthless = '가치없는 것 파괴'
36 | L.DestroyWorthlessTip = '활성화하면, 판매 가치가 없는 잡템은 파괴됩니다.'
37 | L.GuildRepair = '길드 자금 사용'
38 | L.GuildRepairTip = '활성화된 경우, 수리에 길드 자금을 사용합니다.'
39 | L.Glow = '테두리 강조'
40 | L.GlowTip = '활성화된 경우. 잡템에 |cffBBBBBB회색|r으로 강조된 테두리가 표시됩니다.'
41 | L.Icons = '동전 아이콘'
42 | L.IconsTip = '활성화된 경우, 잡템 위에 작은 금화 아이콘이 표시됩니다.'
43 | L.SellPrices = '툴팁에 가격 표시'
44 | L.SellPricesTip = '활성화된 경우, 상점에서 아닌 상태에서도 아이템의 판매 가격이 툴팁에 표시됩니다.'
45 | L.Learning = '지능형 학습'
46 | L.LearningTip = '활성화된 경우, 자주 상인에게 판매되는 아이템을 Scrap이 자동으로 잡템으로 인식할 수 있도록 학습합니다.'
47 | L.LowConsumable = '저 레벨용 소모품'
48 | L.LowConsumableTip = '활성화된 경우, 현재 캐릭터의 레벨보다 현저히 낮은 레벨의 소모품은 |cffff2020모두|r 판매합니다.'
49 | L.LowEquip = '저 레벨용 장비'
50 | L.LowEquipTip = '활성화된 경우, 현재 착용 중인 장비보다 현저히 낮은 가치의 귀속 아이템은 |cffff2020모두|r 판매합니다.'
51 | L.SafeMode = '안전 모드'
52 | L.SafeModeTip = '활성화된 경우, 항상 재매입이 가능하도록 한번에 12개 이상의 아이템은 판매하지 않습니다.'
53 | L.Unusable = '사용 불가 장비'
54 | L.UnusableTip = '활성화된 경우, 당신의 캐릭터가 절대로 사용할 수 없는 귀속 장비를 판매합니다.'
55 |
56 | -- tutorials
57 | L.Tutorial_Welcome = '|cffffd200Scrap|r(제작자 |cffffd200Jaliborc|r), 지능형 잡템 판매 솔루션에 오신 것을 환영합니다. 이 짧은 튜토리얼은 잡템 판매를 시작하는 데 도움을 드리게 될 것입니다. |n|n당신의 시간을 절약하고 가방 관리가 한결 편해질 겁니다. 자 시작해 볼까요?'
58 | L.Tutorial_Button = 'Scrap은 당신이 상점을 방문할 때 모든 잡템을 자동으로 판매합니다. 하지만 수동으로 판매할 수도 있습니다: Scrap 버튼을 간단히 |cffffd200Left-Click|r 하십시요.|n|n|cffffd200Right-Click|r 하시면 추가적인 옵션을 보실 수 있습니다.'
59 | L.Tutorial_Drag = '어떤 아이템을 판매하고 어떤 아이템은 판매하면 안 되는지를 Scrap에게 알려주려면 어떻게 할까요? 가방에 있는 아이템을 Scrap 버튼 위로 간단히 |cffffd200드래그|r하세요.|n|n또는, |cffffd200게임 메뉴|r 옵션에서 |cffffd200키 설정|r을 하시면 됩니다. 아이템 위에 마우스를 올리고 설정된 키를 누르세요.'
60 | L.Tutorial_Visualizer = '어떤 아이템이 잡템으로 등록되었는지 확인하려면, |cffffd200잡템 목록|r 탭을 열어 보세요.|n|n게임 내의 모든 잡템이 아니라 당신이 |cffffd200지정한|r 아이템들만 표시한다는 점을 명심하세요.'
61 | L.Tutorial_Bye = '당신의 여정에 행운과 |cffb400ff에픽 아이템|r이 늘 함께하길 바랍니다. 잡템은 잡템일 뿐!'
62 |
--------------------------------------------------------------------------------
/localization/localization.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/localization/nl.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'nlNL')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Als rommel instellen'
6 | L.DestroyCheapest = 'Goedkoopste Rommel Vernietigen'
7 | L.DestroyJunk = 'Rommel vernietigen'
8 | L.Forget = 'Vergeet'
9 | L.Junk = 'Rommel'
10 | L.JunkList = 'Rommel Lijst'
11 | L.NotJunk = 'Nuttig'
12 | L.SellJunk = 'Verkoop rommel'
13 | L.Remove = 'Als nuttig instellen'
14 | L.ToggleMousehover = 'Schakel Item Onder Muis'
15 |
16 | -- chat
17 | L.Added = 'Als rommel instellen: %s'
18 | L.Destroyed = 'Je hebt vernietigd: %s x %s'
19 | L.Forgotten = 'Junk-status van: %s vergeten'
20 | L.SoldJunk = 'Rommel is verkocht voor %s'
21 | L.Repaired = 'Uitrusting is gerepareerd voor %s'
22 | L.Removed = 'Als nuttig instellen: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Is het zeker dat al deze items vernietigd moeten worden? Deze actie kan niet ongedaan worden.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Dit zijn algemene functies die kunnen worden in- of uitgeschakeld op basis van je voorkeuren. De rommel zal niet voorbijgaan!' -- modified
29 | L.ListDescription = 'Deze opties staan toe om Scrap nog verder in te stellen.'
30 |
31 | L.AutoSell = 'Automatische Verkoop'
32 | L.AutoSellTip = 'Scrap zal automatisch alle rommel verkopen wanneer een handelaar wordt bezocht, in het geval dit is ingesteld.'
33 | L.AutoRepair = 'Automatische Reparatie'
34 | L.AutoRepairTip = 'Scrap zal automatisch uitrusting repareren wanneer een handelaar wordt bezocht, in het geval dit is ingesteld.'
35 | L.CharSpecific = 'Karakter Specifieke Rommel Lijst'
36 | L.DestroyWorthless = 'Waardeloos Vernietigen'
37 | L.DestroyWorthlessTip = 'Scrap zal items zonder verkoopwaarde automatisch vernietigen, in het geval dit is ingesteld.'
38 | L.GuildRepair = 'Gebruik Gilde Fonds'
39 | L.GuildRepairTip = 'Scrap zal in plaats van eigen geld, eerst gilde fonds automatisch gebruiken voor reparaties, in het geval dit is ingesteld.'
40 | L.Glow = 'Gloeiende Randen'
41 | L.GlowTip = '|cffBBBBBBgrijze|r Gloeiende randen zullen zichtbaar zijn op Scrap items, in het geval dit is ingesteld.'
42 | L.Icons = 'Munt Pictogrammen'
43 | L.IconsTip = 'Kleine muntjes zullen zichtbaar zijn op Srap items, in het geval dit is ingesteld.'
44 | L.SellPrices = 'Tooltip Prijzen'
45 | L.SellPricesTip = 'Als dit is ingeschakeld, worden itemverkoopprijzen getoond in tooltips, zelfs als je niet bij een handelaar bent.'
46 | L.Learning = 'Leren Gebruiken'
47 | L.LearningTip = 'Scrap zal leren welke items normaal gesproken verkocht worden aan de handelaar en |cffff2020automatisch|r deze als rommel beschouwen, in het geval dit is ingesteld.'
48 | L.LowConsumable = 'Lage Verbruiksgoederen'
49 | L.LowConsumableTip = 'Scrap zal |cffff2020elke|r verbruiksgoederen die te laag voor het niveau zijn, automatisch verkopen, in het geval dit is ingesteld.'
50 | L.LowEquip = 'Lage Uitrusting'
51 | L.LowEquipTip = 'Scrap zal |cffff2020elke|r zielsverbonden uitrusting met een veel lagere waarde dan het gedragen uitrusting verkopen, in het geval dit is ingesteld.'
52 | L.SafeMode = 'Veilige Modus'
53 | L.SafeModeTip = 'Scrap zal niet meer dan 12 items in één keer verkopen, zodat deze altijd nog terug gekocht kunnen worden, in het geval dit is ingesteld.'
54 | L.Unusable = 'Onbruikbare Uitrusting'
55 | L.UnusableTip = 'Scrap zal |cffff2020elke|r zielsverbonden uitrusting wat nooit gedragen zou kunnen worden door het karakter verkopen, in het geval dit is ingesteld.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Welkom bij |cffffd200Scrap|r, het intelligente rommel verkoop oplossing door |cffffd200Jaliborc|r (vertaling door |cffffd200Barrosy|r). Deze korte handleiding zal je helpen om te beginnen met het verkopen van rommel. |n|nHet zal je tijd besparen en je zakken zullen het waarderen. Zullen wij beginnen?'
59 | L.Tutorial_Button = 'Scrap zal, wanneer een handelaar wordt bezocht, al uw rommel automatisch verkopen. U kunt het ook handmatig verkopen: simpelweg |cffffd200Links-Klik|r op de Scrap knop.|n|n|cffffd200Rechts-Klik|r op de knop om extra opties te krijgen.'
60 | L.Tutorial_Drag = 'Wat nou als u Scrap wilt vertellen welke items wel en niet verkocht moeten worden? U kunt het dan simpelweg van uw tassen naar de Scrap knop|cffffd200slepen|r.|n|nAls alternatief kunt u een |cffffd200Sneltoets|r instellen in het spel opties menu. Druk het wanneer de muis boven het item zweeft.'
61 | L.Tutorial_Visualizer = 'Om te zien welke items u als rommel heeft gespecificeerd, open de |cffffd200Scrap Visualizer|r tab.|n|nLet erop dat dit alleen door u |cffffd200gespecificeerde|r items zal tonen, dus niet elke mogelijke item in-game.'
62 | L.Tutorial_Bye = 'Veel succes met je reizen en moge de |cffb400ffthe epics|r met u zijn. De rommel zal niet voorbijgaan!'
63 |
64 |
--------------------------------------------------------------------------------
/localization/pt.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'ptBR')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Definir como Lixo'
6 | L.DestroyCheapest = 'Destruir Lixo Mais Barato'
7 | L.DestroyJunk = 'Destruir Lixo'
8 | L.Forget = 'Esquecer'
9 | L.Junk = 'Lixo'
10 | L.JunkList = 'Lista do Lixo'
11 | L.NotJunk = 'Útil'
12 | L.SellJunk = 'Vender Lixo'
13 | L.Remove = 'Definir como Útil'
14 | L.ToggleMousehover = 'Marcar Item Sob o Mouse como Lixo ou Nao'
15 |
16 | -- chat
17 | L.Added = 'Definido como lixo: %s'
18 | L.Destroyed = 'Você destruiu: %s x %s'
19 | L.Forgotten = 'Definição de ser lixo esquecida: %s'
20 | L.SoldJunk = 'Vendeu seu lixo por %s'
21 | L.Repaired = 'Reparou seu equipamento por %s'
22 | L.Removed = 'Definido como útil: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Tem certeza de que deseja destruir todos os seus itens inúteis? Esta ação não pode ser desfeita.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Estas são funcionalidades gerais que podem ser ativadas ou desativadas de acordo com suas preferências. O lixo não passará!'
29 | L.ListDescription = 'Estas opções permitem que você configure sua lista de lixo e detecção automática de lixo ainda mais.'
30 | L.AutoSell = 'Vender Automaticamente'
31 | L.AutoSellTip = 'Se ativado, o Scrap venderá automaticamente todo o seu lixo quando visitar um comerciante.'
32 | L.AutoRepair = 'Reparar Automaticamente'
33 | L.AutoRepairTip = 'Se ativado, o Scrap irá reparar automaticamente sua armadura ao visitar um comerciante.'
34 | L.CharSpecific = 'Específico de Personagem'
35 | L.DestroyWorthless = 'Destruir Itens Sem Valor'
36 | L.DestroyWorthlessTip = 'Se ativado, o Scrap irá destruir itens inúteis que não têm valor de venda.'
37 | L.GuildRepair = 'Usar Fundos da Guilda'
38 | L.GuildRepairTip = 'Se ativado, o Scrap usará fundos disponíveis da guilda para reparos antes do seu próprio dinheiro.'
39 | L.Glow = 'Bordas Brilhantes'
40 | L.GlowTip = 'Se ativado, bordas cinzas brilhantes aparecerão nos seus itens do Scrap.'
41 | L.Icons = 'Ícones de Moeda'
42 | L.IconsTip = 'Se ativado, pequenas moedas de ouro aparecerão nos seus itens do Scrap.'
43 | L.SellPrices = 'Preços na Dica de Ferramenta'
44 | L.SellPricesTip = 'Se ativado, os preços de venda dos itens serão mostrados nas dicas de ferramenta, mesmo quando não estiver em um comerciante.'
45 | L.Learning = 'Otimização Automática'
46 | L.LearningTip = 'Se ativado, o Scrap observará e aprenderá quais itens você geralmente vende para o comerciante e irá marcá-los como lixo automaticamente.'
47 | L.LowConsumable = 'Consumíveis Baixos'
48 | L.LowConsumableTip = 'Se ativado, o Scrap venderá qualquer consumível que seja muito baixo para o seu nível.'
49 | L.LowEquip = 'Equipamento Baixo'
50 | L.LowEquipTip = 'Se ativado, o Scrap venderá qualquer equipamento vinculado à alma que tenha um valor muito menor do que o que você está usando.'
51 | L.SafeMode = 'Modo Seguro'
52 | L.SafeModeTip = 'Se ativado, o Scrap não venderá mais de 12 itens de uma só vez, para que você possa sempre comprá-los de volta.'
53 | L.Unusable = 'Equipamento Inutilizável'
54 | L.UnusableTip = 'Se ativado, o Scrap venderá qualquer equipamento vinculado à alma que nunca poderia ser usado pelo seu personagem.'
55 |
56 | -- tutorials
57 | L.Tutorial_Welcome = 'Bem-vindo ao Scrap, a solução inteligente para vender seus itens inúteis. Este pequeno tutorial irá ajudá-lo a começar a vender seu lixo. Vamos começar?'
58 | L.Tutorial_Button = 'O Scrap venderá automaticamente todo o seu lixo sempre que você visitar um comerciante. Mas você pode vendê-lo manualmente: basta clicar no botão do Scrap.'
59 | L.Tutorial_Drag = 'E se você quiser dizer ao Scrap quais itens vender ou não? Basta arrastá-lo da sua mochila para o botão do Scrap.'
60 | L.Tutorial_Visualizer = 'Para ver quais itens você especificou como lixo ou não, abra a aba do Visualizador de Scrap. Note que ele só exibirá os itens que você especificou, não todos os itens no jogo.'
61 | L.Tutorial_Bye = 'Boa sorte em suas jornadas, e que os épicos estejam com você. O lixo não passará!'
62 |
--------------------------------------------------------------------------------
/localization/ru.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'ruRU')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = 'Добавить в список хлама'
6 | L.DestroyCheapest = 'Уничтожить самый дешевый хлам'
7 | L.DestroyJunk = 'Уничтожить весь хлам'
8 | L.Forget = 'Забыть'
9 | L.Junk = 'Хлам'
10 | L.JunkList = 'Список хлама'
11 | L.NotJunk = 'Не хлам'
12 | L.SellJunk = 'Продать хлам'
13 | L.Remove = 'Удалить из списка хлама'
14 | L.ToggleMousehover = 'Поставить / снять метку хлама под курсором'
15 |
16 | -- chat
17 | L.Added = 'Добавлено в список хлама: %s'
18 | L.Destroyed = 'Вы уничтожили: %s x %s'
19 | L.Forgotten = 'Статус хлама забыт: %s'
20 | L.SoldJunk = 'Вы продали хлама на %s'
21 | L.Repaired = 'Вы отремонтировали свою броню за %s'
22 | L.Removed = 'Удалено из списка хлама: %s'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = 'Вы уверены, что хотите уничтожить весь хлам? Вы не сможете отменить это действие.'
26 |
27 | -- options
28 | L.GeneralDescription = 'Более тонкая настройка Scrap. Хлам не пройдет!'
29 | L.ListDescription = 'Эти опции позволяют дополнительно настроить ваш список хлама и автоматическое обнаружение хлама.'
30 |
31 | L.AutoSell = 'Автопродажа'
32 | L.AutoSellTip = 'Если включено, Scrap будет автоматически продавать хлам когда вы посещаете торговца.'
33 | L.AutoRepair = 'Авторемонт'
34 | L.AutoRepairTip = 'Если включено, Scrap будет автоматически ремонтировать броню когда вы посещаете торговца.'
35 | L.CharSpecific = 'Список хлама для текущего персонажа'
36 | L.DestroyWorthless = 'Уничтожить ничего не стоящий хлам'
37 | L.DestroyWorthlessTip = 'Если включено, Scrap будет уничтожать хлам, который ничего не стоит при продаже.'
38 | L.GuildRepair = 'Ремонт за счет гильдии'
39 | L.GuildRepairTip = 'Если включено, Scrap будет использовать средства гильдии для ремонта перед вашими собственными средствами.'
40 | L.Glow = 'Подсвечивать рамки с хламом'
41 | L.GlowTip = 'Если включено, Scrap будет подсвечивать рамки с хламом |cffBBBBBBСЕРЫМ|r цветом.'
42 | L.Icons = 'Иконка монетки'
43 | L.IconsTip = 'Если включено, Scrap будет отмечать хлам маленькими золотыми монетками.'
44 | L.SellPrices = 'Цены продажи во всплывающих подсказках'
45 | L.SellPricesTip = 'Если включено, цены на продажу предметов будут отображаться во всплывающих подсказках, даже если вы не у торговца.'
46 | L.Learning = 'Интеллектуальное обучение'
47 | L.LearningTip = 'Если включено, Scrap будет следить за тем, какие предметы вы часто продаете торговцу и автоматически считать их хламом.'
48 | L.LowConsumable = 'Продавать низкоуровневые расходуемые товары'
49 | L.LowConsumableTip = 'Если включено, Scrap будет продавать |cffff2020ВСЕ|r низкоуровневые для вас расходуемые товары.'
50 | L.LowEquip = 'Продавать низкоуровневую экипировку'
51 | L.LowEquipTip = 'Если включено, Scrap будет продавать |cffff2020всю|r привязанную экипировку, уровень которой намного меньше, чем надетой на вас.'
52 | L.SafeMode = 'Безопасный режим'
53 | L.SafeModeTip = 'Если включено, Scrap не будет продавать более 12 предметов за раз, тем самым сохраняя возможность выкупа.'
54 | L.Unusable = 'Продавать непригодную экипировку'
55 | L.UnusableTip = 'Если включено, Scrap будет продавать |cffff2020ВСЮ|r привязанную экипировку, которую ваш персонаж никогда не сможет надеть.'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = 'Добро пожаловать в |cffffd200Scrap|r, от |cffffd200Jaliborc|r. Это краткое руководство поможет вам избавиться от хлама.|n|nЭто сэкономит ваше время, а также место в сумке.Вы готовы начать?'
59 | L.Tutorial_Button = 'Scrap будет автоматически продавать весь ваш хлам всякий раз, когда вы посещаете торговца. Вы также можете вручную продать его: просто |cffffd200ЛКМ|r по кнопке Scrap.|n|n|cffffd200ПКМ|r по кнопке, чтобы вызвать дополнительные опции.'
60 | L.Tutorial_Drag = 'Что делать если вы хотите сообщить Scrap продавать предмет или нет? Просто |cffffd200Перетащите|r его из вашей сумки на кнопку Scrap.|n|nВ качестве альтернативы, вы можете |cffffd200Назначить клавишу|r в настройках |cffffd200Главного меню|r игры. Нажмите ее при наведении на предмет.'
61 | L.Tutorial_Visualizer = 'Чтобы увидеть какие предметы вы указали как хлам, откройте вкладку |cffffd200Scrap Visualizer|r.|n|nОбратите внимание на то, что будет отображаться только те предметы, которые были |cffffd200добавлены вами|r, а не все предметы в игре.'
62 | L.Tutorial_Bye = 'Удачного вам путешествия, Да пребудет с тобой |cffb400ffЭпик|r. Хлам не пройдет!'
63 |
--------------------------------------------------------------------------------
/localization/tw.lua:
--------------------------------------------------------------------------------
1 | local L = LibStub('AceLocale-3.0'):NewLocale('Scrap', 'zhTW')
2 | if not L then return end
3 |
4 | -- main
5 | L.Add = '添加到垃圾清單'
6 | L.DestroyCheapest = '摧毀最便宜的垃圾物品'
7 | L.DestroyJunk = '摧毀所有垃圾'
8 | L.Forget = '忘記'
9 | L.Junk = '垃圾'
10 | L.JunkList = '垃圾清單'
11 | L.NotJunk = '非垃圾'
12 | L.SellJunk = '出售垃圾'
13 | L.Remove = '從垃圾清單移除'
14 | L.ToggleMousehover = '切換物品是否為垃圾'
15 |
16 | -- chat
17 | L.Added = '%s 已添加到垃圾清單'
18 | L.Destroyed = '你摧毀了: %s x %s'
19 | L.Forgotten = '忘記了垃圾狀態: %s'
20 | L.SoldJunk = '出售垃圾獲得 %s'
21 | L.Repaired = '修理裝備花費 %s'
22 | L.Removed = '%s 已從垃圾清單移除'
23 |
24 | -- dialogs
25 | L.ConfirmDelete = '你確實要摧毀所有垃圾物品嗎?此動作無法撤銷。'
26 |
27 | -- options
28 | L.GeneralDescription = '這些選項讓你可更詳盡的設定 Scrap。\n不留垃圾!'
29 | L.ListDescription = '這些選項讓你可更進一步的設定垃圾清單和自動垃圾檢測。'
30 |
31 | L.AutoSell = '自動出售'
32 | L.AutoSellTip = '開啟此功能,Scrap 會在你訪問商人時自動出售所有垃圾。'
33 | L.AutoRepair = '自動修理'
34 | L.AutoRepairTip = '開啟此功能,Scrap 會在你訪問商人時自動修理裝備。'
35 | L.CharSpecific = '角色專屬'
36 | L.DestroyWorthless = '摧毀無價值的物品'
37 | L.DestroyWorthlessTip = '開啟此功能,Scrap 會摧毀沒有商人售價的垃圾物品。'
38 | L.GuildRepair = '公會修理'
39 | L.GuildRepairTip = '開啟此功能,Scrap 會使用公會基金進行修理,優先於你的個人資金。'
40 | L.Glow = '泛光邊框'
41 | L.GlowTip = '開啟此功能,垃圾物品上會有|cffBBBBBB灰色的|r泛光邊框。'
42 | L.Icons = '金幣圖示'
43 | L.IconsTip = '開啟此功能,垃圾物品上會有金幣的小圖示。'
44 | L.SellPrices = '工具提示價格'
45 | L.SellPricesTip = '開啟此功能,即使不在商人那裡也會在工具提示中顯示物品的售價。'
46 | L.Learning = '智能學習'
47 | L.LearningTip = '開啟此功能,Scrap 會學習哪些物品經常被你出售,而將該物分類為垃圾。'
48 | L.LowConsumable = '低等級消耗品'
49 | L.LowConsumableTip = '開啟此功能,Scrap 會自動出售|cffff2020任何|r等級較你人物低的消耗品。'
50 | L.LowEquip = '低等裝備'
51 | L.LowEquipTip = '開啟此功能,Scrap 會自動出售|cffff2020任何|r等級較你人物身上裝備低的已綁定裝備。'
52 | L.SafeMode = '安全模式'
53 | L.SafeModeTip = '開啟此功能,Scrap 一次最多只會賣出 12 項物品,讓你能再度買回。'
54 | L.Unusable = '不能使用的裝備'
55 | L.UnusableTip = '開啟此功能,Scrap 會自動出售|cffff2020任何|r不能由你的角色使用的已綁定裝備。'
56 |
57 | -- tutorials
58 | L.Tutorial_Welcome = '歡迎使用 |cffffd200Scrap|r,這是一個聰明的垃圾出售插件,由 |cffffd200Jaliborc|r 製作。這個簡短的教學讓你知道如何出售垃圾物品。|n|n它能節省你的時間,而且你的背包一定會很喜歡它的,讓我們開始吧!'
59 | L.Tutorial_Button = '當你訪問商人的時候,Scrap 會自動出售你的垃圾,但你也能手動出售。|n|cffffd200左鍵點擊|r Scrap 按鈕出售垃圾。|n|cffffd200右鍵點擊|r Scrap 按鈕開啟下拉選單。'
60 | L.Tutorial_Drag = '如果你想教 Scrap 知道哪些該賣、哪些不該賣的話,怎麼辦呢?只需要|cffffd200拖曳|r該項物品到 Scrap 按鈕上。|n|n或者,你可以到|cffffd200按鈕設定|r裡面,指定一個快捷鍵,切換游標下的物品是否該視為垃圾'
61 | L.Tutorial_Visualizer = '要檢視有哪些物品被分類為垃圾,開啟 |cffffd200Scrap 檢視器|r 頁面。|n|n請注意這裡只會列出被你|cffffd200手動分類|r的物品,而不是遊戲中的每一項物品。'
62 | L.Tutorial_Bye = '祝福你旅程愉快、|cffb400ff紫|r氣逼人。不留垃圾!'
63 |
--------------------------------------------------------------------------------