├── 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 | 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 --------------------------------------------------------------------------------