Сайт Doom Power
 ПоискПоиск ВходВход
(G)ZDOOM - основы скриптинга Пред.  1, 2, 3, 4  След.
   Список разделов - Местечко Мапперов и Моддеров - (G)ZDOOM - основы скриптинга
АвторСообщение
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 20.12.07 23:00:57

Nil :
Просто повесте ACS_Execute в качестве экшена у монстра и он вызовется после смерти.

Не катит. Мне ж не нужно чтобы после смерти каждого демона вызывался какой-то скрипт. Это только для особых монстров годится, для боссов например.
1 5 2
nprotect
= Colonel =
Next rank: - Commissar - after 44 points
2546

Doom Rate: 1.48
Сообщение Отправлено: 21.12.07 08:54:13

Shadowman
да нормально же, это скрипт проверки просто будет, и не надо загружать проц и проверять каждую секунду Smile
1 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 21.12.07 14:21:24

Может, создать тему "Мастер класс скриптинга" и писать туда большие статьи со скриншотами и вадами-примерами? а прозьбы создать статью "по мотивам" в эту тему постить? Я действительно готов писать статьи Smile
1 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 21.12.07 14:32:15

Nil :
Может, создать тему "Мастер класс скриптинга"

Давай пока ограничимся этой темой про скрипты. Сюда пиши и статьи, и примеры Smile А плодить кучу тем по одним скриптам ни к чему, тем более понятие "мастер-класс" скриптинга - весьма относительное.
Для кого-то может скрипт подсчета отспавненных зверюг - тоже мастер-класс, а кому-то это раз плюнуть:)
Или ты хочешь привесить скрипты с библиотеками ACS? Вот библиотеки - это действительно Мастер-класс! Еще не приходилось с ними работать и я толком не понимаю, как это все там делается...
1 5 2
Furret
= Master Corporal =
Next rank: - Sergeant - after 25 points
365

Doom Rate: 2.19
Сообщение Отправлено: 21.12.07 14:55:42

Может быть кому полезно будет.

Если нужно найти процедуру, обладающую определённым свойством, то не обязательно лезть в Zdoom Wiki. Тем более не все содержащиеся там срипты может скомпилить Билдер. Пример: Scroll_Texture_Down.

Что предлагаю я? Можно открыть файл ASC.CFG в директории Билдера и пройтись по нему поиском. Дапустим нужно найти процедуру, меняющую текстуру на лайндэфе. Ищем "Texture", читая по-английски пытаемся понять, то ли это. Находим строчку:

SetLineTexture = "SetLineTexture(line, side, position, texture)";

Очевидно, что это и будет то, что нам надо. Такой скрипт Билдер точно примет и скомпилит.

Я всегда их так и ищу.
1 1 1
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 21.12.07 15:05:35

Furret, ну не на уровне процедур же Smile А на уровне целых задач, а то и методов. Ест идеи, может, скоро чего напишу
1 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 21.12.07 15:17:33

Furret
А еще проще скачать Doom Builder ACS Configuration - есть в Вике - распечатать этот файл и положить на стол рядом с компом. Если нужен какой-то скрипт - смотрим туда. Если непонятно, что он делает (или что означают его параметры) - тогда уже глядим в вики. Я например так и делаю Smile
Nil :
Ест идеи, может, скоро чего напишу

Ок, ждем статью. Только предварительно уведоми, о чем будешь писать Smile
1 5 2
Furret
= Master Corporal =
Next rank: - Sergeant - after 25 points
365

Doom Rate: 2.19
Сообщение Отправлено: 21.12.07 15:27:31

Shadowman :
А еще проще скачать Doom Builder ACS Configuration

Да и скачивать не надо. Это ТО ЖЕ САМОЕ, что и упомянутый мною ASC.CFG! (открыть Блокнотом)
Когда я маплю, он у меня всегда открыт.
1 1 1
nprotect
= Colonel =
Next rank: - Commissar - after 44 points
2546

Doom Rate: 1.48
Сообщение Отправлено: 21.12.07 16:42:48

Furret :
что и упомянутый мною ASC.CFG! (открыть Блокнотом)

твой расчудесный конфиг не дает ни описания параметров, ни даже самого описания функции. здум вики в этом плане гораздо более информативен, и если требуется не просто вспомнить синтаксис, а именно прочитать все про оператор, нужно лезть в вики. с этим SetLineTexture итак все понятно, а вот растолкуй-ка по "конфигу" такую функцию:
Ceiling_CrushRaiseAndStaySilA = "Ceiling_CrushRaiseAndStaySilA(tag, dspeed, uspeed, crush)";

боюсь, что без википедии тут не обойтись, вот для чего спрашивается вики делали, чтоб программерам не пришлось гадать на кофейной гуще и на конфигах
1 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 22.12.07 00:46:18

Кстати, насчет википедии. Не всегда она верно отражает действительность... или у меня билдер кривой, короче - вот описание скрипта Scroll_Floor как оно дано в вике:
http://zdoom.org/wiki/Scroll_Floor
А вот при попытке сделать такой скрипт, билдер выдает совсем другой набор параметров:

    Scroll_Floor(tag, scrollbits, method xmove, ymove)   

Причем между method и xmove нет запятой, хотя по идее должна быть. Далее, не ясно, что есть method - это type как в вике? или что-то иное? Попытка насильно вбивать 5 параметр успеха не приносит - ACS отказывается компилить такой скрипт. Как можно решить проблему?
1 5 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 22.12.07 00:49:13

Shadowman, рекомендую скачать последнюю версию ACS
Есть на Zdoom.org
1 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 22.12.07 01:57:58

Nil, а все, разобрался Smile
У меня ACS.cfg в билдере неправильную подсказку давал, я его отредактировал так, как надо и теперь скрипт работает... и меня не вводит в заблуждение Smile
Furret
Так что хоть этот файл и хорош, но иногда и он может обмануть...
1 5 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 25.12.07 17:06:14

Кстати, я, кажется, понял, зачем вы смотрели в блокнот... Чтобы узнать названия функций? тогда лучше нажать ctrl+пробел в редакторе. работает в DB и SlumpEd
1 1 1
Gucha
= Sergeant =
Next rank: - Master Sergeant - after 21 points
479

Doom Rate: 1.35
Сообщение Отправлено: 30.12.07 11:23:47

Выложите скрипты для работы с текстом различные.
*Например простой вывод
*Вывод с заголовком другого цвета и размера
*Вывод побуквенно.
Но не просто скрипты, а функции где тока текст ввести и эту функцию можно было в других скриптах юзать.
В частности 2 последних штуки мне бы щас для одного небольшого вадика не помешали)
1
nprotect
= Colonel =
Next rank: - Commissar - after 44 points
2546

Doom Rate: 1.48
Сообщение Отправлено: 30.12.07 11:35:25

Gucha
посмотри в Zdoom Community Project 1, там много примеров
1 2
Memfis
- Sergeant Major -
Next rank: = Sergeant Major = after 25 points
665

Doom Rate: 1.71
Сообщение Отправлено: 30.12.07 12:00:23

В Simplicity есть отличный пример реализации побуквенного вывода названия уровня в начале игры.Насколько я помню, там именно функцией - Спорк написал её в acs-файл, потом просто инклудит в скрипт-эдиторе в каждом уровне и использует.
1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 10.01.08 19:01:37

Как можно активировать скрипт, заходя в нужный сектор, но находясь при этом на 2 "этаже" (3дполу)? Другими словами, запретить скрипту активироваться, если игрок на 1 этаже (на естественном полу сектора)?
1 5 2
Eternal
= UAC Marshal =
Next rank: UAC General after 84 points
3366

Doom Rate: 1.93
Сообщение Отправлено: 10.01.08 19:03:03

Shadowman
Я бы тупо поставил шмотку подбираемую на втором этаже и на неё повесил скрипт. Это вроде на поверхности лежит.
1 2 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 10.01.08 19:10:21

Eternal
Хорошее решение, хоть и не универсальное. В данном случае думаю прокатит.
1 5 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 10.01.08 22:37:20

Еще бы не помешал универсальный скрипт, который с определенными вероятностями выполняет некоторые действия. То есть сперва включается скрипт а дальше он уже вероятностно перебирает внутри себя то, что записал (с вероятностью Х делать одно, с вероятностью У другое и т.д.)
например - рандомно телепортировать вещь в одну из точек на карте.
1 5 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 11.01.08 00:03:48

Shadowman, а что тебе мешает написать такую функцию функцию?
1 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 11.01.08 00:08:38

Nil :
что тебе мешает написать такую функцию

То что я не умею работать с функциями в ACS... Если ты знаешь, как это делается, может объяснишь в этой теме, с примерами. Ты ж вроде собирался статью по ACS тут, было бы весьма кстати...
1 5 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 15.01.08 01:21:55

Итак, немного информации о функциях!
1. Зачем функции нужны
Функции нужны, чтобы не писать один и тот-же код много раз.примером функии служит, например, функция Вывода строки. стандартный print убог, вым нужна альтернатива? вы можите сделать такую функцию!

2. Ограничения
Сразу скажу, что в функциях нельзя делать.
1)Ждать. недопустимы Delay, TagWait, ScriptWait и все прочие.
2)создавать бесконечные циклы вроде

while (true)
{
print(s:"Правда я самый умный?");
}

3 и главное. Как их создавать
Любая функция начинается с заголовка. он состоит из 4 частей :
1)слово function
2)тип возврашаемого результата. Лубая функция может вернуть какое-нибудь значение. например, результатом гипотетической функции sin(x) будет значение синуса угла x.
Всего существует 3 типа значений :
Числа - int
Строки - str
ничего - void. если функця ничего не возврашает, то надо использовать этот тип.
есть ещё тип bool, но он равносилен типу int, ничем от него не отличаясь. использовать его не следует, т.к. неизвестно, оставят ли его, ведь его полезность под сомнением.
3)Имя функции. Естейственно, без пробелов и киррилицы.
4)Аргументы. Аргументы функции перечисляются в круглыс скобках через запятую в таком порядке : Тип, имя. например :

function int SamplieFunction(int x,int y,str String)

Где :
int - тип возврашаемого значения. Эта функция возврашает значение с типом int
SamplieFunction - Имя функции.
(int x,int y,str String) - аргументы(3 шт).
Эту функцию следует вызывать вот так

...
str Teststring = "Пример";
int A = strlen(Teststring);
int B = 10;
int C = SamplieFunction(A,B,""); <---
...

После строки c "<---" управдение будет передано в функцию. Внутри функции переменная x будет иметь значение 6, y - 10, а String - "" (Пустая строка).
Изменение переменных x и y никак не отразится на переменных A,B.
Если функция возвращает значение, то в ней обязательно должа быть конструкция

return XXX

, где XXX - значение. может быть константой, например Return 2, или переменной, например "Return x+y"
Тип значения указывается в заголовке функции (2). Все ветки выполнения функции должны содержать return, например :

function int Test1 (int x,y)
{
if (x>0)
return y;
else
return y-x;
}

сравните:

function int Test2 (int x,y)
{
if (x>0)
return y;
else print("Ошибка!");
}

Какое значение должна вернуть функция, если x<=0? не указанно. это можно исправить, добавив return 0 в конец.
Выполнение функции заканчивается, как только выполнение дойдёт до return. После чего значение будет возвращено в вызвавший скрипт :

int a = test1(-10,20); //В а будет 30

Итак, когда-же следует использовать функции? Вот даю конкретный пример

function void TextOut(str text)
{
SetFont("rus1");
int holdtime = (strlen(text) / 10) + 1;
MsgDelay = holdtime *35;
HudMessage(s:text;HUDMSG_PLAIN,120,CR_UNTRANSLATED,0.5,0.3,holdtime<<16);
}

Довайте разбирать по-порядку. Название функции - 'TextOut'. Она не возврашает значение, поэтому return быть не обязан. у функции 1 параметр - строка.
Внутри функции устанавливается шрифт и вызывается встроенная функция HudMessage.
Зачем нужна эта функция? она - заменитель стандартного print в случаях, когда надо вывести текст на русском. Согласитесь, что каждый раз вставлять такую большую строку в код лень, а так TextOut и готово.
---Небольшое примечание---
MsgDelay - int переменная, объявленная глобально(т.е. вне скрипта или цикла). нужна для организации задержки текста(ведь Delay в функциях недоступен!) Вот как это работает :

TextOut("Текст");
Delay(MsgDelay);
TextOut("Другой текст");
Delay(MsgDelay);

Это, естейственно, надо вставлять в скрипт, в месте, где надо выводить текст.
---
http://timkanil1.narod.ru/Files/example1.rar
Вад - пример с функцией. В дальнейших статейках буду его усложнять.
---
Жду комменты и пожелания. Что бы вы хотели услышать?
1 1 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
4393

Doom Rate: 1.66
Сообщение Отправлено: 15.01.08 01:41:38

Nil
Спасибо, весьма полезная статья, но пока надо переварить ее и привыкнуть. Вопросы конечно появятся еще, не беспокойся Smile
1 5 2
Reiko
= Lance Corporal =
Next rank: - Master Corporal - after 26 points
264

Doom Rate: 1.65
Сообщение Отправлено: 18.02.08 21:44:52

Как сделать скрипт, чтобы каждый следующий уровень начинать с пистолетом (как в начале игры)
2
nprotect
= Colonel =
Next rank: - Commissar - after 44 points
2546

Doom Rate: 1.48
Сообщение Отправлено: 18.02.08 22:01:17

Reiko
можно через TakeInventory() все хапнуть (перебрать каждое оружие и каждый вид боеприпаса), в начале каждого уровня как open-скрипт, или тоже самое в FSGLOBAL
1 2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 18.02.08 22:12:49

ClearInventory() надежнее
Потом
GiveInventory("Pistol",1);
GiveInventory("Clip",30);
всё это в
Script # ENTER
1 1 1
Reiko
= Lance Corporal =
Next rank: - Master Corporal - after 26 points
264

Doom Rate: 1.65
Сообщение Отправлено: 19.02.08 00:33:59

nprotect
Nil
Спасибо помогло)
2
Nil
= 1st Lieutenant =
Next rank: - 2nd Lieutenant - after 38 points
1402

Doom Rate: 1.79
Сообщение Отправлено: 19.02.08 01:01:52

Reiko
я забыл Smile
ещё надо бы
GiveInventory("Fist",1);
а то не по людски получается Smile
1 1 1
Reiko
= Lance Corporal =
Next rank: - Master Corporal - after 26 points
264

Doom Rate: 1.65
Сообщение Отправлено: 21.04.08 16:34:59

Помогите сделать подобный скрипт:
Есть уровень, есть дверь за которой выход. При попытки открыть дверь появляется сообщение типа "Убейте всех монстров на уровне" и дверь остается закрытой. Только после того как игрок убивает монстров на уровне, он сможет открыть дверь на выход.
Я тут пытался такой скрипт состряпать, но он не работает(( какие в нем ошибки?

#include "zcommon.acs"
int monsters = 0;
script 1 (void)
{
  if(monsters == 1);
  {
    printbold(s:"Well done");
    Door_open(1,10);
  }
 if(monsters == 0);
  {
  ACS_Execute(const:3, 0, 0, 0, 0);
  }
}

script 3 (void)
{
  Print(s:"Kill all monsters on the level!");
  delay(100);
}
script 2 open
{
while(ThingCount(T_NONE, 1)) delay(20);
Printbold(s:"Go to the exit");
monsters = 1;
}
2
Страница 2 из 4Перейти наверх Пред.  1, 2, 3, 4  След.
   Список разделов - Местечко Мапперов и Моддеров - (G)ZDOOM - основы скриптинга