Search the Community
Showing results for tags 'c++'.
Found 15 results
-
Offline stalls system One of the gaming aspects of the game is trading between characters through special stalls, which players can open by learning a special skill. The player sell his items for a certain price, and other players can buy them. However, for such trading, the player have to be in the game, that is, be connected to the server, which makes him to leave his computer constantly turned on and keep the game client minimized. This is very inconvenient, so the system of "offline" stalls was invented, which allows players to disconnect from the server and still remain trading in the stalls. There are several ways to implement such a system, but the most common system is "offline" stalls through a proxy server: 1) The game client (Game.exe) connects to the proxy server; 2) The proxy server, in turn, opens a connection to the GateServer.exe; 3) Further, the proxy server transfers all packets between Game.exe and GateServer.exe, while analyzing them; 4) When a player opens a trade stall, the proxy server captures this (GateServer.exe sent Game.exe a successful stall opening packet); 5) If a player disconnects from the server while in a trading stall, then the proxy server closes the connection to Game.exe, but at the same time keeps the connection to GateServer.exe and starts imitating Game.exe. Thus, GateServer.exe is unaware of the fact that Game.exe is disconnected and the player's character remains to trade in the stall on the server. Game.exe | Game.exe | <---------> pkodev.stallserver.exe <---------> GateServer.exe Game.exe | This topic discusses the development of such a proxy server - PKOdev.NET Stall Server. Warning! The application is currently under development. The application has not been fully tested and is not stable. This means that errors, bugs and critical vulnerabilities may be present. Use it for testing purposes only! Features 1) Offline stalls system; 2) Limiting the number of offline stalls from one IP address; 3) Limiting the trading time in an offline stall; 4) Automatic disconnection of the account from the server when a player tries to enter his account while trading in an offline stall; 5) Notification of players in the chat that a player trades in an offline stall (in PM); 6) Prevention of SQL-injections in login and PIN create (change) packets from game client; 7) Setting for the maximum number of connections from the same IP address and the interval between connections. to-do 1) Translate comments in files Server.h and Server.cpp to English language; 2) Fix application crash when processing packets; 3) Fix application crash on startup when local port is closed; 4) Fix bridge hanging when blocking packets on enabled encryption in GateServer.cfg (thanks to @small666 for finding the bug); 5) Make thread synchronization when processing packets; 6) Close the offline stall if it is empty; 7) Modification of GateServer.exe to determine the IP addresses of clients that are behind the server of offline stalls. At this point in the logs and database, the IP addresses of all clients will be written as 127.0.0.1 (if both GateServer.exe and pkodev.stallserver.exe are running on the same machine). 8 ) Compatibility with Corsairs Online (CO) source code. Building and running 1) Clone the repository with the project to your disk (the link will be below); 2) Open the solution file pkodev.stallserver.sln in Visual Studio 2022 Community (or higher version); 3) Build the solution. The server executables will appear in the bin folder; 4) Place the configuration file pkodev.stallserver.cfg from the cfg folder in the same directory as the server executable file pkodev.stallserver.exe; 5) Customize the configuration file pkodev.stallserver.cfg (the file is well commented); 6) To connect the game client (Game.exe) to the offline stall server, you need to install the pkodev.mod.stallserver mod; 7) To connect the offline stall server to GateServer.exe, the GateServer should be without any modifications, for example, from the PKO 1.38 server files. 8 ) Run offline stall server executable pkodev.stallserver.exe. Git repository https://github.com/V3ct0r1024/pkodev.stallserver
-
The source code is available! Dear PkoDev.Net community members, Today we are releasing TOP/PKO source codes and it means that they will be available to everyone. I'd really want to thank our friendly and cohesive community for helping us in the fundraising event. Thank you for your help! I wish you best of luck in the studying process and I hope they will help us to make the game better! Congratulations! Special thanks to: RU: ZEST Online Team (@e1mer), World of Chaos Team (@NMS3RR), Mordo Online Team, @Chad, @insider, @V1tor, @Chudik, @BotPRO, @BETEP/macs509, @lyon, @Am*n9ma (Pastuh). EN: @KONG, @Wrexor, @Yudha, @Jones, @Andy, @Foxseiz, @Andrew, @Lucky, @Sea King, @DevMorgan, @LazyKid, @Sultan, @TheLegend, @Onioni, @7n6, @GustavoHMA, @Xeon, @Ishcurry. Soon you'll see different kind of tutorials regarding work with the source code (code modifications, explanation). You can get link to download the source code from attachment (Source Code.txt)
- 68 replies
-
- 28
-
- community source
- src
- (and 4 more)
-
Система "оффлайн" ларьков Одним из игровых аспектов игры является торговля между персонажами посредством особых ларьков (лавок), которые могут открывать игроки изучив специальное умение. Игрок выставляет свои предметы за определенную цену, а остальные игроки могут покупать их. Однако, для такой торговли игрок должен находиться в игре, то есть быть подключенным к серверу, что вынуждает его оставлять свой компьютер постоянно включенным и держать игровой клиент свернутым. Это очень неудобно, поэтому была придумана система "оффлайн" ларьков, которая позволяет игрокам отключаться от сервера и при этом оставаться торговать в ларьках. Возможно несколько способов реализации такой системы, но наиболее распространена система "оффлайн" ларьков через прокси-сервер: 1) Игровой клиент (Game.exe) подключается к прокси-серверу; 2) Прокси-сервер, в свою очередь, открывает соединение с GateServer.exe; 3) Далее, прокси-сервер передает все пакеты между Game.exe и GateServer.exe, при этом анализируя их; 4) Когда игрок открывает торговый ларек, прокси-сервер фиксирует это (GateServer.exe отправил Game.exe пакет успешного открытия ларька); 5) Если игрок отключается от сервера будучи в торговом ларьке, то прокси-сервер закрывает соединение с Game.exe, но при этом сохраняет соединение с GateServer.exe и начинает имитировать Game.exe. Таким образом, GateServer.exe не подозревает о факте отключения Game.exe и персонаж игрока остается торговать в ларьке на сервере. Game.exe | Game.exe | <---------> pkodev.stallserver.exe <---------> GateServer.exe Game.exe | В данной теме обсуждается разработка такого прокси-сервера - PKOdev.NET Stall Server. Внимание! Сервер находится на стадии разработки и не предназначен для применения в "продакшене". Это означает что приложение полностью не протестировано и может содержать ошибки, баги и критические уязвимости. Возможности 1) Система оффлайн ларьков; 2) Ограничение количества оффлайн ларьков с одного IP-адреса; 3) Ограничение времени торговли в оффлайн-ларьке; 4) Автоматическое отключение аккаунта, торгующего в оффлайн ларьке, при подключении игрока с использованием того же аккаунта; 5) Оповещение игроков в чат о том, что персонаж находится в оффлайн ларьке и в данный момент не в сети (при обращении в ЛС); 6) Исправление SQL-инъекций в пакетах авторизации и создания (смены) секретного кода; 7) Установка максимального числа подключений к серверу с одного IP-адреса и интервала между подключениями. To-do: 1) Перевод комментариев в файлах Server.h and Server.cpp на английский язык; 2) Исправление падения сервера при обработке пакетов от клиента; 3) Исправление падения сервера при запуске, когда локальный порт занят; 4) Исправление зависания моста при блокировке пакета при включенном шифровании (спасибо @small666 за обнаруженный баг); 5) Синхронизация между потоками при обработке пакетов; 6) Закрытие оффлайн ларька, если все предметы проданы; 7) Модификация GateServer.exe для определения IP-адресов клиентов, которые находятся за сервером оффлайн ларьков. В данный момент в логах и базе данных IP-адреса всех клиентов будут записываться как 127.0.0.1 (если GateServer.exe и pkodev.stallserver.exe запущены на одной машине). 8 ) Совместимость с исходным кодом Corsairs Online (CO). Сборка и запуск 1) Выполните клонирование репозитория с проектом сервера к себе на диск (ссылка будет ниже); 2) Откройте файл решения pkodev.stallserver.sln в Visual Studio 2022 Community; 3) Соберите решение. Исполняемые файлы сервера появятся в папке bin; 4) Поместите конфигурационный файл pkodev.stallserver.cfg из папки cfg в одну директорию с исполняемым файлом сервера pkodev.stallserver.exe; 5) Настройте конфигурационный файл pkodev.stallserver.cfg по своему усмотрению (файл хорошо прокомментирован); 6) Для подключения игрового клиента (Game.exe) к серверу оффлайн ларьков нужно установить мод pkodev.mod.stallserver; 7) Для подключения сервера оффлайн ларьков к GateServer.exe, последний должен быть без каких-либо модификаций ("чистым"), например, из сборки PKO 1.38; 8 ) Запустите исполняемый файл сервера оффлайн ларьков pkodev.stallserver.exe. Репозиторий Git https://github.com/V3ct0r1024/pkodev.stallserver
-
[C++] Игра "Угадай число!" Привет! В данной статье мы напишем на языке программирования C++ простую игру "Угадай число". Компьютер загадывает натуральное число от 1 до 100 включительно, а игрок в свою очередь должен его отгадать. Если игрок назвал неправильное число, то компьютер дает подсказку: загаданное число больше или меньше числа игрока. Игра продолжается до тех пор, пока игрок не отгадает число. Статья предназначена для начинающих программистов. Код будет выполнен в рамках стандарта C++11, автор будет использовать среду разработки Microsoft Visual Studio Community 2017 (скачать). Код должен успешно компилироваться как под Windows, так и под Linux, то есть является кроссплатформенным. У игры очень простой алгоритм: 1) Компьютер "загадывает" случайное натуральное число от 1 до 100 включительно; 2) Игрок вводит предполагаемое число (ответ) с клавиатуры; 3) Программа сравнивает два числа и выдает результат. 4) Если числа не равны, то "сказать" пользователю больше его ответ или меньше числа, загаданного компьютером. Перейти на шаг 2; 5) Числа равны. Поздравить игрока с победой и перейти на шаг 1. Приступим к реализации игры. Сначала компьютер загадывает случайное натуральное число от 1 до 100. Для этого используется генератор случайных чисел. Для работы с генератором случайных чисел будем применять 2 функции из стандартной библиотеки: srand() и rand(). Функция srand() нужна чтобы задать начало псевдослучайной последовательности чисел, генерируемой функцией rand(). Обычно, в функцию srand() передается текущее системное время. Чтобы получить текущее системное время можно использовать функцию time(). Функция srand() должна вызываться перед вызовом функции rand(), как правило, это делается один раз в начале работы программы. Если этого не сделать, то функция rand() все время будет "отдавать" одинаковые "случайные числа", и наша игра будет загадывать одни и те же числа. // Запускаем генератор случайных чисел std::srand(static_cast<unsigned int>(std::time(nullptr))); Мы инициализировали генератор случайных чисел и теперь можем загадывать число от 1 до 100 с помощью функции rand(). Чтобы загадать очередное число будем использовать следующее выражение: // Загадываем натуральное число // от 1 до 100 int n = (std::rand() % 100) + 1; Функция rand() может возвращать числа от 0 до 32767 включительно. Чтобы преобразовать этот "первичный" интервал в нужный нам интервал от 1 до 100, можно с помощью оператора % взять остаток от деления на 100 у любого числа из первичного интервала и прибавить к нему 1. Например, функция rand() вернула число 256. Остаток от деления на 100 будет равен 56. Прибавляем единицу и получаем число 57, которое и должен будет отгадать игрок: 256 % 100 = 56 56 + 1 = 57 Далее, после того, как компьютер загадал случайное число, просим игрока ввести его предполагаемый ответ: // Ответ игрока int guess = 0; // Просим игрока ввести ответ std::cout << "Введите число:" << std::endl; std::cout << ">> "; std::cin >> guess; С помощью оператора cin получаем целое число с клавиатуры - ответ игрока, и записываем данное число в переменную guess. Будем спрашивать игрока до тех пор, пока он не отгадает число. Для этого воспользуемся циклом do-while (см. ниже). На данном этапе у нас есть два числа: загаданное компьютером и ответ игрока. Осталось их сравнить. Для сравнения двух чисел воспользуемся оператором if и операторами больше (>) - меньше (<): // Ответ игрока int guess = 0; do { /* Тут получаем предполагаемое число (ответ) от игрока с клавиатуры */ // Проверяем ответ if (n > guess) { std::cout << "Не угадал! Моё число больше." << std::endl; } else if (n < guess) { std::cout << "Не угадал! Моё число меньше." << std::endl; } } while (n != guess); Если игрок не угадал число, то выводится соответствующее сообщение и цикл повторяется. В случае, если игрок угадал число, цикл прерывается и выводится сообщение о победе: // Игрок угадал число std::cout << "Верно! Загадать еще число? (Y/N)" << std::endl; std::cout << ">> "; std::cin >> answer; В конце игры можно просто выйти из программы, а можно спросить игрока, хочет ли он чтобы компьютер загадал еще одно число и тем самым продолжить игру. Для этого поместим написанный выше код в цикл do-while (весь лишний код был заменен на комментарии): // Ответ на вопрос "Загадать еще число?" char answer = 0; // Запускаем генератор случайных чисел // Запускаем игровой цикл do { // Загадываем натуральное число // от 1 до 100 do { // Получаем ответ от игрока // Сравниваем ответ игрока с загаднным компьютером числом } while (/* игрок не угадал число */); // Игрок угадал число std::cin >> answer; } while (std::strchr("Nn", answer) == nullptr); В символьную переменную answer записываем ответ игрока с клавиатуры. Предполагается, что игрок введет символ Y (продолжить игру) или символ N (выйти из игры). Далее с помощью функции strchr() ищем введенный символ в строке "Nn". Таким образом, неважно в каком регистре игрок ввел символ: N или n. while (std::strchr("Nn", answer) == nullptr); Если в строке "Nn" не будет найден символ, введенный игроком с клавиатуры, то функция strchr() вернет нулевой указатель (nullptr) и цикл продолжится. Иначе функция вернет указатель на найденный в строке символ и цикл завершится. То есть, если игрок введет символ N или n, то программа завершится. Если он введет любой другой символ, то будет загадано новое число и игра продолжится. После цикла происходит выход из программы - игра закрывается: return 0; Итак, были отмечены все ключевые особенности реализации варианта игры "Угадай число", поэтому далее приведу полный код программы: #include <iostream> #include <limits> #include <ctime> #include <cstdlib> // Точка входа int main(int argc, char *argv[]) { // Ответ на вопрос "Загадать еще число?" char answer = 0; // Поддержка русского языка setlocale(LC_ALL, "Russian"); // Запускаем генератор случайных чисел std::srand(static_cast<unsigned int>(std::time(nullptr))); // Выводим правила игры std::cout << "Игра \"Угадай число\"" << std::endl; std::cout << "Привет! Я загадал число от 1 до 100. Угадай его!" << std::endl << std::endl; // Запускаем игровой цикл do { // Загадываем натуральное число // от 1 до 100 int n = (std::rand() % 100) + 1; // Ответ игрока int guess = 0; do { // Просим игрока ввести ответ std::cout << "Введите число:" << std::endl; std::cout << ">> "; std::cin >> guess; // Проверим, что пользователь ввел число if (std::cin.fail() == true || (guess <= 0 || guess > 100)) { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cout << "Введите натуральное число от 1 до 100!" << std::endl; continue; } // Проверяем ответ if (n > guess) { std::cout << "Не угадал! Моё число больше." << std::endl; } else if (n < guess) { std::cout << "Не угадал! Моё число меньше." << std::endl; } } while (n != guess); // Игрок угадал число std::cout << "Верно! Загадать еще число? (Y/N)" << std::endl; std::cout << ">> "; std::cin >> answer; } while (std::strchr("Nn", answer) == nullptr); return 0; } При желании Вы можете добавить выбор игроком уровня сложности, например: Легкий уровень - загадывается число в интервале от 1 до 100, неограниченное число попыток; Средний уровень - загадывается число в интервале от 1 до 1000, число попыток 25; Сложный уровень - загадывается число в интервале от 1 до 10000, число попыток 50. Также можно добавить учет очков, набранных игроками. Чем меньше попыток угадать число сделал игрок, тем больше он зарабатывает очков: <Заработанные очки> = max(0, 100 - <Число ходов>) Очки хранить в памяти приложения или в файле: // score.txt Вася 100 Петя 53 Катя 42 Саша 65 Если у Вас есть какие-либо вопросы или замечания, то пишите о них в этой теме!
- 11 replies
-
PKOdev.NET mod loader project template for Visual Studio 2019 Community I am posting a template project for Visual Studio 2019 Community, which is designed to develop mods for PKOdev.NET mod loader using the C++ programming language. The project includes 1) File structure (address.h, pointer.h, hook.h, structure.h, dllmain.cpp); The address.h file contains the addresses of imported functions and objects from the .exe file. This file also defines the namespaces for the corresponding versions of the .exe file, within which it is necessary to specify the addresses for each version of the executable file. All addresses should be in the address namespace. namespace address { // Game.exe 2 (1252912474) namespace GAME_13X_2 { // void CHeadSay::Render(D3DXVECTOR3& pos) const unsigned int CHeadSay__Render = 0x00470770; } // Game.exe 4 (1585009030) namespace GAME_13X_4 { // void CHeadSay::Render(D3DXVECTOR3& pos) const unsigned int CHeadSay__Render = 0x004707D0; } } The pointer.h file contains pointers to imported functions from the .exe file. All pointers should be in the pointer namespace. namespace pointer { // void CHeadSay::Render(D3DXVECTOR3& pos) typedef void(__thiscall* CHeadSay__Render__Ptr)(void*, D3DXVECTOR3&); CHeadSay__Render__Ptr CHeadSay__Render = (CHeadSay__Render__Ptr)(void*)(address::MOD_EXE_VERSION::CHeadSay__Render); } The hook.h file contains the definitions of the hook functions of the original functions from the .exe file. All hooks should be in the hook namespace. namespace hook { // void CHeadSay::Render(D3DXVECTOR3& pos) void __fastcall CHeadSay__Render(void* This, void* NotUsed, D3DXVECTOR3& Pos); } The structure.h file contains various data structures necessary for the mod to work. // 3D vector structure struct D3DXVECTOR3 { float x; float y; float z; }; The dllmain.cpp file contains the entry point, the implementation of the loader interface functions, the implementation of the hook functions, and the mod code itself. 2) Mod loader interface (loader.h) and its implementation. 3) Build configurations for all supported .exe files with appropriate preprocessor definitions. 4) MS Detours library for hooking functions calls in .exe files. DetourAttach(&(PVOID&)pkodev::pointer::CHeadSay__Render, pkodev::hook::CHeadSay__Render); How to set up your own project 1) Rename the project files (pkodev.mod.dummy) to the name of your new mod; 2) Remove unnecessary build configurations; 3) For each build configuration, specify the name of the mod's output DLL file (Target Name); 4) For each build configuration, specify preprocessor definitions MOD_NAME, MOD_AUTHOR, and MOD_VERSION. Download PKOdev .NET mod loader project template for Visual Studio 2019 Community (C++).
-
Шаблон проекта мода PKOdev.NET loader для Visual Studio 2019 Community Выкладываю шаблонный проект под Visual Studio 2019 Community, который предназначен для разработки модов для PKOdev.NET mod loader на языке программирования C++. Проект включает в себя 1) Структуру файлов (address.h, pointer.h, hook.h, structure.h, dllmain.cpp); В файл address.h записываются адреса импортируемых функций и объектов из .exe файла. В данном файле также определены пространства имен для соответствующих версий .exe файла, в пределах которых необходимо указать адреса для каждой версии исполняемого файла. Все адреса должны находится в пространстве имен address. namespace address { // Game.exe 2 (1252912474) namespace GAME_13X_2 { // void CHeadSay::Render(D3DXVECTOR3& pos) const unsigned int CHeadSay__Render = 0x00470770; } // Game.exe 4 (1585009030) namespace GAME_13X_4 { // void CHeadSay::Render(D3DXVECTOR3& pos) const unsigned int CHeadSay__Render = 0x004707D0; } } В файле pointer.h находятся указатели на импортируемые функции из .exe файла. Все указатели должны находиться в пространстве имен pointer. namespace pointer { // void CHeadSay::Render(D3DXVECTOR3& pos) typedef void(__thiscall* CHeadSay__Render__Ptr)(void*, D3DXVECTOR3&); CHeadSay__Render__Ptr CHeadSay__Render = (CHeadSay__Render__Ptr)(void*)(address::MOD_EXE_VERSION::CHeadSay__Render); } В файле hook.h находятся определения функций-перехватчиков оригинальных функций из .exe файла. Все перехватчики должны находиться в пространстве имен hook. namespace hook { // void CHeadSay::Render(D3DXVECTOR3& pos) void __fastcall CHeadSay__Render(void* This, void* NotUsed, D3DXVECTOR3& Pos); } В файле structure.h находятся различные структуры данных, необходимые для работы мода. // 3D vector structure struct D3DXVECTOR3 { float x; float y; float z; }; В файле dllmain.cpp находятся точка входа, реализация функций интерфейса загрузчика, реализация функций-перехватчиков и непосредственно код мода. 2) Интерфейс загрузчика модов (loader.h) и его реализацию. 3) Конфигурации сборки для всех поддерживаемых .exe файлов с соответствующими определениями препроцессора. 4) Библиотеку MS Detours для перехвата вызова функций в .exe файлах. DetourAttach(&(PVOID&)pkodev::pointer::CHeadSay__Render, pkodev::hook::CHeadSay__Render); Как настроить проект 1) Переименуйте файлы проекта (pkodev.mod.dummy) на название Вашего мода; 2) Удалите ненужные конфигурации сборки; 3) Для каждой конфигурации сборки укажите название выходной DLL-библиотеки мода (Target Name); 4) Для каждой конфигурации сборки укажите определения препроцессора MOD_NAME, MOD_AUTHOR и MOD_VERSION. Скачать Шаблон проекта мода для Visual Studio 2019 Community (C++).
-
Исходные коды сервера и клиента доступны! Привет всем! Исходные коды сервера и клиента теперь доступны каждому. Я выражаю большую благодарность нашему дружному и сплоченному сообществу! Спасибо за помощь, благодаря Вам мы имеем эти файлы! Успехов нам в освоении и изучении исходных кодов, надеюсь они помогут сделать нашу любимую игру еще лучше. Поздравляю друзья! Отдельное спасибо хочу сказать следующим пользователям и командам: RU: Команда сервера ZEST Online (@e1mer), Команда сервера World of Chaos (@NMS3RR), Команда сервера Мордо Online, @Chad, @insider, @V1tor, @Chudik, @BotPRO, @BETEP/macs509, @lyon, @Am*n9ma (Pastuh). EN: @KONG, @Wrexor, @Yudha, @Jones, @Andy, @Foxseiz, @Andrew, @Lucky, @Sea King, @DevMorgan, @LazyKid, @Sultan, @TheLegend, @Onioni, @7n6, @GustavoHMA, @Xeon, @Ishcurry. Скоро на нашем форуме появятся гайды и статьи по работе с исходными кодами. Получить ссылку на исходные коды Вы можете из файла во вложении (Source Code.txt)
- 87 replies
-
- 5
-
- исходный код
- сервер
-
(and 5 more)
Tagged with:
-
Установка CMake "CMake (от англ. cross platform make) — это кроссплатформенная система автоматизации сборки программного обеспечения из исходного кода. CMake не занимается непосредственно сборкой, a лишь генерирует файлы управления сборкой из файлов CMakeLists.txt" - Википедия Привет! В данной статье мы установим CMake под Windows. Этот полезный инструмент позволяет автоматизировать процесс сборки различных проектов. 1) Скачайте дистрибутив CMake с официального сайта. В разделе "Latest Release" (самый последний релиз) найдите таблицу "Binary distributions" (бинарные дистрибутивы) и, в зависимости от разрядности Вашей операционной системы (x86 или x64) и формата дистрибутива (архив .zip или установочный файл .msi), выберите нужную ссылку на скачивание: 2) Вы выбрали дистрибутив в формате .msi. Запустите скачанный установочный файл: 2.1) Согласитесь с лицензионным соглашением: 2.2) В окне "Install options" (настройки установки) установите радио-переключатель в положение "Add CMake to the system PATH for the current user". Это добавит программу в системный путь PATH для текущего пользователя. Опция "Add CMake to the system PATH for all users" добавит CMake в системный путь для всех пользователей компьютера. Также Вы можете попросить установщик создать иконку для запуска CMake на рабочем столе, установив флажок "Create CMake Desktop Icon": 2.3) В окне "Destination Folder" выберите путь, куда Вы хотите установить CMake. Для этого нажмите кнопку "Change" (изменить путь): 2.4) Нажмите кнопку "Install" (установить) в следующем окне, чтобы начать установку: 2.5) Дождитесь конца процесса установки программы: 2.6) CMake установлен! 3) Вы выбрали дистрибутив в формате .zip-архива. Распакуйте архив в нужное Вам место. Например, в D:\cmake Получаем следующую структуру папок: D:\cmake\bin D:\cmake\doc D:\cmake\man D:\cmake\share 3.1) Добавьте CMake в системный путь PATH. Для этого в Свойствах системы нажмите на ссылку "Дополнительные параметры системы": Появится окно "Свойства системы", нажмите на кнопку "Переменные среды": В окне "Переменные среды" выберите переменную Path и нажмите кнопку "Изменить" в нужном разделе: "Переменные среды пользователя" определяет переменные для текущего пользователя, а "Системные переменные" определяет переменные для всех пользователей компьютера. В появившемся окошке "Изменить переменную среды" нажмите на кнопку "Создать" (1), далее в новом поле ввода (2) укажите путь до папки bin из дистрибутива CMake. Для моего примера (см. п. 3): D:\cmake\bin В конце нажмите на кнопку "ОК" (3). Теперь CMake добавлен в системный путь и доступен из любого места! 4) Проверьте работоспособность CMake. Для этого запустите Командную строку (cmd.exe) и выполните следующую команду: cmake --version Вы должны увидеть текущую версию программы: C:\Users\Виктор>cmake --version cmake version 3.12.0 CMake suite maintained and supported by Kitware (kitware.com/cmake). На этом установка CMake завершена! Более детальную информацию по установке и использованию CMake Вы можете найти на официальном сайте.
-
I am not a complete beginnier , i'm not completely unaware how programming works. However as the most here know there is an impossibly large chasm between a rough understanding and a level of understanding which enables to actually do things. So my question isn't only about "what languages should i learn". I know it's C++ / Lua / SQL / HTML / PHP , maybe python for ancillary tool creation. My question is in the specific : in what parts of those languages i should focus on? My main issue with programming has been mainly one : i'm bored by the the basics but overwhelmed by the complexity after those basics. Any suggestion/learning resource is welcome , thank you for you time.
- 1 reply
-
- learning
- programming
- (and 10 more)
-
Редактирование горячих клавиш в клиенте на примере Insert Всем привет! Меня спросили как можно изменить кнопку, на которую персонаж садится чтобы восстановить очки жизней и маны (Insert). Соответственно, в этом гайде об этом и пойдет речь. Работать будем с Game.exe из последнего официального русского клиента. В этот раз гадать не будем, а заглянем в исходные коды клиента. Произведем поиск по константе с именем VK_INSERT, которая обозначает код клавиши Insert, и находим следующий код: if ( key == VK_INSERT && !GetMainCha()->IsBoat() ) { CInsertState *seat = dynamic_cast<CInsertState*>(GetMainCha()->GetActor()->GetCurState()); if (seat) { seat->Cancel(); return; } seat = new CInsertState(GetMainCha()->GetActor()); seat->SetIsSend( true ); seat->SetAngle( GetMainCha()->getYaw() ); GetMainCha()->GetActor()->SwitchState(seat); return; } Этот код находится в методе _KeyDownEvent(int key), класса CWorldScene, который вызывается при нажатии игроком какой-либо клавиши на клавиатуре. Если Вы работаете с исходными кодами, то можете просто изменить константу VK_INSERT на константу, обозначающую любую другую клавишу, и скомпилировать клиент. В противном случае придется патчить Game.exe. Итак, запускаем игру и присоединяемся к процессу Game.exe в отладчике OllyDBG. Ищем приведенный код выше. Для этого выполним поиск по всем константам: контекстное меню дизассемблера -> Search for -> All constants. В появившемся окошке вводим код клавиши Insert (0x2D): Появится окно с результатами поиска. Результатов будет очень много, но в первую очередь нас интересуют инструкции CMP. Как узнать какая инструкция нам нужна? Ставим на все инструкции CMP точку останова (Breakpoint). Если сразу после того, как Вы поставили точку останова она сработала, то убираем ее и продолжаем выполнение программы. Далее идем в игру и нажимаем клавишу Insert. Сработала точка останова по адресу 0x004CD308 (у Вас адрес может отличаться): Давайте для примера заменим клавишу Insert на клавишу Space (пробел). Этот пример не совсем удачный, так как данная клавиша используется для ввода пробела в чат. Код клавиши Space: #define VK_SPACE 0x20 Остальные коды клавиш Вы можете найти в заголовочном файле WinUser.h Заменяем инструкцию CMP ESI,2D на CMP ESI,20 Переходим в игру и нажимаем пробел. Теперь персонаж садится на землю и встает по нажатию клавиши Пробел. Сохраняем проделанные изменения. Для тех, кто не умеет пользоваться OllyDBG, но использует Game.exe из данного примера. Откройте Game.exe в любом HEX-редакторе (я буду использовать HxD) и перейдите по адресу 0x000CD30A. Как мы получили этот адрес? 0x000CD30A = 0x004CD308 - 0x00400000 + 2 2 = 2 байта инструкции CMP ESI Замените 0x2D на код интересующей Вас клавиши. Сохраните проделанные изменения. На этом все.
-
Hello everyone, I wanted to know how I can create a DLL injection to manipulate the functions and variables of the CCharacter structure without causing the Gameserver to hang and close. Thank you in advance to all who can help.
- 1 reply
-
- Programming
- C++
-
(and 1 more)
Tagged with:
-
Hi guys, I have to check time taken to open the application (one is on c# and another is written on c++), how can I do so? Thanks in advance.
-
Fundraising for official client & game source code Hello friends! As you might already know there are people who sell official game & client source codes (with C++ as a programming language). It seems like there is a huge interest around this topic, as people keep asking me questions about the source every other day. Despite all the doubts and risks user from our forum @Treuno86 acquired them from a CN guy. We asked him whether he's going to share them or not. Treuno replied that he had spent 480$ and nobody had contributed at all. After that we have decided to make a deal: if our community gathers 300$ and then sends him the money, he shares all the original stuff, as he received from the original seller. Sounds quite fair, since he had spent a lot of money alone. So, our community should collect all together 300$ to get source files. If somebody has doubts regarding the source (fake files, wrong sources, etc...), Treuno can provide the proofs. To make sure that these are the original source files I checked them via TeamViewer. Here is one of the files: Character.cpp (GameServer.exe). Why would we need source files: 1. To fix different bugs & backdoors. 2. Improve the game by adding brand new features. The source files include the client and server versions 1.10 and 2.4 In this thread we shall decide who wants to help by donating and how much. Also, we have to decide where to store the money (Paypal most likely, though). UPDATE 06.06.2016 4:30 PM @Treuno86 asked to rise up the price to 400$, I don't think anybody will mind. Also I want to recall that the source files are going to be shared publically to everyone whether people contributed or not. Users who are ready to help (25): RU: ZEST Online Team (@e1mer) World of Chaos Team (@NMS3RR) @Chad @insider @V1tor @Chudik @BotPRO @BETEP/macs509 Mordo Online Team EN: @xtc @Wrexor @Yudha @Jones @Andy @Foxseiz @Andrew @Lucky @Sea King @DevMorgan @LazyKid @Sultan @TheLegend @Onioni @7n6 @GustavoHMA
- 37 replies
-
- 9
-
- source code
- client
- (and 4 more)
-
Сбор средств на исходные коды сервера и клиента Всем привет! Как Вы могли узнать ранее, появились люди, которые продают исходные файлы клиента и сервера (язык программирования C++). Вокруг этой темы возникли большой интерес и обсуждение. Каждый день люди спрашивают меня про исходники, купил ли их кто и когда они попадут в шару. Пользователь с нашего форума @Treuno86, несмотря на все сомнения, приобрел исходные файлы Мы спросили его, собирается ли он выкладывать их в открытый доступ. Treuno86 ответил, что купил их за 480$ и никто ему в этом не помог. Тогда мы договорились, что соберем для него 300$, а он, свою очередь, поделится этими файлами с сообществом. Все честно, ведь человек потратил кучу денег. Итак, наше сообщество должно собрать 300$, чтобы получить исходные файлы. Если у кого-то есть сомнения, что они ненастоящие, фейк и т.д. Treuno86 предоставит доказательства. Я лично посмотрел эти файлы через Team Viewer и убедился, что они оригинальные. Вот один файл для примера: Character.cpp (GameServer.exe). Для чего нам нужны исходные файлы: 1) Исправление многочисленных багов и ошибок; 2) Добавление нового функционала. В исходные файлы входят клиент и сервер версий 1.10 и 2.4 (т.е. 2 клиента и 2 сервера). В этой теме мы должны решить кто и сколько хочет/готов вложить денег, а так же на чьем кошельке (PayPal) будут эти деньги. ОБНОВЛЕНИЕ 06.06.2016 16:30 @Treuno86 увидел, что много пользователей хотят помочь, и попросил поднять планку до 400$. Я думаю, что никто не будет против. Он по прежнему отдает больше всех (85$). Хочу напомнить, что исходные файлы пойдут в шару и будут доступны всем желающим, независимо от того, вкладывали они деньги или нет. Люди, которые готовы помочь (25): Россия Команда сервера ZEST Online (@e1mer) Команда сервера World of Chaos (@NMS3RR) @Chad @insider @V1tor @Chudik @BotPRO @BETEP/macs509 Команда сервера Мордо Online Англоязычное сообщество @xtc @Wrexor @Yudha @Jones @Andy @Foxseiz @Andrew @Lucky @Sea King @DevMorgan @LazyKid @Sultan @TheLegend @Onioni @7n6 @GustavoHMA
- 36 replies
-
- 5
-
- сообщество
- исходные файлы
-
(and 4 more)
Tagged with:
-
--Quoting original post by V3ct0r. On the 16th of May, Monday, user with a nickname: "JIANJIAN", was selling source codes for 1.36 server and 1.10 client. Comparing to other suchlike threads, JIANJIAN added some proofs to the post. After the thread was deleted by the administration (@Zankza), with the following explanation: "that user might be a scammer". Later on that user started spamming threads where other people had been selling their stuff. All those posts had been deleted and user "JIANJIAN" was completely deleted from serverdev. Who he is, where he got them from - nobody knows. I tried to contact him via PM at serverdev but his PM channel was closed, which is weird. He might be a former Moli's developer or he might have found the sources somewhere on Chinese forums. However, he left his email (QQ - the most prevalent Instant messages sending service). [email protected] He has also released TradeServer source and some more auxiliary tools for VS 2003. Download. And finally a video, where he shows how he compiles a client in Visual Studio 2013. For someone the video works (slowly, though), for somebody not: http://www.56.com/u35/v_MTQwOTYwNjI0.html So, what do you guys think? It's not the first time we see sources for sale. I once saw somebody selling dumped client code as .c type files calling them the source...