Seaward.ru

Здравствуйте, гость ( Вход | Регистрация )

> Для программистов, вопросы по скриптам ПКМ
igor_pol
сообщение Aug 24 2005, 21:00
Сообщение #1


боцман
****


Группа: форумчанин
Сообщений: 140
Регистрация: 3-December 04
Пользователь №: 169



Первое что я хотел написать "АДМИНЫ!!!!" НЕ ЗВЕРЕЙТЕ ЗА "НЕНУЖНУЮ ТЕМУ"
**************************************************
на вопрос зачем создал эту тему отвечу так "Я например НЕ ПРОСТО ЮЗВЕРЬ А КОЕ ЧТО И САМ НАПИСАТЬ МОГУ.
И хотел бы чтобы на форуме была тема для тех кто сам хочет что-то добавить в игру.
На сайте аддона Алекс вікинул ссылку на описание скриптов ПКМ на английском.
Я хотел бы узнать где можно нарыть больше инфы по этом скриптам.
И кстати на каком языке они пишуться.
Если кто-то знает ----- пишите.
И вообще всем програмерам на форуме нужна своя тема.
так что ГОСПОДА ПРОГРАМЕРЫ ВАЛИТЕ СЮДА !!!!
Может из этого что небудь интересное выйдет!!!!!!(Если тему не УТРУТ)
Жду сообщений (может у когот есть идеи на эту тему )

Сообщение отредактировал Догева - Apr 24 2006, 13:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
33 страниц V « < 31 32 33  
Reply to this topicStart new topic
Ответов(640 - 652)
ALexusB
сообщение Sep 3 2020, 16:05
Сообщение #641


Разработчик игры К:ВЛ
*******

Seaward TeamЖелезный Профессор
Группа: Admin
Сообщений: 15,284
Регистрация: 2-November 04
Пользователь №: 3



Нужно научиться пользовать поиск по коду
И далее его просто читать
см метод
void EquipCharacterByItem(ref chref, string itemID)
там SetEquipedItemToCharacter - вот там есть вызовы ядра, что на модель рисуют саблю, пистоль, кирасу
И делают их с нужным уроном и тп
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slayer
сообщение Sep 3 2020, 16:48
Сообщение #642


новичок
*


Группа: форумчанин (*)
Сообщений: 8
Регистрация: 2-September 20
Пользователь №: 199,708



Цитата(ALexusB @ Sep 3 2020, 16:05) *

Нужно научиться пользовать поиск по коду
И далее его просто читать
см метод
void EquipCharacterByItem(ref chref, string itemID)
там SetEquipedItemToCharacter - вот там есть вызовы ядра, что на модель рисуют саблю, пистоль, кирасу
И делают их с нужным уроном и тп

спасибо за ответы. буду пробывать.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Verdugo
сообщение Sep 3 2020, 22:06
Сообщение #643


новичок
*


Группа: форумчанин (*)
Сообщений: 7
Регистрация: 22-August 20
Пользователь №: 198,224



Цитата(Slayer @ Sep 3 2020, 15:24) *

а что делает эта функция? просто ни разу её не пользовался.


Добрый день.
На сколько я понимаю, она форсит обновление модели и анимации персонажа. Вы можете найти ее поиском.
Я использовал ее там, где нужно переодеть персонажа или сменить ему анимацию на лету. Попробовал создать ваш сценарий, сделал подобного офицера и снял с него саблю.

Попробуйте добавить эту функцию в диалог вашему противнику, перед тем как начнется бой с ним:

Код

void blade4off(ref chref)
{
    string sTemp = FindCharacterItemByGroup(chref, BLADE_ITEM_TYPE);
    if(CheckAttribute(chref, "HalfImmortal")) DeleteAttribute(chref, "HalfImmortal");
    if(GetCharacterEquipByGroup(chref, BLADE_ITEM_TYPE) == "" && sTemp != "")
    {
        Characters_RefreshModel(chref);
        EquipCharacterByItem(chref, sTemp);
    }
}


Не знаю, конечно, на сколько это грамотно (времени разбираться не было), но у меня все работает нормально.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slayer
сообщение Sep 3 2020, 22:54
Сообщение #644


новичок
*


Группа: форумчанин (*)
Сообщений: 8
Регистрация: 2-September 20
Пользователь №: 199,708



Цитата(Verdugo @ Sep 3 2020, 22:06) *

Добрый день.




спсибо за подсказку . но дело было в тестовом режиме игры. просто вышел из него и сгенерил ей отличный клинок ( с улучшенными хар-ками) . и он перестал сниматься после потери сознания. Но появилаь ещё одна проблема - когда она абордажник , ей можно подсунуть дешевую рапиру и через меню заменить вручную на её отличную саблю . Теперь надо сделать так , как на примере Мери и нарвала , чтобы не отдавала).. повышение ей ранга не привело к успеху. Но я кажется решение уже почти нашел...
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Verdugo
сообщение Sep 3 2020, 23:08
Сообщение #645


новичок
*


Группа: форумчанин (*)
Сообщений: 7
Регистрация: 22-August 20
Пользователь №: 198,224



Цитата(Slayer @ Sep 3 2020, 22:54) *
Теперь надо сделать так , как на примере Мери и нарвала , чтобы не отдавала).. повышение ей ранга не привело к успеху. Но я кажется решение уже почти нашел...


А что, как в случае с Мери, правкой в items.c, это не решается?
p.s. Если как с Мери не работает, попробуйте прописать как атрибут, проверку на атрибут поставить в items.c, аналогично с Мери.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slayer
сообщение Sep 4 2020, 00:11
Сообщение #646


новичок
*


Группа: форумчанин (*)
Сообщений: 8
Регистрация: 2-September 20
Пользователь №: 199,708



Цитата(Verdugo @ Sep 3 2020, 23:08) *

А что, как в случае с Мери, правкой в items.c, это не решается?
p.s. Если как с Мери не работает, попробуйте прописать как атрибут, проверку на атрибут поставить в items.c, аналогично с Мери.

вот именно это решение и нашел)) ..просто ни разу ещё этот файл кода не смотрел . поэтому то и тормозил слегка ))

if (xi_refCharacter.id == "Mary" && arItem.groupID == BLADE_ITEM_TYPE)
{
return false; // чтобы нарвал не отбирали
}
if (xi_refCharacter.id == "Bonny" && arItem.groupID == BLADE_ITEM_TYPE)
{
return false; // чтобы саблю не отбирали
}
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slayer
сообщение Sep 6 2020, 12:32
Сообщение #647


новичок
*


Группа: форумчанин (*)
Сообщений: 8
Регистрация: 2-September 20
Пользователь №: 199,708



Цитата(Slayer @ Sep 4 2020, 00:11) *

вот именно это решение и нашел)) ..просто ни разу ещё этот файл кода не смотрел . поэтому то и тормозил слегка ))

if (xi_refCharacter.id == "Mary" && arItem.groupID == BLADE_ITEM_TYPE)
{
return false; // чтобы нарвал не отбирали
}
if (xi_refCharacter.id == "Bonny" && arItem.groupID == BLADE_ITEM_TYPE)
{
return false; // чтобы саблю не отбирали
}

но даже и в этом случае у данного оффа ( например у Мери) идет анализ оружия . И она может сменить свой нарвал , по её мнению, на лучшую саблю . И часто игроки меняют ей нарвал на моргану или что то неплохое. Поэтому чтобы ваш офф вообще ничего не менял на свою саблю , просто написать отказ от анализа им оружия . Сделал я это вот так , для своего персонажа . может кому то пригодится -
-------------------------------------------------------------------------------------------
// перебор на лучшую саблю
if (groupID == BLADE_ITEM_TYPE)
{
if (chref.id == "Bonny") // чтобы саблю даже на лучшее не меняла вообще НИКОГДА!
{
return "";
}
// формула лучшего выбора
//( 20 + ( 0.6 * bAttack + 0.4 * bAttack * GetCharacterSkill(chref, refItm.FencingType) * ( 1 + ( 1 - bBlnce ) * ( bBlnce - 1 ) / 5 ) ) / Wght
curBladeValue = (20.0 + (0.6 * stf(refItm.Attack) + 0.4 * stf(refItm.Attack) * (GetCharacterSkill(chref, refItm.FencingType) / SKILL_MAX) * (1.0 + (1.0 - stf(refItm.Balance)) * (stf(refItm.Balance) - 1.0)/5.0) ) ) / stf(refItm.Weight);

if (curBladeValue > maxBladeValue)
{
maxBladeValue = curBladeValue;
resultItemId = refItm.id;
}
}
else
{
return refItm.id;
}
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Verdugo
сообщение Sep 13 2020, 13:36
Сообщение #648


новичок
*


Группа: форумчанин (*)
Сообщений: 7
Регистрация: 22-August 20
Пользователь №: 198,224



Здравствуйте.
У меня в игре есть амулет, который по задумке должен был предотвращать контузию, получаемую при ударе. И я хотел добавить ему такую способность.
В файле LAi_fightparams есть функция "LAi_NPC_EnableStun", но я не нашел в коде PostEvent для этой функции, и сама она больше нигде не упоминается.

Код
//Разрешён ли стан после удара
#event_handler("NPC_Event_EnableStun","LAi_NPC_EnableStun");
bool LAi_NPC_EnableStun()
{
    aref chr = GetEventData();
    if(CheckCharacterPerk(chr, "SwordplayProfessional")) {
        if(rand(100) < 60) npc_return_tmpb = false;
        else npc_return_tmpb = true;
    } else {
        if(CheckCharacterPerk(chr, "AdvancedDefense")) {
            if(rand(100) < 30) npc_return_tmpb = false;
            else npc_return_tmpb = true;
        } else {    
            if(CheckCharacterPerk(chr, "BasicDefense")) {
                if(rand(100) < 20) npc_return_tmpb = false;
                else npc_return_tmpb = true;
            } else {
                if(rand(100) < 10) npc_return_tmpb = false;
                npc_return_tmpb = true;
            }
        }    
    }    
    return npc_return_tmpb;
}


Вопрос к знающим людям - должна ли эта функция, исходя из ее названия, работать только для NPC, но не для Игрока? И если так, то есть ли отдельный метод специально для ГГ?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Verdugo
сообщение Sep 13 2020, 14:37
Сообщение #649


новичок
*


Группа: форумчанин (*)
Сообщений: 7
Регистрация: 22-August 20
Пользователь №: 198,224



Если она должна работать для всех персонажей, то происходит это немного странно...
Поставил в LAi_NPC_EnableStun простую проверку на наличие амулета, и вроде все заработало:

if(IsEquipCharacterByArtefact(chr, "totem_05")) return false;

при одетом амулете персонаж стоит столбом и не дергается от ударов.
Тогда я сделал амулет, как мультипликатор шанса блокировки дергача:
if(rand(100) < 30*(1+amulet)), но при тестировании заметил, что эти вероятности работают только у NPC.
Блейз же либо весь бой дергается, либо весь бой стоит как столб. dry.gif

Чтобы понять, каким образом опрашивается эта функция, поставил Log_info перед return:

Log_SetStringToLog("ID: " + chr.id + " Index: " + chr.index + " is stun enable: " + npc_return_tmpb);

И тогда увидел, что LAi_NPC_EnableStun запрашивается при загрузке локации, для всех персонажей в локации, включая Блейза.
Затем она опрашивается (постоянно?) для всех персонажей, находящихся в режиме боя, кроме Блейза. А Блейз не меняет свой стан-статус во время боя, и воюет с тем npc_return_tmpb, который ему выпал при загрузке в локацию. И сохраняет его до следующей перезагрузки.
Может быть, есть способ вручную дернуть эту функцию для ГГ, хотя бы при одевании/снятии амулета? Я так и не разобрался в этой системе эвентов. Пробовал отправить:

PostEvent("NPC_Event_EnableStun", 10, "i", GetMainCharacter());

при этом выходит Log_info, и npc_return_tmpb Блейза меняется. Возможно, это нужно делать иначе, т.к. на этом все действие и оканчивается...
Недавно переустановил игру со Steam. Взял ГГ с перком 'Проф. Фехт.', стравил его с офицером, и на дефолтной игре та же самая картина.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Slayer
сообщение Sep 14 2020, 00:25
Сообщение #650


новичок
*


Группа: форумчанин (*)
Сообщений: 8
Регистрация: 2-September 20
Пользователь №: 199,708



Цитата(Verdugo @ Sep 13 2020, 14:37) *


Недавно переустановил игру со Steam. Взял ГГ с перком 'Проф. Фехт.', стравил его с офицером, и на дефолтной игре та же самая картина.

пуп в игре не работает . Я сделал след. образом вот так -


Прикрепленные изображения
Прикрепленное изображение
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Sep 18 2020, 22:30
Сообщение #651


юнга
**


Группа: форумчанин
Сообщений: 25
Регистрация: 20-July 20
Пользователь №: 194,252



(ВМЛ) Подскажите проверку (или в каком месте в коде можно найти подобное), находится ли ГГ сейчас в море.
Не на суше/карте мира/каюте/палубе/абордаже, а именно в море на корабле от 3-го лица.

Пробовала IsEntity(Sea) / IsEntity(&Sea) / IsEntity(AISea) / IsEntity(&AISea), но результат не оправдал ожиданий.

UPD: разобралась, но решила делать по-другому.

На случай если кому понадобится, потестите это:
if (bSeaActive && !bAbordageStarted)
или:
if (bSeaActive && !bAbordageStarted && SeaCameras.Camera != "SeaDeckCamera")
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BUKA_E}l{EBUKA
сообщение Sep 21 2020, 18:38
Сообщение #652


юнга
**


Группа: форумчанин
Сообщений: 25
Регистрация: 20-July 20
Пользователь №: 194,252



(ВМЛ) Спустя некоторое время после окончания битвы на суше, игра позволяет сохраняться.

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

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

Буду весьма признательна если кто-то поопытнее мне подскажет что делать

P.S.
Файл 'options' в порядке, я его регулярно чищу.
Хоть я и повысила лимит на кол-во сейвов, но папку время от времени освобождаю и обычно в ней 15-70 файлов.
Быстрым сохранением не пользуюсь.

В error.log нет ничего кроме постоянно появляющихся
Код
RUNTIME ERROR - file: seadogs.c; line: 590
Save - ARef to non existing attributes branch
где строка 590 это закрывающая '}' функции 'void OnSave()'

UPD:
Поковырялась еще и обнаружила некое несоответствие кода и первым 2/3 времени проведенного мной в игре.

Как было у меня со старта игры:
Во время битвы (при наличии живых врагов) - 1. иконки моргают красным
2. нельзя сохраняться, неважно вытащено оружие или нет
После битвы (живых врагов не осталось) - проходит некоторое время, моргание прекращается и можно сохраняться (черт подери, это моргание на протяжении многих десятков часов прохождения служило у меня индикатором когда игра разрешит засейвица)

Как должно быть согласно коду:
Во время битвы - 1. можно сохраняться если оружие убрано, я не вижу никаких проверок на наличие в локации враждебных юнитов
2. никаких "спустя некоторое время" я тоже не вижу, убрал оружие - сейвись хоть прям сразу

Кто еще помнит свои похождения ВМЛ - как было у вас?


UPD2:
AlexusB, по поводу строки из этого ченджлога:
"15. Переделал запрет сохранения в бою. Раньше при мигании тревоги был запрет. Теперь запрет, только если боевой режим (обнажен меч)."
Вы случайно не помните, что и где там менялось?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Verdugo
сообщение Вчера, 23:59
Сообщение #653


новичок
*


Группа: форумчанин (*)
Сообщений: 7
Регистрация: 22-August 20
Пользователь №: 198,224



Глянул мельком, на истину не претендую. rolleyes.gif

Цитата(BUKA_E}l{EBUKA @ Sep 21 2020, 18:38) *

(ВМЛ) Спустя некоторое время после окончания битвы на суше, игра позволяет сохраняться.
Но некоторое время назад появилась проблема:
Иконки персонажей продолжают моргать красным и все еще звучит боевая музыка.
И пока локацию не сменишь, это не прекратится.


У меня стоит не ВМЛ, но скрипты похожие. Может быть и у вас это сработает, как у меня.
Я просто повесил все эти команды на клавишу F10 в Debuger.c
Команды см. в LAi_groups.c

Например, вы подрались в таверне с офицером - враг уже помер давно, а аларм все не проходит:

Код
void ActiveF10Control()
{
    LAi_grp_playeralarm = 0;
    LAi_grp_alarmactive = false;
    LAi_group_Release();
    Sound_OnAlarm(false);
}

Война выключается, можно беседовать с барменом/выпивохами и т.д, никто ругаться не будет.
У меня в ККС, по крайней мере, это работает.

Если сохраниться по прежнему нельзя, может быть, туда стоит добавить:

InterfaceStates.Buttons.Save.enable = 1;


Если, допустим, вы начали колотить охранника в городе, а потом вдруг передумали biggrin.gif

void ActiveF10Control()
{
SendMessage(&LAi_grp_relations, "s", "LoadDataRelations");
}

Восстанавливает отношение (из объекта, вероятно?).

Или вы уже поколотили охранника, потом сменили локацию (зашли в кабак, например)
а кабатчик называет грязным убийцей, и не хочет налить рому laugh.gif

void ActiveF10Control()
{
SendMessage(&LAi_grp_relations, "s", "RestoreStates");
}

При смене локации, горькие обиды пишутся (в объект, вероятно?).

Цитата

В error.log нет ничего кроме постоянно появляющихся
RUNTIME ERROR - file: seadogs.c; line: 590
Save - ARef to non existing attributes branch


У меня в скриптах ВМЛ строка 590 это:
void ClearLocationsSaveData()
{
aref loc = GetEventData(); // а это, вероятно, искомый ARef
SendMessage(loc, "l", MSG_LOCATION_CLRCHRPOSITIONS);
}



Цитата

Как было у меня со старта игры:
Во время битвы (при наличии живых врагов) - 1. иконки моргают красным
2. нельзя сохраняться, неважно вытащено оружие или нет
После битвы (живых врагов не осталось) - проходит некоторое время, моргание прекращается и можно сохраняться (черт подери, это моргание на протяжении многих десятков часов прохождения служило у меня индикатором когда игра разрешит засейвица)

Как должно быть согласно коду:
Во время битвы - 1. можно сохраняться если оружие убрано, я не вижу никаких проверок на наличие в локации враждебных юнитов
2. никаких "спустя некоторое время" я тоже не вижу, убрал оружие - сейвись хоть прям сразу


Гляньте в LAi_fight.c
или в LAi_player.c
может быть, это оно?

CODE
//Процессирование типа персонажа
void LAi_type_player_CharacterUpdate(aref chr, float dltTime)
{
float time;
if(SendMessage(chr, "ls", MSG_CHARACTER_EX_MSG, "IsActive") != 0)
{
chr.chr_ai.type.weapontime = "0";
}
if(LAi_group_GetPlayerAlarm())
{
chr.chr_ai.type.weapontime = "0";
}
if(LAi_IsFightMode(chr)) // <<<<<<<<<< ?
{
time = stf(chr.chr_ai.type.weapontime) + dltTime;
chr.chr_ai.type.weapontime = time;
if(time > 300.0) // <<<<<<<<<< "спустя некоторое время"?
{
chr.chr_ai.type.weapontime = "0";
SendMessage(chr, "lsl", MSG_CHARACTER_EX_MSG, "ChangeFightMode", false); // <<<<<<<<<< ?
}
}else{
chr.chr_ai.type.weapontime = "0";
}
}


Цитата

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


Наверное, вот так:

Код
bool QuickSaveGameEnabled()
{
    bool TmpBool = true;
    //if(LAi_group_IsActivePlayerAlarm() && !bBettaTestMode) TmpBool = false; // <-- "Раньше при мигании тревоги был запрет."
    ref mchref = GetMainCharacter();
    if (LAi_IsFightMode(mchref) && !bBettaTestMode) TmpBool = false; // <-- "Теперь запрет, только если боевой режим (обнажен меч)."
    if(!LAi_IsCharacterControl(GetMainCharacter())) TmpBool = false;
    if (dialogRun) TmpBool = false;
    if (IsEntity(worldMap)) TmpBool = true;
    return TmpBool;
}


User is offlineProfile CardPM
Go to the top of the page
+Quote Post

33 страниц V « < 31 32 33
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 24th September 2020 - 00:56
Яндекс цитирования Rambler's Top100
Rambler's Top100