Leaderboard
Popular Content
Showing content with the highest reputation since 03/03/2016 in Posts
-
28 pointsThe source code is available! Dear PkoDev.Net community members, Today we are releasing TOP/PKO source codes and it means that they will be available to everyone. I'd really want to thank our friendly and cohesive community for helping us in the fundraising event. Thank you for your help! I wish you best of luck in the studying process and I hope they will help us to make the game better! Congratulations! Special thanks to: RU: ZEST Online Team (@e1mer), World of Chaos Team (@NMS3RR), Mordo Online Team, @Chad, @insider, @V1tor, @Chudik, @BotPRO, @BETEP/macs509, @lyon, @Am*n9ma (Pastuh). EN: @KONG, @Wrexor, @Yudha, @Jones, @Andy, @Foxseiz, @Andrew, @Lucky, @Sea King, @DevMorgan, @LazyKid, @Sultan, @TheLegend, @Onioni, @7n6, @GustavoHMA, @Xeon, @Ishcurry. Soon you'll see different kind of tutorials regarding work with the source code (code modifications, explanation). You can get link to download the source code from attachment (Source Code.txt)
-
25 pointsMaybe you know what GameDB.character.skillbag field have 36 slots for fastpanel anchors. But in Game.exe you can use only 16 (by default F1-F8 x2 states) or 24 (with fastfrm plugin F1-F12 x2 states) slots. Now I'll show a few tricks which allow to expand functionality of the fastpanel. This is tested in version 1.3x and should also work in version 2.x. Open the Game.exe in HEX-editor to make changes. Yes all tricks only client-side. Trick 1. Enable third state Find 83 FD 02 56 57 8B D9 7C 04 33 ED EB 09 85 ED 7D Replace with 83 FD 03 56 57 8B D9 7C 04 33 ED EB 09 85 ED 7D Now you can switch 3 states instead of 2 and fill up all 36 slots. Trick 2. Enable F10-F11 keys Compatible with the trick 1 Find 83 FF 08 7F 3A 83 3D D0 A2 66 00 FF 75 31 8B 86 Replace with 83 FF 0A 7F 3A 83 3D D0 A2 66 00 FF 75 31 8B 86 Trick 3. Enable F10-F12 keys Compatible with the trick 1 Find 83 FF 08 7F 3A 83 3D D0 A2 66 00 FF 75 31 8B 86 Replace with 83 FF 0B 7F 3A 83 3D D0 A2 66 00 FF 75 31 8B 86 Trick 4. Enable Tab key for switch panel states Compatible with the tricks 1, 2, 3 Find 83 FF 7B 74 60 81 FF DD 00 00 00 75 0D 6A 11 FF Replace with 83 FF 09 74 60 81 FF DD 00 00 00 75 0D 6A 11 FF Trick 5. Make two panels for 18 slots (F1-F12 + 6 clickable slots) Use trick 3 and 4 for enable F1-F12 keys and Tab key for switch panels Find 83 FF 0C 72 9B BB 0C 00 00 00 8D 9B 00 00 00 00 Replace with 83 FF 12 72 9B BB 12 00 00 00 8D 9B 00 00 00 00 Find 83 FD 0C 0F 82 77 FF FF FF 83 C3 0C 83 FB 24 0F Replace with 83 FD 12 0F 82 77 FF FF FF 83 C3 12 83 FB 24 0F Find 8D 7E 0C 3B F7 7D 1E 8B 83 18 07 00 00 8B 0C B0 Replace with 8D 7E 12 3B F7 7D 1E 8B 83 18 07 00 00 8B 0C B0 Find 00 7C DD 8D 74 6D 00 C1 E6 02 8D 7E Replace with 00 7C DD 8D 74 ED 00 C1 E6 01 8D 7E Find 8D 0C 40 8D 04 8F 8B 04 82 85 C0 74 18 8B 80 98 Replace with 8D 0C C0 8D 04 4F 8B 04 82 85 C0 74 18 8B 80 98 Find B9 0C 00 00 00 F7 F9 33 C0 89 44 24 0D 89 44 24 Replace with B9 12 00 00 00 F7 F9 33 C0 89 44 24 0D 89 44 24 Open scripts/lua/forms/main.clu and replace with frmFast = UI_CreateForm( "frmFast", FALSE, 432, 82, 290, 557, TRUE, FALSE ) --UI_FormSetHotKey( frmFast, ALT_KEY, HOTKEY_T ) UI_ShowForm( frmFast, TRUE ) UI_SetFormStyle( frmFast, 7 ) UI_AddFormToTemplete( frmFast, FORM_MAIN ) UI_SetIsDrag( frmFast, TRUE ) UI_FormSetIsEscClose( frmFast, FALSE ) imgMain1 = UI_CreateCompent( frmFast, IMAGE_TYPE, "imgMain1", 432, 82, 0, 0 ) UI_LoadImage( imgMain1, "texture/ui/frmfast18.tga", NORMAL, 432, 82, 0, 0 ) fscMainF0 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF0", 32, 32, 5, 44 ) fscMainF1 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF1", 32, 32, 39, 44 ) fscMainF2 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF2", 32, 32, 73, 44 ) fscMainF3 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF3", 32, 32, 107, 44 ) fscMainF4 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF4", 32, 32, 141, 44 ) fscMainF5 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF5", 32, 32, 175, 44 ) fscMainF6 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF6", 32, 32, 209, 44 ) fscMainF7 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF7", 32, 32, 243, 44 ) fscMainF8 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF8", 32, 32, 277, 44 ) fscMainF9 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF9", 32, 32, 311, 44 ) fscMainF10 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF10", 32, 32, 345, 44 ) fscMainF11 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF11", 32, 32, 379, 44 ) fscMainF12 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF12", 32, 32, 107, 5 ) fscMainF13 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF13", 32, 32, 141, 5 ) fscMainF14 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF14", 32, 32, 175, 5 ) fscMainF15 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF15", 32, 32, 209, 5 ) fscMainF16 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF16", 32, 32, 243, 5 ) fscMainF17 = UI_CreateCompent( frmFast, FAST_COMMANG_TYPE, "fscMainF17", 32, 32, 277, 5 ) btnFastUp = UI_CreateCompent( frmFast, BUTTON_TYPE, "btnFastUp", 7, 8, 417, 12 + 39 ) UI_LoadButtonImage( btnFastUp, "texture/ui/Nbotton.tga", 7, 8, 82, 2, TRUE ) UI_SetHint( btnFastUp, "Next (Ctrl+[, Ctrl+], Tab)" ) btnFastDown = UI_CreateCompent( frmFast, BUTTON_TYPE, "btnFastDown", 7, 8, 417, 22 + 39 ) UI_LoadButtonImage( btnFastDown, "texture/ui/Nbotton.tga", 7, 8, 82, 12, TRUE ) UI_SetHint( btnFastDown, "Next (Ctrl+[, Ctrl+], Tab)" ) Download frmfast18.tga from https://drive.google.com/open?id=0B-nyWqNUUQcBc0NKNHkzd3VhWm8 and put it in texture/ui folder Thats all. Enjoy!
-
25 pointsHello I've been working on a small project to create a better version of our beloved pkoSite. It's still a work in progress but just in case anyone wants to use it and help around with testing or whatever, I'm releasing a minimal version to the public. This version includes Register Login Downloads News Admin panel for both downloads and news I'll update it to include more things such as: Ranking Item Mall Credit Mall IMP Auction Credit Auction Wheel of Fortune Admin panel Logging system ( log all actions performed by admins ) If you have any feature you want , you can let me know in the comments, I'll be happy to add that! I've used the latest database libraries ( SQLSRV ) and laravel as the framework. You'll be able to run this in the latest version of any webserver you want. You can obtain the site from here. Installation guide: First off, you need SQLSRV drivers. Find out what version of PHP you're running and then download those drivers from here. Most of your webservers have thread safety enabled so you're going to want to use the _ts dll files. Take the sqlsrv pdo DLL and the normal sqlsrv dll and put them into your php( this folder will be in your webserver folder. For xampp users -> xampp/php.) -> ext folder. Now, open your php.ini which you'll find in your php folder. Search for "extension=php_" and you should come across something like this. as you can see at the end, I have the sqlsrv dlls added. Do the same for your php.ini file. Now, go here and scroll down till you see this : download the ODBC driver that corresponds to the sqlsrv driver versions you download and install them. That's all for the SQLSRV part. Now, depending on whether you just want to mess around with the website or you want to put it up for production, you have two options. You start a temporary server using artisan (it'll work on the port 8080 and won't interfere with your website) You can edit your HTTPD.CONF file to direct it to the website's public folder and the website will run directly from your browser by going to localhost or your website name. ( WARNING : No other folders on your webserver will be accessible to you if you use this method, i.e, you won't be able to use another site like http://localhost/site2. It won't work.). If you want to go the first route, open your command prompt. Direct yourself to the webserver directory and type in php artisan serve This'll start a server on the 8080 port and you can use the website as you wish. If you want to go the second route, go to your apache folder, and open the httpd.conf file. It should be in the conf folder. Search for the DocumentRoot. It'll be something like this : As you can see I've already changed my document root to the directory that my website is in. Do the same. That does it for the webserver/sqlsrv configuration. Now, adding your database configurations to the website. In the root of the website, there's a file called .env.example. Open the file. Most of the configs are self-explanatory. Change the SITE_INFO_DB_FILE to wherever you've stored your website. Go to google and check their RECAPTCHA page to obtain your RECAPTCHA PUBLIC and PRIVATE keys and just stuff those in the respective fields. IMPORTANT STEP HERE You have to remove the .example part from the .env file, i.e open your word editor and click "save as", choose the "all files" option and remove the .example from the end of the name, so the file is just called .env Open your command prompt, direct yourself to the website directory and type in php artisan key:generate This'll generate a key specific to your website. Go to the database folder(topSite/database/) and just create an empty "SiteInfo.sqlite" file. Run php artisan migrate --database=SiteInfo --path=database/migrations/SiteInfo php artisan migrate --database=GameDB --path=database/migrations/GameDB And you're done! If you want to change the title of the site or whatever, you can find the website's name in the config->app.php file. Let me know if there are any issues, I'll fix them as soon as I can. Some screenshots from the website
-
19 pointsI'll be making a guide on how to create your own custom quests. I'll be going through the simple ones and maybe add a few conditions there. Enjoy. Simple Quest Part I Collect an item, able to repeat after finishing. Simple Quest Part II Making the players kill monster within the quest. Simple Quest Part III Now we will add the option to make the quest a non-repeatable one. Simple Quest Part IV Make the quest available only after completing another quest. Simple Quest Part V Make the quest available for certain levels. Simple Quest Part VI Make the quest available to certain classes. This is everything needed to make a simple quest.
-
16 points
-
16 pointsHello friends! There have been changes in the system of user groups: 1) "Moderators" group is returned. The forum is currently recruiting moderators; 2) "Community" group no longer has moderation rights. User groups have been updated: Moderators These guys are keeping order on the forum: @Snowfall, @Dan, @patrick13. Server administrator They are currently have game projects and thanks to them our game lives on: @Faller, @estrangulador, @Fisal Moha, @Phai, @Sultan, @Hard Wood, @xEvo7, @emofc, @Дракан, @Buccaneers Online, @V1k1NGO, @noanshadow, @luamaster, @Pirate X-Z, @NobleNutz, @[email protected], @Kraken Online, @Awatawa, @K1D0, @Chudik, @Kara Online, @HappinessMAPKO, @Tempest, @Vehd, @kiberhack, @Dimasik, @jordan. Community Made a great contribution to the development of the forum and the community as a whole: @Graf, @BETEP/macs509, @Fomin, @NMS3RR, @1g0rS1lv4, @small666, @yagura2k, @Snre3n, @wolfenx, @Duduf, @Angelix, @aleksandr, @mkhzaleh, @Lua, @patrick13, @Danny, @Eviles, @Greaux, @Engrain, @GustavoHMA, @cpworkerz, @xSeth, @e1mer, @Tera, @Kovu, @Spidpex, @Madwizard, @DangThao, @Ximboliex, @Jap, @Totoka, @Billy, @Foxseiz, @Rinor, @Vasil, @FapFap, @Shako, @blazi10, @Lucky, @Darling, @Home, @Nobre, @Jones, @Onioni, @OldHero, @Anthoni, @x3w0r, @flamyman1412, @BlackBarba, @J0k3r, @iZae, @RedMAN, @saa0d, @DevMorgan, @Knight, @XXD, @Xeon, @Wrexor, @deguix, @Blanquitoh, @mangojkee, @Gamez Pirates, @Masuka00, @Silfro, @MonkeyCode. Thank you for attention!
-
15 pointsTales of Pirates Services Hello friends! I have extensive experience in working with the server and client of our game - Tales of Pirates, also am engaged in programming in C/C++. I provide the following services: Setting up the server; Fixing bugs and holes; Adding functionality to the .exe files (patching / hexing); Writing scripts of varying complexity; Writing programs for the server and the client (launchers, autoupdaters, administration, etc.); Server protection against SQL-injections, WPE/RPE and other vulnerabilities; Writing PHP-scripts. Examples of work: 1) Server protection against WPE/RPE, SQL Injections and packets with wrong size; 2) Monster and 20 level skills bug fix; 3) Party search on the sea bug fix; 4) Modified GameServer.exe, to which was added the function to work with local chat, transformation of characters, functions for editing and getting character's GM level, expanded limits for .bin-tables, etc; 5) Modified GroupServer.exe with chat logging and Lua handling system: world, trade, party, guild, dialog channels; 6) Transferring GMNotice(string message) function from 2.x version of the game to 1.3x. This feature allows you to send messages to GM chat from Lua scripts; 7) Various programs to work with the client and the server: GM Command editor, Account creator tool (RU), Rate changer tool (RU), .PK viewer (RU), EncDecTool, IP Changer, GM Panel (RU), String to code tool (RU); 8) Next - see this topic. Payment methods: PayPal. Contacts: Skype: vector.nesterov; Discord: V3ct0r#0484; Private message on the forum. Thank you for your attention!
-
15 pointsHello. So.. When was the last time you heard about WebGL? WebGL is Web Graphics Library that allows us to generate, display and interact with 3D objects directly in the browser. (Including mobile, since their legacy source is based on it). Since I am a big fan of everything 3D and TOP/PKO used to be my area of expertise, I ran some tests with WebGL and 3D Mesh of TOP/PKO. Since I am no longer in development, because over the years I am simply too expensive for any server to hire me, there is nothing I can do with the results of these experiments, but you as TOP/PKO enthusiast could find it fun or useful and maybe, make these examples into a real functioning thing. All you have to do is put the files on your Web server and open index.php, there I have made small menu, so it's easier for you to navigate and view stuff. (Generally PHP won't open on local machine without even the most basic Web server). Some FAQ's I will answer right away. - Why PHP? Well... There is really no good reason, because it all would work well on plain html, but I have used PHP for a very simple reason. I call it anti-idiot system. If you can't figure out opening, running and investigating these files, there is no reason for you to bother and waste your time. - Whats inside? Few examples with WebGL. Generating, loading and displaying 3D models with interactions in browser, that can be very easily integrated in website to take advantage of DOM element functions in order to make cool 3D interaction for you server's website. (This is basically a challenge for pro's to integrate in their websites and build awesome website that stands out). - What about support? None. I don't care enough to support you, and none of you could possibly pay me enough to integrate this for your websites, so you are on your own here. - Responsive? Yes. Engine, Web Elements, all is responsive. - Limitations? Not really, this is WebGL, it's supported by all the modern browsers including mobile browsers. The only limitation I can think of is your general knowledge. Maybe I will update this thing in the future... Maybe... Download: https://mega.nz/#!RgcGUATD!XUEPcZAW7aNFe8gSS0nEF4AsTNvqL4AqkfnaNuW7LII
-
14 pointsHow to increase temporary bag capacity In the guide I will show how to increase capacity of temporary bag from 16 up to 48 items. 1. Server Side Open GameServer.exe in any HEX-editor. Go to address: 0x000C0B0D - 1.36 GameServer.exe 0x000C809D - 1.38 GameServer.exe 0x0012E447 - 2.4 GameServer.exe Image for 1.38 GameServer.exe 1016 = 1610 0x10 it is capacity of temporary bag by default (16 in decimal). You can change it up to 48 items. Dec Hex ------------------- 24 items = 0x18 32 items = 0x20 40 items = 0x28 48 items = 0x30 Let's increase capacity to 32 items for example. So, you have to change 0x10 to 0x20: Then save GameServer.exe. Ok, now characters will be created with a temporary bag in 32 items by default. 2. Client Side You also have to increase temporary bag form in the client. You can add scroll bar (a) or stretch the form (b). a - form with scroll bar b - stretched form For example, I will show how to add scroll bar. Open main.clu (Client\scripts\lua\forms) and find scripts for frmTempBag. Add scroll bar: ----------------------------------------------------------------------- -- Temporary bag ----------------------------------------------------------------------- -- THERE IS SCRIPTS FOR Temporary bag FORM ... -- ADD SCROLL BAR scrollid = UI_GetScroll( grdTempBag ) UI_SetSize( scrollid, 11, 1 ) UI_LoadImage( scrollid, "texture/ui/xDesign/PublicC.tga", COMPENT_BACK, 11, 1, 194, 13 ) id = UI_GetScrollObj( scrollid, SCROLL_UP ) UI_LoadButtonImage( id, "texture/ui/xDesign/PublicC.tga", 11, 9, 166, 0, TRUE ) UI_SetSize( id, 11, 9 ) id = UI_GetScrollObj( scrollid, SCROLL_SCROLL ) UI_LoadImage( id, "texture/ui/xDesign/PublicC.tga", COMPENT_BACK, 9, 43, 166, 10 ) UI_SetSize( id, 9, 43 ) id = UI_GetScrollObj( scrollid, SCROLL_DOWN ) UI_LoadButtonImage( id, "texture/ui/xDesign/PublicC.tga", 11, 9, 166, 0, TRUE ) UI_SetSize( id, 11, 9 ) The result you can see above. That's all!
-
14 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 pointsEDIT: This guide didn't develop into what I intially had in mind, and is now being deprecated. My suggestion is use to this guide: GUIDE UNDER CONSTRUCTION - NO SUPPORT IS GIVEN FOR THINGS IN DEVELOPMENT This guide is intended to help you setup a server, and a client in the easiest possible way, therefore this guide is in first hand focused on setting up a server & client that work on your PC, and only your PC. If you intend to host a public server, see Change IP - Client & Server, and Opening Ports. SQL Server 2014 Setup: PKO II Server Setup: In development PKO II Client Setup: In development Change IP - Client & Server: In development Opening Ports: In development Resources:
-
14 pointsSystem Name: Special Apparel Shop - Monster Model Credits: @Billy, Idea for debug npc page calculation, ApparelShop.Init(); @Satan, Release and debug/organization of system; Undead Pirates Online, System idea original scripts; Introduction: A decoration shop where players can try the apparel before purchase it. Trigger to summon a monster model and show the player the apparel. The requeriment to purchase any apparel of this shop is a Special Apparel Card, price can be easily set to each apparel on the table. You can define the card on the var ApparelShop.Card. Apparel model has been set with Dream Island coordinates, change if used in another map. Functions: ApparelShop.SummonMob(), ApparelMonsterModel(). Change Logs: - Script Created (08/12/2016) - Release of scripts v1.0 (04/30/2017) - Original scripts by UPO Old scripts
-
14 pointsLocking and Unlocking inventory. to lock the inventory: function LockKitbag(cha) local packet = GetPacket() WriteCmd(packet, 553) WriteByte(packet, 1) SendPacket(cha, packet) end to unlock the inventory: function UnlockKitbag(cha) local packet = GetPacket() WriteCmd(packet, 553) WriteByte(packet, 0) SendPacket(cha, packet) end Usage: LockKitbag(role) UnlockKitbag(role) @GustavoHMA @DangThao
-
13 points@Wrexor asked me to release this, since somehow it seems like somebody got there hands on it, so it cant be sold. First off you need to compile this DLL in Visual Studio 2015, Download CFF Explorer Suite, Open your gameserver in CFF Explorer. Goto import adder Click "Modules -> Add" Locate the .dll Under exported functions click on "?ExportedFunction@@Y" , Click import by name. uncheck "Rebuild with OFTs" Click "Rebuild import table" Then save file. .DLL / Source code credits to @Wrexor LuaSql.rar
-
13 pointsGM Command editor With this program you can view the modified names of GM commands in GameServer.exe and edit them if necessary. Supported versions of GameServer.exe are 1.36, 1.38 and 2.4. How to use: 1) Run the program; 2) Enter full path to GameServer.exe or it's name if the program is located in the same directory, for example: D:\ServerFiles\GameServer.exe 3) The program will show a list of changed commands, if any; 4) You can change their names to the standard if necessary; 5) You can change names of GM commands. Enter to the console: <old name> <new name> 6) To exit enter 'E'. Download (54 KB): GM Command 1.2.exe
-
13 pointsBUENO. SOLO DEJARÉ MODELOS. A MEDIDA QUE VAYA TERMINANDO DEJARE MÁS SI TIENES ALGÙN MODELO DEJAR EN FORMATO OBJ Y TEXTURA XXXX XXXX ICONX 10100001 2000000000 2000000000 2000000000 2000000000 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000001 2000000001 2000000001 2000000001 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000002 2000000002 2000000002 2000000002 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000003 2000000003 2000000003 2000000003 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000004 2000000004 2000000004 2000000004 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000005 2000000005 2000000005 2000000005 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PACK 1 <------ UPDATE 2 XXXX XXXX ICONX 10100001 2000000006 2000000006 2000000006 2000000006 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000007 2000000007 2000000007 2000000007 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000008 2000000008 2000000008 2000000008 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000009 2000000009 2000000009 2000000009 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000010 2000000010 2000000010 2000000010 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000011 2000000011 2000000011 2000000011 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PACK 2 <------ UPDATE 3 XXXX XXXX ICONX 10100001 2000000012 2000000012 2000000012 2000000012 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000013 2000000013 2000000013 2000000013 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000014 2000000014 2000000014 2000000014 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000015 2000000015 2000000015 2000000015 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000016 2000000016 2000000016 2000000016 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000017 2000000017 2000000017 2000000017 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PACK 3 <------ UPDATE 4 XXXX XXXX ICONX 10100001 2000000018 2000000018 2000000018 2000000018 0 00 1 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000019 2000000019 2000000019 2000000019 0 00 9 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000020 2000000020 2000000020 2000000020 0 00 9 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000021 2000000021 2000000021 2000000021 0 00 3 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000022 2000000022 2000000022 2000000022 0 00 3 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 XXXX XXXX ICONX 10100001 2000000023 2000000023 2000000023 2000000023 0 00 3 10 0 0 7 1 1 1 1 1 1 1 500000 1,2,3 0 1,8,9,10 0 0 9,6 -1 0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1,1 1,1 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 1 0,0 20000,20000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PACK 4 <------
-
13 points
-
12 pointsSimple Admiral Cloak Script - [Video Tutorial] I have always looked for, and never found a Cloak script that is easy to install and configure, so after learning a little decide to create a tutorial with a script edited by me, I know the script is far from good or beautiful, but it's good for who is starting, and does not know where to start. Includes: Cloak Script Configuration files Glow Lines Color of icons changed (to give my touch xD) Video Tutorial Don't have Gems Video Tutorial Scans: VirusTotal Jotti Download: MEGA Credits: Some codes were made by other people. All credits to them.
-
12 pointsThis archive might be useful for you if you're looking an old files. I'm also trying to update it whenever there's a new releases from members. Enjoy! https://mega.nz/#F!OUMUgTYb!jtCsqh7halK_O9uzWyaG0g
-
12 pointsRegistration script with rankings This script was designed for in game accounts registration. Features: Custom design; Captcha Multilanguage; Player rankings by experience; Player rankings by gold; Guild rankings; Rankings cache; The strongest and the richest pirates on the main page; No backdoors and holes. Installation: 1) Put files from .zip archive to your web server folder; 2) Open config.php file and configure it: Connection with MSSQL Server: $config['db'] = array('host' => 'Host', 'user' => 'User', 'password' => 'Password'); Server name on main page: $config['server'] = array('name' => 'Server name'); Rankings: $config['top'] = array('exp_num' => Player number in rankings by experience, 'gold_num' => Player number in rankings by gold, 'guild_num' => Guild number in guild rankings, 'top_refresh' => Cache time in seconds); Language (eng or rus): $config['other']['lang'] = 'eng'; Show the strongest and the richest pirates (true = yes, false = no) $config['other']['show_strong'] = true; 3) Save modifications; 4) Make sure that registration works fine. Download (753KB): registration.zip
-
11 pointsHi, I've been working on a tool that can be used to convert .lab animation files to a format that can be used by all modern 3d animation software like Blender. At the moment, the conversion from .lab to .dae (the format I chose, collada) is functional, and I am working on the reverse conversion so your changes to the animation keyframes and joints can be reflected in the game. I've hit a small snag due to my limited understanding of 3d animation and dummy objects which would take some time for me to research and resolve, so if you are versed with these things and would like to contribute, please leave a message here or send me a DM. The tool can be downloaded here: https://github.com/Perseus/lab-parser/releases/tag/0.1.0. The source code (if you're interested) and usage instructions can be found here: https://github.com/Perseus/lab-parser Converted file example:
-
11 pointsYATOPS - 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.
-
11 pointsWith @KONG 's consent, CO Client source is being released. VS2003 instructions: 1) Download: Visual Studio 2003: https://drive.google.com/file/d/19PsTGwXYTUiCSq8ilw7DBAyy8pfIhKfU/view 2) Extract 3) Run to "Visual Studio 2003\Visual Studio .NET 2003Setup-NoPrereq.bat" Build Source: 1) Download: https://mega.nz/file/xkZCSABT#WUt1EbIX_oj8UDFIVUJLVt0scpqXO8KunOKOjEc6VE8 2) Extract 3) Open "Client\Client\proj\kop.sln" (Open in VS2003) 4) Set Release Configuration 5) Build Solution (shortcut: CTRL + Shift + B) Setup Client: 1) Download client provided by @Billie: https://mega.nz/file/YDBSgCBJ#-hA05hSYFCHO72LhOTV5mcQK4Rse1QxC1eof8sQD0iE 2) Extract 3) Copy "Game.exe" from "Client\Client\bin\system\" to "Corsairs Online - An Ocean Fantasy\system" 4) Copy "MindPower3D_D8R.dll" from "Client\engine\sdk\lib" to "Corsairs Online - An Ocean Fantasy\system"
-
11 pointsServers Monitoring Hello friends! Today, I want to represent servers monitoring service by PkoDev.NET community. servers.pkodev.net For the idea and its realization I'd like to thank @Duduf! Features Real-time mapping of operable & registered servers. Servers that do not respond for a certain amount of time will be automatically deleted; Displaying of every server's features - version, language, rates,...; Displaying of every server's statistics - number of: accounts, characters, guilds; You can check how many players do play a server in real-time; Filters using which players could find the most attractive servers in their opinion; Widgets for your website. In this way servers' administrators are provided with an opportunity to attract the players on a server, and for the players - to find the most suitable server to play in the shortest duration of time. How it works A special PKODevStat service is started on your server which automatically requests statistics and data from the SQL server every 90 seconds and then sends it to PkoDev.NET; The service itself is an executable that you start together with your: GameServer.exe, AccountServer.exe, GroupServer.exe and GateServer.exe; On the basis of the data our website creates a list of currently operable server with basic information. You can also install a special widget on your website that should display the same information of any page of your website. If server hasn't retrieved data for 24 hours, it gets automatically deleted. In the top of the list our service stores servers with the highest number of online players (if it retrieved data during the previous hour), otherwise ranking is carried out by the last reference to the PkoDev. Servers with 0 online are placed at bottom of the list by the default. Important PKODevStat.exe service does not send any extra data (for instance, logins or passwords of your server players). Also, server does not do any edits in the SQL server. Moreover PKODevStat is an open source and you can easily find it out on your own. We are not interested in breaking any server! How to get your server being monitored? That's quite simple. Head to "For servers admins" section on the service's website and click "Download". PKODevStat will be downloaded on your PC which which later has to be configured and opened manually. You would have to edit config.json file which consists of 3 sections: 1) Server section - basic information about your server: name - name of the server. From 5 and up to 55 symbols are allowed, do not use any special symbols; url - server address, should start with either "http://" or "https://"; lang - server language. Use the two-letter ISO code in lowercase: ru, en, br, etc; timezone - timezone of the server. Example: UTC +4 or Europe/Moscow; version - server version, strictly in double type: 1.3, 1.39, 2.0, etc; since - date and time when your server was first open publically (launched). Format: YYY-MM-DD HH:mm; rates - server rates: exp - solo rates; drop - drop rates; pet - pet rates; ship - ship rates; party - team rates; resource - resource rates; lvls - max levels in game: char - max character level; pet - max pet level; ship - max ship level; 2) db section - configurations required to establish SQL server connection: server - SQL server hostname; port - SQL port; user - DB username; password - DB user's password; 3) tbl section - names of tables in AccountServer and GameDB databases. Edit them only if your table names are different from original. If that you've edited the config, save it and run the program (PKODevStat.exe). Run only one copy of .exe file and make sure you see a label: Runing PKODev service... If there are no errors & mistakes in configuration, there will be no extra notices after the label and you should be able to see your server at servers.pkodev.net. Otherwise, fix the errors and restart the application. If you do any edits in config.json, you should always restart the program. If you have any suggestions, notes or questions regarding the work of the monitoring system, then you leave a comment and we will certainly review it! Thanks to @qwerty for news translation!
-
10 pointsI am making this free available, but I do not intend to update it or give support as I am developing top on unity and this already consumes all my time. Download
-
10 pointsForge.lua Плавка аппарелей. (Fusion) Открываем \Resource\Script\MisScript\forge.lua. if ItemID_Waiguan <= 4999 or ItemID_Waiguan >= 6000 then (Аппарели. 5000 - начало, 5999 - конец) Меняем 4999 и 6000 на те значения, которые вам нужны. Я буду использовать 15000 и 20000. if Item_FUSIONID_star == 0 and ItemID_shuxing_star >= 5000 then (Экипировка. 4999 - конец.) Меняем 5000 на 15000. if ItemID_Shuxing > 5000 then Меняем на 15000. if ItemID_star < 5000 then Меняем на 15000. Усиление аппарелей. (Upgrade) if Item_beuplv_ID < 5001 or Item_beuplv_ID > 6000 then Меняем 5001 на 15000, а 6000 на 20000. GameServer.exe Будем использовать Notepad++, но можно пользоваться любым другим приложением. Открываем Notepad++, на панели меню находим "Plugins" --> "Plugin Manager" --> "Show Plugin Manager". Выбираем HEX-Editor и нажимаем Install. Открываем GameServer.exe (Я использовал GameServer PKO 1.38) Включаем плагин HEX-Editor "Plugins" --> "HEX-Editor" --> "View in HEX" или нажимаем сочетание клавиш Ctrl+Alt+Shift+H. Плавка аппарелей. (Fusion) Лимит аппарелей в GameServer.exe - с 5000 по 6000. 5000 = 13 88 --> 88 13. 6000 = 17 70 --> 70 17. Я буду изменять 5000 на 15000, а 6000 на 20000. 15000 = 3a 98 --> 98 3a. 20000 = 4e 20 --> 20 4e. Нажимаем Ctrl+G (Снимаем галочку), указав адрес 0x00150770, нажимаем кнопку "Go!". Находим 88 13 и меняем на 98 3a. Ниже (По адресу 0x00150780) находим и меняем 70 17 на 20 4e. Лимит экипировки в GameServer.exe - до 5000. 5000 = 13 88 --> 88 13. Меняем на 15000. 15000 = 3a 98 --> 98 3a. Адрес 0x00023510. Меняем 88 13 на 98 3a. Усиление аппарелей. (Upgrade) Переходим на адрес 0x000d2fb0, меняем 88 13 на 98 3a. Адрес 0x000d2fc0. меняем 70 17 на 20 4e. Сохраняем "File" --> "Save" или Ctrl+S. Game.exe Официальный Game.exe 1.39.1. Плавка аппарелей. (Fusion) Лимит аппарелей в Game.exe - с 5000 по 7000. 5000 = 13 88 --> 88 13. 7000 = 1b 58 --> 58 1b. Меняем на 98 3a(15000) и 20 4e(20000). По адресу 0x00073000 находим 88 13 и меняем на 98 3a, 58 1b на 20 4e. После этого можно сохранить и попробовать вставить экипировку в аппарель. Аппарель успешно плавится, но характеристики предмета не отображаются. При надевании предмета всё в норме. Нам нужно добавить отображение характеристик. По адресу 0x0008bbd0, 88 13 меняем на 98 3a. Адрес 0x0008bbe0. 58 1b меняем на 20 4e. Теперь характеристики предмета отображаются, но не все, а именно: "Требования к уровню", "Требуемый класс", "Эффективность" и уровень предмета. Доспех. Добавим отображение "Требования к уровню". Адрес 0x0008e7b0. 88 13 меняем на 98 3a. Адрес 0x0008e7b0. 58 1b меняем на 20 e4. "Требуемый класс". Адрес 0x0008e890. 88 13 меняем на 98 3a. Адрес 0x0008e8a0. 58 1b меняем на 20 e4. "Эффективность". Адрес 0x0008e730. 88 13 меняем на 98 3a. Адрес 0x0008e740. 58 1b меняем на 20 e4. "Уровень предмета". Адрес 0x0008e600. 88 13 меняем на 98 3a. Адрес 0x0008e610. 58 1b меняем на 20 e4. Оружие. "Требования к уровню". Адрес 0x0008be90. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. "Требуемый класс". Адрес 0x0008bf50. 88 13 меняем на 98 3a. Адрес 0x0008bf60. 58 1b меняем на 20 e4. "Эффективность". Адрес 0x0008be30. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. "Уровень предмета". Адрес 0x0008bcc0. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. Перчатки. "Требования к уровню". Адрес 0x0008c280. 88 13 меняем на 98 3a. Адрес 0x0008c290. 58 1b меняем на 20 e4. "Требуемый класс". Адрес 0x0008c510. 88 13 меняем на 98 3a. Адрес 0x0008c520. 58 1b меняем на 20 e4. "Эффективность". Адрес 0x0008c220. 88 13 меняем на 98 3a. Адрес 0x0008c230. 58 1b меняем на 20 e4. "Уровень предмета". Адрес 0x0008c110. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. Башмак. "Требования к уровню". Адрес 0x0008c480. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. "Требуемый класс". Адрес 0x0008c510. 88 13 меняем на 98 3a. Адрес 0x0008c520. 58 1b меняем на 20 e4. "Эффективность". Адрес 0x0008c420. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. "Уровень предмета". Адрес 0x0008c300. 88 13 меняем на 98 3a. Адрес 0x0008c310. 58 1b меняем на 20 e4. Головной убор. "Требования к уровню" и "Требуемый класс". Адрес 0x0008c6a0. 88 13 меняем на 98 3a. Адрес 0x0008c6b0. 58 1b меняем на 20 e4. "Эффективность". Адрес 0x0008c640. 88 13 меняем на 98 3a. Адрес 0x0008c650. 58 1b меняем на 20 e4. "Уровень предмета". Адрес 0x0008c560. 88 13 меняем на 98 3a, 58 1b меняем на 20 e4. Усиление аппарелей. (Upgrade) Адрес 0x00073120. 88 13 меняем на 98 3a и 58 1b меняем на 20 e4. Заключение. Аппарель успешно плавится, улучшается, используется катализатор плавки, плавятся слоты, вставляются самоцветы. Возможны баги.
-
10 pointsThis is a little guide about how to use the ToP 2 Launcher as your server updater. • First of all extract the .rar archive and copy the Updater folder into C: • Inside Patch folder drag all your update archives: # Note: in my example the Launcher will update my ItemInfo, so you must create the folder scripts>table>"all your .bin archives here". • Now run pack.bat and a new folder will appear called "run_dest". Copy and paste that new folder in your xampp>htdocs folder. • Copy all archives inside the Launcher folder and drag into your client folder. Open the Update.cfg (with any text editor) and change the server_ip with your own server IP: • Run kop_d and done ! # Note: you can also edit the Launcher links (as register button, server news...). Open the webconfig.xml (with any text editor). ToP 2 Launcher.rar
-
10 pointsThis thread will be dedicated to fixing the base files (1.38). All bugs should be reported so base files can be fixed. TODO: - Snowball bug (infinite when inventory locked) - Purchasing gems in stacks - string.wrap for all npcs and quests (alignment of texts for npcs and quests) - Recode Lucky NPC (set handlers and easy-to-mod prizes) - Repair Fee (fixed for equipments that are fused) - Fixed Autorations - Fixed ship fuel - Lv47 and above mJrs consumes only great rations (latest TOP1) - Lv41+ fairies consumes only great fruits - Avoid losing gems on fusion (Credit: Saeed) - Money overflow - Forge rates easily adjustable - Socket rates easily adjustable - tables for: Equipments that cannot be socket Equipments that cannot be fused Equipments that cannot be forged Itemtypes that cannot be forged Items that cannot be gem extract Items that cannot be repaired Capping gem level Item upgrade system - Fairy System (Credits: Angelix) - Upgrade System (Credits: Angelix) - Sacred war token bug - Permanent Jack corals - Max Forged level - Max level players do not gain exp - Players do not gain EXP for mobs level 11+ - Chaos argent spawning interval fixed - Serialization crashes GS - 2.0 Skills - Rebirth jumps - Anti level jumps - Monster arrangement files - Fixed updateall issues - Pots/Food cooldown - fixed Hexa quest - Tribulation of Faith - daily quest extension (no cha_timer) - Use latest iteminfo - Fusion for itemid 7k+ - Equipments 7k+ fuseable - Angela Jr default colour possession - RED - Highest PR to take in effect variable - Creating guild with notice - Cloaks - Blueprint handler (Credits: firm) - Wings of Glory with flying effect - DLL for items that can bank - Astral Isle - Blueprints for meta/strengthen equipments - Marriage of Angela's - Enhanced Death torso's Serverfile will be uploaded soon ! (base files will go with @V3ct0r's public released executables) If you have suggestions to be added to base file, please post here. Community will decide if the suggestion should go on base files.
-
10 pointsTen Server Commandments By Jap (this guide is mainly on how to manage a server(mainly a medium one) as a gm) "I've been in this game for years, it made me an animal It's rules to this shit, I wrote me a manual A step-by-step booklet for you to get Your game on track, not your wig pushed back" -Biggie There are servers such as: 1) Easy - (20x+ rates) ROSO, rainbow pirates online, SPO, ROTO. (where EQ is just given to you/ the pk is very fast paced/ pk mainly based on who fb's first and better ping) 2) Easy,mid - (~10x rates) LPO, Wisdom pirates online (pk is near fast running) 3) Mid - (4x-8x rates) Pirate war online, Piratearch, World of pirates devastation. 4) Mid,Hard - (2x-4x rates) Foxlv (these kind of servers usually don't make it in 2 weeks since they are hard to maintain and u need to be very lucky to gather a player base on this kind of server) 5) Hard - (1x rates) PKO, sunny go, Mordo (mainly vanilla) These are 10 server rules that strictly apply to all servers except easy ones. 1) Delay your server opening. Servers which open the same day they advertise 100% die, period. What you need to do is delay and anticipate your server. Make beta launches with good bug defixing and ballance. Good example of this was server pirate war online, scrub server but anticipated their launch the they got 350 people on start. All they did was announce the server 2 weeks before opening beta. Beta lasted 1-3 days. On launch they got ~300 ppl. This mistake is done by almost every new private server, and that is why those new servers die within 3 days. 2) Make everything unique. This includes: website design, forum design, even client design. People are bored of seing the same coppied website platforms, ppl want unique,new designs, since they are more attractive to the eye. 90% of the server website designs nowadays are just copy pastas from other servers. I'm not saying its bad, It's just that people are bored of it and quit the server faster. Few servers with unique design: pko, sunnygo, mordo, spo, wisdom pirates online.(fox) Getting a unique forum not those cheap free ones, is really better since it is more attractive for people to use forum. For example wisdom pirates had around 350+ people playing. But forum activity was 2 posts total - since the forum was a cheap free one and not attractive. 3) No big gems. This rule only fits for medium and med/hard servers. Keep it simple. Gems such as: normal, broken, crack, chip, ug's, bd, jades (hat gems). - those are normal for a mid/hard server gems that are simply for a easy server: great gems, azz's, rock gems, +8 etc gems and many many more gems that are only for easy servers. 4) Chaos argent. Considering the server is med, med/hard, hard. When server opens, make sure to close CA and only open CA after few days (your choice). Since players will create voys and ensure early game CA monopoly. Gathering early CA chests and getting early CA sets and their effect which is -50% dmg reduction, +50% dmg dealing. 5) Be a active GM. When you open your server. MAKE SURE, to be very very active in the first 2 weeks or atleast 1 week of the server opening. Since those first 2 weeks are the most important in the server. Speak with the community talk with them about the server. What fixes what bug etc it needs. Don't be that gm that there is a bug that people abuse and the gm only fix it 3 days later (pwo) Overall, login to the server atleast 3 or more times a week and talk in world chat, so players know that you are not giving up ur hopes on ur own server. 6) Advertise On new servers there is little to none advertising, gm reminds ppl that his server will come out in 1 week, then he stops and ppl are supposed to remember, he needs to do that sht everyday and remind ppl, that way the server gets more attention. And ofcourse bigger player count. There is facebook, pkodev forum, other forums maybe. Other server forums. Other servers world chat. Nowadays ppl use discord, you can go to other servers group chats and link ur server there. Hell, yuo can even check the servers offline people, and private message the server to those offline people, without gm seeing it. But on a fresh server, you need to pump that sht every day. Before launch is most important, and 1-14 days after server is really important. 7) Be a smart GM. (know your server) This comes to knowledge of the game tales of pirates. A very good example is foxlv, a good coder which just knows how to write codes and not anything about the game. Plainly kills the server because he didn't had a good knowledge of the game. Sometimes the best person to know what the server needs, is the player itself. In that case the gm needs a trustworthy pack of players that can report him the problem of the server. Being a smart gm, is also considered that listening to players is crucial. The players are the main ingrediant to your server that keeps it alive, those players play the game day and night and know. Every tiny bit and trick what this server lacks and what is good with it. So giving those players a chance is very important. Just knowing which players to trust. Zankza ofc is known for not listening to other ppl, thats why he lead foxlv to its death. 8) Not so many pk maps Keep it simple, we are working with medium and medium/hard servers. Keeping it simple is maps like: CA, FC, DS, DW, BD. you can stick a few maps like bounty hunter or arena island etc. But don't ever stick 30 more pk maps that players just dont fucking go there and are to lazy and busy to go to every fking pk maze. A lot of maps, means less people go there, its physics. If there is a million maps, and only 100 players online. Few maps wont be gone too. But if there is 2 pk maps. All those 100 will go there. 9) Be good at your craft as a GM. Capacity of adding new things, ability to debug everything. If you open a server, better make sure you have a team atleast with you, that can debug and help you with server. There was a server where i pointed out a bug to a gm, and he simply responded "aw man idk how to fix that" guess what, that server died within 1 week. If you want a progressive mid server, you better learn how to add new things. Such as new maps, bosses, mazes, items, apps, gems, npc etc. And if you want to compete with the big boys, you better come prepared and ready because when you open a server there will be gm's that want to ddos and hack into your server. 10) Ballance This is a topic that few servers just want to avoid. Considering that some server want to do ballance of the server, and few don't. Server that don't want to do ballance are simply ensuring themselves that nothing will go wrong. And the gm's wont be responsible for other class weakness and even servers failure. Servers that want to do ballance, mainly run into struggle that they don't know wtf they are doing This is simply because those gm's dont play the server, they don't pk, and they don't know the casual life of their server player. A good ballanced server was LPO. LPO GM team had a few list of members from inside the server. That informed the gm's which class is a bit op and which needs boost. Thats how they kept the ballance. Servers such as vanilla ones usually run into this problem and med/hard. So you choose, either you trust few people on your server and start ballancing the classes of your server. Or you don't do ballance and let everything sit down to its roots. Fact* Easy servers which open nowadays, die within 2 weeks, it's because players get the best gear in 1 week. There are easy servers running with 1-6 year experience, which makes the new easy servers hard to compete with them, taking in consideration that people get the max gear in 1 week in new easy server. Now if we take a look at vanilla (hard) servers, there is only a couple of them existing. It is PKO and sunnygo online. The reason only 1 or rarely 2 vanilla server can exist is very simple. Every vanilla server is the same, its the same original files with 1x rates. So the player will join a vanilla server with more people and not a new vanilla server that has just opened and has 10 players. You cannot compete with zankza servers, its close to impossible. Fact* Zankza servers will always attract attention and gather a big audience, since he is well known in server making in the community. Tips: 1.For a medium server or a hard server. Always have a plan, on what you will do for a progression server. Such as when most of the players reach lvl 75 and get their uns 65 gear, Open up abbadon, so they go get their uns 75 EQ, after that open up winter so they get uns 95 eq and so on and on. This mistake was done in foxlv, such as Opening winter to get 95 eq instead of abbadon to get 75 EQ. GM's also don't visit the servers usually, so they miss out on how fast people farm and get the sets. So it ends up people getting the max gear in 1 week. 2.Get a team of people who speak english. Getting a team and not controlling the server as a dictator (zankza). When you are the only person making decisions, this is a big nono, just look at big companys like youtube or google, they have more then 30 people thinking of ways to make the platform better. The more people you have in your team and you trust them, the better the solutions for the server will be, logically. You need people to rely on and those people might have a better solution on the server then you. 3.In every server, there is EXP ranking, and on the exp ranking you always see quit'ed people with no guild. This is also a big part in keeping the server running for a long time. You can go and check on PKO online exp ranking, 10% of those top50 people have quit'ed. So in few months, the mid tear people will reach high lvl and be at the point where those quit'ed people where. This is drastic if you want to keep the server alive for a long time. You need to know why people in high lvl quit, maybe somehow reach out to them or ask people why they quit'ed. People usually quit because there is no content to reach out more (just like in PKO after lvl 75,80). After you know the reasons they quit, WORK WITH THEM. Try coming with solutions that will bring those veteran players back in the game and with full excitment. This was common on Fox, who played fox knows this. In the end of foxlv days the only people that played were veterans, and the the only thing GM did was focus on bringing more people to the server, which is bad. You need to focus on making a good server for its future, and people will come to the server automatically. 4. (2018/01/07 edited) When you want to open a server, now this is a must and i see 90% of the servers don't do this, but Clean and fix the server, BEFORE opening it. When a new server opens on the very first day and week, it has a lot of bugs/abuses/glitches/disconetcs Etc Etc. Every server can avoid this and it will make the servers gameplay more easy. Simple, just test everything, mall etc etc, test everything. Make betas and test everything yourself practically. DONT PUSH the server to the public as fast as you can because you want to make the profit faster. If you whanna make a elite server, work with it, fix the bugs, if the bugs will take 3 weeks to fix, fix them. But don't push out a halfly made server, this mistake was done by http://pirategames.online/ Example of a good server: 1) Pirate king online a) 1,2,3,5,6,8,9. These are the points that this server and zankza as a gm is achieving. b) people are tuning in his server because they know that he and his team can bring new stuff on the table with ability to debug everything etc. 2) Foxlv a) 1,2,3,5,6,8,9. b) I think the only reason why foxlv was a great server is because the advertisment that zankza had put in it. And that it was mainly a non p2w server. This is what a unique server looks like, with unique website and unique forum:
-
10 points1) Stall Server (Offline Stall) Update Character remain trading in set stall when player leaves the game. 1) Fixed IP addresses of players in the database, now their real IP addresses are saved in the database, not 127.0.0.1; 2) Fixed random disconnection of players; 3) When player try to login an account that is in an offline stall, the player will not see the message "Your account is already in the game"; 4) Fixed offline stall auto closing when it becomes empty. Now offline stalls nearby will not be disabled. 2) Names for Navy guilds (Navy Division) Now it's possible to create navy guilds with names. 3) Swings Works with Rebirth Wings. 4) Specify GameServer.exe the name of the game database By default, GameServer works with a database named GameDB and this name can not be changed, since it is stored in GameServer.exe. There is a new setting is added in GameServer.cfg that allows you to specify GameServer.exe with which database to work. db_name = HelloWorld 5) A tool to cut off maps with objects Download samples 6) Add IGS Crystals function (In-Game Shop) Now you can add IGS crystals to player's account from GameServer Lua scripts. AddCrystals("Account", amount) 7) Web for TOP/PKO Server
-
10 pointsKOP/PKO/TOP Development Services - Binary hooking/patching - Adding functionality to 1.3x executables - Lua services Works Done and Deployed: - Visible player level in name for Game.exe - Coloured Name (equipment based and static colours) for Game.exe - Bankable items for GameServer.exe - Removing Apparel limits (GameServer.exe and Game.exe) - LuaSQL extension (GameServer.exe) - Swing (Game.exe) - PacketHandler at Lua Level (GameServer.exe) - One click IGS (no security password) - Say function fix for NPCs and monsters Services: this includes custom modification upon request For more details please send a private message Coloured Name: One click IGS:
-
10 pointsYou can use the buy/sell page to make a bank Issue is that you need the amount of gold the item would cost to be able to withdraw it (client side check, so i guess this can be hexed out), also you cant see the quantity/attributes before withdrawing the item (but the attributes are restored once the item is withdrawn).
-
9 pointsCorsairs Online was a server developed by @KONG @Billy @Wrexor @Mii @Foxseiz @Snre3n Below, is the repository that CO source resides, this is CO's team (the above) last contribution to PKO Development. https://bitbucket.org/{2e106d14-da36-429f-bac8-f69975e19841}/ Edit by Rogue, link to deguix's repository: https://gitlab.com/deguix/corsairs-online-public Hope this helps the development of PKO/TOP.
-
9 pointsUsage: Just add an NPC with the BossRecordNpc as its function, and add the desired bosses to the BossRecord.Tracked table. (before closing the server, use the &lua BossRecord.Clear() command to reset the times) Script : http://pastebin.com/Vy19L2ky
-
9 pointsPKOdev.NET website for Tales of Pirates Server Hello friends! I want to share with you a website for your own Tales of Pirates server. Features 1) News management; 2) Server rules page; 3) Downloads; 4) Player rankings (by experience, by gold, by number of guild members); 5) Game account registartion with activation by email; 6) Game account restore by email; 7) Game database of monsters and items; 8 ) Donations page; 9) Server status and statistics, GM online; 10) Account management (account information, characters, password/email/pin change); 11) Offline Stall Server extension to view stalls and search items. Requirements 1) Web server; 2) PHP version 7.0 and above; 3) Enabled PDO extension with sqlsrv and sqlite drivers. Installation 1) Put website files to the working directory of your webserver; 2) Configuire file config\inc.config.php. The file is very well commented, so you shouldn't have any problems configuring it; 3) The site uses the Smarty template engine to easily change the appearance. All HTML templates are stored in templates folder; 4) You can find email templates are in templates\email folder. Some pictures Download 1) Google Drive Credits All credits and copyrights belong to @Billie and Kingdom Pirates Online team. If you have any questions or problems related to the website, then feel free to contact them!
-
9 pointsServer files / resource / scripts / calculation / variable.lua Ctrl + f ( FIND ) "StoneAttrType_Num" edit the number to + 1 w/e it is currently is (adding 1 gem) this will be known as ## StoneAttrType_Num = ## Continue scrolling to the end of "StoneAttrType" list, add, and edit this StoneAttrType [##] = ITEMATTR_VAL_AAAA ## = same as above Replace AAAA with one of the following STR --Strength DEX --Accuracy AGI --Agility CON --Constitution STA --Spirit MXHP --Max Hp MXSP --Max Sp MNATK --Attack DEF --Defense HIT --Hit rate FLEE --Dodge MF --Raise drop rate o_O untested --lol pick pocket-- CRT --Crit rate HREC --Hp rec SREC --Sp rec ASPD --Attack speed MSPD --Movement speed PDEF --Physical resistance Next Find "StoneEff_Num" Then edit the number ## to same as above Continue Scrolling to the end of "StoneEff" list, add, and edit this StoneEff [##] = # ## = same as above Replace # with the amount of stats the gem will give Next Find "StoneTpye_ID_Num" Then edit the number ## to same as above Continue Scrolling to the end of "StoneTpye_ID" list, add, and edit this StoneTpye_ID [##] = #### ## = same as above Replace #### with Iteminfo.txt ID Next find "StoneEffType" Continue Scrolling to the end of "StoneEffType" list, add, and edit this StoneEffType[##] = # ## = same as above Replace # with effect type 1-4 1) attack 2) defense 3) havent seen it used 4) other Next find "StoneItemType" Continue Scrolling to the end of "StoneItemType" list, add, and edit this StoneItemType[##] = { #,0 } ## = same as above Replace # with where u want the gem to go (can be more than one ex: {11,22,27,0}) 1) 1 handed sword 2) 2 handed sword 3) Bow 4) Firegun 7) daggers 9) Staffs 11) shield 20) ami caps 22) armors 23) gloves 24) shoes 27) tattoos Note: I don't know who owns this guide, it's been posted by serverdev admin so I'm sure it's not his guide.
-
9 pointsHello community of pkoDev! I have come today today in order sell services and files. Lets get straight to the point. Scripting Services I offer a very limited variety of scripting services, let me make it clear, "service". I will not join a team to open a server. Here is a small list of things I can do, please do take note it's only Lua. Modify existing functions/system in order to make it easier for your use; that includes being able to add, modify and remove things easier than adding a new function per thing as it's currently on many functions by default. Simple Functions Fairy System Ticket System Upgrade System Create scripts for maps, can be simple or complex, depends on how hard it's for me to actually create it. It can be instanced or not. Rush Capture The Flag Anomaly Tower Create custom quests for killing monsters and players within certain maps and being certain class. In case you don't know how to use my guide. Create custom scripts. Contract System (modified from V3ctor's Contract System Mod). Fix general errors or make small things for you. Price may vary depending on what you want. Server Files I'm selling custom server files, they're based on v138. GitHub Description: Features - Server Owner GitHub Description: Features - Player Notes: They're based off of PKO 1.38. They make use of V3ctor's Mod System. Extra: They contain Contract System, however, the script was completed re-written and is now more customizable and allows the contracts to be random drops for general maps or specific maps and allow for rewards from general monsters, map specific monsters or bosses. It refers to this. They contain: Server Files. Client Files. Databases (+ SQL Queries). Executables (+ IGS). Also includes Anomaly Tower. Price (negotiable): One-Time Sale. Support. Will provide updates for any custom lua script only. Updates will be via GitHub so things can be transparent and you can see what the changes were. No support provided for exes (server or client). Contact Information: Discord: Angelix#2836 pkoDev: Private Message Mostly like to answer through Discord and more frequently.
-
9 pointsNew administrator on the forum Hello friends! Today I want to introduce you to the new administrator of the PKOdev.NET forum - @patrick13! @patrick13 has been an active participant in the forum since its inception and since then he has made a great contribution to the development of our community. So, he helped and continues to help translate materials from Russian language into English for publication in the English-language section of the forum, provides technical support on the server- and client-sides of the game to the rest of the community, takes initiative and proposes new ideas, keeps order on the forum, until now acting as a moderator. In addition, @patrick13 has programming skills in the field of applied and web development, fluent in English and Russian languages. In view of the foregoing, I made the decision to invite @patrick13 to become the second administrator, to which he responded positively. I consider his candidacy worthy and beneficial to the further development of the project and the community as a whole. Congratulations to @patrick13 and I would like to thank him for his contributions to the community!
-
9 points
-
9 pointsServerdev archive Old version of serverdev archive https://yadi.sk/d/5WMIO1v9y4Pc8 Last version of serverdev archive (2015 year) https://yadi.sk/d/or2alOjky4Pc4 Credits: @Спейсио
-
9 pointsHi, as you know I previously released a new website for Tales of Pirates. I had planned to make updates to that one but due to college and graduation and everything, I ended up not really working on it again. Long story short, here's a new version of the website that I had made, with more features and something that I'll actually be updating regularly according to community response. The features that it currently has: Basic site management ( news, downloads, authors etc.) Ranking (Guild and Player) A bare-bones admin panel that I plan to extend A functional item mall and award center Logging system ( I have the base for this set up but no UI. I'll be adding a UI which will allow you to look through any "critical" actions taken by GMs or players on the website ) The design isn't the best (I'm not a designer) so I'm open to any design feedback that you guys have. Here's a few screenshots of what it looks like: Installation Instructions You're going to need NodeJS for this. You can find it here: https://nodejs.org/en/ You can download the latest LTS version (12.17.0) and install it. Then, you need to open your command prompt (run it as admin), and `cd` into both the `api` and `web` folders and run npm install (For people who aren't well versed with the command prompt) : "cd" is a command to change your current directory in the command prompt. If you have downloaded and extracted the website in the F: drive inside a "topcms" folder for example, the commands you would run after opening a command prompt are: F: cd topcms cd api npm install cd .. cd web npm install (".." is used to go to a directory that contains the current directory (basically go one up from where you currently are )) Next, `cd` into the `api` folder and run npm run install-wizard This should start an installation wizard on `localhost:4000` that you can go through and it'll set the website up for you. Next, to run the website, cd into the `api` folder and run pm2 start dist/server.js and the website should start at port 3000. (You can access it by going to `localhost:3000`) If you want to run it on port 80, go into the `api` folder and look for a `.env`. At the end, write port=80 pm2 is a process manager for node, which is used to run production applications and handles a lot of things that make it easy to run (automatically restarts the app if it crashes etc) Some pm2 basics: run pm2 start dist/server.js from inside the API directory to start your server run pm2 list to see the currently running processes (you should see your server running if you do this) run pm2 kill to stop any processes that are currently running. You need to do this and then "pm2 start" again if you want to restart your server. There are a few more configuration related things that I'll be putting up here but I hoped to get it into your hands so I could iron out any bugs and get this ready to be used by everyone. Please let me know if you run into any issues or if anything needs to be made clear here.
-
9 pointsHOW IT WORKS STEPS 1 - Everytime a player enters a map, it saves they CURRENT GAMESERVER in a file resource/script/players/playername.txt 2 - When player leaves the map it saves the text "out" in the resource/script/players/playername.txt 3 - When the player teleports to another map the destiny will check if the playername.txt contains "out" or its gameserver name"... ... if not ... shows a message ... "GOD IS WATCHING YOU" gameserver.cfg equment = System00 gameserver1.cfg equment = System01 gameserver2.cfg equment = System02 gameserver3.cfg equment = System03 gameserver4.cfg equment = System04 Functions.lua code --> place it anywhere function GetCurrentGameServer() local ret, npc = GetEudemon() local GSName = GetChaDefaultName(npc) return GSName end function GetSavedGameServer (role) f = io.open ("resource/script/players/" .. GetChaDefaultName (role) .. ".txt", "r") SavedGameServer = f:read () f:close () return SavedGameServer end function SaveGameServer (role) local gameserver = GetCurrentGameServer() f = io.open ("resource/script/players/" .. GetChaDefaultName (role) .. ".txt", "w") f:write (gameserver) f:close () end function CleanGameServer (role) f = io.open ("resource/script/players/" .. GetChaDefaultName (role) .. ".txt", "w") f:write ("out") f:close() end all maps ctrl.lua code after enter ( Here is where you can do whatever you want if caught the trying to dupe... ) I just show a message ('God is watching you') savedGS = GetSavedGameServer(role) currentGS = GetCurrentGameServer() if (savedGS ~= "out" and savedGS ~= currentGS) then Notice("God is watching you...") end SaveGameServer(role) before leaves CleanGameServer(role)
-
9 points//... static char buf[6]; const float seconds_remaining = _fPlayTime - _fCurTime; const int minutes = static_cast<int>(seconds_remaining / 60); const int seconds = static_cast<int>(seconds_remaining - (minutes * 60)); minutes > 1 ? _snprintf_s(buf, _TRUNCATE, "%.2d:%.2d", minutes, seconds) : seconds > 1 ? _snprintf_s(buf, _TRUNCATE, "%d", seconds) : _snprintf_s(buf, _TRUNCATE, "%.1f", seconds_remaining); CGuiFont::s_Font.BRender(0, buf, x, y, COLOR_RED, COLOR_BLACK); } // End of function void CAniClock::Render(int x, int y);
-
9 pointsWe are still working on it. Now the esenthel engine (which we use to develop this game) is open source, it makes development even better. We are still looking for modellers/graphic artists (paid)
-
9 pointsThis guide uses the Terminal almost all the way. This is not for everyone, you need some understanding of your Linux! There are 2 versions of SQL available on Linux: 2017 (evaluation - but it's for 64 bit apps only) and 2000. This guide will follow the installation of 2000 - the game can only be run 32 bits... Installing SQL 2000 under wine: Note for 64 bits systems: for any wine/winetricks related instruction to SQL server and your top server, you have to add this: env WINEARCH=win32 WINEPREFIX=~/.wine32 This is because Winetricks prevents dotnet20sp2 from installing into a 64 bits prefix - it is 32 bits only! Examples: env WINEARCH=win32 WINEPREFIX=~/.wine32 winetricks winxp env WINEARCH=win32 WINEPREFIX=~/.wine32 winetricks dotnet20sp2 ... env WINEARCH=win32 WINEPREFIX=~/.wine32 wine MSDE2000A ... First, make sure you have wine and winetricks installed. Then, download MS SQL 2000 from here: https://www.microsoft.com/en-us/download/details.aspx?id=22661. Then, to configure Wine to support SQL 2000, set it to win xp mode and install Net Framework 2.0 SP 2 and MDAC 2.8 (SP 2 is not needed but it is recommended): winetricks winxp winetricks dotnet20sp2 winetricks mdac28 Then, cd to folder where MSDE2000A.exe is and install it - Remember to use .wine32 folder instead of .wine to use the 32 bits prefix on a 64 bit system: wine MSDE2000A.exe wine ~/.wine/drive_c/MSDERelA/setup.exe DISABLEROLLBACK=1 BLANKSAPWD=1 DISABLENETWORKPROTOCOLS=0 SECURITYMODE=SQL The installer will fail! When time out failures start appearing, do a ctrl+c to abort, then copy the remaining files over - - Remember to use .wine32 folder instead of .wine (on both parameters) to use the 32 bits prefix on a 64 bit system, and to use your user name instead of "myusername": cp ~/.wine/drive_c/users/myusername/Temp/SqlSetup/Temp/*.* ~/.wine/drive_c/windows/system32/ Now installation is finished. Restart wine or computer (otherwise SQL service might not run). Then MSSQLSERVER service will start automatically when first running a program on wine on 32 bits prefix. You can also do the following to start it manually directly: wine net start MSSQLSERVER To start the program that controls the service, you can do the following: wine "C:/Program Files/Microsoft SQL Server/80/Tools/Binn/sqlmangr.exe" Sources: http://mynixworld.info/2012/12/22/ms-sql-server-on-linux-yes-it-works/ https://appdb.winehq.org/objectManager.php?sClass=version&iId=11016 Before we continue, the dbs have to be in the same environment of the installed SQL server. That means, you are using the ~/.wine32/drive_c folder on 64 bits and ~/.wine/drive_c on 32 bits. These folders are usually hidden, so you might need to unhide them first (you need to configure that in your system). Then unpack the db files to a folder inside that drive_c folder. --- This guide will show how to setup SQuirreL SQL client. SQuirrel SQL and similar gui clients should be used for fully setup gui Linux environments and ease of use. This guide will assume you already installed the SQL server. Setting up SQuirreL SQL client and connecting to server: Installing: Download it using your package manager - on Arch Linux it's named squirrel-sql. After installing it, download MSSQL JDBC driver depending on the SQL version installed: SQL 2017: version 6+: sqljdbc_6.0.8112.100_enu.tar.gz. Extract sqljdbc41.jar (enu/jre7 folder) if SQL client uses Java 7, or sqljdbc42.jar (enu/jre8 folder) if using Java 8. SQL 2000: version 3.0: sqljdbc_3.0.1301.101_enu.tar.gz. Extract sqljdbc4.jar. Setting up the SQL client: Start the client, click the drivers tab on the left side of the window, then right click "Microsoft MSSQL Server JDBC Driver", then click modify. Click "Extra Class Path" tab, then click "Add" button. Now search for that file you just extracted. Then click "OK". On the bottom of window, you'll see "Driver class com.microsoft.sqlserver.jdbc.SQLServerDriver successfully registered for driver definition: Microsoft MSSQL Server JDBC Driver", that means it worked. Now click the "Aliases" tab on left side of window. Then click the "+" sign button (create new alias). Put any name, select "Microsoft MSSQL Server JDBC Driver". Now for the url, it's going to be like this: jdbc:sqlserver://localhost:1433 localhost can be the ip of your SQL server, if not local, and the 1433 can be changed to another if you have another SQL 2000 instance running or are using another port for the SQL server. The user name is sa, and: SQL 2017: put the sa password given at installation. SQL 2000: leave the pass blank. Then click OK. Connecting to SQL server: Now start SQL server if not started yet: SQL 2017: it already starts on system start. SQL 2000: starts only if you manually run a wine command or run the SQL manager. Then click "Aliases" tab again, select the connection you created, and click the Connect button. To run SQL commands, there's a set of tabs: Objects, SQL, Hibernate, Monitor. Click the SQL tab. Now the torture will start. Type the commands in the SQL commands section and then click the first line, and click the "running guy" button. If you did any mistakes, red text is going to appear on the bottom. SQL Commands: Now continuing, this is the tricky part for those who don't know the SQL language (like me) - you gotta attach using the SQL language (specifically, TSQL for SQL 2000)! The scripts that follow will be the same in all and any SQL clients. Attaching the databases (using SQL 2000 language): EXEC sp_attach_db @dbname = 'dbname', @filename1 = 'dbpathfile.mdf', @filename2 = 'dbpathfile.ldf'; Where dbname is the name of db (either 'accountserver' or 'gamedb'), the dbpathfile.mdf is the path to the db .mdf file in wine, like 'C:\folder\db.mdf' and dbpathfile.ldf is the path to the db .ldf in wine too. So for example: EXEC sp_attach_db @dbname = 'accountserver', @filename1 = 'C:\games\top-server-db\accountserver_data.mdf', @filename2 = 'C:\games\top-server-db\accountserver_log.ldf'; EXEC sp_attach_db @dbname = N'gamedb', @filename1 = N'C:\games\top-server-db\gamedb_data.mdf', @filename2 = N'C:\games\top-server-db\gamedb_log.ldf'; Creating SQL logins (using SQL 2000 language): Now you have to create the logins needed by the server. Type in: EXEC sp_addlogin 'account', 'pass', 'db'; For example: EXEC sp_addlogin 'pko_account', 'Y87dc#$98', 'AccountServer'; EXEC sp_addlogin 'pko_game', 'Y87dc#$98', 'GameDB'; Assigning ownership of databases to a SQL login (using SQL 2000 language): Of course, changing the account names/passwords depending on server file cfgs. Then add the users to the dbs as owners, by typing in: USE db; EXEC sp_adduser 'account', 'account', 'db_owner'; For example: USE AccountServer; EXEC sp_adduser 'pko_account', 'pko_account', 'db_owner'; USE GameDB; EXEC sp_adduser 'pko_game', 'pko_game', 'db_owner'; Creating in-game accounts: Using one of the sql clients above, use the guide below: But just in case the forums get deleted for some reason, it's a good idea to keep a summary of it here - first part to create account, second part to make it gm or not: USE AccountServer; INSERT INTO account_login (name, password) VALUES ('<Login>', '<PasswordMD5>') USE GameDB; INSERT INTO account (act_id, act_name, gm) VALUES ((SELECT MAX(act_id) + 1 FROM account), '<Login>', <GM-level>); Getting the server up and running: Now you also need to unpack the server files to a folder in the: SQL 2000: wine environment used by SQL server. SQL 2017: anywhere as long as you own the folder. It doesn't matter which wine prefix you use either. Databases need to be in the certain folder specified in SQL 2017 guide part. When you do, run them. Now, if you run gameserver, you might run into some errors that usually won't happen in Windows: "Bad allocation" error: Your server is using too much memory. 32 bit programs can use at most 4 GB of memory, but on Linux, for some reason, it can't use that much. Maybe even 2 GB is too much. I'm still not sure how to fix this, but the workaround is to load less things into 1 game server. Running linux with just barebones installed might help (which you would usually do on a dedicated server). "Access Violation" error on GateServer: Regular IP's put at IP key on [ToClient] will make this error to appear. You have to put a long and invalid string on that field. 1231234h25giftuihfi223 is good, hdf8duity357hruasdklhfj is good too. Anything is good, as long as it's not an IP and is long (maybe over 16 bytes long). (EXTRA) Running client on Linux notes: The client can run on a 64 bits prefix wine as well, and performance is like on Windows for me. There are some things to take note that are as follows: It's best to install wine-staging-nine - it has patches that improve dx 9 games. I didn't test the client with it yet, but it should work. Configure it at winecfg at Staging tab. Some private server launchers will require wine-mono to be installed. Net Framework 4.0 might work too (look here: https://wiki.archlinux.org/index.php/wine#Installing_.NET_Framework_4.0). When installing SQL 2000, mono gets uninstalled from that prefix. You might want to create another prefix just for that. The flash bug on the server selection screen has the workaround which is on wine online database. But there's another workaround found by me which only applies to a Linux with borderless and titlebar-less window management - just move the window to the top-left corner until it snaps there. Now Flash will draw normally like on Windows! Removed sections:
-
9 pointsServer rates In this guide I will tell you how to change server rates. To change rates open file variable.lua (Server\resource\script\calculate\) and find variables: EXP_RAID = 1 -- Experience rate MF_RAID = 1 -- Drop rate RESOURCE_RAID_ADJUST = 1 -- Resource drop rate TEAMEXP_RAID = 1 -- Party experience rate ELEEXP_GETRAD = 1 -- Fairy growth rate In that case all rates are equal to x 1 How to add rate for Ships: 1) Add in variable.lua (see above) new variable SHIP_RAID. It will store rate for ship experience: SHIP_RAID = 1 -- Ship experience rate Ship rate is equal to x 1 in that case 2) Open file exp_and_level.lua (Server\resource\script\calculate\) and find function GetExp_PKM(dead, atk). Look below for local ship_expadd = math.floor( math.min(7, (dead_lv / 10 + 2) ) ) and replace it with local ship_expadd = math.floor( math.min(7, (dead_lv / 10 + 2) ) * SHIP_RAID) Then save changes. Now you can specify rate for ship experience. How to make auto rates: You could make rates update automatically depending on your conditions. For example depending on a day time or week day. Let's make so that rates would increase by x 2 every weekends. 1) Experience and ship experience (EXP_RAID and SHIP_RAID). Open file exp_and_level.lua (Server\resource\script\calculate\) and find function GetExp_PKM(dead, atk). At the beginning of the function add the following code: function GetExp_PKM(dead, atk) local day_of_week = GetNowWeek() if day_of_week == 6 or day_of_week == 0 then -- At weekends rates are equal to x 2 EXP_RAID = 2 SHIP_RAID = 2 else -- At weekdays rates are equal to x 1 EXP_RAID = 1 SHIP_RAID = 1 end -- original code ..... end 2) Team experience (TEAMEXP_RAID). In the file exp_and_level.lua (see above) find function ShareTeamExp(dead, team_atker, dead_exp, The_Killer). At the beginning of the function add the following code: function ShareTeamExp(dead, team_atker, dead_exp, The_Killer) local day_of_week = GetNowWeek() if day_of_week == 6 or day_of_week == 0 then -- At weekends rates are equal to x 2 TEAMEXP_RAID = 2 else -- At weekdays rates are equal to x 1 TEAMEXP_RAID = 1 end -- original code ..... end 3) Drop rate (MF_RAID). Open file skilleffect.lua (Server\resource\script\calculate\) and find function Check_Baoliao(ATKER, DEFER, ... ). At the beginning of the function add the following code: function Check_Baoliao(ATKER, DEFER, ... ) local day_of_week = GetNowWeek() if day_of_week == 6 or day_of_week == 0 then -- At weekends rates are equal to x 2 MF_RAID = 2 else -- At weekdays rates are equal to x 1 MF_RAID = 1 end -- original code ..... end 4) Resource drop rate (RESOURCE_RAID_ADJUST). In the file skilleffect.lua find function Check_SpawnResource(ATKER, DEFER, lv_skill, diaoliao_count, ...). At the beginning of the function add the following code: function Check_SpawnResource(ATKER, DEFER, lv_skill, diaoliao_count, ...) local day_of_week = GetNowWeek() if day_of_week == 6 or day_of_week == 0 then -- At weekends rates are equal to x 2 RESOURCE_RAID_ADJUST = 2 else -- At weekdays rates are equal to x 1 RESOURCE_RAID_ADJUST = 1 end -- original code ..... end 5) Fairy growth rate (ELEEXP_GETRAD). Open file functions.lua (Server\resource\script\calculate\) and find function Give_ElfEXP(role, Item, Type, Num). At the beginning of the function add the following code: function Give_ElfEXP(role, Item, Type, Num) local day_of_week = GetNowWeek() if day_of_week == 6 or day_of_week == 0 then -- At weekends rates are equal to x 2 ELEEXP_GETRAD = 2 else -- At weekdays rates are equal to x 1 ELEEXP_GETRAD = 1 end -- original code ..... end That's all! If you have any questions you can ask them here.
-
9 points** dependencies: jQuery & later.js <script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js'></script> <script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/later/1.2.0/later.min.js'></script> source + example: * html template was done with bootstrap.css https://jsfiddle.net/Totoka/pm30r9c6/ Scroll down the javascript page, there is an small object documented here a minified version <script type="text/javascript" src="http://yourjavascript.com/321130410682/event-timer-min.js"></script> @Update 2016-10-17 03:18 + support for custom map states, based in an ordered list by duration in seconds + added default time format HH:MM:SS + Object @Settings re-structured @Update 2016-10-20 13:20 + time diff fixes
-
9 points
-
9 pointsFundraising for official client & game source code Hello friends! As you might already know there are people who sell official game & client source codes (with C++ as a programming language). It seems like there is a huge interest around this topic, as people keep asking me questions about the source every other day. Despite all the doubts and risks user from our forum @Treuno86 acquired them from a CN guy. We asked him whether he's going to share them or not. Treuno replied that he had spent 480$ and nobody had contributed at all. After that we have decided to make a deal: if our community gathers 300$ and then sends him the money, he shares all the original stuff, as he received from the original seller. Sounds quite fair, since he had spent a lot of money alone. So, our community should collect all together 300$ to get source files. If somebody has doubts regarding the source (fake files, wrong sources, etc...), Treuno can provide the proofs. To make sure that these are the original source files I checked them via TeamViewer. Here is one of the files: Character.cpp (GameServer.exe). Why would we need source files: 1. To fix different bugs & backdoors. 2. Improve the game by adding brand new features. The source files include the client and server versions 1.10 and 2.4 In this thread we shall decide who wants to help by donating and how much. Also, we have to decide where to store the money (Paypal most likely, though). UPDATE 06.06.2016 4:30 PM @Treuno86 asked to rise up the price to 400$, I don't think anybody will mind. Also I want to recall that the source files are going to be shared publically to everyone whether people contributed or not. Users who are ready to help (25): RU: ZEST Online Team (@e1mer) World of Chaos Team (@NMS3RR) @Chad @insider @V1tor @Chudik @BotPRO @BETEP/macs509 Mordo Online Team EN: @xtc @Wrexor @Yudha @Jones @Andy @Foxseiz @Andrew @Lucky @Sea King @DevMorgan @LazyKid @Sultan @TheLegend @Onioni @7n6 @GustavoHMA
-
8 pointsHello, I have decided to make a database backup tool since i know some people are in need of it. This tool, you have to edit Config.cfg put your SQL Details, in [Database] Section. In the [Backup] Section you will see : BackupHours - You want your database backed up every 4 hours? Set it to 4 Path - Path to your backups, (Directory must be already made) AccountDB - Name of your accountserver database GameDB - Name of your GameDB TradeDB - Name of your TradeDB Hope you guys like it! Note : Application must stay running Xeon Backup.rar
-
Newsletter