• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 573
Последнее редактирование модератором:

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Кто подскажет для чего функция
Код:
func void player_victim_is_immortal()
{
 PrintScreen("Copy Protection Error",-1,-1,FONT_Screen,5);
};

Причем в скриптах из GMDK их нет, только в скрипах от акеллы.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
В Daedalus можно создавать массивы только для типов int float и string?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
А там есть другие типы?
 

cool_er

Участник форума
Регистрация
23 Мар 2015
Сообщения
118
Благодарности
42
Баллы
190
Да, я не об этом :) Просто интересно можно ли создать массив инстанций. Балуюсь с языком. Смотрю на что он способен :)
Я давно не занимаюсь готикой, но думаю что нет. Int, float, string - это типы данных, а instance - это скорее "определение"(не могу подобрать правильного термина) типа, вот например "int i = 0;" здесь тип - int, имя - "i" и значение - 0, но в игре используются так называемые "классы". Простым языком класс - это тип данных содержащий в себе один или больше других типов, то есть своего рода "контейнер", а instance - это вместо имени и значения, т.е. "instance x(C_NPC) { y=12; z=42; };", где "x" - это имя, а "C_NPC" определяет какому классу ты хочешь дать имя "x", а "y" и "z" - это типы которые содержатся в классе "C_NPC", поэтому "instance" - не совсем тип данных, а массивы можно только из типов данных создавать. Кстати классы можно создавать, но не знаю если можно делать из них массивы. Надеюсь достаточно ясно объяснил, ибо не особо я талантлив в области объяснений. :)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Я давно не занимаюсь готикой, но думаю что нет. Int, float, string - это типы данных, а instance - это скорее "определение"(не могу подобрать правильного термина) типа, вот например "int i = 0;" здесь тип - int, имя - "i" и значение - 0, но в игре используются так называемые "классы". Простым языком класс - это тип данных содержащий в себе один или больше других типов, то есть своего рода "контейнер", а instance - это вместо имени и значения, т.е. "instance x(C_NPC) { y=12; z=42; };", где "x" - это имя, а "C_NPC" определяет какому классу ты хочешь дать имя "x", а "y" и "z" - это типы которые содержатся в классе "C_NPC", поэтому "instance" - не совсем тип данных, а массивы можно только из типов данных создавать. Кстати классы можно создавать, но не знаю если можно делать из них массивы. Надеюсь достаточно ясно объяснил, ибо не особо я талантлив в области объяснений. :)
Спасибо. Но я знаю что такое классы :) Просто я сравниваю с JavaScript (Так как неплохо знаю этот язык) и там можно создавать массивы не только простых типов данных, но и объектов, других массивов и функций. В Daedalus нельзя создавать многомерные массивы, об этом написано в документации, но там не указано можно ли создавать массивы из производных класса.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Instance - это тот же инт 4х байтовый. Просто название другое, а так он ближе к указателю
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
А почему все так боятся расширений?)
 

cool_er

Участник форума
Регистрация
23 Мар 2015
Сообщения
118
Благодарности
42
Баллы
190
А почему все так боятся расширений?)
Могу предположить что это из-за указателей. В них ведь "int" заместо указателя. А тем кто работал только с языками без указателей это кажется страшным. :) Я когда плюсы изучал не сразу понял для чего эти ponter-ы, а сейчас ничего - пишу модифицирующий себя код через " void* " и " unsigned char* ".:)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
А тем кто работал только с языками без указателей это кажется страшным
Нет, это не страшно. Что такое указатели и что они указывают на область в памяти, это не сложно. Пока был в командировке из любопытства прочитал страниц 200 по языку С++ за авторством С.Прата. Просто хочу сначала изучить все азы и возможности Daedalus. Понять что можно сделать без расширений, а потом буду переходить и к тяжелой артиллерии. :)
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
А существует ли возможность использовать в Daedalus массивы с переменными значениями?

Такое объявление компилируется без ошибок, но как присвоить значения таким элементам массива?
Код:
var int myVarArray[4];

Все разобрался. Забыл что присваивать значения можно только внутри блока { }. Извините за даблпост. Забыл что последнее сообщение писал тоже я. Совместите пожалуйста.
 
Последнее редактирование:

cool_er

Участник форума
Регистрация
23 Мар 2015
Сообщения
118
Благодарности
42
Баллы
190
А существует ли возможность использовать в Daedalus массивы с переменными значениями?

Такое объявление компилируется без ошибок, но как присвоить значения таким элементам массива?
Код:
var int myVarArray[4];

Все разобрался. Забыл что присваивать значения можно только внутри блока { }. Извините за даблпост. Забыл что последнее сообщение писал тоже я. Совместите пожалуйста.
Ну дак "myVarArray[0] = 5" присваивает значение 5 первому элементу массива. Или я немного не понял что ты имел в виду?
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Ну дак "myVarArray[0] = 5" присваивает значение 5 первому элементу массива. Или я немного не понял что ты имел в виду?
Да, да я уже это понял, просто пытался присвоить значение переменной за пределами блока, вот у меня и выдавало ошибку.

Какой же все-таки Daedalus деревянный. Хочешь сделать казалось бы элементарную вещь, но язык не поддерживает элементарных конструкций. Цикл и тот нужно делать через if конструкции. В общем вчера, ради теста, попробовал написать функцию вставляющую рэндомно разные Item в разные FP. Жесть...

Хотел список FP в массив запихать, но чтобы получить значение элемента массива необходимо указывать константу, а не случайную величину ([13] - можно, а [Hlp_Random(13)] нельзя, несмотря на то что функция возвращает целое число). Ну это пол беды, FP можно одинаково назвать, только использовать разные числа в конце и для вставки использовать что-то типа:
Код:
Wld_InsertItem(ItFo_Beer,ConcatString("NW_FARM1_FIELD_0",IntToString(Hlp_Random(3))));
Wld_InsertItem(ItFo_Apple,ConcatStrings("NW_FARM1_FIELD_0",IntToString(Hlp_Random(3))));

Тут же выскакивает вторая проблема, необходимо отследить на какой FP уже производилась вставка, а на какой нет. Это что записывать значения всех выпавших значений рэндома и сравнивать с ними при вставке.

В общем нашел только такое решение. Хочу спросить у профессионалов, есть ли для такой задачи более элегантное решение без применения расширений: Ikarus или AST? Ну или может подскажете где можно это подглядеть :)
 
Последнее редактирование:

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Еще один вопрос. Команда...
Код:
Print(ItAr_BDT_H.name);               // Выводит имя item на экран
Print(NONE_100_Xardas.name[0]); // Ничего не выводит

Почему нельзя получить доступ к экземплярам NPC через точечную нотацию?
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Потому что нельзя, не могут скрипты так, хотя мы вроде делали чото по этой теме, что даже почти можно было, но пока не точно.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Потому что нельзя, не могут скрипты так, хотя мы вроде делали чото по этой теме, что даже почти можно было, но пока не точно.
Странно, я сейчас поэксперементировал. Если инстанция NPC начинается с NONE_100_XARDAS или NONE_ADDON_111_Quarhodron то имя не выводится. А если идентификатор инстанции начинается с PAL, MIL, BAU и других приставок гильдий, то имя выводится.

Код:
Print(Mil_331_Miliz.name); // Выводится
Print(NONE_ADDON_111_Quarhodron.name); // Не выводится.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
ну, если нпс нету в мире, то имя не будет выводится, например. Попробуй расставить вокруг себя их, и глянь
 
Сверху Снизу