-
Content Count
2,889 -
Joined
-
Last visited
-
Days Won
519
Everything posted by V3ct0r
-
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
-
What GameServer.exe do you use?
-
В шаре нету. В PKOSite просто набор картинок по сути. Ни координат, ни, тем более, монстров и NPC
-
Or scroll down untill you reach the address. For example, address is 0x000E6852
-
Discovered exceptional line error on GateServer
V3ct0r replied to Promokashka's topic in Пиратия: Помощь
Скинь скриншоты GameServer.exe (окошко) и GroupServer.exe. Возможно, что-то не подключилось. -
В GameServer.exe есть функции GetGmLv() и SetGmLv()? Попробуй убрать строку -- Сбрасываем GM-уровень до 0 SetGmLv(role, 0) I think we can write trigger to ban account when it's gm level changed.
- 17 replies
-
- 2
-
@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
-
Проблема с ServerSet.bin. Вот IP Changer - программа для смены IP адреса. @aleksandr скинул тему в англоязычном разделе.
-
See that guide. I will translate it to english soon
-
See that guide (In Russian)
-
Команды @@ находятся в GroupServer.exe
-
Защита 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 Тема открыта для обсуждения. Пишите свои вопросы и идеи в комментариях!
- 17 replies
-
- 3
-
@squaller do not use filthy language and be polite
-
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
-
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.
-
В GroupServer.exe. Может позже напишу гайд как это редактируется
- 1 reply
-
- 1
-
Add to functions.lua function HandleChat(role, message) return 1 end Don't forget to restart GameServer.exe
-
Для примера: NPC "Официантка - Мона" находится по координатам (990,1263)
-
Посмотри на МД: База данных Монит (база данных)
-
Не совсем понятен вопрос. Где взять координаты для NPC? Это игровые координаты (x, y) умноженные на 100
-
GetChaDefaultName(role) return name by role. Prole(name) returns role by name.
-
Returns character descriptor (role) by his name. (You have to somehow add role to proles array before)
-
It is easy. What problems during the installation?
-
Квесты находятся в файлах MissionScript01-08.lua (папка GameServer\resource\script\MisScript) Чтобы выдать предмет надо добавить в скрипт квеста функцию MisResultAction(GiveItem, ID предмета, Количество, 4) Например MisResultAction(GiveItem, 1847, 10, 4) Посмотри как там устроены скрипты квестов, думаю разберешься. Так же вот гайд на МД
-
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)
- 1 reply
-
- 1