Помощь - Поиск - Пользователи - Календарь
Полная версия: Для программистов
Форум студии Seaward.Ru > Форумы аддонов к играм ПКМ, КВЛ, ГПК > Модификации для игр на ядре Storm 2.x
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
Alexad_D
А как снять координаты точки на поверхности для установки локатора. К примеру в пещере в одном из тупиков хотим поставить локатор - reload чтобы это сделать надо указать координаты Вот и как это сделать?
dolphin_sv
program\characters\characters.c
Ищещь ф-ю:

bool GetCharacterPos(ref character, ref float_x, ref float_y, ref float_z)

и вносишь следующие изменения:

Код

bool GetCharacterPos(ref character, ref float_x, ref float_y, ref float_z)
{
    float cx, cy, cz;
    if(SendMessage(character, "leee", MSG_CHARACTER_GETPOS, &cx, &cy, &cz) == 0) return false;
    float_x = cx; float_y = cy; float_z = cz;
    Log_SetStringToLog("x = "+cx + " y = " + cy + " z = "+cz);
    return true;
}


Теперь при вызове этой функции:

Код

float x,y,z;
GetCharacterPos(pchar, &x, &y, &z);


на экран выведутся координаты героя в локации

Вызов функции придумай сам как сделать. Это может быть DebugWindow либо надо писать свою "консоль" smile.gif

Есть конечно вариант №2 - найти ближайший локатор от места, где нужен новый и методом тыка подбирать координаты, постоянно проверяя их в игре (изменения в локаторах отображаются при входе выходе, т.е. перегрузке локации)
Alexad_D
Цитата(dolphin_sv @ Sep 7 2009, 20:04) *
Есть конечно вариант №2 - найти ближайший локатор от места, где нужен новый и методом тыка подбирать координаты...
Второй способ (в смысле - тыковый подбор) 1.gif приемлим в случае простого смещения локаторов, а в расстановке их с 0 совершенно не подходит. А то я тут заморочился новыми зданиями а вот как локаторы теперь проставить под вход, балкончик, фонарики и камеру? Нажмите для просмотра прикрепленного файла
Цитата
Вызов функции придумай сам как сделать. Это может быть DebugWindow либо надо писать свою "консоль" smile.gif

Сидел разбирался двое суток, как же запустить через F7 функцию -
float x,y,z;
GetCharacterPos(pchar, &x, &y, &z);
- но "Плохо когда забудешь то, что не знаешь" - научите - как....?
navy
LoadSegment грузит файл в рилтайме. Поищи примеры в коде. Соответственно грузишь файл, запускаешь ф-цию, выгружаешь файл. Вот и весь принцип.
dolphin_sv
Цитата
Второй способ (в смысле - тыковый подбор) приемлим в случае простого смещения локаторов, а в расстановке их с 0 совершенно не подходит.


Ну почему же... Возьми на вооружение TOOL и вперед.
Alexad_D
Цитата
LoadSegment грузит файл в рилтайме. Поищи примеры в коде. Соответственно грузишь файл, запускаешь ф-цию, выгружаешь файл. Вот и весь принцип.
Не совсем понял..... Вернее - не понял совсем..... lol.gif
Короче я начал делать так (по аналогии) ........
В - init_pc.c - прописал кнопки так:
Код
ExternInitKeyCodes();
        CI_CreateAndSetControls( "", "Control", CI_GetKeyCode("VK_F7"), 0, false );
         CI_CreateAndSetControls( "", "Control2", CI_GetKeyCode("VK_F11"), 0, false );
     CI_CreateAndSetControls( "", "Control3", CI_GetKeyCode("VK_F12"), 0, false );
void ExternInitKeyCodes()
        objControlsState.key_codes.VK_F7        = 118;
    objControlsState.key_codes.VK_F7.img = "<";
        objControlsState.key_codes.VK_F11        = 122;
    objControlsState.key_codes.VK_F11.img = "<";
        objControlsState.key_codes.VK_F12        = 123;
         objControlsState.key_codes.VK_F12.img = "<";
B characters.c вставил -
Код

bool GetCharacterPos(ref character, ref float_x, ref float_y, ref float_z)
{

    float cx, cy, cz;
    if(SendMessage(character, "leee", MSG_CHARACTER_GETPOS, &cx, &cy, &cz) == 0) return false;
    float_x = cx; float_y = cy; float_z = cz;
    Log_SetStringToLog("x = "+cx + " y = " + cy + " z = "+cz);
    return true;
}
В seadogs.с
Код

switch(ControlName)
    {
        case "Control":
            // по F7  Показывает текущую позицию ГГ
float x,y,z;
GetCharacterPos(pchar, &x, &y, &z);
И вот как правильно тут вписать  вызов этой функции
        break;


        case "Control2":
            // по F11 вызывает окно отладчика
            LaunchBoalDebugScreen();

        break;
                case "Control3":
                ref mainCh = GetMainCharacter();

            //Показать характеристики ближайшего перса в заданном радиусе
                 int res = LAi_FindNearestVisCharacter(mainCh, 20);
                       Ну и так далее ...............
                break;
            }
Я там пробовал разные варианты на свой разум, так у меня все время ошибка - не верный синтаксис
Цитата
Ну почему же... Возьми на вооружение TOOL и вперед.
Ну так тулом я и сдвигал локаторы там же по старым и уже прописаным можно ореинтироваться а вот как их заного вписывать - нужны же координаты. Кстати я тулом пробовал комнату создать хрень какая то получилось mad.gif Тулом класно конвертить из врл в гм. И майки не надо Кстати у меня и не получилось не разу, майкой сконвертить. Да я вообще так чувствую что будет у меня еще гемора, с этим - новым городом, но блин, очень уж хочется smile.gif новы город с новыми зданиями Там и площадь и висилицы и фонтанчики и колоколенки и стены и дома несколько вариантов и все более приближено по виду к той эпохе
dolphin_sv
Где именно ошибка? На что ругается?
Alexad_D
Сделано так -
Код
   switch(ControlName)
    {
        case "Control":
            // по F7  Показывает текущую позицию ГГ
             float x,y,z;
             GetCharacterPos(pchar, &x, &y, &z);                                <-- 785 строка
            
        break;
           }
А ругается так ohmy.gif -
COMPILE ERROR - file: seadogs.c; line: 785
Invalid Expression
COMPILE ERROR - file: seadogs.c; line: 785
invalid syntax
--------------------------------------------------------------------
Пробую сейчас сделать свой дебаг интерфейс через F7 Вызов панели с 2 кнопками F2, F3 Для снятия координат на суше и на море ( если получится 1.gif ) один черт еще под острова надо будет координаты снимать
dolphin_sv
GetCharacterPos(pchar, x, y, z);

вот так надо.

Под острова этот способ не подойдет, т.к. считываются координаты персонажа в локации, а в открытом море и на карте нет персонажа и это не локации.
Alexad_D
Переправил - все равно ругается так же..... чего-то ему эта строчка не нравится smile.gif И кажется я уже так пробовал sad.gif

А про море я знаю - Был уже об этом разговор на форуме.... AlexusB даже выкладывал код как снимать координаты в море под острова
dolphin_sv
Попробуй так
GetCharacterPos(GetMainCharacter(), &x, &y, &z);

Это уже точно должно сработать smile.gif
Alexad_D
1.gif Есть заработало!!!!!!! Все показывает координаты. А я как раз закончил свою панель, вставил туда по F1 функцию и испытал.. smile.gif Большое спасибо

================================================================================
====================
Все свой вопрос удалил. Ошибку нашел
Alexad_D
Всем добрый день. Даже не знаю как и поступить вроде бы и мой пост последний, а с другой стороны, вроде бы как две недели уже ему. Ну да ладно будь что будет. Ну это было лирическое отступление (или вернее - вступление) А суть вот в чем....
Короче я начал писать квест - в кратце - у ГГ есть вариант познакомиться в таверне с девушкой и помочь ей освободить ее отца из тюрьмы и вернуть корабль захваченный предавшей их командой. Написать то я его написал - все через диалог - работает, но во первых если с Биатрис не начать диалог то квест не начнется Да и завязывание диалога, художественно-литературное исполнение знакомства мне не как-то не очень Я решил его несколько изменить и сделать уже через квест реакшин т.е.
Код

        case "HelpGirl_quest":
                ChangeCharacterAddress(characterFromID("Bertuzzo"), "Santafe_tavern", "goto19");
                ChangeCharacterAddress(characterFromID("beatrice"), "Santafe_tavern", "goto20");
                LAi_SetActorType(CharacterFromID("beatrice"));
                LAi_SetActorType(CharacterFromID("Bertuzzo"));
                LAi_group_MoveCharacter(CharacterFromID("beatrice"), "beatrice");
                LAi_group_MoveCharacter(CharacterFromID("Bertuzzo"), "Bertuzzo");
                LAi_SetImmortal(CharacterFromID("beatrice"), true);
                LAi_ActorAttack(characterFromID("Bertuzzo"), characterFromID("beatrice"), "");
                LAi_ActorAttack(characterFromID("beatrice"), characterFromID("Bertuzzo"), "");
                //LAi_SetCheckMinHP(characterFromID("Bertuzzo"), 10.0, true, "Znakomstvo");
                LAi_SetActorType(pchar);
                LAi_ActorFollow(pchar, characterFromID("beatrice"), "", 25.0);
            //StartQuestMovie(true, false, false);
        break;

       case "Znakomstvo": // Пытаемся завести знакомство
                 LAi_ActorDialog(characterFromID("beatrice"), Pchar, "", 3.0, 0);
         //LAi_ActorDialog(characterFromID("beatrice"), Pchar, "Francheska_dialog", 3.0, 0);
        break;  
Так вот какая петрушка, Если не отключить проверяльщик мин НР то они почему то деруться пока из игры не выйдешь А при отключенном не вызывается кейс вызывающий диалог sad.gif по этому я даже не знаю правильно ли я его пытаюсь вызвать) И даже после убийства Бертучо, даже обычным способом нельзя вступить в диалог с Франческой хотя диалог еще сохранился
dolphin_sv
Сделай их не актерами а warrior, помести в разные группы и заставь эти две группы драться. В этом случае они не будут рубить друг друга до изнеможения и проверяльщик ХП сработает.
Alexad_D
Цитата(dolphin_sv @ Sep 23 2009, 20:02) *

Ай не знаю! Мудрил, мудрил какая-то хрень все получалась. То одно не работает то другое..... Короче я пошел другим более длинным путем. Вроде бы все работает, но вот насколько это грамотно
Код
case "HelpGirl_quest":
        if(makeint(PChar.reputation) >= 47)        
            {            
//если да - запускаем квест
                ChangeCharacterAddress(characterFromID("Bertuzzo"), "Santafe_tavern", "goto19");
                ChangeCharacterAddress(characterFromID("beatrice"), "Santafe_tavern", "goto20");
                LAi_SetHP(characterFromID("beatrice"), 50.0, 50.0);
                LAi_SetActorType(CharacterFromID("beatrice"));
                LAi_SetActorType(CharacterFromID("Bertuzzo"));
                LAi_group_MoveCharacter(CharacterFromID("beatrice"), "beatrice");
                LAi_group_MoveCharacter(CharacterFromID("Bertuzzo"), "Bertuzzo");
                LAi_SetImmortal(CharacterFromID("Bertuzzo"), true);
                Characters[GetCharacterIndex("Bertuzzo")].skill.Fencing = 1;
                LAi_ActorAttack(characterFromID("Bertuzzo"), characterFromID("beatrice"), "");
                LAi_ActorAttack(characterFromID("beatrice"), characterFromID("Bertuzzo"), "");
                LAi_SetCheckMinHP(characterFromID("beatrice"), 30.0, true, "GirlProtection");
                LAi_SetActorType(pchar);
                LAi_ActorFollow(pchar, characterFromID("Beatrice"), "", 10.0);
            }
            else
            {        
//всех вон с пляжа
            ChangeCharacterAddress(characterFromID("beatrice"), "Santafe_town", "goto20");
                        ChangeCharacterAddress(characterFromID("Bertuzzo"), "None", "");
            LAi_SetPlayerType (Pchar);
            LAi_type_actor_Reset(characterFromID("beatrice"));
            LAi_type_actor_Reset(characterFromID("Bertuzzo"));
            }
            break;
        
        case "GirlProtection": // Заступаемся за девушку
            LAi_SetStayType(pchar);
            LAi_type_actor_Reset(characterFromID("beatrice"));
            LAi_type_actor_Reset(characterFromID("Bertuzzo"));
            LAi_ActorDialog(characterFromID("Bertuzzo"), pchar, "", 1.0, 1.0);
        break;
        
        case "GirlProtection1": //Валим говнюка
            LAi_ActorRunToLocator(characterFromID("beatrice"), "goto", "goto21", "", 5.0); //Прячем ее заспину
            LAi_SetImmortal(characterFromID("Bertuzzo"), false);
            LAi_SetImmortal(Pchar, true);
            LAi_SetPlayerType (Pchar);
            LAi_group_MoveCharacter(CharacterFromID("Bertuzzo"), "Bertuzzo");
            LAi_group_FightGroups("Bertuzzo", LAI_GROUP_PLAYER, true);
            LAi_SetFightMode(PChar, true);
            LAi_group_SetCheck("Bertuzzo", "GirlProtection2");
        break;
        
        case "GirlProtection2": //вступаем в диалог с телкой
            //LAi_SetPlayerType (Pchar); <--запускаем через диалог
            LAi_SetActorType(pchar);
            LAi_SetActorType(CharacterFromID("beatrice"));
            LAi_ActorWaitDialog(CharacterFromID("beatrice"), PChar);
            LAi_ActorDialog(PChar, CharacterFromID("beatrice"), "", 3.0, 3.0);
        break;
Так можно... или тоже безграмотно?
=====================================================
А вот еще вспомнил...... Почему каждый раз Эти двое по разному деруться, т.е. уходит разное время пока сработает проверяльщик НР? То я еле добегаю, то стою почти минуту, жду пока эта парочка натешится саблями махать
Warship
Непонятно, зачем ты их в кайсе "HelpGirl_quest" в группу перемещаешь, она ж не юзается, а в кайсе "GirlProtection1" снова идет добавлние - вот там его можно и оставить, а первое потереть. Ну, или в первом случае боевку тоже на группы перевести, как и было сказано.

===

А вообще, в твоем куске кода щас где-то 15 ненужных циклов по 1000 итераций каждый - оптимизируй код.
Прочти книжку "Совершенный код" Стива Макконнелла.
navy
Цитата
Прочти книжку "Совершенный код" Стива Макконнелла.

Хотя бы рекомендации Алекса, их более чем достаточно smile.gif
ALexusB
Цитата(navy @ Sep 24 2009, 08:47) *

Хотя бы рекомендации Алекса, их более чем достаточно smile.gif

Потому как Алекс (я) читал эту книжку smile.gif
navy
А я вот все никак не доберусь rolleyes.gif
Alexad_D
Цитата(Warship @ Sep 24 2009, 05:09) *

Непонятно, зачем ты их в кайсе "HelpGirl_quest" в группу перемещаешь, она ж не юзается
Warship
Ты про перемещение в какие группы говоришь про это
Код
LAi_group_MoveCharacter(CharacterFromID("beatrice"), "beatrice");
                LAi_group_MoveCharacter(CharacterFromID("Bertuzzo"), "Bertuzzo");
Если сделать без этих строчек (я пробовал по разному пока заработало) - тогда они просто месят друг друга не нанося урона - 0/50 и 0/80.
Цитата(Warship @ Sep 24 2009, 05:09) *
Прочти книжку "Совершенный код" Стива Макконнелла.
По поводу книжек Я живу в маленьком 3.gif (очень маленьком) sad.gif городке - этим я думаю все сказано.
Цитата(Navy @ Sep 24 2009, 07:47)
Хотя бы рекомендации Алекса, их более чем достаточно smile.gif
За отсутствием присутствия таковых(имеется ввиду - умных книжек) smile.gif я как раз и пользуюсь рекомендациями с форума и беру за образец и ореинтируюсь на скрипты от Акеллы 1.gif
Цитата(Warship @ Sep 24 2009, 05:09) *
А вообще, в твоем куске кода щас где-то 15 ненужных циклов по 1000 итераций каждый - оптимизируй код.
Вот я потому и советуюсь как его лучше оптимизировать и где именно эти 15 ненужных циклов.......
=================================================================
Еще....... Очень хочу сделать окно диалога как в К3 - (Без верхней части для голов) Но не знаю за что уцепиться и с чего начать В одном ли это файле или в нескольких(если да то каких) Может кто уже пробовал, знает?
Warship
Цитата(Alexad_D @ Sep 24 2009, 18:24) *

Вот я потому и советуюсь как его лучше оптимизировать и где именно эти 15 ненужных циклов.......

Например, кусок твоего кода:
Код

ChangeCharacterAddress(characterFromID("Bertuzzo"), "Santafe_tavern", "goto19");
ChangeCharacterAddress(characterFromID("beatrice"), "Santafe_tavern", "goto20");
LAi_SetHP(characterFromID("beatrice"), 50.0, 50.0);
LAi_SetActorType(CharacterFromID("beatrice"));
LAi_SetActorType(CharacterFromID("Bertuzzo"));
LAi_group_MoveCharacter(CharacterFromID("beatrice"), "beatrice");
LAi_group_MoveCharacter(CharacterFromID("Bertuzzo"), "Bertuzzo");
LAi_SetImmortal(CharacterFromID("Bertuzzo"), true);
Characters[GetCharacterIndex("Bertuzzo")].skill.Fencing = 1;
LAi_ActorAttack(characterFromID("Bertuzzo"), characterFromID("beatrice"), "");
LAi_ActorAttack(characterFromID("beatrice"), characterFromID("Bertuzzo"), "");
LAi_SetCheckMinHP(characterFromID("beatrice"), 30.0, true, "GirlProtection");
LAi_SetActorType(pchar);
LAi_ActorFollow(pchar, characterFromID("Beatrice"), "", 10.0);

В нем 15 раз юзаесть функция characterFromID().

Каждая функция CharacterFromID() - это проход циклом по всем персонажам (TOTAL_CHARACTERS), т.е. 1000 итераций (на деле конечно меньше, т.к. когда найдет нужное, искать дальше перестанет).

Легким движением руки это все можно оптимизировать, и получить, например, это:
Код

ref character1 = CharacterFromID("Bertuzzo");
ref character2 = CharacterFromID("beatrice");

ChangeCharacterAddress(character1, "Santafe_tavern", "goto19");
ChangeCharacterAddress(character2, "Santafe_tavern", "goto20");
LAi_SetHP(characterFromID("beatrice"), 50.0, 50.0);
LAi_SetActorType(character2);
LAi_SetActorType(character1);
LAi_group_MoveCharacter(character2, "beatrice");
LAi_group_MoveCharacter(character1, "Bertuzzo");
LAi_SetImmortal(character1, true);
character1.skill.Fencing = 1;
LAi_ActorAttack(character1, character2, "");
LAi_ActorAttack(character2, character1, "");
LAi_SetCheckMinHP(character2, 30.0, true, "GirlProtection");
LAi_SetActorType(pchar);
LAi_ActorFollow(pchar, character2, "", 10.0);


Итого, вместо 15 * 1000 итераций мы получили 2000.

Но. Не нужно обьявлять переменные в кайсах, т.к. это все одна функция QuestComplete() и обьявление в разных кайсах переменной с одним именем создаст ошибку.

Цитата(Alexad_D @ Sep 24 2009, 18:24) *

беру за образец и ореинтируюсь на скрипты от Акеллы

Ну и напрасно. smile.gif
Поэтому у тебя код и получается неоптимизированным.
Alexad_D
Цитата(Warship @ Sep 24 2009, 11:50) *

Ну и напрасно. smile.gif
Поэтому у тебя код и получается неоптимизированным.

lol.gif А что делать...... даренному, как говорится, коню(скрипты от Акеллы) в зубы не смотрят...... Что имеем..... то и "имеем" wink.gif
---------------------------------------
Так теперь проверим все ли так я понял..... Допустим, если пишем что либо для конкретных персов.... то чтобы исключить их постоянный поиск - конкретизируем их ?

ref character1 = CharacterFromID("Bertuzzo");
ref character2 = CharacterFromID("beatrice");

Или же это мы что-то другое сделали? И еще 3.gif Я тут не понял смысл фразы
Цитата
Не нужно обьявлять переменные в кайсах, т.к. это все одна функция QuestComplete() и обьявление в разных кайсах переменной с одним именем создаст ошибку.
Чем больше вчитываюсь тем больше запутываюсь... Т.е это истинно до до завершения квеста? А если он не завершен и как быть с кейсами в других квестах?
ohmy.gif Я что то не так понял 3.gif


Я пробовал с подобными вопросами к нашей информатичке подходить - ohmy.gif Так она на меня как на больного смотрела sad.gif 1.gif Так что извиняйте но пока наш форум это, можно сказать единственный источник знаний для меня 5.gif
================================================================================
Warship
Цитата(Alexad_D @ Sep 24 2009, 21:08) *

Так теперь проверим все ли так я понял..... Допустим, если пишем что либо для конкретных персов.... то чтобы исключить их постоянный поиск - конкретизируем их ?

ref character1 = CharacterFromID("Bertuzzo");
ref character2 = CharacterFromID("beatrice");

Или же это мы что-то другое сделали?

Эти два обьявления - это обьявления переменных, содежращих, грубо говоря, ссылки на персонажей (если точнее, то на элемент в массиве обьектов).
Далее эти переменные можно юзать за место CharacterFromID() (тоже такое вот грубое сравнение).

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

Кроме переменных ссылочного типа есть еще (в скриптах Сторм 2.*):
Целочисленных тип - int
Строковый тип - String
Тип данных с плавающей точкой - float
Массивы.
Ну и обьекты.

Отличие переменных ссылочного типа от остальных состоит в том, что при изменении указателя на обьект, изменится и сам обьект, т.е.
ref character = CharacterFromID("Bertuzzo");
character.someAttribute = "12345";
Log_SetStringToLog(character.someAttribute); // 12345
Log_SetStringToLog(Characters[GetCharacterIndex("Bertuzzo")].someAttribute); // 12345


Все остальные типы (целочисленный, строковый, с плавающей точко; пример с целочисленным):
int integer1 = 256;
int integer2 = integer1;
integer2 += 100;

Log_SetStringToLog("" + integer1); // 256
Log_SetStringToLog("" + integer2); // 356

Ну и так далее.

Цитата(Alexad_D @ Sep 24 2009, 21:08) *

То есть это верно только для одного кейса? Уже для следующего пусть даже для тех же персов, все равно надо по новой писать

Что имел ввиду:
Код
Код
void SomeFunction(int _parameter)
{
     switch(_parameter)
     {
           case 0:
                    int temp = 0;
           break;

           case 1:
                    int temp = 1;
           break;
     }
}


Вызовет ошибку, т.к. обьявляеются в одной функции две переменные с одинаковым именем.
Следует делать как
Код
void SomeFunction(int _parameter)
{
     int temp;
    
     switch(_parameter)
     {
           case 0:
                    temp = 0;
           break;

           case 1:
                    temp = 1;
           break;
     }
}


Вот такая же ситуация и с кайсами в функции QuestComplete().
Лучше вообще избегать обьявления переменных внитри кайсов, т.к. вот такую ошибку поймать вполне реально.

===

Вообще, смотри тему Описания языка программирования ПКМ, там инфы море.
navy
Цитата
беру за образец и ореинтируюсь на скрипты от Акеллы

Вот это как раз надо делать осторожно biggrin.gif
Alexad_D
Warship - Скачал, Спасибо,. Буду разбираться . Правда пока что-либо понял слабо - но буду вдумываться, пробовать делать. Я больше понимаю когда делаю сам, экспериментирую.....
=====================================
1.gif Navy - говоря "беру за образец и ореинтируюсь" - я имел ввиду - беру готовое - из игры...... а вовсе не как безупречный эталон для подражания. smile.gif Учится же на чем то надо..... 5.gif
==================================================================

Я тут в скольз спрашивал про окно диалога -
Цитата
... Очень хочу сделать окно диалога как в К3 - (Без верхней части для голов) Но не знаю за что уцепиться и с чего начать В одном ли это файле или в нескольких, если да то каких?
Может кто уже пробовал, знает, подскажет...?
==================================================================
Еще.... Как составить проверяльщик на нахождение перса в определенном локаторе т.е. -

ref character1 = CharacterFromID("beatrice");
if (character1.location =="Santafe_tavern", "goto20" ); <-- именно вот эту строчку как правильно записать???
{
Сюжет 1
}
else
{
Сюжет 2
}

Так вообще нельзя проверять или просто ошибка в записи?
dolphin_sv
Цитата(Alexad_D @ Sep 24 2009, 14:43) *


Еще.... Как составить проверяльщик на нахождение перса в определенном локаторе т.е. -

ref character1 = CharacterFromID("beatrice");
if (character1.location =="Santafe_tavern", "goto20" ); <-- именно вот эту строчку как правильно записать???
{
Сюжет 1
}
else
{
Сюжет 2
}

Так вообще нельзя проверять или просто ошибка в записи?


Код

if (character1.location =="Santafe_tavern" && character1.location.locator == "goto20")
  {
    Сюжет 1
  }
else
  {
    Сюжет 2
  }


Но вообще, эта проверка лишена смысла, т.к. персонажей ты сам расставляешь по локаторам, т.е. заранее знаешь и локацию и локатор.
ALexusB
А когда перс ходит, то у него остается первый локатор инициализации, а сам он вообще в пути, вне локаторов. Потому проверка идет только на ВХОД в локатор.
Например, ручка на предмет на полу или энкаутер в джунглях

Включи просмотр шариков-локаторов в игре, ужаснись размерам ЕНС01 smile.gif
Alexad_D
Спасибо.... буду дальше продолжать застопорившуюся ветку.
Цитата(dolphin_sv @ Sep 30 2009, 14:41) *

Но вообще, эта проверка лишена смысла,
1.gif Не скажи......
Цитата(dolphin_sv @ Sep 30 2009, 14:41) *
.... персонажей ты сам расставляешь по локаторам, т.е. заранее знаешь и локацию и локатор.
Истино если НПС тупо ждет когда ты обратишь на него внимание и далнейшего развития у него нет....smile.gif А у меня вот в чем фишка - Гг и НПись могут встретится в одной локации, поговорить и пойти по сюжету 1, могут просто встретится, перкинуться парой фраз, не сойтись характерами и разбежаться, а могут и не встретится здесь вовсе (отсюда и направления развития сюжетов) Итак, к примеру, по сюжету 3 (не встретились вовсе) - НПС "самостоятельно" wink.gif отправляется в локацию на другом острове где они опять же таки, могут, (что вовсе не обязательно) пересечься с ГГ и естественно что диалог предусмотренный для встречи в предыдущей локации теряет смысл sad.gif

Цитата(ALexusB @ Oct 1 2009, 15:13) *
Включи просмотр шариков-локаторов в игре, ужаснись размерам ЕНС01 smile.gif
smile.gif давно включил - уже привык к этому уже ставшему таким родным - красно-фиолетово-зеленому триколору. 1.gif
Цитата(ALexusB @ Oct 1 2009, 15:13) *
...сам он вообще в пути, вне локаторов. Потому проверка идет только на ВХОД в локатор.
А переброшеный Непись то находится в самом локаторе! И ждет нас.... rolleyes.gif .

=================================================================
Вот еще бы с головами (верхней частью диалогового окна) разобраться бы......... Ну не знаю как эту часть убрать
Black Angel
У меня несколько вопросов по програмированию:
1.Как обновить таблицу в инвентаре предметов?
2.Как сделать чтобы у "сухопутных" воинов в руке и инветаре было одно и тоже?
точнее где это писать?
3. При выключение фонарей хочу сделать чтобы нпс хоть иногда промахивались.Где это надо писать?
ALexusB
Честно пытался понять суть вопросов, не понял, тк мутно очень.
Вот так же мутно (но строго по вопросу и отвечу)
1. таблиц в игре нет вообще, как понятия. Есть дерево атрибутов и есть формы отрисовки в виде табличного списка. Поэтому ответ - никак, тк БД нет
2. у всех НПС в инвентаре есть то, что экипировано - это жестко, если разлочить воровство (обмен с НПС), то это даже видно.
3. там где промахиваются (в методах вероятности попадания).
Black Angel
Цитата(ALexusB @ Nov 19 2009, 01:44) *

Честно пытался понять суть вопросов, не понял, тк мутно очень.
Вот так же мутно (но строго по вопросу и отвечу)
1. таблиц в игре нет вообще, как понятия. Есть дерево атрибутов и есть формы отрисовки в виде табличного списка. Поэтому ответ - никак, тк БД нет
2. у всех НПС в инвентаре есть то, что экипировано - это жестко, если разлочить воровство (обмен с НПС), то это даже видно.
3. там где промахиваются (в методах вероятности попадания).

1.ну что то типа Table_UpdateWindow должно ж быть...а то в инвентаре нажимаю кнопку взять предмет,он появляется,но в списке(таблице)предметов его не показывает.После манипуляций выход/вход в список предметов по F2 то предмет появляется.
2.Я имел в виду при обыске трупов.А то в руке у него кирка, а обыскиваешь и нет ничего кроме пары золотых(пиастров)
3.А это в AIShip?Там вообже поведение нпс написано.А если хочу что бы совсем не видели?Где тогда это написать?В какой функции AIShip?
delfin_
Цитата(Black Angel @ Nov 19 2009, 11:05) *

2.Я имел в виду при обыске трупов.А то в руке у него кирка, а обыскиваешь и нет ничего кроме пары золотых(пиастров)

ЕМНИП - там не всегда можно снять вещи с трупов, т.е. есть некая вероятность, экипировка либо покажется, либо нет. В патче моргана на пкм была 100% вероятность что экипировка всегда будут на трупе, только обыска не было, так что они сразу в инвентарь добавлялись.
navy
Цитата
3.А это в AIShip?Там вообже поведение нпс написано.А если хочу что бы совсем не видели?Где тогда это написать?В какой функции AIShip?

при чем тут АИШип????О_о вообще название говори за то, что этот файл отвечает за АИ КОРАБЛЕЙ!!!
Warship
1. Нужно не рефрешить таблицу, а добавлять в нее новое.
2. LAi_utils.c функция Dead_AddLoginedCharacter();
3. Вроде, AIBalls.c функция Ball_AddBall();
Black Angel
Цитата(Warship @ Nov 19 2009, 13:43) *

1. Нужно не рефрешить таблицу, а добавлять в нее новое.
2. LAi_utils.c функция Dead_AddLoginedCharacter();
3. Вроде, AIBalls.c функция Ball_AddBall();

1.При выбрасывании вещи из вентаря она в списке остается, а физически ее нет уже.Вот зачем мне рефреш таблицы
2.Спасибо Warship то что нужно.
3.Нет этот файл отвечает за обработку пёта разных снарядов(боеприпасов) в корпус,воду,форт и т.д.
Цитата

при чем тут АИШип????О_о вообще название говори за то, что этот файл отвечает за АИ КОРАБЛЕЙ!!!

А ай это кто?Боты,а не человеки!:-)
Сейчас объясню так что все сразу поймут:-)
Все помнят фильм Хозяин Морей?Надеюсь,что очень хорошо:-)Там была сцена когда они удирали от фрегата на всех парусах и ночью воспользовались хитростью:потушили на судне все огни и спустили на воду плот с включеными фонарями.И пока враг стрелял по этому "маяку" они сменили курс и ушли в полной темноте.
Помнится на форуме,ещё до выхода гпк кто то спрашивал:"В густой туман можно будет к форту на близкое растояние подойти не замеченым?" ответ был однозначным "Нет".
Так вот я хочу сделать так чтобы когда погасив огни на судне во время убегания от противников они "хотя бы пытались сделадь вид, что не видят,а не стреляли точно в цель" это просто даже перебор какой то...
navy
Я не понмю, не смотрел. AIBalls тебе правильно сказали. Там считаются попадания.
delfin_
Я не спец по програмингу, но идея есть. Вроде 1 корабль = 1 кэп, с определенными навыками. Вот и нужно дать ему минусы (-99) в умениях морского боя когда фонари гаснут, т.е. сделать эвент, погаснувшие фонари + минусы неписям. Только если днем фонари не будут гореть, кэпы тоже будут слепые)))
Black Angel
Цитата(delfin_ @ Nov 20 2009, 00:24) *

Я не спец по програмингу, но идея есть. Вроде 1 корабль = 1 кэп, с определенными навыками. Вот и нужно дать ему минусы (-99) в умениях морского боя когда фонари гаснут, т.е. сделать эвент, погаснувшие фонари + минусы неписям. Только если днем фонари не будут гореть, кэпы тоже будут слепые)))

Вот!Человек идею узрил smile.gif Вот именно её я пытаюсь воплотить smile.gif Ничего днем будет все пучком smile.gif код у меня готов только вот не знаю куда его ткнуть...Скажите где сиё надо прописать?!
Цитата(navy @ Nov 20 2009)

Я не понмю, не смотрел. AIBalls тебе правильно сказали. Там считаются попадания.

Да,да,да...увидел smile.gif а на счёт фильма,посмотри - отличное кино thumbsup.gif
korsar-fan
Хотелось бы узнать как в гпк сделать: 1) как с помощью предмета добавить переновимый вес, как обычные статы я знаю, а вот вес вопрос. 2) Можно ли, если с квестовым персонажем ссыграть в карты, после игры продолжить диалог, и в зависимости от исхода игры разные ветки.
Ван дер Декен
Ни как.
Только способность взять.
Ни как.
ALexusB
Цитата(korsar-fan @ Jan 2 2010, 20:27) *

Хотелось бы узнать как в гпк сделать: 1) как с помощью предмета добавить переновимый вес, как обычные статы я знаю, а вот вес вопрос. 2) Можно ли, если с квестовым персонажем ссыграть в карты, после игры продолжить диалог, и в зависимости от исхода игры разные ветки.

зачем отвечать никак, когда можно?

1) - найти место в коде, где определяется текущий вес с учетом штрафов, там дописать проверку на кармане предметов или еще что (если делать бутылки, которые действуют временно на 60-120с)

2) можно, для этого нужно дописать механизм генерации квеста (что б было универсально, а не заплаткой) на выходе их интерфейса игры, что бы стартануть нужный диалог с противником в игре

Оба кода представляют собой врезки на 4-8 строк, пишутся за 5-15мин
Black Angel
Подскажите как сделать и где прописать чтобы потушив фонари и плывя на расстоянии х от противника, при наличии материалов "создать" приманку и уплыть в другую сторну?
kokkai
Как заменить локацию "каюта" Синей Птицы на каюту фрегата, и.т.п. судна? Я имею ввиду внешний вид "каюты".
ALexusB
Цитата(Black Angel @ Feb 2 2010, 21:05) *

Подскажите как сделать и где прописать чтобы потушив фонари и плывя на расстоянии х от противника, при наличии материалов "создать" приманку и уплыть в другую сторну?

Оч странное для сторм желание.
Корабль будет виден для ИИ все равно, если рядом, то в борт получишь все равно.

Можно сделать кнопку "приманка" типа сброса мины. Если враг на нее наплыл, то его акшен становится, например, убегать, тогда ИИ будет пофиг на ГГ.
Можно и без наплыва делать, а по факту сброса.

Цитата(kokkai @ Feb 3 2010, 00:32) *

Как заменить локацию "каюта" Синей Птицы на каюту фрегата, и.т.п. судна? Я имею ввиду внешний вид "каюты".

Это к кодингу не относится - это ретекстуринг - в соотв тему
если же каюту менять, то найти ИД локации и заменить в описании корабля на другой.
Не помню делал ли я механизм уникальных кают, или они все от размера зависят, но дописать схему (палуба-каюта-подмена на уникальную) тоже можно.
dolphin_sv
Цитата(ALexusB @ Feb 3 2010, 13:22) *

...
Не помню делал ли я механизм уникальных кают, или они все от размера зависят, но дописать схему (палуба-каюта-подмена на уникальную) тоже можно.


Делал smile.gif

Код
refship.CabinType          = "Cabin_Small"; // потом припишем слово My_ и будет каютой для ГГ
Black Angel
Цитата(ALexusB @ Feb 3 2010, 14:22) *

Оч странное для сторм желание.
Корабль будет виден для ИИ все равно, если рядом, то в борт получишь все равно.

Можно сделать кнопку "приманка" типа сброса мины. Если враг на нее наплыл, то его акшен становится, например, убегать, тогда ИИ будет пофиг на ГГ.
Можно и без наплыва делать, а по факту сброса.

Просто хочу сделать как в фильме "Хозяин морей". Там есть момент где то в начале фильма где они убегают от фрегата...Они сбрасывают приманку и тушат огни на судне...и фрегат ведется на приманку...вот и здесь так же сделать...через подмену корабля на приманку...проще говоря: ночь,туман,битва,мы удирам,отплыли на растаяние х,появилась возможность(как со значком глобалки) сбросить приманку при наличии в трюме необходимых материалов.Когда проходит сброс приманки наш корабль меняется с приманкой(вот не знаю чем ID чтоли...) и вражеский корабль гонится за приманкой.Достигая ее у него функция останавливается и переходит в свободное плавание,а мы тем временем должны убежать за растояние х иначе получится что зря потратили материалы.Вот я так себе представляю общую схему.
HIGHLANDER
Можно рассматривать мой пост как "хотелку", а можно как идею (с вопросом-а возможно ли вообще?).
Сейчас в игре (играю в ГПК, насчет других не в курсе) есть 2 параметра корабля:
- состояние корпуса
- состояние парусов.
Возможно ли ввести некий третий параметр, скажем так, общего сотояния корабля? Логическое обоснование-корабь со временем портится smile.gif (по многим причинам), приходит в негодность и т.д. И если скажем паруса еще можно подлатать (заменить), то корпус восстановить до первоначального состояния вряд ли получится. Т.е. на верфи уже нельзя будет это исправить, и через какое-то время кораблем попросту невозможно будет пользоваться.
С точки зрения геймплея, это, на мой взгляд, очень заманчивая фишка. Это заставит игрока в течении игры не только менять корабли от низшего класса к высшему, но и в сами кораби одного класса придется иногда заменять. Опять же это не дасть игроку пол игры проходить на "Синей птице" и еще пол игры на "Псе войны". Конечно если геймер будет бережно отосится к своим судам, то необходимость смены может наступить не так скоро. Для отъема лишних денег у игрока можно сделать однократную мега-починку для сброса этого праметра на ноль (скажем на Бермудах, за мильён-другой smile.gif).
Повторюсь, меня интересует, насколько это реально?

Пост получился достаточно сумбурным, но надеюсь основная идея понятна. При необходимости могу развить её дальше.
Black Angel
Как прописать корабль в бухте,если смотреть с суши гг на море.Принцип как суда в порту.Как это сделать?
ALexusB
На НПС кэпе есть параметр (непомню) в нем ИД локации (и может локаторы)
Есть метод приписки в порт (и очистки этого порта)
Использовать правильно только метод.
Важно - прописывать это до загруза локации

см по коду, где НПС есть в порту
Black Angel
Цитата(ALexusB @ Mar 18 2010, 22:27) *
Использовать правильно только метод.
Важно - прописывать это до загруза локации
см по коду, где НПС есть в порту
Я вот хочу сделать чтобы после диалога в бухте появился корабль,как в порту.Такое вообще возможно?Даже если перегрузить локацию заново.Если да то как и что надо писать?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.