Город Мастеров
IPB

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 7 8 9 10 11 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
Zmeika
сообщение Jun 12 2008, 00:45
Сообщение #201


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



Подскажите, пожалуйста, как можно сделать так, чтобы мертвый НПС лежал не в дефолтовой скрюченной позе, а в положении лежа на спине? Пытаюсь делать так:
Код
object oPC = GetFirstEnteringPC();    

//Здесь непись еще живой    
object oNPC = GetNearestObjectByTag("DEAD_NPC",oPC);

// убиваем его
effect eF1 = EffectDeath();
ApplyEffectToObject( DURATION_TYPE_INSTANT,eF1, oNPC);

// потом пытаемся перевернуть на спину - и не выходит
PlayCustomAnimation(oNPC, "proneB",TRUE, 1.f);


Есть альтернативный вариант - втихую оставить его живым, но симитировать смерть.
Код
// делаем так, чтобы живой НПС совсем не шевелился
effect eF3 = EffectPetrify();
ApplyEffectToObject( DURATION_TYPE_INSTANT,eF3, oNPC);

// переворачиваем на спину  - работает
PlayCustomAnimation(oNPC "proneB", TRUE, 1.f);


Второй вариант выглядит замечательно, пока не навести на НПС курсор - он показывает, что клиент жив! Млжно ли как-то обмануть курсор в этом случае?

Сообщение отредактировал Zmeika - Jun 12 2008, 17:00
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Jun 13 2008, 14:51
Сообщение #202


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Zmeika, попробуй поэкспериментировать со свойствами NPC, такими как Non permanent death и Lootable corpse. Попробуй выставить второе свойство в true и после применения анимации нанести ему смертельные повреждения.
Лично я бы просто добавил к имени этого НПСа приставку "МЕРТВЫЙ" и успокоился бы. Imho, и так все хорошо, совершенства не бывает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 14 2008, 14:41
Сообщение #203


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



Lorendroll, спасибо. После долгих экспериментов с трупами мне все же удалось добиться нужного результата. (IMG:style_emoticons/kolobok_light/smile.gif) Нужно делать так:

Код
// Создаем эффект смерти.  Внимание - важно, чтобы последний параметр был false!
effect eDeath = EffectDeath(FALSE, FALSE,TRUE, FALSE);

// Создаем эффект неподвижности
effect ePetrify = EffectPetrify();
  
PlayCustomAnimation(oNPC, "proneB",TRUE, 1.f);
ApplyEffectToObject(DURATION_TYPE_INSTANT, ePetrify, oNPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oNPC);


Т.е. перед смертью нужно применить неподвижность, и эффект смерти должен быть соответствующе настроен. Но это еще не все. Надо удалить у NPC скрипты, которые выполняются по дефолту на различные события. Разумеется не все, но какие именно я пока сама не знаю. Какой-то из них все портит. on Conversation или on Spawn In точно можно оставить.

Только при соблюдении всех этих условий тушка после смерти остается в нужной позе. (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zmeika
сообщение Jun 27 2008, 12:38
Сообщение #204


Level 3
*

Класс: Рейнджер
Характер: Neutral Good
Раса: Человек



Как можно создавать или менять переменную типа location? Знаю, как ее получить из уже существующего объекта. Но мне надо создать новый объект (существо) на некотором расстоянии от игрока и по событию, которое может спровоцировать сам игрок в любой момент времени (например - вызвать джина из бутылки).
Т.е. locаtion игрока - я определить могу. Но затем мне нужно ее поменять каким-то образом, чтобы нужная тварюка появилась на некотором расстоянии от игрока.
Вопрос - как это сделать?


Update:
Сорри, вопрос снимается - узнала, что есть такой метод Location(....)

Сообщение отредактировал Zmeika - Jun 27 2008, 12:45
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Jul 27 2008, 12:00
Сообщение #205


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Никто случайно не разобрался как превратить игрока в виспа? (наложить на него fx эффект)

Сообщение отредактировал Lorendroll - Jul 27 2008, 12:01
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Aug 6 2008, 14:29
Сообщение #206


Level 9
Иконки Групп

Класс: Вор
Характер: Chaotic Good
Раса: Эльф
МАСТЕР Переводов



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

Neverwinter Script
void main();
{

object oPC = GetPCSpeaker();

ClearAllActions();
          ActionPlayAnimation(ANIMATION_LOOPING_DANCE02, 1.0, 4,0);
          ActionPlayAnimation(ANIMATION_LOOPING_DANCE03, 1.0, 4.0);
          ActionPlayAnimation(ANIMATION_LOOPING_DANCE02, 1.0, 4.0);
          ActionPlayAnimation(ANIMATION_FIREFORGET_BOW);
}


Не срабатывает. При компиляции выдает какой-то бред - название, путь сохранения и неизвестно что еще. Причем, непонятно, на какую строчку плюется и где непосредственно ошибка... Подскажите, плз, что с этим делать... (IMG:style_emoticons/kolobok_light/sad.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Aug 6 2008, 17:53
Сообщение #207


Level 9
Иконки Групп

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



shadowdweller, я в свое время делал различные эффекты, которые нельзя было бы снять простым действием, и вот что получилось. Можешь отсюда использовать скрипт танца:
Neverwinter Script
// Персонаж танцует
void ChatDance(object oPC, int n, float fTime);

void main()
{
    object oPC = GetPCSpeaker();
    object oTarget = GetItemActivatedTarget();
    int nDialogLine = GetLocalInt(oPC, "DIALOGSTMLINE");
    int nAnimation;
    float fTime = 999999.0;

    SetCommandable(TRUE, oTarget);
    AssignCommand(oTarget, ClearAllActions());

    SetLocalInt(oTarget, "DIALOGSTMLINE", nDialogLine);

    switch (nDialogLine)
    {
        case 1: nAnimation = ANIMATION_LOOPING_SIT_CROSS;  break; // Сесть
        case 2: nAnimation = ANIMATION_LOOPING_MEDITATE;    break; // Медитация
        case 3: nAnimation = ANIMATION_LOOPING_WORSHIP;    break; // Молитва
        case 4: nAnimation = ANIMATION_LOOPING_DEAD_BACK;  break; // Упасть назад
        case 5: nAnimation = ANIMATION_LOOPING_DEAD_FRONT;  break; // Упасть вперед
        case 6: nAnimation = ANIMATION_LOOPING_SPASM;      break; // Спазм
        case 7: ChatDance(oTarget, 1, fTime);              break; // Танец
    }
    DeleteLocalInt(oPC, "DIALOGSTMLINE");
    DelayCommand(0.2, SetCommandable(FALSE, oTarget)); // убери эту строчку, если нужно, чтобы эффект был снимаемым

    if (nDialogLine < 7)
    {
        DelayCommand(0.1, AssignCommand(oTarget, ActionPlayAnimation(nAnimation, 1.0, fTime)));
    }
    else if (nDialogLine == 8) // Парализация
    {
        effect eDur = EffectVisualEffect(VFX_DUR_PARALYZED);
        effect eLink = EffectLinkEffects(eDur, EffectCutsceneParalyze());
        DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eLink), oTarget)));
    }
    else if (nDialogLine == 9) // Ошеломление
    {
        effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATE
D);
        effect eLink = EffectLinkEffects(eMind, EffectStunned());
        DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eLink), oTarget)));
    }
    else if (nDialogLine == 10) // Окаменение
    {
        DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectPetrify()), oTarget)));
    }
    DelayCommand(fTime, SetCommandable(TRUE, oTarget)); // убери эту строчку, если нужно, чтобы эффект был снимаемым
}


void ChatDance(object oPC, int n, float fTime)
{
    int nDialogLine = GetLocalInt(oPC, "DIALOGSTMLINE");

    if (IntToFloat(n) < fTime && nDialogLine == 7)
    {
        object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
        object oLeftHand =  GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);

        AssignCommand(oPC, ActionUnequipItem(oRightHand));
        AssignCommand(oPC, ActionUnequipItem(oLeftHand));

        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));
        AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC
)));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN
G, 2.0, 2.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3,2.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 3.0, 1.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFU
L,1.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));
        AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC
)));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN
G, 2.0, 2.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3,2.0));
        AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC
)));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 3.0, 1.0));
        AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0));

        AssignCommand(oPC, ActionDoCommand(ActionEquipItem(oLeftHand,INVENTOR
Y_SLOT_LEFTHAND)));
        AssignCommand(oPC, ActionDoCommand(ActionEquipItem(oRightHand,INVENTO
RY_SLOT_RIGHTHAND)));
        n++;
        DelayCommand(20.0, ChatDance(oPC, n, fTime));
    }
}

Чтобы скрипт заработал, необходимо вначале на использующего диалог, предмет и т.п. наложить переменную:
Neverwinter Script
void main()
{
    SetLocalInt(GetPCSpeaker(), "DIALOGSTMLINE", 1);
}

Так как у меня эффектов 10, то я использовал 10 мелких скриптов. Можно сделать иначе, но я не стал возиться, чтобы укоротить количество скриптов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
KoYuKi
сообщение Aug 7 2008, 23:49
Сообщение #208


Level 6
**

Класс: Варвар
Характер: Chaotic Good
Раса: Полуорк



Дело такое:
Есть необходимость иметь глобальную переменную. Нужно, чтобы эта переменная, в зависимости от действий производимых персонажем, менялась и сохранялась поверх себя, чтобы с уже новым значением скрипты могли взаимодействовать дальше.
В принципе я себе представляю как это сделать, но запоролся в самом начале, видимо что-то с синтаксисом напутал. Вобщем, не могу вызвать глобальную переменную. Перед этим эту переменную я прописал в свойствах модуля. Если не ошибаюсь вызывается она в скриптах при помощи GetGlobalInt()(сейчас тула под рукой нет, точно не вспомню чего я там вчера ваял), но при компиляции тул ругается на эту строчку, так как я очевидно задаю неверные параметры.
Вобщем сама просьба такова - привидите пожалуйста какой-нибудь пример с назначением и последующим вызовом глобальных переменных, разжовывать не надо, сам расковыряю, лишь бы пример рабочий был.
Буду очень признателен.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Aug 8 2008, 10:24
Сообщение #209


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



KoYuKi, чтобы при компиляции выдавал не какой нибудь бред а реальную ошибку - поставь английский Dialog.tlk и перезапусти тулсет. Иногда скрипты даже не компилируются из за русского диалог.тлк. А уж если русские буквы в код попадут то и весь тулсет бывает падает. Перезапустишь - напиши что за ошибка компиляции выдается.
А SetGlobalInt'ом, кстати, за всю свою нвн-программерскую деятельность мне пользоваться не приходилось. Кстати, почему бы не сохранить эту глобальную переменную на самом персонаже - SetLocalInt(oPC, sIntName, N)?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
KoYuKi
сообщение Aug 8 2008, 11:51
Сообщение #210


Level 6
**

Класс: Варвар
Характер: Chaotic Good
Раса: Полуорк



Цитата
KoYuKi, чтобы при компиляции выдавал не какой нибудь бред а реальную ошибку - поставь английский Dialog.tlk и перезапусти тулсет. Иногда скрипты даже не компилируются из за русского диалог.тлк. А уж если русские буквы в код попадут то и весь тулсет бывает падает. Перезапустишь - напиши что за ошибка компиляции выдается.

NWN у меня английский, так что мне там вполне конкретную ошибку компилятор выдал, я сейчас просто не помню какую, с работы пишу.

Цитата
А SetGlobalInt'ом, кстати, за всю свою нвн-программерскую деятельность мне пользоваться не приходилось. Кстати, почему бы не сохранить эту глобальную переменную на самом персонаже - SetLocalInt(oPC, sIntName, N)?

Lorendroll, этот вариант мне плохо представляется, вероятно в связи с маленьким багажом знаний.
То есть я сохраняю на игроке локальную переменную. Он ходит, взаимодействует с предметами, в связи с чем эта локалка меняется и сохраняется на игроке. Но возможно ли мне при таком подходе сделать так, чтобы значение переменной уменьшалось без каких либо взаимодействий, просто по прошествии времени?
Если не трудно приведи какой-нибудь пример, буду признателен.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Aug 8 2008, 12:06
Сообщение #211


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



KoYuKi, да меняй ее откуда хочешь, из любого скрипта вызывай функцию SetLocalInt (oPC, sIntName, N) где object oPC = GetFirstPC(); (первый попавшийся PC, ведь ты делаешь сингл?), string sIntName = "имя твоей переменной"; int N = "значение переменной". Это в точности также как и с GlobalInt только Local в отличие от нее надо где то хранить, на каком то объекте. Откуда надо, оттуда и меняй эту переменную. Например как только игрок дергает за рычаг поставь на действии SetLocalInt(oPC, sIntName, GetLocalInt(oPC, sIntName)+N); где N - то значение которое ты хочешь прибавить к старому значению переменной.

Чтобы переменная уменьшалась или увеличивалась, или еще как-нибудь изменялась со временем, нужно написать таймер который будет, опять таки, работать либо на PC, либо еще где-то. Это сложнее. Для этого нужно зациклить скрипт таймера, не помню точно название функции запуска скрипта, кажется ExecuteScript. Скрипт таймера надо запускать раз, допустим, в 6 секунд (игровой раунд) с помощью функции DelayCommand, и вызывать снова этот делэй-команд по окончании работы скрипта-таймера. В скрипте-таймере же нужно написать то что будет происходить каждые 6 секунд. Я так подозреваю, какая-то проверка. Например проверка того, не прошло ли еще 10 минут, или 60 раундов. Для этого нужно в таймер поставить счетчик раундов или проверку текущего времени... Отдельная песня... Я напишу, если не забуду, пример когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр.

Сообщение отредактировал Lorendroll - Aug 8 2008, 12:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
KoYuKi
сообщение Aug 8 2008, 13:50
Сообщение #212


Level 6
**

Класс: Варвар
Характер: Chaotic Good
Раса: Полуорк



Lorendroll спасибо большое, теперь все ясно =) Прийду домой, буду пробовать.

Цитата
Я напишу, если не забуду, пример, когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр.

Обязательно гляну, если напишешь, пример бы не помешал.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lorendroll
сообщение Aug 9 2008, 14:53
Сообщение #213


Level 9
***

Класс: Волшебник
Характер: Neutral Good
Раса: Эльф



Этот скрипт надо вызвать командой ExecuteScript("this_script", oPC) из любого другого. object oPC = GetFirstPC() к примеру.

Neverwinter Script
void main()
{

    int iTime = 10; /*Количество раундов перед тем как переменная изменится*/
    int iTimer = GetLocalInt (OBJECT_SELF, "TIMER"); /*Смотрим сколько раундов уже прошло*/
    SetLocalInt (OBJECT_SELF, "TIMER", iTimer+1); /*Прибавляем к таймеру единичку*/
    if (iTimer+1 >= iTime) /*Проверяем не прошло ли уже достаточно времени*/
    {
        FloatingTextStringOnCreature("Something happened!", OBJECT_SELF);    /*Если условие выполнено то пишем что произошло (сообщаем игроку если надо)*/
        SetLocalInt (OBJECT_SELF, "INTEGER", GetLocalInt(OBJECT_SELF, "INTEGER")+1); /*Выставляем нужную переменную, или увеличиваем ее значение на 1 или еще что угодно. Еще полезно тут же написать второе условие при котором останавливать таймер после того как он становится ненужным, с помощью команды "return;"*/
        SetLocalInt (OBJECT_SELF, "TIMER", 0); /*обнуляем таймер*/
    }
    DelayCommand(6.0, ExecuteScript("this_script", OBJECT_SELF)); /*Перезапускаем скрипт через 6 секунд. */
       
}


Сообщение отредактировал Lorendroll - Aug 9 2008, 14:58
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melshin
сообщение Oct 15 2008, 15:28
Сообщение #214


Level 2
*

Класс: Клерик
Характер: Lawful Neutral
Раса: Человек



Вот в кои-то веки не обошелся своими силами...

Значит, существует триггер, описанный около блупринта травы, являющегося по факту "Tree". По факту триггер является трапом, процовоцирующим АОЕ спелл. Т.к. с "Tree" спеллы не пускаются, должен создаться другой блупринт, желательно невидимый.

Вариантов решения 3:
1) ActionCastSpellAtObject - не подходит, нормальный кастер лвл он имеет только с криче блупринта, а со скриптхидден кричи не запускается. В ином случае кастер лвл = 0.
2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком.
3) TriggerProjectileTrap - не удалось заставить работать. Делал путем задания правельного тэга запускающему блупринту. Опять же работает только с кричи. Разницы между моей версией и скриптом проджектил эрроу трапов из ОС нет практически, но мой скрипт не работает... Именно проджектил эрроу пока не делал...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Jadent
сообщение Oct 19 2008, 08:09
Сообщение #215


Level 4
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN2: Маппинг



Цитата(Melshin @ Oct 15 2008, 15:28) *
2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком.
В Nwn2 AOE-объекты можно создавать только скриптом с существа. Иначе AOE-объект запускает скрипты OnEnter и OnExit для всех попавших в него существ и сразу исчезает.
Пример.
Вот такой скрипт, висящий на каком-нибудь рычаге или триггере, заработает криво (как описано выше).
Neverwinter Script
void main()
{
    effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag");
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC());
}
А вот так — нормально:
Neverwinter Script
void func()
{
    effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag");
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC());
}

void main()
{
    object oCreature = GetFirstPC();
    AssignCommand(oCreature, func());
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Melshin
сообщение Oct 19 2008, 08:31
Сообщение #216


Level 2
*

Класс: Клерик
Характер: Lawful Neutral
Раса: Человек



Тогда это актуально для всех 3 пунктов. То есть то, что я хочу сделать - вообще в принципе нереализуемо... Спасибо.

Можно попробовать сделать это с катсцен инвизибилити... Хотя не стоит, слишком много там будет лишних объектов, лучше другое что-нибудь сделать.

С диспеллом, как я понял, нечто похожее. Ну это хотя бы можно без проблем эмулировать...

Хотя стоп, я же не делаю ActionCastSpellAtLocation, можно и с игрока... Но скрипт этот для PW, к слову.

Тогда еще не все потеряно.

Кстати, в случае выше АОЕ эффект будет бегать вместе с игроком, LOL.

Neverwinter Script
void func(location lTarget)
{
    effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag");
    DelayCommand *проджектил анимация*
    DelayCommand *ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eEff, GetFirstPC());* - кхм, жгу, xD.
}

void main()
{
    object oCreature = GetFirstPC();
    location lTarget = GetLocation (oCreature);
    AssignCommand(oCreature, func(lTarget));
}


В общем, никак не получится.

Блин, туплю... А также не могу редактировать посты... Наверное, их мало... В общем, не нужна тут проджектил анимация и т.д. Вполне реально сделать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DarkPhoenix
сообщение Oct 20 2008, 19:20
Сообщение #217


Level 2
*

Класс: Рейнджер
Характер: True Neutral
Раса: Эльф



Есть ли способ намертво прицепить одну модельку к другой - например чтоб над плечем игрока летала фигурка демилича (череп)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Jadent
сообщение Oct 20 2008, 21:26
Сообщение #218


Level 4
Иконки Групп

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN2: Маппинг



DarkPhoenix, это вполне реально, но практически не относится к скриптингу. Делается через кастомный vfx.

Посмотри вот этот хак и сделай по аналогии: http://nwvault.ign.com/View.php?view=NWN2V...etail&id=37
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DarkPhoenix
сообщение Oct 20 2008, 22:39
Сообщение #219


Level 2
*

Класс: Рейнджер
Характер: True Neutral
Раса: Эльф



Спасибо! А каких нибудь гидов по этому не знаеш?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Equilibrium
сообщение Dec 22 2008, 21:53
Сообщение #220


Level 2
*

Класс: Друид
Характер: True Neutral
Раса: Человек



Очень интересует вопрос - как вернуть Школу магии, на которой специализируется волшебник? Есть мнение, что оная может храниться в локальных переменных персонажа...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virus_found
сообщение Dec 23 2008, 01:04
Сообщение #221


Отверженный
****

Класс: Теневой Танцор
Характер: Neutral Good
Раса: Баатезу



да
в файле *.bic (персонажа) есть переменная School типа byte (которая находится в ветке ClassList)
значения переменной:
Цитата
0: General
1: Abjuration
2: Conjuration
3: Divination
4: Enchantment
5: Evocation
6: Illusion
7: Necromancy
8: Transmutation


а вот как попасть в этот файл персонажа через скрипты - это уже не ко мне (IMG:style_emoticons/kolobok_light/wacko.gif)

Сообщение отредактировал virus_found - Dec 23 2008, 01:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Equilibrium
сообщение Dec 23 2008, 18:09
Сообщение #222


Level 2
*

Класс: Друид
Характер: True Neutral
Раса: Человек



Спасибо!
Вопрос логически продолжается: кто знает - как добыть эту школу из файла персонажа через скрипты? ^_^
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Dec 23 2008, 18:28
Сообщение #223


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Сингл или шард? Если сингл, то никак, если шард, то можно, но сложно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Equilibrium
сообщение Dec 23 2008, 21:42
Сообщение #224


Level 2
*

Класс: Друид
Характер: True Neutral
Раса: Человек



Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Dec 23 2008, 22:04
Сообщение #225


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



Цитата(Equilibrium @ Dec 23 2008, 21:42) *
Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как?
Потому что в сингле доступны только стандартные функции НВН, которыми нельзя получить школу магии. На шардах же возможно использование NWNX с плагином NWNX-Leto, который позволяет редактировать файлы персонажей.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

14 страниц V  « < 7 8 9 10 11 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28th March 2024 - 19:48