PDA

Просмотр полной версии : уроки по скриптованию (L2walker)


DaniCh
06.06.2009, 20:18
Введение . Основные сведения про скрипты для валкера/ингейма . Команды скриптов .
Скрипты для валкера/ингейма - это текстовые файлы с расширением .SEC Их можно открывать Блокнотом и их читать . В Блокноте их можно и создавать , но есть один очень важный момент ! После того как вы создали файл в Блокноте то чтобы сохранить его надо нажать "Сохранить как..." а затем Кодировку выбрать Юникод !!! Это очень важно , запомните это .

Готовые скрипты размещают в папке SCRIPT валкера/ингейма . Можно в этой папке создать еще свои папки , это очень удобно когда у вас много скиптов уже есть - тогда в окне скрипты будут видны как в Проводнике .

Теперь команды скриптов . Вот вам старенький ФАК , он еще со времен Ц3:
How to make a script:
1. You will need L2Walker
2. You will need notepad and the file extension must be .sec (ie: script.sec)
3. The File must be saved as: unicode (File|Save As| Encoding: Unicode)
4. Read this msg to learn about commands.

Scripting Rules/Guidelines:
- A script instruction must occupy a line.
- () front is the instructionname(no spaces) between commands and parenthesis. IE: MOVETO(x,y,z)
- () The center is the instruction parameter
- Must save file in Unicode format!
- IDs to obtain Item IDs, just get the item in your inventory
then put it in the buy or sell (in vending options) save it.. open your .INI file and look for it.
so far this has been the fastest way i have gotten item IDs.
- Condition judgment instruction,If judges correct executes the next instruction or under with {}the center instruction,
- Otherwise can jump over to the next instruction under or jumps over continuing on with the script.

Example:

Code:

ITEMCOUNT(Healing Potion,>,1)
{
RETURN
}
MSG(You do not have any potions!)
JMP(Buy Potion)
USEITEM(Scroll of Escape)
DELAY(5000)

If I had 2 potions on me, it will skip the part between { }. This is a simple little script not usuable, but
should show you the "Condition" script.

COMMANDS:

Code:
MOVETO(x,Y,Z)

Explained:Moves to x,Y,Z. You can check your posistion by clicking:
SETUP | OPTION - Pathing | .Cur

Code:
NPCSEL(name[ID=x])

Explained:Chooses NPC. Can select an NPC within the field of range.
Noticed that you can select them even if you don't use ID.
IE: NPCSEL(Sovin)

Code:
NPCDLG(name[ID=x])

Explained:With NPC dialogue. Opens up the dialog the NPC has.

Code:
DLGSEL(name)

Explainedialogue choice. Look for certain words in dialog and select.

Code:
GOHOME()

Explained:Return to nearest town on death.

Code:
SAY(writing)

Explained:Speaks generally. Anyone in game can view.

Code:
MSG(writing)

Explained:Outside hangs the prompt, Only you can see.

Code:
UseItem(name[ID=x])

Explained:Uses the stage prop. ID is not required.

Code:
BuyItem(name [ ID=x ],Quantity)

Explained:Purchase goods. ID is required.
Example 1:BuyItem (returns to the reel [ ID=736 ],2)
Example 2:BuyItem (returns to the reel [ ID=736 ],2;Reactivating reel [ ID=737 ],3)

Code:
SellItem(name [ ID=x ],Quantity)

Explained:Sell goods. ID is required.
Example 1:SellItem (returns to the reel [ ID=736 ],2)
Example 2:SellItem (returns to the reel [ ID=736 ],2;Reactivating reel [ ID=737 ],3)
Example 3:SellItem (*) sells in the stage prop hypothesis to suppose is "sells"the complete goods

Code:
SaveItem(name [ ID=x ],Quantity)

Explained:No Clue what this is used for.
Example 1:SaveItem (returns to the reel [ ID=736 ],2)
Example 2:SaveItem (returns to the reel [ ID=736 ],2;Reactivating reel [ ID=737 ],3)
Example 3:SavelItem (*) preserves in the stage prop hypothesis to suppose is"saves" the complete goods

Code:
LoadItem(name [ ID=x ],Quantity)

Explained:No Clue what this is used for.
Example 1:LoadItem (returns to the reel [ ID=736 ],2)
Example 2:LoadItem (returns to the reel [ ID=736 ],2;Reactivating reel [ ID=737 ],3)

Code:
ChangeWaitType(x)

Explained:The character stands or sits down
Example 1:ChangeWaitType(0) // SIT I Think.
Example 2:ChangeWaitType(1) // STAND I Think.

Conditional order:

Code:
StrInDlg(dialogue writing)

Explained:Judges in the NPC dialogue dialog box whether has the writing which assigns
Example:

Code:

NPCSEL(John Doe[ID=1007534])
NPCDLG(John Doe[ID=1007534])
DLGSEL(duty)
STRINDLG(complies to entrust)
{
DLGSEL(complies to entrust)
JMP(duty meets)
}
JMP(duty already received)

Code:
StrNotInDlg (dialogue writing)

Explained:Judges in the NPC dialogue dialog box whether it doesn't have assigned writing
Example:
NPCSEL(John Doe[ID=1007534])
NPCDLG(John Doe[ID=1007534])
DLGSEL(duty)
STRNOTINDLG(complies to entrust)
{
MSG(already received duty)
JMP(has met duty)
}
DLGSEL(complies to entrust)

===============================================
CharStatus([ CHP|CMP|HP|MP|WEIGHT|LV|SP|RACE|STAND ],[ >=|>|==|!=|<|<=],Num)
Explained:Character condition judgment.
HP,MP,WEIGHT: is a percentage
CHP,CMP: Health current actual value
WEIGHT: is carries a heavy load the percentage
LV: Your Level
RACE: manner race (human=0, Demon=1,Dark Elf=2, Elf=3, Dwarf=4)
STAND:STAND==1 is standing and STAND==0 is sitting
==============================================
PosInRange(x,Y,Z,Range)
Explained:Examines the character current coordinates whether by x,Y,Z is central
point range is in the radius center of a circle

PosOutRange(x,Y,Z,Range)
Explained:Examines the character current coordinates whether by x,Y,Z is central
point range is outside the radius center of a circle

Example: Say you are outside of the set radius

PosOutRange(100,100,100,500)
{
MSG(please stand in the battle area)
EXIT()
}

ItemCount(name[ID=x],* ,Count)
*
>= Greater than or equal to
> Greater than
== Equal to
!= Does not equal
< Less than nor equal to
<= Less than
Explained:
Assigns the name or the ID stage prop quantity compared with thecharacter body on whether does satisfy the condition

Flow control instruction:
CALL(LABEL name)
Explained:Transfers the LABEL marking the label address execution,Carries out returns,
Must have to have the RETURN instruction
Example:
CALL(next step)
The transfer completes can continue the execution next step
...
EXIT()
LABEL(next step)
...
RETURN

useskill (name[ID=x])

Code:
JMP(LABEL name)

Explained:Jumps changes to the LABEL marking the label address execution

Code:
RETURN()

Explained:When CALL transfer must use this to return

Code:
EXIT()

Explained:Conclusion script movement

Code:
DELAY(x)

Explained:Retards x millisecond

Code:
PAUSE()

Explained:Pause the Script

Code:
LABEL(Zone)

Explainedefinition Zone,Uses for JMP or CALL

Establishment instruction:

Code:
SET([ FIGHTSTART|FIGHTSTOP ])

Explained:The establishment commencing of action or stops fighting
Example:
SET(FIGHTSTART) //Starts to fight
SET(FIGHTSTOP) //Stops fighting

EXAMPLES:

Code:

LABEL(checkposistion)
ITEMCOUNT(Scroll of Escape: Castle[ID=1830],>=,Cool
{
CALL(test)
}
ITEMCOUNT(Scroll of Escape: Castle[ID=1830],<,7)
{
CALL(test2)
}
DELAY(2000)
JMP(checkposistion)

LABEL(test)
MSG(work)
RETURN

LABEL(test2)
MSG(working?)
RETURN

В от мои обьяснения этих команд:

GOHOME()

Команда возврата в город после сметри

SAY(текст)

Писать что-либо в окне чата.

JMP(название)

Переход к метке LABEL(название) где текст в кавычках такой же

CALL(название)

Вызов подпрограммы. Переход к LABEL(название) где текст в кавычках такой же

LABEL(название)

Обозначает метку для перехода по CALL(название) или JMP(название)

DELAY(x)

Задерка , где x в милисекундах , т.е 1 сек это 1000

PAUSE()

Пауза . Скрипт станет на паузу и запустится вновь после того как вы нажмете кнопку Pause

RETURN()

Возврат из подпрограммы.

EXIT()

Конец скрипта. После этой команды выполнение скрипта прекратится

MOVETO(x,y,z)

Перемещение в точку с координатами x,y,z

ITEMCOUNT(Название предмета[ID=#],<,1)
{
...
}

Подсчитывает количество указанных предметов с условиями <, >, = и если условие верно товыполняет скрипт в фигурных скобках

USEITEM(Название предмета[ID=#])

Использует предмет.

BuyItem(Название предмета[ID=#],#)

Покупает предмет

BuyItem(Название предмета[ID=#],#;Название предмета[ID=#],#)

Покупает за раз более одного предмета (можно указать много предметов через точку с запятой).

SavelItem(Название предмета[ID=#],#)

Помещает предмет в хранилище (Warehouse)

SavelItem(Название предмета[ID=#],#;Название предмета[ID=#],#)

Помещает несколько предметов в хранилище (Warehouse).

LoadItem(Название предмета[ID=#],#)

Забрать предмет из хранилища

LoadItem(Название предмета[ID=#],#;Название предмета[ID=#],#)

Забрать несколько предметов из хранилища , # - количество

NPCSEL(Имя NPC[ID=#])

Выбрать NPC

NPCDLG(Имя NPC[ID=#])

Начать диалог с NPC

DLGSEL(Диалог)

Выбрать пункт диалога , например: DLGSEL(Buy)

StrInDlg(Диалог)
{
...
}

Проверяет присутствует ли фраза в диалоге ,если да, то исполняетса кусок скрипта в фигурных скобках

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 - стоишь

PosInRange(x,y,z,дистанция)
{
...
}

проверка находится ли заданная точка в пределах досягаемости (дистанция). Если да, то выполняется кусок скрипта в фигурных скобках

PosOutRange(x,y,z,дистанция)
{
...
}

то же самое, но условие верно, если точка все досягаемости

SET(FIGHTSTART)
Начинает бой

SET(FIGHTSTOP)
Останавливает бой

Добавлено через 3 минуты
Урок 2

Пишем ваш первый скрипт с командой SAY

Вот те кто никогда скрипты не писал так давайте напишем ваш первый скрипт .

Открывайте блокнот и начинаем писать скрипт .

Здесь дам вам один важный совет . Рекомендую начинать скрипт с "шапки" . Шапка - это информация про скрипт . Если в тектсте скрипта есть двойные косые линии // , то это - комментарии , все что написано после косых линий скриптом не читается и можно этим пользоваться чтобы оставлять коментарии в тексте скритпа и делать "шапки" то же )) В "шапке" пишем краткие сведения про скрипт , желателно там добавить когда он написан , на каких версиях валкера/ингейма проверялся и прочее .

Вот давайте создадим такую "шапку"

//---------------------------------------
//
// Мой первый скрипт
//
// написан 19.05.2008
//
//---------------------------------------

вот теперь давайте протестируем команду SAY и дальше пишем команду

SAY(hi all)

выполняя эту команду скрипт скажет в общий чат hi all

чтобы проверить работает ли у вас эта команда если текст на русском то потом пишем потом такую команду

SAY(привет всем)

а потом пишем еще одну команду MSG -

MSG(test end)

отличие этой команды от команды SAY в том что это команда выдает сообщение не в общий чат , а только сообщение для вас в окне валкера/ингейма

теперь такое очень важное замечание . Все исполняемые команды , в т.ч. SAY и MSG валкером/ингеймом могут выполниться не сразу , могут выполниться не сразу , а скрипт не ожидая окончание выполнения предыдущей команды прейдет к следующей команде и чтото будет пропущено и как результат произойдет сбой или неправильная скрипта . Поэтому приучите себя после всех исполняемых команд ставить задержку хотя бы 0.5сек . Единственное исключение , команда MOVETO , после нее нет необходимости ставить задержку . Поэтому после всех наших команд ставим DELAY(500)

Заканчиваем скрипт командой EXIT() . Ну в данном скрипте в ней нет особой необходимости , когда выполнятся все команды скрипта а скрипт не зациклен то скрипт и так остановится . Но изучим и эту команду

Вот в результате ваш первый скрипт получился такой-

Код HTML:
//---------------------------------------
//
// Мой первый скрипт
//
// написан 19.05.2008
//
//---------------------------------------

SAY(hi all)
DELAY(500)

SAY(привет всем)
DELAY(500)

MSG(test end)
DELAY(500)

EXIT()
Теперь сохраняем скрипт , обязательно через "Сохранить как ..." и кодировкой выбираем юникод !!! Затем меняем расширение скрипта .txt на .SEC

Помещаем скрипт в папку SCRIPT валкера/ингейма и радуемся вашему первому скрипту ))))
А мне не забывайте говорить СПАСИБО :-)

Ну и в тему скриптов с командой SAY скрипт для спамеров рекламы

Код:
//-------------------------------------------------
//
// скрипт для спама рекламы в общий чат
//
//--------------------------------------------------

LABEL(metka005)

SAY(Продам по 3000a билетики для фишермена , за которые вы можете увеличить банк , инвентарь и другое . Цены умеренные . )
DELAY(60000)

JMP(metka005)
Это скрипт уже в отличие от предыдущего так зацикленный . После того как скрипт проспамит рекламу то будет задержка в 1 минуту ( 60сек) , а потом скрипт по команде JMP перейдет к метке в начале скрипта и все опять повторится )))

W.T^Killer
06.06.2009, 20:33
За нидельку научусь.

DaniCh
07.06.2009, 20:10
Урок 3

Пишем скрипты на перемещение с командой MOVETO

Команда MOVETO(x,y,z) - это перемещение в точку с координатами x,y,z , Это часто испольщзуемая команда в составах скриптов .

Расказываю как определять эти х,у,z . Это можно делать разными способами . Если вы в клиенте в окне чата введете команду /loc то вы получите координаты той точки где стоите . Можно командой /loc определять координаты и в окне чата валкера , кстати эта команда там уже есть !

Но проще всего MOVETO писать с помощью ингейма . Открываем меню Script Make и если нажать кнопку REC то ваш маршрут будет записан уже готовыми командами ! Только перемещаться надо аккуратно , не делая ненужных кликов ))))

Кстати , скрипты с командами MOVETO я почти каждый день использую , когда играю на клиненте с ингеймом . Дело в том что в городах есть маршруты , по которым вы пробегаете много много раз за все время игры . Это маршруты от/к ГК , банка , магазинов и подобные . Очень удобно написать для некоторых городов готовые подборки скриптов перемещения по таким маршрутам .

Вот например мой скрипт на перемещение в Гиране от ГК в люксор

Код:
// Giran от ГК в люксор

MOVETO(83391,147956,-3431)
MOVETO(82988,148009,-3495)
MOVETO(81545,147524,-3490)
MOVETO(81543,147214,-3559)
MOVETO(81319,14553 7,-3559)
MOVETO(81124,145540,-3559)
MOVETO(80249,145837,-3559)
MOVETO(80076,145830,-3522)
MOVETO(79727,145456,-3520)
если написать команды в обратном порядке то получится скрипт на перемещение с люксора к ГК ;-)

Вот попробуйте и сами напишите какойнить подобный скрипт или несколько скриптов .

Ну и вот что еще по поводу команды MOVETO необходимо знать . Дело в том что когда эта команда выполняется то координата z - игнорируется !!! Поэтому скрипт на спуск под воду перед катакомбами надо писать спуск змейкой или по спирали , иначе скрипт посчитает что команда выполнена если совпадут только две первые координаты .

На мостах без перил перемещение надо тщательно посрединке и мелкими шажками писать иначе чар может спрыгнуть с моста )))

Gaska
12.07.2009, 22:49
кто нибудь настройте бот на la2home.com *rull* (я не понимаю как:( )

Добавлено через 53 секунды
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

cigan
31.07.2009, 20:33
столкнулся с проблеммой( иг волкер не понемает команды начать бой

ahellos
23.09.2009, 18:44
Проблема волкер выдает ошибку и вылетает пишет Win32 host и вылетает что делать и так все волкеры любая версия

Ks.Valera.
03.10.2009, 00:07
помню еще на л2 с 3 бота знал как 5 пальцев ососцатЬ! сейчас тож разбираюсь, оброщайтесь