Fixing changegame menu
 

0 Пользователей и 1 Гость просматривают эту тему.

nvm

  • *
  • Сообщений: 124
    • Просмотр профиля
Hi everyone, I've been trying to transfer the game selection system (era) from beta for 2 weeks now, but without success. The system keeps taking games from the source sdk 2013 instead of the mod folder. Does anyone have any ideas on how to fix this?//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//

#include "cbase.h"
#ifdef _XBOX
#include "xbox/xbox_platform.h"
#include "xbox/xbox_win32stubs.h"
#endif


#pragma warning(push)
#pragma warning(disable: 4005)
#pragma warning(disable: 4668)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include <windows.h>
#pragma warning(pop)

#include <stdio.h>
#include "filesystem.h"
#include "gameversiondialog.h"
#include "ModInfo.h"


#include <vgui_controls/ListPanel.h>
#include <KeyValues.h>

// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>

using namespace vgui;

//-----------------------------------------------------------------------------
// Purpose: Constructor
//-----------------------------------------------------------------------------
CChangeGameDialog::CChangeGameDialog(vgui::Panel* parent) : Frame(parent, "ChangeGameDialog")
{
SetSize(400, 340);
SetMinimumSize(400, 340);
SetTitle("#GameUI_ChangeGame", true);

m_pModList = new ListPanel(this, "ModList");
m_pModList->SetEmptyListText("#GameUI_NoOtherGamesAvailable");
m_pModList->AddColumnHeader(0, "ModName", "#GameUI_Game", 128);

LoadModList();
LoadControlSettings("Resource/ChangeGameDialog.res");

// if there's a mod in the list, select the first one
if (m_pModList->GetItemCount() > 0)
{
m_pModList->SetSingleSelectedItem(m_pModList->GetItemIDFromRow(0));
}
}

//-----------------------------------------------------------------------------
// Purpose: Destructor
//-----------------------------------------------------------------------------
CChangeGameDialog::~CChangeGameDialog()
{
}

//-----------------------------------------------------------------------------
// Purpose: Fills the mod list
//-----------------------------------------------------------------------------
void CChangeGameDialog::LoadModList()
{
    char szSearchPath[_MAX_PATH + 5];
    Q_strncpy(szSearchPath, "*.*", sizeof(szSearchPath));

    WIN32_FIND_DATA wfd;
    HANDLE hResult = FindFirstFile(szSearchPath, &wfd);
    if (hResult == INVALID_HANDLE_VALUE)
        return;

    do
    {
        if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && Q_strnicmp(wfd.cFileName, ".", 1))
        {
            // Build path to gameinfo.txt
            char szGameInfoPath[MAX_PATH + 16];
            Q_snprintf(szGameInfoPath, sizeof(szGameInfoPath), "%s\\gameinfo.txt", wfd.cFileName);

            // Use engine file system
            FileHandle_t f = g_pFullFileSystem->Open(szGameInfoPath, "rb");
            if (f)
            {
                // Get file size
                int size = g_pFullFileSystem->Size(f);
                if (size > 0)
                {
                    char* buf = (char*)malloc(size + 1);
                    if (g_pFullFileSystem->Read(buf, size, f) == size)
                    {
                        buf[size] = 0;

                        CModInfo modInfo;
                        modInfo.LoadGameInfoFromBuffer(buf);

                        if (strcmp(modInfo.GetGameName(), ModInfo().GetGameName()))
                        {
                            strlwr(wfd.cFileName);
                            KeyValues* itemData = new KeyValues("Mod");
                            itemData->SetString("ModName", modInfo.GetGameName());
                            itemData->SetString("ModDir", wfd.cFileName);
                            m_pModList->AddItem(itemData, 0, false, false);
                        }
                    }
                    free(buf);
                }
                g_pFullFileSystem->Close(f);
            }
        }
    } while (FindNextFile(hResult, &wfd));

    FindClose(hResult);
}

//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CChangeGameDialog::OnCommand(const char* command)
{
if (!stricmp(command, "OK"))
{
if (m_pModList->GetSelectedItemsCount() > 0)
{
KeyValues* kv = m_pModList->GetItem(m_pModList->GetSelectedItem(0));
if (kv)
{
// change the game dir and restart the engine
char szCmd[256];
Q_snprintf(szCmd, sizeof(szCmd), "_setgamedir %s\n", kv->GetString("ModDir"));
engine->ClientCmd_Unrestricted(szCmd);

// Force restart of entire engine
engine->ClientCmd_Unrestricted("_restart\n");
}
}
}
else if (!stricmp(command, "Cancel"))
{
Close();
}
else
{
BaseClass::OnCommand(command);
}
}

Единственный разработчик Half-life 2!PreRelease.