-
Публикаций
1567 -
Зарегистрирован
-
Посещение
-
Победитель дней
61 -
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент Gaikotsu
-
Вариантов то много. Обычно для вычисления хэшей в пароле юзается библиотека jacksum, а она поддерживает очень даже дофига разных алгоритмов. Но все же чаще всего народ граничивается варинтами DES, SHA1, whirlpool2, иногда еще md5
-
Да уж... реально на скорую руку
-
А какая разница, если из них один фиг чисто читают.
-
Ну это уж точно логичней и проще, чем заниматься бредом в виде явного перечисления в скрипте координат кучи боссов.
-
Мусье знают толк в извращениях... Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт рядом с ним?
-
Возможно он подразумевает пакет SendStatus, который можно запросить каким нибудь скриптом, постучавшись на порт гейма и запросив этот пакет. Но опять же данным из этого пакета нельзя верить на 100%, т.к. там можно хоть какой онлайн отдавать.
-
Он его там не найдет - данное окно на флэше сделано, а не стандартными методами и лежит где-то в одном из ugx-файлов скорее всего.
-
ну по идее самое простое выше уже озвучили - убрать сами скрипты квестов но если они где-то еще вызываются - придется и там еще убирать вызовы/проверки. другой вариант, не настолько кардинальный - просто в скриптах квестов закомментить/удалить регистрацию стартовых нпс (а в случае взятия не у нпс - поменять услвоия взятия на неосуществимые). в итоге и квесты на месте и при этом взять их нельзя. ну а если есть исходники ядра и имеется хоть сколько-то прямые руки - можно вобще универсальный способ сделать. ввести в конфиги новый параметр, в котором можно перечислять ид запретных квестов (или наоборот только разрешенных), а в методе, формирующем список квестов для выдачи его в хтмл диалоге, сверяться с этим списком-параметром и убирать лишнее из вывода.
-
пример проверки по группе if (targetSlot == ItemTemplate.SLOT_TALISMAN) { int count = player.getTalismanCount(); if (count <= 0) return new SystemMessage(SystemMsg.YOU_CANNOT_WEAR_S1_BECAUSE_YOU_ARE_NOT_WEARING_A_BRACELET).addItemName(itemId); ItemInstance deco; int groupId = item.getTemplate().getGroupId(); for (int slot = Inventory.PAPERDOLL_TALISMAN_1; slot <= Inventory.PAPERDOLL_TALISMAN_6; slot++) { deco = player.getInventory().getPaperdollItem(slot); if (deco != null) { if (deco == item) return null; // талисман уже одет и количество слотов больше нуля // Проверяем на количество слотов и одинаковые/похожие талисманы (находящиеся в одной группе) if (--count <= 0 || deco.getTemplate().getGroupId() == groupId) return new SystemMessage(SystemMsg.YOU_CANNOT_EQUIP_S1_BECAUSE_YOU_DO_NOT_HAVE_ANY_AVAILABLE_SLOTS).addItemName(itemId); } } } else if (targetSlot == ItemTemplate.SLOT_JEWEL) { int count = player.getJewelsCount(); if (count <= 0) return new SystemMessage(SystemMsg.S1_CANNOT_BE_USED_DUE_TO_UNSUITABLE_TERMS).addItemName(itemId); ItemInstance jewel; int groupId = item.getTemplate().getGroupId(); for (int slot = Inventory.PAPERDOLL_JEWEL_1; slot <= Inventory.PAPERDOLL_JEWEL_6; slot++) { jewel = player.getInventory().getPaperdollItem(slot); if (jewel != null) { if (jewel == item) return null; // камень уже одет и количество слотов больше нуля // Проверяем на количество слотов и одинаковые/похожие камни (находящиеся в одной группе) if (--count <= 0 || jewel.getTemplate().getGroupId() == groupId) return SystemMsg.NO_EQUIPMENT_SLOT_AVAILABLE; } } } проверка эта находится в методе checkIfCanEquip класса ItemFunctions (для овероподобных сборок) группа предмета, если явно не задана - равна ид предмета _groupId = set.getInteger("group_id", _itemId); это из ItemTemplate Hide
-
я тебе уже на другом форуме ответил
-
1. использовать один и тот же скилл для всех вариантов, просто разных уровней - тогда сколько бы не надел - скилл от них один фиг будет только один, максимального уровня из тех что одеты. из минусов - придется доработать листенеры equip/unequp, чтобы корректно обрабатывало ситуацию "одето несколько талисманов семени, сняли один - пассивка от них убрана". 2. добавить всем таким талисманам кондишн, проверящий одетые предметы и запрещающий использование талисмана, если уже одет какой-то из других талисманов семени. 3. разновидность 2-го варианта - ввести параметр "группы" для предметов и при попытке одевания талисманов проверять - не в одной ли группе надеваемый талисман и какой-то из уже одетых талисманов и соотвественно запрещать одевание при совпадении группы. Я к примеру у себя именно этот вариант использую для талисманов семени, богатства, а так же для драгоценных камней.
- 4 ответа
-
- 1
-
а куда ты его еще поместишь то в клиенте, если в нем этой инфы и нет и не должно быть изначально?
-
спасибо кэп, но думаю автор темы о таком варианте и так знает но ему то как раз хочется чтобы возможность телепорта была вне зависимости от статуса онлайна перса
-
да вроде никаких особых условий работы нет
-
Вобще, при желании, через телнет можно сделать почти полный аналог кэшеда в птс
-
ну и простенький класс на пхп для работы с телнетом делал класс, т.к. в планах было расширение функционала в виде поддержки не одной команды для телнета, но чет так и не потребовалось это в админке у себя чисто кик юзаю и все. telnet <? define('KickCharacter', 1); class L2Telnet { var $socket; var $connected; function __construct($host='127.0.0.1', $port=2012, $pass, $timeout=2) { $this->connected = false; $this->socket = @fsockopen($host, $port, $errno, $errstr, $timeout); if ($this->socket) { if ($pass != "") { fputs($this->socket, $pass); fputs($this->socket, "\r\n"); $this->connected = ($this->socket) ? true : false; } $this->connected = true; } else $this->error("<br />Ошибка соединения с telnet-сервером (host: $host, port: $port)."); return $this->connected; } function __destruct() { if ($this->connected) fputs($this->socket, "\r\nexit\r\n"); } function error($str) { die($str); } function sendPacket($packet) { $result = false; if ($this->connected) { $param = func_get_args(); switch ($param[0]): case KickCharacter: fputs($this->socket, "kick ".iconv("Windows-1251", "UTF-8", $param[1])."\r\n"); $result = ($this->socket) ? true : false; if (empty($param[2])) sleep(1); break; default: $result = false; $this->error("<br />Неизвестная команда '{$param[0]}'."); break; endswitch; } return $result; } } ?> Hide
-
конечно от сборки зависит, но почти в любой из них есть команда kick для телнета на худой конец не проблема ее реализовать так что банально коннектимся к серверу через телнет и шлем команду kick <имя>, после чего делаем что хочется с данными только советую после кика ставить паузу к примеру в секунду и уже после этого менять данные в бд, чтобы все что надо при выходе успело сохраниться
-
Там же ясным и понятным английским языком написана причина ошибки...
-
ну для умножения к примеру использовать 0x110, для прибавления 0x120
-
В ядре, в классе StatFunctions - это конечно если сборка на базе овера/лоста если исходников нет и нет возможности исправить - можно обходить лимит давая прибавки к хп с ордером выше чем у функции лимитирования, т.е. с ордером выше 0x100
-
это просто сохраненный в файл HashMap, в который были запиханы хтмлки. обратно загрузить в мапу и сохранить каждый диалог раздельно, используя в качестве имен файлов ключи мапы, не составляет труда, но вот только пользы от этого будет ноль - ключами в мапе служат не имена оригинальных файлов с диалогами, а их хэши. https://code-examples.net/ru/q/c284aa - пример чтения/записи мапы
-
ну сколько бы не прошло, но многие формулы расчета разных стат из этого гайда все еще актуальны.
-
это не совсем верно - когда-то инфа была более доступной. к примеру есть prima guide по C1, в котором было детально расписано очень многое что существовало на тот момент в игре, в частности и разные формулы.
-
а что, обновить свой комп до нормального даже не рассматривается? я вобще хз насколько допотопным комп должен быть, чтобы на нем линейка тормозила, даже самые последние ее части...