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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
    Скрыть объявление
  2. Форум аддона "Возвращение" 2.0:
    — Обсудить игру, почитать о прохождениях и/или разрешить свои вопросы по игре вы можете в одной из тем одноименного форума. Посетить...
    — Прочитать историю изменения и/или скачать последнюю версию аддона "Возвращение", вы можете на страницах наших ресурсов. Скачать...
    Скрыть объявление

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

Тема в разделе "Модостроение", создана пользователем Xentar, 25 фев 2008.

Модераторы: Marvіn, MEG@VOLT
  1. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    какая разница
     
  2. Inomoz

    Inomoz Участник форума

    Регистрация:
    20 авг 2017
    Сообщения:
    6
    Благодарности:
    0
    Баллы:
    10
    Пол:
    Мужской
    Здрасте. Есть небольшая проблема/вопрос.

    Нужно вставлять неписей или предметы, как это делается в марвин режиме (insert OBJECT_NAME) но по нажатию хоткея (с хоткеями я разобрался, благо там все просто).
    Wld_InsertNpc и производные не подходят (или подходят?), т.к. я не понял как нужно вставлять/спавнить рядом с персонажем или куда смотрит камера... Есть варианты? Заранее спасибо

    Вопрос с вставкой нпц решился, предметы пока не проверял

    Код:
        if (KeyClick(KEY_F2))
        {
            Wld_InsertNpc (Snapper, "PC_HERO");
        };
    
     
    Последнее редактирование модератором: 20 авг 2017
  3. Kreol Nekr

    Kreol Nekr Участник форума

    Регистрация:
    21 ноя 2014
    Сообщения:
    214
    Благодарности:
    99
    Баллы:
    90
    Пол:
    Мужской
    У вас в игре расширители используются?
     
  4. Inomoz

    Inomoz Участник форума

    Регистрация:
    20 авг 2017
    Сообщения:
    6
    Благодарности:
    0
    Баллы:
    10
    Пол:
    Мужской
    Расширитель - это dll плагин (AST)?

    Нет но есть планы. Хотел бы узнать можно ли вызывать скрипт или функцию из скрипта через плагин?
    Хочу сделать такое: бинд клавиши в плагине, по нажатию клавишы выполняется нужный скрипт.

    Я проверил вставку предметов, с позицией PC_HERO - глючит, предмет вставляется внутри персонажа и он не может двигаться.

    В идеале я бы хотел вызывать в плагине (dll) функции скриптов, такие как Wld_InsertNpс (потому что я так и не осилил сделать это при помощи функций и классов AST).

    if (KeyClick(KEY_F2)) - это вроде как работает при подключённом AST.dll (да я использую)
     
    Последнее редактирование: 20 авг 2017
  5. Kreol Nekr

    Kreol Nekr Участник форума

    Регистрация:
    21 ноя 2014
    Сообщения:
    214
    Благодарности:
    99
    Баллы:
    90
    Пол:
    Мужской
    Не знаю, я не пользуюсь расширителями. Мне и так нормально. Просто удивительно, как вы смогли без расширителя привязать проверку на нажатие кнопки...
     
  6. Inomoz

    Inomoz Участник форума

    Регистрация:
    20 авг 2017
    Сообщения:
    6
    Благодарности:
    0
    Баллы:
    10
    Пол:
    Мужской
    ну по факту я использую библиотеку AST.dll и скомпилированые скрипты (GothisSourcer 3.15 +), просто видимо не так понял.
     
  7. Kreol Nekr

    Kreol Nekr Участник форума

    Регистрация:
    21 ноя 2014
    Сообщения:
    214
    Благодарности:
    99
    Баллы:
    90
    Пол:
    Мужской
    У меня была она, но почему то мод вылетал в переходных триггерах. Я делал с помощью АСТ рендер предметов. Точнее, мне делали)) Но по скольку готика не работала как надо, я пока что отказался от расширителя...
     
  8. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    call parser func (открыть)

    [скрипт]
    Код:
    func void CallBack (var string message)
    {
        Hlp_MessageBox (message, "My CallBack func");
    };
    [плагин]
    Код:
    void Loop ()
    {
        if (KeyClick(KEY_F2))
        {
            int sym_index = parser->GetIndex("CallBack");
            if (sym_index != -1)
                parser->CallFunc (sym_index, "Called from dll");
        }
    }

    spawn npc at pos (открыть)

    Код:
    // index - id of instance, posPoint - start pos of range, 0.0f - delay
    oCNpc* npc = ogame->GetSpawnManager()->SpawnNpc(index, posPoint, 0.0f);
     
    Последнее редактирование: 20 авг 2017
    Inomoz поблагодарил.
  9. Inomoz

    Inomoz Участник форума

    Регистрация:
    20 авг 2017
    Сообщения:
    6
    Благодарности:
    0
    Баллы:
    10
    Пол:
    Мужской
    Спасибо огромное за примеры, моды и C/C++ для меня темный лес, на первый взгляд все понятно (коллбек и спавн менеджер).
    index - я так понял id нпц
    posPoint - видел в примерах AST как определять позицию камеры (или типо того). Думаю разберусь.
     
  10. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    а до плагинов особых знаний сишки и не надо, весь гемор зарыт в ядре. пользовательский интерфейс не сложнее скрипта, если не проще.

    любая инстанция в скриптах по сути и есть идентификатор, по которому движок цепляет инфу в конструктор средствами парсера.

    zCVob и любой его наследник имеет матрицу из которой выковыривает положение объекта в мире. соответственно он же валиден и для неписей, предметов, воба камеры, пфх и много чего еще, и позиция определяется структурой из 3х float координат XYZ - zVEC3 (zPOINT3, zVec3D).
     
    Грек73 поблагодарил.
  11. Kreol Nekr

    Kreol Nekr Участник форума

    Регистрация:
    21 ноя 2014
    Сообщения:
    214
    Благодарности:
    99
    Баллы:
    90
    Пол:
    Мужской
    Для меня это как если бы я читал каменную табличку из Яркендара в реальности)) Все эти термины мне не ведомы, хотя я и сам скриптолог...
     
  12. Сигвальд

    Сигвальд Участник форума

    Регистрация:
    2 апр 2017
    Сообщения:
    161
    Благодарности:
    29
    Баллы:
    45
    Пол:
    Мужской
    При компиляции вылазит ошибка: Операция сравнения возможна только в "if" выражении.

    Конкретно, на строку gorn.aivar[AIV_FINDABLE] == TRUE;. Она там, последняя которая, вообще не лишняя?

    Код:
    instance ORG_801_Lares_BringListAnteil(C_Info)
    {
        npc = Org_801_Lares;
        nr = 2;
        condition = ORG_801_Lares_BringListAnteil_Condition;
        information = ORG_801_Lares_BringListAnteil_Info;
        permanent = 0;
        description = "Так конвой уже разбит? А где моя доля?";
    };
    
    
    func int ORG_801_Lares_BringListAnteil_Condition()
    {
        if(Npc_KnowsInfo(hero,ORG_801_Lares_BringListBack))
        {
            return 1;
        };
    };
    
    func void ORG_801_Lares_BringListAnteil_Info()
    {
        var C_Npc gorn;
        AI_Output(other,self,"ORG_801_Lares_BringListAnteil_15_00");    //Так конвой уже разбит? А где моя доля?
        AI_Output(self,other,"ORG_801_Lares_BringListAnteil_11_01");    //Поговори с Горном. Он отдаст тебе твою долю.
        gorn = Hlp_GetNpc(PC_Fighter);
        if(gorn.aivar[AIV_FINDABLE] == TRUE)
        {
            AI_Output(other,self,"ORG_801_Lares_BringListAnteil_15_02");    //Я знаю Горна. Он не член шайки. Он наемник и работает на магов.
            AI_Output(self,other,"ORG_801_Lares_BringListAnteil_11_03");    //Да, все верно.
            AI_Output(other,self,"ORG_801_Lares_BringListAnteil_15_04");    //Так он в деле?
            AI_Output(self,other,"ORG_801_Lares_BringListAnteil_11_05");    //Чем меньше знаешь, тем крепче спишь. Просто иди к нему и забери свою долю.
        };
        B_LogEntry(CH1_JoinNC,"Горн, наемник, каким-то образом принимал участие в налете на конвой. От него-то я и получу свою долю.");
        gorn.aivar[AIV_FINDABLE] == TRUE;
    };
     
  13. D36

    D36
    Модостроитель

    Регистрация:
    3 дек 2014
    Сообщения:
    656
    Благодарности:
    631
    Баллы:
    155
    Пол:
    Женский
    ==, !=, >=, <= - сравнение
    = - назначение
    В данном случае нужно gorn.aivar[AIV_FINDABLE] = TRUE;
     
    Сигвальд поблагодарил.
  14. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
  15. Сигвальд

    Сигвальд Участник форума

    Регистрация:
    2 апр 2017
    Сообщения:
    161
    Благодарности:
    29
    Баллы:
    45
    Пол:
    Мужской
    Подскажите. Квест от снафа. Завершение

    Код:
    func void DIA_Snaf_ZutatenSuccess_Info()
    {
        AI_Output(other,self,"DIA_Snaf_ZutatenSuccess_15_00");    //Я достал все, что тебе нужно!
        AI_Output(self,other,"DIA_Snaf_ZutatenSuccess_01_01");    //Отлично! Осталось только добавить это в котел, и рагу будет готово... Погоди...
        CreateInvItems(other,ItFo_Plants_mushroom_01,3);
        B_GiveInvItems(other,self,ItFo_Plants_mushroom_01,8);
        Npc_RemoveInvItems(self,ItFo_Plants_mushroom_01,8);
        Npc_RemoveInvItems(other,ItAt_Meatbug_01,3);
        CreateInvItems(self,ItFoMeatbugragout,3);
        B_GiveInvItems(self,other,ItFoMeatbugragout,3);
    Как я понял
    CreateInvItems(other,ItFo_Plants_mushroom_01,3); - У Снафа в инвентаре появляются три гриба.
    B_GiveInvItems(other,self,ItFo_Plants_mushroom_01,8);
    Npc_RemoveInvItems(self,ItFo_Plants_mushroom_01,8);
    Npc_RemoveInvItems(other,ItAt_Meatbug_01,3); - У Снафа из инвентаря забирается три гриба.
    CreateInvItems(self,ItFoMeatbugragout,3); - В инвентарь ГГ добавляется три порции рагу.
    B_GiveInvItems(self,other,ItFoMeatbugragout,3); - Вроде как Снаф передает ГГ три порции рагу.

    Не понял с тем, что не выделено. Понятно, что это адские грибы, но почему их 8 и где изъятие мяса жука.
     
  16. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    где ты откопал эти скрипты??

    Открыть спойлер

    тут порядок инстанций другой. self - это снаф.

    func void AI_Output(var C_NPC npc, var C_NPC target, var string nameWAV);
    гг - other
    снаф - self

    AI_Output(other,self,"DIA_Snaf_ZutatenSuccess_15_00"); гг (other) говорит снафу (self)
    AI_Output(self,other,"DIA_Snaf_ZutatenSuccess_01_01"); снаф (self) говорит гг (other)
    CreateInvItems(other,ItFo_Plants_mushroom_01,3); у гг появляется 3 гриба
    B_GiveInvItems(other,self,ItFo_Plants_mushroom_01,8); гг передает 8 грибов снафу
    Npc_RemoveInvItems(self,ItFo_Plants_mushroom_01,8); грибы у снафа пропадают
    Npc_RemoveInvItems(other,ItAt_Meatbug_01,3); пропадает мясо жука
    CreateInvItems(self,ItFoMeatbugragout,3); у снафа появляется готовая жрачка
    B_GiveInvItems(self,other,ItFoMeatbugragout,3); снаф дает эту жрачку


    либо для гарантии что удалятся все (вряд ли), либо изначально планировалось 8 и этот момент проглядели когда правили.

    ItAt_Meatbug_01 это и есть мясо жука, а не гриб. вопрос только почему нет передачи через Give....
     
  17. Myxomop

    Myxomop

    Регистрация:
    28 май 2005
    Сообщения:
    2.396
    Благодарности:
    1.768
    Баллы:
    355
    Пол:
    Мужской
    У ГГ(other) из инвентаря удаляется три тушки мясного жука.

    Хитрый математический костыль с уравнением чтобы передать 8 предметов через функцию B_GiveInvItems , которая так и напишет - "передано 8 предметов". Потому как если через эту функцию передавать 3 тушки и 5 грибов - текстовая информация будет наложена одна на другую.
     
    Последнее редактирование модератором: 6 дек 2017
    Bezio, Kreol Nekr, D36 и ещё 1 пользователь поблагодарили.
  18. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    а толку если напишет конкретно про гриб? тогда уж создавать инсту с названием "Грибы и мясо жука" и ее пихать в инвентарь.
     
  19. Myxomop

    Myxomop

    Регистрация:
    28 май 2005
    Сообщения:
    2.396
    Благодарности:
    1.768
    Баллы:
    355
    Пол:
    Мужской
    А там не конкретно.
     
  20. Gratt

    Gratt
    Модостроитель

    Регистрация:
    14 ноя 2014
    Сообщения:
    984
    Благодарности:
    1.051
    Баллы:
    175
    Пол:
    Мужской
    а, ну тогда гуд
     
Модераторы: Marvіn, MEG@VOLT

Поделиться этой страницей