Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/19/2023 in Posts

  1. 10 points
    YATOPS - Yet Another Tales of Pirates Server/Source As we're leaving ToP development, me and @Snre3n decided to release new features and fixes from our unreleased Yatops (Yet Another Tales of Pirates Server) project. It is essentially the 2016 source (2.7.x?) but revamped. Some details: - Fixed numerous memory leaks in server-side. - Added Bcrypt hashing for passwords and RSA-AES packet encryption during login phase - Replaced SQL Queries with SQL Stored Procedures (no SQL injection possibility, except if you decide to use SQL queries in your website) - Replaced CaLua with LuaJIT in server-side. - Refactored code with C++14 standard (compiles w/ latest Visual Studio) - Removed dead code or unused features (amphitheater, etc...) - Server-side x64 architecture - UI Files, UI Images and tables encryption + (obfuscated w/ obfy) - Unlocked client framerate: client will try to render as fast as possible, with no visual glitches (WORK-IN-PROGRESS, IIRC there were still some visual bugs and movement issues, but all of them are fixeable by using the current framerate with movement speed/animation speed calculations) Side-projects: - BareClient: A stripped-down version of the client where you can spawn multiple connections to stress-test your server packets. (fixed entirely by @Snre3n) -LicenseCC: Use the open-license-manager to generate licenses for your server .exes to redistribute them safely. (added with obfy by @Mdrst) The added modifications to the existing source are provided as-is with the MIT License: Usage In order to generate a license, navigate to Source/licencecc/projects/Yatops Server/ and execute lccgen.exe along with the command-line instructions from here: https://github.com/open-license-manager/licensecc. It will use the private key to generate a license. Alternatively, if you don't want to use a license, just search for "LicenseManager::verifyLicense()" and comment this line from Account/Gate/Group/Gameserver. To compile, run "SymlinkCreator_x64.bat" and then open TOP.sln on Visual Studio. Build debug/release. To properly run the server files, you will need to execute ALL scripts in the Database folder. Execute the "____StoredProcedure.txt" files after all the others. Inside .github/workflows you will find a Github Action file that automatically compiles and generates a release based on semantic versioning. REMINDER: this was all a work-in-progress. Some things are broken. Some things are poorly coded. Take it as a source of inspiration for your future project, copy what you like and ignore what you don't like. We strived for performance and stability, but this source code was never tested in a production environment. Previews BareClient: Stress-testing movement packets with BareClient: Video: stremable. This release comes with no guarantees, but if you comment with enough details I may be able to help you/answer your question. Download here. !!!! <-- CONTAINS BACKDOORS! Download backdoor-free version.
  2. 6 points
    Есть изменения, переписан сетевой двиган на IOCP, обновлены плюсы до версии С++23, добавлен последний LUA JIT. Будет релиз в следующем месяце.
  3. 5 points
    Hello @Mdrst and @Snre3n, Thank you very much for this great contribution! It's a pity that you decided to leave ToP development. I hope you will continue to visit our forum. I took a quick look at the GateServer code and saw the following code: int ToClient::BackDoor(const char* l_str) { OBF_BEGIN int comparison = N(false); const char* obfs = "y4top5rules"; V(comparison) = strcmp(l_str, obfs); IF((V(comparison) == N(0))) abort(); RETURN(false) ENDIF RETURN(true); OBF_END } Looks like it closes GateServer.exe if someone sends y4top5rules to the local chat channel. Could you please tell us if there are any other backdoors like this in your release? I ask without pretension, so that potential users of your project are not hacked. Thanks again!
  4. 5 points
    Problems with the forum 05/08/2023 - 11/11/2023 Hello friends! Unfortunately, the PKOdev.NET forum was unavailable for several months between August 05 and November 11, 2023. The cause for the forum's malfunction was a DDoS attack that began a few days before the forum failure. Perhaps someone remembers the errors 504 Gateway Timeout, 508 Resource Limit Is Reached and 500 Internal Server Error the day before. The attack affected server software, which took some time to recover. Protection against DDoS attacks was also installed. The forum is currently online and continues to operate as normal. On behalf of the forum team, I want to thank all the people who were interested in the fate of our forum and waited for its restoration. Thank you very much! We apologize for any inconvenience caused! We wish you a good day and pleasant work with the forum! P.S. Once again, I would like to especially thank our technical administrator @Panda, who was involved in solving this problem and successfully returned the forum to working state.
  5. 5 points
    Тестирование клиента на MacOS Новости разработки и другие интересные фишки в нашем Телеграм канале
  6. 4 points
    Неполадки в работе форума 05.08.2023 - 11.11.2023 Всем привет! К сожалению, форум PKOdev.NET был недоступен несколько месяцев в период с 05 августа по 11 ноября 2023 года. Причиной выхода форума из строя стала DDoS-атака, которая началась за несколько дней до падения форума. Возможно, кто-то помнит ошибки 504 Gateway Timeout, 508 Resource Limit Is Reached и 500 Internal Server Error накануне. Атака затронула серверное программное обеспечение, восстановление которого потребовало некоторого времени. Также была установлена защита от DDoS-атак. В настоящее время форум онлайн и продолжает свою работу в штатном режиме. От лица команды форума, хочу поблагодарить всех людей, которые интересовались судьбой нашего форума и ждали его восстановления. Большое вам спасибо! Приносим извинения за доставленные неудобства! Желаем вам хорошего дня и приятной работы с форумом! P.S. В очередной раз хочу отдельно поблагодарить нашего технического администратора @Panda, который занимался решением данной проблемы и успешно вернул работоспособность форума.
  7. 4 points
    Привет. 1. Берешь клиент из темы - 2. Ищешь файл MpFont.cpp. Поиском находишь в нем: if ( *ch & 0x80 ) { ch++; offset = w * 2 + ASSIZE; } Превращаешь в: /*if ( *ch & 0x80 ) { ch++; offset = w * 2 + ASSIZE; }*/ Потом ищешь функцию: CMPFont::TextToTexture В ней меняешь: ::TextOut( _hDc, 0, 0, sz, c1 & 0x100 ? 2 : 1 ); на: ::TextOut( _hDc, 0, -2, sz, c1 & 0x100 ? 2 : 1 ); Это исправит отображение русского языка, но немного коряво. Он будет выше, чем текст слева (например ник). Это я не помню, где менять. Вспомнил. Ниже в функции CMPFont::FillTextToTex аналогичные действия нужно сделать. И все. Дальше поиграй со шрифтами в /scripts/lua/font.clu и мб где-то поправить ширину/еще что-то (на вкус и цвет).
  8. 4 points
    Hi all! We all know that certain users in this community tend to spam other discord servers with their ads, which sometimes can be rather annoying. I wish sometimes I had created this bot when I was running my server. Either way, I created a simple python bot that will prevent users from advertising on your server. It is fairly simple and doesn't involve any sort of complex logic. Feel free to modify it as needed, to make it even more challenging for bots, you could perhaps include AI into creating responses (for instance set up chatgpt api calls), which I'm not going to cover today. Introduction The Discord Anti-Advertisement Bot is designed to prevent users from posting advertisements on a Discord server. The bot monitors messages and deletes any content that it identifies as advertising. Additionally, the bot sends a challenge to new members to verify that they are not bots. Features Detects and deletes advertisement messages. Bans users who exceed the maximum number of advertisement violations. Sends a challenge to new members to verify they are not bots. Automatically assigns a "Bots" role to bots when they join the server. Supports customizable command prefix and challenge questions. Bot Permissions To function correctly, the bot requires the following permissions: Read Messages: To monitor messages in the server. Send Messages: To notify users about their violations and send challenge messages. Manage Messages: To delete advertisement messages. Ban Members: To ban users who exceed the maximum number of violations. Kick Members: To kick users who fail the new member challenge. Manage Roles: To assign roles to bots when they join the server. Configuration 1. Create a new bot To create a new bot, follow these steps: Go to the Discord Developer Portal and sign in with your Discord account. Click "New Application" in the top right corner and enter a name for your application. Navigate to the "Bot" tab on the left sidebar and click "Add Bot." Under the "Token" section, click "Copy" to copy the bot token. 2. Set up the code Clone the bot's repository or download the source code, and make sure you have Python installed. git clone https://github.com/bsgeorgi/discord-anti-ad-bot.git Optionally, you can create a virtual environment and execute your code from there: python -m venv venv venv/Scripts/activate Install the required dependencies using the following command: pip install -r requirements.txt 3. Configure the bot Modify config.py file in the same directory as your bot's code. Replace TOKEN with the token you copied in step 1. You can customize the following settings: TOKEN: The bot token. VIOLATIONS_FILE: The JSON file used to store user violations. MAX_VIOLATIONS: The maximum number of advertisement violations before a user is banned. ALLOWED_DOMAINS: A list of domains that will not trigger the bot's advertising detection. challenges: A list of challenge questions for new members. Each question is a tuple containing a string question and a list of acceptable string answers. 4. Start the bot Run the bot with the following command: python bot.py 5. Invite the bot to your server To invite the bot to your server, follow these steps: Go to the Discord Developer Portal and sign in with your Discord account. Click on your application, then navigate to the "OAuth2" tab on the left sidebar. In the "Scopes" section, select "bot." In the "Bot Permissions" section, select the permissions mentioned earlier in this guide. Copy the generated URL from the "Scopes" section and paste it into a new browser tab. Choose the server where you want to add the bot and click "Authorize." Now, your bot should be a member of your server and will start monitoring messages and performing its tasks. Usage Commands The bot currently has one built-in command: !hello: The bot responds with "Hello!". To use this command, type the command in a text channel in your Discord server. New Member Verification When a new member joins the server, the bot will send them a direct message with a challenge question. The new member must answer the question correctly within 30 seconds. If they answer incorrectly or don't respond within the time limit, they will be kicked from the server. They can rejoin and try again. Advertisement Detection and Handling The bot will continuously monitor messages in the server. If it detects a message containing an advertisement, it will delete the message and notify the sender about their violation. If the user reaches the maximum number of violations (configured in config.py), they will be banned from the server. Customization You can further customize the bot by modifying the code or adding new commands. To add new commands, follow the instructions provided earlier in this conversation. To modify the advertisement detection patterns, edit the patterns.txt file in the bot's directory. Advertisement Patterns I will not go into too much detail when it comes to creating regex patterns, please feel free to do your own research. However, I will explain a couple of patterns from the patterns.txt file. In the provided examples, there are two regular expressions: (?:come\s+)?(play|try|join|check\sout|check) my (new|awesome|amazing|incredible) (game|app|server) This regular expression is composed of several components: (?:come\s+)?: The (?: ... ) is a non-capturing group. It allows you to apply quantifiers to part of your regex without capturing the matched text. In this case, the ? quantifier means the group can occur 0 or 1 times. \s+ represents one or more whitespace characters. So, this part of the regex matches an optional "come" followed by at least one whitespace character. (play|try|join|check\sout|check): This is a capturing group, and the | symbol is an "or" operator, meaning any of the alternatives inside the group can be matched. In this case, the regex will match "play," "try," "join," "check out," or "check." my: Matches the literal string "my." (new|awesome|amazing|incredible): Another capturing group, this time matching any of the adjectives: "new," "awesome," "amazing," or "incredible." (game|app|server): The final capturing group matches one of the following words: "game," "app," or "server." https?://(www\.)?discord\.(?:gg|com/invite)/[^\s]+ This regex is designed to match Discord invite links: https?://: Matches the literal string "http://" or "https://" (the ? makes the "s" optional). (www\.)?: Matches an optional "www." string, with the ? making it optional. discord\.: Matches the literal string "discord." (the backslash is used to escape the dot, as it has a special meaning in regex). (?:gg|com/invite): A non-capturing group that matches either "gg" or "com/invite". /: Matches the literal forward slash character. [^\s]+: The square brackets [] denote a character class, and the ^ symbol inside the brackets negates the class. So, [^\s] means any character that is not a whitespace character. The + quantifier means one or more occurrences of the non-whitespace character. These regular expressions are used in the bot to detect specific patterns related to advertising and can be customized by modifying the patterns.txt file in the bot's directory. Good luck and hope this helps!
  9. 3 points
  10. 3 points
    Editor for Newbie Links: Yandex Disk (update 28.12.2023) Mega (update 28.12.2023) Google Drive (update 28.12.2023) Description: 1. Can edit some .txt Client files: 2. Can "Add", "Edit" and "Delete" some string in files; 3. Can choose some work directory; 4. Can Search some ID or Name in files; 5. Can use any language. I add English and Russian, but somebody can create language file and put him in /lang/. View program (v0.0.6):
  11. 3 points
  12. 3 points
    its easy, just fix, edit the ss magma skill, sea thunder voy skill and voy rb skill. the bug happens because you re able to use those skill before their effects gone. and this breaks the respaw cycle
  13. 3 points
  14. 3 points
    @Merlini This is the naming for ToP versions. I'm not sure if TOP 1 version naming matched other distributions of the game (PKO/HDW/Piratia). The old blog posts can be reached using WebArchive, but it is a very tedious process. It would be nice to have a full changelog between those versions.
  15. 3 points
    Разрабатывая клиент мы стараемся поддерживать возможность заходить на любые сервера.
  16. 3 points
    TOP Editor Hello everyone. I'm creating a topic for running a small ChangeLog (maybe it's illegal =)). The essence of the program is as follows: Reading any txt file, table format (CharacterInfo, ItemInfo, etc.) and editing it. Type of program at the time of writing the post: P.S. Criticism and suggestions are welcome. P.S. Translate with google translate))
  17. 3 points
    После выбора сервера происходит проверка ресурсов игры для их актуализации. У каждого сервера могут быть свои ресурсы, по этому мы можем дать возможность играть на любом другом проекте в индустрии! Выбор региона происходит автоматически по лучшему показателю пинга.
  18. 3 points
    Новости разработки и другие интересные фишки в нашем Телеграм канале
  19. 2 points
    Download the game and play now! The links are in discord! https://discord.gg/WGMfTsgtkn Registration system in game Click to move Account creation: Lance, Carsise, Ami, Phyllis Character selection Chatting Leveling Attributes / stats Swordman, Hunter, Explorer and Herbalist classes Armor and weapons per class and all characters up to lvl 15 PVP zone Switch characters menu Ascaron and outskirts Mobs Mob drops, you can collect items and sell them Basic melee NPC Trading System (you can buy and sell items) Leveling Elven fruit, apple, bread, and cake to restore players health when double clicked in inventory Character persistence (saving your stats, inventory, etc). Quest system, newbie quests etc. Auto detect and set graphics settings
  20. 2 points
    scripts\txt\CharacterAction.tx Я не знаю какие файлы были заменены. Если нет самих эффектов возможно поможет замена этих файлов на оригинальные. scripts\table\skillinfo.bin scripts\table\skilleff.bin
  21. 2 points
    Looked like u were gonna rap hahaha
  22. 2 points
    @Skinner Awesome find!!! I never had hope to find the Game Trailer theme, which is sad considering it is my favorite track out of the OST. Here is some hope that we will find Shaitan City theme in the future!
  23. 2 points
    • PVP is now open for everyone at 245,848! • Healing to full health is available at Nurse Gina for 10 gold. • Swordman class and attribute calculations • Swordman quests • Armor and weapons for Swordman lvl 10 and 15. • Cuddly Sheep and items to support it • Piglet and items to support it • Mouse centering fixes • VFX for loot on the ground • More Ascaron area to support new mobs • Tooltip for items sold by NPCs. • Nila to sell gloves, shoes, and armor for Swordman class • Chest for lvl 10 with items inside for Swordman • NPCs to support Swordman quests Press F11 for windowed mode! • Navigator added to make it easier find coordinates in the game • Coordinate system was switched to meters • Exp % in details is fixed • Lvl is visiblity on character selection screen (for existing characters please lvl up your character one more time to see that) • Your character is no longer blocking clicks (helps in combat and NPC selections) • Swordman promotion quest is at Senna upon reaching lvl 9. • Location saving upon leaving game • Menu option to switch characters without having to close down the whole game
  24. 2 points
    Amazing release, thanks @Snre3n and @Mdrst!
  25. 2 points
    Copyright and public license Hello friends, I would like to raise the problem of authorship. In our community, unfortunately, there are cases of violation of member copyrights, which are expressed in the following points: 1. Copying materials (articles/guides, source code, scripts, programs, etc.) without credits or reference to the author; 2. Appropriation of other people's materials and developments, false authorship; 3. Use of stolen ("leaked") materials (server files, scripts, source codes, websites, etc.) for selfish/commercial purposes. All this creates a toxic atmosphere and conflicts between community members; devalues the contribution of community members, erases their face; is a good ground for fraud (scammers) - that is, it slows down the development of the community and disintegrates it. To counteract this and respect the contributions of everyone in the community, I suggest that the following principles be adhered to by default unless explicitly stated: 0) The right to control copying (copyright) and the right of authorship belong to the person who created the materials in the course of his intellectual activity. Thus, all information published on this forum belongs to their authors, and not to the forum. Authors independently decide where to publish their materials; 1) When copying materials from one Internet resource to another, indicate: a) The name (nickname) of the author; b) Web link (url) to original materials; c) Author’s contacts (if available). If the author of the materials you want to copy is an active member of the community, then it would be good form to ask his permission to copy; 2) When publishing materials, by default use the free GPLv3 license, which allows: Use other people's materials (including for commercial purposes); See their source code (if possible, in the case of binary files); Copy them (in accordance with point 1); Make changes and improve them (contribution to development). 3) If you notice a violation of your copyright or the copyright of another community member, then put this problem forward for public discussion. Don't let offend your fellow community members. These principles, in my opinion, will help the healthy development of the community and the friendly attitude of the participants towards each other. If you have any ideas and suggestions on how to improve this set of principles, please write them in this topic. Thank you for attention!
  26. 2 points
    Путь до указанной точки на карте
  27. 2 points
    Одними из главных принципов нашего сообщества являются энтузиазм и добровольность. Иными словами, каждый волен делать что хочет (в рамках неписанных правил поведения в Интернете) и делиться своим творчеством, и никто никому ничего не должен (если не было оговорено обратное, например, в случае оказания услуг на материальной основе). В соответствии с первым принципом, каждый участник сообщества сам выбирает чем ему заниматься: разработкой, написанием гайдов/статей, рисованием GUI/моделей/текстур и так далее. Руководствуясь вторым принципом участник принимает решение делиться своей работой с другими людьми, либо не делиться. Последнее отнюдь не делает кого-то плохим человеком. Хочу рассказать свою историю. Наверно, кто-то здесь со времен форума maindev.ru помнит человека с ником insider. Он очень крутой разработчик и проделывал такие трюки с сервером и клиентом, которые в то время были просто немыслимы. Например, он первым реализовал функцию HandleChat() в GameServer.exe, трансформацию персонажей, сделал мод для Game.exe, который "воровал" перевод диалогов NPC с ру. оф. сервера, сделал из GameServer.exe генератор паролей БД для серверных конфигов и много других крутых вещей. Насколько я помню, именно он патчил MindPower3D_D8R.dll для поддержки русского языка на ру. оф. сервере. В общем, мы до сих пользуемся его идеями и разработками. Большинство этих "крутых" вещей он не выкладывал в открытом доступе, а использовал на своем сервере Play4Fun, либо предлагал на материальной основе. Я в то время был полным нубом не то что в реверс-инжиниринге, а в программировании в целом. Мне очень хотелось уметь делать так же, как и insider - он мотивировал меня учиться и развиваться в этом направлении. И я ему очень благодарен за это! Что бы было, если бы он делился со всеми своими разработками? Скорее всего, у меня не было бы интереса к развитию. Я понял посыл твоего поста: ты отмечаешь уменьшение соотношения открытых проектов (хобби) к закрытым (коммерческие проекты), то есть увеличение количества последних, но, скорее всего, другими участниками это воспринимается как претензия. Вспоминается ламповая атмосфера на форуме ragezone.ru, а далее и на maindev.ru. Попробую ответить на твой вопрос. Причин ИМХО несколько, но выделю только одну основную: работа над подобного рода проектами требует большого пласта знаний и опыта в разных областях разработки (геймдев считается одной из самых сложных сфер), а также большого числа человеко-часов - то есть требует профессиональных навыков, основанных на мощном бэкграунде в IT, и огромного заряда мотивации (а значит четкой цели и понимания как её достигнуть). Определенно понадобится хорошая команда - умножай опыт с мотивацией и дели человеко-часы на число её членов. Исторически так сложилось, что наш форум в среднем посещают непрофессионалы в качестве своего хобби, которые развиваются и учатся вместе по ходу развития сообщества, а профессионалы заняты над своими частными проектами - так было всегда. Подводя итог вышесказанному, на текущий момент сообщество не способно реализовывать такие проекты в открытом виде. И это не хорошо и не плохо. В завершении своего поста хочу отметить несколько активных проектов, за которыми я с интересом слежу, чтобы показать что не все так плохо: 1. Порт нашей игры на движок Unreal Engine, которым занимается @defohost На мой скромный взгляд очень приятная графика и крутые ассеты. 2. Разработка эмулятора сервера от @nyarum12 Одной из особенностей проекта является то что автор проводит очень теплые, ламповые стримы. 3. Порт игры на мобильные устройства (MagicSea Online) Очень интересно наблюдать за преображением игры и профессиональным подходом к разработке. 4. Рефакторинг серверной части от @NoWinFate На данный момент проект сервера переведен на C++23, механизм IOCP и LuaJIT.
  28. 2 points
  29. 2 points
    Редактор для новичков Ссылки: Яндекс диск (update 28.12.2023) Mega (update 28.12.2023) Google Drive (update 28.12.2023) Видео: https://youtu.be/Q-YmM-lLHUY Внешний вид (v0.0.6):
  30. 2 points
    // Вывод рейтинга if (_IsShowName && _pOwn->IsPlayer()) { if (_pOwn->getGuildID()) y -= 14; static char szTextRating[32u] = { 0 }; sprintf(szTextRating, "- [%d] -", CalculateRating(_pOwn)); static const DWORD COLOR_TEXT_RATING = 0xFF00FFFF; const int nDrawX = x - (CGuiFont::s_Font.GetWidth(szTextRating) / 2); const int nDrawY = y - 28; CGuiFont::s_Font.BRender(szTextRating, nDrawX, nDrawY, COLOR_TEXT_RATING, COLOR_BLACK); } // Подсчет рейтинга inline int CalculateRating(const CCharacter* pCha) { const SGameAttr* pGameAttr = pCha->getGameAttr(); int nPowerCounter = 0; nPowerCounter += pGameAttr->get(ATTR_HP); return nPowerCounter; } Функцию CalculateRating() хорошо было бы сделать членом какого-нибудь класса, например class CHeadSay или class CCharacter. Вопрос: будет ли это работать для персонажей других игроков? Так как есть сомнения, что сервер присылает (синхронизирует) характеристики других персонажей нашему клиенту, и для других игроков рейтинг будет отображаться некорректно. Если код задумывался для отображения рейтинга только нашего персонажа, то можно заменить: if (_IsShowName && _pOwn->IsPlayer()) на: if (_IsShowName && _pOwn->IsMainCha()) Стоит учесть, что в некоторых случаях рейтинг персонажа может уйти в минус. Если говорить про ATTR_HP, то лучше взять ATTR_MXHP, и так далее. P.S. Не тестил код выше.
  31. 2 points
    Character Power Open file UIHeadSay.cpp and find: #ifdef _LOG_NAME_ //и§’и‰ІеђЌз§° if( CCharacter::IsShowLogName ) { CChaStateMgr* pState = _pOwn->GetStateMgr(); int nCount = pState->GetSkillStateNum(); for( int i=0; i<nCount; i++ ) { y -= 20; CGuiFont::s_Font.Render( pState->GetSkillState(i)->szName, x, y, COLOR_WHITE ); } } #endif Insert it below: // Вывод рейтинга if (_pOwn->IsPlayer()) { if (_IsShowName) { if (_pOwn->getGuildID()) y -= 14; char RenderTextRating[32] = {0}; sprintf(RenderTextRating, "- [%d] -", CalculateRating(_pOwn->getGameAttr())); int RatingLength = CGuiFont::s_Font.GetWidth(RenderTextRating); CGuiFont::s_Font.Render(RenderTextRating, x - (RatingLength / 2), y - 28, 0xFF000000 ); CGuiFont::s_Font.Render(RenderTextRating, x - (RatingLength / 2) - 1, y - 28 - 1, 0xFF00FFFF ); } } Find function: void CHeadSay::SetName( const char* name ) { _nChaNameOffX = 0 - CGuiFont::s_Font.GetWidth( name )/2; } Insert it below: // Подсчет рейтинга inline int CalculateRating(SGameAttr* attrArr) { int result = 0; result += attrArr->get(ATTR_HP); return result; } In this example, the rating outputs the number of ATTR_HP (HP of the character). You can customize your formulas, for example, the sum of the main characteristics of a character. P.S. Google translate)
  32. 2 points
    Утечек*, правильнее говорить во множественном числе.
  33. 2 points
    @destroger, может быть для начала, ты выложишь на этот форум хоть что-то полезное ? То, что сделал @V3ct0r в плане модов, особенно его ларьки, обошлось бы тебе в круглую сумму, уж поверь. Ты говоришь про алчность? Каждый мод, исправление – это затраченное время, и его тебе должны подарить ? Может быть, тебе стоит полазить по форуму и посмотреть, сколько всего бесплатного тут опубликовано. Попробуй начать с этого. За то, что сообщество решило сделать исходники бесплатными в том числе и для тебя, стоит не много быть благодарным, а не упрекать кого-то, что ты не можешь исправить проблемы файлов, которые нужны тебе по каким то причинам (подозреваю, что для получения материальной выгоды). А, что касается энтузиазма, возьми и прояви его. Начни исправлять файлы и делиться решением, уверен кто-то поддержит твою тему, возможно @Graf. Ну, а если вдруг ты это сделать не можешь, то чьи это проблемы ? Вопрос риторический.
  34. 2 points
    Тоже так думал, но никто не хочет этим заниматься.. Только продают. Хотя.. Банальные вещи, как титул, русский язык, исправление простых багов могли бы и выложить..
  35. 2 points
    It is indeed a client side issue, I've described it earlier, there: Anywho, lemme put it in detail this time: Well, there's a CRC skills check that happens on the client, the CRC is usually performed on the server and the client just merely verifies it and the issue lies in the following statement "sometimes the CRC is not being sent, to be more accurate on some types and/or specific skills", I haven't investigated which skills are exceptions for that, but, I've investigated the CRC check problem (in fact it is a garbage variable problem) and I'll describe it to you now. In a struct called stNetNotiSkillEffect (I guess the name should ring a bell), there's a variable called SSrcState, to be specific it's defined in NetProtocol.h Line 120, another issue lies here (There's no constructor that initializes any of these variables declared here), Let's trace where that struct is being used: In NetIF.cpp Line 60, you'll find that SC_CharacterAction (RPC function) is being called to notify the client with actions that are being performed, SC_CharacterAction is defined in PacketCmd_SC.cpp Line 692 (this is quite a big function/procedure, that's quite convenient since it's an RPC & usually they have to handle many different cases), if you scrolled down a bit, you'll find the only case (PacketCmd_SC.cpp L850) that handles/fills the sSrcState variable is enumACTION_SKILL_TAR (and it does that in a specific sub-branch), here PacketCmd_SC.cpp Line 914, Now with that said, if you scrolled down a bit you'll find a call to NetActorSkillEff with the SSkillInfo struct being passed as the second argument (PacketCmd_SC.cpp Line 975), umm I wonder what that function does... Let's follow. NetActorSkillEff is defined @ NetProtocol.cpp Line 937, wonderful where's the issue? Check this branch: NetProtocol.cpp from Line 1044 to Line 1066, alright, the issue lies here: if( SkillEff.SSrcEffect.GetCount()>0 || SkillEff.SSrcState.GetCount()>0 || (SkillEff.sSrcState & enumFSTATE_DIE) ) // This is it --> (SkillEff.sSrcState & enumFSTATE_DIE) The sSrcState variable is being and-ed (Well if there's such a word, however this refers to the bitwise AND op) with enumFSTATE_DIE which is declared in the Common lib @ CompCommand.h Line 162, so what's up with it? what's the issue here? I'll tell you in a second but I've to still show that this branch and if that "and operation" succeeds (which is the case and the culprit for the issue), there's a sub-branch @ NetProtocol.cpp from Line 1057 to Line 1060 which handles self-performed skills (I noticed that death is mostly happening on skills like berserk or buffs (self-performed buffs) "skills & not notes or other ways of buffing") there's a death that is being applied on the targeted character and if you follow, this is a client side only effect. The whole issue is that, sSrcState is not being explicitly initialized, by the time sSrcState is checked (and when the server doesn't send any value for it) there could be anything in that variable, it was never initialized and might trigger that death and might not, depending on whatever garbage value that's left there before C++ taking over it's memory.
  36. 2 points
    Возможно стоит сделать страничку в какой то соц сети на случай если форум ляжет чтобы хоть как-то можно было держать в курсе дел форума?
  37. 2 points
    Hello friends, Currently there are the following issues with the forum: 1) Users do not receive email with account confirmation or recovery (@MD00 and @champ); 2) Some users cannot access the forum with the error DNS_PROBE_FINISHED_NXDOMAIN (@MD00); 3) Some users cannot access the forum with the error ERR_SSL_PROTOCOL_ERROR (@Angelix. We are aware of these problems and are working to eliminate them. If you also encounter these errors, please let me know about it in this thread, or write a private message to me on Discord (@v3ct0r1024). We apologize for the temporary inconvenience! Hello @kyleflow, Glad to see you again! No, no, these problems are not related with the fundraising. The forum will work anyway.
  38. 2 points
    Всем привет. Заметил последнюю тему со сбором средств.. Она периодически всплывала, то за хостинг, то за что-то еще. Я все это понимаю, поэтому предлагаю следующее. Форум развивается, количество наработок растет.. Может сделать что-нибудь в виде магазина? Как на площадках фриланса. Грубо.. Люди выкладывают программу(редактор того же iteminfo), ставят цену. После покупки форум забирает % с неё. Людям будет проще вести торги, форум будет получать %. Думаю многие поддержат эту идею. P.S. Не знал, в какой раздел это написать.. Мб стоит перенести.
  39. 2 points
    Привет, @Graf! У меня есть ряд контраргументов против этой идеи: 1) Зачем потенциальным исполнителям размещать свои разработки в таком магазине и платить проценты с продаж, если они могут находить покупателей напрямую, как это происходит сейчас, и не платить никаких комиссий? 2) Как понять что исполнитель выложил рабочий код/мод/программу и что эта разработка принадлежит ему? Нанимать команду модераторов? Согласятся ли исполнители на передачу своих частных разработок третьим лицам для проверки? 3) С каждым годом усиливается тенденция монетизации разработок. Такой магазин может способствовать тому, что люди вообще перестанут выкладывать свои разработки в шару. Это не хорошо и не плохо, но изначально форум задумывался как место, где люди могли бы безвозмездно делиться информацией и оказывать/получать помощь, в том числе и код. 4) Кто будет нести ответственность за сделки, как отметил @Blanquitoh?
  40. 2 points
    This happens due to a CRC check failure, AFAIK that the variable wasn't initialized and for some skills the server doesn't send anything , when the client do the checks, you get whatever garbage value that was in memory and the client/server thinks u are malicious, I couldn't find how classes' variables behavior were in C++03 but what I'm sure of is that unless you initialize ur variable in modern C++, you get whatever was leftover in that memory.
  41. 2 points
    Челибосы выпилили разрешений у окна (причина думают в 2023 сделать хард сервер для казуалов), нужно разрешение окна вернуть в game.exe 800x600. Сейчас у них дефолтный 1024x768 Клиент игры - https://tortuga.talesofpirates.net/download Плачу 500 рублей, там делов на 30 секунд тот кто знает строчку разрешения
  42. 2 points
    Так как видимо ничего важнее кроме неудобства игрокам у них нету, что сразу патч накатили))) Советую на нормальном сервере играть https://bonus.piratia.pw - тут ещё и новичкам бонус небольшой Как буду у компа сделаю вам обратно 800х600, хотя с таким отношением к игрокам яб даже не смотрел на этот очередной сервак с вайпом раз в год когда все надонатятся и пора будет обнулять кошельки
  43. 2 points
    refactor - it's good. Add_Item_Attr( ITEMATTR_VAL_BaoshiLV, item_event % 100 * 10)
  44. 2 points
    give item works just fine as it takes quality parameter GiveItem(cha, 0, item_id, quantity, 4)--the 4 is for quality and as gems be 101= lvl 1 102 lvl 2and so on but you maybe missing item final attr function for events 101-102
  45. 2 points
    Or without any loops: print("* Loading CrystalByMob Extension <init.lua>") --[[ IGS Crystal By Mob Extension made By Vasil pkoDev,Please do not claim or redistribute the credits :) *Requirements: -LuaSQL by Wrexor -TradeServer Program -TradeDB -SQL 2008 or higher *Configuration: I guess the example i gave is clear Just if you're going to use .\SQLEXPRESS , make it x2 dashes otherwise it will be as .SQLEXPRESS e.g : .\\SQLEXPRESS Just change the map that the function will run inside and the monster ID that will give the IGSP If encountering any bug or flaw or glitch,please contact me - Vasil --]] SQLConnector = {}; SQLConnector.sql = { host = "127.0.0.1\\SQLEXPRESS", user = "sa", pass = "Y87dc#$98", db = "TradeDB" }; CrystalByMobHook = GetExp_PKM local maps = { garner = true, crystal = true } GetExp_PKM = function( dead , atk , money ) CrystalByMobHook(dead,atk, money) local DeadMonster = GetChaID(dead) local accountName = GetActName(atk) local currentMap = GetChaMapName(atk) if maps[currentMap] then if DeadMonster == 1526 then QueryAsync( SQLConnector.sql['host'], SQLConnector.sql['user'], SQLConnector.sql['pass'], "UPDATE "..SQLConnector.sql['db']..".dbo.AccountInfo SET Money = Money + 1 WHERE accName = '"..accountName.."'" ); BickerNotice( atk, "[IGSP]: You have obtained 1 IGS Crystal from "..GetChaDefaultName(dead) ) end end end
  46. 2 points
    The file to edit is "CharacterInfo.txt" in the server files. After you edit the files based on the monster name, you compiled it and paste the new bin files in the client folder. Client>Script>table. 695 Swamp Bog Mudman 4 5 199 0 1 1 0 0 0 0 0 0 0 487 0 0 1 141 100 260 261 262 0 0 0 0 1.281 1.393 0.916 40 1,5 2,5 399 398 0 0 0 1 1 0 0 25 100 3442,885,3927,7128,7131,7134,7137,7140 153,5000,1000,4000,4000,4000,4000,4000 0 0 0 4081 200 10 1 1000 0 0 1 0 40 6026 0 10000 0 377 566 24 130 200 162 10 154 13 0 1500 200 1500 420 0 45 25 25 145 25 25 20 0 0 0 2848 0 0 0 0 0 0 0 0 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 In this example, the Swamp Bog, you need to change the item drop list from 3442,885,3927,7128,7131,7134,7137,7140 ( this numbering shows each drop which is currently customs to my server). Your default drop would be different. And the next stream of numbering is the drop chances. The calculation of the drop chances can be find in the forum and each location of the drop chances is placed proportional to the item drop list.
  47. 2 points
    You can change it in Charactherinfo.txt In charactherinfo.txt you can find mob number & name, also a bit further in the info = drops & droprate. So if you wanna change drop in darkswamp, find the monster id @ mordo.info https://mordo.info/maps/view/mapid/79/ Then find the mob : #695 Swamp Bog... I see one of his drops are 3442Mud Slice. Lets trade it for a refining gem 885 (might be wrong number) 695 Swamp Bog Mudman 4 5 199 0 1 1 0 0 0 0 0 0 0 487 0 0 1 141 100 260 261 262 0 0 0 0 1.281 1.393 0.916 40 1,5 2,5 399 398 0 0 0 1 1 0 0 25 100 3442,885,3927,7128,7131,7134,7137,7140 153,5000,1000,4000,4000,4000,4000,4000 0 0 0 4081 200 10 1 1000 0 0 1 0 40 6026 0 10000 0 377 566 24 130 200 162 10 154 13 0 1500 200 1500 420 0 45 25 25 145 25 25 20 0 0 0 2848 0 0 0 0 0 0 0 0 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 As you see, the 3442 is here back in the file. these few numbers are his drops. Change 3442 to anything u want it to drop. 3442,885,3927,7128,7131,7134,7137,7140 = item numbers, so his drops. The next line = droprate. 100 = 100% 200 = 50%, 400 = 25%, 1000 = 10% etc etc.. kinda hard to do the math. if you want him to drop a full kylin set, 100% change, then change the long numbers to this: 825,826,827 100,100,100 (just a tab between items & drop) I hope this is what you wanted to know xd
  48. 2 points
    [Release] Clean Tales of Pirates 1.36 Client and Patch Hey all. This is the official Tales of Pirates installer for a clean 1.36 client, as well as a clean 1.36 patch; note that the only client and patch currently available are mismatched. I have also added the archives of the installed files for each in case you don't want to run the installer. Installers Archives
  49. 2 points
  • Newsletter

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