__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ClockStopped = true; AnsiString TempFileString[NumFiles] = { "InterfaceUnit.cpp", "GraphicUnit.cpp", "DisplayUnit.cpp", "TrackUnit.cpp", "TextUnit.cpp", "TrainUnit.cpp", "Utilities.cpp", "InterfaceUnit.h", "GraphicUnit.h", "DisplayUnit.h", "TrackUnit.h", "TextUnit.h", "TrainUnit.h", "Utilities.h", }; for(int x = 0; x < NumFiles; x++) { FileString[x] = TempFileString[x]; std::ifstream TempFile(FileString[x].c_str()); if(!TempFile) { throw Exception("Failed to open file " + FileString[x] + " program can't start"); } } }
//エントリーポイント int __stdcall wWinMain(HINSTANCE Instance,HINSTANCE,LPWSTR,int) { MSG Msg; std::vector<wchar_t> Buffer(MAX_PATH,0); DWORD Length; //自身のディレクトリを取得する Length=GetModuleFileName(nullptr,Buffer.data(),MAX_PATH); std::wstring ThisPath(Buffer.data()); ThisPath[ThisPath.find_last_of(L'\\')]=L'\0'; //カレントディレクトリをexeと同じ場所に設定 SetCurrentDirectory(ThisPath.c_str()); //Shiftキーが押されていたらアップロードした画像を開かない ShowBrowser=!(GetKeyState(VK_SHIFT)&0x8000); if(Gdiplus::GdiplusStartup(&Token,&StartupInput,nullptr)!=Gdiplus::Status::Ok) return 1; Brush.reset(CreateSolidBrush(RGB(100,100,100)),[](void* Obj){if(Obj) DeleteObject(Obj);}); std::atexit(ShutdownGdiplus); //引数にファイルが指定されていたら if(__argc==2){ //ファイルをアップロードして終了 if(IsPNG(__wargv[1])){ //PNG はそのままアップロード UploadFile(__wargv[1],ShowBrowser); }else{ //PNG 形式に変換 std::vector<wchar_t> TempDirectory(MAX_PATH,0),TempFile(MAX_PATH,0); GetTempPath(MAX_PATH,TempDirectory.data()); GetTempFileName(TempDirectory.data(),TempPrefix,0,TempFile.data()); if(ConvertPNG(TempFile.data(),__wargv[1])){ //アップロード UploadFile(TempFile.data(),ShowBrowser); }else{ //PNGに変換できなかった... MessageBox(nullptr,L"画像をPNG形式に変換する事が出来ません。",Title,MB_OK|MB_ICONERROR); } DeleteFile(TempFile.data()); } return true; } //ウィンドウクラスを登録 RegisterWindowClass(Instance); //アプリケーションの初期化 if(!InitInstance(Instance)) return 1; //メインメッセージループ while(GetMessage(&Msg,nullptr,0,0)){ TranslateMessage(&Msg); DispatchMessage(&Msg); } return (int)Msg.wParam; }
static void TestCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data)) { execute_context_t *exec; char *main_cfg; char *extra_cfg; txt_window_t *testwindow; txt_label_t *label; testwindow = TXT_NewWindow("Starting Doom"); label = TXT_NewLabel("Starting Doom to test the\n" "settings. Please wait."); TXT_SetWidgetAlign(label, TXT_HORIZ_CENTER); TXT_AddWidget(testwindow, label); TXT_DrawDesktop(); // Save temporary configuration files with the current configuration main_cfg = TempFile("tmp.cfg"); extra_cfg = TempFile("extratmp.cfg"); M_SaveMainDefaults(main_cfg); M_SaveExtraDefaults(extra_cfg); // Run with the -testcontrols parameter exec = NewExecuteContext(); AddCmdLineParameter(exec, "-testcontrols"); AddCmdLineParameter(exec, "-config \"%s\"", main_cfg); AddCmdLineParameter(exec, "-extraconfig \"%s\"", extra_cfg); ExecuteDoom(exec); TXT_CloseWindow(testwindow); // Delete the temporary config files remove(main_cfg); remove(extra_cfg); free(main_cfg); free(extra_cfg); }
void Patcher_HandleReceipt_NextPatchFile() { char* MessageContent = strstr( g_HTTPResultBuffer.GetData(), CRLF CRLF ); if( !MessageContent ) { // If we were updating, we're not anymore g_Patcher_IsUpdating = false; AddStatus( "Error receiving patch file.", g_StatusWarningColor ); ++g_NumWarnings; return; } MessageContent += 4; uint Offset = ( uint )( MessageContent - g_HTTPResultBuffer.GetData() ); uint ContentSize = g_HTTPSocket->AsyncGetBytesReceived() - Offset; // Compute the checksum for the payload and compare with the data in the manifest file uint32 ContentChecksum = Checksum::Adler32( ( uint8* )MessageContent, ContentSize ); SimpleString ContentLengthString = SimpleString::PrintF( "%d", ContentSize ); SimpleString ContentChecksumString = SimpleString::PrintF( "0x%08X", ContentChecksum ); SManifestFile& ManifestFile = g_FilesInManifest[ g_NextPatchFileIndex ]; SimpleString PatchFile = ManifestFile.m_Filename; if( ContentLengthString == ManifestFile.m_Length && ContentChecksumString == ManifestFile.m_Checksum ) { ManifestFile.m_Validated = true; FileStream TempFile( GetTempFileForPatchFile( PatchFile ).CStr(), FileStream::EFM_Write ); TempFile.Write( ContentSize, MessageContent ); AddStatus( SimpleString::PrintF( "%s received.", PatchFile.CStr() ), g_StatusColor ); } else { AddStatus( SimpleString::PrintF( "Checksum failure for %s.", PatchFile.CStr() ), g_StatusWarningColor ); ++g_NumWarnings; } g_NextPatchFileIndex++; // If there are remaining files, get them. if( g_NextPatchFileIndex < g_FilesInManifest.Size() ) { Patcher_GetNextPatchFile(); } else { FinishPatching(); } }
bool D2Container::parseFile(wchar_t const* path, D2Data* d2data) { sub.clear(); WIN32_FILE_ATTRIBUTE_DATA attr; if (!GetFileAttributesEx(path, GetFileExInfoStandard, &attr)) return false; uint64 lastWrite = uint64(attr.ftLastWriteTime.dwLowDateTime) | (uint64(attr.ftLastWriteTime.dwHighDateTime) << 32); if (lastWrite <= lastUpdate) return false; lastUpdate = lastWrite; for (int i = 0; i < items.length(); i++) items[i]->release(); items.clear(); LocalPtr<File> file = File::wopen(path, File::READ); String line; String header(WideString::format(L"%s / %s", parent->name, name)); while (file->gets(line)) { line.trim(); if (line.empty()) continue; LocalPtr<json::Value> value = json::Value::parse(TempFile(File::memfile(line.c_str(), line.length(), false))); if (value && value->type() == json::Value::tObject && value->hasProperty("itemColor", json::Value::tNumber) && value->hasProperty("image", json::Value::tString) && value->hasProperty("title", json::Value::tString) && value->hasProperty("description", json::Value::tString) && value->hasProperty("header", json::Value::tString) && value->hasProperty("sockets", json::Value::tArray)) { D2Item* item = new D2Item(this); item->invColor = value->get("itemColor")->getInteger(); item->image = value->get("image")->getString(); item->title = value->get("title")->getString(); item->description = value->get("description")->getString(); item->header = value->get("header")->getString(); if (!item->header.length()) item->header = header; json::Value* sockets = value->get("sockets"); for (uint32 i = 0; i < sockets->length(); i++) { json::Value* sock = sockets->at(i); if (sock->type() == json::Value::tString) item->sockets.push(sock->getString()); } item->parse(d2data); items.push(item); } } return true; }
static void TestCallback(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(data)) { execute_context_t *exec; char *main_cfg; char *extra_cfg; txt_window_t *testwindow; testwindow = TXT_MessageBox("Starting Doom", "Starting Doom to test the\n" "settings. Please wait."); TXT_DrawDesktop(); // Save temporary configuration files with the current configuration main_cfg = TempFile("tmp.cfg"); extra_cfg = TempFile("extratmp.cfg"); M_SaveDefaultsAlternate(main_cfg, extra_cfg); // Run with the -testcontrols parameter exec = NewExecuteContext(); AddCmdLineParameter(exec, "-testcontrols"); AddCmdLineParameter(exec, "-config \"%s\"", main_cfg); AddCmdLineParameter(exec, "-extraconfig \"%s\"", extra_cfg); ExecuteDoom(exec); TXT_CloseWindow(testwindow); // Delete the temporary config files remove(main_cfg); remove(extra_cfg); free(main_cfg); free(extra_cfg); }
BOOL PluginOILFilter::DoExport(CCLexFile* pXarFile, PathName* pPath) { // Here we should just need to wait for the process started in GetExportFile // to finish // Check stderr for errors and progress // However for now we will instead // Run the plugin with the following options // -e -g -f <filename> -x <xmlfilename> // The xmlfilename is a path to a user and filter specific file // e.g. ~/.XaraLX/filtername.xml // Check stderr for errors wxString sCommand(m_DoExport); sCommand.Replace(_T("%OUT%"), (LPCTSTR)pPath->GetPath()); sCommand.Replace(_T("%XML%"), m_XMLFile.GetFullPath()); TRACEUSER("Gerry", _T("Running '%s'"), sCommand.c_str()); CCDiskFile TempFile(CCFILE_DEFAULTSIZE, FALSE, FALSE); if (!TempFile.open(m_TempXarFile, ios::in | ios::binary)) { // report an error here return FALSE; } // Create a process with the TempFile as the stdin PluginFilterProcess* pTheProc = new PluginFilterProcess((PluginNativeFilter*)Parent, &TempFile, NULL); INT32 code = pTheProc->Execute(sCommand); TRACEUSER("Gerry", _T("Execute returned %d"), code); TempFile.close(); if (code != 0) { TRACEUSER("Gerry", _T("Execution of '%s' failed (%d)"), sCommand.c_str(), code); // Extract error and report it pTheProc->ReportError(); delete pTheProc; return(FALSE); } pTheProc->ReportWarning(); delete pTheProc; return(TRUE); }
execute_context_t *NewExecuteContext(void) { execute_context_t *result; result = malloc(sizeof(execute_context_t)); result->response_file = TempFile("chocolat.rsp"); result->stream = fopen(result->response_file, "w"); if (result->stream == NULL) { fprintf(stderr, "Error opening response file\n"); exit(-1); } return result; }
const string& CVC::DetectorFile() { const string fn = CurrentFullDataFileName(); auto d = detectorfile_map.find(fn); if (d==detectorfile_map.end()) { while (detectorfile_map.size()) { Unlink(detectorfile_map.begin()->second); detectorfile_map.erase(detectorfile_map.begin()); } pair<bool,string> tmp = TempFile("cvc_detector_"); string dn = tmp.second+BaseFileName()+".txt"; if (FileVerbose()) cout << "SOON creating <" << dn << ">" << endl; size_t g = grid; size_t y0 = g-1, x0 = g-1, y1 = Height()-g, x1 = Width()-g; size_t dy = g, dx = g; if (!g) { y0 = Height()/2; x0 = Width()/2; y1 = y0+1; x1 = x0+1; dx = dy = Width()+Height(); } list<pair<size_t,size_t> > l; for (size_t y=y0; y<y1; y+=dy) for (size_t x=x0; x<x1; x+=dx) l.push_back(make_pair(x, y)); ofstream os(dn); os << "KOEN1" << endl << "0" << endl << l.size() << endl; for (auto i=l.begin(); i!=l.end(); i++) os << "<CIRCLE " << i->first << " " << i->second << " " << radius << " 0 0>;;" << endl; detectorfile_map[fn] = dn; d = detectorfile_map.find(fn); } return d->second; }
//ウィンドウプロシージャ LRESULT __stdcall WndProc(HWND WindowHandle,UINT Message,WPARAM WParam,LPARAM LParam) { static bool CaptureStarted=false; static RECT CaptureRect={0}; switch(Message){ case WM_RBUTTONDOWN: //キャンセル DestroyWindow(WindowHandle); return DefWindowProc(WindowHandle,Message,WParam,LParam); break; case WM_TIMER: //ESCキー押下の検知 if(GetKeyState(VK_ESCAPE)&0x8000){ DestroyWindow(WindowHandle); return DefWindowProc(WindowHandle,Message,WParam,LParam); } break; case WM_MOUSEMOVE: if(CaptureStarted){ //新しい座標をセット CaptureRect.right=LOWORD(LParam)+OffsetX; CaptureRect.bottom=HIWORD(LParam)+OffsetY; DrawRubberband(CaptureRect); } break; case WM_LBUTTONDOWN: //クリップ開始 CaptureStarted=true; ShowWindow(LayerWindowHandle,SW_SHOW); //初期位置をセット CaptureRect.left=LOWORD(LParam)+OffsetX; CaptureRect.top=HIWORD(LParam)+OffsetY; //マウスをキャプチャ SetCapture(WindowHandle); break; case WM_LBUTTONUP: { //クリップ終了 CaptureStarted=false; ShowWindow(LayerWindowHandle,SW_HIDE); //マウスのキャプチャを解除 ReleaseCapture(); //新しい座標をセット CaptureRect.right=LOWORD(LParam)+OffsetX; CaptureRect.bottom=HIWORD(LParam)+OffsetY; HDC Hdc,NewHdc; HBITMAP NewBitmap; Hdc=GetDC(nullptr); //画像のキャプチャ int Width,Height; Width=std::abs(CaptureRect.right-CaptureRect.left+1); Height=std::abs(CaptureRect.bottom-CaptureRect.top+1); if(!Width||!Height) { //画像になってないので何もしない ReleaseDC(nullptr,Hdc); DestroyWindow(WindowHandle); break; } // ビットマップバッファを作成 NewBitmap=CreateCompatibleBitmap(Hdc,Width,Height); NewHdc=CreateCompatibleDC(Hdc); //関連づけ SelectObject(NewHdc,NewBitmap); //画像を取得 BitBlt(NewHdc,0,0,Width,Height,Hdc, CaptureRect.left<CaptureRect.right?CaptureRect.left:CaptureRect.right, CaptureRect.top<CaptureRect.bottom?CaptureRect.top:CaptureRect.bottom,SRCCOPY); //ウィンドウを隠す ShowWindow(WindowHandle,SW_HIDE); //テンポラリファイル名を決定 std::vector<wchar_t> TempDirectory(MAX_PATH,0),TempFile(MAX_PATH,0); GetTempPath(MAX_PATH,TempDirectory.data()); GetTempFileName(TempDirectory.data(),TempPrefix,0,TempFile.data()); if(SavePNG(TempFile.data(),NewBitmap)) UploadFile(TempFile.data(),ShowBrowser); else MessageBox(WindowHandle,L"一時ファイルの保存に失敗しました。",Title,MB_OK|MB_ICONERROR); //後始末 DeleteFile(TempFile.data()); DeleteDC(NewHdc); DeleteObject(NewBitmap); ReleaseDC(nullptr,Hdc); DestroyWindow(WindowHandle); } case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(WindowHandle,Message,WParam,LParam); } return 0; }
D2StatData::D2StatData(D2Data* _data) : data(_data) { str_to = data->getLocalizedString(3464); str_Level = data->getLocalizedString(4185); str_Returned = data->getLocalizedString(3013); D2Excel table(TempFile(data->getFile("data\\global\\excel\\ItemStatCost.txt"))); int col0 = table.colByName("descpriority"); statMatchers.push(); statReMatchers.push(); for (int i = 0; i < table.rows(); i++) { char const* name = table.value(i, 0); int id = atoi(table.value(i, 1)); if (!*name) continue; statDir.set(name, &stats[id]); stats[id].id = id; stats[id].acronym = statAcronyms[id]; stats[id].sort = atoi(table.value(i, col0)); stats[id].descfunc = atoi(table.value(i, col0 + 1)); stats[id].descval = atoi(table.value(i, col0 + 2)); stats[id].descpos = data->getLocalizedString(table.value(i, col0 + 3)); stats[id].descneg = data->getLocalizedString(table.value(i, col0 + 4)); stats[id].desc2 = data->getLocalizedString(table.value(i, col0 + 5)); stats[id].group = atoi(table.value(i, col0 + 6)) - 1; if (stats[id].group >= 0) stats[id].groupindex = 1; if (stats[id].descfunc == 17 || stats[id].descfunc == 18) continue; if ((id >= 305 && id <= 308) || id == 23 || id == 24) continue; if (id == 194) { soxString = String::format("%s (%%d)", data->getLocalizedString(3453)); stats[id].descpos = stats[id].descneg = soxString; stats[id].descfunc = 11; } if (id == 83) { for (int j = 0; j < sizeof clsString / sizeof clsString[0]; j++) addStatMatch(0, data->getLocalizedString(clsString[j]), &stats[id], j); } else if (id == 188) { for (int j = 0; j < sizeof tabString / sizeof tabString[0]; j++) { int mid = getAppendId(data->getLocalizedString(10917 + j / 3)); addStatMatch(mid, data->getLocalizedString(tabString[j]), &stats[id], j); } } else { int mid = getAppendId(stats[i].desc2); if (stats[i].descpos) addStatMatch(mid, stats[i].descpos, &stats[i], 0); if (stats[i].descneg && (!stats[i].descpos || strcmp(stats[i].descpos, stats[i].descneg))) addStatMatch(mid, stats[i].descneg, &stats[i], 0); } } int grpString[] = {22745, 3461, 10977, 10024, 3623, 3613, 3615, 3617, 3619, 10034, 10023}; int grpFunc[] = { 3, 3, 1, 19, 33, 33, 33, 33, 33, 34, 4}; int grpVal[] = { 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 1}; int grpSort[] = { 0, 200, 61, 34, 126, 101, 95, 98, 103, 91, 129}; for (int i = 0; i < 11; i++) { int id = GROUP_BASE + i - 2; stats[id].id = id; stats[id].acronym = statAcronyms[id]; stats[id].sort = grpSort[i]; stats[id].descfunc = grpFunc[i]; stats[id].descval = grpVal[i]; stats[id].descpos = data->getLocalizedString(grpString[i]); stats[id].descneg = data->getLocalizedString(grpString[i]); addStatMatch(0, stats[id].descpos, &stats[id], 0); } stats[21].group = 2; stats[21].groupindex = 1; stats[22].group = 2; stats[22].groupindex = 2; stats[48].group = 3; stats[48].groupindex = 1; stats[49].group = 3; stats[49].groupindex = 2; stats[50].group = 5; stats[50].groupindex = 1; stats[51].group = 5; stats[51].groupindex = 2; stats[54].group = 4; stats[54].groupindex = 1; stats[55].group = 4; stats[55].groupindex = 2; stats[56].group = 4; stats[56].groupindex = 0; stats[52].group = 6; stats[52].groupindex = 1; stats[53].group = 6; stats[53].groupindex = 2; stats[57].group = 7; stats[57].groupindex = 1; stats[58].group = 7; stats[58].groupindex = 2; stats[59].group = 7; stats[59].groupindex = 0; stats[17].group = 8; stats[17].groupindex = 1; stats[18].group = 8; stats[18].groupindex = 2; memset(skillNames, 0, sizeof skillNames); stats[97].descval = 1; stats[107].descval = 1; D2Excel skillTable(TempFile(data->getFile("data\\global\\excel\\skills.txt"))); for (int i = 0; i < skillTable.rows(); i++) { int id = atoi(skillTable.value(i, 1)); char const* name = data->getLocalizedString(String::format("skillname%d", id)); if (!name) name = data->getLocalizedString(String::format("skillsname%d", id)); if (!name) name = data->getLocalizedString(String::format("Skillname%d", id + 1)); if (!name) { if (*skillTable.value(i, 3)) int asdf = 0; continue; } skills.add(name, id); skillNames[id] = name; int cls = data->getCharClass(skillTable.value(i, 2)); skillClass[id] = cls; statMatchers[0].add(String::format("%s %s", str_to, name), MakePair(&stats[97], id)); if (cls >= 0) { int mid = getAppendId(data->getLocalizedString(10917 + cls)); statMatchers[mid].add(String::format("%s %s", str_to, name), MakePair(&stats[107], id)); } } for (int i = 0; i < statMatchers.length(); i++) statMatchers[i].build(); statAppendMatch.build(); skills.build(); prog_Level = new re::Prog(String::format("%s([0-9]+) (.*) ", str_Level)); prog_StatLeft = new re::Prog("([-+]?[0-9]+)%? "); prog_StatRight = new re::Prog(" ([-+]?[0-9]+)%?"); prog_StatRange = new re::Prog(" \\+([0-9]+)-([0-9]+)"); prog_EthSockets = compile(String::format("%s, %s (%%d)", data->getLocalizedString(22745), data->getLocalizedString(3453))); D2Excel propTable(TempFile(data->getFile("data\\global\\excel\\Properties.txt"))); for (int i = 0; i < propTable.rows(); i++) { ItemProp& prop = props.create(propTable.value(i, 0)); for (int c = 4; c < 32; c += 4) { int code = atoi(propTable.value(i, c)); if (!code) break; if (code == 36) continue; int param = atoi(propTable.value(i, c - 1)); D2Stat* stat; switch (code) { case 5: stat = &stats[21]; break; case 6: stat = &stats[22]; break; case 7: prop.push(MakePair(code, MakePair(&stats[17], param))); stat = &stats[18]; break; case 20: stat = &stats[152]; break; case 23: stat = &stats[359]; break; default: stat = statDir.get(propTable.value(i, c + 1)); } if (stat) prop.push(MakePair(code, MakePair(stat, param))); } if (!strcmp(propTable.value(i, 0), "dmg") && prop.length()) prop[0].first = 11; } }
Image::Image(char const* filename) { load(TempFile(File::open(filename, File::READ))); }
D2Data::D2Data() : itemTypes(DictionaryMap::alNum) , baseItems(DictionaryMap::alNum) , images(DictionaryMap::pathName) , fonts(DictionaryMap::pathName) { WideString path = cfg.getwstr("d2path"); if (path.empty()) path = getAppPath(); int loaded = !!loader.loadArchive(WideString::buildFullName(path, L"resources.mpq")); loaded += !!loader.loadArchive(WideString::buildFullName(path, L"d2data.mpq")); loaded += !!loader.loadArchive(WideString::buildFullName(path, L"d2exp.mpq")); loaded += !!loader.loadArchive(WideString::buildFullName(path, L"patch_d2.mpq")); if (!loaded) { path = getAppPath(); loaded = !!loader.loadArchive(WideString::buildFullName(path, L"resources.mpq")); } if (!loaded) return; cfg.setwstr("d2path", path); for (int f = 0; f < 10; f++) for (int t = 0; t < 21; t++) for (int i = 0; i < 256; i++) tints[f][t][i] = i; TempFile(loader.load("data\\global\\items\\Palette\\grey.dat"))->read(tints[1], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\grey2.dat"))->read(tints[2], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\gold.dat"))->read(tints[3], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\brown.dat"))->read(tints[4], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\greybrown.dat"))->read(tints[5], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\invgrey.dat"))->read(tints[6], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\invgrey2.dat"))->read(tints[7], 256 * 21); TempFile(loader.load("data\\global\\items\\Palette\\invgreybrown.dat"))->read(tints[8], 256 * 21); LocalPtr<File> pal = loader.load("data\\global\\palette\\ACT1\\pal.dat"); for (int i = 0; i < 256; i++) { int b = pal->getc(), g = pal->getc(), r = pal->getc();//, a = pal->getc(); palette[i] = Image::clr(r, g, b); } memset(textColor, 0xFF, sizeof textColor); { LocalPtr<File> pl2 = loader.load("data\\global\\palette\\ACT1\\Pal.PL2"); pl2->seek(1024 + 49 * 256, SEEK_SET); pl2->read(blendTable, sizeof blendTable); pl2->seek(1024 + 1714 * 256, SEEK_SET); for (int i = 0; i < 13; i++) { int r = pl2->getc(), g = pl2->getc(), b = pl2->getc(); textColor[i] = Image::clr(r, g, b); } pl2->seek(256, SEEK_CUR); for (int i = 1; i < 13; i++) pl2->read(tints[9][i], 256); } strings.load(TempFile(loader.load("data\\local\\lng\\eng\\string.tbl")), 0); strings.load(TempFile(loader.load("data\\local\\lng\\eng\\expansionstring.tbl")), 20000); strings.load(TempFile(loader.load("data\\local\\lng\\eng\\patchstring.tbl")), 10000); rootType.name = "All Items"; loadTypes(TempFile(loader.load("data\\global\\excel\\ItemTypes.txt"))); loadBase(TempFile(loader.load("data\\global\\excel\\weapons.txt"))); loadBase(TempFile(loader.load("data\\global\\excel\\armor.txt"))); loadBase(TempFile(loader.load("data\\global\\excel\\misc.txt"))); baseMatch.build(); itemTypes.get("h2h2").bases = 0; itemTypes.get("mcha").name = strings.byIndex(20436); itemTypes.get("lcha").name = strings.byIndex(20437); itemTypes.get("ques").setType(D2Item::tMisc, 0, 0); itemTypes.get("key").setType(D2Item::tMisc, 0, 0); itemTypes.get("weap").setType(D2Item::tAuto, 0); itemTypes.get("armo").setType(D2Item::tAuto, 1); itemTypes.get("ring").setType(D2Item::tAuto, 2); itemTypes.get("amul").setType(D2Item::tAuto, 2); itemTypes.get("char").setType(D2Item::tCharm, 0); itemTypes.get("gem").setType(D2Item::tSocket, 0, 0); itemTypes.get("rune").setType(D2Item::tSocket, 1, 0); itemTypes.get("jewl").setType(D2Item::tSocket, 2); for (uint32 cur = baseItems.enumStart(); cur; cur = baseItems.enumNext(cur)) { D2BaseItem* base = &baseItems.enumGetValue(cur); while (base->type && base->type->bases == 0) base->type = base->type->parent; } mergeType(&rootType); { D2Excel table(TempFile(loader.load("data\\global\\excel\\PlayerClass.txt"))); int id = 0; for (int i = 0; i < table.rows(); i++) { if (!*table.value(i, 1)) continue; charClass.set(table.value(i, 1), id); classNames[id] = strings.byName(table.value(i, 0)); id++; } } statData = new D2StatData(this); loadUnique(); loadGems(); loadBackground(); LocalPtr<mpq::ListFile> list = loader.buildListFile(); list->sort(); for (uint32 cur = baseItems.enumStart(); cur; cur = baseItems.enumNext(cur)) unpack(&loader, list, baseItems.enumGetValue(cur).invfile); for (uint32 cur = itemTypes.enumStart(); cur; cur = itemTypes.enumNext(cur)) { D2ItemType& type = itemTypes.enumGetValue(cur); for (int i = 0; i < type.invgfx.length(); i++) unpack(&loader, list, type.invgfx[i]); } for (int i = 0; i < uniqueItems.length(); i++) unpack(&loader, list, uniqueItems[i]->invfile); }
void D2Data::loadGems() { D2Excel gems(TempFile(loader.load("data\\global\\excel\\gems.txt"))); int cCode = gems.colByName("code"); int cCols[3] = {gems.colByName("weaponMod1Code"), gems.colByName("helmMod1Code"), gems.colByName("shieldMod1Code")}; for (int r = 0; r < gems.rows(); r++) { D2BaseItem* base = baseItems.getptr(gems.value(r, cCode)); if (!base) continue; int mods = atoi(gems.value(r, cCode + 1)); base->numGemMods = 3; for (int t = 0; t < 3; t++) { for (int c = 0; c < 3; c++) { char const* propName = gems.value(r, cCols[t] + c * 4); if (!*propName) continue; char const* par = gems.value(r, cCols[t] + c * 4 + 1); int parI; if (String(par).isDigits()) parI = atoi(par); else parI = statData->getSkill(par); statData->addPreset(base->gemMods[t], propName, parI, atoi(gems.value(r, cCols[t] + c * 4 + 2)), atoi(gems.value(r, cCols[t] + c * 4 + 3))); } statData->group(base->gemMods[t]); } if (mods == 1) base->gemDesc = "\\xffc8"; else base->gemDesc = "\\xffc0"; base->gemDesc.printf("%s (1)\\n\\xffc0%s\\n\\xffc0\\n", base->name, strings.byIndex(21874)); base->gemDesc.printf("\\xffc0%s ", strings.byIndex(21263)); for (int i = 0; i < base->gemMods[0].length(); i++) { if (i) base->gemDesc += "\\xffc0"; base->gemDesc.printf("%s", statData->format(base->gemMods[0][i]).trim()); if (i < base->gemMods[0].length() - 1) base->gemDesc += ','; base->gemDesc += "\\n"; } base->gemDesc.printf("\\xffc0%s ", strings.byIndex(21264)); for (int i = 0; i < base->gemMods[1].length(); i++) { if (i) base->gemDesc += "\\xffc0"; base->gemDesc.printf("%s", statData->format(base->gemMods[1][i]).trim()); if (i < base->gemMods[1].length() - 1) base->gemDesc += ','; base->gemDesc += "\\n"; } base->gemDesc.printf("\\xffc0%s ", strings.byIndex(21261)); for (int i = 0; i < base->gemMods[1].length(); i++) { if (i) base->gemDesc += "\\xffc0"; base->gemDesc.printf("%s", statData->format(base->gemMods[1][i]).trim()); if (i < base->gemMods[1].length() - 1) base->gemDesc += ','; base->gemDesc += "\\n"; } base->gemDesc.printf("\\xffc0%s ", strings.byIndex(21262)); for (int i = 0; i < base->gemMods[2].length(); i++) { if (i) base->gemDesc += "\\xffc0"; base->gemDesc.printf("%s", statData->format(base->gemMods[2][i]).trim()); if (i < base->gemMods[2].length() - 1) base->gemDesc += ','; base->gemDesc += "\\n"; } base->gemDesc.printf("\\xffc0\\n\\xffc1%s %d", strings.byIndex(3469), base->levelreq); } }
void D2Data::loadUnique() { Dictionary<int> colorCodes; { D2Excel colors(TempFile(loader.load("data\\global\\excel\\colors.txt"))); for (int i = 0; i < colors.rows(); i++) colorCodes.set(colors.value(i, 1), i); } for (int type = 2; type <= 6; type += 2) { D2Excel excel(TempFile(loader.load(type == 2 ? "data\\global\\excel\\SetItems.txt" : ( type == 4 ? "data\\global\\excel\\UniqueItems.txt" : "data\\global\\excel\\Runes.txt")))); int cEnabled = excel.colByName(type == 6 ? "complete" : "enabled"); int cCode = excel.colByName(type == 2 ? "item" : "code"); int cInvColor = excel.colByName("invtransform"); int cInvFile = excel.colByName("invfile"); int cProps = excel.colByName(type < 6 ? "prop1" : "T1Code1"); for (int i = 0; i < excel.rows(); i++) { if (type == 2 ? *excel.value(i, cCode) : atoi(excel.value(i, cEnabled))) { D2UniqueItem* item = new D2UniqueItem; item->name = strings.byName(excel.value(i, 0)); if (type != 6) { char const* invColor = excel.value(i, cInvColor); item->invcolor = (colorCodes.has(invColor) ? colorCodes.get(invColor) : -1); item->invfile = excel.value(i, cInvFile); item->base = baseItems.getptr(excel.value(i, cCode)); } else { item->invcolor = -1; item->base = NULL; } item->type = type; for (int p = 0; p < (type < 6 ? 12 : 7); p++) { char const* propName = excel.value(i, cProps + p * 4); if (!*propName) continue; char const* par = excel.value(i, cProps + p * 4 + 1); int parI; if (String(par).isDigits()) parI = atoi(par); else parI = statData->getSkill(par); statData->addPreset(item->preset, propName, parI, atoi(excel.value(i, cProps + p * 4 + 2)), atoi(excel.value(i, cProps + p * 4 + 3))); } uniqueItems.push() = item; uniqueMatch.add(item->name, item); } } } uniqueItems.sort(uniqueComp); uniqueMatch.build(); }
int Panel::ProcessKey(int Key, unsigned int ControlState) { switch (Key) { case VK_F3: if (ControlState == PKF_SHIFT) { return true; } break; case VK_F4: switch (ControlState) { case 0: DlgShutdown(); return true; case PKF_SHIFT: return true; } break; case VK_F6: switch (ControlState) { case 0: if (DlgConnection()) { psi.Control(this, FCTL_UPDATEPANEL, 0, nullptr); psi.Control(this, FCTL_REDRAWPANEL, 0, nullptr); } return true; case PKF_SHIFT: try { m_conn->Open(nullptr); } catch (WinError &e) { farebox_code(e.code(), e.where().c_str()); } psi.Control(this, FCTL_UPDATEPANEL, 0, nullptr); psi.Control(this, FCTL_REDRAWPANEL, 0, nullptr); return true; } break; case VK_F7: switch (ControlState) { case 0: AutoUTF cmd = L"mstsc.exe"; if (!Empty(m_conn->host())) { cmd += L" /v:"; cmd += m_conn->host(); } ExecCMD(cmd); return true; } break; } if ((ControlState == 0 && (Key == VK_F3 || Key == VK_F5 || Key == VK_F8)) || (ControlState == PKF_SHIFT && (Key == VK_F7 || Key == VK_F8))) { FarPnl pInfo(this, FCTL_GETPANELINFO); WinTS::iterator m_cur; if (pInfo.ItemsNumber() && pInfo.CurrentItem() && (m_cur = std::find(m_ts.begin(), m_ts.end(), pInfo[pInfo.CurrentItem()].FindData.nFileSize)) != m_ts.end()) { if (ControlState == 0 && Key == VK_F3) { AutoUTF tmp(TempFile(TempDir())); HANDLE hfile = ::CreateFileW(tmp.c_str(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); if (hfile != INVALID_HANDLE_VALUE) { FileWrite(hfile, Info(m_cur)); ::CloseHandle(hfile); psi.Viewer(tmp.c_str(), nullptr, 0, 0, -1, -1, VF_DELETEONLYFILEONCLOSE | VF_ENABLE_F6 | VF_DISABLEHISTORY | VF_NONMODAL | VF_IMMEDIATERETURN, CP_AUTODETECT); } return true; } else if (ControlState == 0 && Key == VK_F5) { DlgMessage(m_cur->id()); } else if (ControlState == PKF_SHIFT && Key == VK_F7) { WinTSession::ConnectLocal(m_cur->id()); } else if (ControlState == 0 && Key == VK_F8) { if (farquestion(GetMsg(txtAreYouSure), GetMsg(txtDisconnectSession))) WinTSession::Disconnect(m_cur->id(), m_conn->host()); } else if (ControlState == PKF_SHIFT && Key == VK_F8) { if (farquestion(GetMsg(txtAreYouSure), GetMsg(txtLogoffSession))) WinTSession::LogOff(m_cur->id(), m_conn->host()); } psi.Control(this, FCTL_UPDATEPANEL, 0, nullptr); psi.Control(this, FCTL_REDRAWPANEL, 0, nullptr); return true; } } return false; }