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

Таблица лидеров


Популярный контент

Показан контент с высокой репутацией за 05/18/21 в Инструкции

  1. 6 баллов
    Первым делом, еще раз оговорюсь, что рациональней перепилить это дело под полноценный экшен, я же делал байпассом. Потому первым делом в ядре стоит запилить что-то такое: (!)Обратите внимание на мои условия, мне нужны были в таргете только монстры, для своих целей перепишите соответствующим образом. (да, у меня такой синтаксис что игроки это мобы, а мобы - это игроки, все в порядке) Так же заметьте, я ограничиваю максимальную дальность 1200, Вы можете этого не делать, либо задать свою. Я бы советовал ограничить максимальную дальность именно в ядре, ибо зная байпасс с интерфейса можно будет творить чудеса. Так же вопрос: нужно ли принудительно обновлять хп/мп таргета, если Вы уже шлете пакет MyTargetSelected? - На адекватных сборках может и нет, а вот у меня были проблемы пока так не сделал. Так же Вы можете добавить проверку на видимость целей, что-то вроде: GeoData.getInstance().canSeeTarget(activeChar, nextMob) Почему я такую не добавил? Об этом в следующей кулстори расскажу. Теперь в интерфейсе прикрутим в функцию OnLoad() следующее: (здесь тоже довольно извращенная и чрезмерно нагроможденная конструкция, опять же скорее для наглядности, адекватно на это посмотреть и переписать нормально, а не копировать): nrage(int(class'UIAPI_EDITBOX'.static.GetString("тут адрес нашего окна"))); Сама функция nrage: function nrage(int valueX) { if ( valueX < 400) { NTrange = 400; } if ( valueX > 1200) { NTrange = 1200; } else { NTrange = valueX; } } И наш отправляемый байпас: RequestBypassToServer("наш байпасс посылаемый с интерфейса "$ NTrange); Дальше (очень логично и последовательно, идя от конца к началу) оформим сам эдит бокс, с которого только что считывали дальность нашего некст таргета. Я его храню в другом классе, потому у Вас все может быть проще и красивее, в который раз повторюсь, что эта информация больше подходит для ознакомления, а не копипаста, хоть и будет работать и в таком виде. И так, прежде всего: var EditBoxHandle e_autoMacroRange; var MacroListWnd* script_mc; ..... e_autoMacroRange = GetEditBoxHandle("Ваше окно"); script_mc = MacroListWnd(GetScript("MacroListWnd")); *на всякий случай: это я тяну с другого класса скрипт, и напомню, что Вы можете без проблем обойтись и без этого Я сохраняю настройки по клику кнопки, потому нужен хендлер OnClickButton, и в нем наша кнопка: case "btnApply": OnApplyBtn(); break; .... сама функция кнопки (уже вне хендлера ,если что, наверное, это и так очевидно, но мне бы такая пометка жизнь спасти могла) function OnApplyBtn() { local int valueX if (e_autoMacroRange.GetString() != "") { valueX = int(e_autoMacroRange.GetString()); if (valueX >= 400 && valueX <= 1200) { SetINIInt("MacroSettings", "AutoMacroRange", valueX, "PatchSettings"); script_mc.nrage(valueX); } } } Для загрузки наших данных о дальности нексттаргета из файла: function LoadINISets() .... GetINIString("MacroSettings", "AutoMacroRange", valueS, "PatchSettings"); if (e_autoMacroRange.GetString() == "") { valueS = "750"; } e_autoMacroRange.SetString(valueS); И вот сейчас был спорный момент, ибо раз уже замешано ядро - то зачем хранить эти данные в интерфейсе и почему бы не запихивать их куда-то на сервер сайде? Для себя я ответил: чтобы в эдитбоксе выводить актуальную дистанцию и не создавать лишних запросов в БД, а свой ответ Вы можете поискать сами, либо засунуть инфу на серверсайд.
  2. 5 баллов
    Приветсвтую, в данной инструкции рассмотрим возможность сборки ява сервера в докер образ и последующем запуске в контейнере. В данном примере будет вариант с использованием 3-х образов, логин-сервер, гейм-сервер и образ для инсталяции базы данных, запускать будем через docker-compose Введение Данная инструкция не предусматривает рассказ о том что такое контейнеризация, отличия от виртуализации, что такое docker и т.д. В интеренте достаточно информации на эту тему, с учетом того что docker с каждым днем продолжает набирать популярность. Так, что предлагаю перед прочтением этого мануала ознакомиться с общимим материалами на тему "docker и контенеризация приложений" О докере можно почитать на официальном сайте https://docs.docker.com/get-started/overview/ Окружение Дев-машина: Windows 10, установленный docker desktop for windows, работает через hyper-v. С информацией по установке можно ознакомиться по ссылке https://docs.docker.com/docker-for-windows/install/ В этом мануале не будет рассматриваться какая-то конкретная сборка, их огромное количество со своими сходствами и отличиями, по этому прдеположим что у нас есть скомпилированый ява сервер с такой структурой L2Server ├─── loginserver (файлы логин-сервера, конфиг файлы, файл запуска java процесса StartLoginServer.sh) ├─── gameserver (файлы гейм-сервера, конфиг файлы, файл запуска java процесса StartGameServer.sh) ├─── libs (необходимые библиотеки) ├─── install (файлы установки базы данных) ├─── login (sql файлы установки базы логин-сервера, файл запуска установки install-login.sh) ├─── game (sql файлы установки базы гейм-сервера, файл запуска установки install-game.sh) Dockerfile'ы Для того чтобы сбилдить докер-образ необходимо создать файл Dockerfile (название файла, без расширения), в котором прописываються необхходимые инструции билдера. С синтаксисом можно ознакоиться здесь https://docs.docker.com/get-started/overview/ Один образ - один докерфайл, следовательно у нас будет 3 образа и 3 докерфайла. Докерфайл для логин сервера разполагаем в папке loginserver, для гейм-сервера в папке gameserver, для установищка бд в папке install В итоге получаем следующую структуру L2Server ├─── loginserver ├─── Dockerfile ├─── gameserver ├─── Dockerfile ├─── libs ├─── install ├─── Dockerfile Dockerfile для loginserver #исходнй образ который взят за основу FROM adoptopenjdk/openjdk8:jdk8u292-b10-centos #рабочая папка внутри контейнера WORKDIR /server #копируем файлы логин-сервера в контейнер COPY ["loginserver", "/server/loginserver"] #копируем библиотеки COPY ["libs", "/server/libs"] #порты которые пробрасываються в контейнер EXPOSE 2106 9014 #добавляем права на испольнение sh файла RUN chmod +x /server/loginserver/StartLoginServer.sh RUN chmod +x /server/loginserver/UpdateHosts.sh #команда которая выполниться при запуске контейнера CMD ["/bin/bash", "-c", "cd /server/loginserver/ && sh UpdateHosts.sh && sh StartLoginServer.sh"] Примичание: что такое UpdateHosts.sh и зачем он нужен будет рассмотрено ниже. Dockerfile для gameserver #исходный образ который взят за основу FROM adoptopenjdk/openjdk8:jdk8u292-b10-centos #рабочая папка внутри контейнера WORKDIR /server #копируем файлы логин-сервера в контейнер COPY ["gameserver", "/server/gameserver"] #копируем библиотеки COPY ["libs", "/server/libs"] #порты которые пробрасываються в контейнер EXPOSE 7777 #добавляем права на испольнение sh файла RUN chmod +x /server/gameserver/StartGameServer.sh RUN chmod +x /server/gameserver/UpdateHosts.sh CMD ["/bin/bash", "-c", "cd /server/gameserver/ && sh UpdateHosts.sh && sh StartGameServer.sh"] Примичание: что такое UpdateHosts.sh и зачем он нужен будет рассмотрено ниже. Dockerfile для инсталлера базы данных #исходные образ который взять за основу (alpine - легкий дестрибутив linux) FROM alpine:latest WORKDIR /db-install #копируем файлы установки COPY ["install/login", "/db-install/login"] COPY ["install/game", "/db-install/game"] #устаналиваем необходимые пакеты #mysql client RUN apk update && apk add --no-cache mysql-client && apk add --no-cache bash #добавляем права на испольнение sh файлов RUN chmod +x /db-install/login/install-login.sh RUN chmod +x /db-install/game/install-game.sh #команда которая выполниться при запуске контейнера CMD ["/bin/bash", "-c", "cd /db-install/login && sh install-login.sh && cd /db-install/game && sh install-game.sh"] Файл UpdateHosts.sh Образ представляет собой готовый к запуску артефакт, т.е при сборке в него копируються файлы в том состоянии в котором они есть на момент сборки, следовательно для того чтобы изменить конфиг нужно каждый раз пересобирать образ. Одной из самых основных настроек логин и гейм сервера - настройки сети, а конкретнее хосты к которым биндиться сокет. Самым простым вариантом как управлять этими настройками без ребилда образа - передать нужные значения через переменные окружения (environment variables). К примеру, в данном случае, команды заменяющие настройки в конфиге вынесены в отдельный файл для удобства Для loginserver #!/bin/bash echo "Updating LoginserverHostname with $LOGINSERVER_HOST" sed -ir "s/^[#]*\s*LoginserverHostname = .*/LoginserverHostname = $LOGINSERVER_HOST/" /server/logibserver/config/server.ini Для gameserver #!/bin/bash echo "Updating ExternalHostname with $GAMESERVER_EXTERNAL_HOST" sed -ir "s/^[#]*\s*ExternalHostname = .*/ExternalHostname = $GAMESERVER_EXTERNAL_HOST/" /server/gameserver/config/server.ini echo "Updating InternalHostname with $GAMESERVER_INTERNAL_HOST" sed -ir "s/^[#]*\s*InternalHostname = .*/InternalHostname = $GAMESERVER_INTERNAL_HOST/" /server/gameserver/config/server.ini Таким образом можете вынести любые необходимые настройки, которые нужно часто менять "на лету" К томуже переменные окружения удобно использовать для установки памяти требуемой для запуска в вашем sh файле, например StartLoginServer.sh java -Xmx$JAVA_MAX_MEMORY l2p.loginserver.LoginServer 2>&1 | tee /server/logs/loginserver-stdout.log В переменную можно передать $JAVA_MAX_MEMORY можно передать значение "256m", "1G" и тд Сборка образов Контейнер собираеться командой docker build (https://docs.docker.com/engine/reference/commandline/build/) В данном случае выполняем команду из рут папки с сервером (L2Server) с указанием докерфайла, для того чтобы сохранить контекст, т.к по умолчанию билдер не имеет доступа к родительским деррикториям Билд образа логинсервера docker build -t server:loginserver -f ./loginserver/Dockerfile . Билд образа геймсервера docker build -t server:gameserver -f ./gameserver/Dockerfile . Билд образа инсталятора docker build -t server:db-install -f ./install/Dockerfile . На данном этапе из этих образов уже можно запустить конйтенер с помощью команды docker run (https://docs.docker.com/engine/reference/run/) и получить работоспособные логин и гейм серверы, но мы идем дальше Примичание: В данным момент нобходимо передать переменные окружения если они используються для обновления конфигурации. База данных Сервер базы данных так же можно запустить в отдельном контейнере, например запуск mariadb docker run --name mariadbtest -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d docker.io/library/mariadb:10.3 Больше информации о работе с бд будет далее, когда мы будем обьеденять контейнеры в одно окружение. Примичание: MYSQL_ROOT_PASSWORD - переменная окружения которую использует mariadb, подобно тому как выше было описан способ обновления конфигурации docker-compose По отдельности собраные выше образы и запущенные из них контейнеры мало чем полезны, запускать их по очереди не совсем удобно, по этому соберем стак контейнеров в одно окружение с помощью docker-compose https://docs.docker.com/compose/ docker-compose позволяет одновременно запускать и управлять несколькими контейнерами, настраивать внутренее изолированноее окружение, сеть между контейнерами, зависимости, порядки запуска и так далее. docker-compose'у нужен свой файл с инструкциями, который парситься из YAML файла. По умолчания ожидаеться файл с одноименный названием docker-compose.yml Подробнее о синтаксисе: https://docs.docker.com/compose/compose-file/ Создаем файл, помещяем его корневую папку с нашим сервером, в итоге получаем следующую стркутуру L2Server ├─── docker-compose.yml ├─── loginserver ├─── Dockerfile ├─── gameserver ├─── Dockerfile ├─── libs ├─── install ├─── Dockerfile Содержимое docker-compose.yml #версия парсера файла, влияет на доступность некоторых фич, более подробное описание на официальном сайта version: "3.9" #контейнеры, которые буду запускаться в docker-compose, их принято называть сервисами services: #сервис базы данных, будем использовать mariadb mysql: image: mariadb restart: always environment: #рут пароль MYSQL_ROOT_PASSWORD: root #при необходимости при запуске конейтенра сразу будет создана база MYSQL_DATABASE: lvldev #при необходимости при запуске контейнера сразу будет создан допонительный пользователь MYSQL_USER: localnetwork MYSQL_PASSWORD: localnetwork ports: - 3306:3306 #внешняя дериктория для сохранения данных volumes: - D:\docker\mysql:/var/lib/mysql healthcheck: test: "/usr/bin/mysql --user=root --password=root --execute \"SHOW DATABASES;\"" interval: 10s timeout: 20s retries: 10 #инсталятор базы данных db-install: container_name: db-install image: db-install #сборка образа инсталятора из докерфайла build: context: . dockerfile: ./install/Dockerfile depends_on: mysql: condition: service_healthy profiles: - db-install #сервис логинсервера authserver: container_name: authserver image: loginserver restart: on-failure #сборка образа логинсервера из докерфайла build: context: . dockerfile: ./loginserver/Dockerfile ports: - 2106:2106 environment: #переменная окружения в которую передаем память выделяему для процесса логинсервера JAVA_MAX_MEMORY: 256m #переменная окружения для обновления конфига адреса биндинга для логинсервера LOGINSERVER_HOST: "*" depends_on: mysql: condition: service_healthy healthcheck: test: "netstat -an | grep 9014 > /dev/null; if [ 0 == $$? ]; then echo 1; fi;" interval: 10s timeout: 1s retries: 10 #внешняя дериктория для сохранения данных volumes: - D:\docker\logs:/server/logs profiles: - server #сервис геймсервера gameserver: container_name: gameserver image: gameserver restart: on-failure #сборка образа геймсервера из докерфайла build: context: . dockerfile: ./gameserver/Dockerfile ports: - 7777:7777 environment: #переменная окружения в которую передаем память выделяему для процесса логинсервера JAVA_MAX_MEMORY: 5G #переменная окружения для обновления конфига внешнего хоста геймсервера GAMESERVER_EXTERNAL_HOST: "ВАШ ВНЕШНИЙ ИП ТУТ" #переменная окружения для обновления конфига внутренего хоста геймсервера GAMESERVER_INTERNAL_HOST: "127.0.0.1" depends_on: mysql: condition: service_healthy authserver: condition: service_healthy #внешняя дериктория для сохранения данных volumes: - D:\docker\logs:/server/logs profiles: - server Теперь стоит вспомнить о конфигурационных файлах логин и гейм серверов, как написано выше - docker-compose строит внутреннюю сеть между контейнерами, в которой они могут между собой общаться с помощью именовоного хостнейма которое являеться именем сервиса в yml файле. Например для того чтобы из java приложения в контейнере loginserver подключиться к базе данных в контейнере mysql можно использовать адресс mysql:3306, а чтобы из конейтенра gameserver подключиться к конйтенру loginserver можно использовать адресс loginserver:9104 и т.д (смысл думаю понятен) Меняем настройки подключения к бд в конфигах логинсервера и геймсервера, например в моем случае получилось следующее /gameserver/config/server.ini /loginserver/config/server.ini dataSource.url = jdbc:mariadb://mysql:3306/l2server?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true dataSource.user = localnetwork dataSource.password = localnetwork Также меняем настройки подключения геймсервера к логинсерверу Например в моем случае /gameserver/config/server.ini LoginPort = 9014 #имя сервиса в docker-compose.yml LoginHost = loginserver Так же на забываем менять настройки в вашем инсталяторе базы данных Обратите внимание на настройки в секции environment, здесь можно настроить параметры переменных окружения, которые будут переданны в контейнер при запуске, выше был описан момент обновления настроек с помощью енв-варов на лету. Персистентность данных Контейнер имеет своую виртуальную фаловую систему, при удалении контейнера так же удаляться все данные, в том числе и база данных сервера, соответсвенно база должна храниться гдето на хост машине. Смотрим на настройки volumes, с помощью этой инструкции можно смонтировать папку на хост машине как виртуальную в контейнере. ОСОБОЕ ВНИМАНИЕ пршу обратить на сервис mysql, в который смонтирована папка на хосте как /var/lib/mysql Эта директория используеться ядром mysql для сохранения данных, следовательно все данные остануться на хост машине (в момем случае в D:\docker\mysql) Так же, к примеру в логин и гейм серверы смонтирована папка на моем пк для записи логов D:\docker\logs как /server/logs Запуск в docker-compose Запустить стек контейнеров можно с помощью команды docker-compose up https://docs.docker.com/compose/reference/up/ С помощью настроек в docker-compose.yml файлы мы определили т.н профили запуска (с.м выще содержание файла, секцию profiles) Это нужно для того, чтобы запускать определенный сервисы, при этом пропускать другие, например при запуске профиля db-install запуститься только сервис mysql и инсталятор базы данных (нам ведь нужно запустить его лишь один раз, не так ли?), а при запуске профиля server запустятся сервисы mysql, loginserver, authserver, минуя инсталятор Запуск инсталятора docker-compose --profile db-install up --build --force-recreate Примичание: флаг --build используеться для того чтобы зафорсить ребилд контейнера, флаг опционален, удобно для дев окружения Примичание 2: флаг --force-recreate ипользуеться для того чтобы пересоздать контейнер (если он ранее был создан), флаг оционален, удобно для дев окружения Запуск логин и гейм сервера без инсталятора docker-compose --profile server up --build --force-recreate Так же с помощью docker-compose можно билдить образы без запуска, удобно docker-compose build --no-cache db-install docker-compose build --no-cache loginserver docker-compose build --no-cache gameserver Для того чтобы оставить все контейнеры используется команда docker-compose stop https://docs.docker.com/compose/reference/stop/ Для того чтобы остановить и удалить все контейнеры используется команда docker-compose- down https://docs.docker.com/compose/reference/down/ Продакшн Получилось собрать и запустить все на локальной дев машине? Отлично! Что дальше? У нас есть готовые образы, их нужно как-то передать на продакшн сервер, для этого используеться так называемый Docker реестр (Docker Registry). Реестр может быть свой, (вопрос запуска собственного реестра это отдельная тема, которая требует отдельного манула) либо один из доступных платных или безплатных в олаке. У docker есть собственный реестр - Docker Hub https://hub.docker.com/ который предоставляет один безплатный приватный репозиторий (и неограниченное количествао публичных), его и будем использовать в рамках данного мануала В докер хабе создаем рпозиторий, например его название будет "server". Для того чтобы отправить образы в свой репозиторий они должны называться по принцину "ИМЯ_ПОЛЬЗОВАТЕЛЯ/ИМЯ_РЕПОЗИТОРИЯ". В моем случае образы должны именоваться "lvlkoo/server". Можно ли загрузить несколько образом с одним именем? Нет. НО, на выручку приходят теги, у каждого образа может быть тег, и их может быть неограничение количество. Более подробнее о тегах можно почитать на официальном сайте, в основном они используеться для вариации похожих образов или версионирования Тег образу проставляеться через двоеточие "ИМЯ_ОБРАЗА:ТЕГ". Сопоставив это с именованием образов для загрузки в репозиторий получаем следующие имена образов Геймсервер: lvlkoo/server:gameserver Логин-сервер: lvlkoo/server:loginserver Инсталятор: lvlkoo/server:db-install Подобный образом можно к примеру собирать несколько разных вариаций сборки, к примеру server:gameserver-x-1200, server:gameserver-x-100 и так далее Перименовуем название образов в docker-compose.yml файлах (поле image). Например для инсталятора. Остальное по аналогии image: lvlkoo/server:db-install Ребилдим образы и пушим их в реестр с помощью команды docker push https://docs.docker.com/engine/reference/commandline/push/ или с помощью docker-compose push https://docs.docker.com/compose/reference/push/ Собираем docker-compose.yml файл для продакшн окружения. В чем отличия? Самое очевидное это то, что там будут передаваться различные переменные окружения с настройками (ип адресс хоста, итд) Второй момент - это то, что на продакшне мы не будем билдить образы, а будем скачивать из докер реестра, если Вы посмотрите на текущий docker-compose.yml там будет секция build с указанием контекста и докерфайла, она не нужна. Создаем файл docker-compose.prod.yml version: "3.9" services: mysql: image: mariadb restart: always environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: l2server MYSQL_USER: localnetwork MYSQL_PASSWORD: localnetwork ports: - 3306:3306 volumes: - /home/server/mysql:/var/lib/mysql healthcheck: test: "/usr/bin/mysql --user=root --password=root --execute \"SHOW DATABASES;\"" interval: 10s timeout: 20s retries: 10 db-install: container_name: db-install image: lvlkoo/server:db-install depends_on: mysql: condition: service_healthy profiles: - db-install authserver: container_name: loginserver image: lvlkoo/server:loginserver restart: on-failure ports: - 2106:2106 environment: JAVA_MAX_MEMORY: 256m LOGINSERVER_HOST: "*" depends_on: mysql: condition: service_healthy healthcheck: test: "netstat -an | grep 9014 > /dev/null; if [ 0 == $$? ]; then echo 1; fi;" interval: 10s timeout: 1s retries: 10 volumes: - /home/server/logs:/server/logs profiles: - server gameserver: container_name: gameserver image: lvlkoo/server:gameserver restart: on-failure ports: - 7777:7777 environment: JAVA_MAX_MEMORY: 4G GAMESERVER_EXTERNAL_HOST: "ИП ХОСТИНГ МАШИНИ ТУТ" GAMESERVER_INTERNAL_HOST: "127.0.0.1" depends_on: mysql: condition: service_healthy authserver: condition: service_healthy volumes: - /home/server/logs:/server/logs profiles: - server Важный момент по поводу имени файла: все команды docker-compose изначально ожидают что файл будет называться docker-compose.yml, без лишних приставок, но можно дополнительно передать конкретный файл с помощью флага -f например запуска инсталятора docker-compose -f docker-compose.prod.yml --profile db-install up В таком случае можно иметь по друкой несколько compose файлов, например docker-compose.dev.yml, docker-compose.prod.yml, docker-compose.prod-server=2.yml и т.д Запуск на продакшене Собственно кульминация истории и зачем все это нужно Окружение: только-что купленная хостинг машина с centos на борту, без дополнительно установленного софта. 1. Устанавливаем docker https://docs.docker.com/engine/install/centos/ 2. Устанвливаем docker-compose https://docs.docker.com/compose/install/ 3. Создаем паки /home/server/logs и /home/server/mysql 4. Копируем файл docker-compose.prod.yml в /home/server (при этом сделав нужные изменения в переменных окружения) 5. Запускаем инсталятор docker-compose -f docker-compose.prod.yml --profile db-install up 6. Вырубаем инсталятор, запускаем сервер docker-compose -f docker-compose.prod.yml --profile server up Несколько моментов о которых стоит упомянуть - Для того, чтобы посмотреть список запущенных контейнеров используется команда docker ps https://docs.docker.com/engine/reference/commandline/ps/ либо docker-compose ps https://docs.docker.com/compose/reference/ps/ - При запуске контенера (ов) вы окажитесь в т.н attached режие, в котором весь консольный ввод передаеться напрямую контейнеру, для запуска в deatached режиме нужно передать флаг -d Чтобы приатачиться обратно можно использовать команду docker attach https://docs.docker.com/engine/reference/commandline/attach/ - Для того чтобы выполнить какую-нибудь команду в контейнер без аттача можно использовать команду docker exec https://docs.docker.com/engine/reference/commandline/exec/ или docker-compose exec https://docs.docker.com/compose/reference/exec/ - Для просмотра стдаута приложения можно воспользоваться командой docker logs https://docs.docker.com/engine/reference/commandline/logs/ или docker-compose logs https://docs.docker.com/compose/reference/logs/ - После того как сделали какие-то изменения в файлах сервера контейнер нужно пересобрать (с.м выше про сборку образов), и перезалить в реестр (с.м выше про пуш образов) а дальше перезагрузить на продакшн сервере Запулить нужный образ заного можно командой docker-compose pull https://docs.docker.com/compose/reference/pull/ Например docker-compose -f docker-compose.prod.yml pull authserver -При частой локальной пересборки будеи накапливаться мусор из старых образов. Очистить образы можно командой docker image prune https://docs.docker.com/engine/reference/commandline/image_prune/ - Тему можно развивать и настроить авматические билды и пуши образов из репозитория, с тегированием по номеру билда или ревизией (возможно будет полезно командам разработчиков) Послеловие Данная статья не претендует на научность или хау-ту, а лишь передает мой личный опыт. В основном я работаю с докером в другой сфере и в этом материале лишь описывается некоторый подход который возможно кому-то будет полезен. Спасибо всем кто дочитал до конца.
  3. 1 балл
    Далеко не у всех есть макбук, особенно на первых шагах обучения и практики, но рано или поздно стает вопрос, а как проверить верстку в Safari из по Windows? В целом без MacOS вы особо не развернетесь, есть различные онлайн сервисы, но в основном платные, а информации они особо не предоставляют, обычно это скриншоты с разных устройств и это гадание по фотографии, ну такое... Так что же делать? Если не покупать макбук, то самое эффективное решение это поставить эмулятор macOS. Для отладки js и проверки верстки в Сафари этого будет более чем достаточно. На самом деле поставить эмулятор, да так чтобы он еще адекватно работал, не так то и просто. Недавно я решил поставить на новый ноутбук эмулятор macOS последних версий и много раз об этом пожалел, я переставил кучу версий, но сафари в них работает просто ужасно, половину сайтов даже не открывает и судя по комментариям эта проблема глобальна. В общем я вернулся к проверенной macOS High Sierra. А теперь по пунктам: 1. Вам необходимо скачать и установить VMware Workstation, это эмулятор, он платный, где и как вы его будете качать решайте сами 2. Вам нужен VMware Unlocker, я использовал этот. Unlocker - это такая штука, которая научит VMware эмулировать macOS. Тут в целом все просто, скачиваете, распаковываете, в папке windows жмете правой кнопкой мыши по unlock.exe и выбираете запустить от имени администратора 3. Установить macOS и вот тут могут начаться нереальные танцы с бубном поэтому я предлагаю скачать готовый образ с установленной macOS High Sierra и просто его запустить минуя всю боль, но даже с ним возможно придется повозиться. Образ можно скачать отсюда и там же можно получить всю информацию по дальнейшей настройке. Если в двух словах: 4. В целом это все, дальше можно настроить сеть, например NAT позволяет выходить в интернет через вашу основную сеть используя её как маршрутизатор(Объясняю своими словами я не селен в этом), но если хотите подключиться например к localhost вашей основной ОС из под macOS, тогда понадобиться настроить мост, но это уже другая история, сейчас я не вспомню как это делал. Надеюсь я эта статься была полезной и я смог кому-то помочь. При копировании пожалуйста указывайте источник: https://get-web.site/blog/104-testiruem-verstku-v-safari-bez-makbuka-proverka-krossbrauzernosti-otladka-js-v-macos-iz-pod-windows.html
  4. 1 балл
    Нам понадобится исходники сервера исходники interface.u с компилятором Все, что вам нужно, находится в свободном доступе. Cерверная часть Сервер в нашем случае ACIS 36x, но подойдет любой (возможно PTS). Все, что требуется, это добавить команду, которая снимет указанный бафф. Чтобы не усложнять пример, давайте обойдемся обходом . Чтобы снять бафф, более современные клиенты отправляют пакет RequestDispel , поэтому мы будем использовать термин dispel Сначала добавим метод dispel в L2Character. Как и в более поздних версиях игры, не удаляются эффекты, которые должны остаться после смерти (например, штрафы), дебаффы, танцы и песни: // L2Character.java public final void dispelSkillEffect ( int skillId, int skillLevel ) { // Find skill with matching ID and level final L2Skill skill = SkillTable. getInstance ( ) . getInfo ( skillId, skillLevel ) ; // Skill wasn't found and can't be dispelled if ( skill == null ) { return ; } // Penalty-like or debuff skill effect can't be dispelled if ( skill.isStayAfterDeath ( ) || skill. isDebuff ( ) ) { return ; } // Stop skill effect by ID _effects. stopSkillEffects ( skill. getId ( ) ) ; } Теперь добавим обработку в to the runImpl RequestBypassToServer network пакета RequestBypassToServer, который приходит от клиента. Так как метод dispelSkillEffect требует ID навыка и уровень навыка в качестве аргументов, клиент должен передать их в качестве параметров команде dispel : // RequestBypassToServer.java // Usage: _dispel:<int:skill_id>,<int:skill_level> // Example: _dispel:313,8 else if ( _command. startsWith ( "_dispel" ) ) { String params = _command. substring ( _command. indexOf ( ":" ) + 1 ) ; // Split params into tokens StringTokenizer st = new StringTokenizer ( params, "," ) ; // Get skill ID from first token intid = Integer . parseInt ( st.nextToken ( ) ) ; activeChar. dispelSkillEffect ( id, level ) ; } Пример вызова: _dispel:313,8 I рекомендую сделать команду с аналогичными параметрами вместо обхода. Кроме того, тогда игроки смогут писать макросы для снятия баффа. Сторона клиента К сожалению, простого способа отслеживания Alt+Click в клиенте Interlude нет, поэтому используем обычный двойной клик левой кнопки мыши для снятия баффа . Событие будет обрабатываться окном AbnormalStatusWnd , в котором отображаются иконки бафов и дебаффов Алгоритм: Слушаем в окне AbnormalStatusWnd событие двойного клика (OnLButtonDblClick) Определить бафф, на который нажали (через StatusIcon.GetItem) Определите идентификатор и уровень навыка этого баффа (через GetSkillInfo) Отправляем запрос на сервер (через RequestBypassToServer или ExecuteCommand) Вызываем dispelSkillEffect на сервере с полученным ID и уровнем навыка Событие двойного щелчка левой кнопки мыши OnLButtonDblClick получает в качестве аргументов только координаты щелчка. В то же время StatusIcon.GetItem требует указания строки и столбца ячейки. Соответственно надо определить в какой строке и в какой колонке наших бафов игрок нажал Поскольку мы знаем, что размер ячейки баффа равен 24 пикселям, а размер ручки, за которую перетаскивается окно, равен 12 пикселям, то вычислить строку и ячейку несложно: достаточно определить координаты окна с бафами вычесть все значения и разделить остаток на размер ячейки. Значения будут правильно округлены при приведении к типу int Во-первых, давайте добавим NSTATUSICON_SIZE константа, которая описывает размер ячейки баффа, в начало скрипта. Остальные константы разработчика уже описаны: // AbnormalStatusWnd.uc class AbnormalStatusWnd extends UIScript ; const NSTATUSICON_FRAMESIZE = 12 ; const NSTATUSICON_MAXCOL = 12 ; const NSTATUSICON_SIZE = 24 ; // ... Теперь в любом месте (например, сразу после функции OnEvent) добавьте обработку события двойного клика: // AbnormalStatusWnd.uc function OnLButtonDblClick ( int X , int Y ) { local Rect windowBounds ; local int targetRow ; local int targetCol ; local StatusIconInfo info ; local SkillInfo skillInfo ; // Find window position windowBounds = Me. GetRect ( ) ; // Process clicks outside of window frame only if ( X > ( windowBounds. nX + NSTATUSICON_FRAMESIZE ) ) { targetRow = ( Y - windowBounds. nY ) / NSTATUSICON_SIZE ; targetCol = ( X - windowBounds. nX - NSTATUSICON_FRAMESIZE ) / NSTATUSICON_SIZE ; StatusIcon. GetItem ( targetRow , targetCol , info ) ; if ( GetSkillInfo ( info. ClassID , info. Level , skillInfo ) ) { // Request server to stop skill effect // Usage: _dispel:<int:skill_id>,<int :skill_level> // Example: _dispel:313,8 RequestBypassToServer ( "_dispel:" $ string ( skillInfo. SkillID ) $ "," $ string ( skillInfo. SkillLevel ) ) ) ; } } } Скомпилировать interface.u, скопировать в клиент, запустить игру Готово!
  5. 1 балл
    Так вот хочу поделится своим опытом! Глава первая: Люди с кем стоит и не стоит работать! Steve Dogs - неоднократно пользуюсь услугами! Человек в общении приятен! помимо основной работы всегда подскажет то что знает! mcwa - До сих пор пользуюсь услугами данного человека и сбегать не собираюсь!!! Этот уникум с железными нервами, ответит на любой вопрос даже самый тупой в любое время суток!!! Тех поддержка на высочайшем уровне!!! •°•°•PsycHoO•°•°• - тут расписывать вообще нечего не надо! Быстро, качественно и надежно. gvb - обращался за помощью, поп*здели в скайпе, подсказал быстренько, заработал пивка! хороший человек SmokiMo - знает все о серверостроении, кодер, всегда помогал, отвечал на столько глупые вопросы что п*здец! этому человеку надо памятник поставить. Demoncool - по любым модификациям ядра к нему!!! не дрого и в кротчайшие сроки!!! AlisaReverseCode - человек ненадежный вообще, обращаться к нему я не советую если у вас какая срочная работа!!! но если у вас не ограниченное время и вы не боитесь потерять свои деньги с вероятностью 50/50 в этом случае вперед) L0rD1K - Заказывал услуги у данного ТС, все утроило, в общении приятный. L2Banners - не раз обращался, всегда быстро и качественно, цены не кусаются!!! Santa - то еще говно прикинулся другом Lord1k и вставил на деньги) ну тут уж я сам виноват) Глава вторая: Хочу открыть свой сервер, с чего начать. (Я не буду расписывать то что уже сотню раз расписали и показали, я оставлю ссылки на то что уже сотню раз сделано) Изначально вам понадобиться сборка(рассмотрим на примерe Interlude PwSoft (В данной главе я буду оставлять ссылки на то где что взять и где что подсмотреть)) http://forummaxi.ru/files/file/1796-pwsoft-last/ - идеально подойдет для сервера с дополнениями! вы скачали сборку что вы делаете дальше, качаете Navicat http://www.vlemon.info/files/347-ckachat-navicat-key.html после качаете Mysql; http://www.vlemon.info/files/689-ckachat-mysql-51-win-64.html Дальше jre 8+ версии; http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html После, делайте все по видео и у вас все получится. Глава три; Мы установили сборку, запустили, довольные как слоны, что делаем дальше? Качаем чистый патч: http://forummaxi.ru/files/file/1656-%D1%87%D0%B8%D1%81%D1%82%D0%B0%D1%8F-%D0%BF%D0%B0%D0%BF%D0%BA%D0%B0-system-interlude-rus-nogg-win-10-l2ini-edit/ (не подойдет если вы будите ставить smart guard, если что обращайтесь в лс) Патч скачали, теперь качаем FileEdit; http://l2ua.ru/forum/10-4212-1 открываем с помощью него l2.ini и меняем ИП на 127.0.0.1 если запускаем на локалке, если собираетесь поиграть с друзьями ставим внешний ИП. Теперь заходим на сервер и радуемся!!! Возможные проблемы запуская сервер для игры с друзьями! 1) У вас не открыты порты 2601 по стандарту логинсервер и 7777 геимсервер, заходим в брендмаузер и открываем! 2) У вас роутер и надо дать доступ еще и в нем, переходим в настройки роутера и открываем! Мануал будет дополнятся по мере моего свободного времени!!! Не одна из ссылок в мануале не является рекламой!!! Права на мануал я оставляю за собой и Административным персоналом forummaxi.ru!!! Публикуя мануал на других форумах, обязательно оставляйте ссылку на основной источник!!!
  6. 1 балл
    После обновления API Unitpay у многих возникла проблема с цифровой подписью, которую необходимо генерировать используя секретный ключ и все передаваемые параметры. На поддерживаемых CMS, в модулях и фреймворках это конечно уже работает, но я попробовал реализовать свое решение с использованием технологии ajax, то есть без перезагрузки страницы. Я постарался сделать форму красивой и понятной, реализовал предварительный подсчет итоговой стоимости, вывод ошибок, запрет ввода букв в числовое поле и прочие неявные мелочи. Данный код можно использовать прямо как есть, то есть залить все файлы на свой хостинг, вписать свои данные и страница оплаты полностью готова к работе. Так же можно интегрировать в существующую форму, для этого понадобиться подключить gw.unitpay.js, указать в action путь к gw.unitpay.php, добавить специальные data атрибуты и наименование полей. Скрипт написан на чистом js и не требует подключения каких-либо дополнительных библиотек. Если вы нашли ошибку в работе скрипта или у вас есть вопросы, пишите сюда Если вы знаете как улучшить код, то предлагайте свои правки в репозиторий и я с удовольствием их добавлю. Демонстрация Скачать Ответы на вопросы: Да. Данный скрипт будет работать везде где возможно выполнение php скрипта Ссылка на оригинал статьи
  7. 1 балл
    Когда сворачивается окно lineage 2 меняется яркость? Многие годами мучаются с этой проблемой, некоторые вообще перестали сворачивать окно л2 чтобы яркость экрана не изменялась. Но решения на самом деле очень простое. Все что вам необходимо это отредактировать всего один файл в папке system, это та папка, которую вам надо менять для игры на любом сервере л2. И так что нам понадобится для того что бы исправить яркость экрана при свернутом окне: 1. Программа L2 FileEdit ( Скачать: https://yadi.sk/d/4txLm6a63JZDW7 ) 2. Открываем при помощи программы FileEdit файл l2.ini в папке system и ищем в 2-х местах параметры Brightness, Contrast, Gamma ( См. Прикрепленную картинку) По умолчанию их значения такие: Brightness=0.800000 Contrast=0.700000 Gamma=0.800000 3. Заменяем эти значения вот этими ( См. Прикрепленную картинку): Brightness=0.500000 Contrast=0.500000 Gamma=1.000000
  8. 1 балл
    Не большое обучение начинающим администраторам Здравствуйте, уважаемые читатели макси. Многие из вас знают меня на данном портале. Собственно сегодня я буду делиться информацией, которую накапливал в себя около 8 лет... А именно, как-же открыть и не прогореть на "линейке". Я долго искал инвестора или команду, ищу и сейчас, но ждать уже слегка поднадоело. В результате чего, решил поделиться не большим кусочком знаний. Мало-ли, может кому-то и пригодится. Сразу хочу попросить прощения у ребят, которые так-же делают перспективные проекты. Простите за то, что данным мануалом делаю конкуренцию ещё больше, чем она есть. Пожалуй начнем... А начну я с того, что сервер lineage - это элементарно бизнес, так-же, как и в жизни, только в интернете. Предположим, что вы решили проинвестировать или вложить свои деньги в проект и заработать в интернете.(прошу заметить, именно "Проект", но не как, не сервер, как привыкли называть все. Сервер - это серверная часть ПРОЕКТА, а есть ещё клиентская часть, веб часть, системная часть). На эти мелочи редко обращают внимание. Но даже такая мелочь - это уже большой плюс. Ведь именно, чем больше у вас плюсов, тем перспективней ваш продукт. Не так давно я столкнулся с интересным случаем, когда человек предлагал сотрудничество и попросил оценить его сайт. Сразу бросилось в глаза то, что регистрация, статистика выводится через "_blank", это нравится многим игрокам, но на данном сайте на малопиксельных мониторах отображалась она не полностью и приходилось прокручивать колесиком мышки, а если прокручивать скролом браузера, просто _blank страница пропадала. Вопрос: если я сижу с ноутбука, без мышки и хочу зарегистрироваться на сайте или похвастаться в последующем друзьям, как игрок, своей статистикой ТОП ПВП, как бл**ь я это сделаю??? На что я получил от человека ответ: сейчас уже высокие технологии и все пользуются мышками. Прошу заметить, это не правильное утверждение. Это - ошибка. Тоесть БАГ. Как в игре есть баги, только это баг на сайте. И на такие мелочи 90% проектов закрывают глаза, потому, как просто нету опыта, чтобы исправить, или лишних 100 рублей, чтобы попросить программиста сделать лишний скролл прокрутки в окне той-же регистрации. Сделаем не большой вывод: любая, даже очень маленькая мелочь играет очень большую роль. И можно потерять несколько десятков человек. А вдруг именно эти несколько десятков человек готовы были скупиться у вас в игре на 100.000 рублей? откуда вам знать? Идем дальше. Чудо администраторы, которые кладут в сервера 5000-10000 рублей. А ещё лучше - "Ищу спонсора на мега тру ПВП х999999. Нужно 5000-10000 рублей." - Лишняя трата времени! Пойдите лучше с друзьями на эти деньги в клуб, попейте пива, закажите девочку. Так у вас останутся хоть воспоминания. В противном случае вы потратите около месяца, потратите деньги. И в итоге - ФЕЙЛ. Тут я даже рассказывать не буду. Только серверное оборудование, которое хоть как-то будет оправдывать ваши усилия, вам обойдется примерно в 10000 рублей/мес.(МИНИМУМ). Задумайтесь! На домашних компьютерах, без фильтра того-же cisco, или на том-же hetzer(дедики от 2000рублей) уже не кто не ставит. Ибо конкурентов много. Да будет вам известно, что если вы открываете проект хотя-бы с онлайном в 300 человек, вы автоматически становитесь конкурентом для многих. И будет много ДДоса, ультиматумов, рекламы у вас на сервере и форуме. В данном случае лучше всего иметь при себе хаккера или ДДос менеджера. Только хорошего ддос менеджера, а не 12 летнего мальчика, который через программульку, которую скачал в гугле под запросом - "скачать бесплатно программу для ддоса" ломает сервера КС1.6. И все-же какая машина нас устроит. Предположим вы рассчитываете онлайн в 300 человек. Я не буду сейчас даже говорить цифры деняг на рекламу, просто предположим у вас есть такие деньги. Итак: Это, как минимум 2 мощных ядра и 8 ГБ ОЗУ. выделенный канал 100мб, ХОРОШАЯ защита от ддос. Опять-же напоминаю, что все цифры я пишу по минимуму. И ОЗУ при ДДОсе на сервер сильно нагружается, именно поэтому сервера часто падают. У нашей команды с онлайном 350+ живых человек с не большой рекламой, было 4 ядра intel xeon e5. 64GB OZU, ssd диски, 1гб инет трафик, защита от ддос + хорошая настройка серверной машинки от профессионала. Сервер не упал не разу! При довольно сильных атаках. Где брал, к сожалению это уже не скажу. Анализируйте и ищите связи! Сервер... Для того, чтобы определиться в сборке, требуется для начала определиться в себе. Что вы хотите от сервера? Вы хотите ПВП или Лоу рейт. А может Крафт. Для разных рейтов - разные сборки. Обращайте прежде всего внимание на репутацию сборки, сколько сборка на рынке, на отзывы. Сборка - это то, что может запороть весь ваш бизнес план!!! Выбирая сборку ставьте приоритеты. Делайте анализы, прям на бумажке выписывайте. Сделайте не большую табличку и заносите плюсики и минусики. В итоге подсчитаете. Потом обратите внимание на поддержку. Пообщайтесь с каждым из производителей и только тогда делайте вывод. У опытного программиста, либо сборка уже есть, либо программист работает с исходным кодом, либо делает анализ по сборке около нескольких дней, а то и недель! Кстати, очень хороший вариант работать с исходником, но для этого вам нужны глобальные знания, как минимум Java. С исходным кодом, вы на своем проекте не просто администратор. Вы БОГ! То есть, вы сотворили сами этот мир. И вы можете переписать игру целиком. Реализовать любую идею в реальность, даже самую не представляемую идею. А ведь залог к успеху - Уникальность . Я не буду расписывать сборки. Я и так пишу эти строки, чуть не со слезами на глазах, так-как вот, кусок моего много-годичного опыта уходит в шару. Сайт... Ни какой шары. То, что вы поставите не должен будет до этого момента видеть не кто. Больше серьезности. Меньше цветов. Серьезный стиль! Красивый сайт, сопровождение видео или аудио, только не как, не с авто-запуском медиа. Люди обычно такие сайты просто закрывают, даже не прочитав их названия. Но промо, обзоры - не помешают. Но если их не будет. Сильной беды не будет тоже. Для кого как, но я люблю разукрашивать сайты флеш анимациями, очень красиво выглядит. Некоторые считают это лишним. Но тут у каждого свое мнение. И каждый по своему прав. Ведь флеш анимации нагружают сайт. А публика любит, когда сайт работает очень быстро. Приходится всегда чем-то жертвовать. Или искать золотую середину. Быть может не весь сайт, а 1-2 элементика выделить флешкой. Не применно хорошо, когда на сайте всегда под рукой кнопки регистрация или начать игру, или быстрый старт. Что-то в этом плане. Верстка... Вы купили дизайн. Вам нужно его сверстать. У вас есть не большие знания верстки. Я на вашем месте рисковать не стал-бы. Лучше отдайте сайт профессионалу, который сделает ваш код легким и сайт будет работать быстрее. Не ведитесь на сообщения, типа - "Первым двум написавшим верстка бесплатно". Видно, что человеку нужна работа, чтобы попрактиковаться. Но это не как, не хорошая идея, для вашего "лица" бизнеса. Ведь сайт - это лицо вашего проекта. И именно сайтом вы будете завлекать людей. Вы можете дать рекламу в 5 раз меньше, но из тех, кто рекламу просмотрит прийдет 70% игроков. А можно сделать сайт не очень, но дать хорошую рекламу. И тогда придет из просмотревших ваш продукт, всего процентов 10-20%. Ну а что будет, если сделать офигенный сайт и хорошую рекламу....? Вы понимаете о чем я. Команда... Да. Именно команда нужна вам. Я далеко не новичек. Могу сделать проект от сайта до НПСов, но даже мне очеееень трудно работать одному. Вам в любом случае нужно набирать опытную команду. Не берите много людей. Не доверяйте полный доступ. Доступ только при необходимости. К примеру сайт доступ Вебмастеру. Датапакеру, либо доступ от дедика, либо вовсе разрабатывает у себя на компьютере, а после кидает вам наработку, которую вы просто зальете и замените прошлые файлы. Кодеру в основном вовсе доступ к вашему железу проекта не нужен. Так-как эти люди работают с VPN. Если не знаете человека - не спешите ему доверять. Вы за всю жизнь врядле заработаете такую сумму, на какую за год кидают в интернете. При чем кидают не только школьники, а и бывает, дяди, по 40 лет. Кстати, по поводу школьников. Есть уникальные кадры. Стремительные ребята. Ведь именно они не заняты в основном не чем и тупо задротят в интернете, больше чем кто-иной. Под вашим присмотром, вы даже можете взять 15 летнего мальчика, который доказал вам, что уже довольно не плохо разбирается. Ведь именно ребенок будет бояться потерять такую работу. Он будет работать мечтой заработать в интернете. Смотрите на человека, в целом. Может он будет знать меньше не много, чем другой, с кем вы проводили собеседование по поводу принятия на работу в команду. Но вы будете уверены, что этот человек вас не кинет! А опыт придет со временем. В целом вам желательно иметь: руководитель. (если опыт достаточен в л2, им можете быть и вы, если нет, ищите ещё 1 человека и давайте уполномочия управления командой.) Вебмастер дизайнер датапакер Комьюнити менеджер системный администратор ДДосер Именно с такой, опытной командой - вас ждет успех! Финансы. Скажем так. ещё пару лет назад, за 200 долларов, можно было собрать онлайн примерно в 700 человек.. Сейчас вам 100 долларов не хватит даже на сайт. средний проект с НУЛЯ, если ничего нет. вам обойдется в ~100.000рублей. где примерно 5000-10000рублей на сайт+защита 15000 сборка ~15000 серверное оборудование+ защита. мелкие расходы примерно 10.000 рублей. Оплата сотрудникам N-naя сумма. +остальное реклама. Вывод: Любую мелочь доводите до ума. У вас должно быть все пиксель в пиксель. Не должно быть шары. Все делаем с нуля и руками. Л2 - это не хобби. Это интернет бизнесс. Меньше разных цветов. Выберите основные и от них отталкивайтесь. Чтобы был серьезный вид. Вы должны понимать, что можно хорошо прогореть, даже не по вине команды, а по вине конкурентов. Если вас начнет бить со вех сторон, то железо может и не выдержать. И сервер упадет. Хотя за частую больше убивают сайт, чем сервер. Прям на открытии. Даже знаю несколько ддос парней. У них прям хобби такое. При вложении 100000 рублей и удачном старте ваш проект окупается за 2 недели с онлайном даже 250 человек. Л2 не стабильный бизнесс. Вы можете за месяц заработать себе на год вперед. а можете прогореть и не заработать не копейки. Это лишь не большая часть того, чего 90% проектов не делают. Линейка вымирает уже постепенно. Именно поэтому и нужны новые сервера, на которые будут возвращаться люди из других игр, в которые от скуки сейчас играют. Типа Аион, Тера итд. Спасибо всем за внимание. skype: virusok3740 Не откажусь от благодарности в виде спасибки на макси. Данный мануал написан специально для саморазвития пользователей форума - Forummaxi.ru . И права на данный материал я оставляю за собой и предоставляю администрации данного портала. При копировании материала, указывайте автора-Virusok. А так-же ссылку на forummaxi.ru
  9. 1 балл
    Автор: Juzzle Каждый задумывался как себя обезопасить от краха базы чаров, их предметов скиллов, да и вообще, базы всего сервера, но не знал как это делать. В данном мануале рассказано как создать файлы запуска резервного копирования Базы данных. 1. Для Windows создаем файл dump.bat в нем прописываем: *файл mysqldump.exe скопируйте в папку где лежит dump.bat теперь добавляем в авто загрузку заходим в Панель управления > Назначенные задания > Добавить задание жмем обзор, ищем свой файл устанавливаем флажёк на ежедневно время 00:10 (время лучше ставить с разбросом 5-10мин, чтоб задания не накладывались и не грузил сервер) заходим в свойства(прав. клик на файл) > расписание (закладка) > Дополнительно (кномпа) ставим флажек повторять задание каждые 1 часов выполнять в течении 24 час переходим в закладку параметры выполнять не дольше чем 5-15мин (если повиснет процесс, то винда процесс убьет) 2. Для Linux создаем папку dump (/home/dump) в ней создаем папку 2010 (/home/dump/2010) дальше создаем папки с месяцами (/home/dump/2010/01) и т.д. создаем файл dump.sh и проиписываем: дампим и сразу запихиваем в архив теперь файл dump.sh надо закинуть в crontab: каждый час в 50 мин (удобно перед осадами сохранять, за 10мин) в 5ч в 50 мин каждый день (лучше перед ежедневным ребутом за 30 мин)
  10. 1 балл
    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 полезные советы при загрузке игры
×
×
  • Создать...