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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 69 70 71 72 73 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Ashram
сообщение Nov 13 2005, 15:45
Сообщение #1736


Level 1


Класс: Обыватель
Характер: Chaotic Good
Раса: Эльф



Здравствуйте.
У меня такой вопрос:
Как сделать, чтобы при взломе двери игроком, находящиеся рядом охранники НПС становились для него враждебными, и нападали?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Nov 13 2005, 16:05
Сообщение #1737


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Ashram @ Nov 13 2005, 15:45)
Как сделать, чтобы при взломе двери игроком, находящиеся рядом охранники НПС становились для него враждебными, и нападали?

скриптами на слоты onDamage onUnLock двери.
логика там простая: берем дамагера/анлокера и натравливаем на него охрану, что рядом.
функции:
Neverwinter Script Source
object GetLastDamager(object oObject=OBJECT_SELF)

object GetLastUnlocked()

object GetObjectByTag(string sTag, int nNth=0)

void DetermineCombatRound(object oIntruder = OBJECT_INVALID, int nAI_Difficulty = 10)


Добавлено в [mergetime]1131887341[/mergetime]
с такими вопросами малек не сюда. Тривиальные скрипты и прочие начальные вопросы в тему "Вопросы новичков".
+ посмотри обязательно тему "Вопросы и Ответы". Там же есть ссылка на туториал. Читать обязательно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 13 2005, 23:18
Сообщение #1738


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Хм, такой вопросик.
Как отследить, кто первым начал бой, герой или НПС?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 13 2005, 23:40
Сообщение #1739


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (-fenix- @ Nov 14 2005, 02:18)
Как отследить, кто первым начал бой, герой или НПС?

Ну НПС редко сам нападает :) Говори нормально. Где отследить, на шарде или сингл. Ситуацию... Как первый раз за мужем.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Nov 14 2005, 00:02
Сообщение #1740


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



хм.. по идее в слоте onAttack NPC смотрим. Если во время атаки игрока НПС нейтрален и не в бою, то игрок по идее напал первый.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 14 2005, 01:01
Сообщение #1741


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (Lex @ Nov 14 2005, 01:02)
хм.. по идее в слоте onAttack NPC смотрим.

Неа Лекс, не прет.
Ведь слот запускается не при клике на атаку. Ну, когда нажимаешь мирного атаковать. А в момент удара и вэтот же момент НПС становется враждебным и боевым. При чем это происходит раньше, чем проверка в слоте.
Вот это не пашет
Neverwinter Script Source
void main()
{
object oPC = GetLastAttacker();
int iPCvsNPC = GetReputation(OBJECT_SELF, oPC);

if(iPCvsNPC > 10)
{
SpeakString("FEfef");
}
}

А это пашет
Neverwinter Script Source
void main()
{
object oPC = GetLastAttacker();
int iPCvsNPC = GetReputation(OBJECT_SELF, oPC);

if(iPCvsNPC < 11)
{
SpeakString("FEfef");
}
}

Так, точно пора отдыхать :crazy:

QUOTE (Aiwan @ Nov 14 2005, 00:40)
Ну НПС редко сам нападает

Угу. Видимо прейдется учитывать экстренные моменты, когда НПС сам начинает бой, при смерти НПС. Например, атака не там заснувшего ПС.

QUOTE (Lex)
Cдается место. Дорого.

За сколько :oops:

Сообщение отредактировал -fenix- - Nov 14 2005, 01:02
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Nov 14 2005, 02:31
Сообщение #1742


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

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



QUOTE
-----------------------------------
|                                |
|  Тут могла быть ваша реклама    |
|                                |
-----------------------------------
покупайте наших слонов, наши слоны самые слоничтые слоны в мире 8(

Neverwinter Script Source
if(iPCvsNPC > 10)

не хостайловый
Neverwinter Script Source
if(iPCvsNPC < 11)

хостайловый...

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 14 2005, 04:26
Сообщение #1743


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (2_advanced @ Nov 14 2005, 03:31)
не хостайловый

QUOTE (2_advanced @ Nov 14 2005, 03:31)
хостайловый...

Эм, не понял, что есть хостайловый :sorry:

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 04:47
Сообщение #1744


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



Фракция Hostile (Хостайл) - "враждебный".
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
2_advanced
сообщение Nov 14 2005, 05:43
Сообщение #1745


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

Класс: Вор
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]



в смысле если ПС ударил НПС, то НПС становится враждебным :DB: при этом ставить на ПЦ флаг напавшего
а если моб первым начал, то это можно узнать, изменив функцию DetermineCombatRound (или что-то типа того..)
(проверку на нападение со стороны ПЦ - если флага нет, то моб начал 8( )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 07:18
Сообщение #1746


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



QUOTE (Kavin @ Nov 6 2005, 11:09)
Кроме того, я подумал сегодня и забраковал этот вариант по той причние, что если я сяду отдыхать прям у невидимого Вэйпойнта, то стража "появится из сумрака" прямо около меня. Некузяво. Ночной дозор, блин. 
Так что остается только случайное расположение Вэйпойнта. В принципе, сейчас найду функцию RandomLocation и разберусь.
О результатах отпишу. 


Отписываю о результатах.
Все ништяк.
Функция RandomLocation, как я и предполагал, работает даже без проверки верного местоположения.
Просто движок не позволяет объекту создаться за пределами карты или на недоступном месте.

Теперь стража появляется шагов за 10 от PC и подбегает к нему.
Предупреждает три раза, на четвертый раз - убивает нафиг.

Если игрок отбежал чуть дальше и снова сел - его догоняют два предыдущих стражника.
Если отбежал далеко и сел - те двое уничтожаются, и появляются два новых, снова в 10 шагах.

Lex, стоит лит этот скрипт в базу выложить?..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Nov 14 2005, 08:08
Сообщение #1747


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Kavin @ Nov 14 2005, 10:18)
Lex, стоит лит этот скрипт в базу выложить?..

Выложи тут мы посмотрим.

-fenix- вот я лично так и не понял зачем тебе узнавать кто напал первый. НПС сам не нападет, если РС не натворит дел. Соответсвенно, узнать кто первый дал по башке можно, но опять же, если НПС стоял и РС его тюкнул и не попал, то НПС не будет враждебным. (Помоему...) И эту тему уже разбирали где-то. Элементарное узнать кто начал невозможно. Можно конечно повесить на оружие евант, тюкнул по цели и записываем на нее имя, кто тюкнул и когда. Соответсвенно сверяем двух провенившихся и вычисляем кто виноват. Но это имхо не верно по соображениям морали. :this: Мы узнаем только КТО ПЕРВЫЙ УДАРИЛ. Но начать может тот кого спровоцировали. :agr:
Добавлено в [mergetime]1131945069[/mergetime]
QUOTE (Aiwan @ Nov 14 2005, 11:08)
Мы узнаем только КТО ПЕРВЫЙ УДАРИЛ. Но начать может тот кого спровоцировали.

Хотя... :) Как в жизни. Судят кто попал под раздачу. :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 14 2005, 11:21
Сообщение #1748


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (Aiwan @ Nov 14 2005, 09:08)
-fenix- вот я лично так и не понял зачем тебе узнавать кто напал первый.

Задумка такая, которая завязана на том, кто первым начал бой. Если ПС и НПС не был врагом и у ПС была одна вещь, то кой чего происходит :)

QUOTE (Aiwan @ Nov 14 2005, 09:08)
если НПС стоял и РС его тюкнул и не попал, то НПС не будет враждебным. (Помоему...)

Неа. Если ПС совершил удар, не важно попал или нет, то раунд уже начался. НПС становется враждебным и долбит ПС.

QUOTE (Aiwan @ Nov 14 2005, 09:08)
Элементарное узнать кто начал невозможно.

Ведат проглядел я тот разговор :(
Но уже и сам понял, что невозможно.
Прейдется просто другие игровые моменты учитывать.
QUOTE (Aiwan @ Nov 14 2005, 09:08)
Судят кто попал под раздачу.

Объясни потом игроку :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Nov 14 2005, 14:17
Сообщение #1749


Level 11
***

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



Напишите плиз скриптик где НПС нагибается к бассеину и полностью вылечивается(типо как в Принце Персии).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Nov 14 2005, 14:41
Сообщение #1750


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



Поставь скрипт на строчку в диалоге:
Neverwinter Script Source
void main()
{
object oNPC = GetObjectByTag("ТАГ НПС");
object oBass= GetObjectByTag("ТАГ БАССЕЙНА");
effect eHeal = EffectHeal(100);
ActionDoCommand(AssignCommand(oNPC, ClearAllActions()));//Почистим акции у НПС
ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oBass,FALSE))); //Подойдем к бассейну
ActionDoCommand(AssignCommand(oNPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0f,5.0f)));//"Копошится"
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oNPC));//Вылечим НПС
}

ЗЫ: в Принца Персии, я не играл.
ЗЗЫ: сорри, просто скрипт я оч. быстро писал, торопился.
А вы уж, "запинали" :crazy:

Сообщение отредактировал Dik Morris - Nov 14 2005, 15:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 14:42
Сообщение #1751


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



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

Или из фонтанчика для птиц (есть такой плейсебл) набирает (анимация, когда игрок типа ключом дверь открывает...), а потом пьет.
Пить - ANIMATION_FIREFORGET_DRINK.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 14 2005, 14:52
Сообщение #1752


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Dik Morris, только тут не
Neverwinter Script Source
effect eHeal = EffectHeal(100);

А
Neverwinter Script Source
effect eHeal = EffectHeal(GetMaxHitPoints(oPC));

или вообще
Neverwinter Script Source
effect eHeal = EffectHeal(GetMaxHitPoints(oPC) - GetCurrentHitPoints(oPC));

:)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Nov 14 2005, 14:58
Сообщение #1753


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE (Dik Morris @ Nov 14 2005, 14:41)
effect eHeal = EffectHeal(100);

QUOTE (Белатрис @ Nov 14 2005, 14:17)
полностью вылечивается

несоответствие.

QUOTE (Dik Morris @ Nov 14 2005, 14:41)
ActionDoCommand(AssignCommand(oPC,  ClearAllActions())); //Почистим акции у игрока

лишнее.
QUOTE (Dik Morris @ Nov 14 2005, 14:41)
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,eHeal,oNPC));//Вылечим НПС

не в тот стек загнал команду. НПС вылечится сразу.


зы: по пункту 1 уже сказал Феникс.
Добавлено в 15:01
ЗЫЫ: непонятна диалоговая привязка скрипта. И зачем так игрок.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ashram
сообщение Nov 14 2005, 15:50
Сообщение #1754


Level 1


Класс: Обыватель
Характер: Chaotic Good
Раса: Эльф



Lex
Спасибо. Оказывается просто не правильно выбрал писал объект для нападения GetLastUsedBy а не GetLastDamager и GetLastUnlocker :D

Сообщение отредактировал Ashram - Nov 14 2005, 16:13
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 20:05
Сообщение #1755


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



ANIMATION_LOOPING_GET_MID - шевелить руками на уровне пояса.
ANIMATION_LOOPING_GET_LOW - копаться на полу.

Это в дополнение к предыдущему посту.
Добавлено в 20:09
Просили посмотреть скрипт, который заставляет стражу появляться и подбегать к отдыхающему игроку.


Neverwinter Script Source
string MASTER_OBJECT_TAG="guard1";
   string COPY_1_TAG="patrol_guard1";
   string COPY_2_TAG="patrol_guard2";
   string WARNINGS_VARIABLE_NAME="area_warnings_count";
   string REST_TYPE_TRIGGER_TAG="RestTypeTrigger";

   float DISTANCE_TO_RUN=10.0;
   float DISTANCE_TO_SEE=20.0;

   object oPC = GetLastPCRested();
   object patrol_guard1=GetObjectByTag(COPY_1_TAG);
   object patrol_guard2=GetObjectByTag(COPY_2_TAG);


         SetLocalString(GetArea(oPC), "guard1_tag", COPY_1_TAG);
                SetLocalString(GetArea(oPC), "guard2_tag", COPY_2_TAG);

                if ((!(GetIsObjectValid(patrol_guard1))
                                &&
                    !(GetIsObjectValid(patrol_guard2)))
                                ||
                    ((GetDistanceBetween(patrol_guard1, oPC)>DISTANCE_TO_SEE)
                    &&
                    (GetDistanceBetween(patrol_guard2, oPC)>DISTANCE_TO_SEE)))
                    {
                    DestroyObject(patrol_guard1);
                    DestroyObject(patrol_guard2);
                    patrol_guard1=CreateClone(GetObjectByTag(MASTER_OBJECT_TAG), RandomLocation(oPC, DISTANCE_TO_RUN, TRUE), COPY_1_TAG, 0.0);
                    patrol_guard2=CreateClone(GetObjectByTag(MASTER_OBJECT_TAG), RandomLocation(oPC, DISTANCE_TO_RUN, TRUE), COPY_2_TAG, 0.0);
                    }
               AssignCommand(patrol_guard1, ActionMoveToObject(oPC, TRUE, 1.0));
               AssignCommand(patrol_guard2, ActionMoveToObject(oPC, TRUE, 1.0));
               AssignCommand(patrol_guard1, ActionStartConversation(oPC, "patrol"));
               if (GetLocalInt(GetArea(oPC), WARNINGS_VARIABLE_NAME)<4)
                    SetLocalInt(GetArea(oPC), WARNINGS_VARIABLE_NAME, GetLocalInt(GetArea(oPC), WARNINGS_VARIABLE_NAME)+1);
               SetLocalObject(patrol_guard1, "CRIMINAL", oPC);
               if (GetLocalInt(GetArea(oPC), WARNINGS_VARIABLE_NAME)>=4)
                    {
                    //ExecuteScript("action_arrest", OBJECT_SELF);
                    DelayCommand(3.0, AdjustReputation(oPC, patrol_guard1, -100));
                    DelayCommand(3.0, AssignCommand(patrol_guard1, ActionAttack(oPC)));
                    DelayCommand(3.0, AssignCommand(patrol_guard2, ActionAttack(oPC)));
                    }
           

Добавлено в [mergetime]1131988315[/mergetime]
Функция CreateClone была предоставлена мне AliceDiren, поэтому публиковать буду после ее разрешения. :oops:

Сообщение отредактировал Kavin - Nov 14 2005, 20:10
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 20:44
Сообщение #1756


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



М-дя. Я опять застрял на мертвой точке.
Подскажите, пожалуйста, что сделать для того, чтобы, если определенное условие выполнилось, отдых прервался сразу же?..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Nov 14 2005, 20:50
Сообщение #1757


Level 7
**

Класс: Маг
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [Sn]



Kavin, отдых прерывается очисткой стека акций. ClearAllActions
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Nov 14 2005, 21:17
Сообщение #1758


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



О Боги! Такую элементарщину упустить из виду!!! Заработался совсем...
Забаньте меня, тупицу. :xz:

AliceDiren, Спасибо!
Добавлено в [mergetime]1132048002[/mergetime]
Написал функцию, которая определяет наличие необходимых для отдыха предметов (костер и bedroll), и если чего-то не хватает, то выдает FloatingText, чего не хватает.
В случае, если есть все для отдыха - она должна заставлять игрока подбегать к bedrollу, ложиться на него и отдыхать.

Все работает, условия отдыха срабатывают, кроме одного: игрок где сидит - там и брякается на отдых, нифига не ложась на кровать.

Вызов функции стоит на OnPlayerRest модуля, результат, возвращаемый функцией, служит сигналом для стражи.

Что мне сделать для того, чтоб задержать отдых до того времени, когда игрок добежит до кровати, и как вставить анимацию?..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Nov 15 2005, 12:57
Сообщение #1759


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

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Это уже разбиралось очень подробно. Феникс, делая свою систему сталкнулся с этой же проблемой.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Nov 15 2005, 17:03
Сообщение #1760


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Kavin, тут есть пара тонкостей.
Например, ты можешь прервать отдых функцией ClearAllActions(), потом сделать анимацию и что-то еще и потом, как думается, нужно сделать ActionRest().
Ан нет, дело в том, что ActionRest() вызывает событие OnPlayerRest, короче это то же, что и иконка века. В результате получается бесконечный цикл и игра виснет.
Если хочешь вставить свою анимацию или чего еще перед отдыхом, то нужно отменять отдых и юзать функцию ForceRest(object oCreature). Но это не очень хорошо, так как убирается полоска отдыха, все хиты вылечиваются и эффекты снимаются мгновенно, не действуют ограничения на отдых: если рядом враг, если ПС в бою...
Вобщем, все что надумал, это писать свою функцию, которая проверяет врагов поблизости и состояние героя, потом оценивает хиты и постипенно их восполняет, а так же удаление эффектов через некоторое время. А вот полоску сделать не получется.
Времени сейчас разбираться со своим отдыхом нет(я тебе уже говорил). Поэтому, если нужно, пиши функцию сам, я не знаю, когда сяду за нее.
Надеюсь помог :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 69 70 71 72 73 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 1st May 2025 - 11:43