Welcome to U.A.C. [O.S.A.]
login / register 
Status: Guest
Архивы форума | iddqd.ru
Wolf 3D
ПравилаПравила ПоискПоиск
18+
(G)ZDOOM - основы скриптинга Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
   Список разделов - Флуд и устаревшие темы - (G)ZDOOM - основы скриптингаОтветить
АвторСообщение
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №41 Отправлено: 22.12.07 00:49:13
Shadowman, рекомендую скачать последнюю версию ACS
Есть на Zdoom.org
1 2 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №42 Отправлено: 22.12.07 01:57:58
Nil, а все, разобрался :)
У меня ACS.cfg в билдере неправильную подсказку давал, я его отредактировал так, как надо и теперь скрипт работает... и меня не вводит в заблуждение :)
Furret
Так что хоть этот файл и хорош, но иногда и он может обмануть...
1 7 2
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №43 Отправлено: 25.12.07 17:06:14
Кстати, я, кажется, понял, зачем вы смотрели в блокнот... Чтобы узнать названия функций? тогда лучше нажать ctrl+пробел в редакторе. работает в DB и SlumpEd
1 2 1
Gucha
= Lance Corporal =
Next rank: - Master Corporal - after 17 points
183

Doom Rate: 1.78

Ссылка на пост №44 Отправлено: 30.12.07 11:23:47
Выложите скрипты для работы с текстом различные.
*Например простой вывод
*Вывод с заголовком другого цвета и размера
*Вывод побуквенно.
Но не просто скрипты, а функции где тока текст ввести и эту функцию можно было в других скриптах юзать.
В частности 2 последних штуки мне бы щас для одного небольшого вадика не помешали)
1
nprotect
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 97 points
1343

Doom Rate: 2.45

Ссылка на пост №45 Отправлено: 30.12.07 11:35:25
Gucha
посмотри в Zdoom Community Project 1, там много примеров
1 2 1
Memfis
= Colonel =
Next rank: - Commissar - after 137 points
4753

Doom Rate: 1.8

Posts quality: +701
Ссылка на пост №46 Отправлено: 30.12.07 12:00:23
В Simplicity есть отличный пример реализации побуквенного вывода названия уровня в начале игры.Насколько я помню, там именно функцией - Спорк написал её в acs-файл, потом просто инклудит в скрипт-эдиторе в каждом уровне и использует.
1 2 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №47 Отправлено: 10.01.08 19:01:37
Как можно активировать скрипт, заходя в нужный сектор, но находясь при этом на 2 "этаже" (3дполу)? Другими словами, запретить скрипту активироваться, если игрок на 1 этаже (на естественном полу сектора)?
1 7 2
Eternal
- Captain -
Next rank: = Captain = after 34 points
2306

Doom Rate: 3.7

Posts quality: +13
Ссылка на пост №48 Отправлено: 10.01.08 19:03:03
Shadowman
Я бы тупо поставил шмотку подбираемую на втором этаже и на неё повесил скрипт. Это вроде на поверхности лежит.
2 2 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №49 Отправлено: 10.01.08 19:10:21
Eternal
Хорошее решение, хоть и не универсальное. В данном случае думаю прокатит.
1 7 2
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №50 Отправлено: 10.01.08 22:37:20
Еще бы не помешал универсальный скрипт, который с определенными вероятностями выполняет некоторые действия. То есть сперва включается скрипт а дальше он уже вероятностно перебирает внутри себя то, что записал (с вероятностью Х делать одно, с вероятностью У другое и т.д.)
например - рандомно телепортировать вещь в одну из точек на карте.
1 7 2
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №51 Отправлено: 11.01.08 00:03:48
Shadowman, а что тебе мешает написать такую функцию функцию?
1 2 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №52 Отправлено: 11.01.08 00:08:38
Nil:
что тебе мешает написать такую функцию

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

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №53 Отправлено: 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 2 1
Shadowman
UAC General
Next rank: Unavailable after 0 points
8391

Doom Rate: 2.08

Posts quality: +1993
Ссылка на пост №54 Отправлено: 15.01.08 01:41:38
Nil
Спасибо, весьма полезная статья, но пока надо переварить ее и привыкнуть. Вопросы конечно появятся еще, не беспокойся :)
1 7 2
Reiko
- Master Corporal -
Next rank: = Master Corporal = after 3 points
237

Doom Rate: 1.73

Ссылка на пост №55 Отправлено: 18.02.08 21:44:52
Как сделать скрипт, чтобы каждый следующий уровень начинать с пистолетом (как в начале игры)
2
nprotect
- 2nd Lieutenant -
Next rank: = 2nd Lieutenant = after 97 points
1343

Doom Rate: 2.45

Ссылка на пост №56 Отправлено: 18.02.08 22:01:17
Reiko
можно через TakeInventory() все хапнуть (перебрать каждое оружие и каждый вид боеприпаса), в начале каждого уровня как open-скрипт, или тоже самое в FSGLOBAL
1 2 1
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №57 Отправлено: 18.02.08 22:12:49
ClearInventory() надежнее
Потом
GiveInventory("Pistol",1);
GiveInventory("Clip",30);
всё это в
Script # ENTER
1 2 1
Reiko
- Master Corporal -
Next rank: = Master Corporal = after 3 points
237

Doom Rate: 1.73

Ссылка на пост №58 Отправлено: 19.02.08 00:33:59
nprotect
Nil
Спасибо помогло)
2
Nil
= 2nd Lieutenant =
Next rank: - 1st Lieutenant - after 127 points
1513

Doom Rate: 2.31

Posts quality: +64
Ссылка на пост №59 Отправлено: 19.02.08 01:01:52
Reiko
я забыл :)
ещё надо бы
GiveInventory("Fist",1);
а то не по людски получается :)
1 2 1
Reiko
- Master Corporal -
Next rank: = Master Corporal = after 3 points
237

Doom Rate: 1.73

Ссылка на пост №60 Отправлено: 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
Страница 3 из 8Перейти наверх Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
   Список разделов - Флуд и устаревшие темы - (G)ZDOOM - основы скриптинга