Таблица лидеров
Популярный контент
Показан контент с высокой репутацией за 08/22/12 в Инструкции
-
7 балловИзменяем оформление для внутренних страниц Регистрации, Личного кабинета, Статистики и Восстановления пароля Пример для статистики. Открываем application/stat.php После: if ( !defined( "STRESSWEB" ) ) die( "Access denied..." ); Вставляем: $_SW_TEMPLATE = 'index_stat'; в шаблоне создаем файл index_stat.tpl в котором оформляем вывод статистики. В этом файле будут доступны все теги с index.tpl Не сложно догадаться, что вы можете задать любое название вместо index_stat и создать для каждой внутренней страницы свое оформление. Другие страницы изменяются там же в папке application: В чистом SW можно без проблем изменить forget.php / register.php / cp.php / stat.php и если не ошибаюсь файлы рейтингов mmotop/l2top Для чего это нужно? В св весь контент выводить через тег {content} и бывают такие дизайны в которых места под контент очень мало. Например: При помощи этого способа можно переоформить например регистрацию: Делитесь своими наработками благодаря этому мы развиваемся и развиваем!
-
5 балловПожалуй начнем без долгих вступлений. В большинстве случаев сервер запускается на удаленной машине, а основная машина базируется на WinOS. Именно такой способ я и буду разбирать. 1. Необходимый софт Putty [скачать] WinSCP [скачать] 2. Соединяемся с сервером Запускаем putty.exe Вводим IP сервера и запускаем. Скрин снизу. Далее вводим логин и пароль от сервера. После удачного логина перед вами появится командная строка. 3. Установка компонентов Java JDK MySQL сервер/клиент Установка Java: Открываем терминал Вводим: apt-get install sun-java6-bin sun-java6-jre Установка Java 8: apt-get install oracle-java8-installer Вводим: update-java-alternatives -s java-6-sun #Устанавливаем ява sun - стандартной Java средой Проверка, вводим: java -Xmx100m -version #Если ошибок не выдает, то все ок Установка MySQL: Открываем терминал Вводим: apt-get install mysql-server mysql-client Во время установки система потребует ввести пароль для root пользователя MySQL 4. Передача сборки Открываем WinSCP который мы скачали в начале Подключаемся через него к нашему серверу (аналогично как в putty) Допустим у вас уже есть готовая сборка, не архивом,а просто папка В WinSCP на сервере создаем папку под сборку, к примеру /root/server В WinSCP заходим в папку на сервере, и выделяем нашу папку со сборкой на компе Нажимаем F5 -> пошла загрузка 5. Установка сборки Создаем базу mysql Вводим: mysql -u root -p #От нас потребуют пароль от root юзера который мы указывали при установке Вводим: CREATE DATABASE `server`; #Где server - имя создаваемой БД Вводим: exit Вводим: /etc/init.d/mysql restart Выдача прав root: grant all privileges on *.* to 'root'@'%' with grant option; С созданием базы все, теперь нужно ее заполнить Вводим: cd /root/server/tools #На PW папка не tools, а sql Вводим: chmod +rwx *.sh #Это дает rwx права sh файлам в данной папке Вместо *.sh желательно вбивать имена файлов, на PW это: login.sh и game.sh Вводим: sh ./installer.sh и устанавливаем сборку #На PW: sh ./login.sh и sh ./game.sh 6. Настройка и запуск сборки Настройку описывать не буду, там все просто Просто запускаем WinSCP -> соединяемся -> нажимаем на конфиг. файлы,открываем,редактируем,сохраняем Регистрация ГС (в PW не требуется) Вводим: cd /root/server/game/ #Путь до папки с гейм-сервером, в PW: gameserver Вводим: chmod +x registergameserver.sh #Выдаем права на запуск. Вводим: sh ./registergameserver.sh #Запускаем,регистрируем ГС Запуск сборки Вводим: cd /root/server/login/ Вводим: chmod +x *.sh или chmod +x start.sh Вводим: sh ./start.sh Если нету ошибок,поздравляю вы запустили логин, аналогично запускаем гейм Вводим: cd /root/server/game/ Вводим: chmod +x *.sh или chmod +x start.sh Вводим: sh ./start.sh Все, сервер запущен. Внимание, для установки Java теперь нужно добавить в ручную репозитарий. Для установки требуется добавить non-free репозитарии. В файле /etc/apt/sources.list было так: deb http://ftp.us.debian.org/debian/ squeeze main Сделать надо так: deb http://ftp.us.debian.org/debian/ squeeze main non-free После этого вы без проблем поставите Java. Внимание, для установки Java 8 нужно в ручную добавить репозитарий. deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise maindeb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main /etc/apt/sources.list - добавить в этот файл. После того как вы добавили репозитарий, вам не обходимо обновить список командой "apt-get update". После чего начать установку Java с помощью команд которые описаны выше. //франция - зеркало репозитария. deb http://ftp.fr.debian.org/debian wheezy main contrib non-freedeb-src http://ftp.fr.debian.org/debian wheezy main contrib non-freedeb http://ftp.fr.debian.org/debian wheezy-updates main contrib non-freedeb-src http://ftp.fr.debian.org/debian wheezy-updates main contrib non-freedeb http://ftp.fr.debian.org/debian wheezy-backports main contrib non-freedeb-src http://ftp.fr.debian.org/debian wheezy-backports main contrib non-freedeb http://security.debian.org/ wheezy/updates main contrib non-freedeb-src http://security.debian.org/ wheezy/updates main contrib non-free //Проблемы которые могут возникнуть Проблема: root@onix:~/onix/login# ./LoginServer_loop.sh: 2: ./LoginServer_loop.s: not found Исправление: Измените sh файл через notepad++, Правка > Формат конца строк > Преобразовать в Unix-формат (LF) Автор мануала: Pro (делалось для сборки pwsoft) Дополнил мануал: SteveDogs.
-
4 баллаСобираем исходники L2 при помощи ANTa, что же нам для этого понадобится? Сам ANT - Актуальная версия Java SE Development Kit - 6, 7, 8 Исходники с наличием файла build.xml, который обычно находится в корневой папке исходников 1. Скачиваем все это дело, размещаем в удобных для вас директориях, у меня все это располагается по таким путям D:\Program Files\AntC:\Program Files\Java\jdk1.8.0_65 2. Переходим "Свойства компьютера" - "Дополнительные параметры системы" - "Дополнительно" - "Переменные среды" https://yadi.sk/i/vBARbojZnGdJ7 3. Добавляем в "Системные переменные" в переменную Path, через символ ";" пути до папок bin от установленного софта. Прежде чем добавлять, убедитесь, что ранее не была добавлена, путем внимательного просмотра содержания "Значение переменной" нажмите "Ок" https://yadi.sk/i/gv85VpvXnGedR https://yadi.sk/i/K0jm8tMInGekr 4. В "Системных переменных" нажимаем "Создать" для создания новой переменной и присваиваем ей имя JAVA_HOME и значение путь до вашей папки JDK, жмем "Ок" во всех окнах с переменными и "Применить" в "Доп. параметрах" https://yadi.sk/i/4pSLGQa1nGftY 5. Переходим в папку с вашими исходниками (сурсами, Source и т.д.), где находится файл Build.xml и создаем там текстовый файл с простым содержанием ant -l Build.logилиant -f buildScripts.xml -l buildScripts.log Где -f наименование файла из которого берется информация для сборка исходов, по дефолту это build.txt, а -l наименование файла в который будет поступать информация и компиляции исходников или же возникающих проблемах. Сохраняем и переименовываем формат файла в .bat и запускаем данный файл https://yadi.sk/i/aHYdRDeCnGhu9 https://yadi.sk/i/a_9mZAH9nGiGy 6. При закрытии командной строки и успешной компиляции, вы увидите вот такое сообщение в конце лог файла BUILD SUCCESSFUL а так же появится новая папка build в которой будет находится скомпиленная сборка. https://yadi.sk/i/Sw8pbTPQnGjz
-
4 баллаСоздаем файл clantop.php в папке module и копируем туда этот код: <?php /** * STRESS WEB * @author S.T.R.E.S.S. * @copyright 2008 - 2012 STRESS WEB * @version 13 * @web http://stressweb.ru * @fix L2Banners.ru */ if ( !defined("STRESSWEB") ) die( "Access denied..." ); /****************************** * НАСТРОЙКА МОДУЛЯ ******************************/ $T_ENABLE = true; // вкл/выкл модуль $T_COUNT = 10; // количество результатов $T_SID = 1; // ID сервера с которого выводить результаты $T_CACHE = 5; // время кеширования в минутах, 0 - отключить /****************************** * ВЫВОД РЕЗУЛЬТАТОВ ******************************/ if ( !$T_ENABLE ) $tpl->SetResult( 'clantop' ); else { $clantop = $controller->GetCache( 'mod_clantop' ); if ( $clantop ) $tpl->SetResult( 'clantop', $clantop ); else { $db->gdb( $T_SID ); $T_SEL = $gdb[$T_SID]->query( "SELECT `clan_name`,`clan_level`,`reputation_score` FROM `clan_data` ORDER BY `clan_level` DESC, `reputation_score` DESC LIMIT {$T_COUNT}" ); if ( $gdb[$T_SID]->num_rows($T_SEL) > 0 ) { $T_N = 1; while ( $T_RESULT = $gdb[$T_SID]->fetch($T_SEL) ) { $tpl->LoadView( 'clantop' ); $tpl->Block( 'main', false ); $tpl->Block( 'item' ); $tpl->Set( 'n', $T_N ); $tpl->Set( 'clan_name', $T_RESULT['clan_name'] ); $tpl->Set( 'clan_level', $T_RESULT['clan_level'] ); $tpl->Set( 'reputation_score', $T_RESULT['reputation_score'] ); $tpl->Build( 'clantop_item' ); $T_N++; } $tpl->LoadView( 'clantop' ); $tpl->Block( 'item', false ); $tpl->Block( 'main' ); $tpl->Set( 'item', $tpl->GetResult('clantop_item', true) ); $tpl->Build( 'clantop' ); } else $tpl->SetResult( 'clantop' ); if ( $T_CACHE > 0 ) { $controller->SetCache( 'mod_clantop', $tpl->GetResult('clantop'), $T_CACHE ); } } } ?> В папке с шаблоном создаем файл clantop.tpl и записываем в него шаблон по умолчанию по аналогии с топ пвп/пк: [main] <!-- Модуль Clan Top --> <table id="l2clan"> <tr> <th>Клан</th> <th>Уровень</th> <th>Репутация</th> </tr> {item} </table> [/main] [item] <tr> <td>{n}. {clan_name}</td> <td>{clan_level}</td> <td>{reputation_score}</td> </tr> [/item] Естественно вы можете составить свой шаблон апеллируя новыми тегами {clan_name} - Название клана {clan_level} - Уровень клана {reputation_score} - Репутация клана В корне сайта заходим в папку dev и открываем файл cfg.default.php и находим: $SWMODULES = array( 'copyright', 'login', 'poll', 'server', 'pvptop', 'pktop', 'forum' ); Дописываем в массив после 'forum' : , 'clantop' Должно получиться как-то так: $SWMODULES = array( 'copyright', 'login', 'poll', 'server', 'pvptop', 'pktop', 'forum', 'clantop' ); Теперь в файле index.tpl будет доступен тег {clantop} с помощью которого и будет выводиться репутация кланов по аналогии с топ пвп/пк
-
4 баллаСсылка на Видео Инструкцию Урок по Photoshop - Как сделать объемный текст
-
4 баллаКруглый прогрессбар, линейный или просто вывод процента в числовом виде, обычно делают через JavaScript. Самым большим минусом данного способа является то, что через инспектор кода можно без проблем узнать онлайн, поэтому нужно не только ставить процент, но еще и накручивать онлайн для самых любознательных. Кроме того, не каждый умеет написать скрипт и уж тем более правильный скрипт. Все это можно сделать так же и через php, изменив всего пару строк в файле движка Stress Web 13 Итак начнем: Открываем файл module/server.php Находим: if ( !defined( "STRESSWEB" ) ) die( "Access denied..." ); Ниже дописываем: $server_full = 500; 500 - это онлайн который будет считаться 100% Далее находим: $slink = ( $l2cfg["mod_rewrite"] ) ? "/stat/s{$_S}":"/index.php?f=stat&sid={$_S}"; И ниже вставляем: $server_percent = intval( $Online / ( $server_full / 100 ) ); if ($server_percent > 100) { $server_percent = 100; } Тут мы рассчитываем процент и если процент после вычисления больше 100(онлайн больше 500), то записываем 100 Далее находим: $tpl->Set( "name", "{$l2cfg["gs"][$_S]["title"]}" ); Ниже дописываем: $tpl->Set( "percent", $server_percent ); Сохраняем! Теперь в шаблоне, в файле server.tpl доступен новый тег {percent} который соответственно выводит процент онлайна от указанного ранее максимального онлайна. Этот новый тег вы можете писать в любом месте между тегами [item] [/item] файла server.tpl Кто не хочет делать все это самостоятельно, можете скачать готовый файл тут
-
3 балла
-
2 баллаЕсли у вас возникла такая проблема, я вам подскажу как исправить. Переходим во вкладку > Внешний вид > Темы > topicviewtemplate ищем здесь такую строку: ipb.templates['post_moderation'] = new Template("<div id='comment_moderate_box' class='ipsFloatingAction' style='display: none'><span class='desc'>{$this->lang->words['comment_action_count']} </span><select id='tactInPopup' class='input_select'><option value='approve'>{$this->lang->words['cpt_approve']}</option><option value='delete'>{$this->lang->words['cpt_hide']}</option><option value='sundelete'>{$this->lang->words['cpt_undelete']}</option><option value='deletedo'>{$this->lang->words['cpt_delete']}</option><option value='merge'>{$this->lang->words['cpt_merge']}</option><option value='split'>{$this->lang->words['cpt_split']}</option><option value='move'>{$this->lang->words['cpt_move']}</option></select> <input type='button' class='input_submit' id='submitModAction' value='{$this->lang->words['comments_act_go']}' /></div>"); заменяем её на: ipb.topic.modPerms = []; <if test="$this->memberData['g_is_supmod']"> ipb.topic.modPerms['approve'] = 1; ipb.topic.modPerms['delete'] = 1; ipb.topic.modPerms['hide'] = 1; ipb.topic.modPerms['unhide'] = 1; ipb.topic.modPerms['merge'] = 1; ipb.topic.modPerms['split'] = 1; ipb.topic.modPerms['move'] = 1; <else /> <if test="isset( $this->memberData['forumsModeratorData'][ $forum['id'] ] )"> ipb.topic.modPerms['approve'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['post_q']}; ipb.topic.modPerms['delete'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['delete_post']}; ipb.topic.modPerms['hide'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['bw_mod_soft_delete']}; ipb.topic.modPerms['unhide'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['bw_mod_un_soft_delete']}; ipb.topic.modPerms['merge'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['split_merge']}; ipb.topic.modPerms['split'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['split_merge']}; ipb.topic.modPerms['move'] = {$this->memberData['forumsModeratorData'][ $forum['id'] ]['split_merge']}; </if> </if> ipb.templates['post_moderation'] = new Template("<div id='comment_moderate_box' class='ipsFloatingAction' style='display: none'><span class='desc'>{$this->lang->words['comment_action_count']} </span><select id='tactInPopup' class='input_select'><option value='approve'>{$this->lang->words['cpt_approve']}</option><option value='delete'>{$this->lang->words['cpt_hide']}</option><option value='sundelete'>{$this->lang->words['cpt_undelete']}</option><option value='deletedo'>{$this->lang->words['cpt_delete']}</option><option value='merge'>{$this->lang->words['cpt_merge']}</option><option value='split'>{$this->lang->words['cpt_split']}</option><option value='move'>{$this->lang->words['cpt_move']}</option></select> <input type='button' class='input_submit' id='submitModAction' value='{$this->lang->words['comments_act_go']}' /></div>"); Дальше ищем следующую вкладку > Внешний вид > Темы > forumIndexTemplate ищем такую строчку: ipb.templates['topic_moderation'] = new Template("<div id='comment_moderate_box' class='ipsFloatingAction' style='display: none'><span class='desc'>{$this->lang->words['f_comment_action_count']} </span><select id='tactInPopup' class='input_select'></select> <input type='button' class='input_submit' id='submitModAction' value='{$this->lang->words['comments_act_go']}' /></div>"); заменяем её на: ipb.forums.modPerms = []; <if test="$this->memberData['g_is_supmod']"> ipb.forums.modPerms['approve'] = 1; ipb.forums.modPerms['delete'] = 1; ipb.forums.modPerms['hide'] = 1; ipb.forums.modPerms['unhide'] = 1; ipb.forums.modPerms['pin'] = 1; ipb.forums.modPerms['unpin'] = 1; ipb.forums.modPerms['open'] = 1; ipb.forums.modPerms['close'] = 1; ipb.forums.modPerms['move'] = 1; ipb.forums.modPerms['merge'] = 1; <else /> <if test="isset( $this->memberData['forumsModeratorData'][ $forum_data['id'] ] )"> ipb.forums.modPerms['approve'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['topic_q']}; ipb.forums.modPerms['delete'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['delete_topic']}; ipb.forums.modPerms['hide'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['bw_mod_soft_delete']}; ipb.forums.modPerms['unhide'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['bw_mod_un_soft_delete']}; ipb.forums.modPerms['pin'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['pin_topic']}; ipb.forums.modPerms['unpin'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['unpin_topic']}; ipb.forums.modPerms['open'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['open_topic']}; ipb.forums.modPerms['close'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['close_topic']}; ipb.forums.modPerms['move'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['move_topic']}; ipb.forums.modPerms['merge'] = {$this->memberData['forumsModeratorData'][ $forum_data['id'] ]['split_merge']}; </if> </if> ipb.templates['topic_moderation'] = new Template("<div id='comment_moderate_box' class='ipsFloatingAction' style='display: none'><span class='desc'>{$this->lang->words['f_comment_action_count']} </span><select id='tactInPopup' class='input_select'></select> <input type='button' class='input_submit' id='submitModAction' value='{$this->lang->words['comments_act_go']}' /></div>"); Результат что же вы видим? о БОЖЕ ОНО РАБОАТЕТ!1!111!111!!!! СТАВЬ ПЛЮСИК ЕСЛИ ПОМОГЛО, ЕСЛИ НЕ ПОМОГЛО ЖМИ НА КОЛОКОЛЬЧИК ПОДПИСЫВАЙСЯ НА МОЕ СООБЩЕСТВО
-
2 баллаIP Tables и Защита от DDoS Внимание: работа с IPT на удаленной машине весьма опасна, не заблокируйте себе доступ к серверу Вариант №1: Запрет захода со сторонних стран Для облегчения польские девелоперы сделали скрипт. [Скачиваем его] Обязательно настройте страны внутри скрипта! Создаем папку /root/ddos Вводим: chmod +x count.sh Можем настроить страны для которых мы запрещаем соединение, они настраиваются в самом файле, открываем и редактируем. Вводим: cd /root/ddos && ./count.sh Запустили,скрипт внес изменения в IPtables P.S: по личному опыту знаю, что в большинстве случаев ддосят из азии, в основном китай. (самые дешевые сервера для ботнета) Вариант №2: Настройка соединений Так как на одного пользователя приходится - одно соединение с сервером, логично сделать ограничение. Для этого воспользуемся "connlimit" модом. Вводим: apt-get install user-mode-linux Теперь с помощью этого мода ограничим кол-во соединений на порт логина Вводим: iptables -A INPUT -p tcp --syn --dport 2106 -m connlimit --connlimit-above 20 -j REJECT --connlimit-above 20 - означает, что на логин приходится постепенно 20 соединений и не более На гейм-сервер думаю не актуально ставить такое ограничение, при досе свободные места забьются и никто не зайдет А вот на порт mysql я бы советовал поставить Вводим: iptables -A INPUT -p tcp --syn --dport 3306 -m connlimit --connlimit-above 30 -j REJECT Вариант №3: Установка правил Правил для IP Tables в интернете много, но не все вам нужны. Эти правила адаптированы под LineAge2 сервера. #!/bin/sh IPT=/sbin/iptables UNIPORTS="1024:65535" INET_IFACE="eth0" $IPT -F $IPT -X $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A OUTPUT -o eth0 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 2106 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 7777 -j ACCEPT $IPT -A INPUT -p ICMP -i eth0 -j ACCEPT $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65353 --sport 53 -j ACCE PT $IPT -A INPUT -p tcp -m tcp -m multiport -i $INET_IFACE --dport 1024:65535 -j AC CEPT --sports 80,443 ! --syn $IPT -A INPUT -p tcp -m tcp -i $INET_IFACE --dport 1024:65535 --sport 21 -j ACCE PT ! --syn $IPT -A INPUT -i eth0 -p tcp --dport 2106 -m state --state NEW -m connlimit --connlimit-above 20 -j REJECT $IPT -P INPUT DROP Внимание: скрипт работает только для подключения eth0 Установим эти правила Создаем файл .sh Пусть он будет расположен здесь: /root/server/ipt.sh Заполняем его нашими правилами(см. выше) Выдаем ему права на выполнение: Вводим: cd /root/server Вводим: chmod +x ipt.sh И запускаем: Вводим: sh ./ipt.sh Все, ваш сервер полностью готов. По всем вопросам можете обращаться ко мне @SteveDogs
-
2 баллаactionname-e.dat описание и назначение меню действий Alt-C (сесть, встать, аплодисменты и.т.д) armorgrp.dat список всех одежды в игре с описанием bighead.int настройка и описание классов binkw32.dl убыстряет игровой процесс ирая в два окна castlename-e.dat название замков и клан холлов chargrp.dat описание текстур чаров (обычно здесь меняет нижнее бельё на чаров) chatfilter.ini тут хранятся настройки наших окошек чата (общий, торговый, клановый, пати и алли). Лично я советую, чтоб клановый, алли и пати чат обязательно отображался на всех окошках, а то можно пропустить что-то важное classinfo-e.dat информация о разных классах, показывается при создании чара commandname-e.dat здесь хранится информация о командах, которые можно прописывать в чате. Пример:/loc - выведет ваше месторасположение по 3 осям - x,y,z. Не стал бы это трогать, так как можно нарушить структуру и игра может зависать, или вылетать. Сore.* под Windows. Данный файл требуется для запуска игры Lineage 2 creditgrp-e.dat здесь хранится информация о настройке заставки о создателях игры. Engine.* что то крутое - коль из него достают токин для сервера env.int свечение заточенного оружия etcitemgrp.dat собирание вещей в одну ячейку (напр. книги) (сопоставление текстуры с ID) eula-e.dat соглашение (Согласен/Не согласен) перед выбором сервера, соответствующее серверу gametip-e.dat полезные советы при загрузке игры hennagrp-e.dat как я понял, тут находятся имена тату huntingzone-e.dat сопоставление локации и название территории (названия зон охоты) itemname-e.dat здесь хранятся имена и описание вещей Вещи, Кристаллы, Цены. l2.ini содержит основные настройки клиента. И лишь малая часть из них может быть изменена непосредственно через опции клиента Localization.ini локация шрифт и текст logongrp.dat определение локации musicinfo.dat где какую музыку проигрывать Npcgrp.dat часть дропа спойла составная npcname-e.dat файл отвечает за отображение имен мобов. Над головой указаны: агр, хп, лвл мобов obscene-e.dat здесь находится фильтр мата, а если говорить конкретней не сам фильтр, а тот текст который фильтрует сервер. option.ini Все те параметры, которые мы задаем в настройках игры, хранятся здесь. Если игра запускается, но разрешение экрана не то, что нужно (все необходимые менюшки-окошки за границей видимости и нельзя даже произвести сброс параметров по-умолчанию) - удалить файл Option.ini перед запуском игры. optiondata_client-e.dat описание аугментированного оружия questname-e.dat В этом файле хранятся все названия квестов которые вы видите в клиенте когда бирете квест raiddata-e.dat Вся история рейд боссов игры servername-e.dat здесь распологаются названия серверов. Тоесть когда мы заходим в Lineage 2, авторизовавшись мы выбираем сервер. Так вот в этом файле хранятся их имена и их можно изменить на собственное. skillgrp.dat отвечает за связь скилла и его оформления, и за панель инфы о НПЦ/Мобе. Составная часть дропа и спойла skillname-e.dat названия скилов и их описание. Составная часть дропа спойла. skillsoundgrp.dat Озвучивание действий скилов. staticobject-e.dat в нем хранятся названия дверей которые существуют в Lineage symbolname-e.dat Точно незнаю, но точно знаю, что здесь есть тот текст или "смайл" когда в клиенте мы ругаемся матом вместо мата появляется sysstring-e.dat тут храниться инфа из меню логин, чар и т.д. меню, названия кнопок. systemmsg-e.dat Тут храниться системные сообщения. Пример: Вы нанесли X урона. Вы подобрали 12 аден. Я думаю понятно про что я говорю. user.ini содержит информацию о сервере и настройках клиента. В файле реализованы: оконный режим без рамки, увеличина дистанция отображения ников zonename-e.dat Тут храниться все то что появляется когда мы находимся на какой либо территории. Тоесть по среди экрана текст высвечивается - Gludio Territory и тд. localization.ini, largefont-e.gly, LargeFont-r.gly, LargeFont.gly, nwindow.dll, smallfont-e.gly, SmallFont-r.gly, smallfont.gly Это все нужно для поддержки русских шрифтов в патчах и чате. binkw32.dll убыстряет игровой процесс ирая в два окна help-r.utx отвечает за встроенную базу знаний в игру elp-r.utx Интерактивный помощник. Замена англоязычной версии меню Справка. L2Font-e.utx Текстуры основные игры, экран загрузки, карты. L2UI_CH3.utx фаил отвечающий за вид оформления игрового меню L2Text папка в которой полная русификация хелпа+некоторые квесты на русском. GameGuard Каталог (ГГ), с набором файлов, для защиты клиента от хакеров и читеров, Animations содержит текстуру все классов а так же эффектов действий Music все мелодия игры Sounds музыка и звуки в игре: движений, нажатий, действий и т.д. StaticMeshes текстура всех материалов (одежда, оружие, города) Во общем то что мы видим 3D объекты SysTextures текстура : карт, кнопок, иконок, меню...... 2D System главная папка. все настройки по отображение, движение, визуализации игры Voice озвучивание действий при начале игре. (например: для создание чара.....) fdarkelf.utx Текстуры женских моделей Тёмных эльфов fdwarf.utx Текстуры женских моделей Гномов felf.utx Текстуры женских моделей Светлых эльфов FFighter.utx Текстуры женских моделей Людей бойцов FMagic.utx Текстуры женских моделей Людей магов FOrc.utx Текстуры женских моделей Орков бойцов FShaman.utx Текстуры женских моделей Орков шаманов fkamael.utx Текстуры женских моделей Камаель mdarkelf.utx Текстуры мужских моделей Тёмных эльфов mdwarf.utx Текстуры мужских моделей Гномов melf.utx Текстуры мужских моделей Светлых эльфов MFighter.utx Текстуры мужских моделей Людей бойцов MMagic.utx Текстуры мужских моделей Людей магов MOrc.utx Текстуры мужских моделей Орков бойцов MShaman.utx Текстуры мужских моделей Орков шаманов mkamael.utx Текстуры мужских моделей Камаель gametip-e.dat полезные советы при загрузке игры
-
1 баллВсем доброго времени суток! В этом уроке мы с вами будем учиться использовать mysqli_prepare который сделает наш скрипт куда современнее + защитит от простых SQL инъекций. Что это и зачем это нужно Начнем с того, что MySQL перестал поддерживаться уже давным давно, на смену ему пришел MySQLi. Он стал куда сочнее и функциональнее да и пользоваться в целом им стало удобнее. Мы с вами остановимся конкретно на mysqli_prepare. Последнее что я выделил жирным это очень замечательно. Таким образом если наш зловредный школохакер захочет дропнуть нашу базу прописав в форму регистрации что то вроде : "; DROP TABLE l2jserver; # У него ничего не получится, ведь подготовленный запрос должен состоять из одного SQL выражения! Рассмотрим на конкретном примере Давайте представим что у нас стоит обычный MySQL и перед регистрацией аккаунта наш скрипт проверяет наличие аккаунта перед тем как его добавить (или вернуть ошибку что аккаунт существует). В таком случае PHP код регистрации будет выглядеть примерно так: <?php $connect=mysql_connect($host, $user, $password); // иницилизируем подключение mysql_select_db($connect, $dbname); // выбираем нужную бд $query='SELECT * FROM accounts WHERE login="'.$login.'"'; // объявляем переменную с запросом $result=mysql_query($query); // выполняем запрос $rows=mysql_num_rows($result); // получаем кол-во строк из результата if($rows) { // если строки найдены // аккаунт уже есть, выдаем ошбку; } else { // если строки не найдены // аккаунта нет, можем регистрировать; } mysql_close($connect); // закрываем подключение ?> А теперь давайте представим что мы школохакеры и хотим дропнуть базу сервера зная её название. Тогда вместо логина я должен указать: "; DROP DATABASE l2jserver; # # - нужна чтобы MySQL игнорировал всё что идёт после неё. Таким образом $query будет выглядеть следующим образом: $query='SELECT * FROM accounts WHERE login=""; DROP DATABASE l2jserver; #"'; За ним последует выполнение функции mysql_query и как следствие дроп базы сервера. Как этого избежать? - Юзай MySQLi! Теперь предлагаю рассмотреть код регистрации который мы привели выше с использованием MySQLi (без prepare). <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login="'.$_POST['login'].'"'; // объявляем переменную с запросом $result=$connect->query($query); // выполняем запрос $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $connect->close(); // закрываем подключение ?> Но этот скрипт до сих пор не безопасен, поскольку мы так же легко выполним два запроса одной функцией. Чтобы этого избежать будем использовать mysqli_prepare. Поехали!) <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login=?'; // объявляем переменную с запросом $stmt = $connect->prepare($query); // подготавливаем наш запрос $stmt->bind_param('s', $_POST['login']); // присваеваем первому ? в запросе параметр с типом данных s (string) $stmt->execute(); // выполняем подготовленный запрос $result=$stmt->get_result(); // получаем результат из подготовленного запроса $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $stmt->close(); // закрываем подготовленный запрос $connect->close(); // закрываем подключение ?> // P.S. Я сам только сейчас осваиваю эту функцию и поэтому для усвоения решил написать этот мануал. Поэтому если что то не так - поправьте. Теперь давайте по порядку. Мы можем забиндить (функция bind_param) сколько угодно параметров любого типа данных. Главное чтобы мы их объявляли по порядку исходя из нашего запроса. В $query где login=? мы даем понять коду что мы хотим вместо ? подставить параметры которые мы присвоили ниже функцией bind_param. Таким образом мы можем строить куда более сложные запросы и использовать разные типы данных. Как в примере ниже: <?php $accesslevel=0; $stmt = $mysqli->prepare( "INSERT INTO accounts ( login, password, accesslevel ) VALUES (?,?,?)" ); $stmt->bind_param( "ssi", $_POST['char_name'], $_POST['password'], $accesslevel ); $stmt->execute(); $stmt->close(); ?> Что у нас получается. В наш запрос будут подставлены данные из переменных с тем типом данных которые мы указали перед первой запятой в кавычках. i - int (целое число) s - string (строковое значение) Теперь когда наш школохакер захочет выполнить sql инъекцию система просто не даст ему это сделать, поскольку подготовленный запрос может быть только один. Для подстраховки вы можете так же использовать функцию экранирования mysqli->real_escape_string($string); перед тем как подставить эти данные в запрос, но это для супер параноиков т.к. prepare автоматически экранирует данные. Надеюсь урок будет полезен и расширит ваш кругозор!) Не откажусь от благодарности. Всем спасибо за внимание!
-
1 баллМножество администраторов Lineage2 сталкиваются с проблемой настройки времени на своих серверах, в этом мануале постараемся их решить вместе с вами. Для начала разберем понятия, и термины связанные с временем в unix/debian Date — утилита Unix/Linux для работы с системными часами. Если вызвать date без параметров, то будет выведена текущая дата и время, соответствующие текущему часовому поясу. Чтобы посмотреть время в часовом поясе UTC, используйте команду date --utc (или сокращенно date -u). Необходимо следить за правильностью установки даты и времени, это нужно для корректной работы планировщика задач. Также, время и дата указывается во все основные системные лог-файлы и лог-файлы посещений веб-сервера. Как изменить временную зону в Debian/Linux? Нужно создать симлинк из /etc/localtime на "нужный" файл из каталога /usr/share/zoneinfo/: Выполняем команду: ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime Также советую изменить соответствующую запись в /etc/timezone Как изменить дату и время в Debian/Linux? date MMDDhhmmYYYY.ss Устанавливаем параметры указанные ниже. MM - месяц DD - день hh - час mm - минуты YYYY - год ss - секунды Как изменить время в Debian/Linux? date --set hh:mm Ставим вручную hh(час) / mm(минуты) допустим 21:42. Как синхронизировать время в Debian/Linux? Выполняем команду: ntpdate-debian Список серверов синхронизации можно посмотреть, и изменить здесь - /etc/default/ntpdate Чаще всего проще использовать команду для смены часового пояса. вводим команду в консоль. dpkg-reconfigure tzdata Выбираем: Europe --> Moscow Результат который должен появится после выбора: Current default time zone: 'Europe/Moscow' Local time is now: Tue Jan 9 06:20:33 MSK 2018. Universal Time is now: Tue Jan 9 03:20:33 UTC 2018. Автор: MishLen / linux-freebsd.ru Дописал: @SteveDogs
-
1 балл
-
1 баллПо умолчанию в sw 13 месяц осады выводится на англ языке из 3 букв 'jan', 'feb', 'mar' и т.д.. На гифке в низу показано как декабрь выводится как Dec Чтобы изменить на русский язык заходим в application/stat.php Находим строку: $tpl->Set( $key.'SiegeDate', $val['SiegeDate'] ); и заменяем её на: $tpl->Set( $key.'SiegeDate', str_ireplace(array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'), array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'), $val['SiegeDate']) );
-
1 баллЕсли вы забыли пароль от админки Stress Web или по каким-либо другим причинам не можете войти в админ панель, решение достаточно простое: 1) Любым доступным способом необходимо подключится к базе данных сайта SW13 2) Сделать запрос: INSERT INTO `stress_admin` (`id`, `login`, `password`, `nick`) VALUES (666, 'adminreset', 'GseSY9qBaQY0PrkSCwqmmUl28Hs=', 'adminreset'); 3) Можете входить в админку: Account - adminresetPassword - adminreset После входа обязательно перейдите во вкладку "Администраторы", поставьте на свой аккаунт новый пароль, а пользователя adminreset просто удалите.
-
1 баллНедавно создавал топик в общении на тему актуальности манула по созданию и развитию собственного проекта lineage 2 с нуля. Мнения разделились, но вопрос рекламы явно интересен многим начинающим администраторам, поэтому в благодарность форуму и его обитателям за отзывчивость и наставления, данный гайд будет посвящен рекламе и раскрутке сервера. Пользоваться я буду данными полученными из личного опыта и в конце озвучу свои скромные результаты. Оглавление: 1) База 2) Выбор площадок 3) Итоги 1. Пускать рекламу на "сырой" проект - равносильно подаянию "якобы-нищим" в вагонах столичного метро - лучше просто отдать деньги местным форумчанам, Вы все равно их потеряете! Поэтому все далее описанное подразумевает, что у Вас уже есть: * Поставленный сервер (машина, сборка, веб-обвязка, форум, SSM) * Настроен авто-донат (ОЧЕНЬ ВАЖНЫЙ ПУНКТ) * Определены бюджет и дата открытия 1.1 Первое с чего необходимо начать это решить простую задачу - показать входящему трафику (потенциальным игрокам), что проект сможет как минимум стартовать и на нем будет некое количество игроков. Как показала практика 97% трафика переходящего на Ваш сайт по рекламе - первым делом идут на форум! Форум - есть показатель "раскрученности" и жизнеспособности вашего проекта. Если зайдя на форум, посетитель видит нулевые показатели активности, то в 90% случаев он разворачивается не ознакамливаясь с описанием проекта. Таким образом, для начала нам необходимо наполнение форума и создание на нем активности или видимости этой активности. Теперь разберем по пунктам, как этого добиться: a) Наполнение контентом - заливайте на форум максимум информации которая может быть полезна будущим игрокам, описание сервера, анонсы обт\открытия, разнообразные акции (кстати это пункт SMM), гайды по игре, информация о технических доработках и игровых изменениях, полезный софт (прим. патч клиента для игры на Win 10), в общем все, что может быть интересно к ознакомлению, но без лишнего хлама! * маленький совет, если Вы являетесь единственным администратором на проекте, создайте пару левых учетных записей со статусом адм\гм\модер - так не ведающие будут думать, что проектом занимается целая команда b.) Срач - к моменту запуска рекламы и старта ОБТ, на форуме уже должна быть активность! Наивно полагать "Вот ща я запущу обт и игроки сами придут ко мне на форум и там будут общаться" - нет не будут, и более того, увидев 0 активность (не считая 5 учеток админов, которые Вы создали и yandex, google роботов) игроки скорее всего даже не зайдут на ОБТ. Поэтому как бы это не выглядело парадоксально, Вам опять таки придется создавать видимость этой активности. Попросите друзей, которые играли\играют в л2, создайте топики на тематических форумах ( не рассчитывайте на халявный help, как минимум будьте готовы скинуть на бутылочку-другую), регистрируйте фейковые учетки и от их лица создавайте топики, посты и лайки. В идеале у Вас должны быть как минимум два живых сайда, которые необходимо столкнуть лбами и на форуме и в игре! с) Статистика. Есть определенные зависимости между живостью в темах и пользователями\посетителями. Так к примеру если на вашем форуме очень много сообщений и топиков, а активных пользователей за 15 мин один, не сложно догадаться, что админ тупо релогает учетки и набивает посты, согласитесь убого выглядит в глазах еще не играющего на вашем проекте игрока. Но скрывать статистику - тоже не лучшее решение, т.к. это первое на что смотрят перешедшие с сайта игроки. На нее идет не малый ориентир. Значит необходимо все это дело "настроить" Если Вы используете для своего форума платформу IPB, то по дефолту в верхнем правом углу окна статистики будет стоять "Пользователей онлайн: (N-число) за последние (N-времени). Поставьте в админке вывод активных посетителей скажем за 2 часа, а в коде уберите выводящееся время или поменяйте на 15 мин (более сложный вариант). Тогда все кто посещал ваш форум, будут показываться активными в течение всего этого времени. Так же разбавить серую унылость в списке посетителей нам поможет чудо-скипт Elven-script, ознакомиться и скачать его Вы можете Здесь в общем это накрутка пользователей и активности на форуме, юзайте аккуратно дабы не возникало подозрений со стороны игроков И не забываем выражать благодарность авторам плюшек. 1.2 С форумом вроде бы разобрались, теперь переходим к SMM. Принцип работы и назначение примерно схожи с форумом, у Вас должны иметься заполненные контентом группы\странички в популярных среди игроков социальных сетях - по дефолту это VK и Facebook, реже OK и Instagram. Перед тем как пускать "живой" трафик на эти странички, там так-же как и в случае с форумом необходимо навести марафет. Попросите добавиться всех ваших друзей и знакомых, накидайте контента и накрутите хотя-бы пару сот подписчиков и с десяток постов с лайк-репостами. Помогут в накрутке разнообразные сервисы работающие как платно, так и бесплатно - по принципу ты налайкал, получил за это бонусы, потом за эти бонусы накрутил подписчиков\лайков в свою группу. Лично я пользуюсь данными двумя: Socgain.com (не реклама) и fastfreelikes.com (не реклама). Далее Вы ведете трафик с форума на данные страницы и обратно. Самый простой способ это акции поощряемые игровыми плюшками. Благо примеров полным полно, заходим на форум любого топового проекта и черпаем от туда идеи (хочу заметить уже проверенные на практике). Как только в группу начинают вступать реальные люди, которые реально играют в ла2 - начинайте по-тихому чистить страничку от "собачек" (накрученные мертвые души). Еще один не маловажный пункт это спам по соц.сетям, эл.почте, скайпам, информационных сообщений об открытие вашего проекта, писать стоит в первую очередь КЛам и ПЛам среднего уровня, контакты которых можно найти на форумах live проектов Lineage 2 соответствующих хроник. Делать это необходимо параллельно с запуском основной рекламы. И да - будет много агра, поэтому стоит заранее запастись левыми аккаунтами с которых вы будете проворачивать данные махинации. В окончание данного пункта хочу отметить, что по эффективности грамотный SMM ничем не уступает платной рекламе, и заслуживает отдельной темы на несколько страниц. * Так же во время запуска ОБТ стоит посадить некоторое количество фейковых персонажей разной масти на офлайн трейд с надписями типа "увидимся на старте" "Норм серв" и т.п. но делать это тоже необходимо с умом. 2. Выбор площадок. Можно условно разделить на платные и бесплатные, но в 90% случаев это именно платная реклама, которая приносит разный результат. 2.1 Анонсеры. Существует с десяток сайтов-анонсеров где можно и необходимо размещать рекламу вашего проекта. Подбор не сложен, это те площадки сайты которых вываливаются в топе поисковиков по определенным релевантным запросам. Для моего проекта мною были выбраны следующие: l2hop.com (не реклама) la2-anons.ru (не реклама) l2oops.com (не реклама) l2op.ru (не реклама) new-lineage.ru (не реклама) pickns.ru (не реклама) mmotop.ru (не реклама) l2top.ru (не реклама) la2-anons.ru (не реклама) Последний кстати, почему-то на момент написания данной статьи лежит Все эти сервисы работают по принципу размещение кнопки с их кодом, на вашем сайте, с последующим попаданием в анонсы и рейтинги игровых серверов. Но не надо думать, что Вы сможете добавиться на все из них, некоторые попросят за это небольшую сумму денег, а некоторые и вовсе проигнорируют ваши заявки. В 90% случаев размещение кнопки возможно только без изменения кода (в том числе CSS) и Вам доступно до 4х позиций на вашем сайте (углы экрана), так же есть уникумы, которые категорически не приемлют наличие кнопок других анонсеров на вашем ресурсе. Из личного опыта: la2-anons.ru (не реклама) - прямо в условиях просит за добавление вашего сайта 600 деревянных, после оплаты практически сразу добавляет ваш проект в список серверов, которые скоро откроются. И хоть 600руб - это сумма которая была указана за неделю пребывания в данном анонсере, по истечении этого времени и уже после старта сервера, мой проект перевели в раздел уже открывшихся и он висит там по сей день (около 1.5 месяцев). Лично мне данный субъект вел около 20 уникальных посетителей в сутки. new-lineage.ru (не реклама) - второй анонсер, который я добавил, хоть у них в соглашении и указано, что добавление якобы бесплатно, в течение дня со мной связался админ и попросил за добавление 300р. Черт с ними, это не деньги, отдал и получил размещение, VIP статус брать не стал, т.к. рядом со мной крутился La2Dream.su (не реклама), как такой же простой смертный без vip статусов. Еще примерно 20 уникалок в копилку общего трафика. На l2top.ru (не реклама) и mmotop.ru (не реклама) я попал совершенно бесплатно, хоть и не сразу. От других анонсеров, эти два отличает рейтинговая система выдачи. Т.е. не важно какие фильтры ставит потенциальный игрок при поиске игрового сервера, позиция в выдаче напрямую зависит от количества голосов за ваш проект! Так же очень важно проверить не существует ли уже добавленный в рейтинг проект со сходными названием и доменом, у меня как раз случилось так, и пиар я хочу вам сказать не очень хороший. Там были негативные отзывы о предыдущей администрации ( и мало того негативные, так еще и не обработанные по возражениям) и все это привело к тому, что я добавился туда только спустя неделю. Про остальных резидентов из выше упомянутого списка я вообще промолчу. Господа просто проигнорировали мои потуги добавиться к ним в анонсы, не предлагали никаких сумм, проще говоря забили. В завершение пункта, отмечу, что не стоит облеплять Frontend сайта вашего проекта кнопками анонсов, как остановку на улице - выглядеть в галазах игроков это тоже будет дешево и убого. * Маленький лайф-хак. Можно создать клон вашего основного сайта и вывесить его на отдельный домен, облепить его самыми печальными анонсами, которые только развиваются и имеют низкую посещаемость, а с этого клона поставить линк на ваш основной форум. В итоге мы имеем: еще некоторое количество трафика, люди могут регистрироваться и скачивать патч с клона, а перейдя на форум они при обратном возвращении через шапку форума будут попадать на основной сайт. * На вашем основном сайте должны быть счетчики посещаемости с открытой статистикой, для того, чтобы апнуть цифры, можно воспользоваться автосёрфингом. 2.2 Медийная реклама. Переходя на всё те же сайты анонсеров, мы всегда натыкаемся на разного рода, и масти обои, и баннеры. Обои - один из самых эффективных видов рекламы приносящий дикий трафик на Ваш проект, но стоит это удовольствие безумно дорого и лично мне как начинающему и не опытному, были не по карману. Да и слить в только вылупляющийся проект пару-другую тысяч баксов - проще простого. Поэтому мной было выбрано размещение одного единственного баннера на mmotop. Не судите строго за банер, это мои первые работы. Как оказалось, размещение подобного рода медийки почти всегда происходит не через администрацию анонсеров, а через рекламное агенство, которое арендует "места" на сайтах анонсов, и уже в свою очередь пересдает их в аренду конечному заказчику. В моем случае таким агентством стал сервис oyy.ru (не реклама). Если Вас интересует какая-то конкретная площадка, то вы легко можете увидеть подобные ссылки на рекламодателя, под действующими баннерами. Как и многих других меня прямо таки скажу заманили надписью "от 20 руб. за 1000 показов" На самом деле все оказалось куда прозаичнее - минимальное количество показов которые вы можете заказать = 100.000 и того на размещение 1го банера пришлось влить 2000руб. Будучи связанным ранее с контекстной рекламой, я ошибочно предположил, что сто тысяч показов, умноженные на минимальный по меркам яндекса и гугла CTR в медийке, я получу более дешевый, чем обычный контекст - траф. Ага... Вот результаты: Просмотры скручиваются нещадно, по 20-25к в сутки, откуда такая посещаемость раздела l2 в mmotop только богу известно, их же открытый счетчик указывает что общее число посетителей примерно 25к за день и это по всем разделам, а мой баннер пилил место с банером конкурента выстреливая поочередно. Путем не сложных математических расчетов, получаем 2.000 : 314 = ~6 руб 40 коп. за клик. К примеру в том же yandex.direct можно купить клики схожего по релевантности трафика за 4 рубля, будучи полным нолем в контекстной рекламе, и при этом быть уверенным на 99% в уникальности этих кликов (яд возвращает бабло за с клики произведенные в сутки с 1го IP) Вобщем дело ваше товарищи, как говориться на вкус и цвет, но я думаю можно и повыгодней. Такую же самую по принципу рекламу, можно пускать через таргетинг yandex\google в социальные сети. И как подсказали знающие люди, только так и можно размещать подобного рода рекламу в соц.сетях. При всем желании разместить свой банер скажем Вконтакте - вы не сможете, объявление забанят. Яндекс и Гугл в этот раз я не использовал, а стоило! 3. Итоги * Банер - покрутился 4 дня перед самым стартом сервера * Анонсы - запущены за неделю до старта сервера * Рейтинги - запущены на старте сервера * SMM и СПАМ - минимальный, честно говоря было уже впадлу. (не повторяйте моих ошибок) * Контекст - не крутился вообще (не повторяйте моих ошибок) Было потрачено около 3к рублей на платную рекламу, проделана работа по форуму и SMM, спамил я крайне не активно и с учетом того, что донат я настроил только через неделю (вместо заявленных игрокам 3-х дней) я ожидал полного фейла. Стартовый онлайн не перевалил за 50 Далее устаканился и держался в районе 30 около 2х недель, потом еще столько же 20. На мое удивление серв окупился и принес 100% прибыль сверху. (в общем около 10к руб) В любом случае изначально было решено тянуть проект годик-два из своего кармана. Не серчайте на качество мануала, это мой первый, по вашему желанию и моему нарастающему опыту - он будет обновляться и дополняться.
-
1 баллtag_? - зачем это? (всегда значение одинаковое). quest_id - ID квеста. quest_prog - Поочередность этапа квеста. main_name - Название квеста. prog_name - Название этапа квеста. description - Описание этапа квеста. cnt1 - кол-во занятых столбцов: items. items - ID используемых итемов. cnt2 - кол-во занятых столбцов: num_items. num_items - кол-во используемых итемов. quest_x quest_y quest_z - Координаты ЭТАПА квеста. lvl_min lvl_max - мин. и макс. уровень квеста. quest_type - повторяющийся или одноразовый. 0 - повторяющийся, 1 - одноразовый, я ставил 2 - тоже повторяющийся. entity_name - Имя NPC к которому нужно идти по этапу квеста. get_item_in_quest - Не имею понятия. Нашарил на англ форуме и переводчик гласит так: 1 = Вам товар в квест часть, 0 = Нет объекта, полученной в поисках. UNK_1 - ? - Не имею понятия. Нашарил на англ форуме и переводчик гласит так:1 = же вкладке стек, 0 = конец стека (например:|11110|10| если УР во 2-м стеком ИД 6 или 7 В поисках прог|12345|67| отображается стек будет |167| в дисплее). UNK_2 - ? - Не имею понятия. Англ форум тоже не имеет понятия. contact_npc_id - Начальный NPC квеста. contact_npc_x,contact_npc_y,contact_npc_z - Нахождение NPC у которого берется квест. restricions - Требования по квесту. short_description - краткое описание квеста. cnt3 - Кол-во классов которые могут взять квест. req_class - ID классов которые могут взять квест. cnt4 - Кол-во видов необходимых итемов для начала квеста(то есть занятых столбцов: req_item). req_item - ID итемов необходимых для начала квеста. clan_pet_quest - Квест для клана или нет. 1 - для клана, 0 - нет. req_quest_complete - ID выполненного квеста, для выполнения этого. UNK_3 - ? (не в одном из стандартных квестов, эта графа не меняется, постоянно стоит 0). area_id - ID города к которому привязан квест. Оригиналы с англ форума: get_item_in_quest - 1 = get item in quest part, 0 = no item obtained in quest. UNK_1 - 1 = same tab stack, 0 = end of stack (ex: |11110|10| if ur in the 2nd stack id 6 or 7 in quest prog |12345|67| the displayed stack would be |167| in the display). UNK_2 - no clue. UNK_3 - unknown all 0
-
1 балл1. Заходим на свой сервер : L2jFrozen\GameServer\head-src\com\l2jfrozen\gameserver\handler\itemhandlers Пример показан на сборке ( Frozen ) 2.Создаем файл EffectMusic.java и вставляем его в него: /* music effectpackage com.l2jfrozen.gameserver.handler.itemhandlers;import com.l2jfrozen.gameserver.handler.IItemHandler;import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;import com.l2jfrozen.gameserver.model.actor.instance.L2PlayableInstance;import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;import com.l2jfrozen.gameserver.network.serverpackets.PlaySound;/*** @author devScarlet & mrTJO*/public class MusicItem implements IItemHandler{private static int[] _itemIds ={50000};@Overridepublic void useItem(L2PlayableInstance playable, L2ItemInstance item){if(!(playable instanceof L2PcInstance))return;L2PcInstance activeChar = (L2PcInstance) playable;int itemId = item.getItemId();if(activeChar.isParalyzed()){activeChar.sendMessage("Во время парализующего эффекта вы не можете использовать это действие!");activeChar.sendPacket(ActionFailed.STATIC_PACKET);return;}if(itemId == 50000) // Token of Love{PlaySound _snd3 = new PlaySound(1, "triple_kill", 0, 0, 0, 0, 0);activeChar.sendPacket(_snd3);playable.destroyItem("Consume", item.getObjectId(), 1, null, false);}activeChar = null;}/*** @see com.l2jfrozen.gameserver.handler.IItemHandler#getItemIds()*/@Overridepublic int[] getItemIds(){return _itemIds;}} <Дополнение:> Обратите внимание на сроки в коде: PlaySound _snd3 = new PlaySound(1, "triple_kill", 0, 0, 0, 0, 0); Воспроизводит OGG файл с названием triple_kil сам файл кидать в music с игрой ! </Дополнение:> 3.Находим файл ItemHandler.java и прописываем туда наш музыкальный эффект : import com.l2jfrozen.gameserver.handler.itemhandlers.EffectMusic; 3.1 А также после : registerItemHandler(new ChristmasTree()); Ставим : registerItemHandler(new EffectMusic());
-
1 баллПоскольку при первой установке своего сервера на Debian 7 были трудности я решил создать новый мануал. Скачиваем и устанавливаем нужные программы для Windows: Открываем Putty: В строку Host Name (or IP adress) - вписываем IP адрес VPS Выбираем Connection type: SSH В колонке с настройками с лева выбираем : Windows>Translation>Remote character set > UTF-8 Коннектимся! Вводим данные VPS которые пришли вам на email. По стандарту имя пользователя стоит "root" Username: root Password: Ваш пароль Не пугайтесь при вводе пароля звёздочки не отображаются но всё работает После этого система попросит вас сменить пароль: Вводим текущий пароль и вводим новый. Скачиваем и устанавливаем нужные программы для Debian. Базовые нужные программы для запуска мы установили. Добавление папки: Открываем WinSCP Заходим в папку root добавляем к примеру папку server (Правой клавишей мышки Новый>Папка) Cкидываем архив в папку. Перенос и разархиварование. Открываем Putty Вводим: cd server unzip имя файла.zip -d destination_folder Наш архив с сервером разархивируется в папку destination_folder Заходим в WinSCP жмём обновить. Перемещаем файлы куда нам нужно. Создание Mysql базы: Открываем Putty пишем mysql -p Вводим пароль от Mysql базы. CREATE DATABASE имя базы ; - не забудьте поставить точку с запятой и писать с заглавных букв. Посмотреть созданные базы: SHOW DATABASES; Настройка запуска Sh: Заходим в папку Loginserver cd server/loginserver Вводим chmod +rwx имя файла.sh cd - Перейти в root папку. cd server/gameserver Вводим chmod +rwx имя файла.sh Аналогично делаем с database_installer или другим инсталлером базы сервера. Устанавливайте права не только на gameserver.sh но и на другие находящиеся в папке файлы .sh Конвертируйте файлы .sh при помощи программы dos2unix для этого в консоле нужно набрать: dos2unix имя_файла.sh Увидим такую надпись dos2unix: converting file start.sh to Unix format ... Запуск сервера Переходим в папки и запускаем ./имя файла.sh Как сделать себя админом? Точно так же как и в win но для этого заходим в установленный нами phpmyadmin В браузерной строке набираем IP нашего сервера /phpmyadmin
-
1 баллИдём в папку: net/sf/l2j/gameserver/clientpackets/ и открываем файл UseItem.java Ищем там: if (Config.DEBUG) _log.finest(activeChar.getObjectId() + ": use item " + _objectId); if (item.isEquipable()) После чего вставляем данный код: if(!activeChar.isGM()) { if(item.getItem().getType2() == L2Item.TYPE2_WEAPON && item.getEnchantLevel() > Config.ENCHANT_WEAPON_MAX) { activeChar.setAccountAccesslevel(-999); activeChar.sendMessage("You have been banned for using an item wich is over enchanted!!"); activeChar.closeNetConnection(); return; } if(item.getItem().getType2() == L2Item.TYPE2_SHIELD_ARMOR && item.getEnchantLevel() > Config.ENCHANT_ARMOR_MAX) { activeChar.setAccountAccesslevel(-999); activeChar.sendMessage("You have been banned for using an item wich is over enchanted!!"); activeChar.closeNetConnection(); return; } if(item.getItem().getType2() == L2Item.TYPE2_ACCESSORY && item.getEnchantLevel() > Config.ENCHANT_JEWELRY_MAX) { activeChar.setAccountAccesslevel(-999); activeChar.sendMessage("You have been banned for using an item wich is over enchanted!"); activeChar.closeNetConnection(); return; } } Автор: la2vampir
-
1 баллАвтором данного мануала я не являюсь, но думаю он вам пригадится. РРедактирование XML поможет Вам в изменении "статов" скилов, брони, разного вида оружия и прочего. Так-же она пригодиться тем, кто занимается созданием магазинов и их редактированием. Для начала напишем небольшой пример[u] XML кода[/u] + комментарии к нему. ( Данные строчки можете использовать при [u]редактировании [/u]своих[u] xml файлов[/u]. ) <mul order="0x30" stat="mAtk" val="1.40"/> <!-- M atk +40% --> <mul order="0x30" stat="pDef" val="1.40"/> <!-- P. Def. +40% --> <mul order="0x30" stat="mDef" val="1.40"/> <!-- M. Def. +40% --> <mul order="0x30" stat="mAtkSpd" val="1.40"/> <!-- Casting Spd. +40% --> <mul order="0x30" stat="mCritRate" val="3.00"/> <!-- Magic Crit. Rate +300% --> <mul order="0x30" stat="gainHp" val="1.20"/> <!-- Heal +20% --> <mul order="0x30" stat="rShld" val="1.60"/> <!-- Shield Defense +60% --> <mul order="0x30" stat="regMp" val="2.00"/> <!-- MP Regeneration +200% --> <mul order="0x30" stat="regHp" val="2.00"/> <!-- HP Regeneration +200% --> <mul order="0x30" stat="regCp" val="2.00"/> <!-- CP Regeneration +200% --> <add order="0x40" stat="runSpd" val="50"/> <!-- Speed +50 --> <add order="0x40" stat="rEvas" val="10"/> <!-- Evasion +10 --> <add order="0x40" stat="accCombat" val="10"/> <!-- Accuracy +10 --> <add order="0x40" stat="reflectDam" val="30"/> <!-- Reflect damage by enemy +30% --> <add order="0x40" stat="maxMp" val="10000"/> <!-- Max MP +10000 --> <add order="0x40" stat="maxHp" val="10000"/> <!-- Max HP +10000 --> <add order="0x40" stat="maxCp" val="10000"/> <!-- Max CP +10000 --> <add order="0x40" stat="WIT" val="7"/> <!-- WIT +7 --> <add order="0x40" stat="CON" val="7"/> <!-- CON +7 --> <add order="0x40" stat="STR" val="7"/> <!-- STR +7 --> <add order="0x40" stat="MEN" val="7"/> <!-- MEN +7 --> <add order="0x40" stat="INT" val="7"/> <!-- INT +7 --> <add order="0x40" stat="DEX" val="7"/> <!-- DEX +7 --> <add order="0x40" stat="rootRes" val="200"/> <!-- Root Resistance +200% --> <add order="0x40" stat="earthRes" val="200"/> <!-- Earth Resistance +200% --> <add order="0x40" stat="derangementRes" val="200"/> <!-- Mental Reistance +200% --> <add order="0x40" stat="fireRes" val="200"/> <!-- Fire Resistance +200% --> <add order="0x40" stat="paralyzeRes" val="200"/> <!-- Paralysis Resistance +200% --> <add order="0x40" stat="sleepRes" val="200"/> <!-- Sleep Resistance +200% --> <add order="0x40" stat="rootRes" val="200"/> <!-- Hold Resistance +200% --> <add order="0x40" stat="poisonRes" val="200"/> <!-- Poision Resistance +200% --> <add order="0x40" stat="stunRes" val="200"/> <!-- Stun Resistance +200% --> <add order="0x40" stat="bleedRes" val="200"/> <!-- Bleed Resistance +200% --> <add order="0x40" stat="maxLoad" val="99999"/> <!-- Point at which a weight penalty is applied +99999 --> <add order="0x40" stat="cancel" val="300"/> <!-- Small decrease in chance of spell interruption - TO CHECK --> И так, поехали... 1. Введение Что такое XML? Этот формат, предназначенный для хранения структурированных данных, для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки (например, XHTML), иногда называемых словарями. Первая строка XML-документа называется объявлением XML — это необязательная строка, указывающая версию стандарта XML (обычно это 1.0), также здесь может быть указана кодировка символов и внешние зависимости. <?xml version="1.0" encoding="UTF-8"?> Спецификация требует, чтобы процессоры XML обязательно поддерживали Юникод-кодировки UTF-8 и UTF-16. Но признаются допустимыми, поддерживаются и широко используются и другие кодировки. Так же в XML есть возможность добавления комментария. Комментарий может быть размещен в любом месте дерева. XML комментарии размещаются внутри пары тегов <!-- и -->. Два знака дефис (--) не могут быть применены ни в какой части внутр. комментария. Вот пример комментария: <!-- Текст коментария --> Не будем углубляться во все особенности XML, нас интересует только часть, которая касается Lineage 2. XML в сервере Lineage применяется для описания статов оружия, брони, скилов, аргументов, зон, магазинов, зон рестарта чаров и много другого. Для оружия это например параметры физ. и маг. атаки, для брони - защиты, для скилов - продолжительность действия, сила, эффект и т.д. А например в файле "servername.xml" хранятся имена серверов по умолчанию. Эти имена когут быть легко изменены. Но помимо изменений на серверной части необходимы и изменения со стороны клиента (со стороны клиента необходимо изменить файл "servername-e.dat". Изменяться *.dat файлы клиента могут с помощью специальных программ. В XML файлах зон хранятся параметры этих зон. Есть и XML файлы где к определенному предмету приписывается определенный скил(например ошейнику волка привязывается скилы вызова волка). 2. Основы Что нужно знать как основу для редактирования? 1) XML файлы по умолчанию хранятся в папках gameserver\data\ и открываются любым текстовым редактором что работыет с UTF кодировками. 2) Имена *.xml файлов даются по диапазону id статов, Например в файле с именем 0800-0899.xml будут статы от id=800 до id=899. Для быстродействия желательно (но не обязательно) в одном файле хранить не больше ста id. Надо сказать что в названиях могут быть исключения, файлы могут называться и без указания диапазона id которые в нем хранятся. Такое характерно для аргументов и зон и файла с итемами петов. 3) При использовании текста рекомендовано (но не обезательно) использовать латинские символы. 4) Параметр ID должен быть в диапазоне от 1 до 2ккк 3. Редактирование статов и скилов. В папке stats можно найти несколько папок которые отвечают за параметры брони, оружия, аргументов, скилов и некоторых других предметов (например банок для востоновления хп/цп/мп или свитков с бафовами). Формат записи одного стата следующий: <item id='числовой_идентификатор' name="Название стата"> <for> <add val='значение' order="приоритет" stat='название стата'/> <mul val='значение' order="приоритет" stat='название стата'/> <sub val='значение' order="приоритет" stat='название стата'/> <enchant val='значение' order="приоритет" stat='название стата'/> <set val='значение' order="приоритет" stat='название стата'/> </for> Все изменения в стате должны находится между тегами Теперь рассмотрим главные операции со статами. <add /> - добавление статов. Стат увеличится на указаную величину. <mul /> - умножение статов. То есть если вы оденете вещь или используете скил, ваши статы умножатся. Например если <sub /> - вычетание. То есть если вы оденете вещь(или заюзатете скил), ваши статы (или статы цели) уменьшатся. <enchant /> - увеличение/снижение при заточке. Роказывает, на сколько увеличится/уменшится стат при заточке еще на +1 <set /> - задание строгого значения. То есть если вы оденете вещь со значением 20, то тот стат, но который это значение влияет будет равен 20. Со скилами также. Главными параметрами этих операций являются: val="" - значение order="" - приоритет в формуле (подробно о приоритетах писать в этой статье не буду, это отдельная и сложна тема) stat="" - что собственно изменять Значения order могут быть следущие: 0x08 - set 0x10 - add/sub (оружие, броня, бижутерия) и (STR, CON, DEX, INT, WIT ,MEN) 0x20 - не используется (опционально) 0x30 - mul/div (masteries, buffs, debuffs, SA (специальные возможности оружия), бонусы брони) 0x40 - add/sub (masteries, buffs, debuffs, SA (специальные возможности оружия)) 0x50,0x60 - не используется (опционально) 0x0C - enchant Списки статов доступных для изминения: Этот список в разных сборках разный, но в большинстве случаев принято использовать следующие названия. Изменение максимального количества HP - maxHp Изменение максимального количества CP - maxCp Изменение максимального количества MP - maxMp Регенерация НР - regHp Регенерация СР - regCp Регенерация МР - regMp Эффективность хила - gainHp Умение хила - giveHp Бонус хила - bonusHp Физическая защита - pDef Магическая защита - mDef Физическая атака - pAtk Магическая атака - mAtk Скорость физической атаки - pAtkSpd Скорость магической атаки - mAtkSpd Скорость отката - mReuse Защита щитом- sDef Угол защиты щитом - shieldDefAngle Критический удар - cAtk Прибавка к критическому удару - cAtkAdd Физ. урон в пвп (например для Duel Might) - pvpPhysDmg Маг. урон - pvpMagicalDmg Урон скилом - pvpPhysSkillsDmg Уворот - rEvas Уворот от скилов- pSkillEvas Шанс блокировки щитом - rShld Шанс крита - rCrit Шанс Blow - blowRate Шанс Lethal - lethalRate Маг. крит. шанс - mCritRate (mCrit doesn't work!!) EXP,SP шанс - rExp Cancel - cancel Точность - accCombat Зона покрытия физ. атаки - pAtkRange (for fighters) Зона покрытия маг. атаки- mAtkRange (for mages) Угол атаки (только для воинов) - pAtkAngle Количество атакуемых - atkCountMax Откат физ. скилов - atkReuse Скорость бега - runSpd Скорость ходьбы - walkSpd STR - STR DEX - DEX WIT - WIT INT - INT MEN - MEN Уязвимости Агрессия - aggressionVuln Кровотечение - bleedVuln Яд - poisonVuln Стан - stunVuln Парализация - paralyzeVuln Удерживающие заклинания - rootVuln Сон - sleepVuln "Перекидывание" таргета - confusionVuln Движение - movementVuln Огонь - fireVuln Ветер - windVuln Вода - waterVuln Земля - earthVuln Святые атаки - holyVuln Темные атаки - darkVuln Резист к cancel - cancelVuln Дебаффы - debuffVuln Резист к криту - critVuln Резисты против оружия (тут думаю описание не нужно) noneWpnVuln swordWpnVuln bluntWpnVuln daggerWpnVuln bowWpnVuln crossbowWpnVuln poleWpnVuln etcWpnVuln fistWpnVuln dualWpnVuln dualFistWpnVuln bigSwordWpnVuln Отражение Процент отражаемого урона - reflectDam (pay attention! not reflectDmg!! reflectDam) Процент рассеиваемого урона - absorbDam Процент переносимого урона- transDam Отражение маг. скилов - reflectSkillMagic Отражение физ. скилов - reflectSkillPhysic Другое (для примера): Атака на гигантов - pAtk-giants Защита на нежить - pDef-undead Атака на животных - pAtk-animals Защита на монстрах - pDef-monsters Лимит инвентаря - inventoryLimit Лимит ВХ - whLimit Freight лимит - FreightLimit Лимит продажи. - PrivateSellLimit Лимит покупки - PrivateBuyLimit Лимит гномьего крафта - DwarfRecipeLimit Лимит common крафта - CommonRecipeLimit Потребление МР физ. скилами - PhysicalMpConsumeRate Потребление МР маг. скилами - MagicalMpConsumeRate Потребление МР дансами - DanceMpConsumeRate Потребление НР - HpConsumeRate Потребление МР - MpConsume Потребление соулшотов - soulShotCount Skill Мastery - skillMastery Время пребывания под водой - breath Дополнения для редактирования статов скилов Важно знать что любой скилл начинается с открывающего тега и заканчивается закрывающим тегом. В скилах есть 3 обязательных тега, без которых он не будет работать - это target, skilltype и operatetype. 1. target - тег, который показывает на кого будет браться таргет, что видно из названия. Принимает следующие значения: TARGET_SELF - обозначает, что скилл будет использоватся исключительно на его владельца (селф бафф типа Battle Roar или War Cry) TARGET_NONE - цель неопределена TARGET_ONE - обозначает, что цель вашего скилла - тот кто в таргете. TARGET_AREA - обозначает, что скилл будет массовым TARGET_AGGREMENT - обозначает, что целью будет тот, кто вас атакует 2. skilltype - тег, указывающий на тип скилла (бафф, дебафф) Принимает следующие значения: BUFF - бафф (оказывает положительное воздействие) DEBUFF - дебафф (оказывает негативное воздействие) 3. operatetype - этот тег служит для определения типа скилла (активный либо пассивный) OP_ACTIVE - активный скилл, может быть использован игроком OP_PASSIVE - пассивный скилл, скилл с таким operateType не может быть использован (действует всегда) Это были обязательные переменные, используемые в скилах. Теперь перейдем к остальным: -power - сила скилла -hitTime - скорость. Для баффа это скорость чтения заклинания, для физ. скилла - скорость атаки -reuseDelay - откат скилла -hpconsume , mpconsume - потребление МР, НР -castRange - это дальность использования того или иного скилла (дистанция) -isMagic, isDebuff, isBuff - это наводящие теги, могут иметь значение "true" и "false". К примеру, isBuff = true (это значит что скилл является баффом) -effectRange - радиус действия (для массовых скиллов) -agro - что такое агр, и что такое сила агра думаю объяснять не нужно. Надо сказать что в зависимости от сборки могут использоваться и другие теги, но так как этот мануал общий для всех сборок их приводить не будем. Тег effect в скиллах Lineage 2 встречается очень часто. Обычно тег используется для "добавления сложных действий" к скиллу. Если скилл имеет сложный вариант реализации то обычно в тег добавляют некоторые отдельные значения, которые реализованы в ядре сервера Lineage. Это самый важный тег для использования в скилах. Приведем пример использования тега : <for> <effect name="тип" val="значение" time="время действия" stackOrder="переменная" stackType="переменная ядра"> </effect> </for> </skill> Что это значит? name - это тип эффекта val - значение эффекта. Для дебаффов - шанс прохождения, для боевых скилов - сила. time - время действия эффекта StackOrder и stackType - это значения уже описаные в данном скиле и заданы в ядре сервера и в разных сборках могут называться по разному (или даже отсутствовать). 4. Зоны Довольно важным в игровом мире есть понятие зон. Например в городах мирные зоны в которых запрещены атаки других игроков (и иногда нпц). Или зоны арен где не насчитывается пвп/пк счетчик. Зоны, также как и статы/скилы принято задавать в xml файлах. Рассмотрим структуру описания зоны: <zone id="ID зоны" name="Имя зоны" type="Тип зоны"> <settings exitOnDeath="true" buffRepeat="true" affected="single" /> <skill applyEnter="ID эффекта, уровень эффекта" removeExit="ID эффекта" /> <shape type="Форма зоны" zMin="Минимум Z" zMax="максимум Z"> <point x="координата" y="координата"/> <point x="координата" y="координата"/> </shape> </zone> Параметры что используются при создании заны: id - идентификатор зоны. type - тип зоны (town, arena, jailzone, Boss). Например: Town - мирная зона (город), Arena - боевая зона (PVP). Также могут быть другие типы зон которые описаны в ядре сервера. shape type - это форма или вид зоны. Может быть двух типов: Poly(многоугольные зоны) и Rect(прямоугольные зоны). В разных сборках названия типов могут отличатся (напрмиер nPoly и Cupoid). Также в некоторых сборках может использоваться и тип Circle (круг), для задания этого типа указываются координаты центра и радиус. minZ - это минимально допустимая координата высоты (z) в данной зоне . maxZ - это максимально допустимая координата высоты (z) в зоне. minZ и maxZ используются для избежания прохождения через текстуры, провалов под них и т.д. name - зоне можно задать любое имя, но только из допустимых символов, используется для удобства работы с большим количеством зон point - задает координаты границ зоны. settings - дополнительные параметры зоны. В большинстве случаев не используются, хотя и делают игру чуть интересней. Подробное описание тега settings приводить не буду из за того что в разных сборках довольно большие различия при его использовании. В приведенном примере описания зоны в теге settings указано что после смерти игрок может покинуть зону и что в зоне на всех чаров что находятся без пати накладывается баф applyEnter указанного уровня и при выходе с зоны убирается. Повторюсь еще раз, в разных сборках это реализация этого тега происходит по разному. Так же внутри тегов можно использовать описание точек "респавна" чара в них. При указании нескольких точек "респавна" чар будет появляться в них рандомно. <stat name="spawnX" val="X координата"/> <stat name="spawnY" val="Y координата"/> <stat name="spawnZ" val="Z координата"/> 5. Магазины В линейдж есть особенный тип магазинов под названием multisell, изначально он был задуман для обмена вещей на вещи (впервые использоваться у рыбаков). В наше время этот магазин широко используется в на пвп серверах для создания ГМ шопов, хотя этом круг его использования не ограничивается. Названия XML файлов для магазинов такие как ID этих магазинов (но тут также есть небольшие исключения, есть магазины где название и id разные). Формат данных в магазине следующий: <item id="номер по возрастанию"> <production id="id предмета" count="количество"/> <ingredient id="id предмета" count="количество"/> </item> item id - номер предмета в ячейка магазина, используется для задания порядка отображения предметов в магазине. Обратите внимание что этот номер НЕ должен повтояться и для каждого предмета должен быть уникален в рамках одного магазина. production - предмет который покупается в магазине. в этом теге указывается id предмета и его количество. ingredient - предмет за который можно купить production в магазине. в этом теге указывается id предмета и его количество. В большинстве случаев используют адену, древнюю адену или колы, но предметом для покупки может быть любая вещь. Надо знать что в одном теге item может быть несколько тегов ingredient, это будет значить что при покупку production вам надо будет несколько указанных предметов. Напримиер при покупке заточек у мамона надо иметь древнюю адену и чистые скролы. Использование нескольких production также возможно, но крайне не рекомендовано создателями сборок. Также можно указывать дополнительные параметры покупки, например часто используется параметр enchant, который позволит покупать уже заточенную вещь. Например <production id="7575" count="1" enchant="10" /> - будет куплен драк лук +10. Еще довольно интересно: при задании параметра enchant у ошейников для вызова питомцев питомец будет уже прокачан до указанного в параметре enchant уровня. Кроме enchant можно использовать и параметры для камней стихий и т.п.
-
1 баллВступление. Как вам известно, после хроник Эпилога стало достаточно трудно менять текстуры модэли в игре, лишь истенные профи могут и дальше продолжать свое ремесло. А просмотр текстур так вообще стал проблемой и за несоотвествие кодировок файлов, поэтому знаменитые программы для просмотра текстур такие как L2ViewUtx и UTPT и даже фиксеры оказались после данных хроник безполезные. И так наша цель такова: Открыть любой файл текстур .utx с папки systextures, просмотреть все файлы их имена и их иконки и внедрить их в шаблоны страниц путем использование HTML кодов. Часть 1: Нужные файлы. Umodel http://www.gildor.or...ts/umodel#files Adobe Bridge http://www.adobe.com...cts/bridge.html (либо скачать пиратскую версию) Часть 2: Приступим к работе!!1 1. На диске C:/ Создаем папку umodel и разархивируем все файлы программы Umodel туда. 2. Копируем нужный вам .utx файл из папки systextures клиента в папку C:/Umodel, я взял для примера L2Font-e.utx 3. Открываем Notepad и пишем данную строку: umodel -export -all L2Font-e.utx Теперь вы имеете папку L2Font-e/textures где находятся все текстуры данного Utx файла в тарга формате. *Примечание. И за того что обычный просмотр изображений не поддерживает Targa файлы. (TGA) нам не удобно будет просматривать их. Я пробовал их открывать в фотошопе и тоже не удобно было...Но случайно открыл папку с текстурами из Adobe Bridge уже установленный у меня на компютере и меня озарило)) 4)Устанавливаем Bridge 5)открываем папку. радуемся виду. Часть 3 : Внедрение в игру Для примера возьмем страницу HTML любого свободного NPC Я взял также для примера текстуру map_cleft, но т.к размер слишком большой мы его просто урежем картинка не будет полностью входить в рамки но это же для примера) Тем более я делал это в комюнити И пишем следующий код: <html><body><center> <table border=0 cellpadding=0 cellspacing=0 > <tr><td width=512 height=512 background="L2Font-e.map_cleft"></td></tr> </table> </center></body></html> Вуаля! У НАС ПОЛУЧИЛОСЬ!!!111 P.S.Надеюсь информация не баян, и меня не забанят) Надеюсь вам это пригодилось!
-
0 баллов<?php //======[ОСНОВНЫЕ НАСТРОЙКИ]====== //Префикс таблицы с IPB $prefix = ''; //Сколько тем выводить $num = 10; //Сколько символов оставить в названии темы после урезания $topic_num_sym = 65; //Имя папки с картинками текущего скина $img_path = '1'; //Формат времени $time = 'H:i'; //Форумы, которые мы не трогаем $forumexclude = '0'; //Сервер БД на котором висит база форума $host="localhost"; //Имя БД $database="имя БД"; //Логин БД $username="Логин БД"; //Пароль БД $password="Пароль"; //====[Если не знаем PHP - дальше ничего не трогаем ]========= $ipb_db = mysql_pconnect($host, $username, $password); mysql_select_db($database, $ipb_db); $rd = "SET CHARACTER SET utf8"; IF (!$result = mysql_query($rd)) { ECHO "ERROR!!!\n"; } $resultf = mysql_query("SELECT tid, title, state, posts, starter_id, last_poster_id, last_post, starter_name, last_poster_name, views, topic_hasattach FROM ".$prefix."topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $num",$ipb_db) or die(mysql_error()); $row_resultf = mysql_fetch_assoc($resultf); $totalRows_resultf = mysql_num_rows($resultf); do { $topicstrip = $row_resultf['title']; if (strlen($topicstrip) > $topic_num_sym) { $topicstrip = substr($topicstrip,0,$topic_num_sym); $topicstrip = $topicstrip."..."; } $status = ($row_resultf['state'] == "closed") ? "<img src=\"http://forum.ВАШ_САЙТ.ru/style_images/$img_path/f_closed.gif\" border=\"0\" alt=\"Тема закрыта\">" : ""; $attach = ($row_resultf['topic_hasattach'] == "1") ? "<img src=\"temp/A-Vector/images/files.gif\" border=\"0\" alt=\"В сообщении есть прикрепленные файлы\"> " : ""; $last_date = date($time,$row_resultf['last_post']); $starter_name = $row_resultf['starter_name']; $bt.= " <div class='forums'> <div class='theme_info'> <div class='theme_icon'></div> <div class='theme_title'><a href=\"http://forum.ВАШ_САЙТ.ru/index.php?showtopic=".$row_resultf['tid']."&view=getlastpost\"' title=\"".$row_resultf['description']."\" target='_blank'>$topicstrip</a></div> <div class='theme_more'><a href='/' target='_blank'>$starter_name</a> , $last_date </div> </div></div>"; } while($row_resultf = mysql_fetch_assoc($resultf)); mysql_free_result($resultf); echo $bt; return $bt; ?> ВАШ_САЙТ - Заменить на ссылку вашего сайта Создать в корне сайта файл latest_post.php добавить данный код в данный файл На странице сайте там ге хотите вывести Последние темы с форума пишем <?php include("latest_post.php");?> CSS для отображения в левой колонке сайта #left .forums_theme { width: 100%; margin: 0 auto; padding-top: 10px; } #left .forums_theme .forums { background: #211d1366; padding: 5px; position: relative; display: block; margin-bottom: 11px; } #left .forums_theme .forums { background: rgba(33, 29, 19, 0.4); padding: 5px; cursor: pointer; } #left .forums_theme .forums:hover { background: rgba(64, 63, 61, 0.4); } #left .forums_theme .forums DIV{ position: relative; } #left .forums_theme .forums .theme { height: 44px; background: url(../img/forum.png) no-repeat; padding-top: 10px; } #left .forums_theme .forums .theme_icon { width: 43px; float: left; min-height: 44px; background: url(../img/theme_icon.png) no-repeat; margin-left: 10px; margin-top: 5px; } #left .forums_theme .forums .theme_info { min-height: 40px; width: 100%; padding-bottom: 10px; } #left .forums_theme .forums .theme_title a { color: #d7d6d6; font-size: 11px; font-weight: 200; text-transform: uppercase; font-family: Tahoma, sans-serif; text-decoration: none; } #left .forums_theme .forums .theme_title a:hover { text-decoration: underline; } #left .forums_theme .forums .theme_title { padding: 7px; text-align: left; left: 10px; } #left .forums_theme .forums .theme_more { color: #847411; font-size: 10px; font-weight: 200; text-align: left; left: 10px; text-transform: uppercase; font-family: Tahoma, sans-serif; text-decoration: none; } #left .forums_theme .forums .theme_more a { color: #fab91a; }
-
0 балловhttps://youtu.be/rvH_IK95pOE
-
-1 балл
-
-1 балл
-
-1 баллСтояла задача использовать порт логин сервера из доступного диапазона портов Да, есть инлайн патчи которые меняют порт, но они не работают под Windows8 А к сожалению те кто покупают новые ноутбуки, пк, операционная система уже по умолчанию Win8, во многих случаях Данную проблему я решил сторонней написанной dll И такс, что нам нужно для этого: LordPE : это инструмент для системных программистов, которые нуждаются в ручном редактирование исполняемых файлов. И сама dll, вариантов тут два, написать свою, либо использовать уже готовую. Качаем: ссылка_dll взято с _http://fyyre.ivory-tower.de Данная dll имеет так же конфиг, ini файл в котором вы можете указать нужный вам порт в 16-чной системе счисления Дополнительно, dll с привязкой на определенный порт без *.ini ( самописанная ) 2105: engine_2105.zip 2107: engine_2107.zip 2108: engine_2108.zip За сам исходник спасибо Akumu, за помощь в решении данной проблемы, и что дал направления в котором нужно идти Если нужна dll под определенный порт, пишите в лс или используйте с .ini от ivory-tower.de Мануал по привязке dll к l2.exe Запускаем LordPE В открывшемся окне жмем "PE Editor" и открываем нужный нам l2.exe ( так же данная меню доступна через пкм по *.exe файлам ) В который будем добавлять в таблицу импортов нужную нам dll