\\CHP = Здоровье персонажа
CMP = Мана персонажа
HP = Здоровье (%)
MP = Мана (%)
WEIGHT = Загрузка (%)
LV = Уровень (вожможно)
SP = Хрен знает что такое
RACE = Это еще менее понятно
STAND = Проверка сидишь или стоишь
...,==,0) Сидишь
...,==,1) Стоишь (может быть 0 и 1 надо поменять местами).
Код:
PosInRange(x,y,z,дистанция)
{
}
\\Проверка находится ли заданная точка в пределах досягаемости (дистанция). Если да, то выполняется кусок скрипта в фигурных скобках ({}).
Код:
PosOutRange(x,y,z,дистанция)
{
}
\\То же самое, но условие верно, если точка все досягаемости.
Код:
SET(FIGHTSTART)
\\Начинает бой.
Код:
SET(FIGHTSTOP)
\\Останавливает бой.
________________ ICQ 423 969 722
Skype - prof11ame Перед тем как проводить со мной сделки, советую в целях Вашей безопасности - просить проверку через форум !
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
- Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
BuyItem(Название предмета[ID=#],#;Название предмета[ID=#],#) \\Покупает за раз более одного предмета (можно указать много предметов через точку с запятой).
SavelItem(Название предмета[ID=#],#) \\Помещает предмет в хранилище (Warehouse).
SavelItem(Название предмета[ID=#],#;Название предмета[ID=#],#) \\Помещает несколько предметов в хранилище (Warehouse).
LoadItem(Название предмета[ID=#],#) \\Забрать предмет из хранилища.
LoadItem(Название предмета[ID=#],#;Название предмета[ID=#],#) \\Забрать несколько предметов из хранилища. # - само собой количество.
NPC's:
NPCSEL(Имя NPC[ID=#]) \\Выбрать NPC.
NPCDLG(Имя NPC[ID=#]) \\Открыть диалог с NPC.
DLGSEL(Диалог) \\Выьрать пункт диалога [пример: DLGSEL(Buy)].
StrInDlg(Диалог)
{
}
\\Проверяет присутствует ли фраза в диалоге. (например, Thank You!) Если да, то испольняеца кусов скрипта в фигурных скобках ({}).
Параметры персонажа:
ChangeWaitType(x)
\\Сменить состояние с "сидеть" на "стоять" и наоборот
x = 0 Сесть
x = 1 Встать.
CharStatus([CHP|CMP|HP|MP|WEIGHT|LV|SP|RACE|STAND]
,[>=|>|==|!=|<|<=],число)
{
}
\\CHP = Здоровье персонажа
CMP = Мана персонажа
HP = Здоровье (%)
MP = Мана (%)
WEIGHT = Загрузка (%)
LV = Уровень (вожможно)
SP = Хрен знает что такое
RACE = Это еще менее понятно
STAND = Проверка сидишь или стоишь
...,==,0) Сидишь
...,==,1) Стоишь (может быть 0 и 1 надо поменять местами).
PosInRange(x,y,z,дистанция)
{
}
\\Проверка находится ли заданная точка в пределах досягаемости (дистанция). Если да, то выполняется кусок скрипта в фигурных скобках ({}).
PosOutRange(x,y,z,дистанция)
{
}
\\То же самое, но условие верно, если точка все досягаемости.
SET(FIGHTSTART) \\Начинает бой.
SET(FIGHTSTOP) \\Останавливает бой.
FAQ:
Скрипты чаще всего пишутся в всем известной программе "Блокнот" . Можно ингеймом , но блокнот всервно придется использовать . Так что рекомендую для файлов с расширением .SEC выставить опцию открывать их с помощью Блокнота .
Вот напишем маленький скрипт на перемещение . Очень часто такие скрипты нужны , когда вы многократно бегаете по одному и тому же маршруту .
Для перемещений испоьзуется команда - MOVETO
Вначале снимаем точки . Это можно сделать с помощью команды /loc . Но это конечно неудобно . Удобней всего это сделать с помощью Ингейма . Есть там раздел в опциях Маке Скрипт и нажав Рек вы запомните команды и действия . Получаем набор команд , например
Теперь очень важный момент ! Сохраняем скрипт блокнотом например с названием rewty6854.txt . Только надо обязательно сохранять в кодировке Юникод !!!! Иначе скрипт не будет работать . После того как вы сохранили , меняем расширешие файла с .txt на .SEC . Потом скрипт надо поместить в папку script Волкера или Ингейма .
Небольшой полезный совет .
У вас будет много скриптов и вы рано или поздно начнете в них путаться . Скрипты улучшаются , переделываются и прочее . Так для того , чтобы не путаться в начале скрипта полезно писать комментарии . Для этого в самом начале строки пишется // , например
//-------------------------------------------------
//
// скрипт на перемещение
// из А в Б
// версия 0.01 от 07.01.2006
//
//--------------------------------------------------
Когда у скрипта будет такая шапка , то вы уже не запутаетесь . Полезно и комментарии внутри скрипта писать , для себя , чтобы легче было , когда вы будете улучшать скрипт .
Теперь напишем скрипт посложнее , например на крафт ССД.
Чтобы скрафтить соску нужна команда USEITEM .
Тоесть мы использем предмет , в данном случае - рецепт .
Вот и пишем так
USEITEM(Recipe: Soulshot: D Grade[ID=1804])
Но этого мало . После этой команды отроется рецепт , но чтобы соска скрафтилась , надо дать команку - Креате
DLGSEL([Create])
Теперь такое . На выполнение команд требуется время . Так чтобы скрипт не сбивался после комант на чтото надо обязательно ставить задержку . Тогда следующая команда будет выполнена , сбоев небудет . Задержку экспериментально определяю . Для крафта сосок вполне достаточно 0.5-1 сек . В скриптах задержка пишется в миллисекундах .Поэтому пишем
USEITEM(Recipe: Soulshot: D Grade[ID=1804])
DELAY(500)
DLGSEL([Create])
DELAY(500)
Вот уже есть скрипт . Но по нему будет скрафчена одна соска и он выключится . Надо заставить скрипт повторяться , зациклить его так сказать . Для этого в начале скрипта пишем метку , например - LABEL(metka005) . Тогда по команде
JMP(metka005) скрипт вернется вна эту метку и снова будут повторяться действия
LABEL(metka005)
USEITEM(Recipe: Soulshot: D Grade[ID=1804])
DELAY(500)
DLGSEL([Create])
DELAY(500)
JMP(metka005)
Вот уже готовый рабочий скрипт . С его помощью уже можно крафтить Но ...
Надо его немного улучшить , об этом будет немного дальше .
А пока немного о другом .
Названия предметов и их ИД для разных серверов могут быть РАЗНЫЕ !!! Разными могут быть и фразы в диалогах , например как в даноом случае - [Create]
Правильные для вашего сервера можно узнать , раскодировав файлы клиента , где все это есть . Но это конечно очень нудный путь . Можно сделать гораздо проще . Испльзуйте Ингейм , в разделе Маке Скрипт есть возможность снять названия и ИД предметов и НПСей . Также можно запомнить и сохранить команды с диалогами , которые вы потом можете вставить в скрипт . Только если в командах/названиях корейский язык , надо включить в Виндовсе поддержку корейского языка , иначе не будут правильно выполняться скрипты .
Будем улучшать скрипт
.
Вначале надо решить что еще нужно , а потом собрать до кучи .
Что она делает . Проверяет условие , сидит или стоит чар . Если стоит , то будут выполняться команды в скобках . Иначе эти команды будут пропущены . Вот чара посадили .
Теперь в процессе крафта расходуется мана . Надо иметь 30 и больше маны для крафта ССД . Поэтому напишу такое условие
Что будет происходить . Если маны меньше 31 , то скрипт подождет секунду и снова возратится на проверку этого условия . И только когда маны достаточно он будет работать дальше .
В процессе крафта расходуются кристаллы и соул оре . Поэтому добавлю такую поверку
Эти проверки если нету кристалов или соулов , то они выключают скрипт командой EXIT()
Ну почти все , но добавлю еще одну проверку . Бекпак не резиновый . Рано или поздно может переполниться . Вот добавлю такую проверку . Допустим этот скрипт будет у крафтера , который и крафтит и продает одновременно . Если веса больше чем 79% то скрипт тоже зациклится и будет ждать , пока купят соски
Вот все и собрал . Конечно можно немного и этот скрипт улучшить , сделать красивее , но уже имеем 100% рабочий и хороший скрипт для крафта ССД .
Точно также пишутся и другие скрипты на крафт . Можно писать на крафт не одного вида сосок , а например , чтобы чар барыга , отслеживал , сколько у него разного типа сосок и при необходимисти крафтил то , что продано .[I][B]
Думаю очень важно рассказать про тек сказать грамматику , про синтаксис языка скриптов для Валкера и прочие асы
Снова повторяю одну очень важную вещь . Скрипты пишутся в Блокноте . Потом сохраняются В КОДИРОВКЕ ЮНИКОД !!! , а потом эти файлы перемеиновываются , меняем расширение файла .txt на .SEC
Когда скрипт запускается , он начинает работать с первой строчки , потом вторая и так далее , пока строчки не закончатся . Это про скрипт без развлетлений ( нету в нем команд JMP и CALL ) . Скрипт также останавливается после команды EXIT() . Если команда написана неправильно , то скрипт может или остановиться или пропустить эту команду или неправильно выполнить что-то . Так что написать скрипт это полдела , даже меньше - четверть дела , а потом его надо отладить и исправить ошибки . Пустые строчки в скриптах пропускаются , так что их можно использовать , чтобы скрипт более тек сказать понятным был . Также не читаются строчки , которые начинаются на // . Это так пишутся комментарии в скриптах . Советую этим пользоваться , поверьте , вам же легче будет потом в вашем же скрипте разобраться .
Про большие и маленькие буквы . Для скриптов они не имеют значения . Например такие команды MOVETO , MoveTo и moveto для скрипта это одно и то же . Лично я всегда пишу команды большими буквами , так все наглядней получается .
Теперь про языки . На серверах , где есть частичная руссификация , поддерка русских сообщений и подобное вполне можно , а иногда и нужно использовать русские слова . Где нету такого , то пишите сообщения , комментарии на транслите . Если в названиях предметов , диалогах с НПС есть корейский язык , то для того , чтобы скрипты правильно работали неоходимо включить в Виндовсе поддержку корейского языка , иначе скрипты не будут правильно работать .
Простые скрипты без развлетлений ( например на перемещение ) конечно бывают нужны . Но гораздо чаще есть необходимость в скриптах , где есть равлетвления в алгоритме .
Для этого в языке скриптов есть команды JMP(*****) , CALL(*****) а также различные команды - проверки на условия .
Раличия между JMP(*****) и CALL(*****) . После команды JMP(*****) скрипт просто перейдет к строчке LABEL(*****) , где ***** - какое-то сочетание букв или цифр , но точно такое же как и в команде JMP !!! А вот по команде CALL(*****) немного по другому будет . Скрипт перейдет к метке JMP(*****) , потом будет выполнять команды дальше после этой метки , но если встретит команду RETURN() , то он вернется к строчке , в которой была команда CALL(*****) и будет выполнять уже команды после этой строчки . Чтото это типа подпограммы , но без параметров . Очень удобно и часто полезно это использовать .
Команды проверки на какието условия .
Это команды POSINRANGE(....) , ITEMCOUNT(...) , CHARSTATUS(...) и другие . Как они работают . Условие пишется в круглых скобках этих команд , например CHARSTATUS(CHP,<=,0) . После этих команд надо в фигурных скобках написать те команды , которые будут выполняться , когда условие верно . Если условие неверно , то эти команды будут пропущены и будут выполняться команды посде фигуных скобок . Примерно это так выглядит
ПРОВЕРКА(условие)
{
...
команды , выполняемые , когда условие верно
иначе они пропускаются
...
}
....
Теперь очень важный момент , который многим кровь попортил .
Не используйте проверку в проверке , типа такого
Команды валкера new. Работают только с 2,13 + версии
_http://www.towalker.com/english/index.html
IsMember: IsMember(Player Name)
Определяет, является ли XXX членом партии
!IsMember: !IsMember(Player Name)
Определяет, является ли XXX не членом партии
RequestJoinParty: RequestJoinParty(object,type)
Приглашает object в партию,
type: метод-распределения-лута, 0 finder keeper, 1 random, 2 rand include spoil, 3 by turn, 4: by turn include spoil
RequestOutParty: RequestOutParty(object)
удаляет object из партии,
QuitParty: QuitParty()
выходит из текущей партии
MemberBuffs: MemberBuffs(character name,status name[Id=XXX])
Определяет наличие состояния у указанных мемберов,
Примеры скриптов, можно добавить _http://zhyk.ru/forum/showthread.php?t=4378
1. Скрипт для валкера 2.13+
2. Скрипт на офф пати баф (инвайтим на бафф)
//устанавливает режим боя в состояние "случайно"(английская версия - Rand)
Код:
SET(RANGETYPE,STARTPOS,RADIUS)
//устанавливает режим боя в состояние "бой начинаеться из центральной точки"(английская версия - Combat Begin Point In Center Point)
радиус принимает значение параметра RADIUS
Код:
SET(RANGETYPE,DEFPOS,x,y,z,RADIUS)
//устанавливает режим боя в состояние "из центра"(английская версия - Center Point)
координаты центральной точки принимают значение (x,y,z)
радиус принимает значение параметра RADIUS
Код:
SET(RANGETYPE,DEFRANGE)
//устанавливает режим боя в состояние "определить диапазон"(английская версия - Define Range)
Код:
SET(DEFRANGE,ADD,x,y,z)
//добавляет точку пути в таблицу последовательных координат вершин многоугольной зоны для режима "определить диапазон"(английская версия - Define Range)
координаты следующей точки принимают значение (x,y,z)
Код:
SET(DEFRANGE,CLEAR)
//чистит таблицу последовательных координат вершин многоугольной зоны для режима "определить диапазон"(английская версия - Define Range)
Код:
SET(RANGETYPE,DEFPATH)
//устанавливает режим боя в состояние "определить путь"(английская версия - Define PathPoint)
Код:
SET(DEFPATH,ADD,x,y,z,RADIUS)
//добавляет точку пути в таблицу последовательных координат пути для режима "Если нет мобов, двигаться по своему пути"(английская версия - When Not Found Mons) или режима "определить путь"(английская версия - Define PathPoint)
координаты следующей точки принимают значение (x,y,z)
радиус принимает значение параметра RADIUS
//назначает тип атаки для мобов, удобен, если на одной и той же территории нужно охотиться за определенными мобами в разное время... в принципе, очень полезен для квестов или территорий с несоциальными мобамиnster
Типы атак: ATTACK(атаковать), NOATTACK(не атаковать), ATTACKONE(атаковать, только когда рядом нету других мобов)
может задаваться для нескольких ID одновременно
//назначает действие для определенного дропа
наиболее удобен в случаях, когда 1 бот из пати умирает, а его дроп нужно очень быстро поднять
Режимы подбора дропа: PICK(поднимать), NOPICK(не поднимать), SAVE(сохранить)
Я хочу написать скрипт на подмену пакетов, для использования в l2phx.
begin
label;(metaka);
if FromServer and (pck=HStr('хекс заменяемого пакета')) then pck:=HStr('хекс нового пакета');
jmp(metaka)
end.
Я новичек в этом деле, но что не так?
у меня ситуация такая:
мне нужно чтобы бд бафала и делала офф пати,
с этими командами это вполне получается,
но к сожалению старые л2 валкеры эту функцию не поддерживают
на серве котором играю хроники - хеллбаунд
пробывал валкер 10.9.7 - у меня в нём не показывается инвентарь - всё каряво вхлам, но команды работают...
ктонь может подсказать что делать?
DLGSEL(Диалог) \\Выьрать пункт диалога [пример: DLGSEL(Buy)].
а вот к примеру, мне нужно сделать нубл тп, я выбираю ноблесс телепорт, а там появляется 2 одинаковые строки, в одной телепорт за гейт пасы а в другой за адену, как сделать чтоб бот выбрал 2 строку
________________
Помог? Тыкни спасибо!! Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
а вот к примеру, мне нужно сделать нубл тп, я выбираю ноблесс телепорт, а там появляется 2 одинаковые строки, в одной телепорт за гейт пасы а в другой за адену, как сделать чтоб бот выбрал 2 строку
Use the Noblesse Gate Pass
Teleport to another town
Teleport to the hunting ground
Teleport to the Seven Signs dungeon
Do not use Noblesse Gate Pass
Teleport to another town
Teleport to the hunting ground
Teleport to the Seven Signs dungeon
Бот умеет выбирать только первое совпадение из диалога. Так как там идентичные строки - он будет выбирать только первую.
Вариант решения проблемы только один: писать скрипт для WP/PH, который будет делать эти строки разными. Конкретный скрипт будет зависеть от хроник, также от языка диалога.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
писать скрипт для WP/PH, который будет делать эти строки разными. Конкретный скрипт будет зависеть от хроник, также от языка диалога.
что такое WP/PH, и как написать этот скрипт хроники интерлюд
________________
Помог? Тыкни спасибо!! Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
WP = Wicked Patcher
PH = Packet Hack
Скрипт пишется руками, предварительно рекомендовано прочесть мануалы по скриптованию и документацию к программе (все имеется у нас на форуме)
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
В любом из нас спит гений. И с каждым днем все крепче.
Запомните раз и навсегда:= 'Помочь' <> 'Сделайте за меня';
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
у меня проблема, заходил на боте все норм было,а сегодня запускаю и не хочет заходить я подазреваю что это из-за WSS там пишет так
Код:
!! Нет прав владельца (code: 10048)
что это значит?
________________
Помог? Тыкни спасибо!! Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
а вот к примеру, мне нужно сделать нубл тп, я выбираю ноблесс телепорт, а там появляется 2 одинаковые строки, в одной телепорт за гейт пасы а в другой за адену, как сделать чтоб бот выбрал 2 строку
Я писал скрипт на Волкере и на ПХ одновременно включал их
На волкере было когда подходишь к ГК кидаешь на себя нубл, а на ПХ был скрипт при появлении пакета от клиента заюзать на себя нубл делать ТП через нубл по 2-му диалогу, примерный скрипт будет такой
PHP код:
const name = 'Dunyashka' ; begin if FromClient and(pck=HStr('Пакет нубла на себя')) then begin buf:=HStr('Пакет тп через 2-ой диалог'); SendToServerEx(name); end; end.