Jump to content

V3ct0r

Administrators
  • Content Count

    2,889
  • Joined

  • Last visited

  • Days Won

    519

Everything posted by V3ct0r

  1. You can make an array in varible.lua Chaos = {} and add to it values when character join Chaos: Chaos[character ID] = join time In function check_can_enter_map (ctrl.lua) you can check character's last join time. if it equals to nil or larger than current time then character can pass portal
  2. What GameServer.exe do you use?
  3. В шаре нету. В PKOSite просто набор картинок по сути. Ни координат, ни, тем более, монстров и NPC
  4. Or scroll down untill you reach the address. For example, address is 0x000E6852
  5. Скинь скриншоты GameServer.exe (окошко) и GroupServer.exe. Возможно, что-то не подключилось.
  6. В GameServer.exe есть функции GetGmLv() и SetGmLv()? Попробуй убрать строку -- Сбрасываем GM-уровень до 0 SetGmLv(role, 0) I think we can write trigger to ban account when it's gm level changed.
  7. @Jones it will be better: variable.lua -- Массив ID предмета => Здоровье FoodHeal = {} FoodHeal[112] = 50 FoodHeal[113] = 150 FoodHeal[114] = 200 FoodHeal[115] = 300 FoodHeal[Item id] => HP () ItemEffect.lua function ItemUse_Food(role, Item) local item_id = GetItemID(item) if (FoodHeal[item_id] ~= nil) then local hp = GetChaAttr(role, ATTR_HP) local hp_max = GetChaAttr(role, ATTR_MXHP) local hp_resume = FoodHeal[item_id] hp = hp + hp_resume if (hp > hp_max) then hp = hp_max end SetCharaAttr(hp, role, ATTR_HP) else SystemNotice(role, "Ошибка: не найден скрипт для предмета! Обратитесь к администратору.") UseItemFailed(role) end end
  8. Проблема с ServerSet.bin. Вот IP Changer - программа для смены IP адреса. @aleksandr скинул тему в англоязычном разделе.
  9. See that guide. I will translate it to english soon
  10. V3ct0r

    Apparel

    See that guide (In Russian)
  11. Защита GM команд Привет! Предположим, Ваш сервер был взломан и злоумышленник получил доступ к GM-аккаунту. В данной статье я расскажу как обезопасить Ваш сервер от его действий, то есть сделать взлом бессмысленным. Внимание! Особое внимание уделите командам &lua и &lua_all. С их помощью злоумышленник может получить контроль над машиной, где запущен GameServer.exe, со всеми вытекающими из этого последствиями: кража Вашей сборки либо её удаление, вайп базы данных, потеря доступа к машине и так далее. Обсуждение этих команд проходит в данной теме: Все прелести команды &lua. Для обеспечения безопасности Вашего сервера, не используйте имена из примеров данной статьи на своем сервере! Способ №1. Нет GM-команд - нет проблем! Если Вы редко или вообще не пользуетесь GM-командами, то имеет смысл их отключить. Редактировать персонажей и выдавать предметы можно с помощью специальных программ или вручную в базе данных, когда персонаж не в игре. Чтобы отключить GM-команды нужно внести изменения в GameServer.exe. Версия | Размер (КБ) | Адрес --------+-------------+------------ 1.36 | 2 040 | 0x000DE1E8 1.38 | 2 088 | 0x000E6852 2.0 | 3 000 | 0x00161349 Откройте GameServer.exe в любом HEX редакторе и перейдите по адресу из таблицы. Я буду работать с 1.38 GameServer.exe в редакторе HxD. Замените 23 байта начиная с этого адреса на 0x90 Сохраните проделанные изменения и убедитесь, что в игре не работают GM-команды. Способ №2. Переименовывание GM-команд. Злоумышленник не сможет воспользоваться GM-командами, если он не будет знать их названия. Итак, Вам придется переименовать каждую команду. Чтобы изменить название GM-команды, откройте GameServer.exe в любом HEX-редакторе. Затем найдите GM-команду и измените ее название. Длина нового названия должна быть такой же, как и длина старого. Для примера, переименуем команду &make в команду &give. Обратите внимание, что длины строк "make" и "give" равны (по 4 символа). Открываем GameServer.exe в HEX-редакторе и ищем строку "make": Вам будут попадаться строки, которые содержат в себе подстроку "make" (например, "MakeItem", "make failed!", "GMmakeLog" и др.). Игнорируйте их и продолжайте поиск. Когда Вы найдете нужную строку, Вы увидите рядом названия других GM-команд: Заменяем на "give": Сохраните проделанные изменения. Повторите данные действия для каждой GM-команды. Список адресов GM-команд GameServer.exe версии 1.36 (2 040 КБ): GameServer.exe версии 1.38 (2 088 КБ): GameServer.exe версии 2.4 (3 000 КБ): Способ N3. GameServer.exe с функциями HandleChat(), GetGmLv() и SetGmLv() Для реализации данного способа Вам потребуется модифицированный GameServer.exe с функциями HandleChat(), GetGmLv() и SetGmLv(). Функция HandleChat(userdata role, string message) срабатывает, когда игрок пишет сообщение в местный чат. Так как GM-команды отправляются также в местный чат, Вы можете написать скрипт, который будет контролировать выполнение команд. Например, Вы можете сделать так, чтобы GM-команды срабатывали только при условии, что их отправляет персонаж с определенным именем или ID. Плюс ко всему, можно сделать чтобы этот персонаж должен еще состоять в определенной гильдии, в которую входят только администраторы и GM Вашего сервера. Все зависит от Вашей фантазии. Чтобы узнать, что персонаж является GM, используйте функцию GetGmLv(userdata role). С помощью функции SetGmLv(userdata role, number level) можно изменять GM-уровень аккаунта, к которому прикреплен персонаж. Например, в той же функции HandleChat() можно сбрасывать GM-уровень аккаунта в 0, если персонаж не прошел проверку. Реализуем простую систему контроля GM-команд: 1) GM-команды могут выполнять только персонажи с именами: "V3ct0r", "pkodev" и "Administrator"; 2) В случае, если персонаж GM и он не прошел проверку, сбросить GM-уровень до 0, кикнуть персонажа с сервера и отправить сообщение администратору в консоль GameServer.exe. Для начала создадим в файле variable.lua массив с именами персонажей, которые могут использовать GM-команды. Назовем его PlayerCanUseCmd: PlayerCanUseCmd = {} PlayerCanUseCmd["V3ct0r"] = 1 PlayerCanUseCmd["pkodev"] = 1 PlayerCanUseCmd["Administrator"] = 1 Затем напишем скрипт для функции HandleChat() в файле functions.lua: -- Обработчик местного чата function HandleChat(role, message) -- Проверяем что персонаж GM if (GetGmLv(role) > 0) then -- Проверяем что персонаж отправил GM-команду if (string.find(message, "&") == 1) then -- Проверяем имя персонажа local cha_name = GetChaDefaultName(role) if (PlayerCanUseCmd[cha_name] ~= nil) then -- Персонаж может использовать GM-команду return 1 end -- Персонаж не может использовать GM-команду -- Сбрасываем GM-уровень до 0 SetGmLv(role, 0) -- Кикаем персонажа с сервера KickCha(role) -- Пишем сообщение администратору в консоль сервера print("Player [" .. cha_name .."] trying to use GM command!") -- Запрещаем выполнение GM-команды return 0 end end return 1 end Для кика персонажей нам понадобится функция KickCha(), добавьте ее также в functions.lua: function KickCha(character) local pkt = GetPacket() WriteCmd(pkt, 1505) SendPacket(character,pkt) end Тема открыта для обсуждения. Пишите свои вопросы и идеи в комментариях!
  12. @squaller do not use filthy language and be polite
  13. Hello @Sultan! Look at maps on maindev: Volcano Arena and Coliseum Arena Cemetery Ares map Map pack Also you can find maps in this section Unfortunately, a many good maps were deleted
  14. function TurnToCha ( role ) local x_role = role if ChaIsBoat ( role ) == 1 then x_role = GetMainCha ( role ) end return x_role end I think it returns character's descriptor if he is in boat.
  15. В GroupServer.exe. Может позже напишу гайд как это редактируется
  16. Add to functions.lua function HandleChat(role, message) return 1 end Don't forget to restart GameServer.exe
  17. Для примера: NPC "Официантка - Мона" находится по координатам (990,1263)
  18. Посмотри на МД: База данных Монит (база данных)
  19. Не совсем понятен вопрос. Где взять координаты для NPC? Это игровые координаты (x, y) умноженные на 100
  20. GetChaDefaultName(role) return name by role. Prole(name) returns role by name.
  21. Returns character descriptor (role) by his name. (You have to somehow add role to proles array before)
  22. It is easy. What problems during the installation?
  23. Квесты находятся в файлах MissionScript01-08.lua (папка GameServer\resource\script\MisScript) Чтобы выдать предмет надо добавить в скрипт квеста функцию MisResultAction(GiveItem, ID предмета, Количество, 4) Например MisResultAction(GiveItem, 1847, 10, 4) Посмотри как там устроены скрипты квестов, думаю разберешься. Так же вот гайд на МД
  24. This script sets values of Heilong_Star_Count, TeDengJiang_Star_Count, YiDengJiang_Star_Count to 0 by timer (3600*24*7 secs, 3600*24 secs and 3600 secs respectively)
×
×
  • Create New...