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

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

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

MaGoth

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

Вложения

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
а есть подобная функция позволяющая получить ссылку на предмет в рюкзаке героя?
А это не оно?

Daedalus:
// получить ссылку на предмет, который имеет НПС npc с номером instanceItem.
func C_ITEM Npc_GetInvItem(var C_NPC npc, var int instanceItem);
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
не подойдёт. там название в string записано.
Пост автоматически объединён:

  • string OwnerStr - имя инстанции хозяина объекта
  • string OwnerGuildStr - имя гильдии объекта
  • string UseWithItem - имя инстанции объекта, который необходим для взаимодействия
  • string KeyInstance - имя инстанции ключа для данного объекта
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.078
Благодарности
1.897
Баллы
290
не подойдёт. там название в string записано.
В смысле? Не понятно, что не устраивает.
Daedalus:
// Возвращает ID парсера по его имени parName
// (см. теги и наименования парсеров/DAT файлов)
func int Par_GetParserID(var string parName);

// Возвращает ID символа symName из парсера parId
func int Par_GetSymbolID(var int parId, var string symName);
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
// Возвращает ID символа symName из парсера parId

так?

Код:
var int InstanceID;
InstanceID = Par_GetSymbolID(Par_GetParserID("Game"), MOBINTERDATA.UseWithItem);
if (Npc_HasItems(hero,InstanceID ) > 0)
{
    Npc_GetInvItem(hero,InstanceID);
    Hlp_PrintConsole(item.name);
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
Последнее редактирование:

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.078
Благодарности
1.897
Баллы
290
необязательно. он в item записывается
Не нравятся мне использование таких "фич", ну да ладно...

Хотя, похоже ElderGamer неправильную сигнатуру дал. Функция возвращает 1 или 0, а сам предмет в item записывает.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
Функция возвращает 1 или 0
так ей ещё и проверку можно делать?
Код:
if ( Npc_GetInvItem(hero,InstanceID) == 1)
{
// у героя есть предмет
}
else
{
//  у героя нет предмета
};
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Хотя, похоже @ElderGamer неправильную сигнатуру дал. Функция возвращает 1 или 0, а сам предмет в item записывает.
Описание взято из справки Соурсера. Получается, эта функция типа int, а не C_ITEM. Кажется, у меня были проблемы при попытке использовать эту функцию. Наверное, пытался присвоить значение функции переменной класса C_ITEM, а Соурсер на это ругался.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
В мод-фиксе есть функция, которая считает количество минут, прошедших с начала игры. С её помощью можно посчитать, истёк ли промежуток времени продолжительностью в несколько внутриигровых минут.
 

MW 7


Модостроитель
Регистрация
26 Мар 2004
Сообщения
1.992
Благодарности
967
Баллы
275
Код:
//////////// Функции определение времени от камрада Nodrog /////////////
func int Wld_GetMinute(var int Hour,var int from,var int till)
{
    if(from >= 60)
    {
        return -1;
    };
    if(Wld_IsTime(Hour,from+1,Hour,till))
    {
        return Wld_GetMinute(Hour,from+1,till);
    }
    else
    {
        return from;          
    };
    return from;
};

func int Wld_GetHour(var int from,var int till)
{
    if(from >= 24)
    {
        return -1;
    };
    if(Wld_IsTime(from+1,0,till,0))
    {
        return Wld_GetHour(from+1,till);
    }
    else
    {
        return from;
    };
    return from;
};

func int Wld_GetTime()
{
    var int h;
    //h = Wld_GetHour(0,23);
    //h = h*60 + Wld_GetMinute(h,0,59);
    //h = Wld_GetHour(0,24);
    //h = h*60 + Wld_GetMinute(h,0,60);
    h = Wld_GetHour(0,25);
    h = h*60 + Wld_GetMinute(h,0,61);
    h = h + Wld_GetDay() * 1440;
    return h;
};
//////////// конец функций определения времени ////////////

думаю как то там .
Код:
// пропустить один час
    var int t;
    t= Wld_GetHour(0,25) + 1; // плюс один час

    if (!Wld_IsTime(0,0,t,0))
    {
        t = t + 24;
    };
    Wld_SetTime(t,0);
условие только надо переписать :)
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
думаю как то так
Время 22:50. После выполнения функции станет 23:00. Пройдёт всего 10 минут. Впрочем, возможно, это не важно для того места, где это планируется использовать.
 

neromont


Модостроитель
Регистрация
12 Мар 2011
Сообщения
675
Благодарности
662
Баллы
245
Вопрос следующего характера.

Приделал визуальный эффект к посоху, но он запускается, только если персонаж достанет его. При старте игры эффект не проигрывается. Я думаю тут загвоздка где-то в движке. Хотя может я и не прав.

Частично решается добавлением пары строчек кода в функцию B_RefreshAtInsert(), а именно

AI_DrawWeapon ( self );
AI_RemoveWeapon ( self );

Но работает только после сохранения/загрузки.

1677535064976.png
 
Последнее редактирование:
Сверху Снизу