Автор | Сообщение |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 22.12.07 00:49:13 | | | Shadowman, рекомендую скачать последнюю версию ACS Есть на Zdoom.org | |
|
1 |
2 |
1 |
|
|
| |
Shadowman UAC General
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 22.12.07 01:57:58 | | | Nil, а все, разобрался У меня ACS.cfg в билдере неправильную подсказку давал, я его отредактировал так, как надо и теперь скрипт работает... и меня не вводит в заблуждение Furret Так что хоть этот файл и хорош, но иногда и он может обмануть... | |
|
1 |
7 |
2 |
|
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 25.12.07 17:06:14 | | | Кстати, я, кажется, понял, зачем вы смотрели в блокнот... Чтобы узнать названия функций? тогда лучше нажать ctrl+пробел в редакторе. работает в DB и SlumpEd | |
|
1 |
2 |
1 |
|
|
| |
Gucha = Lance Corporal =
| 183 |
Doom Rate: 1.78 Posts quality: +1 |
Отправлено: 30.12.07 11:23:47 | | | Выложите скрипты для работы с текстом различные. *Например простой вывод *Вывод с заголовком другого цвета и размера *Вывод побуквенно. Но не просто скрипты, а функции где тока текст ввести и эту функцию можно было в других скриптах юзать. В частности 2 последних штуки мне бы щас для одного небольшого вадика не помешали) | |
|
| |
nprotect - 2nd Lieutenant -
| 1343 |
Doom Rate: 2.45
|
Отправлено: 30.12.07 11:35:25 | | | Gucha посмотри в Zdoom Community Project 1, там много примеров | |
|
1 |
2 |
1 |
|
|
| |
Memfis = Colonel =
| 4753 |
Doom Rate: 1.8 Posts quality: +701 |
Отправлено: 30.12.07 12:00:23 | | | В Simplicity есть отличный пример реализации побуквенного вывода названия уровня в начале игры.Насколько я помню, там именно функцией - Спорк написал её в acs-файл, потом просто инклудит в скрипт-эдиторе в каждом уровне и использует. | |
|
1 |
2 |
1 |
|
|
| |
Shadowman UAC General
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 10.01.08 19:01:37 | | | Как можно активировать скрипт, заходя в нужный сектор, но находясь при этом на 2 "этаже" (3дполу)? Другими словами, запретить скрипту активироваться, если игрок на 1 этаже (на естественном полу сектора)? | |
|
1 |
7 |
2 |
|
|
| |
Eternal - Captain -
| 2306 |
Doom Rate: 3.7 Posts quality: +13 |
Отправлено: 10.01.08 19:03:03 | | | Shadowman Я бы тупо поставил шмотку подбираемую на втором этаже и на неё повесил скрипт. Это вроде на поверхности лежит. | |
|
2 |
2 |
2 |
|
|
| |
Shadowman UAC General
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 10.01.08 19:10:21 | | | Eternal Хорошее решение, хоть и не универсальное. В данном случае думаю прокатит. | |
|
1 |
7 |
2 |
|
|
| |
Shadowman UAC General
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 10.01.08 22:37:20 | | | Еще бы не помешал универсальный скрипт, который с определенными вероятностями выполняет некоторые действия. То есть сперва включается скрипт а дальше он уже вероятностно перебирает внутри себя то, что записал (с вероятностью Х делать одно, с вероятностью У другое и т.д.) например - рандомно телепортировать вещь в одну из точек на карте. | |
|
1 |
7 |
2 |
|
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 11.01.08 00:03:48 | | | Shadowman, а что тебе мешает написать такую функцию функцию? | |
|
1 |
2 |
1 |
|
|
| |
Shadowman UAC General
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 11.01.08 00:08:38 | | | Nil: | что тебе мешает написать такую функцию |
То что я не умею работать с функциями в ACS... Если ты знаешь, как это делается, может объяснишь в этой теме, с примерами. Ты ж вроде собирался статью по ACS тут, было бы весьма кстати... | |
|
1 |
7 |
2 |
|
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 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
| 8391 |
Doom Rate: 2.08 Posts quality: +1995 |
Отправлено: 15.01.08 01:41:38 | | | Nil Спасибо, весьма полезная статья, но пока надо переварить ее и привыкнуть. Вопросы конечно появятся еще, не беспокойся | |
|
1 |
7 |
2 |
|
|
| |
Reiko - Master Corporal -
| 237 |
Doom Rate: 1.73
|
Отправлено: 18.02.08 21:44:52 | | | Как сделать скрипт, чтобы каждый следующий уровень начинать с пистолетом (как в начале игры) | |
|
| |
nprotect - 2nd Lieutenant -
| 1343 |
Doom Rate: 2.45
|
Отправлено: 18.02.08 22:01:17 | | | Reiko можно через TakeInventory() все хапнуть (перебрать каждое оружие и каждый вид боеприпаса), в начале каждого уровня как open-скрипт, или тоже самое в FSGLOBAL | |
|
1 |
2 |
1 |
|
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 18.02.08 22:12:49 | | | ClearInventory() надежнее Потом GiveInventory("Pistol",1); GiveInventory("Clip",30); всё это в Script # ENTER | |
|
1 |
2 |
1 |
|
|
| |
Reiko - Master Corporal -
| 237 |
Doom Rate: 1.73
|
Отправлено: 19.02.08 00:33:59 | | | nprotect Nil Спасибо помогло) | |
|
| |
Nil = 2nd Lieutenant =
| 1513 |
Doom Rate: 2.31 Posts quality: +64 |
Отправлено: 19.02.08 01:01:52 | | | Reiko я забыл ещё надо бы GiveInventory("Fist",1); а то не по людски получается | |
|
1 |
2 |
1 |
|
|
| |
Reiko - Master Corporal -
| 237 |
Doom Rate: 1.73
|
Отправлено: 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;
}
| |
|
| |