-
Content Count
2,902 -
Joined
-
Last visited
-
Days Won
519
Everything posted by V3ct0r
-
Вытащи ID предмета из слота экипировки. По другому вроде никак
-
local con = GetItemAttrRange(<ID предмета из ItemInfo.txt>, ITEMATTR_VAL_CON, 0)
-
Попробуй сделать как в этом гайде. Только вместо времени проверяй какой-то признак персонажа, в зависимости от которого выбирается язык.
-
puzzleworld\entry.lua В функции after_create_entry( ) вызывается функция GetMapEntryCopyObj( )? function after_create_entry(entry) local copy_mgr = GetMapEntryCopyObj(entry, 0) // !!! именно 0 . . . end
-
Создание собственной Бинд-кнопки и обход антибота
V3ct0r replied to Waka~'s topic in Пиратия: Помощь
А смысл? Ты её отключишь, а сервер отправит 3 запроса на капчу и не получит ответа. В результате тебя кикнет. Я бы попробовал написать DLL'ку, которая перехватывает нажатия клавиш и отправляет соответствующие пакеты на сервер. -
Очень жду, интересно почитать. Или ты ждешь, пока тебе здесь ответят как обойти данный антибот?
-
Ничего подобного. В данном случае, помогать просто так не хочешь именно ты, и при этом проецируешь свое странное поведение на весь форум. Напиши пару статей, выложи разработанные тобой программы или скрипты, внеси вклад в наш форум, и все будут тебе рады. Понятное дело, это гораздо сложнее, чем писать глупые комментарии.
-
А как её надо написать, чтобы работало как надо? Все что эта штука учитывает задано в исходнике и про пати, как было отмечено выше, здесь речи нет: if ( pMainCha != nullptr && pCha != nullptr ) { if ( pMainCha->get_id() != pCha->get_id() ) { // Проверим, что персонажи не находятся в СВ if ( OurMap != "guildwar" && OurMap != "guildwar2") { if (pMainCha->get_guild_id() == pCha->get_guild_id()) { // Если персонажи в одной гильдии // то устанавливаем зеленый круг side_id = 1; } else { // Если персонажи не в одной гильдии // то устанавливаем красный круг side_id = 2; } } } }
-
@mkhzaleh, this version of DLL works only with Russian client. You need to find the following addresses in Game.exe from your client and correct the source code: // Main Character address const DWORD MainChaStaticAddr = 0x0067061C; // Address of the function NetSwitchMap( ) const DWORD NetSwitchMapAddr = 0x005071A0; // Address of the method CCharacter::setSideID( ) const DWORD SetSideIdAddr = 0x004A2950; // Given addresses are for Russian client
-
line 50: replace 'null' to 'nil'
-
Чтобы не редактировать каждую функцию, так как их может быть много, можно перехватывать каждую begin- и end-функцию и подставлять наш исправленный код. В папке GameServer\resource\script\calculate создаем скрипт manufacture_fix.lua со следующим содержимым: print("Loading file manufacture_fix.lua") -- Таблица функций мануфактуры -- которые необходимо исправить local manufacture_fix_table = { --[[ [ID предмета] = { func_beg = "begin-функция", func_end = "end-функция" }, ]]-- [1136] = { func_beg = "Skill_ShanGD1_Begin", func_end = "Skill_ShanGD1_End" }, [1137] = { func_beg = "Skill_FuShe1_Begin", func_end = "Skill_FuShe1_End", } } -- Begin - функция function manufacture_fix_begin_func(role, sklv) local NocLock = KitbagLock(role, 0) if NocLock == LUA_FALSE then SystemNotice( role , "Inventory has been binded") return 0 end end -- End - функция function manufacture_fix_end_func(ATKER, DEFER, sklv, item_id) -- Наш код local atk_role = TurnToCha(ATKER) local item_count = CheckBagItem(atk_role, item_id) if item_count <= 0 then SkillUnable(atk_role) SystemNotice(atk_role, "Does not possess required item to use skill") return 0 end DelBagItem(atk_role, item_id, 1) -- Вызываем оригинальную функцию _G[manufacture_fix_table[item_id].func_end .. "_original"](ATKER, DEFER, sklv) end -- Связать end - функцию с ID предмета function bind_func(item_id) return function(ATKER, DEFER, sklv) return manufacture_fix_end_func(ATKER, DEFER, sklv, item_id) end end -- Перехватываем функции мануфактуры for item_id, data in pairs(manufacture_fix_table) do _G[data.func_beg] = manufacture_fix_begin_func _G[data.func_end .. "_original"] = _G[data.func_end] _G[data.func_end] = bind_func(item_id) end Заполняем таблицу manufacture_fix_table и подключаем скрипт manufacture_fix.lua в конце файла skilleffect.lua dofile(GetResPath("script\\calculate\\manufacture_fix.lua")) В результате скрипт автоматически исправит баг с мануфаком и вам не придется вручную редактировать каждую функцию. P.S. Не тестировал, но должно работать
-
This is GameServer.exe problem void CEventHandler::Event_ChaDie(CCharacter *pDead, CCharacter *pAtk) pPlayer = pHarm->pAtk->GetPlayer(); if(pPlayer == NULL) { LG("team_error", "it appear especially error when check teammate experience assign, player finger is null!, character name[%s]\n", pHarm->pAtk->GetName()); break; } I think you can ignore that
-
Hello, @FapFap Show your check_can_enter_garner2 function from garner2\entry.lua
-
Hello, @Java Script! I think you can see how to install it on the official site (Installing Zend Server on Windows) http://www.zend.com/en/resources/zend-documentation
-
Да, здесь суть защиты от GM команд заключается в том, что GM команды могут использовать только персонажи с ID 1 и 2 в базе данных GameDB (поле cha_id, в таблице character). Команду &lua вообще никто не может использовать. Команду &updateall можно использовать раз в 5 секунд. P.S. Можно на "ты"
-
Замени на function HandleChat(role, message) return 1 end
-
@FapFap, do you see any messages in the system chat after you perform apparel strengthening? Look for them in file forge.lua and you will find code that removes Strengthening Crystals.
-
Line 15305: AllExAttrSet(role) 'role' is undefined variable. I think you can remove this line without any damage.
-
Hello! What is Pirate Club System?
-
Ищи в скриптах строку "trying to use gm command!". Notepad++ умеет искать сразу по нескольким файлам.
-
Это всего лишь инструкции, вопрос в том, за что отвечает пропатченный код и из-за чего возникла проблема запуска клиента. По его словам, он выполнял эту разовую работу по заказу Нивала.
-
Персонажи отмечаются на всех картах кроме Священной войны (guildwar и guildwar2). Выкладываю исходный код C++ DLL, которая заставляет ру. оф. 1.3x клиент отмечать персонажей кругами. dllmain.cpp #include <string> #include <windows.h> #include <detours.h> // Адрес персонажа игрока const DWORD MainChaStaticAddr = 0x0067061C; // Для EN клиента 0x0067052C; // Адрес функции NetSwitchMap( ) const DWORD NetSwitchMapAddr = 0x005071A0; // Для EN клиента 0x00507090; // Адрес метода CCharacter::setSideID( ) const DWORD SetSideIdAddr = 0x004A2950; //Для EN клиента 0x004A2840; // Класс персонажа class CCharacter { public: // Получить ID персонажа int get_id() const { return m_id; } // Получить ID гильдии int get_guild_id() const { return m_guildId; } private: char m_nop1[0x04E4]; // Смещение 1 int m_guildId; // ID гильдии char m_nop2[0x07FC]; // Смещение 2 int m_id; // ID персонажа }; // Структура с информацией о смене карты struct stNetSwitchMap { short sEnterRet; char *szMapName; char chEnterType; bool bIsNewCha; bool bCanTeam; }; // Тип указателя на оригинальный // метод void CCharacter::setSideID(long side_id) typedef void (__thiscall *setSideIdPtr)(void *, unsigned int); // Тип указателя на оригинальную функцию // void NetSwitchMap(stNetSwitchMap &switchmap) typedef void (__cdecl *netSwitchMapPtr)(stNetSwitchMap&); // Указатель на оригинальный метод // void CCharacter::setSideID(long side_id) setSideIdPtr original_SetChaSide = (setSideIdPtr)(void *)(SetSideIdAddr); // Указатель на оригинальную функцию // void NetSwitchMap(stNetSwitchMap &switchmap) netSwitchMapPtr original_SwitchMap = (netSwitchMapPtr)(void *)(NetSwitchMapAddr); // Текущая карта персонажа std::string OurMap = ""; // Прочитать целое число из памяти по // указанному адресу DWORD ReadDword(DWORD address) { DWORD Temp = 0; ReadProcessMemory( GetCurrentProcess(), (void *)address, &Temp, sizeof(Temp), 0 ); return Temp; } // Функция, которая выполняет перехват функции смены карты void __cdecl hooked_SwitchMap(stNetSwitchMap &switchmap) { // Получим текущую карту персонажа OurMap = switchmap.szMapName; // Вызываем оригинальную функцию original_SwitchMap(switchmap); } // Функция, которая выполняет перехват установки цветного круга // в зависимости от стороны персонажа void __fastcall hooked_SetChaSide(void *This, void *notUsed, unsigned int side_id) { // Указатель на нашего персонажа CCharacter *pMainCha = reinterpret_cast<CCharacter *>( ReadDword(MainChaStaticAddr) ); // Указатель на персонажа CCharacter *pCha = reinterpret_cast<CCharacter *>(This); if ( pMainCha != nullptr && pCha != nullptr ) { if ( pMainCha->get_id() != pCha->get_id() ) { // Проверим, что персонажи не находятся в СВ if ( OurMap != "guildwar" && OurMap != "guildwar2") { if (pMainCha->get_guild_id() == pCha->get_guild_id()) { // Если персонажи в одной гильдии // то устанавливаем зеленый круг side_id = 1; } else { // Если персонажи не в одной гильдии // то устанавливаем красный круг side_id = 2; } } } } // Вызываем оригинальный метод original_SetChaSide(This, side_id); } // Точка входа BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // Устанавливаем хуки DetourRestoreAfterWith(); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)original_SwitchMap, hooked_SwitchMap); DetourAttach(&(PVOID&)original_SetChaSide, hooked_SetChaSide); DetourTransactionCommit(); break; case DLL_PROCESS_DETACH: // Снимаем хуки DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)original_SwitchMap, hooked_SwitchMap); DetourDetach(&(PVOID&)original_SetChaSide, hooked_SetChaSide); DetourTransactionCommit(); break; } return TRUE; } Предоставляю замечательную возможность изучить код и скомпилировать DLL, а также подключить её к клиенту самостоятельно. Для этого понадобятся Microsoft Visual Studio Community 2017 и библиотека Microsoft Detours. Как собрать библиотеку Detours можно почитать на Хабре. Как присоединить DLL к Game.exe можно найти в гугле.