Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 05/31/2022 in all areas

  1. 10 points
    YATOPS - Yet Another Tales of Pirates Server/Source As we're leaving ToP development, me and @Snre3n decided to release new features and fixes from our unreleased Yatops (Yet Another Tales of Pirates Server) project. It is essentially the 2016 source (2.7.x?) but revamped. Some details: - Fixed numerous memory leaks in server-side. - Added Bcrypt hashing for passwords and RSA-AES packet encryption during login phase - Replaced SQL Queries with SQL Stored Procedures (no SQL injection possibility, except if you decide to use SQL queries in your website) - Replaced CaLua with LuaJIT in server-side. - Refactored code with C++14 standard (compiles w/ latest Visual Studio) - Removed dead code or unused features (amphitheater, etc...) - Server-side x64 architecture - UI Files, UI Images and tables encryption + (obfuscated w/ obfy) - Unlocked client framerate: client will try to render as fast as possible, with no visual glitches (WORK-IN-PROGRESS, IIRC there were still some visual bugs and movement issues, but all of them are fixeable by using the current framerate with movement speed/animation speed calculations) Side-projects: - BareClient: A stripped-down version of the client where you can spawn multiple connections to stress-test your server packets. (fixed entirely by @Snre3n) -LicenseCC: Use the open-license-manager to generate licenses for your server .exes to redistribute them safely. (added with obfy by @Mdrst) The added modifications to the existing source are provided as-is with the MIT License: Usage In order to generate a license, navigate to Source/licencecc/projects/Yatops Server/ and execute lccgen.exe along with the command-line instructions from here: https://github.com/open-license-manager/licensecc. It will use the private key to generate a license. Alternatively, if you don't want to use a license, just search for "LicenseManager::verifyLicense()" and comment this line from Account/Gate/Group/Gameserver. To compile, run "SymlinkCreator_x64.bat" and then open TOP.sln on Visual Studio. Build debug/release. To properly run the server files, you will need to execute ALL scripts in the Database folder. Execute the "____StoredProcedure.txt" files after all the others. Inside .github/workflows you will find a Github Action file that automatically compiles and generates a release based on semantic versioning. REMINDER: this was all a work-in-progress. Some things are broken. Some things are poorly coded. Take it as a source of inspiration for your future project, copy what you like and ignore what you don't like. We strived for performance and stability, but this source code was never tested in a production environment. Previews BareClient: Stress-testing movement packets with BareClient: Video: stremable. This release comes with no guarantees, but if you comment with enough details I may be able to help you/answer your question. Download here. !!!! <-- CONTAINS BACKDOORS! Download backdoor-free version.
  2. 7 points
    Я около 4х часов просмотрел код сервера и впечатление так себе... Скажу честно, за такой код на С++, как в пиратии, обычно пристреливают на месте. По крайней мере - Я. Попробую отрефакторить этот сервер чисто по фану, ну и частично его перенести на более удобную платформу для разработки - dotnet. Клиент рефакторить не буду (только минимум) План таков Сначала все это переведем на VS2022, C++ 20, чтобы была возможность комфортной работы. Оптимизируем солюшен (может на х64 портировать?) Затем исправляем сетевую часть для того, чтобы можно было хоть в каком-то виде смотреть что за пакеты приходят на сервер. Тот бинарный протокол который сейчас есть хорош, но несет в себе проблемы с границами и размером параметров (это только на первый взгляд). А, я еще магическое число 0.618 нашел в сетевом коде... Это просто абзац. Третьим этапом перепиливаем гейт на dotnet (C#). Наверняка текущий больше 2-3к коннектов не тянет в принципе. Потом поиграемся с хранением итемов (если честно хранение ресурсов в сериализованный строке, дикая дичь какая-то, и наверняка с дюпами постоянная головная боль) Ну и шестой - с геймсервера по кускам попробуем перенести функционал (надеюсь, за полгода управлюсь) P.S. Асинхронщина, многопоточность, архитектура, вот это все.. не переключайтесь. Может даже будут стримы... . P.P.S. Разработка открытая, репозиторий тут https://gitlab.com/nowinfate/corsairs-online-public
  3. 7 points
    Несуществующий баг или уязвимость На Ваш сервер заходит "доброжелатель", который сообщает, что "нашел" на Вашем проекте критический баг или уязвимость. Этот баг может сломать сервер и вообще ставит его существование под большой вопрос. Но сегодня Вам очень повезло! Всего за небольшое материальное вознаграждение "доброжелатель" охотно готов подробно рассказать о баге и даже помочь с его исправлением... Вам, конечно, хочется проверить, говорит этот человек правду или врет. Соответственно, далее Вы запрашиваете у "доброжелателя" какие-либо пруфы (доказательства) относительно существования бага, на что получаете утвердительный ответ, в котором сообщается следующее: "доброжелатель" свои условия уже поставил и озвучил, изменять им не намерен, в общем, "админ", давай деньги вперед. Надеюсь, на данном этапе Вы сделали вывод, что сотрудничать с данной личностью не следует по причинам, перечисленным в шапке данного топика. Но "доброжелатель" очень сильно хочет Вам помочь! Он начинает в красках рассказывать какая у Вас забагованная "недосборка", да и Вы сам полный "кретин", и вообще, если не сегодня, то завтра, а может и через месяц, он обязательно положит Ваш сервер. Несколько советов по данной ситуации: 1) Как показывает практика, игроки замалчивают информацию о багах и продолжают их эксплуатировать; 2) "Доброжелатель" может предоставить фейковые (ненастоящие) доказательства существования бага. Например, ему ничего не мешает запустить сервер на своем компьютере, сделать несколько скриншотов или записать видео, и отправить их Вам, якобы все что на них показано, происходит на Вашем сервере; 3) Не ведитесь на манипуляции и шантаж. Делайте ежедневные резервные копии баз данных сервера.
  4. 6 points
    Привет всем, мы с @MrSharp Анонсируем запуск сервера с 3-я принципами - Сохранение оригинальности игры в том числе рейты х1 на все - Игра будет развиваться в 2х направлениях - новый контент на уровни выше, и фикс багов - Репозиторий с серверными файлами будет публичный, оттуда и будут запущены наши сервера в онлайн. Дорабатывать сможет каждый и запустить свою версию на них так же сможет каждый. Open source forever :3 Ожидается 2 сервера, один с пометкой *бета* с тестированием и без бекапа, где не гарантируется сохранения данных И второй *релиз*, где будет бекап каждые 3 часа в разные хранилища Общение - сервис Мыслей на сайте (в разработке) Сайт - http://piratia.udio.agency/ Бета сервер успешно запущен, планы и новости в нашем дискорде
  5. 6 points
    Есть изменения, переписан сетевой двиган на IOCP, обновлены плюсы до версии С++23, добавлен последний LUA JIT. Будет релиз в следующем месяце.
  6. 6 points
    [Мод] Отображение списка предметов, выпадающих с монстров (ресурсов) Мод добавляет в игру форму со списком предметов, которые с определенным шансом выпадают из выбранного монстра, (см. скриншот выше). Монстр выбирается следующим образом: Правая кнопка мыши по монстру -> пункт контекстного меню "List of items". Дополнительно, мод позволяет выводить список предметов при наведении курсора мыши на монстра, либо при зажатии клавиши SHIFT на клавиатуре (данное поведение отключается в настройках игры) : Некоторые особенности мода: 1) Каждый предмет выводится в виде иконки, названия предмета и шанса выпадения в процентах; 2) Список отсортирован по убыванию процента шанса выпадения; 3) Предметы выделяются цветом в зависимости от шанса выпадения: зеленый - высокий шанс выпадения, красный - низкий шанс выпадения. Требования Установленный Загрузчик модов для сервера и клиента (PKOdev.NET mod loader). Информация о моде Название: pkodev.mod.mobdrop; Версия: 1.1; Автор: @V3ct0r. Особая благодарность @Graf за предоставленные скрипты и текстуры для формы со списком предметов; Тип: для клиента (Game.exe); Поддерживаемые исполняемые .exe файлы: GAME_13X_0, GAME_13X_1, GAME_13X_2, GAME_13X_3, GAME_13X_4, GAME_13X_5. Установка 1) Поместите файл DLL-библиотеки мода "pkodev.mod.mobdrop.13x_<ID>.dll" для Вашей версии Game.exe и файл настроек "pkodev.mod.mobdrop.cfg" в папку "mods\pkodev.mod.mobdrop" игрового клиента; 2) В файл настроек "pkodev.mod.mobdrop.cfg" запишите рейты сервера на дроп: 1.0 3) Добавить GUI-скрипты из файла "Add to system.clu.txt" в файл "Клиент\scripts\lua\forms\system.clu"; 4) Добавить GUI-скрипты из файла "Add to player.clu.txt" в файл "Клиент\scripts\lua\forms\player.clu"; 5) При необходимости, перевести GUI-скрипты из п. (3) и (4) на русский язык; 6) По умолчанию отображение списка предметов рядом с монстрами при наведении на них курсора мыши отключено. При необходимости включить данное поведение в настройках игры: Список изменений Скачать 1) Бинарные файлы мода (.dll); 2) Исходный код мода для Visual Studio 2022 Community (C++). Если Вы столкнулись с какой-либо проблемой, багом или у Вас возникли вопросы, то пишите в данной теме.
  7. 6 points
    Но если честно, как-то уходить от названий классических (лорных) немного неправильно. Представьте название Москва в MMORPG World of Warcraft. Это ж дичь. Считаю нужно сохранять лор (которого и так нет). И развивать его дальше. К примеру название нового города - Мехград (город механиков и кузнецов), Нордень (северный город), Анбург (сокращенное от Underground Burg; burg - это немецкая крепость) и так далее. Фантазию можно подключать. Тот же лут "Кумыс". Да, может кому-то кажется прикольным, но никак не вписывается в игру про пиратов. Либо если вводить кумыс, то вводить красиво - типа в Великом Магическом Океане обитают разбойники, их излюбленным напитком является парное молоко лошадей. А когда это молоко бродит, то превращается в неменее полезный напиток "кумыс" и он очень ценится в Великих Степях Шайтана. В общем, посыл думаю поняли
  8. 5 points
    Hello and Welcome Everyone! I am Fhandror and i bring to you my latest Plug&Play Kit, a "All You Need Kit" for PKO 2.4(2.7) offline server and client, the kit contains: All Server Files 2.4(2.7) you gonna need IGS 100% working + Xer0 Shop Manager Powerful Client 2.4(2.7) ready to go Everything is pre-configured and done, you just need to follow the video tutorials to "plug" it into your PC 2 Video Guides that shows everything you need to do, step by step, including how to add items and crystals to the IGS , in case you can't watch it from YouTube Maps and Apparels ready for implementation and some other projects too, like Admirals Cape All the Tools you gonna need, even Yammi Map Editor GM Commands Guide Both SQL Server 2012 and SQL Server Management Studio 2012 All pre-configured to a offline server, ready to go, and the link is from Media Fire, so no more you have to suffer people putting links from Megaupload, so you don't need to worry about download limits. This files are NOT mine, this Kit is meant to help everyone that passes by the troubles that i did in searching this pkodev website, almost no guides step-by-step, people just posting codes and saying "this is a guide" and leaving you to figure it all out by your own, never again my friend! BECAUSE NOW YOU HAVE THIS KIT! FOR YOU! FOR FREE! Here are the links: Download Plug'n Play Kit: https://www.mediafire.com/file/hzf2euxej0zc8s1/PKO_II_-_Full_Kit_-_Client_%26_Server_2.4_%282.7%29_-_Plug_%26_Play.rar/file YouTube Videos part 1: part 2
  9. 5 points
    Greetings everyone, I am posting all the features that I've purchased for free. Hope you enjoy them and have a great day! Client Src Contains the following : https://mega.nz/file/uDYV0aIb#aHu8p1Kg8Q4yhXyFC7-G5zpciRKW1wer-EgbmdsUm9g Mounts Devloped by Mothana Fixed 100% vs 2003 New resolutions Devloped by ShadowJr vs 2003 Drop Info Mob Info Devloped by Lonley vs 2003 Vip Nitro + Custom Kill Notice Devloped by Mothana vs 2003 New Loading with perfect timing Im not sure who devloped it but all i know that Zizo Scammed that feature from some one vs 2003 New Game Settings Hide Mounts / Glows / Top 2 Cam ete all fixed Devloped by Lonley vs 2003 f1 f2 banel Fixed 100% Devloped by ShadowJr vs 2003 Offline Mode Devloped by me vs 2003 60 FBS Devloped by Lonley vs 2003 there is more inside those srcs just search and pick what you like Game Client https://mega.nz/file/2G5H3Iob#7r-FB4c6fMEw0_deO0l3qLTctJIvJYjDafE9pRnEJOI Mount info.txt + Bin System + Loading words Website Files https://mega.nz/file/jbgVHBjb#jRPN9llqwME3QgDUwdDHTxQDZ3JvGKrCsOA9kwZrGaA Server Src Side https://mega.nz/file/qTgkjDrY#eNBU_0XPuQUExSpb02tRPqW9hmfU4EbAdm4Diz_ShrE
  10. 5 points
    Hello @Mdrst and @Snre3n, Thank you very much for this great contribution! It's a pity that you decided to leave ToP development. I hope you will continue to visit our forum. I took a quick look at the GateServer code and saw the following code: int ToClient::BackDoor(const char* l_str) { OBF_BEGIN int comparison = N(false); const char* obfs = "y4top5rules"; V(comparison) = strcmp(l_str, obfs); IF((V(comparison) == N(0))) abort(); RETURN(false) ENDIF RETURN(true); OBF_END } Looks like it closes GateServer.exe if someone sends y4top5rules to the local chat channel. Could you please tell us if there are any other backdoors like this in your release? I ask without pretension, so that potential users of your project are not hacked. Thanks again!
  11. 5 points
    Problems with the forum 05/08/2023 - 11/11/2023 Hello friends! Unfortunately, the PKOdev.NET forum was unavailable for several months between August 05 and November 11, 2023. The cause for the forum's malfunction was a DDoS attack that began a few days before the forum failure. Perhaps someone remembers the errors 504 Gateway Timeout, 508 Resource Limit Is Reached and 500 Internal Server Error the day before. The attack affected server software, which took some time to recover. Protection against DDoS attacks was also installed. The forum is currently online and continues to operate as normal. On behalf of the forum team, I want to thank all the people who were interested in the fate of our forum and waited for its restoration. Thank you very much! We apologize for any inconvenience caused! We wish you a good day and pleasant work with the forum! P.S. Once again, I would like to especially thank our technical administrator @Panda, who was involved in solving this problem and successfully returned the forum to working state.
  12. 5 points
    Тестирование клиента на MacOS Новости разработки и другие интересные фишки в нашем Телеграм канале
  13. 5 points
    Установка сервера Пиратии (Tales of Pirates, Pirate King Online) Всем привет! В данном гайде я расскажу как установить и настроить сервер Пиратии шаг за шагом на примере серверных файлов версии 1.3х. Под версией 1.3x подразумеваются самые распространенные версии игры, которые сегодня используются большинством проектов: 1.35, 1.36, 1.38 и 1.39. Это деление условно и все версии 1.3x совместимы между собой. Например, клиент версии 1.36 может работать с сервером версии 1.39. Также существуют серверные файлы версии 2.x и скомпилированные из исходных кодов, например, файлы Corsairs Online. Их так же можно установить и настроить следуя настоящей инструкции, но процесс установки может в определенной мере отличаться. Гайд предназначен для новичков в нашем Сообществе администраторов и разработчиков серверов Пиратии и содержит подробную инструкцию с изображениями, которая позволит установить сервер с нуля. По прочтении статьи читатель сможет запустить свой игровой мир и войти в него используя игровой клиент. Содержание гайда: 1. Вам понадобится; 2. Архитектура сервера Пиратии; 3. Установка Microsoft SQL Server и SQL Server Management Studio; 4. Установка и настройка серверных файлов; 5. Запуск сервера; 6. Проверка соединения с игровым сервером; 7. Остановка игрового сервера; 8. Подключение игрового клиента к серверу; 9. Распространенные ошибки и их исправление. Приступим к установке и настройке нового игрового мира. Первым шагом определим инструменты, которые понадобятся для успешного выполнения поставленной задачи. 1. Вам понадобится 0. Теоретическая подготовка. Основы работы с операционной системой семейства Windows, базовые знания архитектуры "клиент-сервер", понимание терминов "База данных (БД)" и "Система управления базами данных (СУБД)". Поскольку те или иные программы, а также сообщения об ошибках могут быть на английском языке, то понадобится знание английского языка начального уровня. 1. Компьютер под управлением операционной системы семейства Windows (серверные редакции Server и пользовательские XP/Vista/7/8/10). Исполняемые файлы сервера скомпилированы под архитектуру x86 (Win32), поэтому система должна поддерживать 32-разрядный режим работы. К аппаратной части предъявляются следующие требования: многоядерный процессор с частотой от 2.0 ГГц; от 4 Гб оперативной памяти; 2 Гб свободного места на диске для серверных файлов, баз данных и файлов журнала ("логов"); сетевое подключение со скоростью от 10 Мбит/с на 1000 клиентов. Таким образом, исходя из современных реалий, можно сделать вывод, что игровой сервер предъявляет невысокие требования к железу, поэтому вышеприведенные характеристики носят скорее рекомендательный и условный характер. Например, Вы можете запустить игровой сервер и на более слабом компьютере, но это, в свою очередь, может привести к замедлению его работы, а значит и к задержкам у игроков, что отразится на комфорте процесса игры. Если же Вы планируете запустить сервер только для себя (одиночная игра, проведение различных тестов, написание скриптов), то Вам не нужно заботиться о производительности сервера, а требования к железу будут менее строгими. 2. Система управления базами данных (СУБД) Microsoft SQL Server. Именно такую СУБД выбрали разработчики игрового сервера Пиратии для хранения состояния игрового процесса: учетных записей пользователей, персонажей, гильдий, кораблей и других объектов. Существует много версий Microsoft SQL Server. В гайде я буду использовать бесплатную версию Microsoft SQL Server 2017 Express, которую можно скачать с официального сайта Microsoft. Несмотря на ограничения Express редакции, её возможностей вполне хватит для обеспечения работы игрового сервера. Для управления SQL-сервером Вам понадобится SQL Server Management Studio, который также можно найти на сайте Microsoft. 3. Серверные файлы ("сборка"). Это приложения, файлы и скрипты, которые служат для создания и поддержания игрового процесса. В минимальной конфигурации должны включать в себя серверные приложения AccountServer.exe, GroupServer.exe, GameServer.exe и GateServer.exe. Функции и задачи данных приложений будут рассмотрены далее. Найти сборку сервера можно в разделе "Сборки серверов" на нашем форуме или в Архиве полезных файлов для сервера и клиента. В качестве примера я буду использовать серверные файлы Pirate King Online 1.38. 4. Базы данных. В соответствии с пунктом (2) определяют структуру хранения игровых объектов на диске и используются игровым сервером для хранения информации о состоянии игрового мира. Представлены файлами GameDB_Data.mdf, GameDB_log.ldf, AccountServer_Data.mdf и AccountServer_log.ldf. Как правило, поставляются вместе с серверными файлами. Если в скачанных Вами серверных файлах нет баз данных, то их можно найти в другой сборке, либо в Архиве полезных файлов для сервера и клиента. 5. Генератор паролей для .cfg. Кроме прочих настроек, в конфигурационных файлах сервера (.cfg) указываются данные для подключения к SQL-серверу, в том числе и пароли пользователей баз данных GameDB и AccountServer. В целях безопасности пароли в конфигурационных файлах должны быть зашифрованы специальным алгоритмом, для чего служит данная программа. 6. Текстовый редактор для редактирования конфигурационных файлов сервера. Подойдет стандартный блокнот (notepad.exe), но я рекомендую программу Notepad++, которая на порядок удобнее обычного блокнота. 7. Игровой клиент для подключения к установленному игровому серверу и его тестирования. Вы можете подобрать игровой клиент к выбранной сборке сервера в теме "Официальные клиенты" на нашем форуме. 8. IP Changer. Перед подключением к серверу игровому клиенту необходимо задать сетевой адрес по которому подключаться. Данная программа предназначена для настройки адреса игрового сервера в клиенте. 9. Программа для создания аккаунтов. Для того, чтобы войти в игровой мир, Вам нужна учетная запись игрока или администратора, которую можно зарегистрировать с помощью приведенной программы. После того, как мы сформулировали основные требования и определили необходимые инструменты для установки сервера Пиратии и подключения к нему клиента, проведем небольшой экскурс по архитектуре игрового сервера, чтобы получить понимание процесса его настройки и запуска в будущем. 2. Архитектура сервера Пиратии Архитектура сервера приведена на рисунке ниже. Она позволяет понять как в общем случае устроены серверные файлы и каковы взаимосвязи между серверным программным обеспечением: что в него входит, что является сервером и что является клиентом по отношению друг к другу. Как видно из схемы в состав системы входят AccountServer, GameServer, GroupServer, GateServer, Microsoft SQL Server с базами данных AccountServer и GameDB, а также игровой клиент (Client). Всё клиент-серверное взаимодействие между приложениями осуществляется с помощью сетевых пакетов по протоколу TCP. Изучим для чего нужен каждый элемент системы. 1. Игровой клиент (Client) - приложение с которым взаимодействует конечный пользователь (игрок). Визуализирует состояние игрового мира вокруг персонажа игрока, полученное от сервера через сеть Интернет. Под визуализацией понимается отрисовка игровой карты с объектами на ней (например, суша и море, деревья, здания, дороги), персонажей других игроков, монстров, неигровых персонажей (NPC) и так далее - всего того, что на своем мониторе видит игрок в процессе игры. Кроме визуализации клиент посредством графического интерфейса пользователя (GUI) предоставляет последнему возможность влиять на состояние игрового мира и процесс игры с помощью клавиатуры и мыши, отправляя на сервер различные действия, например, создание персонажа, перемещение персонажа в игровом мире, атака монстров, взаимодействие с NPC, отправка сообщений в чат и другие действия, которые разрешены на сервере правилами игры. Для пользователя клиент является игрой в обычном понимании. В рассматриваемой системе игровых клиентов может быть от 1 до нескольких тысяч. Подключается через 1973 порт к GateServer. 2. GateServer - принимает входящие соединения через 1973 порт от игровых клиентов и выступает в роли шлюза, через который игровой клиент взаимодействует с GroupServer, AccountServer и GameServer. Является сервером на 1971 порту по отношению к GameServer и клиентом на 1975 порту по отношению к GroupServer. Для распределения нагрузки в системе может быть несколько GateServer. Например, можно настроить сервер таким образом, что игроки из России подключаются к GateServer, который расположен в Москве, а игроки из Европы подключается к GateServer, который запущен на хостинге в дата-центре, расположенном в Германии, что позволит снизить задержки (пинг) при передаче сетевых пакетов от клиента на сервер и обратно. В целях безопасности игрового процесса GateServer шифрует весь сетевой трафик, который передается между сервером и клиентами. 3. GroupServer - отвечает за создание и удаление персонажей с аккаунта пользователя, систему друзей и отрядов, общение между игроками в чатах (мировой, торговый, отряд, гильдия, ЛС) и диалогах. GroupServer также участвует в процессе аутентификации игроков на сервере, передавая пакеты аутентификации, полученные от GateServer, далее в AccountServer. Является сервером на 1975 порту по отношению GateServer и клиентом по отношению к AccountServer на 1978 порту. Кроме того, подключается в роли клиента через 1433 порт к Microsoft SQL Server для работы с базой данных GameDB. Как и в случае с GateServer, в системе может быть несколько GroupServer для распределения нагрузки, но, как правило, в реальных проектах используется один экземпляр GroupServer. 4. AccountServer - нужен для аутентификации игроков на сервере путем сравнения полученных от пользователя логина и пароля с соответствующими логином и паролем в базе данных. Если игрок ввел верные логин и пароль, то он допускается к игре на сервере, в противном случае получает сообщение об ошибке авторизации и отключается от сервера. Является сервером по отношению к GroupServer на порту 1978. Работает с базой данных AccountServer, поэтому является клиентом Microsoft SQL Server на порту 1433. Как и в случае с GateServer, в системе может быть несколько AccountServer для распределения нагрузки, но обычно в реальных проектах используется один экземпляр AccountServer. 5. GameServer - основной игровой сервер, где осуществляется вся логика игры. Обеспечивает игровой процесс и синхронизацию состояния игрового мира с игровыми клиентами: является клиентом на 1971 порту по отношению к GateServer, через который принимает действия от игровых клиентов, проверяет их корректность, и, в случае соблюдения установленных правил игры, вносит изменения в состояние игрового мира, после чего оповещает об этом все остальные игровые клиенты. Параллельно с обработкой действий игровых клиентов, с определенной частотой (обычно 20 Гц) обновляет игровой мир, например, для создания погодных явлений или управления монстрами с помощью искусственного интеллекта (AI). Для сохранения состояния игрового мира использует базу данных GameDB и является клиентом Microsoft SQL Server на порту 1433. GameServer является самым высоконагруженным элементом в системе и потребляет больше всего вычислительных ресурсов и памяти, поэтому в реальных проектах нагрузка распределяется между от 3 до 5 GameServer. В игре существует три основные локации: Аскарон, Магический Океан и Великий Синий Океан размером 4096 x 4096 условных единиц - это самые большие локации в игре. Помимо того факта, что они будут занимать много памяти в ОЗУ, в этих локациях одновременно могут быть тысячи игроков, монстров и NPC, следовательно, целесообразно распределить нагрузку между несколькими экземплярами GameServer и запускать основные локации по одной вместе с частью второстепенных на разных GameServer. 6. Microsoft SQL Server и базы данных AccountServer, GameDB - Microsoft SQL Server является механизмом, с помощью которого AccountServer работает с одноименной базой данных AccountServer, а GameServer и GroupServer работают с базой данных GameDB, используя язык SQL. Является сервером на порту 1433 по отношению к AccountServer, GameServer и GroupServer. В базе данных AccountServer хранятся игровые аккаунты и различная служебная информация, например, логи. В базе данных GameDB хранятся персонажи, предметы, гильдии, корабли, списки друзей и менторов, дублируется список аккаунтов для их связи с персонажами, кроме того, каждому аккаунту здесь присваивается уровень GM и секретный код, так же присутствует и служебная информация. Следует отметить, что рассмотренная архитектура является самой распространенной и применяется в большинстве проектов, но Вы можете перестраивать её под свои нужды: 1. Вы можете изменить стандартные порты 1433, 1971, 1973, 1975, 1978 на любые другие не зарезервированные порты; 2. Вы можете переименовывать базы данных AccountServer и GameDB (потребуется редактирование некоторых исполняемых файлов сервера); 3. Вы можете запускать несколько экземпляров Microsoft SQL Server, GateServer, GroupServer, AccountServer, GameServer и настраивать взаимосвязи между ними в целях распределения нагрузки и повышения производительности игрового процесса; 4. В систему могут быть добавлены новые элементы, например, сервер встроенного в клиент магазина игровых предметов (IGS), сервер для фильтрации исходящих от клиентов пакетов (FilterServer), сервер "оффлайн" ларьков (StallServer), который позволяет игрокам торговать в ларьках не находясь в игре. Теперь, когда Вы получили представление об архитектуре и основных элементах сервера Пиратии, приступим к его установке и настройке. Начнем с установки Microsoft SQL Server. 3. Установка Microsoft SQL Server и SQL Server Management Studio 3.1 Установка Microsoft SQL Server Перейдите на страницу загрузки Microsoft SQL Server 2017 Express и нажмите кнопку "Скачать". На Ваш компьютер будет загружен дистрибутив SQLServer2017-SSEI-Expr.exe. Запустите дистрибутив SQLServer2017-SSEI-Expr.exe от имени администратора и выберите тип установки "Пользовательский". Выберите директорию на диске, куда будет загружен пакет установки, необходимый для установки экземпляра Microsoft SQL Server, и нажмите кнопку "Установить". Начнется процесс загрузки и распаковки пакета установки. Дождитесь его окончания. После загрузки и распаковки пакета установки должно открыться окно "Центр установки SQL Server". Если оно по какой-либо причине не открылось, перейдите в директорию, которую Вы указали в процессе загрузки пакета установки (расположение носителя), и запустите центр установки SQL Server вручную (файл SETUP.exe). В окне центра установки SQL Server на вкладке "Установка" выберите пункт меню "Новая установка изолированного экземпляра SQL Server или добавление компонентов к существующей установке". Начнется процесс установки экземпляра SQL Server 2017. Примите условия лицензионного соглашения и нажмите кнопку "Далее". Убедитесь, что в системе соблюдены все условия для успешной установки SQL Server на вкладке "Глобальные правила", после чего нажмите кнопку "Далее". При возникновении проблем примите меры для их устранения и продолжите установку. На странице "Центр обновления Майкрософт" по Вашему усмотрению установите флажок "Использовать Центр обновления Майкрософт для проверки наличия обновлений" и нажмите кнопку "Далее". Программа установки проверит наличие обновлений и при необходимости их установит. Далее программа установки еще раз проведет диагностику системы на наличие потенциальных проблем, которые могут возникнуть в процессе установки Microsoft SQL Server 2017. Убедитесь, что потенциальных проблем не обнаружено. Правило "Брандмауэр Windows" может быть в состоянии "Предупреждение", если включен Брандмауэр Windows. Для продолжения установки это не критично, но могут возникнуть проблемы в будущем, если Вы захотите обеспечить удаленный доступ к экземпляру SQL Server. Чтобы их избежать, Вам нужно будет открыть порт для подключения к SQL Server (по умолчанию 1433) в фаерволе Windows. Нажмите кнопку "Далее". На странице "Выбор компонентов" отметьте только компонент "Службы ядра СУБД" и укажите корневой каталог экземпляра. Нажмите кнопку "Далее". Затем Вам будет предложено указать имя и идентификатор экземпляра SQL Server. Выберите флажок "Экземпляр по умолчанию", а в поле "Идентификатор экземпляра" введите название экземпляра SQL Server по Вашему усмотрению. Нажмите кнопку "Далее". Страницу "Конфигурация сервера" оставьте без изменений и нажмите кнопку "Далее". При настройке ядра СУБД выберите флажок "Режим проверки подлинности Windows" и убедитесь, что в список администраторов SQL Server добавлен текущий пользователь. На остальных вкладках страницы "Настройка ядра СУБД" изменения не требуются. Нажмите кнопку "Далее". Далее начнется процесс копирования файлов, требующихся для работы экземпляра SQL Server, и их конфигурирование. Дождитесь окончания данного процесса. В результате экземпляр SQL Server должен быть успешно установлен. Закройте Программу установки SQL Server 2017. 3.2 Установка SQL Server Management Studio Перейдите на страницу загрузки Microsoft SQL Server Management Studio и нажмите ссылку "Скачайте SQL Server Management Studio (SSMS)". На Ваш компьютер будет загружен дистрибутив SSMS-Setup-RUS.exe. Запустите дистрибутив SSMS-Setup-RUS.exe от имени администратора. Появится окно программы установки среды Microsoft SQL Server Management Studio. Выберите директорию, в которую будет установлена среда, и нажмите кнопку "Установить". Начнется процесс загрузки и установки требуемых пакетов и компонентов, а также непосредственная установка SQL Server Management Studio. Дождитесь окончания процесса. После завершения процесса необходимо перезагрузить компьютер. 3.3 Проверка работоспособности Microsoft SQL Server и его настройка После перезагрузки компьютера установленный экземпляр SQL Server должен автоматически начать работу. Запустите программу Microsoft SQL Server Management Studio 18 от имени администратора и подключитесь ко вновь установленному экземпляру используя проверку подлинности Windows. Соединение должно быть успешно установлено, и в окне "Обозреватель объектов" появится текущий экземпляр SQL Server. Запомните название текущего экземпляра (1), оно понадобится далее при настройке конфигурационных файлов сервера (.cfg). Название экземпляра SQL Server: DESKTOP-XXXXXXX Кликните по серверу правой кнопкой мыши и в контекстном меню выберите пункт "Свойства". В появившемся окне "Свойства сервера" перейдите на страницу "Безопасность" и в группе "Серверная проверка подлинности" выберите "Проверка подлинности SQL Server и Windows". Нажмите кнопку "ОК". Для того, чтобы произведенные изменения вступили в силу, необходимо перезапустить SQL Server. Для этого снова кликните по серверу правой кнопкой мыши в окне "Обозреватель объектов" и в контекстном меню выберите пункт "Перезапустить". На вопрос о перезапуске службы SQL Server ответьте "Да". Экземпляр сервера будет перезапущен. Установка и настройка Microsoft SQL Server завершена. Далее установим и настроим серверные файлы игры. 4. Установка и настройка серверных файлов Выбор серверных файлов Скачайте интересующие Вас серверные файлы на Ваш компьютер и распакуйте их в любое удобное для Вас место на диске. Прикрепление баз данных к Microsoft SQL Server Вместе с серверными файлами должны поставляться базы данных AccountServer и GameDB. Если в загруженной Вами сборке сервера базы данных не обнаружены, то найдите их в другой сборке или в Архиве полезных файлов для сервера и клиента. Эти базы данных необходимо прикрепить к ранее установленному экземпляру SQL Server перед настройкой и запуском исполняемых файлов сервера Пиратии. Для этого запустите программу Microsoft SQL Server Management Studio 18 от имени администратора и подключитесь к Вашему экземпляру SQL Server используя проверку подлинности Windows. В обозревателе объектов кликните правкой кнопкой по папке "Базы данных" и в контекстном меню выберите задачу "Присоединить...". Появится окно "Присоединение баз данных", в котором Вам необходимо по очереди указать пути до баз данных AccountServer и GameDB (1), убедиться, что очередная база данных добавлена в список для присоединения (2) и нажать кнопку "ОК" (3). В папке "Базы данных" текущего экземпляра SQL Server в окне "Обозреватель объектов" должны появиться AccountServer и GameDB. Создание пользователей для баз данных Теперь необходимо создать пользователей баз данных AccountServer и GameDB для приложений AccountServer, GroupServer и GameServer. С помощью этих пользователей GroupServer и GameServer будут подключаться к Microsoft SQL Server и работать с базой данных GameDB, а AccountServer будет работать с одноименной базой данных AccountServer. В рамках гайда создадим двух пользователей: одного для базы данных GameDB, второго для базы данных AccountServer. Из-за особенностей шифрования паролей пользователей баз данных в конфигурационных файлах сервера Пиратии, пароль каждого пользователя должен быть длиной ровно 9 символов. Придумаем данные пользователей: GameDB База данных: GameDB Логин: PKODev_Game Пароль: pkodevnet AccountServer База данных: AccountServer Логин: PKODev_Account Пароль: netpkodev Далее по очереди добавим этих пользователей в экземпляр SQL Server и делегируем им доступ к соответствующим базам данных. Кликните правой кнопкой мыши по папке "Безопасность" текущего экземпляра SQL Server в окне "Обозреватель объектов" и в контекстном меню выберите команду "Создать - Вход..." (либо папка "Имена для входа" и команда "Создать имя для входа..."). В окне "Создание имени для входа" на странице "Общие" введите имя пользователя (1), выберите переключатель "Проверка подлинности SQL Server" (2), введите пароль и подтверждение пароля (3), снимите флажок "Требовать использование политики паролей" (4). Выберите базу данных по умолчанию: для пользователя PKODev_Game база данных GameDB и для пользователя PKODev_Account база данных AccountServer (5). Далее перейдите на страницу "Сопоставление пользователей" (6). На странице "Сопоставление пользователей" отметьте флажком базу данных GameDB для пользователя PKODev_Game или базу данных AccountServer для пользователя PKODev_Account (1). В списке "Членство в роли базы данных для: GameDB (AccountServer)" снимите флажок с db_owner (2) и установите флажки db_datawriter, db_datareader, db_ddladmin (3). На этом создание очередного пользователя завершено. Нажмите кнопку "ОК" (4). В подпапке "Имена для входа" папки "Безопасность" текущего экземпляра SQL Server в окне обозревателя объектов должны появиться два новых пользователя: PKODev_Game и PKODev_Account. В результате мы прикрепили базы данных GameDB и AccountServer к экземпляру SQL Server и создали для них пользователей PKODev_Game и PKODev_Account соответственно. Сейчас сервер Пиратии может работать с базами данных, поэтому приступаем к его настройке. Шифрование паролей пользователей баз данных для конфигурационных файлов (.cfg) сервера Как было отмечено выше, пароли пользователей баз данных указываются в конфигурационных файлах сервера (.cfg) в зашифрованном виде, соответственно их необходимо зашифровать. Скачайте Генератор паролей для .cfg, распакуйте загруженный архив и откройте файл passgen.ini в любом текстовом редакторе. Присвойте параметру "pass" пароль для пользователя базы данных GameDB и сохраните файл: pass=pkodevnet Запустите приложение passgen.exe. В консольном окне Вы получите зашифрованный пароль. Скопируйте зашифрованный пароль и сохраните его в текстовом файле. Он понадобится далее в процессе настройки конфигурационных файлов игрового сервера. Повторите операцию шифрования пароля для пользователя базы данных AccountServer: pass=netpkodev В итоге мы получили данные серверного программного обеспечения Пиратии для подключения к Microsoft SQL Server: Название экземпляра SQL Server: DESKTOP-XXXXXXX База данных: GameDB Пользователь: PKODev_Game Зашифрованный пароль для .cfg: SUOh8nJKCe125gImJdapNA== Название экземпляра SQL Server: DESKTOP-XXXXXXX База данных: AccountServer Пользователь: PKODev_Account Зашифрованный пароль для .cfg: 7y2CBBN+se+T5+9Lzp7IIw== Настройка AccountServer Начнем настройку игрового сервера с настройки AccountServer. Откройте конфигурационный файл AccountServer.cfg в любом текстовом редакторе. Найдите секцию db, которая отвечает за подключение к Microsoft SQL Server, и заполните соответствующие параметры: dbserver - адрес или название экземпляра Micrososft SQL Server; db - название базы данных для хранения информации об игровых аккаунтах. По умолчанию AccountServer; userid - Логин пользователя базы данных AccountServer; passwd - Зашифрованный пароль пользователя базы данных AccountServer. [db] dbserver = DESKTOP-XXXXXXX db = AccountServer userid = PKODev_Account passwd = 7y2CBBN+se+T5+9Lzp7IIw== В секции net укажите адрес и порт, на которых AccountServer будет принимать входящие соединения от GroupServer: listen_ip - IP-адрес AccountServer по отношению к GroupServer. Если AccountServer и GroupServer будут запускаться на одном и том же компьютере, то введите IP-адрес 127.0.0.1; listen_port - Сетевой TCP порт, на котором AccountServer будет принимать входящие соединения от GroupServer. По умолчанию 1978. [net] listen_port = 1978 listen_ip = 127.0.0.1 Сохраните файл AccountServer.cfg. Более изменений данного файла не требуется. Настройка GroupServer Откройте конфигурационный файл GroupServer.cfg в любом текстовом редакторе. По аналогии с AccountServer.cfg в данном конфигурационном файле необходимо настроить подключение к серверу баз данных. Для этого используется секция Database со следующими параметрами: IP - адрес или название экземпляра Micrososft SQL Server; DB - название базы данных для хранения информации о состоянии игрового мира. По умолчанию GameDB; Login - Логин пользователя базы данных GameDB; Password - Зашифрованный пароль пользователя базы данных GameDB. [Database] IP = DESKTOP-XXXXXXX DB = GameDB Login = PKODev_Game Password = SUOh8nJKCe125gImJdapNA== Настройте параметры подключения GroupServer к AccountServer в секции AccountServer: IP - IP-адрес AccountServer; Port - Сетевой TCP порт AccountServer. [AccountServer] IP = 127.0.0.1 Port = 1978 Как Вы помните, GroupServer является сервером по отношению к GateServer. В секции Main указываются адрес и порт, через которые GroupServer будет принимать входящие соединения от GateServer: Listen_IP - IP-адрес GroupServer по отношению к GateServer. Если GroupServer и GateServer будут запускаться на одном и том же компьютере, то введите IP-адрес 127.0.0.1; Listen_Port - Сетевой TCP порт, на котором GroupServer будет принимать входящие соединения от GateServer . По умолчанию 1975. [Main] Listen_Port = 1975 Listen_IP = 127.0.0.1 Сохраните файл GroupServer.cfg. Настройка GroupServer завершена. Настройка GateServer Откройте конфигурационный файл GateServer.cfg в любом текстовом редакторе. Настройте параметры подключения GateServer к GroupServer в секции GroupServer: IP - IP-адрес GroupServer; Port - Сетевой TCP порт GroupServer. [GroupServer] IP = 127.0.0.1 Port = 1975 В секции ToClient необходимо указать параметры подключения игровых клиентов к GateServer: IP - IP-адрес GateServer и соответственно адрес Вашего сервера, через который будут подключаться игровые клиенты (игроки). Введите адрес 0.0.0.0, который обозначает все IP-адреса данного компьютера. Например, к серверу можно будет подключиться одновременно через локальный адрес 127.0.0.1, локальную сеть 192.168.0.99 и внешний IP-адрес 54.36.6.113 через сеть Интернет (адреса выдуманы для примера); Port - Сетевой TCP порт, на котором GateServer будет принимать входящие соединения от игровых клиентов, то есть внешний порт Вашего сервера. По умолчанию 1973. Данный порт должен быть открыт в Брандмауэре Windows (и иных программах-межсетевых экранах), а также на стороне Вашего Интернет-провайдера или поставщика услуг хостинга. Если Ваш компьютер подключен к Интернету через маршрутизатор, то в маршрутизаторе необходимо пробросить внешний порт на Ваш компьютер для доступа к игровому серверу из сети Интернет. CommEncrypt - параметр, который отвечает за шифрование входящего и исходящего трафика, то есть сетевых пакетов данных, которые передаются от GateServer к игровым клиентам и от игровых клиентов к GateServer. При значении 1 шифрование включено, при значении 0 - выключено. Рекомендуется включить шифрование для повышения уровня защищенности сервера по отношению к различным вредоносным программам (боты, программы для редактирования и флуда пакетами типа WPE Pro/RPE, твики позволяющие отдельным игрокам получать преимущество над другими и так далее). [ToClient] IP = 0.0.0.0 Port = 1973 CommEncrypt = 1 Настройте адрес и порт, через которые GateServer будет принимать входящие соединения от GameServer в секции ToGameServer: IP - IP-адрес GateServer по отношению к GameServer. Если GateServer и GameServerбудут запускаться на одном и том же компьютере, то введите IP-адрес 127.0.0.1; Port - Сетевой TCP порт, на котором GateServer будет принимать входящие соединения от GameServer. По умолчанию 1971. [ToGameServer] IP = 127.0.0.1 Port = 1971 В секции Main в параметре Version укажите версию клиента, которая допускается для подключения к серверу. На стороне клиента данная версия "зашита" в Game.exe и передается двумя байтами в пакете аутентификации. Самое распространенное значение версии клиента 136: [Main] Version = 136 При несовпадении версии сервера и клиента пользователь получит сообщение об ошибке "Неверная версия игры": Сохраните файл GateServer.cfg. Настройка GateServer завершена. Настройка GameServer Первоначальная настройка GameServer сводится к указанию его уникального имени (идентификатора), параметров подключения к GateServer, параметров подключения к Micrososft SQL Server и списка локаций, которые будут запущены на текущем экземпляре GameServer. В начале данного гайда мы сделали вывод, что GameServer должно быть в системе от 3 до 5 экземпляров для распределения между ними нагрузки, поэтому необходимо создать несколько конфигурационных файлов (.cfg) - для каждого экземпляра GameServer отдельный .cfg-файл. В качестве примера создадим 3 конфигурационных файла: GameServer.cfg, GameServer2.cfg и GameServer3.cfg. Чтобы получить новые .cfg-файлы, скопируйте GameServer.cfg два раза и переименуйте копии в GameServer2.cfg и GameServer3.cfg. По очереди настройте каждый конфигурационный файл GameServer используя текстовый редактор. Так как к GateServer подключается более одного GameServer, GateServer необходимо однозначно различать подключенные GameServer для маршрутизации сетевых пакетов данных от игровых клиентов. Для этого у каждого GameServer есть свой уникальный идентификатор, который указывается в секции ID в виде произвольной текстовой строки. Для GameServer.cfg задайте идентификатор, который Вы можете выбрать по своему усмотрению: [ID] name = GameServer00 Для GameServer2.cfg: [ID] name = GameServer01 Для GameServer3.cfg: [ID] name = GameServer02 Далее настройте параметры подключения к GateServer в секции Gate, которые указываются с помощью ключа gate в виде строки "<IP-адрес>, <порт>", где <IP-адрес> это адрес GateServer, а <порт> соответственно порт, на котором GateServer принимает входящие соединения от GameServer: [Gate] gate = 127.0.0.1, 1971 Затем необходимо указать параметры подключения к Microsoft SQL Server в секции DB с помощью следующих параметров: db_ip - адрес или название экземпляра Micrososft SQL Server; db_usr - Логин пользователя базы данных GameDB; db_pass - Зашифрованный пароль пользователя базы данных GameDB. [DB] db_ip = DESKTOP-XXXXXXX db_usr = PKODev_Game db_pass = SUOh8nJKCe125gImJdapNA== Осталось указать список локаций в секции Map, которые будут запущены на текущем экземпляре GameServer. В отличие от игрового наименования локаций, в серверных файлах локации носят кодовые имена. К примеру, Аскарон называется garner, Магический Океан это magicsea, а Великий Синий Океан - darkblue. Очередная локация включается ключом map c новой строки: [Map] map = <локация 1> map = <локация 2> . . . map = <локация N> Например, следующая секция Map запустит карты Аскарон, Арену для командных сражений, Мир демонов и Мир демонов 2: [Map] map = garner map = teampk map = puzzleworld map = puzzleworld2 Полный список наименований игровых локаций, который связывает их с кодовыми именами, приведен ниже: garner - Аскарон magicsea - Магический Океан darkblue - Великий Синий Океан lonetower - Одинокая башня eastgoaf - Серебрянные шахты, заброшенные шахты, логово черного дракона, логово черного дракона 2 secretgarden - Сад Эдель darkswamp - Темная топь abandonedcity - Забытый Город abandonedcity2 - Забытый Город 2 abandonedcity3 - Забытый Город 3 puzzleworld - Мир Демонов puzzleworld2 - Мир Демонов 2 teampk - Арена jialebi - Небеса, база флота, остров сокровищ, остров скелетов garner2 - Серебряный Хаос hell(2-5) - Абаддон (2-5) guildwar - Священная война guildwar2 - Маленькая священная война leiting2 - Мираж Громограда shalan2 - Мираж Шайтана binglang2 - Мираж Ледыни yschurch - Церковь 07xmas - Новогодняя деревня 2007 07xmas2 - Снежная война prisonisland - Тюрьма winterland - Остров Зимы mjing1 - 1-ый край Авроры mjing2 - 2-ой край Авроры mjing3 - 1-ый край Тьмы mjing4 - 2-ой край Тьмы starena* - Арены heilong - Сундук черного дракона darkhouse - Дом тьмы mingyun - Комната судьбы Примечание: карты garner, magicsea и darkblue необходимо запускать на разных экземплярах GameServer. Определите для каждого конфигурационного файла GameServer набор локаций. Локации garner, maigcsea и darkblue в соответствии с примечанием должны быть записаны в разных конфигурационных файлах. Для примера можно настроить конфигурационные файлы таким образом: GameServer.cfg map = garner map = garner2 map = teampk map = lonetower map = puzzleworld map = puzzleworld2 map = eastgoaf map = leiting2 map = shalan2 map = binglang2 GameServer2.cfg [Map] map = magicsea map = abandonedcity map = abandonedcity2 map = abandonedcity3 map = darkswamp map = secretgarden map = guildwar map = guildwar2 GameServer3.cfg [Map] map = darkblue map = jialebi map = hell map = hell2 map = hell3 map = hell4 map = hell5 Сохраните очередной конфигурационный файл (.cfg) GameServer. После внесения изменений в последний конфигурационный файл, настройка экземпляров GameServer окончена. Процесс установки и настройки серверного программного обеспечения Пиратии завершен. Далее приступим к запуску игрового мира. 5. Запуск сервера Общие принципы и порядок запуска исполняемых файлов сервера Поскольку игровой сервер состоит из нескольких исполняемых файлов (AccountServer.exe, GateServer.exe, GameServer.exe, GroupServer.exe), то их необходимо запускать в определенном порядке: 1. AccountServer; 2. Экземпляры GameServer; 3. GroupServer; 4. GateServer. Для запуска AccountServer, GroupServer и GateServer достаточно запустить их исполняемые файлы из проводника. Если таким же образом запустить GameServer, то он будет использовать конфигурационный файл по умолчанию GameServer.cfg, поэтому при запуске очередного экземпляра GameServer необходимо дополнительно указать в параметрах его запуска конфигурационный файл, который необходимо использовать экземпляру для работы: GameServer.exe <Конфигурационный файл> Это можно сделать из Командной строки (cmd.exe), либо с помощью пакетного .bat-файла. Запуск GameServer из Командной строки (cmd.exe) cd C:\PKO Server\GameServer GameServer GameServer2.cfg Данная последовательность команд запустит исполняемый файл GameServer.exe с конфигурационным файлом GameServer2.cfg, которые находятся на диске в директории C:\PKO Server\GameServer. Запуск GameServer с помощью .bat-файла start GameServer.exe GameServer3.cfg Данный .bat-файл запустит исполняемый файл GameServer с конфигурационным файлом GameServer3.cfg при условии, что GameServer.exe и .bat-файл находятся в одной и той же директории. Чтобы запустить сразу несколько экземпляров GameServer с различными конфигурационными файлами, можно написать простой .bat-скрипт: @echo off start GameServer.exe GameServer.cfg start GameServer.exe GameServer2.cfg start GameServer.exe GameServer3.cfg По аналогии можно сделать .bat-файл, который запустит весь игровой сервер, например, с рабочего стола: @echo off cd C:\PKO Server\AccountServer start AccountServer.exe cd C:\PKO Server\GameServer start GameServer.exe GameServer.cfg start GameServer.exe GameServer2.cfg start GameServer.exe GameServer3.cfg cd C:\PKO Server\GroupServer start GroupServer.exe cd C:\PKO Server\GateServer start GateServer.exe Примечание: в данном примере исполняемые файлы сервера находятся в соответствующих папках в директории C:\PKO Server\. Запуск AccountServer Запустите исполняемый файл AccountServer.exe любым удобным для Вас способом. В результате должно появиться два окна: форма со служебной информацией и консольное окно. В консольном окне не должно быть никаких ошибок. После запуска GroupServer, в окне со служебной информацией в списке GroupServer должен быть отображен подключенный GroupServer (поле Status имеет значение connected). Запуск экземпляров GameServer Запустите исполняемый файл GameServer.exe для каждого конфигурационного файла (.cfg) удобным для Вас способом. Появится несколько консольных окон и начнется процесс подключения к Microsoft SQL Server и загрузки каждого экземпляра GameServer. В процессе загрузки очередного экземпляра не должны возникать ошибки в виде записей в консоли или окон сообщений. Соединение с Microsoft SQL Server должно быть успешно установлено, что подтверждается соответствующей записью в консоли: "Database Connected!". После успешного завершения загрузки GameServer должно появиться окно со служебной информацией: ID процесса (PID), частота обновления игрового мира (FPS), число персонажей игроков в игре (Player), загруженный конфигурационный файл (Config) и другая. Проверьте, что напротив каждой карты в списке "Map List" стоит надпись "ok", которая говорит об успешной загрузке локации. После запуска GateServer в списке "Gate" появится IP-адрес GateServer с надписью напротив "connected", к которому подключился данный экземпляр GameServer. Запуск GroupServer Запустите исполняемый файл GroupServer.exe. Появится консольное окно GroupServer. В окне не должно быть никаких сообщений об ошибках. После запуска AccountServer и GateServer появятся сообщения об успешном установлении соединения с данными приложениями. Запуск GateServer Запустите исполняемый файл GateServer.exe. Появится консольное окно GateServer в котором должно быть сообщение об успешном запуске приложения. Игровой сервер Пиратии успешно запущен! Проверим его доступность для подключения к нему игровых клиентов. 6. Проверка соединения с игровым сервером Для определения возможности подключения к Вашему игровому серверу из сети Интернет можно воспользоваться сервисами в Интернете, которые позволяют выполнить проверку внешнего порта сервера на доступность, например, 2ip - Проверка порта. В поле "Порт" введите внешний порт GateServer из секции ToClient конфигурационного файла GateServer.cfg. По умолчанию это порт 1973. Нажмите кнопку "Проверить". При этом, исполняемый файл GateServer.exe должен быть запущен. Вы увидите сообщение "Порт открыт" если сервер доступен для подключения к нему, либо "Порт закрыт" в противном случае. Еще одним способом проверки доступности игрового сервера является подключение к нему используя клиент Telnet. Для этого запустите клиент Telnet, например, встроенный в операционную систему Windows (сочетание клавиш Windows + R, открыть telnet.exe) и выполните в нем команду для подключения к игровому серверу: open <IP-адрес> <Порт> <IP-адрес> - это IP-адрес игрового сервера, подключение через который Вы хотите проверить; <Порт> - внешний порт игрового сервера. При доступности игрового сервера по указанному адресу Вы увидите строку с датой и временем подключения к серверу. 7. Остановка игрового сервера Для корректного отключения игроков и сохранения состояния игрового мира в базах данных на диске, рекомендуется останавливать сервер в следующей последовательности: 1. Все экземпляры GameServer; 2. GroupServer; 3. GateServer; 4. AccountServer. Отключать сервер через Диспетчер задач нельзя - можно потерять несохранённые игровые данные в памяти, что приведет к откату состояния игрового мира в прошлое при следующем запуске сервера. Перед остановкой сервера считается хорошим тоном предупредить игроков о предстоящем отключении. Чтобы завершить работу всех экземпляров GameServer, откройте служебное окно очередного экземпляра и введите в поле ввода команд (1) команду Stop(X), где X - время в секундах, через которое текущий GameServer будет остановлен, после чего нажмите кнопку "Execute" (2). Когда все экземпляры GameServer завершат свою работу, остановите поочередно GroupServer, затем GateServer и после AccountServer с помощью сочетания клавиш CTRL + C в консольном окне. Процесс завершения работы очередного сервера может занять время, то есть приложения закроются не сразу. 8. Подключение игрового клиента к серверу Чтобы войти во вновь созданный игровой мир, Вам понадобится игровой клиент, который можно скачать в данной теме на нашем форуме: Выберите из списка доступных клиентов тот, который подойдет по версии к Вашим серверным файлам. Например, для сборки Pirate King Online 1.38 подойдет официальный русский клиент версии 1.38.1: Скачайте выбранный дистрибутив (архив) и установите (распакуйте) его на Ваш диск. Перейдите в корневую директорию игрового клиента и создайте там .bat-файл с названием start.bat. Он будет необходим для запуска клиента в обход программы автообновления. start system\Game.exe startgame Затем скачайте программу IP Changer, с помощью которой нужно задать игровому клиенту IP-адрес для подключения к серверу. Поместите IPChanger.exe в корневую директорию игрового клиента и запустите. В поля ввода текста "Server Name" (1) и "Server Region" (2) введите название Вашего сервера и регион соответственно. В поле "Server Address" (3) укажите IP-адрес игрового сервера, через который клиент будет к нему подключаться. Выпадающий список "Client Version" оставьте без изменений. Нажмите кнопку "ОК" (4) и после сообщения "Address of server was successfully changed!" закройте программу. Первичная настройка клиента завершена. Для подключения к серверу необходим игровой аккаунт, который можно создать с помощью специальной программы. Скачайте и запустите программу Создать учетную запись. Нажмите кнопку "Настройки" (1) на главной форме приложения. В окне "Настройки" укажите адрес или имя экземпляра Microsoft SQL Server (1), отметьте флажок "Использовать проверку подлинности Windows" и проверьте подключение (3). При успешном подключении к Microsoft SQL Server нажмите кнопку "ОК" (4). Далее введите желаемые логин (2) и пароль (3) для новой учетной записи, а также выберите уровень доступа к системе (4). После заполнения всех полей нажмите кнопку "Создать" (5). Вы увидите сообщение о том, что учетная запись была успешно создана. Запустите игровой клиент с помощью .bat-файла start.bat и подключитесь к серверу используя созданную учетную запись. После успешного входа в учетную запись, создайте нового персонажа и убедитесь что создание персонажей работает исправно. Войдите вновь созданным персонажем в игровой мир. На этом этапе задача установки игрового сервера выполнена, и гайд подходит к своему логическому завершению, но в процессе Вы могли столкнуться с различными ошибками. В следующем разделе будут рассмотрены самые распространенные ошибки сервера и клиента, а также методы их устранения. 9. Распространенные ошибки и их исправление В процессе установки сервера и подключения к игровому миру могут возникнуть различные ошибки. Далее рассмотрим самые распространенные и исправим их. GameServer.exe сразу закрывается после запуска Заполните все данные для подключения к Microsoft SQL Server в конфигурационном файле GameServer.cfg (секция DB). [DB] db_ip = db_usr = db_pass = Ошибки GameServer "Database [GameDB] Connect Failed!", GroupServer "Unable to connect database", AccountServer "Main database handler create failed, AccountServer hang!" Данные ошибки говорят о том, что серверное программное обеспечение (GameServer, GroupServer, AccountServer) не может установить соединение с Microsoft SQL Server и получить доступ к соответствующим базам данных. Возможные пути решения: 1. Проверьте, что Microsoft SQL Server запущен и Вы указали его верный адрес или имя экземпляра в конфигурационных файлах игрового сервера; 2. Проверьте, что в настройках безопасности Microsoft SQL Server Вы включили проверку подлинности SQL Server и Windows и перезапустили после этого SQL Server; 3. Убедитесь, что Вы используете верные логин и пароль пользователей для соответствующей базы данных в конфигурационных файлах игрового сервера. Пользователям баз данных должны быть выданы следующие права: db_datareader, db_datawriter, db_ddladmin, public. Пароли пользователей должны быть указаны в конфигурационных файлах в зашифрованном виде; 4. Убедитесь, что названия баз данных совпадают в Micrososft SQL Server и в конфигурационных файлах сервера, а так же в исполняемом файле GameServer.exe; 5. (Спасибо @MrSharp) Проверьте, что протокол TCP/IP включен для Вашего MSSQL сервера, и включите его, если он отключен: 5.1 Запустите программу SQL Server Configuration Manager: 5.2 В левой части окна программы раскройте список SQL Server Network Configuration и нажмите на Protocols for MSSQLSERVER (1): 5.3 Нажмите правой кнопкой мыши на строке TCP/IP (2) и в контекстном меню выберите Enable: 5.4 В диалоговом окне "Warning" нажмите кнопку ОК: 5.5 Перезапустите MSSQL сервер: Ошибка GameServer "SubMap::LoadNpc: Obtain Map [<название локации>] ID fail!" Данная ошибка может возникнуть в процессе загрузки локаций игрового мира при запуске экземпляра GameServer. Чтобы её исправить откройте файл GameServer\resource\script\MisScript\ScriptDefine.lua и добавьте в конец строку: AddMap("<Кодовое название локации>", "<Игровое название локации>") Например: AddMap("yschurch", "Церковь") Ошибка игрового клиента "Соединение прервано" Такая ошибка возникает в случае, когда игровой клиент не может установить сетевое соединение с сервером. Возможные пути решения: 1. Проверьте, что GateServer запущен. Если Вы подключаетесь к серверу через сеть Интернет, то проверьте доступность GateServer. Внешний порт игрового сервера (по умолчанию 1973) должен быть открыт, а в конфигурационном файле GateServer.cfg должен быть указан соответствующий внешний IP-адрес (0.0.0.0 или адрес выделенного сервера). Внешний IP-адрес сервера должен быть публичным ("белым"); 2. Убедитесь, что игровой клиент настроен на верный адрес игрового сервера: с помощью программы IPChanger (а также иных способов настройки клиента) указан верный IP-адрес GateServer, а в Game.exe "зашит" верный порт GateServer (по умолчанию 1973). Чтобы убедиться в последнем, можно взять Game.exe из официального русского клиента без каких-либо модификаций, либо использовать специальную программу; 3. Соединению клиента с сервером могут препятствовать различные программы-фаерволы, брандмауэр Windows, а также сетевые маршрутизаторы (роутеры), в которых не был проброшен внешний порт GateServer на компьютер с игровым сервером. Ошибка игрового клиента "Account server has encountered a malfunction" Запустите AccountServer и убедитесь что к нему успешно подключился GroupServer. Ошибка игрового клиента "Discovered exceptional line error on GateServer" Запустите GroupServer и убедитесь что к нему успешно подключился GateServer. Ошибка игрового клиента "Неверная версия игры" Убедитесь, что версии в конфигурационном файле GateServer.cfg (секция Main, параметр Version) и в Game.exe совпадают. Обычно в Game.exe "зашита" версия 136. Узнать версию Game.exe можно с помощью специальной программы на нашем форуме. Ошибка игрового клиента "illegal birth place" при создании персонажа Откройте файл игрового клиента Клиент\scripts\table\StringSet.txt и замените строки [39] "Аргент" [40] "Шайтан" [41] "Ледынь" на [39] "Argent City" [40] "Shaitan City" [41] "Icicle Castle" Значения Argent City, Shaitan City и Icicle Castle определяются соответствующими значениями в конфигурационном файле GroupServer.cfg игрового сервера. [bird] Argent City = garner Shaitan City = magicsea Icicle Castle = darkblue Ошибка игрового клиента "target map cannot be reached" при входе в игровой мир Выбранный персонаж находится на локации, которая не запущена на сервере. Запустите все экземпляры GameServer с полным набором локаций и убедитесь, что в каждом служебном окне текущего экземпляра GameServer отображается успешно загруженный список карт игрового мира (список Map List). Если вы столкнулись с проблемой, которой нет в рассмотренном выше списке ошибок, то воспользуйтесь разделом "Пиратия: Помощь", в котором Вам придут на помощь более опытные администраторы и разработчики серверов Пиратии. Также за много лет на нашем форуме накоплен большой пласт опыта Ваших предшественников, поэтому целесообразно воспользоваться поиском по форуму: с большой долей вероятности Ваша проблема уже обсуждалась и решена в прошлом. Благодарю Вас за внимание и надеюсь, что статья действительно была Вам интересна и помогла в установке сервера! Я был рад поделиться с Вами своим опытом. Гайд написал V3ct0r специально для форума PKODev.NET Копирование статьи в том или ином виде на сторонние ресурсы без согласования с автором ЗАПРЕЩЕНО!
  14. 5 points
    У меня родилась дочка Скоро продолжу
  15. 5 points
    Всем привет Мы чутка освободились и наконец-то пришли с новостями. Предисловие: Вот уже 2 года и 10 месяцев как мы находимся в разработке нашего продукта. Смотря сейчас на пройденный нами путь, мы понимаем, что разработка собственной игры, а тем более кроссплатформенной это не самое быстрое занятие и легкое хобби. Из-за желания сделать продукт идеальный, мы совершали ошибки, за которые уже поплатились самым ценным ресурсом человечества - временем. Если бы можно было вернуться в начало нашего пути и дать пару советов, то мы бы сэкономили как минимум целый год. Но не всё так плохо, самое важное что мы получили - это опыт, опыт который считается бесценным для нас. Позвонить разработчику на мобильный номер и будить его, потому что он в процессе спринта проспал начало работы? - Да, это про нас. Уснуть на стуле или на столе в ночное время пока вы решаете, как в этом чертовом MindPower'e реализована система эффектов? - Да и это про нас. Сломать, построить, сломать и ещё раз построить чтобы потом опять сломать? - Да, увы и это про нас. Мы предусматриваем даже неразумные вещи, которые могут произойти с продуктом в процессе его эксплуатации. Больше 5 млн рублей в нашей excel таблице сейчас в расходах, больше чем десятки тысяч коммитов в репозиториях, мы разобрали эту чертову игру на кусочки и собрали её заново, мы даже знаем кому звонить когда ошибка в графическом движке при воспроизведении анимации (поищите в исходниках "crash!!!, call"), мы уже не просто команда, а уже большая семья. Всё это время мы искали ту самую, единственную, верную тропу по которой нам необходимо идти, и мы её нашли. Ну и к чему же мы наконец-то пришли? Клиент: На данный момент мы переписываем весь функционал клиента прописанный в C++ на скриптовой язык LUA. Для чего? Скриптовой язык LUA является простым на наш взгляд, как минимум проще чем C++, средняя стоимость оплаты труда на порядок меньше, разграничение скриптовой логики и логики движка предоставляет куча безопасности, избавляет раз и навсегда от утечек памяти, скорости работы и самое важное - ускоряет процесс разработки. Множество важных элементов игрового и графического движка мы переписали с 0, такие как рендер карты, игровые эффекты, рендер в принципе. Наш девиз - Кара должна запускаться даже на кофемолке © alex2772. Мы помешаны на оптимизации и не позволяем себе потратить лишние 10 миллисекунд в UI потоке, поэтому всё что можно мы стараемся вытащить в другие потоки без частого использования мьютексов. И конечно, мы понимаем, что какой-то наш забугорный клиент может иметь телефон на какой-то 4.x версии android’a с ограниченным количество CPU и предусматриваем это. Хочется отметить важный факт, что мы делаем клиент игры, который способен работать на 1.38 версии клиента, а с некоторыми доработками и на 2.0. И не исключаем возможность тестирования нашего клиента совместно с руководством и игроками существующих серверов по их желанию. CI/CD: Мы очень активно пользуемся технологией CI и CD. Каждый раз когда разработчик делает коммит в репозиторий, то клиент игры автоматически собирается под все платформы и обновляется на всех платформах. Чтобы залить обновление для клиента, нам достаточно 1 коммита. Сервер: GateServer, GroupServer и AccountServer переписали с нуля, GameServer пока фулл рефактор скриптов. Все сервера переписали под CMake и адаптировали под работу в Linux, затянули их под технологию Docker и сразу же под технологию Kubernetes. Lua игрового мира: Все вы знаете, как выглядит легаси код сервера, как в нем не понятно что к чему - все навалено в один файл и покрыто китайскими комментариями с битой кодировкой. А если копнуть дальше, то можно заметить в коде очень много проблем с глобальными переменными, а также все это сопровождается алгоритмическими ошибками. Когда к нам в команду пришел опытный луа-разработчик, он сказал: “это все говно нужно переписывать, как оно работало - я хз”. Теперь у нас ООП в Луа, мы переписываем легаси архитектуры, к примеру вот так сейчас выглядит обычный диалог с НПС. Теперь не нужно продумывать сложную логику из взаимосвязи страниц, даже разработчики с низким уровнем знания lua разбираются с этим быстрее, чем это было раньше. “У вас много магических чисел - магические числа — это плохо”, он не исправил это, но теперь весь код наполнен комментариями по всем магическим числам, по которым можно дать комментарии. Большинство функций, поведение которых не тривиально описаны и задокументированы. Пример: Вы знаете самые нагруженные функции в луа на вашем сервере? Вы знаете, как их найти? Вот и мы тоже не знали, а теперь в нашем арсенале 3 профилировщика, которые покажут нам, где мы просаживаемся по производительности при росте онлайна. А где же мы берем онлайн, у нас на сайте все время 4% нагруженности было… Наш луа код на сервере покрыт комментариями на 90%, а все что можно шаблонизировать - шаблонизировано или продолжает шаблонизироваться: Кстати, на скриншоте можно еще увидеть новое логирование, которое вываливает traceback и систему мультиязычности сервера. Вы знаете сколько игрок прошел заданий и сколько денег он потратил на лечение? Вот и мы тоже не знали, но добавили больше 100 различных метрик, которые можем анализировать и выводить в красивые и информативные графики. Перебалансированные квесты по наградам и уровням. Теперь мы можем решать чем заниматься игрокам на сервере: - прокачка через убийство мобов: повышаем рейты на убийство опыта, понижаем рейты на получение опыта с заданий, - прокачка через историческую цепочку: понижаем рейты за убийство мобов, понижаем опыт за обычные сайд задания, повышаем за историческую цепочку. При всех этих изменениях мы продолжаем поддерживать старую, добрую Пиратию и в любой момент все наши изменения баланса/экономики за 10 минут откатываются обратно, кроме квестов, наверное. Это все благодаря одному конфигурационному файлу, который отвечает за константные переменные, а также за активацию тех или иных систем. Каждой системе отдельный файл, каждой системе отдельный флаг отключения - мы разбили весь луа код из 10-15 файлов в 250+ и это позволяет лучше понимать работу систем, что снижает порог вхождения новых разработчиков. Наш репозиторий сервера насчитывает более 2500 коммитов, свою руку к коду приложило около 20 специалистов, различной направленности. А через наши файлы в целом прошло больше 60 человек: они рисовали иконки и картинки, писали новые задания, рефакторили старый код, писали новые системы, писали музыку и звуки, изменяли карты, страдали и наслаждались результатом. С каждым разом описывая наши достижения мы хотим поделиться всем, но пока мы писали данный пост мы понимаем что всё описать невозможно, по этому оставим тут самые интересные и важные на наш взгляд новости.
  16. 4 points
    Неполадки в работе форума 05.08.2023 - 11.11.2023 Всем привет! К сожалению, форум PKOdev.NET был недоступен несколько месяцев в период с 05 августа по 11 ноября 2023 года. Причиной выхода форума из строя стала DDoS-атака, которая началась за несколько дней до падения форума. Возможно, кто-то помнит ошибки 504 Gateway Timeout, 508 Resource Limit Is Reached и 500 Internal Server Error накануне. Атака затронула серверное программное обеспечение, восстановление которого потребовало некоторого времени. Также была установлена защита от DDoS-атак. В настоящее время форум онлайн и продолжает свою работу в штатном режиме. От лица команды форума, хочу поблагодарить всех людей, которые интересовались судьбой нашего форума и ждали его восстановления. Большое вам спасибо! Приносим извинения за доставленные неудобства! Желаем вам хорошего дня и приятной работы с форумом! P.S. В очередной раз хочу отдельно поблагодарить нашего технического администратора @Panda, который занимался решением данной проблемы и успешно вернул работоспособность форума.
  17. 4 points
    Привет. 1. Берешь клиент из темы - 2. Ищешь файл MpFont.cpp. Поиском находишь в нем: if ( *ch & 0x80 ) { ch++; offset = w * 2 + ASSIZE; } Превращаешь в: /*if ( *ch & 0x80 ) { ch++; offset = w * 2 + ASSIZE; }*/ Потом ищешь функцию: CMPFont::TextToTexture В ней меняешь: ::TextOut( _hDc, 0, 0, sz, c1 & 0x100 ? 2 : 1 ); на: ::TextOut( _hDc, 0, -2, sz, c1 & 0x100 ? 2 : 1 ); Это исправит отображение русского языка, но немного коряво. Он будет выше, чем текст слева (например ник). Это я не помню, где менять. Вспомнил. Ниже в функции CMPFont::FillTextToTex аналогичные действия нужно сделать. И все. Дальше поиграй со шрифтами в /scripts/lua/font.clu и мб где-то поправить ширину/еще что-то (на вкус и цвет).
  18. 4 points
    Anomaly Tower Description: The map "Anomaly" aims to be an instanced map with tower climb like features. The map is fixed, but the difficulty and monsters on each floor are gradually stronger from the previous floor. Every 5th floor will contain an extra monster that will be a mini-boss and every 10th floor will be a boss floor. Players can enter solo or get help as a team, but only the players that are at that floor level will get the floor completion. Those players at the current floor level will be treated as "main" players and have a set of rewards. Those players not at the current floor level will be treated as "support" players and have a different set of rewards. It can be customized how many players can enter the instance at once just in case. The monsters are chosen at random, they are set within a database so all players can expect the same monsters in that specific floor. The floors are refreshed every month. So if new monsters are added to the lists as future updates, they can appear in lower floors when a new months starts. Too lazy to write everything here, so just have some links directly from GitHub. Links: GitHub GitHub: Customization GitHub: Installation -> Client GitHub: Installation -> Server GitHub: Requirements GitHub: Notes GitHub: Release
  19. 4 points
    Pirate Royalty - Unreal Engine 5 Project Goal: to bring over the functionality, gameplay mechanics, and story from Tales of Pirates old game client to Unreal Engine and new server infrastructure with improved game experience & modern technology. This topic will help you see the progress and invite you to share some of your feedback/ideas on how to make the project better. Для русско говоряших - пишите на русском, я вас пойму. Не хотел создавать две темы на двух разных языках. Join Discord channel to get most up to date information and images https://discord.gg/5MPvYeg3T6
  20. 4 points
    Hi all! We all know that certain users in this community tend to spam other discord servers with their ads, which sometimes can be rather annoying. I wish sometimes I had created this bot when I was running my server. Either way, I created a simple python bot that will prevent users from advertising on your server. It is fairly simple and doesn't involve any sort of complex logic. Feel free to modify it as needed, to make it even more challenging for bots, you could perhaps include AI into creating responses (for instance set up chatgpt api calls), which I'm not going to cover today. Introduction The Discord Anti-Advertisement Bot is designed to prevent users from posting advertisements on a Discord server. The bot monitors messages and deletes any content that it identifies as advertising. Additionally, the bot sends a challenge to new members to verify that they are not bots. Features Detects and deletes advertisement messages. Bans users who exceed the maximum number of advertisement violations. Sends a challenge to new members to verify they are not bots. Automatically assigns a "Bots" role to bots when they join the server. Supports customizable command prefix and challenge questions. Bot Permissions To function correctly, the bot requires the following permissions: Read Messages: To monitor messages in the server. Send Messages: To notify users about their violations and send challenge messages. Manage Messages: To delete advertisement messages. Ban Members: To ban users who exceed the maximum number of violations. Kick Members: To kick users who fail the new member challenge. Manage Roles: To assign roles to bots when they join the server. Configuration 1. Create a new bot To create a new bot, follow these steps: Go to the Discord Developer Portal and sign in with your Discord account. Click "New Application" in the top right corner and enter a name for your application. Navigate to the "Bot" tab on the left sidebar and click "Add Bot." Under the "Token" section, click "Copy" to copy the bot token. 2. Set up the code Clone the bot's repository or download the source code, and make sure you have Python installed. git clone https://github.com/bsgeorgi/discord-anti-ad-bot.git Optionally, you can create a virtual environment and execute your code from there: python -m venv venv venv/Scripts/activate Install the required dependencies using the following command: pip install -r requirements.txt 3. Configure the bot Modify config.py file in the same directory as your bot's code. Replace TOKEN with the token you copied in step 1. You can customize the following settings: TOKEN: The bot token. VIOLATIONS_FILE: The JSON file used to store user violations. MAX_VIOLATIONS: The maximum number of advertisement violations before a user is banned. ALLOWED_DOMAINS: A list of domains that will not trigger the bot's advertising detection. challenges: A list of challenge questions for new members. Each question is a tuple containing a string question and a list of acceptable string answers. 4. Start the bot Run the bot with the following command: python bot.py 5. Invite the bot to your server To invite the bot to your server, follow these steps: Go to the Discord Developer Portal and sign in with your Discord account. Click on your application, then navigate to the "OAuth2" tab on the left sidebar. In the "Scopes" section, select "bot." In the "Bot Permissions" section, select the permissions mentioned earlier in this guide. Copy the generated URL from the "Scopes" section and paste it into a new browser tab. Choose the server where you want to add the bot and click "Authorize." Now, your bot should be a member of your server and will start monitoring messages and performing its tasks. Usage Commands The bot currently has one built-in command: !hello: The bot responds with "Hello!". To use this command, type the command in a text channel in your Discord server. New Member Verification When a new member joins the server, the bot will send them a direct message with a challenge question. The new member must answer the question correctly within 30 seconds. If they answer incorrectly or don't respond within the time limit, they will be kicked from the server. They can rejoin and try again. Advertisement Detection and Handling The bot will continuously monitor messages in the server. If it detects a message containing an advertisement, it will delete the message and notify the sender about their violation. If the user reaches the maximum number of violations (configured in config.py), they will be banned from the server. Customization You can further customize the bot by modifying the code or adding new commands. To add new commands, follow the instructions provided earlier in this conversation. To modify the advertisement detection patterns, edit the patterns.txt file in the bot's directory. Advertisement Patterns I will not go into too much detail when it comes to creating regex patterns, please feel free to do your own research. However, I will explain a couple of patterns from the patterns.txt file. In the provided examples, there are two regular expressions: (?:come\s+)?(play|try|join|check\sout|check) my (new|awesome|amazing|incredible) (game|app|server) This regular expression is composed of several components: (?:come\s+)?: The (?: ... ) is a non-capturing group. It allows you to apply quantifiers to part of your regex without capturing the matched text. In this case, the ? quantifier means the group can occur 0 or 1 times. \s+ represents one or more whitespace characters. So, this part of the regex matches an optional "come" followed by at least one whitespace character. (play|try|join|check\sout|check): This is a capturing group, and the | symbol is an "or" operator, meaning any of the alternatives inside the group can be matched. In this case, the regex will match "play," "try," "join," "check out," or "check." my: Matches the literal string "my." (new|awesome|amazing|incredible): Another capturing group, this time matching any of the adjectives: "new," "awesome," "amazing," or "incredible." (game|app|server): The final capturing group matches one of the following words: "game," "app," or "server." https?://(www\.)?discord\.(?:gg|com/invite)/[^\s]+ This regex is designed to match Discord invite links: https?://: Matches the literal string "http://" or "https://" (the ? makes the "s" optional). (www\.)?: Matches an optional "www." string, with the ? making it optional. discord\.: Matches the literal string "discord." (the backslash is used to escape the dot, as it has a special meaning in regex). (?:gg|com/invite): A non-capturing group that matches either "gg" or "com/invite". /: Matches the literal forward slash character. [^\s]+: The square brackets [] denote a character class, and the ^ symbol inside the brackets negates the class. So, [^\s] means any character that is not a whitespace character. The + quantifier means one or more occurrences of the non-whitespace character. These regular expressions are used in the bot to detect specific patterns related to advertising and can be customized by modifying the patterns.txt file in the bot's directory. Good luck and hope this helps!
  21. 4 points
    [Tweak] Screenshots in one folder Hello friends! In this thread, I want to talk about a small client tweak that will allow you to save screenshots of the gameplay directly in the "screenshot" folder. Originally, the client creates screenshots in the "screenshot\1", "screenshot\2", "screenshot\3" ... "screenshot\N" subfolders, which may not be very convenient for searching and viewing screenshots. Actually, the participant of our forum @dragontechi faced this problem: To fix this inconvenience of storing screenshots, you need to make the following changes to the client: 1) Open the game engine DLL "MindPower3D_D8R.dll" (located in the "system" folder) in any HEX editor, for example, in HxD; 2) Search for the line: screenshot\%d\ and replace it with the following: screenshot\%d_ 3) Next, find the sequence of bytes: E8 83 2C F9 FF and replace them with: 90 90 90 90 90 4) Now find the bytes: C7 85 74 FF FF FF 00 00 00 00 B8 01 00 00 00 85 C0 74 53 8B 85 74 FF FF FF 50 and replace them with: 6A 00 E8 84 E9 16 00 83 C4 04 50 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 5) Save the changes made in the file "MindPower3D_D8R.dll". The result will be the following: All screenshots are now stored in the same "screenshot" folder. Additionally, the title of each screenshot contains the timestamp when it was created (in the context of the time of the operating system on which the client was running at the time the screenshot was created). Thank you for attention!
  22. 4 points
    Приватный фан сервер игры Пиратия Онлайн Название сервера: Pride Pirates Тип сервера: Фан сервер Время сервера: Московское Наш сайт Наш форум Мы Вконтакте Рейты сервера: На сервере есть НПС Качер до 100 уровня После 100 уровня повышение уровня в Кач зоне Так же на сервере имеется НПС Голдер Рост феи х1000 Дроп х10 Максимальный уровень персонажа 120 LvL Максимальный уровень заточки 140% Максимальный уровень феи 150 LvL Умная фея работает Максимальные статы: Сила - 100 Ловкость - 100 Точность - 100 Телосложение - 100 Дух - 120 Самоцветы: +5 ,+10 ,+15 Самоцветы куются в кольца и бижутерию Ансилы: Кайлин сет (Начальный) Сет Анубиса (100 уровень) Сет Барборосы (120 уровень) 95 Оружие (Начальное) Оружие Анубиса (100 уровень) Оружие Барборосы (120 уровень) 70 Кольца 10\10\10 (Начальные) Кольца Анубиса (100 уровень) Кольца Барборосы (120 уровень) Vip Бижутерия 1,2,3 LvL Локации: [New] Стартовая локация Порт Ройял Серебряный Хаос Снежная Война Остров Дракона Мир Демонов Абаддон 5-8 Абаддон 10-17 База Флота Остров Скелетов Край Авроры 1-2 Край Тьмы 1-2 Кач Зона Баунти Нововведения: Новая Стартовая Локация Новые PvP Локации Новые Аппарели Новые Боссы Рабочие Питомцы Уникальная VIP Система Система Расписок Самоцветов Остальное увидите в игре!
  23. 4 points
    Редактор ItemInfo Добрый вечер, дорогие товарищи. Написал небольшой редактор ItemInfo. Вид программы: LINK Разархивируйте все содержимое архива в Вашу папку resource. Папку icon доставать необязательно, но без неё не будут отображаться иконки. Также, если вы хотите добавить свои, но они зашифрованы, используйте ДАННУЮ ПРОГРАММУ. P.S. Приветствую пожелания/баги/критику))
  24. 4 points
  25. 4 points
    Давно что то ни чего не выкладывал из своих зарисовок . Хочу предоставить стиль кузнеца.Данный стиль еще дорабатывается. Но хочу узнать ваше мнение как вам такой вид. Скрин смазаный но в клиенте намного четко
  26. 4 points
    Well. I have been working on the design of the new characters for my project, and I wanted to see the opinion of others What do you think? is the height correct? Is the design okay? Look at some pictures Bueno. He estado trabajando en el diseño de los nuevos personajes para mi proyecto, y queria ver la opinion de los demas ¿Qué piensas? la altura es correcta? ¿Está bien el diseño? mira algunas fotos
  27. 4 points
    [Мод] Панель побежденных персонажей Мод добавляет в игру панель побежденных персонажей, по аналогии с FPS-играми по типу Counter-Strike, Call of Duty, Battlefield и других. Некоторые особенности мода: 1) Панель представляет собой список из записей вида: [Имя персонажа-победителя] [Иконка умения или оружия, которым нанесено поражение] [Имя побежденного персонажа] (см. скриншот выше); 2) Имена персонажей-победителя и побежденного выделяются цветом в зависимости от степени дружественности по отношению к персонажу игрока: зеленый цвет - союзник, красный цвет - враг; 3) Панель можно кастомизировать. Процесс кастомизиации будет рассмотрен далее. Требования Установленный Загрузчик модов для сервера и клиента (PKOdev.NET mod loader). Информация о моде Название: pkodev.mod.defeated; Версия: 1.0; Автор: V3ct0r; Тип: для клиента (Game.exe) и сервера (GameServer.exe); Поддерживаемые исполняемые .exe файлы: GAME_13X_0, GAME_13X_1, GAME_13X_2, GAME_13X_3, GAME_13X_4, GAME_13X_5, GAMESERVER_136 и GAMESERVER_138. Установка 1. Сервер 1.1 Поместите файл DLL-библиотеки мода "pkodev.mod.defeated.server.<VERSION>.dll" для Вашей версии GameServer.exe и файл настроек "pkodev.mod.defeated.json" (v1.0.0-server) в папку "GameServer\mods\pkodev.mod.defeated"; 1.2 Откройте файл настроек мода "GameServer\mods\pkodev.mod.defeated\pkodev.mod.defeated.json" в любом текстовом редакторе и запишите в него список карт (данжей), на которых будет действовать мод: { "maps" : [ "garner", "magicsea", "darkblue" ] } 2. Клиент 2.1 Поместите файл DLL-библиотеки мода "pkodev.mod.defeated.client.13x_<ID>.dll" для Вашей версии Game.exe и файл настроек "pkodev.mod.defeated.json" (v1.0.0-client) в папку "Клиент\mods\pkodev.mod.defeated" игрового клиента; 2.2 Откройте файл настроек мода "Клиент\mods\pkodev.mod.defeated\pkodev.mod.defeated.json" в любом текстовом редакторе и запишите в него требуемые параметры: { "debug":false, "hideTime":5000, "maxItems":5, "itemStep":24, "pos":{ "x":460, "y":8 }, "align": { "x":"right", "y":"top" } } debug - режим отладки. true - включен, false - выключен; hideTime - время в миллисекундах, после которого очередная запись на панели будет скрыта; maxItem - максимальное число записей на панели; itemStep - вертикальный шаг между записями в пикселях; pos - координаты (X, Y) панели; align - параметр задает относительность координат (X, Y) панели. Для X: left - координата будет отсчитываться относительного левого края окна клиента, right - относительно правого края. Для Y: top - координата будет отсчитываться относительно верхнего края окна клиента, bottom - относительно нижнего края. Для настройки положения панели удобно включить режим отладки ("debug":true). В таком случае на заданных координатах (X, Y) появится панель в рамке, отображающей максимальные размеры панели: Скачать 1) Бинарные файлы мода (.dll) и файл настроек (.json) для сервера (GameServer.exe); 2) Бинарные файлы мода (.dll) и файл настроек (.json) для клиента (Game.exe); 3) Исходный код мода для Visual Studio 2022 Community (C++). Если Вы столкнулись с какой-либо проблемой, багом или у Вас возникли вопросы, то пишите в данной теме.
  28. 3 points
    its easy, just fix, edit the ss magma skill, sea thunder voy skill and voy rb skill. the bug happens because you re able to use those skill before their effects gone. and this breaks the respaw cycle
  29. 3 points
    @Merlini This is the naming for ToP versions. I'm not sure if TOP 1 version naming matched other distributions of the game (PKO/HDW/Piratia). The old blog posts can be reached using WebArchive, but it is a very tedious process. It would be nice to have a full changelog between those versions.
  30. 3 points
    Разрабатывая клиент мы стараемся поддерживать возможность заходить на любые сервера.
  31. 3 points
    TOP Editor Hello everyone. I'm creating a topic for running a small ChangeLog (maybe it's illegal =)). The essence of the program is as follows: Reading any txt file, table format (CharacterInfo, ItemInfo, etc.) and editing it. Type of program at the time of writing the post: P.S. Criticism and suggestions are welcome. P.S. Translate with google translate))
  32. 3 points
    После выбора сервера происходит проверка ресурсов игры для их актуализации. У каждого сервера могут быть свои ресурсы, по этому мы можем дать возможность играть на любом другом проекте в индустрии! Выбор региона происходит автоматически по лучшему показателю пинга.
  33. 3 points
    Новости разработки и другие интересные фишки в нашем Телеграм канале
  34. 3 points
    Приветствую, уважаемый читатель и фанат данного форума. В каждом проекте, который создается в мире Пиратии Онлайн, наступает момент, когда небольшая команда (из одного, двух людей) сталкиваются с определенными трудностями в развитии своей сборки. Каждый из тех, кто дает жить нашей любимой всеми игре, создавая сборки, когда-то обжигался и закрывал свой проект. И бывает так, что проект имел хороший потенциал для развития. Но вся соль этих проблем сводится с нежеланием вкладывать душу (читайте финансы) в развитие проекта. Мы, команда GoldElement, очень хотим составить здоровую конкуренцию другим проектам. И на текущий момент, мы ищем к себе в команду сценариста. Под сценаристом мы имеем в виду Нарративного дизайнера. Нарративный Дизайнер должен будет следить за тем, чтобы ключевые элементы игрового опыта, связанные с историей и повествовательными механиками, сценарием и речью были динамичными, интересными и убедительными. Простыми словами: нужен человек, который будет прописывать куда дальше идти игроку с момента создания персонажа и что ему нужно делать периодически (ходить в подземелья, где бить гемы, и др.). Выгода: бабки. Объем работы: нужно провести ревизию того, что сейчас есть и дальше расписать сюжет. Сайт: goldelement.online Задача не простая, будем много общаться, много думать, много делать. Благо у нас руки растут из правильного места. Какая выгода от этого вам? Обсудим индивидуально. Может кто захочет на ставку, кто на долю. Писать можете в Telegram @abukab либо тут на форуме. Let's make PKO GREAT again!
  35. 3 points
    Так же добавлю от себя, что будем потихоньку заниматься рефакторингом lua скриптов
  36. 3 points
    Hello everyone, in next hour I will start stream All links in discord - https://discord.gg/V8xWHJ9H Telegram is done for the project cause discord more suitable
  37. 3 points
    [Новость] Проект по разработке Пиратии на движке Unity3D ("Top Mobile") Всем привет! В этой новости я хочу вам рассказать о существовании проекта по портированию Пиратии на игровой движок Unity3D - Top Mobile. Как сообщил владелец данного проекта, участник нашего форума @UnityDev, работа практически завершена: реализованы все основные игровые системы и проведено их тестирование, но сейчас стоит трудоемкая задача по воссозданию игровых локаций. Собственно, @UnityDev и обратился к нашему сообществу с целью поиска людей, которые помогут ему c этой задачей. Поэтому, если Вам интересен проект и у Вас есть некоторый опыт работы с движком Unity3D, то свяжитесь (на английском языке) с @UnityDev в Discord: MiniMan#9579 У проекта есть YouTube-канал, на котором выкладываются видео-ролики с демонстрацией работы клиента на новом движке: На первом видео можно увидеть знакомые локации - Аргент и остров Арены. Демонстрируется PvP между Стрелком и Воителем. Можно заметить элементы графического интерфейса пользователя (характеристики персонажа, инвентарь, элементы управления для тач-скрина). В конце видео показана работа чата. На втором видео демонстрируется процесс прохождения квеста в локации Серебряные шахты, целью которого является охота на местных обитателей - Кротов, Летучих мышей и Грязевых монстров. Здесь также появляются новые элементы GUI - аватарка с ЖЗ и МН персонажа игрока и миникарта. Судя по характерному свечению, в оружие игрока вставлены самоцветы. В конце видео мы видим фонтан Ледыни. Небольшое интервью с @UnityDev: V3ct0r: Привет и добро пожаловать на наш форум! Если ты не против, то я хотел бы задать тебе несколько вопросов. UnityDev: Привет, V3ct0r. V3ct0r: Ты один работаешь над проектом или у тебя есть команда? UnityDev: В основном работаю один, но я нанимал много профессиональных разработчиков, чтобы помочь мне с проектом. Так же я единственный владелец проекта. V3ct0r: Как долго ты трудишься над проектом? UnityDev: На самом деле, это уже мой второй проект Пиратии на движке Unity3D. Для прошлого проекта я нанял кое-кого из сообщества Пиратии, но у нас были некоторые проблемы и я решил закрыть проект. Это было два года назад. С тех пор я начал этот проект [о котором идет речь в новости]. Как говорится, мы учимся на ошибках, поэтому этот новый проект должен быть лучше. V3ct0r: Какие программы вы использовали чтобы извлечь ресурсы [модели, анимации, текстуры] из оригинального клиента игры? UnityDev: Мы использовали 3D max и Blender. V3ct0r: Насколько я понимаю, у тебя есть сервер и клиент поддерживает мультиплеер. Твой клиент на движке Unity3D совместим с оригинальными серверными файлами или твой сервер это отдельная разработка? UnityDev: Да, сначала я думал над тем, чтобы сделать клиент совместимым с оригинальными серверными файлами, но потом я решил отказаться от этой идеи, поскольку оригинальные серверные файлы имеют [уязвимости] кучу эксплоитов и неизвестных бэкдоров. Поэтому я решил сделать свой сервер. V3ct0r: Ты профессиональный разработчик игр или это твое хобби? UnityDev: Я не могу сказать что я профессиональный разработчик, но я много работал с движком Unity3D и хорошо его знаю. Иногда я прибегаю к помощи других разработчиков на платной основе, когда сталкиваюсь с проблемами, которые не могу решить самостоятельно. V3ct0r: Это будет приватная разработка или ты выложишь проект в открытый доступ? Планируешь ли ты запускать сервер, основанный на результатах данного проекта? UnityDev: Я выложу свою работу в открытый доступ. Конечно, я планирую запускать сервер. V3ct0r: Как ты думаешь, сколько тебе еще понадобится времени, чтобы зарелизить проект? UnityDev: О том, сколько времени это займет, ну, на самом деле, я уже могу выпустить бета-версию. Игровые системы закончены и протестированы. Мы уже провели много тестов, и все работает идеально. Все что осталось сделать - это карты [игровые локации]. Как ты знаешь, в Unity3D нужно создавать локации с нуля, а это занимает некоторое время. V3ct0r: Кстати, мы с другом тоже когда-то пытались портировать Пиратию на движок Unity3D UnityDev: Да, я давно видел ваш проект. Вы отлично поработали, но я не понимаю почему вы не продолжили над ним работать. V3ct0r: Благодарю тебя за ответы на мои вопросы! Если ты не против, я создам новость о твоем проекте, чтобы его могло заметить все сообщество Пиратии. UnityDev: О да, это было бы круто, спасибо! Благодарю за внимание, надеюсь, Вам было интересно! В свою очередь, я рад поддержать данный проект таким способом и желаю ему развития и удачи!
  38. 3 points
  39. 3 points
    this small function built in inside client to generate .atr file for server side from client itself as yammi had warring says so better do it from client maybe? go for client source/src/main.cpp include in header : #include "TerrainAttrib.h" Search for : below or above that function add: if (strParam.find("attr") != -1) { char* pszPos = lpCmdLine; pszPos += 4; while (*pszPos == ' ') { pszPos++; } if (createAttribFile(pszPos, 0, 0)) LG("ok", "Generated %s.atr Successfully ", pszPos); else LG("ok", "Failed to Create %s.atr", pszPos); return 0; } now call it like this: start system/Game.exe attr garner .atr will be generated inside map/ p.s: if someone want to do something for .blk would be good guess its come from zrblock tile but as loading the class inside util2.h or maybe i will do later: &done&
  40. 3 points
    Привет, @NoWinFate! Предлагаю хотя бы немного уважать других разработчиков. Не у всех есть 18+ лет опыта разработки, но, тем не менее, они пытались хоть что-то сделать и поделиться этим с сообществом. Кроме того, в частности команда Corsairs Online где-то нашла исходники версии 1.3x (с которыми ты сейчас работаешь), сделала на их основе много интересных фичей с точки зрения геймплея и закрыла ряд известных уязвимостей, после чего они выложили это все в открытый доступ. Ранее я упоминал, что качество исходного кода низкое. Тебя никто не заставляет заниматься его рефакторингом, поэтому видеть комментарии про "горящую жопу" или "анального клоуна", как минимум, странно. ИМХО, с твоей стороны было бы более конструктивно давать комментарии относительно исходного кода, а не его авторов: почему такое-то решение плохое и как нужно сделать правильно. Лично мне было бы интересно почитать именно такие комментарии от опытного разработчика, а не в духе: "я могу лучше".
  41. 3 points
    Всем доброго дня! Узнал недавно - что некоторые умельцы, продают даже эту обвязку. Решил выложить в шару. Рабочий им с Робо - кассой. Остальное сами проверяйте, не знаю. Всем мир! Ссылка
  42. 3 points
    https://gitlab.com/deguix/top-recode/-/commit/f31d6332dbbb9098601fa3f08b3fd0472cf35139 @Perseus fixed that a year ago, take a look to this repo, of top recode .
  43. 3 points
    1. Адмирал Аргента с этого дня решил награждать каждого Пирата за вклад в защиту города. С рассветом солнца следующего дня награда ждет каждого Пирата. [Система ежедневных наград] 2. Жадный торговец на складе вскрыл залежавшийся сундук. Открыв его, обнаружил там модификаторы для Пиратов. [Модификаторы возвращаем в НПС "Жадный торговец"] 3. Портной Аргента, проснувшись утром в хорошем настроении, решил увеличить вместимость рюкзаков Пиратов. [Увеличение количества стакуемых предметов] 4. В тяжелых походах Пираты возвращались с вестью, что неведомые силы мешали биться с Черным Драконом. [Введен новый антибот. Без капчи] 5. С восходом Солнца кольца у Пиратов стали обретать небывалую мощь. [Теперь можно вытаскивать самоцветы из колец] 6. Богиня Кара, ставя опыты на зельях, после череды неудач разгневалась на Мастеров Печати и наложила на них проклятие. [Исправлены небольшие ошибки в способностях СМ] 7. Но как только у Богини Кары получилось создать уникальное зелье раздвоения, она решила отметить это и закляла всех монстров мира Пиратии. [Двойные рейты на дроп на выходные, в игру введено уникальное зелье, с которого можно раздвоить предметы из Боссов] 8. С каждым днем Пираты обретали силу Авроры, стойкость Скелетов, ловкость Громоградского вождя, дух Шайтана и меткость Бронекраба. [Прокачка статов зажатой кнопкой] 9. НПС Капитан Земленямс нашел способ создавать Ключ БД из других ключей ХС. [Альтернативный способ добычи ключа БД] 10. Посол Громограда смог достичь договоренности с Адмиралом Аргента и теперь торговля между двумя крупными городами будет проходить без бюрократических проволочек. [Система оффлайн ларьков] Сервер работает! Все на абордаж!
  44. 3 points
    [Ru/En]Generate monster_conf View: Eng Ru LINK ChangeLog: P.S. For use program, need - Net Framework 4.7.2. v1.1 Added a comment by ID. v1.2 Added a comment on CharacterInfo. To use, put your CharacterInfo.txt . v1.3 Added multilingualism; v1.4 Added copying information from TextBox, distance between monsters. Fixed a couple of bugs that caused the program to break. v1.5 1. Added check for empty fields; 2. Added a check for coordinates (x1 should be less than x2 and y1 should be less than y2); 3. Fixed one bug, thanks to one of the server administrators; 4. Removed the Comment checkbox; 5. Changed the background color.
  45. 3 points
    [RU] Ссылка обновлена. v1.4 Добавил копирование информации с TextBox, дистанцию между монстрами. Исправил пару багов, из-за которых ломалась программа. [EN] Link updated! v1.4 Added "can copy" info from TextBox. Added distance between monsters and fix some bugs.
  46. 3 points
    [HEX] Вытаскиваем самоцветы из колец и ожерелий Открываем Game.exe и ищем строку: Зеленый цвет - тип предмета Красным выделил как раз 25 и 26 - т.е. кольца и ожерелья. Ну и итог: 00 - можно вытащить самоцвет 01 - нельзя вытащить самоцвет
  47. 3 points
  48. 3 points
    Привет, @Graf! 1) Добавить создание новых предметов и удаление существующих; 2) Действия (Чинить, Передать, Удалить и др.) заменить на чекбоксы (CheckBox); 3) Расу, Классы, Слоты и подобные поля заменить на чекбоксы; 4) Поля, которые предполагают поле допуска, например, бонусы, разбить на два поля: мин. и макс.;
  49. 3 points
    Воскресенье == 0.
  50. 3 points
    On a side note. A couple of mods. I’ve been using the binaries you provided for client and game server. Is there a way to add mods for functions like these? HandleChat GetPlayerByName Apparel GameServer and Client see apparels only being in between ID 5000 - 7000, so maybe change it so they can be at any ID and recognized by their durability (by setting it to 25K within ItemInfo?). Change Lua version from 5.0 to a newer version, I think latest stable version is 5.4.4 Edited.
  • Newsletter

    Want to keep up to date with all our latest news and information?
    Sign Up
×
×
  • Create New...