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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 30 31 32 33 34 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Shad
сообщение Feb 21 2005, 01:25
Сообщение #761


Level 3
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Если есть placeable по которым сможешь ходить, то это хороший способ.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 21 2005, 02:00
Сообщение #762


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Я про тоже placeable есть проверял но скрипт не проверял тока идея появилась.
А хак Пак стандартный СЕР.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 21 2005, 09:58
Сообщение #763


Level 8
***

Класс: Маг
Характер: Lawful Good
Раса: Полуэльф



Nokoll прости, ошибка не в этой строчке...ошибки нет...мне нужно добавить строчку, которая перенесет туда, куда ты шел, после ролика
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Oksivarus
сообщение Feb 21 2005, 12:35
Сообщение #764


Level 4
**

Класс: Волшебник
Характер: True Neutral
Раса: Полуэльф



В разделе скриптов есть скрипт на умирание в котором (насколько я понял) есть строчька которая должна создавать пятно крови возле игрока - как ее создать, а вернее в каком разделе предметов. Я нашел в стандартной политре это пятно поставил в тут строчьку ее тег но пятно не появляется. Подскажите что нетак.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 21 2005, 15:53
Сообщение #765


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Тег не нужен добавь в скрипт эффект VFX_COM_BLOOD_CRT_RED, их в тулсете много выбери любой.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 21 2005, 16:45
Сообщение #766


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



Вопрос из области cut-сцен. Каким образом можно быстро убрать накастованые на область заклинания типа кислотного тумана? Смысл преблизительно следующий - после "мажеского" поединка включается cut-сцена. Эффекты от накастованых во время боя заклинаний просто заполняют собой экран и мешают правильному визуальному восприятию сцены. Причем надо учитывать тот факт, что на некоторых объктах области висят перманентные эффекты, которые весьма желательно сохранить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 21 2005, 17:04
Сообщение #767


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



СЛУШАЙ ВРОДЕ ТАК ПОПРОБУЙ EffectAbilityDecrease, ИЛИ EffectAbilityIncrease, ПРОСТО СЕЙЧАС ГОЛОВА ЕДЕТ немогу сосредоточится!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tarre Talliorne
сообщение Feb 21 2005, 20:09
Сообщение #768


Level 8
***

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



Перебери циклом все эффекты.
effect eE=GetFirstEffect ...
потом посмотри, если их криатер - маг1 или маг2, удаляй их.
GetEffectCreater();
цикл while (GetIsEffectValid(eE))
Добавлено в [mergetime]1109005998[/mergetime]
QUOTE (Oksivarus @ Feb 21 2005, 12:35)

В разделе скриптов есть скрипт на умирание в котором (насколько я понял) есть строчька которая должна создавать пятно крови возле игрока - как ее создать, а вернее в каком разделе предметов. Я нашел в стандартной политре это пятно поставил в тут строчьку ее тег но пятно не появляется. Подскажите что нетак.

Дело в том, что объекты создаются не по тэгу, а по ресрефу. Поэтому 2 выхода:
1. или заменяй в скрипте ресреф(в CreateObject) на ресреф пятна стандатрного, либо
2. создавай новый обжект с нужным (скрипту) ресрефом
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 22 2005, 10:06
Сообщение #769


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



>Tarre Talliorne
Нечто в этом роде я и предполагал. Громаднейшее спасибо :crazy:
Добавлено в [mergetime]1109056973[/mergetime]
А еще один мааленький вопросик: GetEffectCreater(); - насколько я пронимаю выдает объекта-криэйтора эффекта. То бишь условно говоря мага2. А если к примеру маг2 уже подох, и соответственно функция вернет INVALID'а (ну насколько я понимаю - или нет?). Надо ли onDeath мага2 к примеру вешать функцию криэйта его копии в закрытой локации или вешать какой нибудь EffectRespawn() и т.д, и только после этого удалять эффекты?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 22 2005, 11:11
Сообщение #770


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Я считаю что надо я так и делаю вешаю onDeath мага2 и только после этого удаляю эффекты. :V:
Добавлено в [mergetime]1109060073[/mergetime]
А зачем ващще EffectRespawn(), здесь незнаю :xz:
Возможно я опозорюсь но я думал что INVALID это фракцыя как и OBJECT_SELF.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 22 2005, 11:34
Сообщение #771


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



QUOTE (Nokoll @ Feb 22 2005, 11:11)
А зачем ващще EffectRespawn(), здесь незнаю :xz:


Респаун просто не даст задестроится объекту маг2, после чего его можно пихать в цикл, где будет GetEffectCreater(), после выполнения цикла дать EffectDeath() или DestroyObject() на мага2. При этом надо учитывать, что при десторое onDeath выполнится еще раз. Следовательно надо сделать еще один цикл, в котором на первом шаге снимаются эффекты, а на втором собственно маг и дохнет. Видимо как-то так. В меру моего понимания данной реализации конечно и не имея под руками Лексикона...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 22 2005, 11:42
Сообщение #772


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



QUOTE
Следовательно надо сделать еще один цикл, в котором на первом шаге снимаются эффекты, а на втором собственно маг и дохнет. Видимо как-то так. В меру моего понимания данной реализации конечно и не имея под руками Лексикона...

Попробуй так EffectDeath(), будет лучше смотреца, и поставь мою выдуманную но рабочую функцыю
DestroyEffect, иба маг умрёт со звучком даже, эффекты исчезнут. :oh:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Feb 22 2005, 13:28
Сообщение #773


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



QUOTE (Nokoll @ Feb 22 2005, 10:11)
Возможно я опозорюсь но я думал что INVALID это фракцыя как и OBJECT_SELF.

:swoon: :D
QUOTE (Grazzt @ Dark Prince, Feb 22 2005, 09:06)
А еще один мааленький вопросик: GetEffectCreater(); - насколько я пронимаю выдает объекта-криэйтора эффекта. То бишь условно говоря мага2. А если к примеру маг2 уже подох, и соответственно функция вернет INVALID'а (ну насколько я понимаю - или нет?). Надо ли onDeath мага2 к примеру вешать функцию криэйта его копии в закрытой локации или вешать какой нибудь EffectRespawn() и т.д, и только после этого удалять эффекты?

Копия объекта-креатора не будет являться креатором эффекта. Это не выход.
Выход тогда:
1. Делать TEMPORARY эффект. Подстраивать его длительность ручками.
2. Сделать креатора SetIsDestroyable(FALSE); и не бояться, что креатор дестроится, когда загнется.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 22 2005, 15:22
Сообщение #774


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



ДБ нет ты не отом подумал, я мимел в виде не то что INVALID тоже самое что и
OBJECT_SELF.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 22 2005, 15:42
Сообщение #775


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



QUOTE (DBColl @ Feb 22 2005, 13:28)
Копия объекта-креатора не будет являться креатором эффекта. Это не выход.

Тут я немножко хочу прояснить для себя c точки зрения теории: если последовательно обьект маг2 был в какой-то момент задестроен, а потом в локации был создан другой точно такой-же объект маг2. Например:
DestroyObject(bla-bla-bla);
DelayCommand(0.1,CreateObject(bla-bla-bla)); То почему с точки зрения функционирования системы он не будет являтся креатором эффекта? Ведь фактически он в конкретный момент вемени уникален -т.е. никаких других обьектов с такими тэгом и ресцефом на локации (да и во всем модуле) не присутствует. Я понимаю так, что существует некий стэк обьектов, и у обьекта, если он присутствует в локации, кроме тэга и ресцефа существует еще некий int-идентификатор. Это видно например из функции, возвращающей ближайший к объекту oPC объект: object oMage=GetNearestObjectByTag("oMage2",oPC,i); - где i - насколько я понимаю и является этим идентификатором. Следовательно, если предположить существуют 2 объекта oMage2, то у одного условно говоря в конкретный момент времени i=0, а у другого i=1 - очевидно, что объекты разные. Но если объект в конкретный момент времени ОДИН, то и значение i для него будет всегда условно говоря равно 0. Так почему для функции GetEffectCreater(); он будет ДРУГИМ объектом? Непонятно? Или у обьектов есть еще какой-то скрытый идентифицирующий их признак? Или я что-то неправильно понимаю?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Friedrich
сообщение Feb 22 2005, 18:46
Сообщение #776


Level 5
**

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



QUOTE (DBColl)
Копия объекта-креатора не будет являться креатором эффекта. Это не выход.

QUOTE (Grazzt @ Dark Prince, Feb 22 2005, 15:42)
Например:
DestroyObject(bla-bla-bla);
DelayCommand(0.1,CreateObject(bla-bla-bla)); То почему с точки зрения функционирования системы он не будет являтся креатором эффекта? Ведь фактически он в конкретный момент вемени уникален -т.е. никаких других обьектов с такими тэгом и ресцефом на локации (да и во всем модуле) не присутствует.

Рес-реф и тэг тут не причем.
А что такое object?
object - это 32 битное целое, которое указывает на определенный объект в модуле (что это - адрес в памяти или просто абсолютный номер объекта, точно не знаю, скорее второе). Имеется функция
string ObjectToString(object), возвращающая (как строку) значение идентификатора объекта в виде шестнадцатиричного числа.

Соответственно, GetEffectCreater() вернет значение указателя на объект-креатор, предположительно, просто достав его из соответствующего поля эффекта (effect - это, кажется, по сути struct такой). Проверки на существование объекта с таким идентификатором при этом, происходить не должно (хотя ХЗ, чего там на самом деле происходит :xz: ). Видимо для подобных ситуаций, когда значение объекта не равно OBJECT_INVALID но самого объекта в модуле уже нет, и написана функция GetIsObjectValid(..).

Когда же ты создаешь новый объект, он получает новый идентификатор, который, естественно, не будет соответствовать идентификатору объекта, созданного когда-то по тому же рес-рефу и имевшему тот же тэг (а жив он сейчас или нет - не важно).

Исходя из вышесказанного можно предложить следующие.
Накладывая эффект мы одновременно сохраняем в локалке идентификатор объекта-креатора:
SetLocalObject(oTarget, "effect_creator", OBJECT_SELF);
А потом, будем проверять соответствие креатора эффекта этой локалке, а не вновь найденному по тэгу объекту.
Правда, нет никакой уверенности в том, что это будет работать, но можно попробовать. Заодно проверить истинность моих домыслов.

Сообщение отредактировал Friedrich - Feb 22 2005, 20:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Friedrich
сообщение Feb 23 2005, 01:36
Сообщение #777


Level 5
**

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



Да. Усе работает. :yahoo:
Если сохранить креатора эффекта в локалку, то потом можно использывать это значение, независимо от бытия самого креатора.
Фрагмент лога:
CODE
[Wed Feb 23 01:08:03] Loading Module: TEST_Lair_02
.*** Effect creator is :OID: 0x4, Name: Altar, Tag: TL_ALTAR, ResRef: plc_altrneutral ***
..*** -= xx_altar_ouexe run =- ***
.*** -= removeEffectByStoredCreator(7fffffff, effector) called =- ***
*** Effect creator was: OID: 0x4, Name: n/a, Tag: n/a, ResRef: n/a ***
*** GetIsObjectValid(oCreator) return: 0 ***
*** 1 effects was removed. ***
***  -------------  ***
..................................[Wed Feb 23 01:14:33] Server Shutting Down

Объекта с oСreator == 0x04 уже не существует (причем oCreator != OBJECT_INVALID), но созданный им эфект удаляется.
0x7FFFFFFF - это первый игрок.
OBJECT_INVALID, кажется, равен 0x7F000000 (хотя это и не важно)
Neverwinter Script Source
void removeEffectByStoredCreator(object oTarget, string sVarName)
{
  object oCreator = GetLocalObject(oTarget, sVarName);
  effect eRemove = GetFirstEffect(oTarget);
  while (GetIsEffectValid(eRemove))
  {
    if (GetEffectCreator(eRemove) == oCreator)
    {
      RemoveEffect(oTarget, eRemove);
    }
    eRemove = GetNextEffect(oTarget);
  }
}

вот функция - в общем виде.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 24 2005, 10:40
Сообщение #778


Level 5
**

Класс: Маг
Характер: Chaotic Evil
Раса: Танар'ри



>Friedrich
Thanks :D :D :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 25 2005, 13:09
Сообщение #779


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Дайте плизз ктонибудь скрипт, чтобы любой Непись сделался статуей, я видел такой скрипт в 1 Аддоне.
Но ево у меня уже нет!
Стереть все эктион у Непися и Наложить Камень в Плоть! тоюеж чтобы он недвигался и покрылся камнем!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tarre Talliorne
сообщение Feb 25 2005, 17:13
Сообщение #780


Level 8
***

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



Тут надо юзать эффекты катсцен: CutsceneParalyse и еще что-нибудь (я б кинул для верности все, кроме инвизбла)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Friedrich
сообщение Feb 25 2005, 18:25
Сообщение #781


Level 5
**

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



QUOTE (Nokoll @ Feb 25 2005, 13:09)
Дайте плизз ктонибудь скрипт, чтобы любой Непись сделался статуей

Окаменение - это, вроде EffectPetrify()
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lexey aka Hawk
сообщение Feb 25 2005, 18:52
Сообщение #782


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

Класс: Фея
Характер: Chaotic Good
Раса: Элементаль
NWN: Маппинг
Gem of the North



Вставить в скрипт OnSpawn Creature.

// * If Statue, apply statue visual effect
if (GetCreatureFlag(OBJECT_SELF, "STATUE") == TRUE)
{
effect eStatue = EffectPetrify();
eStatue = ExtraordinaryEffect(eStatue);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStatue, OBJECT_SELF);
SetPlotFlag(OBJECT_SELF, TRUE);
}

В Тулсете на монстер-статуе прописать переменную тип int, имя STATUE, значение TRUE.

В теории надо еще спелл Stone to Flesh слегка отредактировать, чтобы такую статую нельзя было раскаменить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 26 2005, 01:23
Сообщение #783


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

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Lexey aka Hawk
Спасибо Сделаю!

QUOTE
В теории надо еще спелл Stone to Flesh слегка отредактировать, чтобы такую статую нельзя было раскаменить
.
Можно чуть по подробнее как сделать!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lexey aka Hawk
сообщение Feb 28 2005, 03:02
Сообщение #784


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

Класс: Фея
Характер: Chaotic Good
Раса: Элементаль
NWN: Маппинг
Gem of the North



В SoU это было сделано так. На событии OnSpellCastAt моба-статуи стоит такой скрипт
Neverwinter Script Source
//reapply stone effect

void Stone()
{
    SetPlotFlag(OBJECT_SELF, FALSE);
    effect eStone = EffectPetrify();
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStone, OBJECT_SELF);
    SetPlotFlag(OBJECT_SELF, TRUE);
}

void main()
{
    int nSpell = GetLastSpell();
    if(nSpell == SPELL_DISPEL_MAGIC || nSpell == SPELL_GREATER_DISPELLING || nSpell ==SPELL_MORDENKAINENS_DISJUNCTION)
    {
        DelayCommand(2.1, Stone());
    }
}


Я бы в соответствующие спеллы просто вставил такую строчку.
Neverwinter Script Source
if (GetCreatureFlag(GetSpellTargetObject(), "STATUE") == TRUE) return;


В любом случае это лишь один из многочисленных вариантов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Proydoha
сообщение Feb 28 2005, 18:47
Сообщение #785


Level 4
**

Класс: Маг
Характер: Chaotic Good
Раса: Эльф



Как выглядит скрипт из начала компании ХоТУ, который обдирал игрока как липку и переносил все его вещи в отдаленный сундук в Андердарке. Я искал, но не нашел.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 30 31 32 33 34 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 12th May 2025 - 10:18