Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 01/16/2020 in all areas

  1. 1 point
    You might want to restart the computer first. It won't work without a computer restart. If using Windows 10 and using the beta convert legacy apps to use utf-8, disable that - that only works with SQL 2019 and the SQL service will fail to run no matter what.
  2. 1 point
    thank you!. every program ive found on the site / posts on this subject only drove me nuts. it works great now
  3. 1 point
    Sea Avenger Online [WebSite] http://seaavenger.online/ [FAN-PAGE] https://www.facebook.com/SEAAVENGEROFICIAL/ [DISCORD] https://discord.gg/NUJVqUr [Youtube] Quests Newbie Guide
  4. 1 point
  5. 1 point
  6. 1 point
    you can't killl npc but if you mean kill a monster use this small lua function function fairyexp(Player, Fairy) local FairyEXP = GetItemAttr(Fairy, ITEMATTR_ENERGY) local FairyMaxEXP = GetItemAttr(Fairy, ITEMATTR_MAXENERGY) FairyEXP = FairyEXP + 1 if GetItemAttr(Fairy, ITEMATTR_URE) > 49 then if FairyEXP >= FairyMaxEXP then FairyEXP = FairyMaxEXP end SetItemAttr(Fairy, ITEMATTR_ENERGY, FairyEXP) end end function GetExp_New(dead , atk ) local DeadMonster = GetChaID(dead) if DeadMonster == 66 then local Fairy = GetChaItem(atk, 2, 1) if Fairy == nil then return end local FairyType = GetItemType(Fairy) local chance = math.random(1, 100) if FairyType == 59 then if chance >= 50 then fairyexp(atk, Fairy) BickerNotice(atk, "Fairy EXP: Fairy Received x [1] EXP ") end end end end
  7. 1 point
    Как добавить к крыльям эффект полета Привет! В данной статье я расскажу как сделать, чтобы персонаж летал на обычных крыльях. Вам понадобится: Отладчик OllyDBG; Базовые знания ассемблера; Умение переводить числа из десятичной системы счисления в шестнадцатиричную и обратно; Терпение и внимательность. Для примера, заставим нашего персонажа летать на Ангельских крыльях (ID: 937) 0. Все модификации производятся на стороне клиента. Я буду работать с Game.exe из английского клиента TOP версии 1.38, поэтому, скорее всего, у Вас будут отличаться адреса инструкций; 1. Запустите клиент, откройте OllyDBG и присоединитесь к процессу Game.exe (команда File -> Attach -> В списке процессов выбрать Game.exe -> Attach); 2. Далее перейдите в модуль Game.exe (команда View -> Executable Modules или ALT + E -> В списке модулей выбрать Game.exe); 3. Выполните анализ кода (контекстное меню -> Analysis -> Analyse code или CTRL + A); 4. Найдите функцию, которая отвечает за обновление позы персонажа при перемещении крыльев в 1-ю ячейку инвентаря. Например, с помощью команды контекстное меню -> Search for -> Command или CTRL + F. Затем в окошко поиска вводим: CMP EAX, 80 В моем Game.exe она выглядит следующим образом: 004A34B0 /$ 8B81 0C0D0000 MOV EAX,DWORD PTR DS:[ECX+D0C] 004A34B6 |. 3D 80000000 CMP EAX,80 004A34BB |. 7C 11 JL SHORT 004A34CE 004A34BD |. 3D 8C000000 CMP EAX,8C 004A34C2 |. 7F 0A JG SHORT 004A34CE 004A34C4 |. 3D 87000000 CMP EAX,87 004A34C9 |. 74 03 JE SHORT 004A34CE 004A34CB |. B0 01 MOV AL,1 004A34CD |. C3 RETN 004A34CE |> 32C0 XOR AL,AL 004A34D0 \. C3 RETN Если перевести эту функцию в C-код, то она будет выглядеть примерно так: // Проверка на крылья int CheckWings(int id) { if (id >= 128 && id <= 140 && id != 135) { return 1; // В 1-й ячейке инвентаря крылья перерожденя } return 0; // 1-я ячейка пуста или в ней лежит какой-то другой предмет } Наша с Вами задача заключается в изменении этой функции, а именно условия, где сравнивается ID предмета из 1-ой ячейки инвентаря с ID крыльев. Давайте добавим в него нашли крылья: if (id >= 128 && id <= 140 && id != 135 || id == 937) Тогда наша функция на ассемблере будет выглядеть вот так: ; RET_0 - адрес инструкции XOR AL, AL ; RET_1 - адрес инструкции MOV AL, 1 MOV EAX,DWORD PTR DS:[ECX+D0C] CMP EAX, 0x03A9 ; 0x03A9 = 937 - ID Ангельских крыльев JE SHORT RET_1 ; Прыжок на return 1, если ID == 937 CMP EAX,80 JL SHORT RET_0 ; Прыжок на return 0 CMP EAX,8C JG SHORT RET_0 ; Прыжок на return 0 CMP EAX,87 JE SHORT RET_0 ; Прыжок на return 0 MOV AL,1 ; return 1 RETN XOR AL,AL ; return 0 RETN Здесь мы сталкиваемся с проблемой: новая функция занимает больше байт, чем оригинальная! Что делать? В конце модуля есть так называемый Code Cave - область, заполненная нулевыми байтами. Именно туда мы и поместим нашу новую функцию. Найти эту область очень просто: крутите ползунок в окне кода до тех пор, пока не увидите инструкции вида: DB 00 DB 00 DB 00 DB 00 Итак, помещаем нашу функцию в Code Cave, я поместил ее по адресу 0x005FF850: Обратите внимание, что адреса инструкций RET_0 и RET_1 у меня получились 0x005FF875 и 0x005FF872 соответственно. Не забудьте их исправить в функции. Теперь нужно сделать так, чтобы вместо оригинальной функции вызывалась наша, модифицированная. Есть 2 способа: первый заключается в том, что мы изменяем адрес функции во всех других функциях, которые ее вызывают. Суть второго способа состоит в том, что в начале оригинальной функции мы пишем код, который будет перенаправлять вызов на новую модифицированную функцию. Давайте воспользуемся вторым способом. Идем на начало оригинальной функции (в данном гайде это 0x004A34B0) и пишем следующий код, заменяя оригинальный: jmp <адрес модифицированной функции> retn У меня получилось вот так: Протестируем наши изменения. Зайдите в игру и поместите Ангельские крылья в 1-й слот инвентаря. Персонаж должен взлететь: 5. Как видно из скриншота, значок GM провалился в персонажа, давайте это исправим. Найдите следующий код, например, продолжая искать инструкцию CMP EAX, 80: 004A3F7F . 8B86 0C0D0000 MOV EAX,DWORD PTR DS:[ESI+D0C] 004A3F85 . 3D 80000000 CMP EAX,80 004A3F8A . 7C 16 JL SHORT 004A3FA2 004A3F8C . 3D 8C000000 CMP EAX,8C 004A3F91 . 7F 0F JG SHORT 004A3FA2 004A3F93 . 3D 87000000 CMP EAX,87 004A3F98 . 74 08 JE SHORT 004A3FA2 004A3F9A . D905 30936000 FLD DWORD PTR DS:[609330] 004A3FA0 . EB 06 JMP SHORT 004A3FA8 004A3FA2 > D905 70136000 FLD DWORD PTR DS:[601370] На скриншоте ниже в оранжевой рамке я выделил "ориентиры" - вызовы функций SetYaw() и UpdatePitchYawRoll() из библиотеки MindPower: Как видите, здесь точно такое же условие, как и в прошлой функции, и нам надо его изменить. Обратите внимание на адреса 0x004A3FA2 и 0x004A3F9A: 0x004A3F9A - код, который выполнится при соблюдении условия (в 1-й ячейке инвентаря находятся крылья); 0x004A3FA2 - код, который выполнится, если условие не соблюдается (в 1-й ячейке инвентаря нет крыльев). Так как новое условие будет занимать больше места, чем оригинальное, идем в Code Cave и записываем его. Я запишу по адресу 0x005FF87A: Далее необходимо задействовать новый код. Идем по адресу 0x004A3F85 и выполняем прыжок на новое условие: jmp <адрес нового условия> ; в данном гайде - 0x005FF87A Идем в игру и убеждаемся, что значок GM встал на свое место: 6. Если вы прикажете персонажу перемещаться, то увидите, что он будет бегать, а не летать. Исправим и это. Найдите код, примерно похожий на этот: 004A44FE |. 0F944424 1C SETE BYTE PTR SS:[ESP+1C] 004A4503 |. 3D 80000000 CMP EAX,80 004A4508 |. 7C 46 JL SHORT 004A4550 004A450A |. 3D 8C000000 CMP EAX,8C 004A450F |. 7F 3F JG SHORT 004A4550 004A4511 |. 3D 87000000 CMP EAX,87 004A4516 |. 74 38 JE SHORT 004A4550 004A4518 |. 83FF 01 CMP EDI,1 004A451B |. 74 05 JE SHORT 004A4522 004A451D |. 83FF 04 CMP EDI,4 004A4520 |. 75 07 JNZ SHORT 004A4529 004A4522 |> BF 2A000000 MOV EDI,2A 004A4527 |. EB 27 JMP SHORT 004A4550 004A4529 |> 83FF 05 CMP EDI,5 004A452C |. 74 05 JE SHORT 004A4533 004A452E |. 83FF 06 CMP EDI,6 004A4531 |. 75 07 JNZ SHORT 004A453A 004A4533 |> BF 2B000000 MOV EDI,2B 004A4538 |. EB 16 JMP SHORT 004A4550 004A453A |> 83FF 02 CMP EDI,2 004A453D |. 75 07 JNZ SHORT 004A4546 004A453F |. BF 2C000000 MOV EDI,2C 004A4544 |. EB 0A JMP SHORT 004A4550 004A4546 |> 83FF 10 CMP EDI,10 004A4549 |. 75 05 JNZ SHORT 004A4550 004A454B |. BF 2D000000 MOV EDI,2D 004A4550 |> 83F9 06 CMP ECX,6 На скриншоте я опять оставил "ориентиры": И опять то же самое условие, которое нужно изменить. В принципе, процесс редактирования условия схож с предыдущим пунктом, только у нас другие адреса для положительного и отрицательного исхода: 0x004A4518 - код, который выполнится при соблюдении условия (в 1-й ячейке инвентаря находятся крылья); 0x004A4550 - код, который выполнится, если условие не соблюдается (в 1-й ячейке инвентаря нет крыльев). Точно так же идем в Code Cave и пишем новое условие. Я напишу по адресу 0x005FF8AD: Заставляем программу использовать новый код, вместо старого. Идем по адресу 0x004A4503 и делаем прыжок: jmp <адрес нового условия> ; в данном гайде - 0x005FF8AD Идем в игру и тестируем: Ура! Теперь персонаж летает на Ангельских крыльях! 7. Сохраните проделанные изменения. В контекстном меню выберите команду Copy to executable -> All modifications. На вопрос "Copy selection to executable file?" отвечайте "Copy all". Появится окошко, просто закрывайте его крестиком. Тут программа задаст новый вопрос типа: "Файл Game.exe был изменен! Сохранить изменения?", отвечаете "Да" и в диалоге выбора файла, вводите название для измененного Game.exe. 8. На этом редактирование Game.exe завершено! Зайдите в игру и убедитесь что все работает как задумано. В результате мы с Вами заставили персонажей летать на Ангельских крыльях с ID 937!
  8. 1 point
    In iteminfo find the fruit u want to increase the pet level while using the fruit and find the itemuse_blahblah near at the end of the iteminfo line for that pet fruit then go to itemeffect.lua of that itemuse_blahblah and look for something like: ItemUse_LS_longguo then go to function.lua and find ItemUse_LS_longguo and scroll until you see if Item_type == 58 and Item_Traget_Type == 59 then Check_Exp = CheckElf_EXP ( role , Item_Traget ) --¾«ÁéexpÊÇ·ñÂú×ãÉý¼¶Ìõ¼þ if Check_Exp == 0 then SystemNotice(role , "Growth rate is not full. Unable to feed pet with Snow Dragon Fruit" ) UseItemFailed ( role ) else Lvup_Str ( role , Item_Num , Item_Traget ) --¸ù¾Ý¾ßÌåµÀ¾ßÑ¡Ôñ²»Í¬ÊôÐԵijɳ¤º¯Êý ( ÀýÖÐΪstr ) end end then find Lvup_Str ( role , Item_Num , Item_Traget ) and u will see something like: function Lvup_Str ( role , Item_Num ,Item_Traget ) local attr_type = ITEMATTR_VAL_STR --SystemNotice(role ,attr_type ) Elf_LvUp ( role , Item_Num , Item_Traget , attr_type ) end Then find Elf_LvUp ( role , Item_Num , Item_Traget , attr_type ) and u will see something like this: function Elf_LvUp ( role , Item_Num , Item_Traget , attr_type ) -- local str = GetItemAttr( Item_Traget ,ITEMATTR_VAL_STR ) --Á¦Á¿ local con = GetItemAttr( Item_Traget ,ITEMATTR_VAL_CON ) --ÌåÖÊ local agi = GetItemAttr( Item_Traget ,ITEMATTR_VAL_AGI ) --רע local dex = GetItemAttr( Item_Traget ,ITEMATTR_VAL_DEX ) --Ãô½Ý local sta = GetItemAttr( Item_Traget ,ITEMATTR_VAL_STA ) --¾«Éñ local Elf_MaxEXP = GetItemAttr(Item_Traget,ITEMATTR_MAXENERGY) local Elf_MaxURE = GetItemAttr(Item_Traget,ITEMATTR_MAXURE) local Lv = str + agi + dex + con + sta local attr_type_num = GetItemAttr( Item_Traget ,attr_type ) local a = 1 / ( math.floor ( ( 1 + ( math.pow ( ( Lv / 10 ) , 3 ) ) ) * 10 ) / 10 * math.max ( 0.01 ,( 1 - attr_type_num * 0.05 ) ) ) if Lv >= 40 then ***Max pet level, if pet level is higher than 40 then it can no longer be feed this fruit until you got a fruit that has this 40 to something like 100 then u can use the fruit that is 100 to continue your feeding But do know that there is a math for the pet leveling system which can fail too. See the a = 1 / ( math.floor ( ( 1 + ( math.pow ( ( Lv / 10 ) , 3 ) ) ) * 10 ) / 10 ) * math.max ( 0.01 ,( 1 - attr_type_num * 0.05 ) ) --This is a math for the pet, if u want to feed 100% then just do a = 1 and remove the / blablahblah from it end local b = Percentage_Random ( a ) local item_energe = GetItemAttr( Item_Traget ,ITEMATTR_ENERGY ) --È¡¾«Áé³É³¤¶È --local item_maxenerge = GetItemAttr( Item_Traget ,ITEMATTR_MAXENERGY ) --È¡¾«Áé³É³¤¶È×î´óÖµ if b == 1 then --³É³¤ÔòÔö¼ÓÊôÐÔ£¬¿Û³ýËùÓгɳ¤Öµ -- ITEMATTR_ENERGY AddItemEffect(role , Item_Traget , 0 ) item_energe = 0 SystemNotice (role , "Pet level up successfully! Growth rate is depleted") attr_type_num = attr_type_num + 1 SetItemAttr ( Item_Traget , attr_type , attr_type_num ) local Item_MAXENERGY = 240 * ( Lv + 1 ) if Item_MAXENERGY > 6480 then Item_MAXENERGY = 6480 end If you want to be able to feed to 100 then change the 40 to 100 but do note that if people feed to 99 and use a fruit +2(if u enable the +2 fruit to be able to feed to 100 too then they can feed that +2) fruit on to the pet that is lv99 and make it pet lv101.
  9. 1 point
    Официальные клиенты Особая благодарность пользователю alex1999! В данной теме собираются официальные клиенты пиратии. Если у Вас имеются таковые, то присылайте нам ссылку на них и мы опубликуем её здесь! Русский официальный сервер (Пиратия) Piratia_Setup.exe - установщик клиента Пиратии версии 1.35, тот самый с знаменитого диска игромании. Piratia_Setup.exe - установщик клиента Пиратии версии 1.38.1 (спасибо ϟAlсаtrаzϟ). Piratia_Setup.exe - установщик клиента Пиратии версии 1.39 (спасибо Ginetik). Piratia2_Setup.exe - установщик клиента Пиратии версии 2.0+. Последний ехешник от майлов. Пиратия II Online.zip - архив c клиентом Пиратии версии 2.0+ из предыдущего пункта, но еще и с всеми последующими скачиваемыми патчами. Tales of Pirates top2_setup_1.0.70.exe - установщик клиента Tales of Pirates II. Последний ехешник от IGG. Pirate King Online PKOII.zip - архив с клиентом PKO версии 2.0+. Какой-то страшный архив с пко-клиентом, взят откуда-то из инета. Однако полностью совместим с гулящими в паблике файлами 2.5, работает фишка с просмотром экипировки другого игрока и т.д., чем и ценен. XHDW XHDW_3.0.1_Setup.exe - установщик клиента XHDW версии 3.0+. Сам установщик какой-то битый и не устанавливается до конца привычным способом, однако вскрывается простым 7-зипом, после чего совершенно безвозмездно отдает все свои ресурсы.
×