Перейти к содержанию

Gaikotsu

Постоялец
  • Публикаций

    1572
  • Зарегистрирован

  • Посещение

  • Победитель дней

    62
  • Отзывы

    0%

Весь контент Gaikotsu

  1. ты о табличке с па очками? ну дык вызывай нужный мультисел или хтмл в пакете RequestExPCCafeRequestOpenWindowWithoutNPC, который прилетает при нажатии на кнопку в окошке с очками. я правда не помню, в хелиосе уже эту кнопку добавили туда или нет...
  2. Gaikotsu

    VipBag, супер мешок

    Я вот чего не понимаю дак этого того, какая религия многим запрещает пользоваться IDE типа эклипса или идеи для добавления/правок кода? с ними же просто бы не возникло таких тем скорее всего, т.к. IDE уже на этапе правок ткнуло бы носом в ошибки, притом ясно и понятно разжевав - что же не так ... хотя пожалуй, учитывая уровень таких тем - процесс настройки проекта в IDE для таких был бы непреодолимым препятствием...
  3. Gaikotsu

    Грейд амуниции

    ArmorGrp/WeaponGrp/EtcItemGrp - в зависимости от типа вещи.
  4. Ну для того же R+ грейда шансы точно пониже будут, чем для предыдущих грейдов. Вроде бы даже тесты на эту тему проводили - сейчас я уж просто не помню за давностью лет ссылки на них.
  5. Gaikotsu

    Help Анонс РБ

    Ну значит onSpawn по какой-то причине дергается дважды. Или же по какой-то причине этот твой класс анонса в сервере после старта существует в двух экземплярах и потому и срабатывает дважды - перепиши инициализацию класса так, чтобы гарантированно класс существовал в одном экземпляре.
  6. Вариантов то много. Обычно для вычисления хэшей в пароле юзается библиотека jacksum, а она поддерживает очень даже дофига разных алгоритмов. Но все же чаще всего народ граничивается варинтами DES, SHA1, whirlpool2, иногда еще md5
  7. Да уж... реально на скорую руку
  8. А какая разница, если из них один фиг чисто читают.
  9. Ну это уж точно логичней и проще, чем заниматься бредом в виде явного перечисления в скрипте координат кучи боссов.
  10. Мусье знают толк в извращениях... Что мешает по необходимости брать список всех боссов из менеджера спавнов, отфильтровывать из него живых в данный момент, далее рандомно брать одного босса из полученного списка, брать из его свойств текущие координаты и делать телепорт рядом с ним?
  11. Возможно он подразумевает пакет SendStatus, который можно запросить каким нибудь скриптом, постучавшись на порт гейма и запросив этот пакет. Но опять же данным из этого пакета нельзя верить на 100%, т.к. там можно хоть какой онлайн отдавать.
  12. Он его там не найдет - данное окно на флэше сделано, а не стандартными методами и лежит где-то в одном из ugx-файлов скорее всего.
  13. ну по идее самое простое выше уже озвучили - убрать сами скрипты квестов но если они где-то еще вызываются - придется и там еще убирать вызовы/проверки. другой вариант, не настолько кардинальный - просто в скриптах квестов закомментить/удалить регистрацию стартовых нпс (а в случае взятия не у нпс - поменять услвоия взятия на неосуществимые). в итоге и квесты на месте и при этом взять их нельзя. ну а если есть исходники ядра и имеется хоть сколько-то прямые руки - можно вобще универсальный способ сделать. ввести в конфиги новый параметр, в котором можно перечислять ид запретных квестов (или наоборот только разрешенных), а в методе, формирующем список квестов для выдачи его в хтмл диалоге, сверяться с этим списком-параметром и убирать лишнее из вывода.
  14. А ничего что эти самые нпс могут выполнять и еще какие нибудь нужные функции? к примеру это могут быть торговцы и т.п.
  15. пример проверки по группе 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
  16. я тебе уже на другом форуме ответил
  17. 1. использовать один и тот же скилл для всех вариантов, просто разных уровней - тогда сколько бы не надел - скилл от них один фиг будет только один, максимального уровня из тех что одеты. из минусов - придется доработать листенеры equip/unequp, чтобы корректно обрабатывало ситуацию "одето несколько талисманов семени, сняли один - пассивка от них убрана". 2. добавить всем таким талисманам кондишн, проверящий одетые предметы и запрещающий использование талисмана, если уже одет какой-то из других талисманов семени. 3. разновидность 2-го варианта - ввести параметр "группы" для предметов и при попытке одевания талисманов проверять - не в одной ли группе надеваемый талисман и какой-то из уже одетых талисманов и соотвественно запрещать одевание при совпадении группы. Я к примеру у себя именно этот вариант использую для талисманов семени, богатства, а так же для драгоценных камней.
  18. а куда ты его еще поместишь то в клиенте, если в нем этой инфы и нет и не должно быть изначально?
  19. спасибо кэп, но думаю автор темы о таком варианте и так знает но ему то как раз хочется чтобы возможность телепорта была вне зависимости от статуса онлайна перса
  20. да вроде никаких особых условий работы нет
  21. Вобще, при желании, через телнет можно сделать почти полный аналог кэшеда в птс
  22. ну и простенький класс на пхп для работы с телнетом делал класс, т.к. в планах было расширение функционала в виде поддержки не одной команды для телнета, но чет так и не потребовалось это в админке у себя чисто кик юзаю и все. 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
  23. конечно от сборки зависит, но почти в любой из них есть команда kick для телнета на худой конец не проблема ее реализовать так что банально коннектимся к серверу через телнет и шлем команду kick <имя>, после чего делаем что хочется с данными только советую после кика ставить паузу к примеру в секунду и уже после этого менять данные в бд, чтобы все что надо при выходе успело сохраниться
  24. Там же ясным и понятным английским языком написана причина ошибки...
  25. ну для умножения к примеру использовать 0x110, для прибавления 0x120
×
×
  • Создать...