├── App.config
├── App.xaml
├── App.xaml.cs
├── Contracts.cs
├── Functions.cs
├── Icon1.ico
├── LICENSE
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Methods.cs
├── PoeTradeSearch.csproj
├── PoeTradeSearch.csproj.user
├── PoeTradeSearch.sln
├── PopWindow.xaml
├── PopWindow.xaml.cs
├── Properties
├── AssemblyInfo.cs
├── Resources.Designer.cs
├── Resources.resx
├── Settings.Designer.cs
├── Settings.settings
└── app.manifest
├── README.md
├── ResStrings.cs
├── Updates.cs
├── VERSION
└── _POE_Data
├── Bases.txt
├── Config.txt
├── Filters.txt
├── Monsters.txt
├── Prophecies.txt
├── Syndicate_0.jpg
├── Temple_0.jpg
└── Words.txt
/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Win32;
2 | using System;
3 | using System.Diagnostics;
4 | using System.Globalization;
5 | using System.IO;
6 | using System.Reflection;
7 | using System.Runtime.Versioning;
8 | using System.Threading;
9 | using System.Windows;
10 | using System.Windows.Threading;
11 |
12 | namespace PoeTradeSearch
13 | {
14 | ///
15 | /// App.xaml에 대한 상호 작용 논리
16 | ///
17 | public partial class App : Application, IDisposable
18 | {
19 | private string logFilePath;
20 |
21 | private void AppDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
22 | {
23 | RunException(e.Exception);
24 | e.Handled = true;
25 | }
26 |
27 | private void RunException(Exception ex)
28 | {
29 | try
30 | {
31 | File.AppendAllText(logFilePath, String.Format("{0} Error: {1}\r\n\r\n{2}\r\n\r\n", ex.Source, ex.Message, ex.StackTrace));
32 | }
33 | catch { }
34 |
35 | if (ex.InnerException != null)
36 | RunException(ex.InnerException);
37 | else
38 | Application.Current.Shutdown();
39 | }
40 |
41 | private Mutex m_Mutex = null;
42 |
43 | protected virtual void Dispose(bool disposing)
44 | {
45 | if (disposing && (m_Mutex != null))
46 | {
47 | m_Mutex.ReleaseMutex();
48 | m_Mutex.Close();
49 | m_Mutex = null;
50 | }
51 | }
52 |
53 | public void Dispose()
54 | {
55 | Dispose(true);
56 | GC.SuppressFinalize(this);
57 | }
58 |
59 | [STAThread]
60 | protected override void OnStartup(StartupEventArgs e)
61 | {
62 | bool createdNew;
63 | Assembly assembly = Assembly.GetExecutingAssembly();
64 | String MutexName = String.Format(CultureInfo.InvariantCulture, "Local\\{{{0}}}{{{1}}}", assembly.GetType().GUID, assembly.GetName().Name);
65 | m_Mutex = new Mutex(true, MutexName, out createdNew);
66 |
67 | if (!createdNew)
68 | {
69 | MessageBox.Show("애플리케이션이 이미 시작되었습니다.", "중복 실행", MessageBoxButton.OK, MessageBoxImage.Information);
70 | Environment.Exit(-1);
71 | return;
72 | }
73 |
74 | int v4FullRegistryBuildNumber = 0;
75 | const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
76 |
77 | using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
78 | {
79 | try
80 | {
81 | v4FullRegistryBuildNumber = (int)(ndpKey != null && ndpKey.GetValue("Release") != null ? ndpKey.GetValue("Release") : 0);
82 | }
83 | catch (Exception)
84 | {
85 | v4FullRegistryBuildNumber = 0;
86 | }
87 | }
88 |
89 | string frameworkDisplayName = Assembly.GetEntryAssembly()?.GetCustomAttribute()?.FrameworkDisplayName;
90 | int frameworkBuildNumber = 393295; /* FW_4.6 */ // frameworkDisplayName == ".NET Framework 4.5.2" ? 379893 : 461808;
91 |
92 | if (v4FullRegistryBuildNumber < frameworkBuildNumber)
93 | {
94 | MessageBoxResult result = MessageBox.Show(
95 | "설치된 Runtime 버전이 낮습니다." + '\n' + frameworkDisplayName + " 이상 버전을 설치해 주십시요."
96 | + '\n' + '\n' + "최신 .NET Framework Runtime 을 다운로드 하시겠습니까?",
97 | "버전 에러", MessageBoxButton.YesNo, MessageBoxImage.Warning
98 | );
99 |
100 | if (result == MessageBoxResult.Yes)
101 | {
102 | Process.Start("https://dotnet.microsoft.com/download/dotnet-framework");
103 | }
104 |
105 | Environment.Exit(-1);
106 | return;
107 | }
108 |
109 | logFilePath = Assembly.GetExecutingAssembly().Location;
110 | logFilePath = logFilePath.Remove(logFilePath.Length - 4) + ".log";
111 |
112 | if (File.Exists(logFilePath)) File.Delete(logFilePath);
113 |
114 | Application.Current.DispatcherUnhandledException += AppDispatcherUnhandledException;
115 | base.OnStartup(e);
116 | }
117 |
118 | protected override void OnExit(ExitEventArgs e)
119 | {
120 | Dispose();
121 | base.OnExit(e);
122 | }
123 | }
124 | }
--------------------------------------------------------------------------------
/Contracts.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Linq;
2 | using System.Collections.Generic;
3 | using System.Runtime.Serialization;
4 | using System.Windows;
5 |
6 | namespace PoeTradeSearch
7 | {
8 | public partial class MainWindow : Window
9 | {
10 | [DataContract]
11 | public class Itemfilter
12 | {
13 | public string id;
14 | public string text;
15 | public double max;
16 | public double min;
17 | public bool disabled;
18 | public int option;
19 | public bool isNull = false;
20 | }
21 |
22 | [DataContract]
23 | public class ItemOption
24 | {
25 | public bool Synthesis;
26 | public byte Influence1;
27 | public byte Influence2;
28 | public byte Corrupt;
29 | public bool ByType;
30 | public bool ChkSocket;
31 | public bool ChkQuality;
32 | public bool ChkLv;
33 | public double SocketMin;
34 | public double SocketMax;
35 | public double LinkMin;
36 | public double LinkMax;
37 | public double QualityMin;
38 | public double QualityMax;
39 | public double LvMin;
40 | public double LvMax;
41 | public string Rarity;
42 | public double PriceMin;
43 | public int ElderGuardian;
44 | public int MapInfluence;
45 | public List itemfilters = new List();
46 | }
47 |
48 | [DataContract]
49 | public class ItemBaseName
50 | {
51 | public string NameKR;
52 | public string TypeKR;
53 | public string NameEN;
54 | public string TypeEN;
55 |
56 | //public string Rarity;
57 | public string[] Inherits;
58 | }
59 |
60 | [DataContract]
61 | internal class PoePrices
62 | {
63 | [DataMember(Name = "min")]
64 | internal double Min = 0.0;
65 |
66 | [DataMember(Name = "max")]
67 | internal double Max = 0.0;
68 |
69 | [DataMember(Name = "currency")]
70 | internal string Currency = "";
71 |
72 | [DataMember(Name = "pred_explanation")]
73 | internal JArray PredExplantion = null;
74 |
75 | [DataMember(Name = "pred_confidence_score")]
76 | internal double PredConfidenceScore = 0.0;
77 |
78 | [DataMember(Name = "error")]
79 | internal int Error = 0;
80 |
81 | [DataMember(Name = "error_msg")]
82 | internal string ErrorMsg = "";
83 | }
84 |
85 | [DataContract()]
86 | internal class ConfigData
87 | {
88 | [DataMember(Name = "options")]
89 | internal ConfigOption Options = null;
90 |
91 | [DataMember(Name = "shortcuts")]
92 | internal ConfigShortcut[] Shortcuts = null;
93 |
94 | [DataMember(Name = "checked")]
95 | internal ConfigChecked[] Checked = null;
96 |
97 | [DataMember(Name = "dangerous_mods")]
98 | internal ConfigDangerousMods[] DangerousMods = null;
99 | }
100 |
101 | [DataContract(Name = "options")]
102 | internal class ConfigOption
103 | {
104 | [DataMember(Name = "league")]
105 | internal string League = null;
106 |
107 | [DataMember(Name = "server")]
108 | internal string Server = null;
109 |
110 | [DataMember(Name = "server_timeout")]
111 | internal int ServerTimeout = 0;
112 |
113 | [DataMember(Name = "server_redirect")]
114 | internal bool ServerRedirect = false;
115 |
116 | [DataMember(Name = "search_price_min")]
117 | internal decimal SearchPriceMin = 0;
118 |
119 | [DataMember(Name = "search_price_count")]
120 | internal decimal SearchPriceCount = 20;
121 |
122 | [DataMember(Name = "min_value_percent")]
123 | internal double MinValuePercent = 100;
124 |
125 | [DataMember(Name = "max_value_percent")]
126 | internal double MaxValuePercent = 100;
127 |
128 | [DataMember(Name = "unique_min_value_percent")]
129 | internal double UniqueMinValuePercent = 100;
130 |
131 | [DataMember(Name = "unique_max_value_percent")]
132 | internal double UniqueMaxValuePercent = 100;
133 |
134 | [DataMember(Name = "set_max_value")]
135 | internal bool SetMaxValue = false;
136 |
137 | [DataMember(Name = "update_price_on_checked")]
138 | internal bool UpdatePriceOnChecked = false;
139 |
140 | [DataMember(Name = "search_before_day")]
141 | internal int SearchBeforeDay = 0;
142 |
143 | [DataMember(Name = "search_by_type")]
144 | internal bool SearchByType = false;
145 |
146 | [DataMember(Name = "auto_check_unique")]
147 | internal bool AutoCheckUnique = false;
148 |
149 | [DataMember(Name = "auto_select_pseudo")]
150 | internal bool AutoSelectPseudo = false;
151 |
152 | [DataMember(Name = "auto_select_corrupt")]
153 | internal string AutoSelectCorrupt = "";
154 |
155 | [DataMember(Name = "ctrl_wheel")]
156 | internal bool CtrlWheel = false;
157 |
158 | [DataMember(Name = "check_updates")]
159 | internal bool CheckUpdates = false;
160 |
161 | [DataMember(Name = "data_version")]
162 | internal string DataVersion = null;
163 |
164 | [DataMember(Name = "always_on_top")]
165 | internal bool AlwaysOnTop = true;
166 |
167 | [DataMember(Name = "disable_startup_message")]
168 | internal bool DisableStartupMessage = false;
169 | }
170 |
171 | [DataContract(Name = "shortcuts")]
172 | internal class ConfigShortcut
173 | {
174 | [DataMember(Name = "custom")]
175 | internal bool Custom = false;
176 |
177 | [DataMember(Name = "keycode")]
178 | internal int Keycode = 0;
179 |
180 | [DataMember(Name = "value")]
181 | internal string Value = null;
182 |
183 | [DataMember(Name = "position")]
184 | internal string Position = null;
185 |
186 | [DataMember(Name = "ctrl")]
187 | internal bool Ctrl = false;
188 | }
189 |
190 | [DataContract(Name = "checked")]
191 | internal class ConfigChecked
192 | {
193 | [DataMember(Name = "id")]
194 | internal string ID = null;
195 |
196 | [DataMember(Name = "text")]
197 | internal string Text = null;
198 |
199 | [DataMember(Name = "mod_type")]
200 | internal string ModType = null;
201 | }
202 |
203 | [DataContract(Name = "dangerous_mods")]
204 | internal class ConfigDangerousMods
205 | {
206 | [DataMember(Name = "id")]
207 | internal string ID = null;
208 |
209 | [DataMember(Name = "text")]
210 | internal string Text = null;
211 | }
212 |
213 | [DataContract]
214 | internal class BaseData
215 | {
216 | [DataMember(Name = "result")]
217 | internal BaseResult[] Result = null;
218 | }
219 |
220 | [DataContract]
221 | internal class BaseResult
222 | {
223 | [DataMember(Name = "data")]
224 | internal BaseResultData[] Data = null;
225 | }
226 |
227 | [DataContract]
228 | internal class BaseResultData
229 | {
230 | [DataMember(Name = "Id")]
231 | internal string ID = null;
232 |
233 | [DataMember(Name = "Name")]
234 | internal string NameEn = null;
235 |
236 | [DataMember(Name = "NameKo")]
237 | internal string NameKo = null;
238 |
239 | [DataMember(Name = "InheritsFrom")]
240 | internal string InheritsFrom = null;
241 |
242 | [DataMember(Name = "Detail")]
243 | internal string Detail = null;
244 | }
245 |
246 | [DataContract]
247 | internal class WordData
248 | {
249 | [DataMember(Name = "result")]
250 | public WordeResult[] Result = null;
251 | }
252 |
253 | [DataContract]
254 | internal class WordeResult
255 | {
256 | [DataMember(Name = "data")]
257 | public WordeResultData[] Data = null;
258 | }
259 |
260 | [DataContract]
261 | internal class WordeResultData
262 | {
263 | [DataMember(Name = "WordlistsKey")]
264 | internal string Key = null;
265 |
266 | [DataMember(Name = "Text2")]
267 | internal string NameEn = null;
268 |
269 | [DataMember(Name = "Text2Ko")]
270 | internal string NameKo = null;
271 | }
272 |
273 | [DataContract]
274 | internal class FilterData
275 | {
276 | [DataMember(Name = "result")]
277 | internal FilterResult[] Result = null;
278 | }
279 |
280 | [DataContract]
281 | internal class FilterResult
282 | {
283 | [DataMember(Name = "label")]
284 | internal string Label = "";
285 |
286 | [DataMember(Name = "entries")]
287 | internal FilterResultEntrie[] Entries = null;
288 | }
289 |
290 | [DataContract]
291 | internal class FilterResultEntrie
292 | {
293 | [DataMember(Name = "id")]
294 | internal string ID = "";
295 |
296 | [DataMember(Name = "text")]
297 | internal string Text = "";
298 |
299 | [DataMember(Name = "type")]
300 | internal string Type = "";
301 |
302 | [DataMember(Name = "part")]
303 | internal string Part = "";
304 |
305 | [DataMember(Name = "option")]
306 | internal FilterResultOption Option = new FilterResultOption();
307 | }
308 |
309 | [DataContract]
310 | internal class FilterResultOption
311 | {
312 | [DataMember(Name = "options")]
313 | internal FilterResultOptions[] Options = null;
314 | }
315 |
316 | [DataContract]
317 | internal class FilterResultOptions
318 | {
319 | [DataMember(Name = "id")]
320 | internal int ID = 0;
321 |
322 | [DataMember(Name = "text")]
323 | internal string Text = "";
324 | }
325 |
326 | [DataContract]
327 | internal class AccountData
328 | {
329 | [DataMember(Name = "name")]
330 | internal string Name = "";
331 |
332 | [DataMember(Name = "online")]
333 | internal OnlineStatus Online;
334 | }
335 |
336 | [DataContract]
337 | internal class OnlineStatus
338 | {
339 | [DataMember(Name = "league")]
340 | internal string League = "";
341 | }
342 |
343 | [DataContract]
344 | internal class PriceData
345 | {
346 | [DataMember(Name = "type")]
347 | internal string Type = "";
348 |
349 | [DataMember(Name = "amount")]
350 | internal double Amount = 0;
351 |
352 | [DataMember(Name = "currency")]
353 | internal string Currency = "";
354 |
355 | [DataMember(Name = "exchange")]
356 | internal ExchangeInfo Exchange = new ExchangeInfo();
357 |
358 | [DataMember(Name = "item")]
359 | internal ItemInfo Item = new ItemInfo();
360 | }
361 |
362 | [DataContract]
363 | internal class ExchangeInfo
364 | {
365 | [DataMember(Name = "currency")]
366 | internal string Currency = "";
367 |
368 | [DataMember(Name = "amount")]
369 | internal double Amount = 0;
370 | }
371 |
372 | [DataContract]
373 | internal class ItemInfo
374 | {
375 | [DataMember(Name = "currency")]
376 | internal string Currency = "";
377 |
378 | [DataMember(Name = "amount")]
379 | internal double Amount = 0;
380 |
381 | [DataMember(Name = "stock")]
382 | internal int Stock = 0;
383 | }
384 |
385 | [DataContract]
386 | internal class FetchDataListing
387 | {
388 | [DataMember(Name = "indexed")]
389 | internal string Indexed = "";
390 |
391 | [DataMember(Name = "account")]
392 | internal AccountData Account = new AccountData();
393 |
394 | [DataMember(Name = "price")]
395 | internal PriceData Price = new PriceData();
396 | }
397 |
398 | [DataContract]
399 | internal class FetchDataInfo
400 | {
401 | [DataMember(Name = "id")]
402 | internal string ID = "";
403 |
404 | [DataMember(Name = "listing")]
405 | internal FetchDataListing Listing = new FetchDataListing();
406 | }
407 |
408 | [DataContract]
409 | internal class FetchData
410 | {
411 | [DataMember(Name = "result")]
412 | internal FetchDataInfo[] Result;
413 | }
414 |
415 | [DataContract]
416 | internal class ResultData
417 | {
418 | [DataMember(Name = "result")]
419 | internal string[] Result = null;
420 |
421 | [DataMember(Name = "id")]
422 | internal string ID = "";
423 |
424 | [DataMember(Name = "total")]
425 | internal int Total = 0;
426 | }
427 |
428 | [DataContract]
429 | internal class q_Option
430 | {
431 | [DataMember(Name = "option")]
432 | internal string Option;
433 | }
434 |
435 | [DataContract]
436 | internal class q_Min_And_Max
437 | {
438 | [DataMember(Name = "min")]
439 | internal double Min;
440 |
441 | [DataMember(Name = "max")]
442 | internal double Max;
443 |
444 | [DataMember(Name = "option")]
445 | internal int option;
446 | }
447 |
448 | [DataContract]
449 | internal class q_Type_filters_filters
450 | {
451 | [DataMember(Name = "category")]
452 | internal q_Option Category = new q_Option();
453 |
454 | [DataMember(Name = "rarity")]
455 | internal q_Option Rarity = new q_Option();
456 | }
457 |
458 | [DataContract]
459 | internal class q_Type_filters
460 | {
461 | [DataMember(Name = "filters")]
462 | internal q_Type_filters_filters Filters = new q_Type_filters_filters();
463 | }
464 |
465 | [DataContract]
466 | internal class q_Socket_filters_filters
467 | {
468 | [DataMember(Name = "sockets")]
469 | internal q_Min_And_Max Sockets = new q_Min_And_Max();
470 |
471 | [DataMember(Name = "links")]
472 | internal q_Min_And_Max Links = new q_Min_And_Max();
473 | }
474 |
475 | [DataContract]
476 | internal class q_Socket_filters
477 | {
478 | [DataMember(Name = "disabled")]
479 | internal bool Disabled = false;
480 |
481 | [DataMember(Name = "filters")]
482 | internal q_Socket_filters_filters Filters = new q_Socket_filters_filters();
483 | }
484 |
485 | [DataContract]
486 | internal class q_Misc_filters_filters
487 | {
488 | [DataMember(Name = "quality")]
489 | internal q_Min_And_Max Quality = new q_Min_And_Max();
490 |
491 | [DataMember(Name = "ilvl")]
492 | internal q_Min_And_Max Ilvl = new q_Min_And_Max();
493 |
494 | [DataMember(Name = "gem_level")]
495 | internal q_Min_And_Max Gem_level = new q_Min_And_Max();
496 |
497 | [DataMember(Name = "corrupted")]
498 | internal q_Option Corrupted = new q_Option();
499 |
500 | [DataMember(Name = "shaper_item")]
501 | internal q_Option Shaper = new q_Option();
502 |
503 | [DataMember(Name = "elder_item")]
504 | internal q_Option Elder = new q_Option();
505 |
506 | [DataMember(Name = "crusader_item")]
507 | internal q_Option Crusader = new q_Option();
508 |
509 | [DataMember(Name = "redeemer_item")]
510 | internal q_Option Redeemer = new q_Option();
511 |
512 | [DataMember(Name = "hunter_item")]
513 | internal q_Option Hunter = new q_Option();
514 |
515 | [DataMember(Name = "warlord_item")]
516 | internal q_Option Warlord = new q_Option();
517 |
518 | [DataMember(Name = "synthesised_item")]
519 | internal q_Option Synthesis = new q_Option();
520 |
521 | }
522 |
523 | [DataContract]
524 | internal class q_Misc_filters
525 | {
526 | [DataMember(Name = "disabled")]
527 | internal bool Disabled = false;
528 |
529 | [DataMember(Name = "filters")]
530 | internal q_Misc_filters_filters Filters = new q_Misc_filters_filters();
531 | }
532 |
533 | [DataContract]
534 | internal class q_Map_filters_filters
535 | {
536 | [DataMember(Name = "map_tier")]
537 | internal q_Min_And_Max Tier = new q_Min_And_Max();
538 |
539 | [DataMember(Name = "map_shaped")]
540 | internal q_Option Shaper = new q_Option();
541 |
542 | [DataMember(Name = "map_elder")]
543 | internal q_Option Elder = new q_Option();
544 |
545 | [DataMember(Name = "map_blighted")]
546 | internal q_Option Blight = new q_Option();
547 | }
548 |
549 | [DataContract]
550 | internal class q_Map_filters
551 | {
552 | [DataMember(Name = "disabled")]
553 | internal bool Disabled = false;
554 |
555 | [DataMember(Name = "filters")]
556 | internal q_Map_filters_filters Filters = new q_Map_filters_filters();
557 | }
558 |
559 | [DataContract]
560 | internal class q_Trade_filters_filters
561 | {
562 | [DataMember(Name = "indexed")]
563 | internal q_Option Indexed = new q_Option();
564 |
565 | [DataMember(Name = "sale_type")]
566 | internal q_Option SaleType = new q_Option();
567 |
568 | [DataMember(Name = "price")]
569 | internal q_Min_And_Max Price = new q_Min_And_Max();
570 | }
571 |
572 | [DataContract]
573 | internal class q_Trade_filters
574 | {
575 | [DataMember(Name = "disabled")]
576 | internal bool Disabled = false;
577 |
578 | [DataMember(Name = "filters")]
579 | internal q_Trade_filters_filters Filters = new q_Trade_filters_filters();
580 | }
581 |
582 | [DataContract]
583 | internal class q_Filters
584 | {
585 | [DataMember(Name = "type_filters")]
586 | internal q_Type_filters Type = new q_Type_filters();
587 |
588 | [DataMember(Name = "socket_filters")]
589 | internal q_Socket_filters Socket = new q_Socket_filters();
590 |
591 | [DataMember(Name = "map_filters")]
592 | internal q_Map_filters Map = new q_Map_filters();
593 |
594 | [DataMember(Name = "misc_filters")]
595 | internal q_Misc_filters Misc = new q_Misc_filters();
596 |
597 | [DataMember(Name = "trade_filters")]
598 | internal q_Trade_filters Trade = new q_Trade_filters();
599 | }
600 |
601 | [DataContract]
602 | internal class q_Stats_filters
603 | {
604 | [DataMember(Name = "id")]
605 | internal string Id;
606 |
607 | [DataMember(Name = "value")]
608 | internal q_Min_And_Max Value;
609 |
610 | [DataMember(Name = "disabled")]
611 | internal bool Disabled;
612 | }
613 |
614 | [DataContract]
615 | internal class q_Stats
616 | {
617 | [DataMember(Name = "type")]
618 | internal string Type;
619 |
620 | [DataMember(Name = "filters")]
621 | internal q_Stats_filters[] Filters;
622 | }
623 |
624 | [DataContract]
625 | internal class q_Sort
626 | {
627 | [DataMember(Name = "price")]
628 | internal string Price;
629 | }
630 |
631 | [DataContract]
632 | internal class q_Query
633 | {
634 | [DataMember(Name = "status", Order = 0)]
635 | internal q_Option Status = new q_Option();
636 |
637 | [DataMember(Name = "name")]
638 | internal string Name;
639 |
640 | [DataMember(Name = "type")]
641 | internal string Type;
642 |
643 | [DataMember(Name = "stats")]
644 | internal q_Stats[] Stats;
645 |
646 | [DataMember(Name = "filters")]
647 | internal q_Filters Filters = new q_Filters();
648 | }
649 |
650 | [DataContract]
651 | internal class JsonData
652 | {
653 | [DataMember(Name = "query")]
654 | internal q_Query Query;
655 |
656 | [DataMember(Name = "sort")]
657 | internal q_Sort Sort = new q_Sort();
658 | }
659 | }
660 |
661 | public class FilterEntrie
662 | {
663 | public string ID { get; set; }
664 | public string Name { get; set; }
665 |
666 | public FilterEntrie(string id, string name)
667 | {
668 | this.ID = id;
669 | this.Name = name;
670 | }
671 | }
672 | }
--------------------------------------------------------------------------------
/Functions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.IO;
4 | using System.Net;
5 | using System.Runtime.InteropServices;
6 | using System.Runtime.Serialization.Json;
7 | using System.Security.Principal;
8 | using System.Text;
9 | using System.Text.RegularExpressions;
10 | using System.Windows;
11 |
12 | namespace PoeTradeSearch
13 | {
14 | public partial class MainWindow : Window
15 | {
16 | internal static bool IsAdministrator()
17 | {
18 | var identity = WindowsIdentity.GetCurrent();
19 | var principal = new WindowsPrincipal(identity);
20 | return principal.IsInRole(WindowsBuiltInRole.Administrator);
21 | }
22 |
23 | private string GetFileVersion()
24 | {
25 | System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
26 | FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
27 | return fvi.FileVersion;
28 | }
29 |
30 | private double StrToDouble(string s, double def = 0)
31 | {
32 | if ((s ?? "") != "")
33 | {
34 | try
35 | {
36 | def = double.Parse(s);
37 | }
38 | catch { }
39 | }
40 |
41 | return def;
42 | }
43 |
44 | private double DamageToDPS(string damage)
45 | {
46 | double dps = 0;
47 | try
48 | {
49 | string[] stmps = Regex.Replace(damage, @"\([a-zA-Z]+\)", "").Split(',');
50 | for (int t = 0; t < stmps.Length; t++)
51 | {
52 | string[] maidps = (stmps[t] ?? "").Trim().Split('-');
53 | if (maidps.Length == 2)
54 | dps += double.Parse(maidps[0].Trim()) + double.Parse(maidps[1].Trim());
55 | }
56 | }
57 | catch { }
58 | return dps;
59 | }
60 |
61 | private string SendHTTP(string entity, string urlString, int timeout = 5)
62 | {
63 | string result = "";
64 |
65 | try
66 | {
67 | // WebClient 코드는 테스트할게 있어 만들어둔 코드...
68 | if (timeout == 0)
69 | {
70 | using (WebClient webClient = new WebClient())
71 | {
72 | webClient.Encoding = UTF8Encoding.UTF8;
73 |
74 | if (entity == null)
75 | {
76 | result = webClient.DownloadString(urlString);
77 | }
78 | else
79 | {
80 | webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
81 | result = webClient.UploadString(urlString, entity);
82 | }
83 | }
84 | }
85 | else
86 | {
87 | HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(urlString));
88 | request.Timeout = timeout * 1000;
89 | request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; // SGS Galaxy
90 |
91 | if (entity == null)
92 | {
93 | request.Method = WebRequestMethods.Http.Get;
94 | }
95 | else
96 | {
97 | request.Accept = "application/json";
98 | request.ContentType = "application/json";
99 | request.Headers.Add("Content-Encoding", "utf-8");
100 | request.Method = WebRequestMethods.Http.Post;
101 |
102 | byte[] data = Encoding.UTF8.GetBytes(entity);
103 | request.ContentLength = data.Length;
104 | request.GetRequestStream().Write(data, 0, data.Length);
105 | }
106 |
107 | using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
108 | using (StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
109 | {
110 | result = streamReader.ReadToEnd();
111 | }
112 | }
113 | }
114 | catch (Exception ex)
115 | {
116 | Console.WriteLine(ex.Message);
117 | return null;
118 | }
119 |
120 | return result;
121 | }
122 | }
123 |
124 | internal static class Native
125 | {
126 | [DllImport("user32.dll")] internal static extern IntPtr SetClipboardViewer(IntPtr hWnd);
127 |
128 | [DllImport("user32.dll")] internal static extern bool ChangeClipboardChain(IntPtr hWnd, IntPtr hWndNext);
129 |
130 | internal const int WM_DRAWCLIPBOARD = 0x0308;
131 | internal const int WM_CHANGECBCHAIN = 0x030D;
132 |
133 | [DllImport("user32.dll", CharSet = CharSet.Unicode)] internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
134 |
135 | [DllImport("user32.dll", CharSet = CharSet.Unicode)] internal static extern IntPtr FindWindowEx(IntPtr parenthWnd, IntPtr childAfter, string lpClassName, string lpWindowName);
136 |
137 | [DllImport("user32.dll")] internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
138 |
139 | [DllImport("user32.dll")] internal static extern IntPtr GetForegroundWindow();
140 |
141 | [DllImport("user32.dll")] internal static extern bool SetForegroundWindow(IntPtr hWnd);
142 |
143 | internal const int GWL_EXSTYLE = -20;
144 | internal const int WS_EX_NOACTIVATE = 0x08000000;
145 |
146 | [DllImport("user32.dll")] internal static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
147 |
148 | [DllImport("user32.dll")] internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);
149 |
150 | [DllImport("user32.dll")] internal static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
151 |
152 | [DllImport("user32.dll")] internal static extern bool UnregisterHotKey(IntPtr hWnd, int id);
153 |
154 | /*
155 | [DllImport("user32.dll")] internal static extern uint GetWindowThreadProcessId(IntPtr hwnd, IntPtr proccess);
156 | [DllImport("user32.dll")] internal static extern IntPtr GetKeyboardLayout(uint thread);
157 | */
158 |
159 | [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] internal static extern IntPtr GetModuleHandle(string lpModuleName);
160 |
161 | internal const int WH_MOUSE_LL = 14;
162 |
163 | internal delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);
164 |
165 | [DllImport("user32.dll")] internal static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);
166 |
167 | [DllImport("user32.dll")] internal static extern bool UnhookWindowsHookEx(IntPtr hhk);
168 |
169 | [DllImport("user32.dll")] internal static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
170 |
171 | [DllImport("user32.dll")] internal static extern short GetKeyState(int nVirtKey);
172 | }
173 |
174 | internal static class MouseHook
175 | {
176 | internal static event EventHandler MouseAction = delegate { };
177 |
178 | internal static void Start()
179 | {
180 | if (_hookID != IntPtr.Zero)
181 | Stop();
182 |
183 | _hookID = SetHook(_proc);
184 | }
185 |
186 | internal static void Stop()
187 | {
188 | try
189 | {
190 | Native.UnhookWindowsHookEx(_hookID);
191 | _hookID = IntPtr.Zero;
192 | }
193 | catch (Exception)
194 | {
195 | }
196 | }
197 |
198 | private static Native.LowLevelMouseProc _proc = HookCallback;
199 | private static IntPtr _hookID = IntPtr.Zero;
200 |
201 | private static IntPtr SetHook(Native.LowLevelMouseProc proc)
202 | {
203 | using (Process curProcess = Process.GetCurrentProcess())
204 | using (ProcessModule curModule = curProcess.MainModule)
205 | {
206 | return Native.SetWindowsHookEx(Native.WH_MOUSE_LL, proc, Native.GetModuleHandle(curModule.ModuleName), 0);
207 | }
208 | }
209 |
210 | private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
211 | {
212 | if (nCode >= 0)
213 | {
214 | if (MouseMessages.WM_MOUSEWHEEL == (MouseMessages)wParam && (Native.GetKeyState(VK_CONTROL) & 0x100) != 0)
215 | {
216 | if (Native.GetForegroundWindow().Equals(Native.FindWindow(Restr.PoeClass, Restr.PoeCaption)))
217 | {
218 | try
219 | {
220 | MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
221 | int GET_WHEEL_DELTA_WPARAM = (short)(hookStruct.mouseData >> 0x10); // HIWORD
222 | MouseEventArgs mouseEventArgs = new MouseEventArgs();
223 | mouseEventArgs.zDelta = GET_WHEEL_DELTA_WPARAM;
224 | mouseEventArgs.x = hookStruct.pt.x;
225 | mouseEventArgs.y = hookStruct.pt.y;
226 | MouseAction(null, mouseEventArgs);
227 | }
228 | catch { }
229 | return new IntPtr(1);
230 | }
231 | }
232 |
233 | MainWindow.MouseHookCallbackTime = Convert.ToDateTime(DateTime.Now);
234 | }
235 | return Native.CallNextHookEx(_hookID, nCode, wParam, lParam);
236 | }
237 |
238 | private const int VK_CONTROL = 0x11;
239 |
240 | public class MouseEventArgs : EventArgs
241 | {
242 | public int zDelta { get; set; }
243 | public int x { get; set; }
244 | public int y { get; set; }
245 | }
246 |
247 | private enum MouseMessages
248 | {
249 | WM_LBUTTONDOWN = 0x0201,
250 | WM_LBUTTONUP = 0x0202,
251 | WM_MOUSEMOVE = 0x0200,
252 | WM_MOUSEWHEEL = 0x020A,
253 | WM_RBUTTONDOWN = 0x0204,
254 | WM_RBUTTONUP = 0x0205
255 | }
256 |
257 | [StructLayout(LayoutKind.Sequential)]
258 | private struct POINT
259 | {
260 | public int x;
261 | public int y;
262 | }
263 |
264 | [StructLayout(LayoutKind.Sequential)]
265 | private struct MSLLHOOKSTRUCT
266 | {
267 | public POINT pt;
268 | public uint mouseData;
269 | public uint flags;
270 | public uint time;
271 | public IntPtr dwExtraInfo;
272 | }
273 | }
274 |
275 | internal static class Json
276 | {
277 | internal static string Serialize(object obj) where T : class
278 | {
279 | DataContractJsonSerializer dcsJson = new DataContractJsonSerializer(typeof(T));
280 | MemoryStream mS = new MemoryStream();
281 | dcsJson.WriteObject(mS, obj);
282 | var json = mS.ToArray();
283 | mS.Close();
284 | return Encoding.UTF8.GetString(json, 0, json.Length);
285 | }
286 |
287 | internal static T Deserialize(string strData) where T : class
288 | {
289 | DataContractJsonSerializer dcsJson = new DataContractJsonSerializer(typeof(T));
290 | byte[] byteArray = Encoding.UTF8.GetBytes(strData);
291 | MemoryStream mS = new MemoryStream(byteArray);
292 | T tRet = dcsJson.ReadObject(mS) as T;
293 | mS.Dispose();
294 | return (tRet);
295 | }
296 | }
297 | }
--------------------------------------------------------------------------------
/Icon1.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/redSol/PoeTradeSearchEN/8103c5069c16b14b4b66f07dfc7c6232aa053f20/Icon1.ico
--------------------------------------------------------------------------------
/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 | 0
15 |
16 |
17 |
18 |
19 | 0
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
39 |
40 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
60 |
61 |
62 |
63 |
64 |
65 | 0
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | 0
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 | 0
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | 0
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | 0
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 | 0
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | 0
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 | 0
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | 0
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 | 0
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 | 0
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 | 0
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 | 0
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 | 0
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 | 0
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
331 |
332 |
333 |
334 |
--------------------------------------------------------------------------------
/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Diagnostics;
5 | using System.Drawing;
6 | using System.Globalization;
7 | using System.IO;
8 | using System.Text.RegularExpressions;
9 | using System.Threading;
10 | using System.Windows;
11 | using System.Windows.Controls;
12 | using System.Windows.Controls.Primitives;
13 | using System.Windows.Input;
14 | using System.Windows.Interop;
15 | using System.Windows.Threading;
16 |
17 | namespace PoeTradeSearch
18 | {
19 | ///
20 | /// MainWindow.xaml에 대한 상호 작용 논리
21 | ///
22 | public partial class MainWindow : Window
23 | {
24 | private List mBaseDatas = null;
25 | private List mWordDatas = null;
26 | private List mProphecyDatas = null;
27 | private List mMonsterDatas = null;
28 |
29 | private ConfigData mConfigData;
30 | private FilterData mFilterData;
31 |
32 | private ItemBaseName mItemBaseName;
33 |
34 | private System.Windows.Forms.NotifyIcon TrayIcon;
35 |
36 | private bool mTerminate = false;
37 | private bool mDisableClip = false;
38 | private bool mAdministrator = false;
39 | private bool mCreateDatabase = false;
40 |
41 | private static bool mIsHotKey = false;
42 | public static bool mIsPause = false;
43 |
44 | public static DateTime MouseHookCallbackTime;
45 |
46 | public MainWindow()
47 | {
48 | InitializeComponent();
49 |
50 | Uri uri = new Uri("pack://application:,,,/PoeTradeSearch;component/Icon1.ico");
51 | using (Stream iconStream = Application.GetResourceStream(uri).Stream)
52 | {
53 | TrayIcon = new System.Windows.Forms.NotifyIcon
54 | {
55 | Icon = new Icon(iconStream),
56 | Visible = true
57 | };
58 |
59 | TrayIcon.MouseClick += (sender, args) =>
60 | {
61 | switch (args.Button)
62 | {
63 | case System.Windows.Forms.MouseButtons.Left:
64 | break;
65 |
66 | case System.Windows.Forms.MouseButtons.Right:
67 | if (
68 | MessageBox.Show(
69 | "Do you want to close the program?", "POE Trade Search",
70 | MessageBoxButton.YesNo, MessageBoxImage.Question
71 | ) == MessageBoxResult.Yes
72 | )
73 | {
74 | //Application.Current.Shutdown();
75 | mTerminate = true;
76 | Close();
77 | }
78 | break;
79 | }
80 | };
81 | }
82 |
83 | mAdministrator = IsAdministrator();
84 |
85 | string[] clArgs = Environment.GetCommandLineArgs();
86 |
87 | if (clArgs.Length > 1)
88 | {
89 | mCreateDatabase = clArgs[1].ToLower() == "-createdatabase";
90 | }
91 | }
92 |
93 | private static IntPtr mMainHwnd;
94 | private static int closeKeyCode = 0;
95 |
96 | private void Window_Loaded(object sender, RoutedEventArgs e)
97 | {
98 | if (!Setting())
99 | {
100 | Application.Current.Shutdown();
101 | return;
102 | }
103 |
104 | Restr.ServerType = Restr.ServerType == "" ? mConfigData.Options.League : Restr.ServerType;
105 | Restr.ServerType = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Restr.ServerType.ToLower()).Replace(" ", "%20");
106 | Restr.ServerLang = (byte)(mConfigData.Options.Server == "en" ? 1 : 0);
107 |
108 | ComboBox[] cbs = { cbOrbs, cbSplinters , cbCorrupt, cbPriceListCount, cbInfluence1, cbInfluence2 };
109 | foreach(ComboBox cb in cbs)
110 | {
111 | ControlTemplate ct = cb.Template;
112 | Popup popup = ct.FindName("PART_Popup", cb) as Popup;
113 | if (popup != null)
114 | popup.Placement = PlacementMode.Top;
115 | }
116 |
117 | int cnt = 0;
118 | cbOrbs.Items.Add("Select the orbs you want to exchange");
119 | cbSplinters.Items.Add("Select the fossils, splinters you want");
120 | foreach (KeyValuePair item in Restr.lExchangeCurrency)
121 | {
122 | if (item.Key == "Blacksmith Whetstone")
123 | break;
124 |
125 | if (cnt++ > 33)
126 | cbSplinters.Items.Add(item.Key);
127 | else
128 | cbOrbs.Items.Add(item.Key);
129 | }
130 |
131 | mMainHwnd = new WindowInteropHelper(this).Handle;
132 |
133 | if (mAdministrator)
134 | {
135 | foreach (var item in mConfigData.Shortcuts)
136 | {
137 | if (item.Keycode > 0 && (item.Value ?? "") != "")
138 | {
139 | if (!mDisableClip && item.Value.ToLower() == "{run}")
140 | mDisableClip = true;
141 | else if (item.Value.ToLower() == "{close}")
142 | closeKeyCode = item.Keycode;
143 | }
144 | }
145 | }
146 |
147 | HwndSource source = HwndSource.FromHwnd(mMainHwnd);
148 | source.AddHook(new HwndSourceHook(WndProc));
149 |
150 | string tmp = "Program version " + GetFileVersion() + " 을(를) 시작합니다." + '\n' + '\n' +
151 | "* Usage: In game press Ctrl + C on an in-game item." + '\n' + "* To close the program, right click on the tray icon." + '\n' + '\n' +
152 | (mAdministrator ? "Additional shortcuts have been enabled" : "To use the additional shortcuts, the program must be ran as administrator") + "";
153 |
154 | if (mConfigData.Options.CheckUpdates && CheckUpdates())
155 | {
156 | MessageBoxResult result = MessageBox.Show(Application.Current.MainWindow,
157 | tmp + '\n' + '\n' + "The latest version of this program has been found." + '\n' + "Would you like to get that verison now?",
158 | "POE 거래소 검색", MessageBoxButton.YesNo, MessageBoxImage.Question
159 | );
160 |
161 | if (result == MessageBoxResult.Yes)
162 | {
163 | Process.Start("https://github.com/redSol/PoeTradeSearchEN/releases");
164 | mTerminate = true;
165 | Close();
166 | }
167 | }
168 | else
169 | {
170 | if (!mConfigData.Options.DisableStartupMessage)
171 | MessageBox.Show(Application.Current.MainWindow, tmp + '\n' + "Press the top of the program (?) for more information.", "POETradeSearch - created by phiDelPark");
172 | }
173 |
174 | if (!mDisableClip)
175 | {
176 | IntPtr mNextClipBoardViewerHWnd = Native.SetClipboardViewer(new WindowInteropHelper(this).Handle);
177 | }
178 |
179 | if (mAdministrator)
180 | {
181 | //InstallRegisterHotKey();
182 |
183 | // 창 활성화 후킹 사용시 가끔 꼬여서 타이머로 교체 (타이머를 쓰면 다른 목적으로 사용도 가능하고...)
184 | //EventHook.EventAction += new EventHandler(WinEvent);
185 | //EventHook.Start();
186 |
187 | DispatcherTimer timer = new DispatcherTimer();
188 | timer.Interval = TimeSpan.FromMilliseconds(1000);
189 | timer.Tick += new EventHandler(Timer_Tick);
190 | timer.Start();
191 |
192 | if (mConfigData.Options.CtrlWheel)
193 | {
194 | MouseHookCallbackTime = Convert.ToDateTime(DateTime.Now);
195 | MouseHook.MouseAction += new EventHandler(MouseEvent);
196 | MouseHook.Start();
197 | }
198 | }
199 |
200 | this.Title += " - " + Restr.ServerType;
201 | this.Visibility = Visibility.Hidden;
202 | }
203 |
204 | private void Window_Activated(object sender, EventArgs e)
205 | {
206 | Activate();
207 | }
208 |
209 | private void Window_Deactivated(object sender, EventArgs e)
210 | {
211 | WindowInteropHelper helper = new WindowInteropHelper(this);
212 | long ip = Native.SetWindowLong(
213 | helper.Handle,
214 | Native.GWL_EXSTYLE,
215 | Native.GetWindowLong(helper.Handle, Native.GWL_EXSTYLE) | Native.WS_EX_NOACTIVATE
216 | );
217 | btnClose.Background = btnSearch.Background;
218 | btnClose.Foreground = btnSearch.Foreground;
219 | }
220 |
221 | private void TbOpt0_0_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
222 | {
223 | if (!this.IsFocused)
224 | {
225 | WindowInteropHelper helper = new WindowInteropHelper(this);
226 | long ip = Native.SetWindowLong(
227 | helper.Handle,
228 | Native.GWL_EXSTYLE,
229 | Native.GetWindowLong(helper.Handle, Native.GWL_EXSTYLE) & ~Native.WS_EX_NOACTIVATE
230 | );
231 | Native.SetForegroundWindow(helper.Handle);
232 | btnClose.Background = System.Windows.SystemColors.HighlightBrush;
233 | btnClose.Foreground = System.Windows.SystemColors.HighlightTextBrush;
234 | }
235 | }
236 |
237 | private void Button_Click(object sender, RoutedEventArgs e)
238 | {
239 | string sEntity;
240 | string url = "";
241 | string[] exchange = null;
242 | string accountState = (string)cbAccountState.SelectedValue;
243 |
244 | if (bdExchange.Visibility == Visibility.Visible && (cbOrbs.SelectedIndex > 0 || cbSplinters.SelectedIndex > 0))
245 | {
246 | exchange = new string[2];
247 | exchange[0] = Restr.lExchangeCurrency[mItemBaseName.TypeEN];
248 | exchange[1] = Restr.lExchangeCurrency[(string)(cbOrbs.SelectedIndex > 0 ? cbOrbs.SelectedValue : cbSplinters.SelectedValue)];
249 | int minimumStock = int.Parse(tbPriceMinStock.Text);
250 | url = Restr.ExchangeApi[Restr.ServerLang] + Restr.ServerType + "/?redirect&source=";
251 | url += Uri.EscapeDataString("{\"exchange\":{\"status\":{\"option\":\"" + accountState + "\"},\"have\":[\"" + exchange[0] + "\"],\"want\":[\"" + exchange[1] + "\"],\"minimum\":"+ minimumStock + "}}");
252 | Process.Start(url);
253 | }
254 | else
255 | {
256 | sEntity = CreateJson(GetItemOptions(), false, accountState);
257 |
258 | if (sEntity == null || sEntity == "")
259 | {
260 | ForegroundMessage("Json 생성을 실패했습니다.", "에러", MessageBoxButton.OK, MessageBoxImage.Error);
261 | return;
262 | }
263 |
264 | if (mConfigData.Options.ServerRedirect)
265 | {
266 | url = Restr.TradeApi[Restr.ServerLang] + Restr.ServerType + "/?redirect&source=";
267 | url += Uri.EscapeDataString(sEntity);
268 | Process.Start(url);
269 | }
270 | else
271 | {
272 | string sResult = null;
273 |
274 | // 마우스 훜시 프로그램에 딜레이가 생겨 쓰레드 처리
275 | Thread thread = new Thread(() =>
276 | {
277 | sResult = SendHTTP(sEntity, Restr.TradeApi[Restr.ServerLang] + Restr.ServerType, mConfigData.Options.ServerTimeout);
278 | if ((sResult ?? "") != "")
279 | {
280 | try
281 | {
282 | ResultData resultData = Json.Deserialize(sResult);
283 | url = Restr.TradeUrl[Restr.ServerLang] + Restr.ServerType + "/" + resultData.ID;
284 | Process.Start(url);
285 | }
286 | catch { }
287 | }
288 | });
289 |
290 | thread.Start();
291 | thread.Join();
292 |
293 | if ((sResult ?? "") == "")
294 | {
295 | ForegroundMessage(
296 | "Server cannot be connected right now.",
297 | "Search failed",
298 | MessageBoxButton.OK, MessageBoxImage.Information
299 | );
300 | return;
301 | }
302 | }
303 | }
304 |
305 | Hide();
306 | }
307 |
308 | private void Button_Click_1(object sender, RoutedEventArgs e)
309 | {
310 | this.Close();
311 | }
312 |
313 | private void cbAiiCheck_Checked(object sender, RoutedEventArgs e)
314 | {
315 | bool is_checked = e.RoutedEvent.Name == "Checked";
316 |
317 | for (int i = 0; i < 10; i++)
318 | {
319 | if (((CheckBox)this.FindName("tbOpt" + i + "_2")).IsEnabled == true)
320 | ((CheckBox)this.FindName("tbOpt" + i + "_2")).IsChecked = is_checked;
321 | }
322 | }
323 |
324 | private void TbOpt0_3_Checked(object sender, RoutedEventArgs e)
325 | {
326 | string idx = (string)((CheckBox)sender).Tag;
327 | ((TextBox)this.FindName("tbOpt" + idx)).Tag = ((TextBox)this.FindName("tbOpt" + idx)).Text;
328 | ((TextBox)this.FindName("tbOpt" + idx)).Text = Restr.TotalResistance;
329 | }
330 |
331 | private void TbOpt0_3_Unchecked(object sender, RoutedEventArgs e)
332 | {
333 | string idx = (string)((CheckBox)sender).Tag;
334 | ((TextBox)this.FindName("tbOpt" + idx)).Text = (string)((TextBox)this.FindName("tbOpt" + idx)).Tag;
335 | }
336 |
337 | private void Button_Click_2(object sender, RoutedEventArgs e)
338 | {
339 | Restr.ServerLang = byte.Parse((string)((Button)sender).Tag);
340 |
341 | if (Restr.ServerLang == 0)
342 | cbName.Content = (Regex.Replace(mItemBaseName.NameKR, @"\([a-zA-Z\s']+\)$", "") + " " + Regex.Replace(mItemBaseName.TypeKR, @"\([a-zA-Z\s']+\)$", "")).Trim();
343 | else
344 | cbName.Content = (mItemBaseName.NameEN + " " + mItemBaseName.TypeEN).Trim();
345 |
346 | SetSearchButtonText();
347 | }
348 |
349 | private void CbOrbs_SelectionChanged(object sender, SelectionChangedEventArgs e)
350 | {
351 | if (((ComboBox)sender).Name == "cbOrbs")
352 | {
353 | cbSplinters.SelectionChanged -= CbOrbs_SelectionChanged;
354 | cbSplinters.SelectedIndex = 0;
355 | cbSplinters.SelectionChanged += CbOrbs_SelectionChanged;
356 | cbSplinters.FontWeight = FontWeights.Normal;
357 | }
358 | else
359 | {
360 | cbOrbs.SelectionChanged -= CbOrbs_SelectionChanged;
361 | cbOrbs.SelectedIndex = 0;
362 | cbOrbs.SelectionChanged += CbOrbs_SelectionChanged;
363 | cbOrbs.FontWeight = FontWeights.Normal;
364 | }
365 |
366 | ((ComboBox)sender).FontWeight = ((ComboBox)sender).SelectedIndex == 0 ? FontWeights.Normal : FontWeights.SemiBold;
367 |
368 | SetSearchButtonText();
369 | TkPrice_MouseLeftButtonDown(null, null);
370 | }
371 |
372 | private void TkPrice_Mouse_EnterOrLeave(object sender, System.Windows.Input.MouseEventArgs e)
373 | {
374 | tkPriceInfo1.Foreground = tkPriceInfo2.Foreground = e.RoutedEvent.Name == "MouseEnter" ? System.Windows.SystemColors.HighlightBrush : System.Windows.SystemColors.WindowTextBrush;
375 | tkPriceCount1.Foreground = tkPriceCount2.Foreground = e.RoutedEvent.Name == "MouseEnter" ? System.Windows.SystemColors.HighlightBrush : System.Windows.SystemColors.WindowTextBrush;
376 | }
377 |
378 | private void TkPrice_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
379 | {
380 | string[] exchange = null;
381 |
382 | if (bdExchange.Visibility == Visibility.Visible && (cbOrbs.SelectedIndex > 0 || cbSplinters.SelectedIndex > 0))
383 | {
384 | exchange = new string[2];
385 | exchange[0] = Restr.lExchangeCurrency[mItemBaseName.TypeEN];
386 | exchange[1] = Restr.lExchangeCurrency[(string)(cbOrbs.SelectedIndex > 0 ? cbOrbs.SelectedValue : cbSplinters.SelectedValue)];
387 | lbBuyPay.Content = "Buy <= Pay";
388 | }
389 | lbPriceMinStock.Visibility = Visibility.Visible;
390 | tbPriceMinStock.Visibility = Visibility.Visible;
391 | tbPriceMinStock.IsEnabled = true;
392 |
393 |
394 | PriceUpdateThreadWorker(exchange != null ? null : GetItemOptions(), exchange, (string)cbAccountState.SelectedValue, int.Parse(tbPriceMinStock.Text));
395 | }
396 |
397 | private void tkPriceInfo_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
398 | {
399 | tabControl1.SelectedIndex = tabControl1.SelectedIndex == 0 ? 1 : 0;
400 | }
401 |
402 | private void cbName_Checked(object sender, RoutedEventArgs e)
403 | {
404 | cbName.Foreground = cbName.IsChecked == true ? lbDPS.Foreground : tbHelpText.Foreground;
405 | tkPrice_ReSet(null, null);
406 | }
407 |
408 | private void tkPrice_ReSet(object sender, RoutedEventArgs e)
409 | {
410 | try
411 | {
412 | tkPriceInfo1.Foreground = tkPriceInfo2.Foreground = System.Windows.Media.Brushes.DeepPink;
413 | tkPriceCount1.Foreground = tkPriceCount2.Foreground = System.Windows.Media.Brushes.DeepPink;
414 | }
415 | catch (Exception)
416 | {
417 | }
418 | }
419 |
420 | private void tbOpt0_Checked(object sender, RoutedEventArgs e)
421 | {
422 | if (mConfigData.Options.UpdatePriceOnChecked)
423 | {
424 | try
425 | {
426 | PriceUpdateThreadWorker(GetItemOptions(), null, (string)cbAccountState.SelectedValue, 0);
427 | }
428 | catch (Exception)
429 | {
430 | }
431 | }
432 | }
433 |
434 | private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
435 | {
436 | cbPriceListTotal.Visibility = tabControl1.SelectedIndex == 1 ? Visibility.Visible : Visibility.Hidden;
437 | tbHelpText.Text = tabControl1.SelectedIndex == 1 ? "Minimum value unit is Chaos Orb" : "Click on price to re-search";
438 | }
439 |
440 | private void Button_Click_4(object sender, RoutedEventArgs e)
441 | {
442 | try
443 | {
444 | Process.Start(
445 | "https://pathofexile.gamepedia.com/" +
446 | ((string)cbRarity.SelectedValue == Restr.Unique && mItemBaseName.NameEN != ""
447 | ? mItemBaseName.NameEN : mItemBaseName.TypeEN).Replace(' ', '_')
448 | );
449 | }
450 | catch (Exception)
451 | {
452 | ForegroundMessage("Failed to link to item's wiki.", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
453 | }
454 | }
455 |
456 |
457 |
458 | private void Button_Click_3(object sender, RoutedEventArgs e)
459 | {
460 | MessageBox.Show(Application.Current.MainWindow,
461 | "Version: " + GetFileVersion() + " (D." + mConfigData.Options.DataVersion + ")" + '\n' + '\n' +
462 | "English Version: https://github.com/redSol/PoeTradeSearchEN" + '\n' + '\n' +
463 | "Original project: https://github.com/phiDelPark/PoeTradeSearch" + '\n' + '\n' + '\n' +
464 | "Mod selection can be configured in the config file." + '\n' + '\n' +
465 | "Additional hotkeys such as ctrl + mousewheel can be activated by running the program as administrator." + '\n' +
466 | "Program settings can be set in the config file located in the _POE_Data folder.",
467 | "POE Trade Search"
468 | );
469 |
470 | Native.SetForegroundWindow(Native.FindWindow(Restr.PoeClass, Restr.PoeCaption));
471 | }
472 |
473 | private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
474 | {
475 | if (closeKeyCode > 0 && KeyInterop.VirtualKeyFromKey(e.Key) == closeKeyCode)
476 | Close();
477 | }
478 |
479 | private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
480 | {
481 | e.Cancel = !mTerminate;
482 |
483 | Keyboard.ClearFocus();
484 | this.Visibility = Visibility.Hidden;
485 | }
486 |
487 | private void Window_Closed(object sender, EventArgs e)
488 | {
489 | if (mAdministrator && mConfigData != null)
490 | {
491 | if (mIsHotKey)
492 | RemoveRegisterHotKey();
493 |
494 | if (mConfigData.Options.CtrlWheel)
495 | MouseHook.Stop();
496 | }
497 |
498 | TrayIcon.Visible = false;
499 | TrayIcon.Dispose();
500 | }
501 |
502 | private void Button_Click_5(object sender, RoutedEventArgs e)
503 | {
504 | try
505 | {
506 | string tab = "";
507 | string itemRarity = cbRarity.Text;
508 | string itemName = (mItemBaseName.NameEN != "" ? mItemBaseName.NameEN : mItemBaseName.TypeEN).Replace(" ", "-").Replace("'", "").ToLower();
509 | string itemBaseType = mItemBaseName.TypeEN.Replace(" ", "-").Replace("'", "").ToLower();
510 | string itemInherit = mItemBaseName.Inherits[0].ToLower();
511 | bool useBase = false, useName = false;
512 | switch (itemInherit)
513 | {
514 | case "currency":
515 | {
516 | if (itemName.Contains("oil"))
517 | tab = "oils";
518 | else if (itemName.Contains("fossil"))
519 | tab = "fossils";
520 | else if (itemName.Contains("essence"))
521 | tab = "essences";
522 | else
523 | tab = "currency";
524 | useBase = true;
525 |
526 | break;
527 | }
528 | case "mapfragments":
529 | {
530 | if (itemName.Contains("scarab"))
531 | tab = "scarabs";
532 | else
533 | tab = "fragments";
534 | useBase = true;
535 | break;
536 | }
537 | case "atlasupgrades":
538 | {
539 | tab = "watchstones";
540 | useBase = true;
541 | useName = true;
542 | break;
543 | }
544 | case "legion":
545 | {
546 | tab = "incubators";
547 | useBase = true;
548 | break;
549 | }
550 | case "delve":
551 | {
552 | tab = "resonators";
553 | useBase = true;
554 | break;
555 | }
556 | case "divinationcards":
557 | {
558 | tab = "divinationcards";
559 | useBase = true;
560 | break;
561 | }
562 | case "prophecies":
563 | {
564 | tab = "prophecies";
565 | useBase = true;
566 | break;
567 | }
568 | case "gems":
569 | {
570 | tab = "skill-gems";
571 | useBase = true;
572 | break;
573 | }
574 | case "maps":
575 | {
576 | if (itemRarity == "Unique")
577 | {
578 | tab = "unique-maps/" + itemName + "-t" + tbLvMin.Text.Trim();
579 | } else
580 | {
581 | tab = "maps/" + itemBaseType + "-t" + tbLvMin.Text.Trim() + "-metamorph";
582 | }
583 | break;
584 | }
585 | case "jewels":
586 | {
587 | tab = "unique-jewels";
588 | useBase = true;
589 | useName = true;
590 | break;
591 | }
592 | case "flasks":
593 | {
594 | tab = "unique-flasks";
595 | useName = true;
596 | break;
597 | }
598 | case "weapons":
599 | {
600 | tab = "unique-weapons";
601 | useBase = true;
602 | useName = true;
603 | break;
604 | }
605 | case "armours":
606 | {
607 | tab = "unique-armours";
608 | useBase = true;
609 | useName = true;
610 | break;
611 | }
612 | case "amulets":
613 | case "rings":
614 | case "belts":
615 | {
616 | tab = "unique-accessories";
617 | useBase = true;
618 | useName = true;
619 | break;
620 | }
621 | }
622 |
623 | if (itemInherit != "maps" && itemInherit != "atlasupgrades")
624 | {
625 | if (useName && useBase)
626 | tab = tab + "/" + itemName + "-" + itemBaseType;
627 |
628 | else if (useName && !useBase)
629 | tab = tab + "/" + itemName;
630 |
631 | else if (!useName && useBase)
632 | tab = tab + "/" + itemBaseType;
633 |
634 | if (itemInherit == "gems")
635 | {
636 | if (int.Parse(tbLvMin.Text) == 1)
637 | tab = tab + "-1";
638 | else if (int.Parse(tbLvMin.Text) == 2)
639 | tab = tab + "-2";
640 | else if (int.Parse(tbLvMin.Text) == 3)
641 | tab = tab + "-3";
642 | else if (int.Parse(tbLvMin.Text) == 4)
643 | tab = tab + "-4";
644 | else if (int.Parse(tbLvMin.Text) == 20)
645 | tab = tab + "-20";
646 | else if (int.Parse(tbLvMin.Text) == 21)
647 | tab = tab + "-21";
648 |
649 | if (int.Parse(tbQualityMin.Text) == 20)
650 | tab = tab + "-20";
651 | else if (int.Parse(tbQualityMin.Text) == 21)
652 | tab = tab + "-23c";
653 | }
654 |
655 | if (itemName.Contains("a-master-seeks-help"))
656 | {
657 | tab = "prophecies?name=a master seeks help";
658 | }
659 | }
660 | Process.Start(
661 | ("https://poe.ninja/challenge/" + tab));
662 | }
663 | catch (Exception)
664 | {
665 | ForegroundMessage("Failed to link to item's poe.ninja page", "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
666 | }
667 | }
668 |
669 | private void SearchPoePricesBtn(object sender, RoutedEventArgs e)
670 | {
671 | string sResult = "";
672 |
673 | Thread thread = new Thread(() =>
674 | {
675 | sResult = SendHTTP(null, Restr.PoePriceApi + Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Restr.ModText)));
676 |
677 | });
678 | thread.Start();
679 | thread.Join();
680 | if (sResult != "")
681 | {
682 | var jsonData = JsonConvert.DeserializeObject(sResult);
683 | if (jsonData.Error == 0)
684 | {
685 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("Note: These prices may not be entirely accurate") });
686 | if (jsonData.Min != 0.0)
687 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("Min price: " + String.Format("{0:0.0}", jsonData.Min) + " " + jsonData.Currency) });
688 | if (jsonData.Max != 0.0)
689 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("Max price: " + String.Format("{0:0.0}", jsonData.Max) + " " + jsonData.Currency) });
690 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("Confidence score: " + String.Format("{0:0.00}", jsonData.PredConfidenceScore) + "%") });
691 | if (jsonData.PredExplantion != null)
692 | {
693 | foreach (var items in jsonData.PredExplantion)
694 | {
695 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("Mod: " + items[0] + ", " + String.Format("{0:0.00}", items[1])) });
696 | }
697 | }
698 |
699 | } else
700 | {
701 | liPoePriceInfo.Items.Add(new ListBoxItem { Content = ("There was an error: " + jsonData.ErrorMsg ) });
702 | }
703 | }
704 | }
705 | }
706 | }
707 |
--------------------------------------------------------------------------------
/PoeTradeSearch.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {58398A01-9050-45B4-A168-21DF9DDD6972}
8 | WinExe
9 | PoeTradeSearch
10 | PoeTradeSearch
11 | v4.6
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 | true
17 | false
18 |
19 | publish\
20 | true
21 | Disk
22 | false
23 | Foreground
24 | 7
25 | Days
26 | false
27 | false
28 | true
29 | 0
30 | 1.0.0.%2a
31 | false
32 | true
33 |
34 |
35 | AnyCPU
36 | true
37 | full
38 | false
39 | bin\Debug\
40 | DEBUG;TRACE
41 | prompt
42 | 4
43 | false
44 |
45 |
46 | AnyCPU
47 | pdbonly
48 | true
49 | bin\Release\
50 | TRACE
51 | prompt
52 | 4
53 | false
54 | false
55 |
56 |
57 | Icon1.ico
58 |
59 |
60 | false
61 |
62 |
63 | false
64 |
65 |
66 | B3F04B896BB47407C5E256F536371B530A0760F8
67 |
68 |
69 | phiDelSign.pfx
70 |
71 |
72 |
73 | LocalIntranet
74 |
75 |
76 | false
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 | 4.0
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | MSBuild:Compile
105 | Designer
106 |
107 |
108 |
109 |
110 |
111 |
112 | MSBuild:Compile
113 | Designer
114 |
115 |
116 | App.xaml
117 | Code
118 |
119 |
120 |
121 | MainWindow.xaml
122 | Code
123 |
124 |
125 | Designer
126 | MSBuild:Compile
127 |
128 |
129 |
130 |
131 | PopWindow.xaml
132 |
133 |
134 | Code
135 |
136 |
137 | True
138 | True
139 | Resources.resx
140 |
141 |
142 | True
143 | Settings.settings
144 | True
145 |
146 |
147 | ResXFileCodeGenerator
148 | Resources.Designer.cs
149 |
150 |
151 |
152 | SettingsSingleFileGenerator
153 | Settings.Designer.cs
154 |
155 |
156 |
157 |
158 | Designer
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | False
167 | Microsoft .NET Framework 4.7.2%28x86 및 x64%29
168 | true
169 |
170 |
171 | False
172 | .NET Framework 3.5 SP1
173 | false
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
--------------------------------------------------------------------------------
/PoeTradeSearch.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | publish\
5 |
6 |
7 |
8 |
9 |
10 | ko-KR
11 | false
12 |
13 |
14 | -createdatabase--
15 |
16 |
--------------------------------------------------------------------------------
/PoeTradeSearch.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29009.5
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoeTradeSearch", "PoeTradeSearch.csproj", "{58398A01-9050-45B4-A168-21DF9DDD6972}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {58398A01-9050-45B4-A168-21DF9DDD6972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {58398A01-9050-45B4-A168-21DF9DDD6972}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {58398A01-9050-45B4-A168-21DF9DDD6972}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {58398A01-9050-45B4-A168-21DF9DDD6972}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {9790D4FE-B884-45D1-B6FF-62EAF2895072}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/PopWindow.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/PopWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows;
3 | using System.Windows.Input;
4 | using System.Windows.Interop;
5 | using System.Windows.Media.Imaging;
6 |
7 | namespace PoeTradeSearch
8 | {
9 | ///
10 | /// PopWindow.xaml에 대한 상호 작용 논리
11 | ///
12 | public partial class PopWindow : Window
13 | {
14 | string JpgPath = "";
15 |
16 | public PopWindow(string jpgPath)
17 | {
18 | InitializeComponent();
19 |
20 | string path = System.IO.Path.GetFullPath("_POE_Data\\");
21 | JpgPath = path + jpgPath;
22 | }
23 |
24 | public static BitmapSource ConvertBitmapToDPI(BitmapImage bitmapImage, int dpi)
25 | {
26 | // 96 DPI standard.
27 | int width = bitmapImage.PixelWidth;
28 | int height = bitmapImage.PixelHeight;
29 |
30 | int stride = width * bitmapImage.Format.BitsPerPixel;
31 | byte[] pixelData = new byte[stride * height];
32 | bitmapImage.CopyPixels(pixelData, stride, 0);
33 |
34 | return BitmapSource.Create(width, height, dpi, dpi, bitmapImage.Format, null, pixelData, stride);
35 | }
36 |
37 | private void Window_Loaded(object sender, RoutedEventArgs e)
38 | {
39 | imJpg.Source = ConvertBitmapToDPI(new BitmapImage(new Uri(JpgPath)), 96);
40 | Window_Deactivated(null, new EventArgs());
41 | }
42 |
43 | private void Image_MouseDown(object sender, MouseButtonEventArgs e)
44 | {
45 | Close();
46 | }
47 |
48 | private void Window_Deactivated(object sender, EventArgs e)
49 | {
50 | WindowInteropHelper helper = new WindowInteropHelper(this);
51 | long ip = Native.SetWindowLong(helper.Handle,
52 | Native.GWL_EXSTYLE,
53 | Native.GetWindowLong(helper.Handle, Native.GWL_EXSTYLE) | Native.WS_EX_NOACTIVATE
54 | );
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
8 | // 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
9 | // 이러한 특성 값을 변경하세요.
10 | [assembly: AssemblyTitle("POE TradeSearch")]
11 | [assembly: AssemblyDescription("POE 아이템을 거래소에서 검색할 수 있게 도와주는 프로그램")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("")]
14 | [assembly: AssemblyProduct("PoeTradeSearch")]
15 | [assembly: AssemblyCopyright("Copyright © 2019 phiDel")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
20 | // 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
21 | // 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
22 | [assembly: ComVisible(false)]
23 |
24 | //지역화 가능 애플리케이션 빌드를 시작하려면 다음을 설정하세요.
25 | //.csproj 파일에서 내에 CultureYouAreCodingWith를
26 | //설정하십시오. 예를 들어 소스 파일에서 영어(미국)를
27 | //사용하는 경우 를 en-US로 설정합니다. 그런 다음 아래
28 | //NeutralResourceLanguage 특성의 주석 처리를 제거합니다. 아래 줄의 "en-US"를 업데이트하여
29 | //프로젝트 파일의 UICulture 설정과 일치시킵니다.
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //테마별 리소스 사전의 위치
36 | //(페이지 또는 응용 프로그램 리소스 사진에
37 | // 리소스가 없는 경우에 사용됨)
38 | ResourceDictionaryLocation.SourceAssembly //제네릭 리소스 사전의 위치
39 | //(페이지 또는 응용 프로그램 리소스 사진에
40 | // 리소스가 없는 경우에 사용됨)
41 | )]
42 |
43 |
44 | // 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
45 | //
46 | // 주 버전
47 | // 부 버전
48 | // 빌드 번호
49 | // 수정 버전
50 | //
51 | // 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
52 | // 기본값으로 할 수 있습니다.
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.0.0.0")]
55 | [assembly: AssemblyFileVersion("3.9.2.8")]
56 |
--------------------------------------------------------------------------------
/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 이 코드는 도구를 사용하여 생성되었습니다.
4 | // 런타임 버전:4.0.30319.42000
5 | //
6 | // 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7 | // 이러한 변경 내용이 손실됩니다.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace PoeTradeSearch.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
17 | ///
18 | // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
19 | // 클래스에서 자동으로 생성되었습니다.
20 | // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
21 | // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PoeTradeSearch.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
51 | /// 재정의합니다.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 이 코드는 도구를 사용하여 생성되었습니다.
4 | // 런타임 버전:4.0.30319.42000
5 | //
6 | // 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
7 | // 이러한 변경 내용이 손실됩니다.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace PoeTradeSearch.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.2.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Properties/app.manifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
48 |
55 |
56 |
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is the translated version of PoeTradeSearch created by phiDelPark
2 |
3 | Original Source:
4 | https://github.com/phiDelPark/PoeTradeSearch
5 |
6 | Usage: Ctrl+C on an item to price check
7 |
8 | Additional shortcuts are located in the config file
9 |
10 | Features:
11 | - Fetches prices from official pathofexile api
12 | - Has an advanced item search, can edit min and max values
13 | - Has a currency exchange search
14 | -> Preview: https://i.gyazo.com/4acb48d4dcef6e2d7957922bc59403be.png
15 | - Has a dangerous map mod checker, will highlight mods in red if the mod is set in the config file
16 | -> Example: https://i.gyazo.com/b9fe5b00eb17c75a4eff10efb1cd9142.png
17 | - Has hotkeys for quality of life uses, such as ctrl + scroll wheel for stash tabs, /hideout, /oos, /kick charactername, a fast invite macro, and more which are customizable
18 | - Has a poeprices.info tab for rare items
19 | - Can show price results in the UI instead of opening browser, but also has the ability to open the item you are searching in browser
20 |
21 | And more
22 |
23 |
24 | need atleast .net 4.6 framework for program to work
25 |
26 | https://dotnet.microsoft.com/download/dotnet-framework
27 |
28 | Config.txt
29 | ```
30 | {
31 | "options":{
32 | "league":"Metamorph", //League name ["Metamorph", "Hardcore Metamorph", "Standard", "Hardcore"]
33 | "server":"en",
34 | "server_timeout":5, //Server connection wait time (seconds) If the Internet is slow, raise it further to prevent timeout
35 | "server_redirect":false, //Used when you cannot access the server
36 | "search_by_type":false, //Search by type, not by item name. (Magic and rare equipment only)
37 | "search_before_day":0, //[0, 1, 3, 7, 14] - 0 for any
38 | "search_price_min":0, //Minimum price value (Unit is in chaos orbs)
39 | "search_price_count":20, //Number of results to show when searching, max is 80
40 | "min_value_percent":80, //Sets minimum value for the mod to a percentage of the original value
41 | "max_value_percent":130, //Sets maximum value for the mod to a percentage of the original value
42 | "unique_min_value_percent":80, //Sets minimum value for the mod of a unique item to a percentage of the original value
43 | "unique_max_value_percent":130, //Sets maximum value for the mod of a unique item to a percentage of the original value
44 | "set_max_value":false, //Sets whether to input the max value [true, false]
45 | "auto_check_unique":true, //If true, sets all mods of a unique item to the checked state
46 | "auto_select_pseudo":true, //If true, sets the mod type to pseudo
47 | "auto_select_corrupt":"no", //If an item is corrupted, sets it to the value you have set ["yes", "no"]
48 | "ctrl_wheel":true, //Enables ctrl_wheel for scrolling through stash tabs [true, false]
49 | "check_updates":true, //Checks for update [true, false]
50 | "data_version":"3.9.2",
51 | "always_on_top": true //If you want the UI to always stay on top no matter what process has focus [true, false]
52 | },
53 | "shortcuts": [
54 | {
55 | "keycode": 117,
56 | "value": "{invite}",
57 | "position": null,
58 | "ctrl": false
59 | },
60 | {
61 | "keycode": 116,
62 | "value": "{Enter}/hideout{Enter}",
63 | "position": null,
64 | "ctrl": false
65 | },
66 | {
67 | "keycode": 115,
68 | "value": "{Enter}/kick charactername{Enter}",
69 | "position": null,
70 | "ctrl": false
71 | },
72 | {
73 | "keycode": 113,
74 | "value": "{Enter}/oos{Enter}",
75 | "position": null,
76 | "ctrl": false
77 | },
78 | {
79 | "keycode": 118,
80 | "value": "Syndicate_0.jpg",
81 | "position": "0x0",
82 | "ctrl": false
83 | },
84 | {
85 | "keycode": 119,
86 | "value": "Temple_0.jpg",
87 | "position": "0x0",
88 | "ctrl": false
89 | },
90 | {
91 | "keycode": 122,
92 | "value": "{Pause}",
93 | "position": null,
94 | "ctrl": false
95 | },
96 | {
97 | "keycode": 27,
98 | "value": "{Close}",
99 | "position": null,
100 | "ctrl": false
101 | },
102 | {
103 | "keycode": 78,
104 | "value": "{Link}https://poe.ninja/{Link}",
105 | "position": null,
106 | "ctrl": true
107 | },
108 | {
109 | "keycode": 72,
110 | "value": "{Wiki}",
111 | "position": null,
112 | "ctrl": true
113 | },
114 | {
115 | "keycode": 0,
116 | "value": "{Run}",
117 | "position": null,
118 | "ctrl": true
119 | }
120 | ],
121 | "checked": [
122 | {
123 | "id": "Jewels/Amulets/Rings/Belts/Quivers/Armours/",
124 | "text": "#% to Fire Resistance",
125 | "mod_type": "pseudo/explicit/implicit/crafted"
126 | },
127 | {
128 | "id": "Jewels/Amulets/Rings/Belts/Quivers/Armours/",
129 | "text": "#% to Lightning Resistance",
130 | "mod_type": "pseudo/explicit/"
131 | },
132 | {
133 | "id": "Belts/",
134 | "text": "# to Strength",
135 | "mod_type": "all"
136 | }
137 | ],
138 | "dangerous_mods": [
139 | {
140 | "id": "Maps/",
141 | "text": "Monsters reflect #% of Elemental Damage"
142 | },
143 | {
144 | "id": "Maps/",
145 | "text": "Monsters reflect #% of Physical Damage"
146 | }
147 | ]
148 | }
149 | ```
150 |
--------------------------------------------------------------------------------
/Updates.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Text;
5 | using System.Text.RegularExpressions;
6 | using System.Threading;
7 | using System.Windows;
8 |
9 | namespace PoeTradeSearch
10 | {
11 | public partial class MainWindow : Window
12 | {
13 | private bool CheckUpdates()
14 | {
15 | bool isUpdates = false;
16 |
17 | // 마우스 훜시 프로그램에 딜레이가 생겨 쓰레드 처리
18 | try
19 | {
20 | Thread thread = new Thread(() =>
21 | {
22 | string u = "https://raw.githubusercontent.com/redSol/PoeTradeSearchEN/master/VERSION";
23 | string version = SendHTTP(null, u, 3);
24 | if ((version ?? "") != "")
25 | {
26 | Version version1 = new Version(GetFileVersion());
27 | isUpdates = version1.CompareTo(new Version(version)) < 0;
28 | }
29 | });
30 | thread.Start();
31 | thread.Join();
32 | } catch (ArgumentException)
33 | {
34 |
35 | }
36 | return isUpdates;
37 | }
38 |
39 | private bool FilterDataUpdates(string path)
40 | {
41 | bool success = false;
42 |
43 | // 마우스 훜시 프로그램에 딜레이가 생겨 쓰레드 처리
44 | Thread thread = new Thread(() =>
45 | {
46 | string u = "https://pathofexile.com/api/trade/data/stats";
47 | string sResult = SendHTTP(null, u, 5);
48 | if ((sResult ?? "") != "")
49 | {
50 | FilterData rootClass = Json.Deserialize(sResult);
51 |
52 | for (int i = 0; i < rootClass.Result.Length; i++)
53 | {
54 | if (
55 | rootClass.Result[i].Entries.Length > 0
56 | && Restr.lFilterTypeName.ContainsKey(rootClass.Result[i].Entries[0].Type)
57 | )
58 | {
59 | rootClass.Result[i].Label = Restr.lFilterTypeName[rootClass.Result[i].Entries[0].Type];
60 | }
61 | }
62 |
63 | foreach (KeyValuePair itm in Restr.lParticular)
64 | {
65 | for (int i = 0; i < rootClass.Result.Length; i++)
66 | {
67 |
68 | int index = Array.FindIndex(rootClass.Result[i].Entries, x => x.ID.Substring(x.ID.IndexOf(".") + 1) == itm.Key);
69 | if (index > -1 && rootClass.Result[i].Entries[index].Text.IndexOf("(" + Restr.Local + ")") > 0)
70 | {
71 | rootClass.Result[i].Entries[index].Text = rootClass.Result[i].Entries[index].Text.Replace(" (" + Restr.Local + ")", "");
72 | rootClass.Result[i].Entries[index].Part = itm.Value == 1 ? "Weapons" : "Armours";
73 | }
74 | }
75 | }
76 |
77 | foreach (KeyValuePair itm in Restr.lDisable)
78 | {
79 | for (int i = 0; i < rootClass.Result.Length; i++)
80 | {
81 | int index = Array.FindIndex(rootClass.Result[i].Entries, x => x.ID.Substring(x.ID.IndexOf(".") + 1) == itm.Key);
82 | if (index > -1)
83 | {
84 | rootClass.Result[i].Entries[index].Text = "__DISABLE__";
85 | rootClass.Result[i].Entries[index].Part = "Disable";
86 | }
87 | }
88 | }
89 |
90 | using (StreamWriter writer = new StreamWriter(path + "Filters.txt", false, Encoding.UTF8))
91 | {
92 | writer.Write(Json.Serialize(rootClass));
93 | }
94 |
95 | success = true;
96 | }
97 | });
98 |
99 | thread.Start();
100 | thread.Join();
101 |
102 | return success;
103 | }
104 |
105 | // 데이터 CSV 파일은 POE 클라이언트를 VisualGGPK.exe (libggpk) 를 통해 추출할 수 있다.
106 | private bool BaseDataUpdates(string path)
107 | {
108 | bool success = false;
109 | if (File.Exists(path + "csv/BaseItemTypes.csv") && File.Exists(path + "csv/Words.csv"))
110 | {
111 | try
112 | {
113 | List oCsvEnList = new List();
114 | List oCsvKoList = new List();
115 |
116 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/en/BaseItemTypes.csv")))
117 | {
118 | string sEnContents = oStreamReader.ReadToEnd();
119 | string[] sEnLines = sEnContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
120 | foreach (string sLine in sEnLines)
121 | {
122 | //oCsvEnList.Add(sLine.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
123 | oCsvEnList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
124 | }
125 | }
126 |
127 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/ko/BaseItemTypes.csv")))
128 | {
129 | string sKoContents = oStreamReader.ReadToEnd();
130 | string[] sKoLines = sKoContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
131 | foreach (string sLine in sKoLines)
132 | {
133 | //oCsvKoList.Add(sLine.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
134 | oCsvKoList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
135 | }
136 | }
137 |
138 | List datas = new List();
139 |
140 | for (int i = 1; i < oCsvEnList.Count; i++)
141 | {
142 | if (
143 | oCsvEnList[i][6] == "Metadata/Items/Currency/AbstractMicrotransaction"
144 | || oCsvEnList[i][6] == "Metadata/Items/HideoutDoodads/AbstractHideoutDoodad"
145 | )
146 | continue;
147 |
148 | BaseResultData baseResultData = new BaseResultData();
149 | baseResultData.ID = oCsvEnList[i][1].Replace("Metadata/Items/", "");
150 | baseResultData.InheritsFrom = oCsvEnList[i][6].Replace("Metadata/Items/", "");
151 | baseResultData.NameEn = oCsvEnList[i][5];
152 | baseResultData.NameEn = oCsvKoList[i][5];
153 | baseResultData.Detail = "";
154 |
155 | if (datas.Find(x => x.NameEn == baseResultData.NameEn) == null)
156 | datas.Add(baseResultData);
157 | }
158 |
159 | BaseData rootClass = Json.Deserialize("{\"result\":[{\"data\":[]}]}");
160 | rootClass.Result[0].Data = datas.ToArray();
161 |
162 | using (StreamWriter writer = new StreamWriter(path + "Bases.txt", false, Encoding.UTF8))
163 | {
164 | writer.Write(Json.Serialize(rootClass));
165 | }
166 |
167 | //-----------------------------
168 |
169 | oCsvEnList = new List();
170 | oCsvKoList = new List();
171 |
172 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/en/Words.csv")))
173 | {
174 | string sEnContents = oStreamReader.ReadToEnd();
175 | string[] sEnLines = sEnContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
176 | foreach (string sLine in sEnLines)
177 | {
178 | oCsvEnList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
179 | }
180 | }
181 |
182 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/ko/Words.csv")))
183 | {
184 | string sKoContents = oStreamReader.ReadToEnd();
185 | string[] sKoLines = sKoContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
186 | foreach (string sLine in sKoLines)
187 | {
188 | oCsvKoList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
189 | }
190 | }
191 |
192 | List wdatas = new List();
193 |
194 | for (int i = 1; i < oCsvEnList.Count; i++)
195 | {
196 | WordeResultData wordeResultData = new WordeResultData();
197 | wordeResultData.Key = oCsvEnList[i][1];
198 | wordeResultData.NameEn = oCsvEnList[i][6];
199 | wordeResultData.NameEn = oCsvKoList[i][6];
200 | wdatas.Add(wordeResultData);
201 | }
202 |
203 | WordData wordClass = Json.Deserialize("{\"result\":[{\"data\":[]}]}");
204 | wordClass.Result[0].Data = wdatas.ToArray();
205 |
206 | using (StreamWriter writer = new StreamWriter(path + "Words.txt", false, Encoding.UTF8))
207 | {
208 | writer.Write(Json.Serialize(wordClass));
209 | }
210 |
211 | //-----------------------------
212 |
213 | oCsvEnList = new List();
214 | oCsvKoList = new List();
215 |
216 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/en/Prophecies.csv")))
217 | {
218 | string sEnContents = oStreamReader.ReadToEnd();
219 | string[] sEnLines = sEnContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
220 | foreach (string sLine in sEnLines)
221 | {
222 | oCsvEnList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
223 | }
224 | }
225 |
226 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/ko/Prophecies.csv")))
227 | {
228 | string sKoContents = oStreamReader.ReadToEnd();
229 | string[] sKoLines = sKoContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
230 | foreach (string sLine in sKoLines)
231 | {
232 | oCsvKoList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
233 | }
234 | }
235 |
236 | datas = new List();
237 |
238 | for (int i = 1; i < oCsvEnList.Count; i++)
239 | {
240 | BaseResultData baseResultData = new BaseResultData();
241 | baseResultData.ID = "Prophecies/" + oCsvEnList[i][1];
242 | baseResultData.InheritsFrom = "Prophecies/Prophecy";
243 | baseResultData.NameEn = oCsvEnList[i][4];
244 | baseResultData.NameEn = oCsvKoList[i][4];
245 | baseResultData.Detail = "";
246 |
247 | datas.Add(baseResultData);
248 | }
249 |
250 | rootClass = Json.Deserialize("{\"result\":[{\"data\":[]}]}");
251 | rootClass.Result[0].Data = datas.ToArray();
252 |
253 | using (StreamWriter writer = new StreamWriter(path + "Prophecies.txt", false, Encoding.UTF8))
254 | {
255 | writer.Write(Json.Serialize(rootClass));
256 | }
257 |
258 | //-----------------------------
259 |
260 | oCsvEnList = new List();
261 | oCsvKoList = new List();
262 |
263 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/en/MonsterVarieties.csv")))
264 | {
265 | string sEnContents = oStreamReader.ReadToEnd();
266 | string[] sEnLines = sEnContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
267 | foreach (string sLine in sEnLines)
268 | {
269 | oCsvEnList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
270 | }
271 | }
272 |
273 | using (StreamReader oStreamReader = new StreamReader(File.OpenRead(path + "csv/ko/MonsterVarieties.csv")))
274 | {
275 | string sKoContents = oStreamReader.ReadToEnd();
276 | string[] sKoLines = sKoContents.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
277 | foreach (string sLine in sKoLines)
278 | {
279 | oCsvKoList.Add(Regex.Split(sLine, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"));
280 | }
281 | }
282 |
283 | datas = new List();
284 |
285 | for (int i = 1; i < oCsvEnList.Count; i++)
286 | {
287 | BaseResultData baseResultData = new BaseResultData();
288 | baseResultData.ID = oCsvEnList[i][1].Replace("Metadata/Monsters/", "");
289 | baseResultData.InheritsFrom = oCsvEnList[i][11].Replace("Metadata/Monsters/", "");
290 | baseResultData.NameEn = oCsvEnList[i][35];
291 | baseResultData.NameEn = oCsvKoList[i][35];
292 | baseResultData.Detail = "";
293 |
294 | if (datas.Find(x => x.NameEn == baseResultData.NameEn) == null)
295 | datas.Add(baseResultData);
296 | }
297 |
298 | rootClass = Json.Deserialize("{\"result\":[{\"data\":[]}]}");
299 | rootClass.Result[0].Data = datas.ToArray();
300 |
301 | using (StreamWriter writer = new StreamWriter(path + "Monsters.txt", false, Encoding.UTF8))
302 | {
303 | writer.Write(Json.Serialize(rootClass));
304 | }
305 |
306 | success = true;
307 | }
308 | catch { }
309 | }
310 |
311 | return success;
312 | }
313 | }
314 | }
315 |
--------------------------------------------------------------------------------
/VERSION:
--------------------------------------------------------------------------------
1 | 3.10.0.0
--------------------------------------------------------------------------------
/_POE_Data/Config.txt:
--------------------------------------------------------------------------------
1 | {
2 | "options": {
3 | "league": "Delirium",
4 | "server": "en",
5 | "server_timeout": 5,
6 | "server_redirect": false,
7 | "search_price_min": 0.0,
8 | "search_price_count": 20.0,
9 | "min_value_percent": 80.0,
10 | "max_value_percent": 130.0,
11 | "unique_min_value_percent": 100.0,
12 | "unique_max_value_percent": 130.0,
13 | "set_max_value": false,
14 | "update_price_on_checked": false,
15 | "search_before_day": 0,
16 | "search_by_type": false,
17 | "auto_check_unique": true,
18 | "auto_select_pseudo": true,
19 | "auto_select_corrupt": "no or yes",
20 | "ctrl_wheel": true,
21 | "check_updates": true,
22 | "data_version": "3.9.2",
23 | "always_on_top": true,
24 | "disable_startup_message": true
25 | },
26 | "shortcuts": [
27 | {
28 | "keycode": 117,
29 | "value": "{invite}",
30 | "position": null,
31 | "ctrl": false
32 | },
33 | {
34 | "keycode": 116,
35 | "value": "{Enter}/hideout{Enter}",
36 | "position": null,
37 | "ctrl": false
38 | },
39 | {
40 | "keycode": 115,
41 | "value": "{Enter}/kick charactername{Enter}",
42 | "position": null,
43 | "ctrl": false
44 | },
45 | {
46 | "keycode": 113,
47 | "value": "{Enter}/oos{Enter}",
48 | "position": null,
49 | "ctrl": false
50 | },
51 | {
52 | "keycode": 118,
53 | "value": "Syndicate_0.jpg",
54 | "position": "0x0",
55 | "ctrl": false
56 | },
57 | {
58 | "keycode": 119,
59 | "value": "Temple_0.jpg",
60 | "position": "0x0",
61 | "ctrl": false
62 | },
63 | {
64 | "keycode": 122,
65 | "value": "{Pause}",
66 | "position": null,
67 | "ctrl": false
68 | },
69 | {
70 | "keycode": 27,
71 | "value": "{Close}",
72 | "position": null,
73 | "ctrl": false
74 | },
75 | {
76 | "keycode": 78,
77 | "value": "{Link}https://poe.ninja/{Link}",
78 | "position": null,
79 | "ctrl": true
80 | },
81 | {
82 | "keycode": 72,
83 | "value": "{Wiki}",
84 | "position": null,
85 | "ctrl": true
86 | },
87 | {
88 | "keycode": 0,
89 | "value": "{Run}",
90 | "position": null,
91 | "ctrl": true
92 | }
93 | ],
94 | "checked": [
95 | {
96 | "id": "Jewels/Amulets/Rings/Belts/Quivers/Armours/",
97 | "text": "#% to Fire Resistance",
98 | "mod_type": "pseudo/explicit/implicit/crafted"
99 | },
100 | {
101 | "id": "Jewels/Amulets/Rings/Belts/Quivers/Armours/",
102 | "text": "#% to Lightning Resistance",
103 | "mod_type": "pseudo/explicit/"
104 | },
105 | {
106 | "id": "Belts/",
107 | "text": "# to Strength",
108 | "mod_type": "all"
109 | }
110 | ],
111 | "dangerous_mods": [
112 | {
113 | "id": "Maps/",
114 | "text": "Monsters reflect #% of Elemental Damage"
115 | },
116 | {
117 | "id": "Maps/",
118 | "text": "Monsters reflect #% of Physical Damage"
119 | }
120 | ]
121 | }
--------------------------------------------------------------------------------
/_POE_Data/Monsters.txt:
--------------------------------------------------------------------------------
1 | {"result":[{"data":[{"Detail":"","Id":"Any","InheritsFrom":"1","Name":"100","NameKo":null},{"Detail":"","Id":"Bandits\/BanditBossHeavyStrikeEndlessLedge","InheritsFrom":"1","Name":"180","NameKo":null},{"Detail":"","Id":"Bandits\/BanditBossBow","InheritsFrom":"1","Name":"96","NameKo":null},{"Detail":"","Id":"Bandits\/BanditBowChampion","InheritsFrom":"1","Name":"157","NameKo":null},{"Detail":"","Id":"Bandits\/BanditBowBossBlackwood","InheritsFrom":"1","Name":"200","NameKo":null},{"Detail":"","Id":"BanditLeaderInt\/BanditLeaderAlira","InheritsFrom":"1","Name":"540","NameKo":null},{"Detail":"","Id":"BanditLeaderInt\/BanditLeaderAliraEndlessLedge","InheritsFrom":"1","Name":"384","NameKo":null},{"Detail":"","Id":"BanditLeaderDexInt\/BanditLeaderKraityn","InheritsFrom":"1","Name":"600","NameKo":null},{"Detail":"","Id":"BanditLeaderDexInt\/BanditLeaderKraitynZombie","InheritsFrom":"1","Name":"240","NameKo":null},{"Detail":"","Id":"BanditLeaderDexInt\/BanditLeaderKraitynEndlessLedge","InheritsFrom":"1","Name":"420","NameKo":null},{"Detail":"","Id":"BanditLeaderStrDex\/BanditLeaderOak","InheritsFrom":"1","Name":"480","NameKo":null},{"Detail":"","Id":"BanditLeaderStrDex\/BanditLeaderOakEndlessLedge","InheritsFrom":"1","Name":"336","NameKo":null},{"Detail":"","Id":"Bandits\/BanditMeleeChampion","InheritsFrom":"1","Name":"192","NameKo":null},{"Detail":"","Id":"Bandits\/FrostfireMageMapBoss","InheritsFrom":"1","Name":"400","NameKo":null},{"Detail":"","Id":"Bandits\/FrostfireMageFireForm","InheritsFrom":"1","Name":"150","NameKo":null},{"Detail":"","Id":"Bandits\/StagBandit","InheritsFrom":"1","Name":"146","NameKo":null},{"Detail":"","Id":"Bandits\/BearBandit","InheritsFrom":"1","Name":"132","NameKo":null},{"Detail":"","Id":"Bandits\/BoarBandit","InheritsFrom":"1","Name":"144","NameKo":null},{"Detail":"","Id":"Bandits\/AnimalPackBoss","InheritsFrom":"1","Name":"300","NameKo":null},{"Detail":"","Id":"Beasts\/BeastCave","InheritsFrom":"1","Name":"210","NameKo":null},{"Detail":"","Id":"Beasts\/BeastBossWhite","InheritsFrom":"1","Name":"216","NameKo":null},{"Detail":"","Id":"Beasts\/BeastBossTalisman","InheritsFrom":"1","Name":"288","NameKo":null},{"Detail":"","Id":"Beasts\/BeastSkeleton","InheritsFrom":"1","Name":"238","NameKo":null},{"Detail":"","Id":"Brute\/BossBrute","InheritsFrom":"1","Name":"725","NameKo":null},{"Detail":"","Id":"DemonFourLegged\/BossFourLeggedDemonUniqueMap","InheritsFrom":"1","Name":"4000","NameKo":null},{"Detail":"","Id":"IncaShadowBoss\/BossIncaShadow","InheritsFrom":"1","Name":"1400","NameKo":null},{"Detail":"","Id":"seawitchillusion\/BossMerveil","InheritsFrom":"1","Name":"650","NameKo":null},{"Detail":"","Id":"Seawitch\/BossMerveil2","InheritsFrom":"1","Name":"560","NameKo":null},{"Detail":"","Id":"Bandit\/Pirate2MasterChestGuard_","InheritsFrom":"1","Name":"375","NameKo":null},{"Detail":"","Id":"Bandit\/Pirate3BowMasterChestGuard","InheritsFrom":"1","Name":"350","NameKo":null},{"Detail":"","Id":"Goatman\/GoatmanShamanAbberath","InheritsFrom":"1","Name":"112","NameKo":null},{"Detail":"","Id":"Goatman\/GoatmanShamanFireChampion","InheritsFrom":"1","Name":"140","NameKo":null},{"Detail":"","Id":"incaminion\/Fragment","InheritsFrom":"1","Name":"70","NameKo":null},{"Detail":"","Id":"incaminion\/IncaMinion","InheritsFrom":"1","Name":"630","NameKo":null},{"Detail":"","Id":"Lion\/GhostWolfRigwald","InheritsFrom":"1","Name":"286","NameKo":null},{"Detail":"","Id":"Lion\/LionMapWolfColdBoss","InheritsFrom":"1","Name":"2040","NameKo":null},{"Detail":"","Id":"Lion\/LionMapWolfFireBoss","InheritsFrom":"1","Name":"3600","NameKo":null},{"Detail":"","Id":"Lion\/SummonedSpectralWolf","InheritsFrom":"1","Name":"450","NameKo":null},{"Detail":"","Id":"Lion\/LionBossStandard","InheritsFrom":"1","Name":"162","NameKo":null},{"Detail":"","Id":"Hellion\/HellionBoss","InheritsFrom":"1","Name":"320","NameKo":null},{"Detail":"","Id":"Monkeys\/MonkeyBlood","InheritsFrom":"1","Name":"65","NameKo":null},{"Detail":"","Id":"BloodChieftain\/MonkeyChiefBloodSpawnParasiteOnDeathBoss","InheritsFrom":"1","Name":"360","NameKo":null},{"Detail":"","Id":"MossMonster\/MossMonsterStanding","InheritsFrom":"1","Name":"270","NameKo":null},{"Detail":"","Id":"MossMonster\/MossMonsterEmergeEarthquake","InheritsFrom":"1","Name":"351","NameKo":null},{"Detail":"","Id":"MossMonster\/MossMonsterMapBossMinion","InheritsFrom":"1","Name":"108","NameKo":null},{"Detail":"","Id":"Necromancer\/NecromancerConductivity2","InheritsFrom":"1","Name":"186","NameKo":null},{"Detail":"","Id":"Rhoas\/RhoaAlbino","InheritsFrom":"1","Name":"120","NameKo":null},{"Detail":"","Id":"Rhoas\/RohaBigProphecyBossSummoned","InheritsFrom":"1","Name":"280","NameKo":null},{"Detail":"","Id":"Rhoas\/RhoaUniqueSummoned","InheritsFrom":"1","Name":"750","NameKo":null},{"Detail":"","Id":"Rhoas\/RhoaSkeletonSmall","InheritsFrom":"1","Name":"99","NameKo":null},{"Detail":"","Id":"Rhoas\/ProphecyRhoaBoss","InheritsFrom":"1","Name":"260","NameKo":null},{"Detail":"","Id":"SandSpitters\/SandSpitterLightningCavern","InheritsFrom":"1","Name":"60","NameKo":null},{"Detail":"","Id":"Seawitch\/SeaWitch","InheritsFrom":"1","Name":"102","NameKo":null},{"Detail":"","Id":"Seawitch\/SeaWitchBossFirestorm","InheritsFrom":"1","Name":"208","NameKo":null},{"Detail":"","Id":"Seawitch\/ProphecySeaWitch","InheritsFrom":"1","Name":"128","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossCaster","InheritsFrom":"1","Name":"84","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossFairgraves","InheritsFrom":"1","Name":"221","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossFairgravesTreasure","InheritsFrom":"1","Name":"2400","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossFairgravesPinata","InheritsFrom":"1","Name":"2000","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossPrisonMeleeEndlessLedge","InheritsFrom":"1","Name":"153","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossRanged","InheritsFrom":"1","Name":"198","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBowBoneLance","InheritsFrom":"1","Name":"110","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonCasterColdMalachaiProphecy","InheritsFrom":"1","Name":"130","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonCasterLightningDescent2","InheritsFrom":"1","Name":"48","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMelee","InheritsFrom":"1","Name":"90","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMelee8","InheritsFrom":"1","Name":"158","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMeleeRoman2","InheritsFrom":"1","Name":"138","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMeleeFairgravesCrewStandard","InheritsFrom":"1","Name":"168","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMeleeBossCrossroads","InheritsFrom":"1","Name":"187","NameKo":null},{"Detail":"","Id":"Skeletons\/Scarecrow\/ScarecrowFarmerSkeletonMeleeSickle","InheritsFrom":"1","Name":"68","NameKo":null},{"Detail":"","Id":"Skeletons\/Scarecrow\/ScarecrowFarmerSkeletonChampion","InheritsFrom":"1","Name":"195","NameKo":null},{"Detail":"","Id":"Snake\/SnakeBossRiverCrossings","InheritsFrom":"1","Name":"80","NameKo":null},{"Detail":"","Id":"Snake\/SnakeScorpionInca","InheritsFrom":"1","Name":"94","NameKo":null},{"Detail":"","Id":"Snake\/SnakeRoboMinionSideArea","InheritsFrom":"1","Name":"21","NameKo":null},{"Detail":"","Id":"Snake\/SnakeBossRiverways","InheritsFrom":"1","Name":"220","NameKo":null},{"Detail":"","Id":"Spawn\/Spawn","InheritsFrom":"1","Name":"55","NameKo":null},{"Detail":"","Id":"TestSpawn\/Test","InheritsFrom":"1","Name":"10000","NameKo":null},{"Detail":"","Id":"Spawn\/SpawnTiny","InheritsFrom":"1","Name":"35","NameKo":null},{"Detail":"","Id":"Spiders\/SpiderBossWeaver","InheritsFrom":"1","Name":"713","NameKo":null},{"Detail":"","Id":"Spiders\/SpiderSmall","InheritsFrom":"1","Name":"78","NameKo":null},{"Detail":"","Id":"Spiders\/SpiderSmall3","InheritsFrom":"1","Name":"50","NameKo":null},{"Detail":"","Id":"Spiders\/SpiderBarrelOfSpidersMedium","InheritsFrom":"1","Name":"88","NameKo":null},{"Detail":"","Id":"Spiders\/EssenceSpiderThornViperStrike","InheritsFrom":"1","Name":"405","NameKo":null},{"Detail":"","Id":"Statue\/StatueChurchMapBossVastiri","InheritsFrom":"1","Name":"3400","NameKo":null},{"Detail":"","Id":"Totems\/TotemBossDescent2","InheritsFrom":"1","Name":"330","NameKo":null},{"Detail":"","Id":"Totems\/TotemUniqueMapMonsterFireDamageAura","InheritsFrom":"1","Name":"1200","NameKo":null},{"Detail":"","Id":"Totems\/BreachBossIceTotem","InheritsFrom":"1","Name":"1376","NameKo":null},{"Detail":"","Id":"Totems\/BreachIceTotem","InheritsFrom":"1","Name":"1000","NameKo":null},{"Detail":"","Id":"Totems\/DelveProtoVaalCrystalDefence","InheritsFrom":"1","Name":"500","NameKo":null},{"Detail":"","Id":"WaterElemental\/WaterElementaBossShipCave","InheritsFrom":"1","Name":"252","NameKo":null},{"Detail":"","Id":"WaterElemental\/WaterElementalSubmerged_","InheritsFrom":"1","Name":"165","NameKo":null},{"Detail":"","Id":"ZombieBoss\/ZombieBossHillock","InheritsFrom":"1","Name":"188","NameKo":null},{"Detail":"","Id":"ZombieBoss\/ZombieBossHillockSpecialEvent_","InheritsFrom":"1","Name":"5625","NameKo":null},{"Detail":"","Id":"ZombieBoss\/ZombieBossHillockNormal","InheritsFrom":"1","Name":"225","NameKo":null},{"Detail":"","Id":"Zombies\/ZombieBossTolman_","InheritsFrom":"1","Name":"840","NameKo":null},{"Detail":"","Id":"Zombies\/ZombieMinionHillockSpecialFast","InheritsFrom":"1","Name":"999","NameKo":null},{"Detail":"","Id":"ZombieDismember\/DoedreZombieMinionEmerge","InheritsFrom":"1","Name":"315","NameKo":null},{"Detail":"","Id":"Axis\/AxisCasterBoss1","InheritsFrom":"1","Name":"528","NameKo":null},{"Detail":"","Id":"Axis\/AxisCasterSextant","InheritsFrom":"1","Name":"160","NameKo":null},{"Detail":"","Id":"Axis\/AxisGeneral","InheritsFrom":"1","Name":"700","NameKo":null},{"Detail":"","Id":"Axis\/AxisGeneralBossDescent2","InheritsFrom":"1","Name":"900","NameKo":null},{"Detail":"","Id":"Axis\/PietyEscape","InheritsFrom":"1","Name":"1088","NameKo":null},{"Detail":"","Id":"Axis\/PietyBeastBoss","InheritsFrom":"1","Name":"1600","NameKo":null},{"Detail":"","Id":"Axis\/PietyMalachaiConverted","InheritsFrom":"1","Name":"800","NameKo":null},{"Detail":"","Id":"Axis\/Cleric\/BlackguardClericPureBossMap","InheritsFrom":"1","Name":"340","NameKo":null},{"Detail":"","Id":"Axis\/Cleric\/BlackguardClericKitavaShadow","InheritsFrom":"1","Name":"182","NameKo":null},{"Detail":"","Id":"Brute\/BossBruteUniqueMap","InheritsFrom":"1","Name":"9000","NameKo":null},{"Detail":"","Id":"DemonModular\/DemonModularIncursionSacrifice","InheritsFrom":"1","Name":"675","NameKo":null},{"Detail":"","Id":"DemonFemale\/DemonFemaleUniqueMapSummoned1","InheritsFrom":"1","Name":"550","NameKo":null},{"Detail":"","Id":"DemonFemale\/DemonFemaleBoss1","InheritsFrom":"1","Name":"396","NameKo":null},{"Detail":"","Id":"GemMonster\/Iguana","InheritsFrom":"1","Name":"125","NameKo":null},{"Detail":"","Id":"GemMonster\/IguanaChrome","InheritsFrom":"1","Name":"154","NameKo":null},{"Detail":"","Id":"GemMonster\/IguanaUntaintedColossal","InheritsFrom":"1","Name":"250","NameKo":null},{"Detail":"","Id":"Guardians\/GuardianBossHeadFire","InheritsFrom":"1","Name":"63","NameKo":null},{"Detail":"","Id":"InsectSpawner\/InsectSpawner","InheritsFrom":"1","Name":"245","NameKo":null},{"Detail":"","Id":"Pope\/Pope","InheritsFrom":"1","Name":"1100","NameKo":null},{"Detail":"","Id":"Statue\/StoneStatueMaleBow","InheritsFrom":"1","Name":"246","NameKo":null},{"Detail":"","Id":"Statue\/StoneStatueLargeMaleSpear","InheritsFrom":"1","Name":"576","NameKo":null},{"Detail":"","Id":"Statue\/GardenStoneStatueLargeFemaleSpearGuardian","InheritsFrom":"1","Name":"1800","NameKo":null},{"Detail":"","Id":"BloodElemental\/BloodlinesCongealedYellowBloodElemetnalMinion","InheritsFrom":"1","Name":"85","NameKo":null},{"Detail":"","Id":"Undying\/CityStalkerMaleCasterArmourUniqueMapSummoned","InheritsFrom":"1","Name":"156","NameKo":null},{"Detail":"","Id":"Undying\/CityStalkerFemaleShaperBoss1","InheritsFrom":"1","Name":"9600","NameKo":null},{"Detail":"","Id":"RaisedSkeletons\/RaisedSkeletonStandard","InheritsFrom":"1","Name":"105","NameKo":null},{"Detail":"","Id":"SummonedPhantasm\/SummonedPhantasmIncursionExplodeBoss","InheritsFrom":"1","Name":"715","NameKo":null},{"Detail":"","Id":"Totems\/EarthquakeMechanicalTotem","InheritsFrom":"1","Name":"294","NameKo":null},{"Detail":"","Id":"RaisedSkeletons\/SkeletonMeleeFireSummoned","InheritsFrom":"1","Name":"10","NameKo":null},{"Detail":"","Id":"seawitchillusion\/MapBossMerveilMaelstrom","InheritsFrom":"1","Name":"1700","NameKo":null},{"Detail":"","Id":"Snake\/MapSnakeBossAncientPyramid","InheritsFrom":"1","Name":"148","NameKo":null},{"Detail":"","Id":"Guardians\/MapGuardianBossFire","InheritsFrom":"1","Name":"126","NameKo":null},{"Detail":"","Id":"Undying\/MapUndyingBoss","InheritsFrom":"1","Name":"399","NameKo":null},{"Detail":"","Id":"DemonModular\/DemonFemaleRangedMapBoss","InheritsFrom":"1","Name":"1152","NameKo":null},{"Detail":"","Id":"Exiles\/ExileRanger2","InheritsFrom":"10","Name":"123","NameKo":null},{"Detail":"","Id":"Exiles\/ExileDuelist1","InheritsFrom":"10","Name":"119","NameKo":null},{"Detail":"","Id":"Exiles\/ExileScion4","InheritsFrom":"5","Name":"121","NameKo":null},{"Detail":"","Id":"Exiles\/DelveExileMarauder1","InheritsFrom":"6","Name":"255","NameKo":null},{"Detail":"","Id":"Exiles\/DelveExileRanger1","InheritsFrom":"7","Name":"224","NameKo":null},{"Detail":"","Id":"Exiles\/DelveExileTemplar1","InheritsFrom":"10","Name":"264","NameKo":null},{"Detail":"","Id":"DarkExiles\/DarkExileScion1","InheritsFrom":"0","Name":"1650","NameKo":null},{"Detail":"","Id":"RootSpiders\/RootSpiderMaps","InheritsFrom":"1","Name":"175","NameKo":null},{"Detail":"","Id":"AnimatedItem\/AnimatedWeaponMonster1","InheritsFrom":"1","Name":"170","NameKo":null},{"Detail":"","Id":"AnimatedItem\/WbAnimatedPowershotBow","InheritsFrom":"1","Name":"504","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossMapWest4","InheritsFrom":"1","Name":"4800","NameKo":null},{"Detail":"","Id":"SummonedSkull\/SummonedSkullKaom","InheritsFrom":"1","Name":"228","NameKo":null},{"Detail":"","Id":"DemonBosses\/DemonBoss1\/DemonBoss1","InheritsFrom":"1","Name":"832","NameKo":null},{"Detail":"","Id":"DemonBosses\/DemonBoss1\/DemonBoss1Map","InheritsFrom":"1","Name":"226","NameKo":null},{"Detail":"","Id":"DemonModular\/DemonModularAtziriPortal","InheritsFrom":"1","Name":"204","NameKo":null},{"Detail":"","Id":"DemonFemale\/DemonFemaleAtziriPortal","InheritsFrom":"1","Name":"209","NameKo":null},{"Detail":"","Id":"IncaShadowBoss\/BossIncaShadowAtziri","InheritsFrom":"1","Name":"1132","NameKo":null},{"Detail":"","Id":"IncaShadowBoss\/BossIncaShadowDoryani","InheritsFrom":"1","Name":"8000","NameKo":null},{"Detail":"","Id":"Atziri\/Atziri","InheritsFrom":"1","Name":"2800","NameKo":null},{"Detail":"","Id":"SandLeaper\/SandLeaperBossVinktars1","InheritsFrom":"1","Name":"1280","NameKo":null},{"Detail":"","Id":"Snake\/SnakeMeleeIncaAtziri","InheritsFrom":"1","Name":"262","NameKo":null},{"Detail":"","Id":"SandSpitterEmerge\/SandSpitterBossInvasion","InheritsFrom":"1","Name":"135","NameKo":null},{"Detail":"","Id":"Snake\/SnakeRangedBossInvasion","InheritsFrom":"1","Name":"312","NameKo":null},{"Detail":"","Id":"ZombieDismember\/ZombieBossInvasion","InheritsFrom":"1","Name":"176","NameKo":null},{"Detail":"","Id":"BeyondDemons\/BeyondDemon3-6","InheritsFrom":"1","Name":"1500","NameKo":null},{"Detail":"","Id":"Dummy\/D1","InheritsFrom":"1","Name":"0","NameKo":null},{"Detail":"","Id":"Snake\/DexMissionSnakeFlameBossMinion","InheritsFrom":"1","Name":"64","NameKo":null},{"Detail":"","Id":"VultureParasite\/ProphecyVultureParasiteBoss","InheritsFrom":"1","Name":"285","NameKo":null},{"Detail":"","Id":"WaterSpiral\/WaterSpiralBossTalisman","InheritsFrom":"1","Name":"40","NameKo":null},{"Detail":"","Id":"Voll\/VollBoss","InheritsFrom":"1","Name":"1120","NameKo":null},{"Detail":"","Id":"SandLeaper\/SandLeaper","InheritsFrom":"1","Name":"58","NameKo":null},{"Detail":"","Id":"MassSkeleton\/MassSkeletonMapBoss3","InheritsFrom":"1","Name":"196","NameKo":null},{"Detail":"","Id":"Miner\/MinerPickaxeMinionDurable","InheritsFrom":"1","Name":"385","NameKo":null},{"Detail":"","Id":"ChaosElemental\/EssenceChaosElemental","InheritsFrom":"1","Name":"640","NameKo":null},{"Detail":"","Id":"KaomWarrior\/KaomWarrior2","InheritsFrom":"1","Name":"143","NameKo":null},{"Detail":"","Id":"Hound\/HoundBoss2","InheritsFrom":"1","Name":"412","NameKo":null},{"Detail":"","Id":"Taniwha\/TaniwhaBoss","InheritsFrom":"1","Name":"301","NameKo":null},{"Detail":"","Id":"TaniwhaTail\/TaniwhaTailBoss","InheritsFrom":"1","Name":"299","NameKo":null},{"Detail":"","Id":"TaniwhaTail\/TaniwhaTailMapBoss","InheritsFrom":"1","Name":"275","NameKo":null},{"Detail":"","Id":"Kaom\/KaomBoss","InheritsFrom":"1","Name":"1350","NameKo":null},{"Detail":"","Id":"Lion\/LionColosseum","InheritsFrom":"1","Name":"214","NameKo":null},{"Detail":"","Id":"EyeSpawner\/EyeSpawner","InheritsFrom":"1","Name":"202","NameKo":null},{"Detail":"","Id":"EyeSpawner\/EyeSpawnerEmergePiety","InheritsFrom":"1","Name":"2100","NameKo":null},{"Detail":"","Id":"Maligaro\/Maligaro","InheritsFrom":"1","Name":"1440","NameKo":null},{"Detail":"","Id":"Doedre\/DoedreUniqueMap","InheritsFrom":"1","Name":"12000","NameKo":null},{"Detail":"","Id":"Malachai\/MalachaiBoss","InheritsFrom":"1","Name":"2200","NameKo":null},{"Detail":"","Id":"LightningGolem\/LightningGolem","InheritsFrom":"1","Name":"272","NameKo":null},{"Detail":"","Id":"CrabParasite\/CrabParasiteSmall","InheritsFrom":"1","Name":"81","NameKo":null},{"Detail":"","Id":"CrabParasite\/CrabParasiteMediumCoast","InheritsFrom":"1","Name":"82","NameKo":null},{"Detail":"","Id":"Snake\/SnakeSpitBossDescent","InheritsFrom":"1","Name":"77","NameKo":null},{"Detail":"","Id":"Necromancer\/NecromancerBossDescent","InheritsFrom":"1","Name":"95","NameKo":null},{"Detail":"","Id":"BanditLeaderInt\/BanditLeaderAliraDescent","InheritsFrom":"1","Name":"115","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonBossPrisonDescent","InheritsFrom":"1","Name":"92","NameKo":null},{"Detail":"","Id":"GemlingLegionnaire\/GemlingLegionnaireFireballMap_","InheritsFrom":"1","Name":"274","NameKo":null},{"Detail":"","Id":"GemlingLegionnaire\/GemlingLegionnaireGlacialCascadeMap","InheritsFrom":"1","Name":"244","NameKo":null},{"Detail":"","Id":"Revenant\/RevenantBoss","InheritsFrom":"1","Name":"432","NameKo":null},{"Detail":"","Id":"RockGolem\/RockGolemSummoned","InheritsFrom":"1","Name":"525","NameKo":null},{"Detail":"","Id":"RockGolem\/RockGolemSmall","InheritsFrom":"1","Name":"75","NameKo":null},{"Detail":"","Id":"Talisman\/TalismanSpiderMinion","InheritsFrom":"1","Name":"66","NameKo":null},{"Detail":"","Id":"Talisman\/TalismanSkeletonRhoa","InheritsFrom":"1","Name":"364","NameKo":null},{"Detail":"","Id":"Totems\/VaalSlamTotem","InheritsFrom":"1","Name":"744","NameKo":null},{"Detail":"","Id":"Spiders\/SpiderScale5Labyrinth","InheritsFrom":"1","Name":"72","NameKo":null},{"Detail":"","Id":"Rats\/ProphecyRatTreasure","InheritsFrom":"1","Name":"30","NameKo":null},{"Detail":"","Id":"Perandus\/PerandusGuardLieutenant1","InheritsFrom":"1","Name":"520","NameKo":null},{"Detail":"","Id":"Prophecy\/Oversoul","InheritsFrom":"1","Name":"850","NameKo":null},{"Detail":"","Id":"WickerMan\/WickerManAvarius","InheritsFrom":"1","Name":"990","NameKo":null},{"Detail":"","Id":"AtlasBosses\/PhoenixBoss","InheritsFrom":"1","Name":"1300","NameKo":null},{"Detail":"","Id":"StatueFingerMage\/StatueFingerMageMonster","InheritsFrom":"1","Name":"211","NameKo":null},{"Detail":"","Id":"AtlasBosses\/TheShaperBoss","InheritsFrom":"1","Name":"2560","NameKo":null},{"Detail":"","Id":"AtlasBosses\/TheShaperBossUberElder","InheritsFrom":"1","Name":"1648","NameKo":null},{"Detail":"","Id":"AtlasBosses\/TheShaperBossElderEncounter","InheritsFrom":"1","Name":"67","NameKo":null},{"Detail":"","Id":"AtlasBosses\/Zana","InheritsFrom":"1","Name":"12","NameKo":null},{"Detail":"","Id":"KaomWarrior\/KaomArcherShaperMinion","InheritsFrom":"1","Name":"605","NameKo":null},{"Detail":"","Id":"Pitbull\/PitbullShaperMinion","InheritsFrom":"1","Name":"660","NameKo":null},{"Detail":"","Id":"Hellion\/HellionBreachNormal","InheritsFrom":"1","Name":"118","NameKo":null},{"Detail":"","Id":"Hellion\/HellionBreachMap_","InheritsFrom":"1","Name":"468","NameKo":null},{"Detail":"","Id":"Hellion\/HellionBreachFlamebreathSpawner","InheritsFrom":"1","Name":"3375","NameKo":null},{"Detail":"","Id":"Kiweth\/KiwethBreachSpawner","InheritsFrom":"1","Name":"4125","NameKo":null},{"Detail":"","Id":"Miner\/MinerBreachMap","InheritsFrom":"1","Name":"358","NameKo":null},{"Detail":"","Id":"HalfSkeleton\/HalfSkeletonBreachChaosSpawner","InheritsFrom":"1","Name":"4875","NameKo":null},{"Detail":"","Id":"BreachBosses\/BreachBossFireWild","InheritsFrom":"1","Name":"3200","NameKo":null},{"Detail":"","Id":"AvariusCasticus\/AvariusCasticusWickerman","InheritsFrom":"1","Name":"4158","NameKo":null},{"Detail":"","Id":"AvariusCasticus\/AvariusCasticusWickermanMap","InheritsFrom":"1","Name":"398","NameKo":null},{"Detail":"","Id":"AvariusCasticus\/AvariusCasticusDivine","InheritsFrom":"1","Name":"1760","NameKo":null},{"Detail":"","Id":"BrineKing\/BrineKing","InheritsFrom":"1","Name":"2700","NameKo":null},{"Detail":"","Id":"Metadata\/Monster\/CageSpider\/CageSpider","InheritsFrom":"1","Name":"440","NameKo":null},{"Detail":"","Id":"LunarisSolaris\/LunarisUniqueMap","InheritsFrom":"1","Name":"5000","NameKo":null},{"Detail":"","Id":"GuardianOfLunaris\/GuardianOfLunarisUniqueMap","InheritsFrom":"1","Name":"3000","NameKo":null},{"Detail":"","Id":"Spiders\/BlackDeath\/BlackDeathMaligaroMap","InheritsFrom":"1","Name":"401","NameKo":null},{"Detail":"","Id":"SpiderPlated\/SpiderPlatedTailExplosion","InheritsFrom":"1","Name":"234","NameKo":null},{"Detail":"","Id":"KitavaBoss\/Kitava1","InheritsFrom":"1","Name":"7000","NameKo":null},{"Detail":"","Id":"KitavaBoss\/KitavaFinal","InheritsFrom":"1","Name":"5500","NameKo":null},{"Detail":"","Id":"Tukohama\/Tukohama","InheritsFrom":"1","Name":"1520","NameKo":null},{"Detail":"","Id":"Frog\/FrogGod\/SilverFrogImage","InheritsFrom":"1","Name":"104","NameKo":null},{"Detail":"","Id":"SkeletonCannon\/SkeletonCannon1","InheritsFrom":"1","Name":"207","NameKo":null},{"Detail":"","Id":"MarakethBird\/Bird1SpiritBossMinion","InheritsFrom":"1","Name":"1250","NameKo":null},{"Detail":"","Id":"Garukhan\/Garukhan","InheritsFrom":"1","Name":"2500","NameKo":null},{"Detail":"","Id":"GemMonster\/IguanaBossPhoenix","InheritsFrom":"1","Name":"1680","NameKo":null},{"Detail":"","Id":"Doedre\/DoedreSoul","InheritsFrom":"1","Name":"1900","NameKo":null},{"Detail":"","Id":"Shavronne\/ShavronneSoul","InheritsFrom":"1","Name":"1840","NameKo":null},{"Detail":"","Id":"UnholyTrio\/UnholyTrio","InheritsFrom":"1","Name":"4860","NameKo":null},{"Detail":"","Id":"Vendigo\/VendigoAbyssLarge","InheritsFrom":"1","Name":"184","NameKo":null},{"Detail":"","Id":"Vendigo\/VendigoAbyssLargeClone","InheritsFrom":"1","Name":"167","NameKo":null},{"Detail":"","Id":"AtlasBosses\/TheElder\/TheElder","InheritsFrom":"1","Name":"1860","NameKo":null},{"Detail":"","Id":"AtlasBosses\/TheElder\/TheElderUnstable","InheritsFrom":"1","Name":"940","NameKo":null},{"Detail":"","Id":"HuhuGrub\/AbyssGrubStationary","InheritsFrom":"1","Name":"212","NameKo":null},{"Detail":"","Id":"TentaclePortal\/TentaclePortal1","InheritsFrom":"1","Name":"875","NameKo":null},{"Detail":"","Id":"TentaclePortal\/TentaclePortalElderGlyph1_","InheritsFrom":"1","Name":"1750","NameKo":null},{"Detail":"","Id":"LeagueBestiary\/Avians\/MarakethBirdBestiaryMinion2","InheritsFrom":"1","Name":"720","NameKo":null},{"Detail":"","Id":"LeagueBestiary\/MarakethBirdSpiritBoss","InheritsFrom":"1","Name":"3125","NameKo":null},{"Detail":"","Id":"LeagueBestiary\/NessaCrabBestiarySpiritBoss","InheritsFrom":"1","Name":"2375","NameKo":null},{"Detail":"","Id":"Vilenta\/Vilenta","InheritsFrom":"1","Name":"3080","NameKo":null},{"Detail":"","Id":"LeagueIncursion\/VaalSaucerBoss","InheritsFrom":"1","Name":"795","NameKo":null},{"Detail":"","Id":"Monkeys\/BloodMonkeyRoyale","InheritsFrom":"1","Name":"163","NameKo":null},{"Detail":"","Id":"KitavaCultist\/VaalCultistDaggersFireMap","InheritsFrom":"1","Name":"241","NameKo":null},{"Detail":"","Id":"KitavaCultist\/VaalCultistKnifestickFireMap","InheritsFrom":"1","Name":"266","NameKo":null},{"Detail":"","Id":"KitavaCultist\/VaalCultistKnifestickFireMapSideArea","InheritsFrom":"1","Name":"89","NameKo":null},{"Detail":"","Id":"VaalWraith\/VaalWraithChampionSextantMap","InheritsFrom":"1","Name":"569","NameKo":null},{"Detail":"","Id":"incaminion\/FragmentIncursionMap","InheritsFrom":"1","Name":"201","NameKo":null},{"Detail":"","Id":"Snake\/SnakeMeleeIncaIncursionMap","InheritsFrom":"1","Name":"302","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMeleeKnightElementalMaulIncursionMap","InheritsFrom":"1","Name":"281","NameKo":null},{"Detail":"","Id":"Skeletons\/SkeletonMeleeKnightElementalLargeSwordIncursion","InheritsFrom":"1","Name":"248","NameKo":null},{"Detail":"","Id":"LeagueDelve\/QiongqiChampion","InheritsFrom":"1","Name":"488","NameKo":null},{"Detail":"","Id":"Lion\/LionWolfDelve","InheritsFrom":"1","Name":"219","NameKo":null},{"Detail":"","Id":"LeagueBetrayal\/BetrayalCatarina1","InheritsFrom":"1","Name":"938","NameKo":null},{"Detail":"","Id":"LeagueBetrayal\/BetrayalCatarina2","InheritsFrom":"1","Name":"712","NameKo":null},{"Detail":"","Id":"LeagueSynthesis\/SynthesisGolemBoss","InheritsFrom":"1","Name":"666","NameKo":null},{"Detail":"","Id":"LeagueSynthesis\/SynthesisSoulstealerBoss","InheritsFrom":"1","Name":"810","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionKaruiMelee","InheritsFrom":"1","Name":"276","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionKaruiAncestor","InheritsFrom":"1","Name":"470","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionKaruiGeneral","InheritsFrom":"1","Name":"614","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionEternalEmpireMeleeBanner","InheritsFrom":"1","Name":"359","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionEternalEmpireSergeantHeavy","InheritsFrom":"1","Name":"338","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionMarakethMeleeLarge","InheritsFrom":"1","Name":"548","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionMarakethRider","InheritsFrom":"1","Name":"408","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionTemplarCaster1","InheritsFrom":"1","Name":"345","NameKo":null},{"Detail":"","Id":"LegionLeague\/LegionVaalCultistKnifestick","InheritsFrom":"1","Name":"344","NameKo":null},{"Detail":"","Id":"Seawitch\/SeawitchBossDaughterFireFlies","InheritsFrom":"1","Name":"5","NameKo":null},{"Detail":"","Id":"Totems\/ShockAndHorrorLightningWarpTotem","InheritsFrom":"1","Name":"529","NameKo":null},{"Detail":"","Id":"LeagueBlight\/Generic\/BanditMeleeKamikaze_","InheritsFrom":"1","Name":"490","NameKo":null},{"Detail":"","Id":"LeagueBlight\/Generic\/SkeletonNecromancer","InheritsFrom":"1","Name":"1125","NameKo":null},{"Detail":"","Id":"LeagueBlight\/Generic\/MonkeySlow","InheritsFrom":"1","Name":"390","NameKo":null},{"Detail":"","Id":"LeagueBlight\/Generic\/SnakeMeleeSlow","InheritsFrom":"1","Name":"625","NameKo":null},{"Detail":"","Id":"LeagueBlight\/Generic\/Bull","InheritsFrom":"1","Name":"1275","NameKo":null},{"Detail":"","Id":"AtlasExiles\/CrusaderInfluenceMonsters\/CrusaderBlackguardInquisitor","InheritsFrom":"1","Name":"243","NameKo":null},{"Detail":"","Id":"AtlasPreQuest\/OriathBlackguardMeleeChampion","InheritsFrom":"1","Name":"8400","NameKo":null}]}]}
--------------------------------------------------------------------------------
/_POE_Data/Prophecies.txt:
--------------------------------------------------------------------------------
1 | {"result":[{"data":[{"Detail":"","Id":"Prophecies\/CrashInstanceDebug","InheritsFrom":"Prophecies\/Prophecy","Name":"충돌 테스트","NameKo":null},{"Detail":"","Id":"Prophecies\/DelayInstanceDebug","InheritsFrom":"Prophecies\/Prophecy","Name":"지연시간 테스트","NameKo":null},{"Detail":"","Id":"Prophecies\/DelayCrashInstanceDebug","InheritsFrom":"Prophecies\/Prophecy","Name":"충돌 및 지연시간 테스트","NameKo":null},{"Detail":"","Id":"Prophecies\/AtziriDropsVaults","InheritsFrom":"Prophecies\/Prophecy","Name":"여왕의 금고실","NameKo":null},{"Detail":"","Id":"Prophecies\/TormentedSpiritDropsUnique","InheritsFrom":"Prophecies\/Prophecy","Name":"비범한 혼백","NameKo":null},{"Detail":"","Id":"Prophecies\/ExileDropsAllRare","InheritsFrom":"Prophecies\/Prophecy","Name":"부유한 유배자","NameKo":null},{"Detail":"","Id":"Prophecies\/ExileSummonsWarband","InheritsFrom":"Prophecies\/Prophecy","Name":"정찰병","NameKo":null},{"Detail":"","Id":"Prophecies\/StrongboxSpawnsExile","InheritsFrom":"Prophecies\/Prophecy","Name":"매복하는 자","NameKo":null},{"Detail":"","Id":"Prophecies\/AlchemistDropsAlchemyOrb","InheritsFrom":"Prophecies\/Prophecy","Name":"연금술사","NameKo":null},{"Detail":"","Id":"Prophecies\/RoyalActBossDropsRegalOrb","InheritsFrom":"Prophecies\/Prophecy","Name":"제왕의 죽음","NameKo":null},{"Detail":"","Id":"Prophecies\/VaalSideBossDropsVaalOrb","InheritsFrom":"Prophecies\/Prophecy","Name":"타락한 자","NameKo":null},{"Detail":"","Id":"Prophecies\/IzaroDropsAdditionalTreasureKey","InheritsFrom":"Prophecies\/Prophecy","Name":"황제의 발견물","NameKo":null},{"Detail":"","Id":"Prophecies\/InnerTreasureMonsterDropsAdditionalUnique","InheritsFrom":"Prophecies\/Prophecy","Name":"탐욕의 천벌","NameKo":null},{"Detail":"","Id":"Prophecies\/UniqueMonsterDropsUnique","InheritsFrom":"Prophecies\/Prophecy","Name":"보이지 말아야 함","NameKo":null},{"Detail":"","Id":"Prophecies\/HillockDropsTheAnvil","InheritsFrom":"Prophecies\/Prophecy","Name":"대장장이","NameKo":null},{"Detail":"","Id":"Prophecies\/PossessedMonsterSpawnsTormentedSpirit","InheritsFrom":"Prophecies\/Prophecy","Name":"완력을 통한 퇴마","NameKo":null},{"Detail":"","Id":"Prophecies\/MapBossDropsRareMap","InheritsFrom":"Prophecies\/Prophecy","Name":"몽상가의 꿈","NameKo":null},{"Detail":"","Id":"Prophecies\/MapShavronneBrutus","InheritsFrom":"Prophecies\/Prophecy","Name":"탐미주의자의 혼백","NameKo":null},{"Detail":"","Id":"Prophecies\/MapKoleBrutus","InheritsFrom":"Prophecies\/Prophecy","Name":"전우들","NameKo":null},{"Detail":"","Id":"Prophecies\/MapDoedreStoneCircle","InheritsFrom":"Prophecies\/Prophecy","Name":"마법의 메아리","NameKo":null},{"Detail":"","Id":"Prophecies\/MapKadakaKuduku","InheritsFrom":"Prophecies\/Prophecy","Name":"불행의 신","NameKo":null},{"Detail":"","Id":"Prophecies\/MapMaligaroFidelitas","InheritsFrom":"Prophecies\/Prophecy","Name":"변이의 메아리","NameKo":null},{"Detail":"","Id":"Prophecies\/MapDaressoMerveil","InheritsFrom":"Prophecies\/Prophecy","Name":"죽은 연인의 메아리","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraHaku","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraTora","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraCatarina","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraVagan","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraElreon","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraVorici","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraZana","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraEinhar","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraAlva","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraNiko","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraJun","InheritsFrom":"Prophecies\/Prophecy","Name":"대가가 도움을 청하다","NameKo":null},{"Detail":"","Id":"Prophecies\/MapCorruptedSideArea","InheritsFrom":"Prophecies\/Prophecy","Name":"숨겨진 바알의 길","NameKo":null},{"Detail":"","Id":"Prophecies\/MapSpawnRareZombies","InheritsFrom":"Prophecies\/Prophecy","Name":"냉혹한 언데드 무리","NameKo":null},{"Detail":"","Id":"Prophecies\/MapSpawnRogueExiles","InheritsFrom":"Prophecies\/Prophecy","Name":"야생 유배자 4인방","NameKo":null},{"Detail":"","Id":"Prophecies\/RareMonsterKillSpawnsUniqueBloodElementalWithSlainMonstersMods","InheritsFrom":"Prophecies\/Prophecy","Name":"깨어난 피","NameKo":null},{"Detail":"","Id":"Prophecies\/SellingFiveUniquesToVendorReturnsRandomUnique","InheritsFrom":"Prophecies\/Prophecy","Name":"정체불명의 염가 상품","NameKo":null},{"Detail":"","Id":"Prophecies\/ChaosOrbRecipeCreatesAdditionalChaosOrb","InheritsFrom":"Prophecies\/Prophecy","Name":"귀중한 조합","NameKo":null},{"Detail":"","Id":"Prophecies\/RollingSixSocketBodyArmourLinksAllSockets","InheritsFrom":"Prophecies\/Prophecy","Name":"예견된 연결","NameKo":null},{"Detail":"","Id":"Prophecies\/ItemAbleToBecomesUniqueWhenChanceOrbApplied","InheritsFrom":"Prophecies\/Prophecy","Name":"오물에서 보물로","NameKo":null},{"Detail":"","Id":"Prophecies\/ArmourAbleToBecomesFiveLinkedWhenJewellersOrbApplied","InheritsFrom":"Prophecies\/Prophecy","Name":"보석 상인의 손길","NameKo":null},{"Detail":"","Id":"Prophecies\/MasterMissionExtraRewards","InheritsFrom":"Prophecies\/Prophecy","Name":"관대한 대가","NameKo":null},{"Detail":"","Id":"Prophecies\/SkillGemDropsWith20QualityAllocatedToYou","InheritsFrom":"Prophecies\/Prophecy","Name":"에라스무스의 선물","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingKaomWithKaomsSignAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"왕의 길","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingGemlingLegionareWithKaruiWardAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"카루이의 봉기","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingDaressoWithBramblejackAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"왕과 가시나무","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingShavronneWithShavronnesPaceAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"에너지의 흐름","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingNightwaneWithDeathsHarpAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"활시위의 가락","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingBeyondUniqueWithBlackheartAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"공허로부터","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingGneissWithCragheadAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"무거운 타격","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingHatebeatWithBlackgleamAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"화염과 유황","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingTorchoakGroveWithArakuTikiAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"거짓 우상의 숲","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingHailrakeWithHrimsorrowAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"화염과 얼음","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingShavronneWithCrownOfThornsAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"쾌락과 고통","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingGemlingLegionnaireWithEzomytePeakAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"돌아온 핏빛 꽃송이","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingGraviciusWithDeidbellAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"죽어가는 함성","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingDoedreWithChaliceOfHorrorsAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"공포의 입","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingCalafHeadstaverWithSpringleafAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"자연의 회복력","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingChattersWithKaltenhaltAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"꺼진 불꽃","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingHundredFootShadowWithScreamingEagleAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"최상위 포식자","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingHammerstormWithLimbsplitAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"잘린 팔다리","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingVaalOversoulWithDoomfletchAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"고대의 파멸","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingKalFoxflyWithSilverbranchAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"은빛 나무","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingFidelitasWithStormCloudAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"노예의 심장","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingSoulmournWithHrimnorsHymnAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"겨울의 구슬픈 선율","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingPietyWithReverberationRodAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"증폭된 힘","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingGeofriWithRealmshaperAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"시작과 끝","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingBoneQueenWithQueensDecreeAddsSpecificMod","InheritsFrom":"Prophecies\/Prophecy","Name":"오판한 여왕","NameKo":null},{"Detail":"","Id":"Prophecies\/UniqueMonsterKillTurnsAllNormalMonstersIntoMagic","InheritsFrom":"Prophecies\/Prophecy","Name":"보이지 말아야 함","NameKo":null},{"Detail":"","Id":"Prophecies\/TheBlackStone1","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 돌 I","NameKo":null},{"Detail":"","Id":"Prophecies\/TheBlackStone2","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 돌 II","NameKo":null},{"Detail":"","Id":"Prophecies\/TheBlackStone3","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 돌 III","NameKo":null},{"Detail":"","Id":"Prophecies\/TheBlackStone4","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 돌 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/RareRuinedTitanDropsClayShaper","InheritsFrom":"Prophecies\/Prophecy","Name":"걸어 다니는 산","NameKo":null},{"Detail":"","Id":"Prophecies\/RareAxiomThunderGuardDropsStormPrison","InheritsFrom":"Prophecies\/Prophecy","Name":"수용소의 간수","NameKo":null},{"Detail":"","Id":"Prophecies\/RareMadGladiatorDropsDaressosPassion","InheritsFrom":"Prophecies\/Prophecy","Name":"검의 제왕의 열망","NameKo":null},{"Detail":"","Id":"Prophecies\/RareMurkRunnerDropsTheScreamingEagle","InheritsFrom":"Prophecies\/Prophecy","Name":"독수리의 함성","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDrippingDeadDropsLifesprig","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음 속에서 삶이 피어난다","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBrittlePoacherDropsStormCloud","InheritsFrom":"Prophecies\/Prophecy","Name":"지평선의 태풍","NameKo":null},{"Detail":"","Id":"Prophecies\/RareSeethingBrineDropsWanderlust","InheritsFrom":"Prophecies\/Prophecy","Name":"단단한 기반","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBeardedShamanDropsKaruiWard","InheritsFrom":"Prophecies\/Prophecy","Name":"감옥의 수호","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDevourerDropsWideswing","InheritsFrom":"Prophecies\/Prophecy","Name":"광활하게 퍼지는 공포","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBeardedDevilDropsAxiomPerpetuum","InheritsFrom":"Prophecies\/Prophecy","Name":"수용소 열쇠","NameKo":null},{"Detail":"","Id":"Prophecies\/RareOaksDevotedDropsRothsReach","InheritsFrom":"Prophecies\/Prophecy","Name":"로스의 유산","NameKo":null},{"Detail":"","Id":"Prophecies\/RareAncientConstructDropsAtzirisFoible","InheritsFrom":"Prophecies\/Prophecy","Name":"영혼 없는 짐승","NameKo":null},{"Detail":"","Id":"Prophecies\/RareSinLordDropsStoneOfLazhwar","InheritsFrom":"Prophecies\/Prophecy","Name":"죄인의 돌","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDeathBishopDropsGeofrisBaptism","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음에 이르는 세례","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBlackguardArcmageDropsReverberationRod","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 옷을 입은 여인","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDockhandWraithDropsRothsReach","InheritsFrom":"Prophecies\/Prophecy","Name":"파도를 뚫고","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBlackguardEliteDropsFacebreaker","InheritsFrom":"Prophecies\/Prophecy","Name":"잔인한 집행자","NameKo":null},{"Detail":"","Id":"Prophecies\/RareFlameSentinelDropsGoldrim","InheritsFrom":"Prophecies\/Prophecy","Name":"은총의 화염","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDrownedDropsMoonbendersWing","InheritsFrom":"Prophecies\/Prophecy","Name":"암초의 태풍","NameKo":null},{"Detail":"","Id":"Prophecies\/RarePockedLanternbearerDropsTwyzel","InheritsFrom":"Prophecies\/Prophecy","Name":"석화된 존재","NameKo":null},{"Detail":"","Id":"Prophecies\/RareVollsVanguardDropsDeathsHarp","InheritsFrom":"Prophecies\/Prophecy","Name":"선봉대","NameKo":null},{"Detail":"","Id":"Prophecies\/RareUndyingEvangelistDropsTabulaRasa","InheritsFrom":"Prophecies\/Prophecy","Name":"죄악의 청소자","NameKo":null},{"Detail":"","Id":"Prophecies\/RareFightingBullDropsMeginordsGirdle","InheritsFrom":"Prophecies\/Prophecy","Name":"소처럼 강인하게","NameKo":null},{"Detail":"","Id":"Prophecies\/RareSkulkingDwellerDropsWindsOfChange","InheritsFrom":"Prophecies\/Prophecy","Name":"파멸한 산 송장","NameKo":null},{"Detail":"","Id":"Prophecies\/RareFrostPriestDropsTheWhisperingIce","InheritsFrom":"Prophecies\/Prophecy","Name":"속삭이는 기도","NameKo":null},{"Detail":"","Id":"Prophecies\/RareAncientArcherDropsDrillneck","InheritsFrom":"Prophecies\/Prophecy","Name":"마지막 보초","NameKo":null},{"Detail":"","Id":"Prophecies\/RareSuturedAberrationDropsMaligarosVirtuosity","InheritsFrom":"Prophecies\/Prophecy","Name":"놀라운 손","NameKo":null},{"Detail":"","Id":"Prophecies\/RareWanderingEyeDropsEyeOfChayula","InheritsFrom":"Prophecies\/Prophecy","Name":"감시자의 감시자","NameKo":null},{"Detail":"","Id":"Prophecies\/RareKaomsChosenDropsHezemanasBloodlust","InheritsFrom":"Prophecies\/Prophecy","Name":"배신당한 자의 피","NameKo":null},{"Detail":"","Id":"Prophecies\/RareUndyingIncineratorDropsSireOfShards","InheritsFrom":"Prophecies\/Prophecy","Name":"화염의 심장","NameKo":null},{"Detail":"","Id":"Prophecies\/RarePockedMinerDropsInfractem","InheritsFrom":"Prophecies\/Prophecy","Name":"상처 난 살점","NameKo":null},{"Detail":"","Id":"Prophecies\/RareAssaultRibbonDropsTearOfPurity","InheritsFrom":"Prophecies\/Prophecy","Name":"침묵의 관리인","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBonewarpedWarriorDropsBellyOfTheBeast","InheritsFrom":"Prophecies\/Prophecy","Name":"짐승의 살점","NameKo":null},{"Detail":"","Id":"Prophecies\/RareCinderElementalDropsMarohiErqi","InheritsFrom":"Prophecies\/Prophecy","Name":"불과 나무와 돌","NameKo":null},{"Detail":"","Id":"Prophecies\/RareChaosSentinelDropsSingularity","InheritsFrom":"Prophecies\/Prophecy","Name":"기이한 광채","NameKo":null},{"Detail":"","Id":"Prophecies\/RareGalvanicRibbonDropsWindripper","InheritsFrom":"Prophecies\/Prophecy","Name":"바람과 천둥","NameKo":null},{"Detail":"","Id":"Prophecies\/RareUndyingArchivistDropsAstramentis","InheritsFrom":"Prophecies\/Prophecy","Name":"책 속에서 길을 잃다","NameKo":null},{"Detail":"","Id":"Prophecies\/RareDrippingDeadDropsRainbowstrides","InheritsFrom":"Prophecies\/Prophecy","Name":"흐느끼는 죽음","NameKo":null},{"Detail":"","Id":"Prophecies\/RareGutFlayerDropsBinosKitchenKnifeMap","InheritsFrom":"Prophecies\/Prophecy","Name":"피부가 벗겨진 자","NameKo":null},{"Detail":"","Id":"Prophecies\/RareTunnelerDropsPledgeOfHandsMap","InheritsFrom":"Prophecies\/Prophecy","Name":"실속 없는 약속","NameKo":null},{"Detail":"","Id":"Prophecies\/RareTalonArcherDropsVoltaxicRiftMap","InheritsFrom":"Prophecies\/Prophecy","Name":"공허로의 부름","NameKo":null},{"Detail":"","Id":"Prophecies\/RareMadGladiatorDropsTheBringerOfRainMap","InheritsFrom":"Prophecies\/Prophecy","Name":"피맺힌 눈","NameKo":null},{"Detail":"","Id":"Prophecies\/RareBroodingTarantulaDropsRatsNestMap","InheritsFrom":"Prophecies\/Prophecy","Name":"둥지","NameKo":null},{"Detail":"","Id":"Prophecies\/SpawnNecromancerAndSkeletonsInArea","InheritsFrom":"Prophecies\/Prophecy","Name":"강령술의 형제","NameKo":null},{"Detail":"","Id":"Prophecies\/BloodlinePackDropsFiveOrbsOfFusing","InheritsFrom":"Prophecies\/Prophecy","Name":"다시 이어진 유대","NameKo":null},{"Detail":"","Id":"Prophecies\/MonsterKillChanceToSpawnCurrencyFountain","InheritsFrom":"Prophecies\/Prophecy","Name":"넘치는 재물","NameKo":null},{"Detail":"","Id":"Prophecies\/ThePlaguemaw1","InheritsFrom":"Prophecies\/Prophecy","Name":"역병 나락 I","NameKo":null},{"Detail":"","Id":"Prophecies\/ThePlaguemaw2","InheritsFrom":"Prophecies\/Prophecy","Name":"역병 나락 II","NameKo":null},{"Detail":"","Id":"Prophecies\/ThePlaguemaw3","InheritsFrom":"Prophecies\/Prophecy","Name":"역병 나락 III","NameKo":null},{"Detail":"","Id":"Prophecies\/ThePlaguemaw4","InheritsFrom":"Prophecies\/Prophecy","Name":"역병 나락 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/ThePlaguemaw5","InheritsFrom":"Prophecies\/Prophecy","Name":"역병 나락 V","NameKo":null},{"Detail":"","Id":"Prophecies\/PathOfTheThaumaturgist1","InheritsFrom":"Prophecies\/Prophecy","Name":"마석학의 역사 I","NameKo":null},{"Detail":"","Id":"Prophecies\/PathOfTheThaumaturgist2","InheritsFrom":"Prophecies\/Prophecy","Name":"마석학의 역사 II","NameKo":null},{"Detail":"","Id":"Prophecies\/PathOfTheThaumaturgist3","InheritsFrom":"Prophecies\/Prophecy","Name":"마석학의 역사 III","NameKo":null},{"Detail":"","Id":"Prophecies\/PathOfTheThaumaturgist4","InheritsFrom":"Prophecies\/Prophecy","Name":"마석학의 역사 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/MapFairGravesBossOpensPortalToMaoKun","InheritsFrom":"Prophecies\/Prophecy","Name":"해적의 굴","NameKo":null},{"Detail":"","Id":"Prophecies\/MapChaosGolemBossOpensPortalToMaelstromOfChaos","InheritsFrom":"Prophecies\/Prophecy","Name":"마엘스트롬 입장","NameKo":null},{"Detail":"","Id":"Prophecies\/MapKudukuBossOpensPortalToOlmecsSanctum","InheritsFrom":"Prophecies\/Prophecy","Name":"돌의 지성소","NameKo":null},{"Detail":"","Id":"Prophecies\/MapMirageOfBonesOpensPortalToMirrorDesert","InheritsFrom":"Prophecies\/Prophecy","Name":"신기루를 지나서","NameKo":null},{"Detail":"","Id":"Prophecies\/AncientRivalries1","InheritsFrom":"Prophecies\/Prophecy","Name":"고대의 대립 I","NameKo":null},{"Detail":"","Id":"Prophecies\/AncientRivalries2","InheritsFrom":"Prophecies\/Prophecy","Name":"고대의 대립 II","NameKo":null},{"Detail":"","Id":"Prophecies\/AncientRivalries3","InheritsFrom":"Prophecies\/Prophecy","Name":"고대의 대립 III","NameKo":null},{"Detail":"","Id":"Prophecies\/AncientRivalries4","InheritsFrom":"Prophecies\/Prophecy","Name":"고대의 대립 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/TheFeralLord1","InheritsFrom":"Prophecies\/Prophecy","Name":"야생의 군주 I","NameKo":null},{"Detail":"","Id":"Prophecies\/TheFeralLord2","InheritsFrom":"Prophecies\/Prophecy","Name":"야생의 군주 II","NameKo":null},{"Detail":"","Id":"Prophecies\/TheFeralLord3","InheritsFrom":"Prophecies\/Prophecy","Name":"야생의 군주 III","NameKo":null},{"Detail":"","Id":"Prophecies\/TheFeralLord4","InheritsFrom":"Prophecies\/Prophecy","Name":"야생의 군주 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/TheFeralLord5","InheritsFrom":"Prophecies\/Prophecy","Name":"야생의 군주 V","NameKo":null},{"Detail":"","Id":"Prophecies\/RatFlood","InheritsFrom":"Prophecies\/Prophecy","Name":"성가신 쥐 떼","NameKo":null},{"Detail":"","Id":"Prophecies\/AnarchysEnd1","InheritsFrom":"Prophecies\/Prophecy","Name":"혼란의 끝 I","NameKo":null},{"Detail":"","Id":"Prophecies\/AnarchysEnd2","InheritsFrom":"Prophecies\/Prophecy","Name":"혼란의 끝 II","NameKo":null},{"Detail":"","Id":"Prophecies\/AnarchysEnd3","InheritsFrom":"Prophecies\/Prophecy","Name":"혼란의 끝 III","NameKo":null},{"Detail":"","Id":"Prophecies\/AnarchysEnd4","InheritsFrom":"Prophecies\/Prophecy","Name":"혼란의 끝 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/CompletingLabyrinthRewardsTwoEnchantmentUses","InheritsFrom":"Prophecies\/Prophecy","Name":"두 배 인챈트","NameKo":null},{"Detail":"","Id":"Prophecies\/StrongboxMonstersSpawnedAsMagicOrHigher","InheritsFrom":"Prophecies\/Prophecy","Name":"보이지 않는 위험","NameKo":null},{"Detail":"","Id":"Prophecies\/MysteriousInvadersFire","InheritsFrom":"Prophecies\/Prophecy","Name":"수수께끼의 침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/MysteriousInvadersCold","InheritsFrom":"Prophecies\/Prophecy","Name":"수수께끼의 침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/MysteriousInvadersLightning","InheritsFrom":"Prophecies\/Prophecy","Name":"수수께끼의 침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/MysteriousInvadersPhysical","InheritsFrom":"Prophecies\/Prophecy","Name":"수수께끼의 침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/MysteriousInvadersChaos","InheritsFrom":"Prophecies\/Prophecy","Name":"수수께끼의 침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/UndeadSpawnInOldFields","InheritsFrom":"Prophecies\/Prophecy","Name":"언데드의 반란","NameKo":null},{"Detail":"","Id":"Prophecies\/DayOfSacrifice1","InheritsFrom":"Prophecies\/Prophecy","Name":"희생의 날 I","NameKo":null},{"Detail":"","Id":"Prophecies\/DayOfSacrifice2","InheritsFrom":"Prophecies\/Prophecy","Name":"희생의 날 II","NameKo":null},{"Detail":"","Id":"Prophecies\/DayOfSacrifice3","InheritsFrom":"Prophecies\/Prophecy","Name":"희생의 날 III","NameKo":null},{"Detail":"","Id":"Prophecies\/DayOfSacrifice4","InheritsFrom":"Prophecies\/Prophecy","Name":"희생의 날 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingRareGrantsShrineEffect","InheritsFrom":"Prophecies\/Prophecy","Name":"축복","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingRareStealsMods","InheritsFrom":"Prophecies\/Prophecy","Name":"사냥꾼의 교훈","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingRareDropsRareItem","InheritsFrom":"Prophecies\/Prophecy","Name":"체내 도금","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingUniqueDropsScouringOrb","InheritsFrom":"Prophecies\/Prophecy","Name":"기록 말살","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingRareSpawnsTormentedSpirit","InheritsFrom":"Prophecies\/Prophecy","Name":"고통을 끝내다","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingMonsterSpawnsEmergingMagicMonsters","InheritsFrom":"Prophecies\/Prophecy","Name":"숨어있던 지원군","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingNormalRevivesAsRare","InheritsFrom":"Prophecies\/Prophecy","Name":"부활","NameKo":null},{"Detail":"","Id":"Prophecies\/UseWhetstoneGetMaxQuality","InheritsFrom":"Prophecies\/Prophecy","Name":"벼린 칼날","NameKo":null},{"Detail":"","Id":"Prophecies\/UseArmourersScrapGetMaxQuality","InheritsFrom":"Prophecies\/Prophecy","Name":"단단해진 방어구","NameKo":null},{"Detail":"","Id":"Prophecies\/TransmuteUpgradesItemToThreeModRare","InheritsFrom":"Prophecies\/Prophecy","Name":"황금 손","NameKo":null},{"Detail":"","Id":"Prophecies\/TransmuteRingOrJewelAddLife","InheritsFrom":"Prophecies\/Prophecy","Name":"생명의 변형","NameKo":null},{"Detail":"","Id":"Prophecies\/TransmuteEquipmentAddResistance","InheritsFrom":"Prophecies\/Prophecy","Name":"변화에 대한 저항","NameKo":null},{"Detail":"","Id":"Prophecies\/TransmuteBootsAddMovementSpeed","InheritsFrom":"Prophecies\/Prophecy","Name":"바람의 손길에 닿아","NameKo":null},{"Detail":"","Id":"Prophecies\/DivinationCardSpawnsWithJackInTheBoxAlso","InheritsFrom":"Prophecies\/Prophecy","Name":"한 쌍","NameKo":null},{"Detail":"","Id":"Prophecies\/UseChiselGetMaxQuality","InheritsFrom":"Prophecies\/Prophecy","Name":"아름다운 안내인","NameKo":null},{"Detail":"","Id":"Prophecies\/ReceiveARareItemGetFourMirroredInstead","InheritsFrom":"Prophecies\/Prophecy","Name":"칼란드라의 솜씨","NameKo":null},{"Detail":"","Id":"Prophecies\/TransmuteMapAddMod","InheritsFrom":"Prophecies\/Prophecy","Name":"질식 덩굴손","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraStrongboxes","InheritsFrom":"Prophecies\/Prophecy","Name":"후한 보답의 함정","NameKo":null},{"Detail":"","Id":"Prophecies\/MapExtraRogueExiles","InheritsFrom":"Prophecies\/Prophecy","Name":"야생 유배자 4인방","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTwinned","InheritsFrom":"Prophecies\/Prophecy","Name":"위험한 쌍둥이","NameKo":null},{"Detail":"","Id":"Prophecies\/ReadLoreGrantsWisdomScrolls","InheritsFrom":"Prophecies\/Prophecy","Name":"오랜 생각","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestFire","InheritsFrom":"Prophecies\/Prophecy","Name":"하늘에서 떨어지는 화염","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestIce","InheritsFrom":"Prophecies\/Prophecy","Name":"하늘에서 떨어지는 얼음","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestLightning","InheritsFrom":"Prophecies\/Prophecy","Name":"번개 폭포","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestUndead","InheritsFrom":"Prophecies\/Prophecy","Name":"언데드 태풍","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestPhysical","InheritsFrom":"Prophecies\/Prophecy","Name":"타쇄하는 돌풍","NameKo":null},{"Detail":"","Id":"Prophecies\/MapTempestCorrupt","InheritsFrom":"Prophecies\/Prophecy","Name":"바알의 바람","NameKo":null},{"Detail":"","Id":"Prophecies\/UniqueFireGolemAtFireFurysCamp","InheritsFrom":"Prophecies\/Prophecy","Name":"살아있는 화염","NameKo":null},{"Detail":"","Id":"Prophecies\/FarmerSkeletonsAtRuinedHouse","InheritsFrom":"Prophecies\/Prophecy","Name":"마침내 맞이한 휴경","NameKo":null},{"Detail":"","Id":"Prophecies\/KaruiWarriorsNearWeatheredCarvings","InheritsFrom":"Prophecies\/Prophecy","Name":"배신의 길","NameKo":null},{"Detail":"","Id":"Prophecies\/WeaponsRiseUpAroundLioneyesStandard","InheritsFrom":"Prophecies\/Prophecy","Name":"잊혀진 병사들","NameKo":null},{"Detail":"","Id":"Prophecies\/GoldenWaterElementalsRiseFromGoldPiles","InheritsFrom":"Prophecies\/Prophecy","Name":"부의 웅덩이","NameKo":null},{"Detail":"","Id":"Prophecies\/ChildOfLunarisAppearsInChapel","InheritsFrom":"Prophecies\/Prophecy","Name":"루나리스의 아이","NameKo":null},{"Detail":"","Id":"Prophecies\/ArmyOfUndeadSoldiersAppearInRuinedFortress","InheritsFrom":"Prophecies\/Prophecy","Name":"잊혀진 주둔지","NameKo":null},{"Detail":"","Id":"Prophecies\/TheStockkeeperAppears","InheritsFrom":"Prophecies\/Prophecy","Name":"창고 관리인","NameKo":null},{"Detail":"","Id":"Prophecies\/UniqueLightningGolemAppearsOutsideBubble","InheritsFrom":"Prophecies\/Prophecy","Name":"기이한 에너지","NameKo":null},{"Detail":"","Id":"Prophecies\/TwoUniqueBlackguardCaptainsAppearAtFarEnd","InheritsFrom":"Prophecies\/Prophecy","Name":"다리의 수문장","NameKo":null},{"Detail":"","Id":"Prophecies\/UniqueZombieBlackguardAtRuinedCart","InheritsFrom":"Prophecies\/Prophecy","Name":"타락의 손아귀 안에서","NameKo":null},{"Detail":"","Id":"Prophecies\/RareLunarisMiscreationsAppearAtScionCage","InheritsFrom":"Prophecies\/Prophecy","Name":"셉터에서 더럽혀진 존재","NameKo":null},{"Detail":"","Id":"Prophecies\/Tier1MapsSpawnedAtMapDevice","InheritsFrom":"Prophecies\/Prophecy","Name":"도난당한 지도","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaAllRaresAreCloned","InheritsFrom":"Prophecies\/Prophecy","Name":"쌍둥이","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaAllUniquesArePossessedByTormentedSpirits","InheritsFrom":"Prophecies\/Prophecy","Name":"사로잡힌 적","NameKo":null},{"Detail":"","Id":"Prophecies\/KillingTormentedSpiritTouchesAllMonsters","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 손길에 닿아","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaHasVaalMonstersAndOversoul","InheritsFrom":"Prophecies\/Prophecy","Name":"바알의 침략","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaHasOnlyStrongboxes","InheritsFrom":"Prophecies\/Prophecy","Name":"무시무시한 보물","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaIsLikeCorruptedSideArea","InheritsFrom":"Prophecies\/Prophecy","Name":"타락의 확산","NameKo":null},{"Detail":"","Id":"Prophecies\/FrogFlood","InheritsFrom":"Prophecies\/Prophecy","Name":"성가신 개구리 떼","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaContainsWashedUpCorpses","InheritsFrom":"Prophecies\/Prophecy","Name":"물에 빠진 자의 환영","NameKo":null},{"Detail":"","Id":"Prophecies\/MapContainsTrial","InheritsFrom":"Prophecies\/Prophecy","Name":"꿈결 시험","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaSpawnsUndead","InheritsFrom":"Prophecies\/Prophecy","Name":"\"땅, 벌레, 피\"","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaSpawnsInsectsAndQueens","InheritsFrom":"Prophecies\/Prophecy","Name":"허기진 무리","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaSpawnsSeaWitchesAndSpawn","InheritsFrom":"Prophecies\/Prophecy","Name":"저주받은 합창단","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaSpawnsRareDevourers","InheritsFrom":"Prophecies\/Prophecy","Name":"떨리는 지면","NameKo":null},{"Detail":"","Id":"Prophecies\/AreaContainsInvasionBoss","InheritsFrom":"Prophecies\/Prophecy","Name":"침략자","NameKo":null},{"Detail":"","Id":"Prophecies\/UnbearableWhispers1","InheritsFrom":"Prophecies\/Prophecy","Name":"견딜 수 없는 속삭임 I","NameKo":null},{"Detail":"","Id":"Prophecies\/UnbearableWhispers2","InheritsFrom":"Prophecies\/Prophecy","Name":"견딜 수 없는 속삭임 II","NameKo":null},{"Detail":"","Id":"Prophecies\/UnbearableWhispers3","InheritsFrom":"Prophecies\/Prophecy","Name":"견딜 수 없는 속삭임 III","NameKo":null},{"Detail":"","Id":"Prophecies\/UnbearableWhispers4","InheritsFrom":"Prophecies\/Prophecy","Name":"견딜 수 없는 속삭임 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/UnbearableWhispers5","InheritsFrom":"Prophecies\/Prophecy","Name":"견딜 수 없는 속삭임 V","NameKo":null},{"Detail":"","Id":"Prophecies\/TheUnbreathingQueen1","InheritsFrom":"Prophecies\/Prophecy","Name":"숨 쉬지 않는 여왕 I","NameKo":null},{"Detail":"","Id":"Prophecies\/TheUnbreathingQueen2","InheritsFrom":"Prophecies\/Prophecy","Name":"숨 쉬지 않는 여왕 II","NameKo":null},{"Detail":"","Id":"Prophecies\/TheUnbreathingQueen3","InheritsFrom":"Prophecies\/Prophecy","Name":"숨 쉬지 않는 여왕 III","NameKo":null},{"Detail":"","Id":"Prophecies\/TheUnbreathingQueen4","InheritsFrom":"Prophecies\/Prophecy","Name":"숨 쉬지 않는 여왕 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/TheUnbreathingQueen5","InheritsFrom":"Prophecies\/Prophecy","Name":"숨 쉬지 않는 여왕 V","NameKo":null},{"Detail":"","Id":"Prophecies\/TheAmbitiousBandit1","InheritsFrom":"Prophecies\/Prophecy","Name":"야심 있는 도적 I","NameKo":null},{"Detail":"","Id":"Prophecies\/TheAmbitiousBandit2","InheritsFrom":"Prophecies\/Prophecy","Name":"야심 있는 도적 II","NameKo":null},{"Detail":"","Id":"Prophecies\/TheAmbitiousBandit3","InheritsFrom":"Prophecies\/Prophecy","Name":"야심 있는 도적 III","NameKo":null},{"Detail":"","Id":"Prophecies\/DeadlyRivalry1","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 경쟁 I","NameKo":null},{"Detail":"","Id":"Prophecies\/DeadlyRivalry2","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 경쟁 II","NameKo":null},{"Detail":"","Id":"Prophecies\/DeadlyRivalry3","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 경쟁 III","NameKo":null},{"Detail":"","Id":"Prophecies\/DeadlyRivalry4","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 경쟁 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/DeadlyRivalry5","InheritsFrom":"Prophecies\/Prophecy","Name":"죽음의 경쟁 V","NameKo":null},{"Detail":"","Id":"Prophecies\/TheWarmongers1","InheritsFrom":"Prophecies\/Prophecy","Name":"전쟁광 I","NameKo":null},{"Detail":"","Id":"Prophecies\/TheWarmongers2","InheritsFrom":"Prophecies\/Prophecy","Name":"전쟁광 II","NameKo":null},{"Detail":"","Id":"Prophecies\/TheWarmongers3","InheritsFrom":"Prophecies\/Prophecy","Name":"전쟁광 III","NameKo":null},{"Detail":"","Id":"Prophecies\/TheWarmongers4","InheritsFrom":"Prophecies\/Prophecy","Name":"전쟁광 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/BeyondSight1","InheritsFrom":"Prophecies\/Prophecy","Name":"시야 너머 I","NameKo":null},{"Detail":"","Id":"Prophecies\/BeyondSight2","InheritsFrom":"Prophecies\/Prophecy","Name":"시야 너머 II","NameKo":null},{"Detail":"","Id":"Prophecies\/BeyondSight3","InheritsFrom":"Prophecies\/Prophecy","Name":"시야 너머 III","NameKo":null},{"Detail":"","Id":"Prophecies\/BeyondSight4","InheritsFrom":"Prophecies\/Prophecy","Name":"시야 너머 IV","NameKo":null},{"Detail":"","Id":"Prophecies\/ChestWithDivinationCards","InheritsFrom":"Prophecies\/Prophecy","Name":"점술가의 수집품","NameKo":null},{"Detail":"","Id":"Prophecies\/IcetombFated","InheritsFrom":"Prophecies\/Prophecy","Name":"빛의 종말","NameKo":null},{"Detail":"","Id":"Prophecies\/WondertrapFated","InheritsFrom":"Prophecies\/Prophecy","Name":"탐욕의 어리석음","NameKo":null},{"Detail":"","Id":"Prophecies\/BriskwrapFated","InheritsFrom":"Prophecies\/Prophecy","Name":"마지막 야생인","NameKo":null},{"Detail":"","Id":"Prophecies\/SundanceFated","InheritsFrom":"Prophecies\/Prophecy","Name":"태양의 응징","NameKo":null},{"Detail":"","Id":"Prophecies\/WindscreamFated","InheritsFrom":"Prophecies\/Prophecy","Name":"다크텅의 비명","NameKo":null},{"Detail":"","Id":"Prophecies\/DusktoeFated","InheritsFrom":"Prophecies\/Prophecy","Name":"황혼의 고통","NameKo":null},{"Detail":"","Id":"Prophecies\/MeginordsViseFated","InheritsFrom":"Prophecies\/Prophecy","Name":"탑의 몰락","NameKo":null},{"Detail":"","Id":"Prophecies\/DoedresTenureFated","InheritsFrom":"Prophecies\/Prophecy","Name":"심술궂은 마녀","NameKo":null},{"Detail":"","Id":"Prophecies\/HeatshiverFated","InheritsFrom":"Prophecies\/Prophecy","Name":"얼음과 화염의 환영","NameKo":null},{"Detail":"","Id":"Prophecies\/TimeclaspFated","InheritsFrom":"Prophecies\/Prophecy","Name":"시간의 균열","NameKo":null},{"Detail":"","Id":"Prophecies\/AtzirisMirrorFated","InheritsFrom":"Prophecies\/Prophecy","Name":"여왕의 희생","NameKo":null},{"Detail":"","Id":"Prophecies\/QuecholliFated","InheritsFrom":"Prophecies\/Prophecy","Name":"제국의 몰락","NameKo":null},{"Detail":"","Id":"Prophecies\/FencoilFated","InheritsFrom":"Prophecies\/Prophecy","Name":"탑에 갇히다","NameKo":null},{"Detail":"","Id":"Prophecies\/TheStormheartFated","InheritsFrom":"Prophecies\/Prophecy","Name":"태풍의 첨탑","NameKo":null},{"Detail":"","Id":"Prophecies\/FoxshadeFated","InheritsFrom":"Prophecies\/Prophecy","Name":"어둠의 본능","NameKo":null},{"Detail":"","Id":"Prophecies\/AsenathsMarkFated","InheritsFrom":"Prophecies\/Prophecy","Name":"세케마의 노래","NameKo":null},{"Detail":"","Id":"Prophecies\/HonourhomeFated","InheritsFrom":"Prophecies\/Prophecy","Name":"거머쥔 명예","NameKo":null},{"Detail":"","Id":"Prophecies\/MalachaisSimulaFated","InheritsFrom":"Prophecies\/Prophecy","Name":"깨어난 악몽","NameKo":null},{"Detail":"","Id":"Prophecies\/SidhebreathFated","InheritsFrom":"Prophecies\/Prophecy","Name":"WIP","NameKo":null},{"Detail":"","Id":"Prophecies\/TheIgnomonFated","InheritsFrom":"Prophecies\/Prophecy","Name":"맹목적인 믿음","NameKo":null},{"Detail":"","Id":"Prophecies\/TheMagnateFated1","InheritsFrom":"Prophecies\/Prophecy","Name":"북쪽의 위대한 자","NameKo":null},{"Detail":"","Id":"Prophecies\/TheMagnateFated2","InheritsFrom":"Prophecies\/Prophecy","Name":"북쪽의 위대한 지도자","NameKo":null},{"Detail":"","Id":"Prophecies\/BloodboilFated","InheritsFrom":"Prophecies\/Prophecy","Name":"냉혈의 광분","NameKo":null},{"Detail":"","Id":"Prophecies\/HyrrisBiteFated","InheritsFrom":"Prophecies\/Prophecy","Name":"불명예스러운 죽음","NameKo":null},{"Detail":"","Id":"Prophecies\/DreadarcFated","InheritsFrom":"Prophecies\/Prophecy","Name":"불타는 공포","NameKo":null},{"Detail":"","Id":"Prophecies\/GoredrillFated","InheritsFrom":"Prophecies\/Prophecy","Name":"진홍색 빛깔","NameKo":null},{"Detail":"","Id":"Prophecies\/GeofrisBaptismFated","InheritsFrom":"Prophecies\/Prophecy","Name":"검은 헌신","NameKo":null},{"Detail":"","Id":"Prophecies\/CameriasMaulFated","InheritsFrom":"Prophecies\/Prophecy","Name":"차가운 탐욕","NameKo":null},{"Detail":"","Id":"Prophecies\/RedbeakFated","InheritsFrom":"Prophecies\/Prophecy","Name":"공포의 로아","NameKo":null},{"Detail":"","Id":"Prophecies\/TheDancingDervishFated","InheritsFrom":"Prophecies\/Prophecy","Name":"강철의 춤사위","NameKo":null},{"Detail":"","Id":"Prophecies\/EclipseSolarisFated","InheritsFrom":"Prophecies\/Prophecy","Name":"눈부신 빛","NameKo":null},{"Detail":"","Id":"Prophecies\/IronHeartFated","InheritsFrom":"Prophecies\/Prophecy","Name":"전투에 단련된 자","NameKo":null},{"Detail":"","Id":"Prophecies\/ChoberChaberFated","InheritsFrom":"Prophecies\/Prophecy","Name":"신념의 발굴","NameKo":null},{"Detail":"","Id":"Prophecies\/MatuaTupunaFated","InheritsFrom":"Prophecies\/Prophecy","Name":"스승","NameKo":null},{"Detail":"","Id":"Prophecies\/GeofrisCrestFated","InheritsFrom":"Prophecies\/Prophecy","Name":"주교의 유산","NameKo":null}]}]}
--------------------------------------------------------------------------------
/_POE_Data/Syndicate_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/redSol/PoeTradeSearchEN/8103c5069c16b14b4b66f07dfc7c6232aa053f20/_POE_Data/Syndicate_0.jpg
--------------------------------------------------------------------------------
/_POE_Data/Temple_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/redSol/PoeTradeSearchEN/8103c5069c16b14b4b66f07dfc7c6232aa053f20/_POE_Data/Temple_0.jpg
--------------------------------------------------------------------------------