adamjohnson.info

Как самому сделать скрипт

Как самому сделать скрипт 115

В этой теме я попробую вас научить подробно как писать скрипты. Авторство не моё, а одной милой девушки (Lanara), которая сама научилась писать скрипты и сейчас у неё это не плохо получается. Прошу каждого прочесть внимательно данный мануал, чтобы в дальнейшем вы не задавали глупых вопросов.
Модераторам ! Я постараюсь сделать интересный и важный топик . По-этому прошу вас закрепить его и чистить тему от флуда (ну или хотя бы дайте мне прова на эту тему, чтобы я сам мог её чистить).
Начинающим ! Если вам мой топик принес пользу не забывайте нажимать кнопочку СПАСИБО :-)
Ну что поехали!!!

Добрый день , уважаемые ботоводы и ботоводки ))))

Я давно играю в Линейку , почти 3и года . Начинал играть на рейтах х1 и наверное бы кинул уже Линейку , если бы добрые люди не научили меня ботоводить , спасибо большое им за это . Потом потихоньку научился скрптики писать , вначале простенькие , а сейчас пишу такие скриптики , которыми и похвастаться можно . Но если я их просто так выложу , то они для большинства будут бесполезные , потому что чужие скрипты надо настраивать под себя , под свой сервер и своих чаров и прочее , а для этого надо уметь читать скрипты , понимать что там написано и править их ! А в идеале надо писать скрипты для себя самому ))))

Вот поэтому я решил сделать этот топик , где в виде этаких уроков-лекций постараюсь рассказать все что знаю про скрипты и их написание , а я знаю про это много . Я буду рассказывать все постепеннно , от простейших , элементарных вещей которые надо знать тем кто хочет научиться писать скрипты и пользоваться ими вплоть до самых сложных моментов . И я не просто буду рассказывать а постараюсь помочь вам самим научиться писать скриптики , мы будем писать их вместе ;-)

Опытным ! Я не говорю что знаю все , все не знает никто )) Но я знаю многое и если вы не согласны в чем-то со мной - давайте будем дискутировать , новичкам будет полезно узнать разные точки зрения .

Урок 1

[spoiler=Введение . Основные сведения про скрипты для валкера/ингейма . Команды скриптов .]Скрипты для валкера/ингейма - это текстовые файлы с расширением .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)

Explained:Dialogue 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)

Explained:Definition 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)

Останавливает бой
[/spoiler]
Урок 2

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

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

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

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

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

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

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

SAY(hi all)

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

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

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

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

MSG(test end)

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

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

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

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

//--------------------------------------- // // Мой первый скрипт // // написан 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 перейдет к метке в начале скрипта и все опять повторится )))
[/SPOILER]

Урок 3

[SPOILER=Пишем скрипты на перемещение с командой 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,145537,-3559) MOVETO(81124,145540,-3559) MOVETO(80249,145837,-3559) MOVETO(80076,145830,-3522) MOVETO(79727,145456,-3520) если написать команды в обратном порядке то получится скрипт на перемещение с люксора к ГК ;-)

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

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

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

Урок 4

[SPOILER=Диалоги в скриптах на примере скриптов на перемещение через ГК]

Диалоги в скриптах очень широко применяются . Вот давайте изучим как это делать на примере скриптов на перемещение через ГК

Чтобы писать команды диалогов ингейм просто необходим ! Надо открыть меню Script Make и нажать кнопочку REC тогда диалог с НПС запишется .

Вот есть такие скрипты на перемещение через ГК . Ну прикиньте - ваш КХ в Глудине например а вы хотите отправить пачку ботов на кач . Ну на ровном месте пачку ботиков патилидер за собой потянет , а как через ГК их перемещать ? Каждого вручную - это очень напряжно , можно написать скриптик и все ботики сами поперемещаются через ГК !!! )))

Ну что ж подходим к ГК и начинаем ингеймом записывать диалог .

Вот что получается при телепорте с Глудина в Глудио

NPCSEL(Richlin[ID=7320])
NPCDLG(Richlin[ID=7320])
DLGSEL( Teleport )
DLGSEL(The Town of Gludio - 2900 Gold coin )

прямо так полученную запись в скрипте использовать неполучится . Сразу удаляем строчку NPCSEL - она лишняя и ненужная , диалоги будут в скриптах работать если они начинаются с команды NPCDLG .

Теперь вспоминаем что я уже говорила про задержку . Если После команд диалога не писать задержки то диалоги будут постоянно сбиваться !!! Поэтому после них пишем задержку хотя бы 0.5сек , а для гарантии я лично в своих скриптах пишу 2сек .

Теперь есть еще два момента в скриптах , когда задержку надо увеличивать . Во первых , это когда выпадают квестовые вещи после диалогов , они выпадают с задержкой до 3-4 секунд , поэтому в диалогах после таких команд рекомендую ставить задержку 5-6 секунд . И вот при телепортах надо задержку увеличивать . На валкере хотя бы до 10сек , а на ингейме надо ставить задержку как минимум в 20 сек . Поскольку я одни и те же скрипты использую и для валкера и для ингейма , то я всегда в таких случаях ставлю задержку 20сек .

Вот теперь готовые команды на перемещение с Глудина в Глудио выглядят так -

NPCDLG(Richlin[ID=7320])
DELAY(2000)
DLGSEL( Teleport )
DELAY(2000)
DLGSEL(The Town of Gludio - 2900 Gold coin )
DELAY(20000)

а вот один из моих таких скриптиков , это скрипт на телепорт с Глудина к Saints Necropolis

// телепорт с Глудина к Saints Necropolis NPCDLG(Richlin[ID=7320]) DELAY(2000) DLGSEL( Teleport ) DELAY(2000) DLGSEL(The Town of Gludio - 2900 Gold coin ) DELAY(20000) NPCDLG(Bella[ID=7256]) DELAY(2000) DLGSEL(Teleport) DELAY(2000) DLGSEL(The Town of Dion - 4100 Gold coin ) DELAY(20000) NPCDLG(Trisha[ID=7059]) DELAY(2000) DLGSEL(Teleport ) DELAY(2000) DLGSEL(The Town of Giran - 8100 Gold coin ) DELAY(20000) NPCDLG(Clarissa[ID=7080]) DELAY(2000) DLGSEL( Teleport) DELAY(2000) DLGSEL(Saints Necropolis - 9800 Gold coin ) DELAY(20000) [/SPOILER]

Урок 5

[SPOILER=Продолжаем изучать диалоги и пишем простенький скрипт на квест]

Продолжаю предыдущую лекцию с командами диалогов . Вот что вам необходимо знать . Если вы хотите пользоваться скриптами , то вы должны уметь эти команды снимать ингеймом . Чужие скрипты у вас скорее всего не заработают ! Даже на том же офе содержимое диалогов с НПС - менялось с хроники на хронику . А уже про то что на всех фри серверах эти диалоги разные тут и говорить не надо )))))

Еще один важный момент . Большинство фри серверов - это переделанные офф серверы с диалогами на корейском языке . На многих серверах эти диалоги заменили на английские , на некоторых даже русифицировали . Но если вам в диалогах попались кусочки фраз с иероглифами то для отображения этих фраз в командах скриптов и соответственно для правильной их работы в панели управления виндовз в языковых настройках надо включить поддержку языков с иероглифами !!! Это - очень важно , обязательно это сделайте :-)

Ну вот чтобы закрепить навык снятия иалогов ингеймом напишем скрипт на простенький квест Letters of Love

Это одноразовый квест для любых левелов и рас . Начинается он у Дарина , стоящего в центре хуманской деревни на Талкинг Исланд . Вот описание этого квеста-

1. Поговорите в центре деревни с Darin он даст вам Darin's Letter.
2. Отнесите его к Gatekeeper Roxxy.
3. Вернитесь к Darin он даст вам Darin's Receipt.
4. Поговорите с Magister Baulro он даст вам Baulro Potion.
5. Вернитесь к Darin получите Necklace of Knowledg.

Ну начинаем писать скрипт квест . Поскольку квест начинается у Дарина , то скрипт начинаем с таких команд -

PosOutRange(-84463,242754,-3755,200)
{
MSG(квест должен начинаться в центре деревни рядом с Дарином!)
DELAY(500)
EXIT()
}

это - проверка где нафигодится ваш чар . Если он нафигодится ВНЕ зоны с кооординатами центра -84463,242754,-3755 и радиусом зоны 200 то будут выполняться команды те что нафигодятся между фигурными скобками {} Будет сообщение что чар не на месте и скрипт выключится .

Как я уже расказывала диалог с Дарином записываем ингеймом . Получится такое -

NPCSEL(Darin[ID=7048])
NPCDLG(Darin[ID=7048])
DLGSEL(Quest)
DLGSEL(Ask who Darin's love is)
DLGSEL(Say that you know Roxxy)
DLGSEL(Say you will do the favor)

Самую первую команду выкидываем как абсолютно ненужную а после остальных команд диалога добавляем задержку в 2 сек . Поскольку после последней команды происходит получение квестового предмета то после нее пишем задержку в 4 сек .

Потом тем же ингеймом снимаем перемещение от Дарина к Рокси и так далее . В результате получается такой скрипт

//------------------------------------------------------------------------------ // // Название квеста: Letters of Love // Тип: одноразовый // Расы: Все // Требуемый левел: 1 // Где брать квест: Talking Island Village (Darin) // Награда: Necklace of Knowledg // // Дарин с Говорящего Острова сильно влюблен в Хранителя Врат Рокси, // но он очень стеснителен, чтобы рассказать ей о своих чувствах. // Вы просто обязаны ему помочь! // // 1. Поговорите в центре деревни с Darin, // он даст вам письмо для свой возлюбленной - Darin’s Letter. // // 2. Отнесите его к Gatekeeper Roxxy. Оказывается, она тоже симпатизирует Дарину // и передает ему свой платок Roxxy's Kerchief. // // 3. Вернитесь к Darin. Он счастлив услышать от вас хорошие вести, // но не уверен в своих силах и просит помочь ему раздобыть любовное зелье. // Возьмите у него Darin’s Receipt. // // 4. Найдите в церкви Magister Baulro, // который может изготовить это зелье - Baulro Potion. // // 5. Вернитесь к Darin, отдайте бутылку и получите награду. // //------------------------------------------------------------------------------ // проверяем начальную точку PosOutRange(-84463,242754,-3755,200) { MSG(квест должен начинаться в центре деревни рядом с Дарином!) DELAY(500) EXIT() } // разговариваем с Дарином и получаем Darin's Letter NPCDLG(Darin[ID=7048]) DELAY(2000) DLGSEL(Quest) DELAY(2000) DLGSEL(Ask who Darin's love is) DELAY(2000) DLGSEL(Say that you know Roxxy) DELAY(2000) DLGSEL(Say you will do the favor) DELAY(4000) // бежим к ГК MOVETO(-84469,242768,-3755) MOVETO(-84898,243473,-3755) MOVETO(-85129,243932,-3755) MOVETO(-84809,244215,-3755) MOVETO(-84158,244580,-3755) // разовариваем с Рокси и получаем Roxxy's Kerchief NPCDLG(Roxxy[ID=7006]) DELAY(2000) DLGSEL(Quest ) DELAY(2000) DLGSEL([Letters of Love]) DELAY(4000) // возвращаемся к Дарину MOVETO(-84158,244580,-3755) MOVETO(-84809,244215,-3755) MOVETO(-85129,243932,-3755) MOVETO(-84898,243473,-3755) MOVETO(-84469,242768,-3755) // получаем Darin’s Receipt NPCDLG(Darin[ID=7048]) DELAY(2000) DLGSEL(Quest) DELAY(4000) // бежим в церковь к Баулро MOVETO(-84447,242753,-3755) MOVETO(-84866,243297,-3755) MOVETO(-85537,244340,-3755) MOVETO(-85479,244456,-3755) MOVETO(-85349,244606,-3753) MOVETO(-85226,244743,-3753) MOVETO(-85149,244800,-3753) MOVETO(-84754,245008,-3753) // получаем у Баулро Baulro Potion NPCDLG(Baulro[ID=7033]) DELAY(2000) DLGSEL(Quest) DELAY(4000) // возвращаемся к Дарину MOVETO(-84754,245008,-3753) MOVETO(-85149,244800,-3753) MOVETO(-85226,244743,-3753) MOVETO(-85349,244606,-3753) MOVETO(-85479,244456,-3755) MOVETO(-85537,244340,-3755) MOVETO(-84866,243297,-3755) MOVETO(-84447,242753,-3755) // получаем награду NPCDLG(Darin[ID=7048]) DELAY(2000) DLGSEL(Quest) DELAY(4000) MSG(квест окончен , награда получена ) DELAY(500) EXIT() Это готовый 100%но работающий скрипт на квест . Вот изучите его . Есть еще куча других подобных квестиков в начальных деревнях , где не нужно бить мобов а надо только бегать и говорить . Так задание тем кто учится писать скриптики - попробуйте сами написать подобный квест .[/SPOILER]
Урок 6

[SPOILER=Команды , проверки условий]

В предыдущем уроке был скрипт на простенький квест . Это 100%но работающий квест . Но так можно писать только самы простые квесты . Дело в том что многие скрипты на те же квесты работают часами и в процессе могут произойти разный форсмажор - чар изза какойнить ошибки с игры вылетит , комп даст сбой , оборвется инет , сервер ляжет и прочее . Как заставить правильно работать подобный скрипт на квест когда вы снова запустите игру ?

Для вот таких случаев существуют команды проверки условий . Уже в том скрипте я одну команду использовала для проверки месторасположения чара в момент начала квеста . В больших скриптах на долгие квесты скрипты должны начинаться с разных подобных команд . Дело в том что в процессе выполнения квеста вы получаете квестовые предметы . Вот в грамотно написанном скрипте в начале стоят проверки на наличие таких предметов . Например вот вам кусочек моего скрипта на профу скавенжера

// Проверки на случай если квест прервался ITEMCOUNT(Ring of Raven[ID=1642],>,0) { JMP(metka010) } ITEMCOUNT(Succubus Undies[ID=1645],>,0) { JMP(metka010) } ITEMCOUNT(Raut's Teleport Scroll[ID=1644],>,0) { JMP(metka009) } ITEMCOUNT(Bead Parcel[ID=1657],>,0) { JMP(metka008) } ITEMCOUNT(Bead[ID=1656],>,19) { JMP(metka007) } ITEMCOUNT(Bead[ID=1656],>,0) { JMP(metka006) } ITEMCOUNT(Tarantula Picture[ID=1654],>,0) { JMP(metka006) } ITEMCOUNT(Honey Jar[ID=1655],>,4) { JMP(metka005) } ITEMCOUNT(Honey Jar[ID=1655],>,0) { JMP(metka004) } ITEMCOUNT(Bear Picture[ID=1653],>,0) { JMP(metka004) } ITEMCOUNT(Mion's Letter[ID=1646],>,0) { JMP(metka003) } ITEMCOUNT(Pippi's Letter of Recommendation[ID=1643],>,0) { JMP(metka002) } ITEMCOUNT(Bronk's Ingot[ID=1647],>,0) { JMP(metka002) } ITEMCOUNT(Bronk's Pay[ID=1650],>,0) { JMP(metka002) } ITEMCOUNT(Shari's Axe[ID=1648],>,0) { JMP(metka002) } ITEMCOUNT(Shari's Pay[ID=1651],>,0) { JMP(metka002) } ITEMCOUNT(Zimenf's Potion[ID=1649],>,0) { JMP(metka002) } ITEMCOUNT(Zimenf's Pay[ID=1652],>,0) { JMP(metka002) } попозже я этот скрипт полностью тут выложу , просто вначале еще есть что расказать чтобы скрипт могли понять начинающие скриптописатели .

Сами команды проверки вы посмотрите в первом уроке в ФАКе . Они разные - на местоположение , на наличие предметов , на проверку разных характеристик чара типа здоровье и так далее . В ФАКе показано как правильно эти команды писать . Но есть один момент , которого нету в ФАКе .

Очень часто бывает необходимость выполнить проверку в проверке , ну тоесть такое -

ПРОВЕРКА1(...)
{
...
ПРОВЕРКА2(...)
{
...
}
...
}

Так вот запомните - ТАК СКРИПТЫ ПИСАТЬ НЕЛЬЗЯ ! Произойдет сбой и втрая проверка не будет работать . Ну это такая особенность языка скриптов для валкера/ингейма .

Есть два варианта как можно это ограничение обойти можно перед втопрой проверкой поставть команду JMP(...) и выйти из фигурных скобок первой проверки , а затем вернуться назад той же командой JMP . Ну например так

ПРОВЕРКА1(...)
{
...
JMP(metka1)
LABEL(metka2)
...
}

LABEL(metka1)
ПРОВЕРКА2(...)
{
...
}
JMP(metka2)

А можно вторую проверку оформить как подпрограмму и тогда это будет выглядеть так -

ПРОВЕРКА1(...)
{
...
CALL(check)
...
}

LABEL(check)
ПРОВЕРКА2(...)
{
...
}
RETURN()

В следующем уроке я раскажу про предметы , про особенности работы комнад с предметами . А сейчас немного забегу наперед . Мне тут в приват несколько просьб было выложить скрипт на сдачу продукции манора , так вот он -

//------------------------------------------- // // сдача продукции манора // //------------------------------------------- LABEL(metka001) ITEMCOUNT(Desert Codran[ID=5090],<,1) { MSG(vse) EXIT() } NPCDLG(Manor Manager[ID=7996]) DELAY(350) DLGSEL(Tally up indigenous product.) DELAY(350) SELLCROP(Desert Codran[ID=5090],250;) DELAY(350) JMP(metka001) //------------------------- Chilly Coda[ID=5065] Blue Coda[ID=5067] Desert Codran[ID=5090] Twin Codran[ID=5092] Great Codran[ID=5094] Blue Coba[ID=6541] Расказываю как пользоваться этим скриптом . Ну ник манор-менеджера и может быть и диалоги поправьте сами под себя с помощью ингейма . В двух местах скрипта надо написать название предмеда и его АйДи , это то же снимается при помощи ингейма .

После старта олимпиады обновляется прием манора но в течение нескольких минут приема еще нету . В этот момент обязательно посмотрите на цены на принимаемую продукцию . Дело в том что есть два вида наград за манор и там разные по ценности для вас награды могут быть . Так дело в том что скрипт будет сам сдавать продукцию в тот город где ему за сдачу предложат самую высокую цену ! И если вам нужна награда 2 а продукцию на награду 1 дороже принимают - то не запускайте скрипт . Но вообще такое очень редко бывает но я сочла нужным вас предупредить :-)[/SPOILER]

Урок 7

[spoiler=Предметы ]
Предметы и команды с предметами широко используется в скриптах . Команда использовать предмет - это USEITEM , вот как она пишется

UseItem(name[ID=x])

вот примеры применения такой команды -

USEITEM(Haste Potion[ID=734])
DELAY(500)

или вот -

USEITEM(Scroll of Escape[ID=736])
DELAY(32000)

Обратите внимание что после использования СоЕ надо задержку больше 30ти сек ставить ! Иначе ваш скрипт собьется когда после использования СоЕ вы не поставите задержку или задержка будет маленькая .

В качестве примеров использования команды USEITEM я вам покажу 2а своих скриптика .

Вот скрипт на разделку рыбы после рыбалки . Постарайтесь прочитать и понять скрипт .

Скрытый текст //-----------------------------------------------------------
//
// разделка рыбы
//
//-----------------------------------------------------------

LABEL(metka005)

CHARSTATUS(WEIGHT,>=,98)
{
MSG(ves98)
DELAY(500)
EXIT()
}

ITEMCOUNT(Small green nimble fish[ID=6411],>,0)
{
USEITEM(Small green nimble fish[ID=6411])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green ugly fish[ID=6412],>,0)
{
USEITEM(Small green ugly fish[ID=6412])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green fat fish[ID=6413],>,0)
{
USEITEM(Small green fat fish[ID=6413])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green nimble fish[ID=6414],>,0)
{
USEITEM(Green nimble fish[ID=6414])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green ugly fish[ID=6415],>,0)
{
USEITEM(Green ugly fish[ID=6415])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green fat fish[ID=6416],>,0)
{
USEITEM(Green fat fish[ID=6416])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big nimble green fish[ID=6417],>,0)
{
USEITEM(Big nimble green fish[ID=6417])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big green ugly fish[ID=6418],>,0)
{
USEITEM(Big green ugly fish[ID=6418])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big green fat fish[ID=6419],>,0)
{
USEITEM(Big green fat fish[ID=6419])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade nimble fish[ID=6420],>,0)
{
USEITEM(Small jade nimble fish[ID=6420])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade ugly fish[ID=6421],>,0)
{
USEITEM(Small jade ugly fish[ID=6421])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade fat fish[ID=6422],>,0)
{
USEITEM(Small jade fat fish[ID=6422])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Jade nimble fish[ID=6423],>,0)
{
USEITEM(Jade nimble fish[ID=6423])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Jade ugly fish[ID=6424],>,0)
{
USEITEM(Jade ugly fish[ID=6424])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Jade fat fish[ID=6425],>,0)
{
USEITEM(Jade fat fish[ID=6425])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big jade nimble fish[ID=6426],>,0)
{
USEITEM(Big jade nimble fish[ID=6426])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big jade ugly fish[ID=6427],>,0)
{
USEITEM(Big jade ugly fish[ID=6427])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big jade fat fish[ID=6428],>,0)
{
USEITEM(Big jade fat fish[ID=6428])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue nimble fish[ID=6429],>,0)
{
USEITEM(Small blue nimble fish[ID=6429])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue ugly fish[ID=6430],>,0)
{
USEITEM(Small blue ugly fish[ID=6430])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue fat fish[ID=6431],>,0)
{
USEITEM(Small blue fat fish[ID=6431])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue nimble fish[ID=6432],>,0)
{
USEITEM(Blue nimble fish[ID=6432])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue ugly fish[ID=6433],>,0)
{
USEITEM(Blue ugly fish[ID=6433])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue fat fish[ID=6434],>,0)
{
USEITEM(Blue fat fish[ID=6434])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big blue nimble fish[ID=6435],>,0)
{
USEITEM(Big blue nimble fish[ID=6435])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big blue ugly fish[ID=6436],>,0)
{
USEITEM(Big blue ugly fish[ID=6436])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big blue fat fish[ID=6437],>,0)
{
USEITEM(Big blue fat fish[ID=6437])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow nimble fish[ID=6438],>,0)
{
USEITEM(Small yellow nimble fish[ID=6438])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow ugly fish[ID=6439],>,0)
{
USEITEM(Small yellow ugly fish[ID=6439])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow fat fish[ID=6440],>,0)
{
USEITEM(Small yellow fat fish[ID=6440])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow nimble fish[ID=6441],>,0)
{
USEITEM(Yellow nimble fish[ID=6441])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow ugly fish[ID=6442],>,0)
{
USEITEM(Yellow ugly fish[ID=6442])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow fat fish[ID=6443],>,0)
{
USEITEM(Yellow fat fish[ID=6443])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big yellow nimble fish[ID=6444],>,0)
{
USEITEM(Big yellow nimble fish[ID=6444])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big yellow ugly fish[ID=6445],>,0)
{
USEITEM(Big yellow ugly fish[ID=6445])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big yellow fat fish[ID=6446],>,0)
{
USEITEM(Big yellow fat fish[ID=6446])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange nimble fish[ID=6447],>,0)
{
USEITEM(Small orange nimble fish[ID=6447])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange ugly fish[ID=6448],>,0)
{
USEITEM(Small orange ugly fish[ID=6448])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange fat fish[ID=6449],>,0)
{
USEITEM(Small orange fat fish[ID=6449])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange nimble fish[ID=6450],>,0)
{
USEITEM(Orange nimble fish[ID=6450])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange ugly fish[ID=6451],>,0)
{
USEITEM(Orange ugly fish[ID=6451])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange fat fish[ID=6452],>,0)
{
USEITEM(Orange fat fish[ID=6452])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big orange nimble fish[ID=6453],>,0)
{
USEITEM(Big orange nimble fish[ID=6453])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big orange ugly fish[ID=6454],>,0)
{
USEITEM(Big orange ugly fish[ID=6454])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big orange fat fish[ID=6455],>,0)
{
USEITEM(Big orange fat fish[ID=6455])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small Purple nimble fish[ID=6456],>,0)
{
USEITEM(Small Purple nimble fish[ID=6456])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small Purple ugly fish[ID=6457],>,0)
{
USEITEM(Small Purple ugly fish[ID=6457])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small Purple fat fish[ID=6458],>,0)
{
USEITEM(Small Purple fat fish[ID=6458])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple nimble fish[ID=6459],>,0)
{
USEITEM(Purple nimble fish[ID=6459])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple ugly fish[ID=6460],>,0)
{
USEITEM(Purple ugly fish[ID=6460])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple fat fish[ID=6461],>,0)
{
USEITEM(Purple fat fish[ID=6461])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big purple nimble fish[ID=6462],>,0)
{
USEITEM(Big purple nimble fish[ID=6462])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big purple ugly fish[ID=6463],>,0)
{
USEITEM(Big purple ugly fish[ID=6463])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big purple fat fish[ID=6464],>,0)
{
USEITEM(Big purple fat fish[ID=6464])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red nimble fish[ID=6465],>,0)
{
USEITEM(Small red nimble fish[ID=6465])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red ugly fish[ID=6466],>,0)
{
USEITEM(Small red ugly fish[ID=6466])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red fat fish[ID=6467],>,0)
{
USEITEM(Small red fat fish[ID=6467])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red nimble fish[ID=6468],>,0)
{
USEITEM(Red nimble fish[ID=6468])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red ugly fish[ID=6469],>,0)
{
USEITEM(Red ugly fish[ID=6469])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red fat fish[ID=6470],>,0)
{
USEITEM(Red fat fish[ID=6470])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big red nimble fish[ID=6471],>,0)
{
USEITEM(Big red nimble fish[ID=6471])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big red ugly fish[ID=6472],>,0)
{
USEITEM(Big red ugly fish[ID=6472])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big red fat fish[ID=6473],>,0)
{
USEITEM(Big red fat fish[ID=6473])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white nimble fish[ID=6474],>,0)
{
USEITEM(Small white nimble fish[ID=6474])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white ugly fish[ID=6475],>,0)
{
USEITEM(Small white ugly fish[ID=6475])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white fat fish[ID=6476],>,0)
{
USEITEM(Small white fat fish[ID=6476])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(White nimble fish[ID=6477],>,0)
{
USEITEM(White nimble fish[ID=6477])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(White ugly fish[ID=6478],>,0)
{
USEITEM(White ugly fish[ID=6478])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(White fat fish[ID=6479],>,0)
{
USEITEM(White fat fish[ID=6479])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green treasure chest[ID=6492],>,0)
{
USEITEM(Small green treasure chest[ID=6492])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(green treasure chest[ID=6493],>,0)
{
USEITEM(green treasure chest[ID=6493])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big green treasure chest[ID=6494],>,0)
{
USEITEM(Big green treasure chest[ID=6494])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade treasure chest[ID=6495],>,0)
{
USEITEM(Small jade treasure chest[ID=6495])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(jade treasure chest[ID=6496],>,0)
{
USEITEM(jade treasure chest[ID=6496])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big jade treasure chest[ID=6497],>,0)
{
USEITEM(Big jade treasure chest[ID=6497])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue treasure chest[ID=6498],>,0)
{
USEITEM(Small blue treasure chest[ID=6498])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(blue treasure chest[ID=6499],>,0)
{
USEITEM(blue treasure chest[ID=6499])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big blue treasure chest[ID=6500],>,0)
{
USEITEM(Big blue treasure chest[ID=6500])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow treasure chest[ID=6501],>,0)
{
USEITEM(Small yellow treasure chest[ID=6501])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(yellow treasure chest[ID=6502],>,0)
{
USEITEM(yellow treasure chest[ID=6502])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big yellow treasure chest[ID=6503],>,0)
{
USEITEM(Big yellow treasure chest[ID=6503])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange treasure chest[ID=6504],>,0)
{
USEITEM(Small orange treasure chest[ID=6504])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(orange treasure chest[ID=6505],>,0)
{
USEITEM(orange treasure chest[ID=6505])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big orange treasure chest[ID=6506],>,0)
{
USEITEM(Big orange treasure chest[ID=6506])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small Purple treasure chest[ID=6507],>,0)
{
USEITEM(Small Purple treasure chest[ID=6507])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple treasure chest[ID=6508],>,0)
{
USEITEM(Purple treasure chest[ID=6508])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big Purple treasure chest[ID=6509],>,0)
{
USEITEM(Big Purple treasure chest[ID=6509])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red treasure chest[ID=6510],>,0)
{
USEITEM(Small red treasure chest[ID=6510])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(red treasure chest[ID=6511],>,0)
{
USEITEM(red treasure chest[ID=6511])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Big red treasure chest[ID=6512],>,0)
{
USEITEM(Big red treasure chest[ID=6512])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white treasure chest[ID=6513],>,0)
{
USEITEM(Small white treasure chest[ID=6513])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(white treasure chest[ID=6514],>,0)
{
USEITEM(white treasure chest[ID=6514])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green nimble fish - For Beginners[ID=7726],>,0)
{
USEITEM(Small green nimble fish - For Beginners[ID=7726])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green ugly fish - For Beginners[ID=7727],>,0)
{
USEITEM(Small green ugly fish - For Beginners[ID=7727])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small green fat fish - For Beginners[ID=7728],>,0)
{
USEITEM(Small green fat fish - For Beginners[ID=7728])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green nimble fish - For Beginners[ID=7729],>,0)
{
USEITEM(Green nimble fish - For Beginners[ID=7729])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green ugly fish - For Beginners[ID=7730],>,0)
{
USEITEM(Green ugly fish - For Beginners[ID=7730])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Green fat fish - For Beginners[ID=7731],>,0)
{
USEITEM(Green fat fish - For Beginners[ID=7731])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large green nimble fish - For Beginners[ID=7732],>,0)
{
USEITEM(Large green nimble fish - For Beginners[ID=7732])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large green ugly fish - For Beginners[ID=7733],>,0)
{
USEITEM(Large green ugly fish - For Beginners[ID=7733])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large green fat fish - For Beginners[ID=7734],>,0)
{
USEITEM(Large green fat fish - For Beginners[ID=7734])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade nimble fish - For Beginners[ID=7735],>,0)
{
USEITEM(Small jade nimble fish - For Beginners[ID=7735])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade ugly fish - For Beginners[ID=7736],>,0)
{
USEITEM(Small jade ugly fish - For Beginners[ID=7736])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small jade fat fish - For Beginners[ID=7737],>,0)
{
USEITEM(Small jade fat fish - For Beginners[ID=7737])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large jade nimble fish - For Beginners[ID=7741],>,0)
{
USEITEM(Large jade nimble fish - For Beginners[ID=7741])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large jade fat fish - For Beginners[ID=7743],>,0)
{
USEITEM(Large jade fat fish - For Beginners[ID=7743])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large jade ugly fish - For Beginners[ID=7742],>,0)
{
USEITEM(Large jade ugly fish - For Beginners[ID=7742])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue nimble fish - For Beginners[ID=7744],>,0)
{
USEITEM(Small blue nimble fish - For Beginners[ID=7744])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue ugly fish - For Beginners[ID=7745],>,0)
{
USEITEM(Small blue ugly fish - For Beginners[ID=7745])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small blue fat fish - For Beginners[ID=7746],>,0)
{
USEITEM(Small blue fat fish - For Beginners[ID=7746])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue nimble fish - For Beginners[ID=7747],>,0)
{
USEITEM(Blue nimble fish - For Beginners[ID=7747])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue ugly fish - For Beginners[ID=7748],>,0)
{
USEITEM(Blue ugly fish - For Beginners[ID=7748])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Blue fat fish - For Beginners[ID=7749],>,0)
{
USEITEM(Blue fat fish - For Beginners[ID=7749])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large blue nimble fish - For Beginners[ID=7750],>,0)
{
USEITEM(Large blue nimble fish - For Beginners[ID=7750])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large blue ugly fish - For Beginners[ID=7751],>,0)
{
USEITEM(Large blue ugly fish - For Beginners[ID=7751])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large blue fat fish - For Beginners[ID=7752],>,0)
{
USEITEM(Large blue fat fish - For Beginners[ID=7752])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow nimble fish - For Beginners[ID=7753],>,0)
{
USEITEM(Small yellow nimble fish - For Beginners[ID=7753])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow ugly fish - For Beginners[ID=7754],>,0)
{
USEITEM(Small yellow ugly fish - For Beginners[ID=7754])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small yellow fat fish - For Beginners[ID=7755],>,0)
{
USEITEM(Small yellow fat fish - For Beginners[ID=7755])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow nimble fish - For Beginners[ID=7756],>,0)
{
USEITEM(Yellow nimble fish - For Beginners[ID=7756])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow ugly fish - For Beginners[ID=7757],>,0)
{
USEITEM(Yellow ugly fish - For Beginners[ID=7757])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Yellow fat fish - For Beginners[ID=7758],>,0)
{
USEITEM(Yellow fat fish - For Beginners[ID=7758])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large yellow nimble fish - For Beginners[ID=7759],>,0)
{
USEITEM(Large yellow nimble fish - For Beginners[ID=7759])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large yellow ugly fish - For Beginners[ID=7760],>,0)
{
USEITEM(Large yellow ugly fish - For Beginners[ID=7760])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large yellow fat fish - For Beginners[ID=7761],>,0)
{
USEITEM(Large yellow fat fish - For Beginners[ID=7761])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange nimble fish - For Beginners[ID=7762],>,0)
{
USEITEM(Small orange nimble fish - For Beginners[ID=7762])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange ugly fish - For Beginners[ID=7763],>,0)
{
USEITEM(Small orange ugly fish - For Beginners[ID=7763])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small orange fat fish - For Beginners[ID=7764],>,0)
{
USEITEM(Small orange fat fish - For Beginners[ID=7764])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange nimble fish - For Beginners[ID=7765],>,0)
{
USEITEM(Orange nimble fish - For Beginners[ID=7765])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange ugly fish - For Beginners[ID=7766],>,0)
{
USEITEM(Orange ugly fish - For Beginners[ID=7766])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Orange fat fish - For Beginners[ID=7767],>,0)
{
USEITEM(Orange fat fish - For Beginners[ID=7767])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large orange nimble fish - For Beginners[ID=7768],>,0)
{
USEITEM(Large orange nimble fish - For Beginners[ID=7768])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large orange ugly fish - For Beginners[ID=7769],>,0)
{
USEITEM(Large orange ugly fish - For Beginners[ID=7769])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large orange fat fish - For Beginners[ID=7770],>,0)
{
USEITEM(Large orange fat fish - For Beginners[ID=7770])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small purple nimble fish - For Beginners[ID=7771],>,0)
{
USEITEM(Small purple nimble fish - For Beginners[ID=7771])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small purple ugly fish - For Beginners[ID=7772],>,0)
{
USEITEM(Small purple ugly fish - For Beginners[ID=7772])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small purple fat fish - For Beginners[ID=7773],>,0)
{
USEITEM(Small purple fat fish - For Beginners[ID=7773])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple nimble fish - For Beginners[ID=7774],>,0)
{
USEITEM(Purple nimble fish - For Beginners[ID=7774])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple ugly fish - For Beginners[ID=7775],>,0)
{
USEITEM(Purple ugly fish - For Beginners[ID=7775])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Purple fat fish - For Beginners[ID=7776],>,0)
{
USEITEM(Purple fat fish - For Beginners[ID=7776])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large purple nimble fish - For Beginners[ID=7777],>,0)
{
USEITEM(Large purple nimble fish - For Beginners[ID=7777])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large purple ugly fish - For Beginners[ID=7778],>,0)
{
USEITEM(Large purple ugly fish - For Beginners[ID=7778])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large purple fat fish - For Beginners[ID=7779],>,0)
{
USEITEM(Large purple fat fish - For Beginners[ID=7779])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red nimble fish - For Beginners[ID=7780],>,0)
{
USEITEM(Small red nimble fish - For Beginners[ID=7780])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red ugly fish - For Beginners[ID=7781],>,0)
{
USEITEM(Small red ugly fish - For Beginners[ID=7781])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small red fat fish - For Beginners[ID=7782],>,0)
{
USEITEM(Small red fat fish - For Beginners[ID=7782])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red nimble fish - For Beginners[ID=7783],>,0)
{
USEITEM(Red nimble fish - For Beginners[ID=7783])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red ugly fish - For Beginners[ID=7784],>,0)
{
USEITEM(Red ugly fish - For Beginners[ID=7784])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Red fat fish - For Beginners[ID=7785],>,0)
{
USEITEM(Red fat fish - For Beginners[ID=7785])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large red nimble fish - For Beginners[ID=7786],>,0)
{
USEITEM(Large red nimble fish - For Beginners[ID=7786])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large red ugly fish - For Beginners[ID=7787],>,0)
{
USEITEM(Large red ugly fish - For Beginners[ID=7787])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Large red fat fish - For Beginners[ID=7788],>,0)
{
USEITEM(Large red fat fish - For Beginners[ID=7788])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white nimble fish - For Beginners[ID=7789],>,0)
{
USEITEM(Small white nimble fish - For Beginners[ID=7789])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white ugly fish - For Beginners[ID=7790],>,0)
{
USEITEM(Small white ugly fish - For Beginners[ID=7790])
DELAY(300)
JMP(metka005)
}

ITEMCOUNT(Small white fat fish - For Beginners[ID=7791],>,0)
{
USEITEM(Small white fat fish - For Beginners[ID=7791])
DELAY(300)
JMP(metka005)
}

MSG(vse)
DELAY(500)

EXIT()


Расказываю как работает этот скрипт . В самом начале скрипта стоит проверка на вес . Дело в том что при разделке рыбы вес увеличивается и иногда может быть такой случай что наступает перегруз , так тогда скрипт выдаст сообщение ves98 и остановится .

Потом идут команды ITEMCOUNT которые проверяют инвентарь на наличие разных видов рыб и сундуков . Если определенный сорт рыбы/сундука есть , то мы разделываем его с помощью команды USEITEM а затем скрипт по команде JMP возвращается в самое начало на метку metka005

После того как все проверки пройду и следовательно вся рыба будет разделана идет сообщение vse и скрипт останавливается .

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

Это скрипт на пролучение кристалов у НПС в магической гильдии . Стоят два чара с настоенным взаимным автотрейдом . У первого чара выставлено условие что когда в инвентаре предмета Emergency Dressing меньше чем один ( т.е нету этого предмета) так он кидает автотрейд второму чару . Заодно выставлено что он передает Green Soul Crystal этому второму чару . У второго чара автотейда на первого и выставлено что он передает первому чару 1ну штуку Emergency Dressing .

Теперь у первого чара запускаем такой скрипт и затовариваемя нужным количеством кристаллов -

Скрытый текст //-----------------------------------------------------
//
// скрипт на получение кри для СА в маг гильдии
//
//-----------------------------------------------------

LABEL(metka010)

ITEMCOUNT(Green Soul Crystal[ID=4640],>,0)
{
USEITEM(Emergency Dressing[ID=1834])
DELAY(10000)
JMP(metka010)
}

NPCDLG(Winonin[ID=7856])
DELAY(2000)
DLGSEL(Quest)
DELAY(2000)
DLGSEL("Yes, \nplease, may I have another?")
DELAY(2000)
DLGSEL(Green Soul Crystal)
DELAY(4000)

JMP(metka010)


Разберитесь как работает скрипт . Вначале идет проверка на наличие кристала в инвентаре и если кристал есть то используется бинтик и идет задержка на время пока произойдет автотрейд ! Правда ж хитро придумано ? )))

Ну а затем в скрипте идет диалог с НПС на получение кристала и возврат в самое начало скрипта .

Для работы с предметами есть еще команды купить, продать , положить/взять предмет с банка . Там есть некоторые особенности и тонкости о которых я раскажу вам в следующем уроке :-)
[/spoiler]
Урок 8

[spoiler=Предметы. Продажа, покупка ,банк. ]
Продолжаю рассказывать про предметы и команды работы с предметами. Во всех более менее приличных скриптиках на кач или квестики есть отдельные кусочки скрипта или подпрограмки для работы с магазинами и банками . Дело в том что при выполнении квестов происходит переполнение инвентаря а на каче будет перегруз если вовремя не не продавать ненужное в магазин а нужное не сбрасывать в банк . Да и припасы типа СоЕ, банок можно покупать скриптиком , а не вручную.

При использовани команд на продажу/покупку предметов , для банка , манора , подьема с земли и прочих подобных команд вы должны знать одну особенность этих команд . Дело в том что предметы делятся на две группы - те что складываются в инвентаре в стопку и те что не складываются .

Поэтому если вы напишите команду на покунку демонфангов так -

BUYITEM(Demon Fangs[ID=321],10)

то будет сбой ! Правильно для предметов что не складываются в стопку писать эти предметы в команде неколько раз , например так -

BUYITEM(Demon Fangs[ID=321],1;Demon Fangs[ID=321],1)

А вот для предметов что складываются в стопку пишем уже количество , например -

BUYITEM(Soul Ore[ID=1785],33000; )

Количество предметов в команде ОБЯЗАТЕЛьНО надо писать (за редкими исключениями) когда вы покупаете или берете предмет из банка ! А вот когда продаем или ложим в банк предметы то лично я вместо количества пишу в командах или вообще не пишу количество , можно так делать. . В этом случае предмет не складываемый в стопку продастся/положится в банк в количестве 1 штуки , а складываемые в стопку предметы продадутся/положатся все что есть в инвентаре .

В качестве примера как использовать команды для банка и магазина я вот выложу три скриптика .

Скрипт продать предметы -

Скрытый текст LABEL(metka101)

NPCDLG(Mion[ID=7519])
DELAY(2000)
DLGSEL(Sell)
DELAY(2000)

ITEMCOUNT(Leather Shoes[ID=37],>,0)
{
SELLITEM(Leather Shoes[ID=37];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Recipe: Forest Bow[ID=1794],>,0)
{
SELLITEM(Recipe: Forest Bow[ID=1794];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Recipe: Leather Helmet[ID=1798],>,0)
{
SELLITEM(Recipe: Leather Helmet[ID=1798];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Recipe: Piece Bone Breastplate[ID=1800],>,0)
{
SELLITEM(Recipe: Piece Bone Breastplate[ID=1800];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Necklace of Anguish Chain[ID=1896],>,0)
{
SELLITEM(Necklace of Anguish Chain[ID=1896];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Leather Shoes Texture[ID=1921],>,0)
{
SELLITEM(Leather Shoes Texture[ID=1921];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Leather Stocking Pattern[ID=1923],>,0)
{
SELLITEM(Leather Stocking Pattern[ID=1923];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Leather Gloves Lining[ID=1925],>,0)
{
SELLITEM(Leather Gloves Lining[ID=1925];)
DELAY(500)
JMP(metka101)
}

ITEMCOUNT(Dirk Blade[ID=2009],>,0)
{
SELLITEM(Dirk Blade[ID=2009];)
DELAY(500)
JMP(metka101)
}

// Recipe: Greater Soulshot (D) Compressed Package (100%)[ID=5268]
ITEMCOUNT([ID=5268],>,0)
{
SELLITEM([ID=5268];)
DELAY(500)
JMP(metka101)
}

MSG(vse)
DELAY(500)
EXIT()

Обратили внимание как записана команда на рецепт сосок ?

Дело в том что если в названии предмета есть скобки , например (100%) то такое название в команде писать нельзя - произойдет сбой . Вполне можно написать только один ИД премета и все ;-)

Вот скрипт положить предметы в банк

Скрытый текст LABEL(metka201)

NPCDLG(Airy[ID=7522])
DELAY(2000)
DLGSEL(Deposit Item (Private Warehouse))
DELAY(2000)

ITEMCOUNT(Stem[ID=1864],>,0)
{
SAVEITEM(Stem[ID=1864],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Varnish[ID=1865],>,0)
{
SAVEITEM(Varnish[ID=1865],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Suede[ID=1866],>,0)
{
SAVEITEM(Suede[ID=1866],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Animal Skin[ID=1867],>,0)
{
SAVEITEM(Animal Skin[ID=1867],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Thread[ID=1868],>,0)
{
SAVEITEM(Thread[ID=1868],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Iron Ore[ID=1869],>,0)
{
SAVEITEM(Iron Ore[ID=1869],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Coal[ID=1870],>,0)
{
SAVEITEM(Coal[ID=1870],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Charcoal[ID=1871],>,0)
{
SAVEITEM(Charcoal[ID=1871],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Animal Bone[ID=1872],>,0)
{
SAVEITEM(Animal Bone[ID=1872],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Silver Nugget[ID=1873],>,0)
{
SAVEITEM(Silver Nugget[ID=1873],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Oriharukon Ore[ID=1874],>,0)
{
SAVEITEM(Oriharukon Ore[ID=1874],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Stone of Purity[ID=1875],>,0)
{
SAVEITEM(Stone of Purity[ID=1875],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Mithril Ore[ID=1876],>,0)
{
SAVEITEM(Mithril Ore[ID=1876],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Adamantite Nugget[ID=1877],>,0)
{
SAVEITEM(Adamantite Nugget[ID=1877],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Braided Hemp[ID=1878],>,0)
{
SAVEITEM(Braided Hemp[ID=1878],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Cokes[ID=1879],>,0)
{
SAVEITEM(Cokes[ID=1879],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Steel[ID=1880],>,0)
{
SAVEITEM(Steel[ID=1880],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Coarse Bone Powder[ID=1881],>,0)
{
SAVEITEM(Coarse Bone Powder[ID=1881],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Leather[ID=1882],>,0)
{
SAVEITEM(Leather[ID=1882],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Cord[ID=1884],>,0)
{
SAVEITEM(Cord[ID=1884],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(High Grade Suede[ID=1885],>,0)
{
SAVEITEM(High Grade Suede[ID=1885],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Compound Braid[ID=1889],>,0)
{
SAVEITEM(Compound Braid[ID=1889],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Recipe: Steel[ID=2137],>,0)
{
SAVEITEM(Recipe: Steel[ID=2137],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Recipe: Coarse Bone Powder[ID=2138],>,0)
{
SAVEITEM(Recipe: Coarse Bone Powder[ID=2138],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Recipe: Varnish of Purity[ID=2142],>,0)
{
SAVEITEM(Recipe: Varnish of Purity[ID=2142],;)
DELAY(2000)
JMP(metka201)
}

ITEMCOUNT(Recipe: Synthetic Cokes[ID=2143],>,0)
{
SAVEITEM(Recipe: Synthetic Cokes[ID=2143],;)
DELAY(2000)
JMP(metka201)
}

MSG(vse)
DELAY(500)
EXIT()


А вот скрипт на покупку 10ти штук демонфангов , кто играет за дврфов так знает зачем они покупаются в больших количествах ))))
Скрытый текст

NPCDLG(Stanford[ID=7085])
DELAY(2000)
DLGSEL(Buy Mystics Equipment )
DELAY(2000)
BUYITEM(Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;Demon Fangs[ID=321],1;)

[/SPOILER]

Сообщение отредактировал Knavt: 11 Январь 2009 - 13:25

Если помог - не ленимся и жмем в нижнем правом углу СПАСИБО
ICQ: 418389265


Как самому сделать скрипт 118
Как самому сделать скрипт 28
Как самому сделать скрипт 804
Как самому сделать скрипт 728
Как самому сделать скрипт 378
Как самому сделать скрипт 959
Как самому сделать скрипт 790
Как самому сделать скрипт 587
Как самому сделать скрипт 857
Как самому сделать скрипт 722
Как самому сделать скрипт 993
Как самому сделать скрипт 543
Как самому сделать скрипт 776
Как самому сделать скрипт 437
Как самому сделать скрипт 185
Поздравления для девушек в одноклассникахДержатели для занавесок своими рукамиКак пересушенную рыбу сделать мягкойПрически на каждый день волос в домашних условияхМаленький сувенир своими рукамиПоздравления с днями рождений бабушку и дедушкуКак сделать в симс 3 сумеркиКак вывести жировики с лица в домашних условиях заКак сделать чтобы сниться бывшемуЯпонский сад своим рукамиПраздник для мужа своими рукамиМузыкальные открытки от всей душиПоделки в детский сад новогоГорелка на газе своими рукамиКак в фермере сделать много денег

Читать далее:

  • Как хранят лук в домашних условиях
  • Поздравления с днем рождения тёте от племянника проза
  • Сшить зайца из тильду фото
  • Удлиненный румпель на лодочный мотор своими руками
  • Как в опен офис сделать картинку