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

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

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

MaGoth

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

Вложения

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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
вы че больные менять строку по адресу?) яб автору сего кода сломал бы что-нибудь
а так вот, наверное этот 0x00848F9C
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Спасибо большое, все работает)
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
условия проверки длины строки не убирай главное, такие вещи вообще нельзя руками трогать. залезешь в память куда не просят - словишь краш.
 

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Не подскажите какие тут будут адреса в первой Готике?
Код:
const int MANABAR_SHOW = /*0x0D8B14EB*/ 227218667;
const int MANABAR_HIDE = /*0x0000BCE9*/ 48361;
const int MANABAR_DEFAULT = /*0x0D8B1475*/ 227218549;

//  1 = Show
//  0 = Default
// -1 = Hide


func void ShowManabar(var int cond) {
        var int tmp;
        
        MemoryProtectionOverride(/*0x006C33EC*/7091180, 4);
        
        if (cond == 1) {
            tmp = MANABAR_SHOW;
         } else if (cond == 0) {
             tmp = MANABAR_DEFAULT;
        } else if (cond == -1) {
            tmp = /*000000BC*/ 188;
            MEM_WriteInt(/*0x006C33EC*/ 7091181, tmp);
            tmp = MANABAR_HIDE;
        };
                
        MEM_WriteInt(/*0x006C33EC*/ 7091180, tmp);
};
 

driver.by

Участник форума
Регистрация
13 Июл 2017
Сообщения
4
Благодарности
0
Баллы
150
Уважаемые модостроители, подскажите как можно добавить свои клавиатурные бинды в игру? Со скриптами вроде разбираюсь - могу добавить своих мобов и др. итемы. Хотелось бы по нажатию кнопки добавлять их в мир в нужный момент. Или как в игре это можно сделать? Может через какой-то диалог?
Нужно именно добавление в определенный момент, спавн на старте мира не подходит.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.231
Баллы
525
Нужно именно добавление в определенный момент, спавн на старте мира не подходит.
Ну так припомни сюжет оригинала и смотри его скрипты. Там не единожды появляются в мире и исчезают те или иные неписи. Спавн предметов тоже имеется (травы из списка Константино, клады).
 

driver.by

Участник форума
Регистрация
13 Июл 2017
Сообщения
4
Благодарности
0
Баллы
150
Ну так припомни сюжет оригинала и смотри его скрипты. Там не единожды появляются в мире и исчезают те или иные неписи. Спавн предметов тоже имеется (травы из списка Константино, клады).
Спасибо за быстрый ответ :) Вопрос как раз в добавлении при нажатии на определенную кнопку (или ваш вариант). Скрипт добавления чего-то я напишу. Но как вызывать этот скрипт в любой момент в игре? Самый логичный вариант - при нажатии на кнопку клавиатуры.
Насколько я понимаю возможности скриптами это сделать нет и надо пробовать как-то cheat engin'ом вмешиваться в процесс. Но может опытные модостроители подскажут какую-то возможность. Я по этой теме только один день копаю и явно всего не знаю :)
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
Зачем тебе бинды? В темы AST переиди, смотри там внешнюю функцию KeyClick

@Orc Hunter лучше выкини свой икарус если ты не в состоянии залезть в иду
 

driver.by

Участник форума
Регистрация
13 Июл 2017
Сообщения
4
Благодарности
0
Баллы
150
Зачем тебе бинды? В темы AST переиди, смотри там внешнюю функцию KeyClick
Спасибо за направление, буду смотреть.
Наверное стоило сразу описать цель: хочется сделать интерактивный стрим по Готике. Кто не в курсе - зрители могут воздействовать на стрим (обычно скидывая определенную сумму доната). Т.е. пришло что-то и надо заспавнить монста или предмет, ну или что-то посложнее придумать. Для начала хотя бы спавн монстров.
 

ElderGamer


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

Orc Hunter


Модостроитель
Регистрация
12 Окт 2013
Сообщения
1.269
Благодарности
1.667
Баллы
305
Смотрю на Икарус подсел конкретно. Осторожнее с ним - для 1 готы он довольно часто крашит игру.
Я еще Лего поставил, были проблемы но их решил. Надеюсь в дальнейшем все будет нормально.
 

meosen

Участник форума
Регистрация
11 Мар 2017
Сообщения
12
Благодарности
1
Баллы
155
Доброго всем здоровья дорогие друзья! Подскажите пожалуйста, как реализовать вот такую фичу. При призыве появлялся бы монстр, а при призыве второго, первый убивался и оставался бы только 1. Что бы можно было саммонить строго по 1 волку например.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.231
Баллы
525
Что бы можно было саммонить строго по 1 волку например.
Алгоритм такой. При вызове существа происходит увеличение на единицу счётчика вызванных существ. При входе в своё начальное состояние ИИ вызванное существо запоминает в какой-нибудь из aivar-переменных значение этого счётчика, единовременно, нужен триггер. Далее в цикле тех состояний ИИ, в которых бывает вызванное существо (следование за ГГ, атака), запомненное значение сравнивается с текущим значением счётчика вызванных существ. Если было вызвано новое существо, счётчик увеличился, сравнение это показало - существо самоликвидируется.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
один глобальный экземпляр C_NPC и проверка его на валидность. любое созданное существо вначале убивает предыдущего, потом само же записывается в эту переменную.
Код:
var C_NPC g_pLastSummonedNpc;
...
func void SummonNpc ()
{
    /* do summon */
    ...
     b_killnpc (g_pLastSummonedNpc); // IsValid | !IsDead | Kill
     g_pLastSummonedNpc = self;
};
 
Последнее редактирование:

meosen

Участник форума
Регистрация
11 Мар 2017
Сообщения
12
Благодарности
1
Баллы
155
один глобальный экземпляр C_NPC и проверка его на валидность. любое созданное существо вначале убивает предыдущего, потом само же записывается в эту переменную.
[/CODE]

Сэр, спасибо огромное! Скажите, а это существо надо будет создать как отдельное НПС или можно использовать уже созданные (например в разделе волки)
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.300
Благодарности
4.633
Баллы
625
какая разница
 

Inomoz

Участник форума
Регистрация
20 Авг 2017
Сообщения
6
Благодарности
0
Баллы
150
Здрасте. Есть небольшая проблема/вопрос.

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

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

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

Kreol Nekr

Участник форума
Регистрация
21 Ноя 2014
Сообщения
229
Благодарности
109
Баллы
190
Вопрос с вставкой нпц решился, предметы пока не проверял

Код:
    if (KeyClick(KEY_F2))
    {
        Wld_InsertNpc (Snapper, "PC_HERO");
    };
У вас в игре расширители используются?
 

Inomoz

Участник форума
Регистрация
20 Авг 2017
Сообщения
6
Благодарности
0
Баллы
150
У вас в игре расширители используются?
Расширитель - это dll плагин (AST)?

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

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

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

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