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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
14 страниц V  « < 8 9 10 11 12 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге
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, который позволяет редактировать файлы персонажей.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Equilibrium
сообщение Dec 24 2008, 23:44
Сообщение #226


Level 2
*

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



Эх... ясно, пасиб... Но буду иметь ввиду на всякий случай.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RebOOter
сообщение Jan 3 2009, 11:46
Сообщение #227


Level 1


Класс: Мастер Оружия
Характер: Lawful Good
Раса: Человек



Народ, не могу разобраться в некоторых вещах.
1) Пытаюсь написать скрипт, что бы один НПС атаковал другова.
Neverwinter Script
void main()
{
object oVoin = GetObjectByTag("BOEC1");
object oVoin2 = GetObjectByTag("BOEC2");

AssingCommand(oVoin, ActionAttack(oVoin2));
}


Компилятр выдаёт мне:
4000_tboi_os.nss(6): ERROR: UNDEFINED INDENTIFIER

2) В Вики был самоучитель из 4-х уроков. Там был приведён пример скрипта, что-бы НПС пел:

Neverwinter Script
void main()
  {
  ClearAllActions();
  ActionSpeakString(&#39;This is the song that never ends.&#39(IMG:style_emoticons/kolobok_light/wink3.gif) ;
  ActionWait(1.5);
  ActionSpeakString(&#39;Yes it goes on and on, my friends.&#39(IMG:style_emoticons/kolobok_light/wink3.gif) ;
  ActionWait(1.5);
  ActionSpeakString(&#39;Some people started singing it not knowing what it was.&#39(IMG:style_emoticons/kolobok_light/wink3.gif) ;
  ActionWait(1.5);
  ActionSpeakString(&#39;And now they&#39;ll keep on singing it forever, just because:&#39(IMG:style_emoticons/kolobok_light/wink3.gif) ;
  }


Компилятор так-же выдал ошибку: Script2.nss(4): ERROR: UNDEFINED IDENTIFIER

Может это правила написания для 1-го NWN? Возможно я чего-то не понял?
Если по 1-му вопросу, то я задаю 2 объекта которые определяются по тэгам и отдаю команду (т.е. oVoin c тэгом BOEC1 атакует oVoin2 c тэгом BOEC2).
По втрому вообще понять не могу. Может мне нужно именно задать объект?

Зарание спасибо!


Простите за мультипост, допустил гругую ошибку в предыдущем посте и не могу найти кнопку для редактирования (IMG:style_emoticons/kolobok_light/vava.gif)

Neverwinter Script
void main()
  {
  ClearAllActions();
  ActionSpeakString(&#39;This is the song that never ends.&#39(IMG:style_emoticons/kolobok_light/wink3.gif)
  ActionWait(1.5);
  ActionSpeakString(&#39;Yes it goes on and on, my friends.&#39(IMG:style_emoticons/kolobok_light/wink3.gif)
  ActionWait(1.5);
  ActionSpeakString(&#39;Some people started singing it not knowing what it was.&#39(IMG:style_emoticons/kolobok_light/wink3.gif)
  ActionWait(1.5);
  ActionSpeakString(&#39;And now they keep on singing it forever, just because&#39(IMG:style_emoticons/kolobok_light/wink3.gif)
  }


Опять... редактор заменил символ " ' " на "&#39 (IMG:style_emoticons/kolobok_light/wink3.gif) "
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
greye
сообщение Jan 3 2009, 12:36
Сообщение #228


Level 7
**

Класс: Некромант
Характер: True Neutral
Раса: Нежить



В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions());
Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ;
Neverwinter Script
void main()
{
    ClearAllActions();
    ActionSpeakString("This is the song that never ends.");
    ActionWait(1.5);
    ActionSpeakString("Yes it goes on and on, my friends.");
    ActionWait(1.5);
    ActionSpeakString("Some people started singing it not knowing what it was.");
    ActionWait(1.5);
    ActionSpeakString("And now they'll keep on singing it forever, just because...");
}



Сообщение отредактировал greye - Jan 3 2009, 15:05
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RebOOter
сообщение Jan 3 2009, 14:57
Сообщение #229


Level 1


Класс: Мастер Оружия
Характер: Lawful Good
Раса: Человек



Цитата(greye @ Jan 3 2009, 15:36) *
В первом скрипте ошибка, должно быть AssignCommand(последние две буквы assign). Ну и чтобы совсем хорошо было, надо добавить перед этим AssignCommand(oVoin, ClearAllActions());
Во втором - кавычки должны быть двойные: не ('), а ("), надо не забывать закрывать скобки и ставить в конце строки ;


По первому компилятор "дал добро". Спасибо!)

А по второму, ковычки я ставлю двойные и точку с зяпятой тоже ставлю, но компилятор всё равно в той-же строке ошибку выдаёт (IMG:style_emoticons/kolobok_light/sad.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
RebOOter
сообщение Jan 4 2009, 06:25
Сообщение #230


Level 1


Класс: Мастер Оружия
Характер: Lawful Good
Раса: Человек



Второй скрип запахал!)) В ковычках дело было... а в примере одна была (IMG:style_emoticons/kolobok_light/smile.gif)

А второй скрипт без ошибок, но не рабочий... не хотят они друг друга атаковать.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Marta
сообщение Jul 25 2009, 12:59
Сообщение #231


Level 1


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



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

Neverwinter Script
// Проба. Одеть вещь в слот.

void main()
{
    object oPC = GetPCSpeaker();
    object oItem = GetObjectByTag("NW_CLOTH018");
   

  AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) );


}


И почему у меня эта долбаное действие ActionEquipItem вообще не работает, вплоть до того, что не работает стандартный скрипт ga_equip_slot ? Может быть, кто-то знает, какой командой в этом случае можно заменить ActionEquipItem?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jul 25 2009, 20:20
Сообщение #232


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



Neverwinter Script
object oItem = GetObjectByTag("NW_CLOTH018");

может быть дело в том, что таких объектов много, и берётся объект не в инвентаре героя; тогда лучше использовать функцию:
Neverwinter Script
object GetItemPossessedBy(object oCreature, string sItemTag)

ещё может быть стоит попробовать добавить перед одеванием ActionPauseConversation(), а после ActionResumeConversation()...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Marta
сообщение Jul 25 2009, 23:40
Сообщение #233


Level 1


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



Ух. Спасибо, что вообще ответил, но я, к сожалению, ничего не поняла. Я же не скриптер, а полный ламер. Вместо object oItem = GetObjectByTag мне надо написать object GetItemPossessedBy? Так у меня не компилируется, или как там... И непонятно, куда писать тег вещи. (object oCreature, string sItemTag("NW_CLOTH018") )? Тогда что за oCreature?

ActionPauseConversation() - это
Neverwinter Script
void    ActionPauseConversation();

?
Так все равно не компилируется.

Я понимаю, для тебя это вопросы из серии "детский сад - штаны на лямках". Вероятно, мне стоит со всем этим перейти в "скрипты для новичков", я в эту тему-то написала потому что стандартный скрипт тоже не работает. Если тебе не очень влом, разжуй мне, пожалуйста, все это в любой теме, в какой тут положено, или просто покажи на этом примере, чтобы я поняла принцип. Может, и еще кому пригодится.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jul 26 2009, 05:16
Сообщение #234


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



объясню, но вряд ли кому-то это ещё пригодится, т.к. каждому нужны объяснения для себя отдельно.

Во-первых, странно, что стандартный скрипт не работает, может быть дело не в скрипте, а в опечатке в теге, или перепутывании его с резрефом.

oCreature и sItemTag - это параметры функции GetItemPossessedBy, чтобы её запустить, надо вместо них записать что нам надо, в данном случае нам нужен предмет с тегом у игрока, сделовательно oCreature - игрок, sItemTag - тэг

Neverwinter Script
object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018");


Сообщение отредактировал azathoth - Jul 26 2009, 05:18
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Marta
сообщение Jul 26 2009, 13:23
Сообщение #235


Level 1


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



Вах, сработало! Спасибо огромное, - а то я уже неделю бъюсь!

Но стандартный скрипт ga_equip_slot у меня не работает точно, я ничего не напутала. Поэтому кладу сюда получившийся скриптик имени azathoth для счастья будущих поколений, - вдруг у кого-то еще возникнут такие проблемы. Скрипт одевает броню на ГГ через диалог, и только после того, как через ga_give_item добавляешь эту самую броню в инвентарь ГГ на предыдущей фразе.

Neverwinter Script
//::    Проба. Одеть броню на ГГ.

void main()
{
    object oPC = GetPCSpeaker();
    object oItem = GetItemPossessedBy(oPC, "NW_CLOTH018");
   
  AssignCommand( oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CHEST) );
 
}


azathoth, спасибо. Ты мне просто весь сценарий спас.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 17th July 2025 - 17:00