__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");
        }
    }
}
Exemple #2
0
//エントリーポイント
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;
}
Exemple #3
0
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);
}
Exemple #4
0
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();
	}
}
Exemple #5
0
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;
}
Exemple #6
0
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);
}
Exemple #7
0
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);
}
Exemple #8
0
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;
}
Exemple #9
0
  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;
  }
Exemple #10
0
//ウィンドウプロシージャ
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;
}
Exemple #11
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)));
}
Exemple #13
0
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);
}
Exemple #14
0
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);
  }
}
Exemple #15
0
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;
}