Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Уроки по скриптованию L2walker

-

Статьи и описания по Lineage 2

- Статьи, квесты, карты и описания мира Lineage 2 в этом разделе

Ответ
 
Опции темы
Старый 04.11.2010, 15:53   #1
 Разведчик
Аватар для xTuMoHx
 
xTuMoHx вызывает надежду
Регистрация: 25.08.2010
Сообщений: 13
Популярность: -18
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для xTuMoHx с помощью ICQ Отправить сообщение для xTuMoHx с помощью Skype™
 
По умолчанию Уроки по скриптованию L2walker

УРОК 1!!!!!

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

УРОК 2!!!!!
УРОК 2!!!!!

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

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

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

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

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

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

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

SAY(hi all)

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

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

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

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

MSG(test end)

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

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

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

Вот в результате ваш первый скрипт получился такой-
Код:
//--------------------------------------- 
// 
// Мой первый скрипт 
// 
// написан **.**.2010 
// 
//--------------------------------------- 

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)
УРОК 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 - игнорируется !!! Поэтому скрипт на спуск под воду перед катакомбами надо писать спуск змейкой или по спирали , иначе скрипт посчитает что команда выполнена если совпадут только две первые координаты .

На мостах без перил перемещение надо тщательно посрединке и мелкими шажками писать иначе чар может спрыгнуть с моста )))
УРОК 4!!!!!
Диалоги в скриптах на примере скриптов на перемещение через ГК

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

Чтобы писать команды диалогов ингейм просто необходим ! Надо открыть меню 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
Код:
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)
УРОК 5!!!!!
Продолжаем изучать диалоги и пишем простенький скрипт на квест
Продолжаю предыдущую лекцию с командами диалогов . Вот что вам необходимо знать . Если вы хотите пользоваться скриптами , то вы должны уметь эти команды снимать ингеймом . Чужие скрипты у вас скорее всего не заработают ! Даже на том же офе содержимое диалогов с НПС - менялось с хроники на хронику . А уже про то что на всех фри серверах эти диалоги разные тут и говорить не надо )))))

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

Ну вот чтобы закрепить навык снятия иалогов ингеймом напишем скрипт на простенький квест 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,2445 80,-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%но работающий скрипт на квест . Вот изучите его . Есть еще куча других подобных квестиков в начальных деревнях , где не нужно бить мобов а надо только бегать и говорить . Так задание тем кто учится писать скриптики - попробуйте сами написать подобный квест .

УРОК 6!!!!!
Команды , проверки условий

В предыдущем уроке был скрипт на простенький квест . Это 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 дороже принимают - то не запускайте скрипт . Но вообще такое очень редко бывает но я сочёл нужным вас предупредить :-)

УРОК 7!!!!!
Предметы

Предметы и команды с предметами широко используется в скриптах . Команда использовать предмет - это USEITEM , вот как она пишется
Код:
UseItem(name[ID=x])
вот примеры применения такой команды -
Код:
USEITEM(Haste Potion[ID=734])   
DELAY(500)
или вот =))))
Код:
USEITEM(Scroll of Escape[ID=736])   
DELAY(32000)
Обратите внимание что после использования СоЕ надо задержку больше 30ти сек ставить ! Иначе ваш скрипт собьется когда после использования СоЕ вы не поставите задержку или задержка будет маленькая .

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

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

Расказываю как работает этот скрипт . В самом начале скрипта стоит проверка на вес . Дело в том что при разделке рыбы вес увеличивается и иногда может быть такой случай что наступает перегруз , так тогда скрипт выдаст сообщение 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?")
Разберитесь как работает скрипт . Вначале идет проверка на наличие кристала в инвентаре и если кристал есть то используется бинтик и идет задержка на время пока произойдет автотрейд ! Правда ж хитро придумано ? )))

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

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

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(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()
УРОК 8!!!!!
Предметы. Продажа, покупка ,банк.

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

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

Поэтому если вы напишите команду на покунку демонфангов так -
Код:
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;)
________________
יא, איר וועט קומען צו מאַכט!
  Ответить с цитированием
Старый 04.11.2010, 15:55   #2
 Разведчик
Аватар для xTuMoHx
 
xTuMoHx вызывает надежду
Регистрация: 25.08.2010
Сообщений: 13
Популярность: -18
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для xTuMoHx с помощью ICQ Отправить сообщение для xTuMoHx с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

УРОК 9!!!!!
Определение местонахождения чара . Скрипт на делевел

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

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

Вот в качестве примера мой скрипт для рифтов . В рифте есть прямоугольная зона отдыха куда возвращаютя чары после прохождения рита или после смерти в рифте . Смысл моего скрипта - постоянно проверяется чар в зоне отдыха или нет . Если чар ( пати лидер вместе с пати ) попал в зону отдыха то он там отдыхает какоето время , востанавливает ману , а потом снова отправляется в рифт .
вот скрипт
Код:
//------------------------- 
// 
// кач в рифте 
// 
//------------------------- 

SET(FIGHTSTOP) 
SET(DefPath,Clear) 

LABEL(metka010) 

MOVETO(-115180,-180095,-6781) 
MOVETO(-115322,-181519, -6781) 

NPCDLG(Rift Post Commander[ID=8492]) 
DELAY(2000) 
DLGSEL("I want to go to the inner space of the rift.") 
DELAY(2000) 

SET(RANGETYPE,DEFPOS,-114800,-179950,-6770,50000) 
SET(FIGHTSTART) 

LABEL(metka020) 

DELAY(2000) 

PosInRange(- 114800,-178700,-6770,600) 
{ 
JMP(metka030) 
} 

PosInRange(-114800,-179600,-6770,600) 
{ 
JMP(metka030) 
} 

PosInRange(-114800,-180500,- 6770,600) 
{ 
JMP(metka030) 
} 

PosInRange(-114800,-181400,-6770,600) 
{ 
JMP(metka030) 
} 

JMP(metka020) 

LABEL(metka030) 

SET(FIGH TSTOP) 

CharStatus(STAND,==,1) 
{ 
ChangeWaitType(0) 
DELAY(2000) 
} 

DELAY(300000) 

CharStatus(STAND,==,0) 
{ 
ChangeWaitType(1) 
DELAY(2000) 
} 

DELAY(60000) 

JMP(metka010) 

//-----------------
Второй и наверное главный метод - это в нужном городе( зоне) определяем все точки в которых чар появляется после использования СоЕ или после возвращения изза смерти . Таких точек в каждом городе где-то десяток-полтора десятка . Лично я их определяю когда с помощью скрипта на делевел делевелю чаров .

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

Вначале пишем тек сказать основную часть скрипта
Код:
//---------------------------------------  
//  
// делевел в Гиране  
//  
// последняя правка 17.03.2008  
//  
//----------------------------------------  

CHARSTATUS(CHP,<=,0)  
{  
GOHOME()  
DELAY(10000)  
}  

LABEL(delevel_metka005)  

CHARSTATUS(LV,< =,40)  
{  
SAY(Delevel END Stopsript)  
DELAY(1000)  
EXIT()  
}  

CALL(mesto_giran)  

CALL(ataka_nps_giran)  

JMP(delevel_metka005)
Небольшие обьяснения как это все работает .

Вначале скрипта стоит проверка жив ли чар . Если он мертвый то происходит возврат в город с помощью команды GOHOME() .

Затем идет проверка уровня чара . Если уровень 40 или меньше , то скрипт прекращает работу . Если же уровень больше 40 то вначале выполняется подпрограмма определения места и переход на начальную точку - CALL(mesto_giran) , затем выполняется подпрограмма CALL(ataka_nps_giran) в которой чар бежит к гварду , бьет его и естественно умирает , теряя немного экспы при этом .

Вот подпрограмка атаки гварда
Код:
//-----------------------------------------  
//  
// подпрограмка атаки НПС  
// бежим к воротам и бьем гварда  
//  
//----------------------------------------  

LABEL(ataka_nps_giran)  

MOVETO(83556,147893,-3431)  
MOVETO(83907,147319,-3431)  
MOVETO(83901,1 46891,-3431)  
MOVETO(83909,141340,-3563)  

LABEL(ataka_nps_giran_metka005)  

NPCSEL(Belton[ID=7125])  
FORCEATTACK(Belton)  
DELAY(3000)  

CHARSTATUS(CHP,<=,0)  
{  
GOHOME()  
DELAY(10000)  
RETURN()  
}  

JMP(ataka_nps_giran_metka005)  

/-----------------------------------------
Ну здесь мне кажется все понятно , обьяснять нечего .

Теперь сама подпрограмка определения места чара .

Вначале она очень короткая
Код:
// и переход на начальную точку  
// (83378,147999,-3400)  
//  
//-------------------------------------  

LABEL(mesto_giran)  

CHARSTATUS(CHP,<=,0)  
{  
SET(FIGHTSTOP)  
GOHOME()  
DELAY(10000)  
}  

LABEL(m esto_giran_metka010)  

CharStatus(STAND,==,0)  
{  
ChangeWaitType(1)  
DELAY(3000)  
JMP(mesto_giran_metka010)  
}  

PosInRange(83378,147999,-3400,200)  
{  
JMP(mesto_giran_metka005)  
}  

SAY( nova to4ka !!! )  
DELAY(1000)  
EXIT()  

LABEL(mesto_giran_metka005)  

RETURN()
Собираю основную часть вместе с подпрограмками в один скрипт и запускаю . После смерти на гварде чар возвращается в город командой GOHOME() . Если точки на которую чар вернулся после смерти нету в скрипте то будет сообщение nova to4ka !!! и скрипт выключится . Добавляю эту точку в скрипт и запускаю скрипт снова . И потом опять все повторяется . Обычно чтобы определить так точки уходит гдето полчаса час .

Вот скрипт на делевел в Гиране где определены уже все точки возврата .
Код:
//-------------------------- 
// 
// делевел в Гиране 
// 
//-------------------------- 

CHARSTATUS(CHP,<=,0) 
{ 
GOHOME() 
DELAY(10000) 
} 

LABEL(delevel_metka005) 

CHARSTATUS(LV,<=,4) 
{ 
SAY (Delevel END Stopsript) 
DELAY(1000) 
EXIT() 
} 

CALL(mesto_giran) 

CALL(ataka_nps_giran) 

JMP(delevel_metka005) 

//-------------------------------------- 
// 
// подпрограмка определения места чара 
// и переход на начальную точку 
// (83378,147999,-3400) 
// 
// последняя правка 17.03.2008 
// 
//------------------------------------- 

LABEL(mesto_giran) 

CHARSTATUS(CHP,<=,0) 
{ 
SET(FIGHTSTOP) 
GOHOME() 
DELAY(10000) 
} 

LABEL(m esto_giran_metka010) 

CharStatus(STAND,==,0) 
{ 
ChangeWaitType(1) 
DELAY(3000) 
JMP(mesto_giran_metka010) 
} 

PosInRange(83378,147999,-3400,200) 
{ 
JMP(mesto_giran_metka005) 
} 

PosInRange(82480,149087,-3464,200) 
{ 
MOVETO(83274,148613,-34 31) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(82272,147801,-3464,200) 
{ 
MOVETO(83020,148018,-3495) 
MOVETO(8 3378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(83426,148835,-3400,200) 
{ 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka 005) 
} 

PosInRange(81440,149119,-3464,200) 
{ 
MOVETO(83274,148613,-3431) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

Po sInRange(82496,148095,-3464,200) 
{ 
MOVETO(83020,148018,-3495) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(8347 3,149223,-3400,200) 
{ 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(81562,147782,-3464,200) 
{ 
MOVETO(83020,1480 18,-3495) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(83415,148235,-3400,200) 
{ 
MOVETO(83378,147999,-3400) 
JM P(mesto_giran_metka005) 
} 

PosInRange(82292,149450,-3464,200) 
{ 
MOVETO(83274,148613,-3431) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran _metka005) 
} 

PosInRange(81062,148144,-3464,200) 
{ 
MOVETO(83020,148018,-3495) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(81376,148095,-3464,200) 
{ 
MOVETO(83020,148018,-3495) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRang e(83409,148578,-3400,200) 
{ 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(81033,148883,-3464,200) 
{ 
MOVETO(8205 1,149045,-3493) 
MOVETO(83274,148613,-3431) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

PosInRange(81637,149427,-3464,200) 
{ 
MOVETO(83274,148613,-3431) 
MOVETO(83378,147999,-3400) 
JMP(mesto_giran_metka005) 
} 

SAY( nova to4ka !!! ) 
DELAY(1000) 
EXIT() 

LABEL(mesto_giran_metka005) 

RETURN() 

//----------------------------------------- 
// 
// подпрограмка атаки НПС 
// бежим к воротам и бьем гварда 
// 
//---------------------------------------- 

LABEL(ataka_nps_giran) 

MOVETO(83556,147893,-3431) 
MOVETO(83907,147319,-3431) 
MOVETO(83901,1 46891,-3431) 
MOVETO(83909,141340,-3563) 

LABEL(ataka_nps_giran_metka005) 

NPCSEL(Belton[ID=7125]) 
FORCEATTACK(Belton) 
DELAY(3000) 

CHARSTATUS(CHP,<=,0) 
{ 
GOHOME() 
DELAY(10000) 
RETURN() 
} 

JMP(ataka_nps_giran_metka005)
Полученную подпрограмку CALL(mesto_giran) я уже использукю в других скриптах , где мне надо определять координаты чара после его возврата в город Гиран.
Код:

УРОК 10!!!!!
Команды боя

Самыми основными командами тут есть команды SET(FIGHTSTART) - эта команда начинает бой и SET(FIGHTSTOP) - эта команда остатнавливает бой .

Большинство тех кто начинал писать себе скрипты так начинали с простейших скриптов на кач типа такого
Код:
//-----------------------------------  
//  
// пример скрипта на кач  
//  
//------------------------------------  

MOVETO(-82515,244817,-3752)  
MOVETO(-82043,247735,-3684)  
MOVETO(-82719,249870,-3691)  
MOVETO(-83551 ,252110,-3719)  

SET(FIGHTSTART)
ут чар с начальной точки перемещается в зону кача а затем включается бой командой SET(FIGHTSTART) . В опциях валкера/ингейма уже выставлены параметры поля боя и прочего , смысл скрипта - добежать до места кача и включить бой .

Я сам давно когда-то себе такие скриптики писал ))))

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

Тот скрипт что вверху расчитан на то , что у вас уже сохранены опции с настройками в т.ч. и бой настроен . Можно и так делать , а можно опции хотя бы поля боя из скрипта задавать . Для этого есть много разных команд . Лично я рекомендую в первую очередь пользоваться такой на мой взгляд самой удобной командой - SET(RANGETYPE,DEFPOS,x,y,z,r) . Эта команда задает поле боя с центром в точке x,y,z и радиусом поля боя r .

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

Так для примера я добавлю все это в скрипт . Вот проверка жив ли чар или умер .
Код:
CHARSTATUS(CHP,<=,0)  
{  
SET(FIGHTSTOP)  
GOHOME()  
DELAY(10000)  
EXIT()  
}
если чар мертвый , то тогда идет выполнения команд что в фигурных скобках - чар вернется в деревню командой на возрождение GOHOME() а затем скрипт выключится

А проверка на наличие сосок будет такая
Код:
ITEMCOUNT(Soulshot: No Grade[ID=1835],<,14)  
{  
SET(FIGHTSTOP)  
USEITEM(Scroll of Escape[ID=736])  
DELAY(32000)  
EXIT()  
}
Если сосок мало , то бой останавливается а чар использует СоЕ и скрипт выключается

Вот уже что получилось
Код:
//-----------------------------------  
//  
// пример скрипта на кач  
//  
//------------------------------------  

MOVETO(-82515,244817,-3752)  
MOVETO(-82043,247735,-3684)  
MOVETO(-82719,249870,-3691)  
MOVETO(-83551 ,252110,-3719)  

SET(RANGETYPE,DEFPOS,-83551,252110,-3719,2500)  

SET(FIGHTSTART)  

LABEL(kombat)  

CHARSTATUS(CHP,<=,0)  
{  
SET(FIGHTST OP)  
GOHOME()  
DELAY(10000)  
EXIT()  
}  

ITEMCOUNT(Soulshot: No Grade[ID=1835],<,14)  
{  
SET(FIGHTSTOP)  
USEITEM(Scroll of Escape[ID=736])  
DELAY(32000)  
EXIT()  
}  

DELAY(3000)  
JMP(kombat)
Этот скрипт работает как предыдущий , но уже есть отличия . Вначале чар перемещается на место кача и включается бой а вот затем скрипт зацикливается - идет раз в 3и секунды проверка жив ли чар и есть ли соски и если проверки срабатываюбт то чар возвращается с места кача в деревню .

Конечно этот скрипт на кач - не идеал , но вот с таких скриптов почти все начинают . Да , тут много чего нет что можно делать скриптиками . Можно сделать скриптом покупку припасов перед качем , разгрузку дропа после возвращения и еще много чего . В следующем уроке я выложу такой скрипт , но вот пока рекомендую потренироваться на таких простеньких скриптах на кач :-)

УРОК 11!!!!!
1. Основные положения

1.1 Старайтесь заранее продумать скрипт во всех аспектах

а. Подпрограмма на закупку нужных товаров (поты, сое, снятие деб. смерти и т.п.) а также, например, забег до ВХ и забирание сосок.

б. Когда пишите скрипт, страйтесь финальные диалоги сразу не жать, а проверить предыдущие, сохранив их в отдельный скрипт.

в. Если после тп/смерти можете оказать в разных городах, используйте скрипт проверки местонахождения (как пример см. пункт 3)

г. Если во время скрипта нужно много раз что-то повторять,
то используйте одну подпрограмму баффа/закупки и т.п. и скрипт для определения этапа (см. пункт 3)

д. О диалогах:
Все диалоги делайте на одной строчке.
если после записи будет такая конструкция:
Код:
DLGSEL(блабла 
блублу 
)ТО используем DLGSEL(блабла) или DLGSEL(блабла ), надо тестить.
если после записи будет такая конструкция:
Код:
DLGSEL( 
блабла 
блублу 
)ТО используем DLGSEL() или DLGSEL( ), надо тестить
. Символы \n во внимание не принимать.

е. Все аспекты учесть невозможно Результат положительный у 95% запусков ? Значит скрипт удался!

2. Об основных различиях/особнностях l2walker и ГБ.

а. Валкер не автоатакует мобов, напавших во время бега (см. скрипт из п.3. )

б. ГБ атакует напавших мобов и ставит скрипт на паузу!!!
Т.е. если надо быстро пробежать через комнату с агро, то с ГБ это будет проблематично.
Как только вы выключили режим атаки, то любое агро поставит скрипт на паузу и след. строчка не иполнится, пока бот не убьёт мобов.
update:
чтобы ГБ не атаковал во время бега, следует написать Set(BeatBackClose),
чтобы обратно включилась авто-атака Set(BeatBackOpen)

в. Если ГБ умирает во время бега, то он исполняет только след строчку, иногда
Например: бот бежал по координатам (x,y,z), на него напали мобы и убили, след строчкой идут координаты (x1,y1,z1) а след проверка на смерть.
Так вот бот скажет что (x1,y1,z1) не доступно и скрипт повиснет, или не скажет и повиснет

д. Валкер лучше понимает диалоги, т.е. что пройдёт на ГБ, то пройдёт и на валкере, и некоторое что пройдёт на валкере не пройдёт на гб.

e.У ГБ гораздо больше команд скрипта (см. файл Script En.txt внутри папки с ГБ).

ж.Для продолжения скрипта после команды pause() в валкере нажать continue
в гб нажать nextline > resume.

3. Полезные подпрограммы.
Только для тех, кто уже умеет читать скрипты валкера, на вопросы по этому поводу не отвечаю
Если помог, ставь +
________________
יא, איר וועט קומען צו מאַכט!
  Ответить с цитированием
Старый 04.11.2010, 16:12   #3
Заблокирован
 Рыцарь
Аватар для Catscool
 
Catscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компании
Регистрация: 10.08.2010
Сообщений: 347
Популярность: 922
Золото Zhyk.Ru: 2
Сказал(а) спасибо: 500
Поблагодарили 333 раз(а) в 196 сообщениях
Отправить сообщение для Catscool с помощью ICQ Отправить сообщение для Catscool с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

Много текста, мало нужной информации. "0" за оформление.
Ужас одним словом.
  Ответить с цитированием
Старый 04.11.2010, 17:12   #4
 Разведчик
Аватар для xTuMoHx
 
xTuMoHx вызывает надежду
Регистрация: 25.08.2010
Сообщений: 13
Популярность: -18
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для xTuMoHx с помощью ICQ Отправить сообщение для xTuMoHx с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

напиши лучше я посмотрю на тебя
________________
יא, איר וועט קומען צו מאַכט!
  Ответить с цитированием
Старый 04.11.2010, 17:45   #5
Заблокирован
 Рыцарь
Аватар для Catscool
 
Catscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компании
Регистрация: 10.08.2010
Сообщений: 347
Популярность: 922
Золото Zhyk.Ru: 2
Сказал(а) спасибо: 500
Поблагодарили 333 раз(а) в 196 сообщениях
Отправить сообщение для Catscool с помощью ICQ Отправить сообщение для Catscool с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

Хочешь сказать, что это ты писал?
© не учили указывать?
  Ответить с цитированием
Старый 04.11.2010, 17:47   #6
 Сержант
Аватар для jogr
 
jogr скоро будет известенjogr скоро будет известенjogr скоро будет известенjogr скоро будет известен
Регистрация: 30.06.2010
Сообщений: 143
Популярность: 334
Золото Zhyk.Ru: 2
Сказал(а) спасибо: 73
Поблагодарили 71 раз(а) в 51 сообщениях
Отправить сообщение для jogr с помощью ICQ Отправить сообщение для jogr с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

автор не позоря , ты же его даже не писал , а тупо скопипастил! [Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Помог? Тыкай спасибо
<3
  Ответить с цитированием
Старый 04.11.2010, 23:33   #7
 Разведчик
Аватар для xTuMoHx
 
xTuMoHx вызывает надежду
Регистрация: 25.08.2010
Сообщений: 13
Популярность: -18
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для xTuMoHx с помощью ICQ Отправить сообщение для xTuMoHx с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

какой это нахрен источник там токо 2 урока
________________
יא, איר וועט קומען צו מאַכט!
  Ответить с цитированием
Старый 05.11.2010, 08:26   #8
Заблокирован
 Рыцарь
Аватар для Catscool
 
Catscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компанииCatscool душа компании
Регистрация: 10.08.2010
Сообщений: 347
Популярность: 922
Золото Zhyk.Ru: 2
Сказал(а) спасибо: 500
Поблагодарили 333 раз(а) в 196 сообщениях
Отправить сообщение для Catscool с помощью ICQ Отправить сообщение для Catscool с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

Цитата:
Сообщение от xTuMoHxПосмотреть сообщение
какой это нахрен источник там токо 2 урока

Когда копируешь чью то тему, обязательно © указывать надо.
  Ответить с цитированием
Старый 05.11.2010, 08:43   #9
Заблокирован
 Разведчик
Аватар для lDollarl
 
lDollarl на правильном пути
Регистрация: 05.03.2010
Сообщений: 36
Популярность: 64
Сказал(а) спасибо: 60
Поблагодарили 27 раз(а) в 15 сообщениях
Отправить сообщение для lDollarl с помощью Skype™
 
По умолчанию Re: Уроки по скриптованию L2walker

Цитата:
Сообщение от xTuMoHxПосмотреть сообщение
нахрен

А вот Ругаться не Хорошо..
И ты хотя бы Фломастером БуквЫ
раскрась!
  Ответить с цитированием
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Видео уроки C++ builder zloy_4el1 С/С++ 2 28.11.2010 18:09
[Помогите!] Баги карты Троли и эльфы. qpatypuk Общение и обсуждение Warcraft 3 3 01.09.2010 17:08
Видео Уроки Delphi wagan Pascal/Delphi 2 26.04.2010 08:34

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 03:41.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net