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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
3 страниц V  < 1 2 3  
Ответить в эту темуОткрыть новую тему
> Азы скриптинга NWN/NWN2. Внеклассные занятия, Открыто для всех желающих
Lex
сообщение Oct 13 2007, 18:45
Сообщение #51


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

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



Вал, 6 из 10 правильно (IMG:style_emoticons/kolobok_light/smile.gif)

Добавлено через 21 минуту 40

Чтобы не бояться скриптов, надо уметь их читать. Когда они становятся не страницей непонятной китайской грамоты, а осмысленным набором команд - считайте вы сделали важный шаг к тому, чтобы писать такое сами (IMG:style_emoticons/kolobok_light/smile.gif) Думаю 3х хватит. (IMG:style_emoticons/kolobok_light/smile.gif)

1.
Neverwinter Script Source
void main( )
{
object oWolf = GetObjectByTag( "WONC_WOLF" );
object oPoint1 = GetNearestObjectByTag( "WP_FOREST_1" );
object oPoint2 = GetNearestObjectByTag( "WP_FOREST_2" );
object oEx;
if ( Random( 10 )<=1 )
  {
  if ( Random( 2 )==1 )
      {
      oEx = CopyObject( oWolf, GetLocation( oPoint1 ), OBJECT_INVALID, "WONC_WOLF_BK" );
      AssignCommand( oEx, ActionForceMoveToObject( oPoint2, Random( 2 ), 1.0, 20.0 ) );
      }
  else
      {
      oEx = CopyObject( oWolf, GetLocation( oPoint2 ), OBJECT_INVALID, "WONC_WOLF_BK" );
      AssignCommand( oEx, ActionForceMoveToObject( oPoint1, Random( 2 ), 1.0, 20.0 ) );
      }
  AssignCommand( oEx, ActionDoCommand( DestroyObject( oEx ) ) );
  }
}


2.
Neverwinter Script Source
void main( )
{
object oPC = GetPCSpeaker( );
object oF = GetNearestObjectByTag( "PLS_FIRE", oPC );
DelayCommand( 0.3, SetCommandable( FALSE, oPC ) );
AssignCommand( oPC, ActionMoveToObject( oF, FALSE, 0.0 ) );
AssignCommand( oPC, ActionDoCommand( SetFacingPoint( GetPosition( oF )) ));
AssignCommand( oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 1.0, 3.0 ) );
AssignCommand( oPC, ActionDoCommand( AssignCommand( oF, ActionPlayAnimation( ANIMATION_PLACEABLE_ACTIVATE ) ) );
AssignCommand( oPC, ActionDoCommand( SetCommandable( TRUE, oPC ) ) );
}


3.
Neverwinter Script Source
void main( )
{
FadeToBlack( OBJECT_SELF );
DelayCommand( 1.0, SetTime( GetTimeHour( )+1, GetTimeMinute( ), GetTimeSecond( ), GetTimeMillisecon( ) ) );
DelayCommand( 2.0, FadeFromBlack( OBJECT_SELF ) );
}


cобсно задание простое. Описать что делает скрипт, где он скорее всего стоит и вообще чего хотел афтор (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 13 2007, 20:10
Сообщение #52


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

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



[ OFFTOP ]

1. .. определяет, кто последний взял/положил/украл из плейсебла предмет? - GetLastDisturbed
2. .. определяет значение какой-либо характеристики у существа? (сила, ловкость, телосложение) - GetAbilityModifier
3. .. определяет убийцу НПС? - GetLastKiller
4. .. изменяет количество атак у существа? - SetBaseAttackBonus
5. .. берет первое существо в некой сфере (или другой фигуре), с указанным центром и радиусом? - GetFirstObjectInShape
6. .. делает НПС враждебным? - AdjustReputation
7. .. дает предмету некое свойство? - AddItemProperty
8. .. дает эффект нивидимости? - EffectInvisibility
9. .. открывает локацию на миникарте? - ExploreAreaForPlayer
10. .. заставляет всплыть над НПС или объектом некий текст, указанный вами прямо в скрипте? - FloatingTextStringOnCreature


Сообщение отредактировал shadowdweller - Oct 13 2007, 20:24
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 13 2007, 20:33
Сообщение #53


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

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



shadowdweller, 1 неправильное.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 13 2007, 20:59
Сообщение #54


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

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



Эх, если бы еще уметь пользоваться всеми этими функциями!
Теперь попробую со скриптами.
[ OFFTOP ]
1. Мне кажется, может стоять на триггере. Срабатывает в одном случае из 10, в одном случае, когда скрипт все-таки срабатывает, существо (волк?) пробегает из точки 1 в точку 2, а во втором - из точки 2 в точку 1. Потом исчезает.
2. *Тут будет не совсем честно, потому что кое-что Лекс подсказал* Сработает на ActionTaken ветки диалога. Своеобразная мини-катсцена, т.к. игрок не может в это время контролировать своего персонажа. Находим ближайший к РС объект с заданным тегом. Заставляем РС приблизиться к нему, проиграть анимацию (разжечь огонь?), после чего срабатывает эффект, и персонажем можно опять управлять.
3. Как мне кажется, этот скрипт может стоять и на триггере, и на диалоге, и на входе в локацию (последний вариант несколько сомнителен, но чисто теоретически - да). Здесь просто затемняется экран (на 2 секунды) на один час сдвигается время, т.е. как бы проходит час с момента какого-то события.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 19 2007, 12:05
Сообщение #55


Level 4
**

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



Цитата
cобсно задание простое. Описать что делает скрипт, где он скорее всего стоит и вообще чего хотел афтор


Увы, понятно мало...
[ OFFTOP ]
1. По определению объекта и вейпов вроде все понятно. Объект с определенным тэгом и ближайшие вейпы (1 и2).
Не понятно сокращение object oEx;
Дальше задано условие выполнение скрипта, случайность?
Получается, если выпадет случайным образом 1 вариант, то волк копируется на локацию 1 вейпа идет на второй и там дестроится?

Если вариант 2, то тот же волк копируется на локацию 2 вейпа и идет на 1 и дестроится на локации 1 вейпа.

Стоять этот скрипт может и на входе в локацию, и на триггере и возможно в диалоге, что-то вроде неуловимого волка?
“Ага, попробуй его излови…”
“Вот он! Ату его!!!” (скрипт)
“Эээх… Убег…”
У меня вопрос, а как работает CopyObject()? Это точная копия какого-то объекта, который уже есть где-то в модуле? При копировании, сам объект остается или переносится тоже?

2. Этот скрипт скорее всего запускается с диалога, может быть с диалога плейса?
DelayCommand( 0.3, SetCommandable( FALSE, oPC ) ); - заблокировать героя?
Дальше игрок должен подойти к какому-то объекту,
AssignCommand( oPC, ActionDoCommand( SetFacingPoint( GetPosition( oF )) )); - не понятно это действие…
Потом анимация разблокирования ловушки игроком, вполне может подойти для любого действия с объектом на земле. Активация плейса, возможно что-то включили, зажгли?
AssignCommand( oPC, ActionDoCommand( SetCommandable( TRUE, oPC ) ) ); - разблокировать игрока?

3. С этим скриптом не разобралась… Понятно что речь о времени и черном экране, но вот зачем и почему, не понятно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 19 2007, 12:48
Сообщение #56


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



у нас была небольшая пауза во время которой вы могли поучиться у Айвана

есть мнение( мое (IMG:style_emoticons/kolobok_light/biggrin.gif) ) что нам следует попытаться сделать что-то побольше и заодно освоить несколько важных понятий и умений

предлагаю отскриптовать такой статквест :
у бога Дионисия мерзким вором минтавром была украдена бутылка фирменного напитка "божья роса"
игроку следует найти именно ту бутылку , которая была украдена, принести ее на алтарь Диониса, а за это Дионис наградит повышением одной основной характеристики-( поднимаеться та характеристика которая у героя больше 15 ), причем сначало надо игрока раздеть, чтобы учитывались только его самого умения, а не то, что дает надетые вещи с бонусами.

подготовка :
вариант реализации будет упрощенным - на одной и той же локе и без посторонних монстров и НПЦ( реально бутылочка в модуле длжна быть заныкана где-нить далеко-далеок и еще охраняться минотавром со своими дружбанами) то есть предпологаеться, что игрок задание уже получил
у нас уже есть лока с двумя сундуками, на эту локу мы поместим еще два юзабельных плейса - занычку (можно любой плейс-например телегу) и в противоположном углу алтарь Диониса, кроме того мы сделаем в тулсете один кустомный итем - бутылку напитка "божья роса"( с тегом\ресрефом it_botle_stq1) и положим эту бутылку
1) в занычку
2) в сундук, который при закрывании дает золото...

теперь нам надо весь процесс квеста отскриптовать, но сначало надо определить для самих себя какие скрипты( с какими действиями) на какие слоты каких плейсов надо поставить - то есть все надо описать словами и , желательно по пунктам : 1) 2) 3)

п.с. ( до свидания до понедельника (IMG:style_emoticons/kolobok_light/biggrin.gif) )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 29 2007, 04:49
Сообщение #57


Level 4
**

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



Цитата
теперь нам надо весь процесс квеста отскриптовать, но сначало надо определить для самих себя какие скрипты( с какими действиями) на какие слоты каких плейсов надо поставить - то есть все надо описать словами и , желательно по пунктам : 1) 2) 3)


Мне не совсем понятно по этому квесту, как надо учитывать два одинаковых предмета? Или у них должны быть разные таги (это понятно, но противоречит условию задания), или каким-то образом надо проверять, откуда взята данная бутылка (это совсем не понятно… Как это можно сделать)?
На алтаре скорее всего надо будет писать скрипт для слота OnDisturbed?
1. Определить игрока, как GetFirstPC()?
2. Предмет (oItem) определять через функцию - GetInventoryDisturbItem()?
3. Проверить таг предмета(через if ?), и если он будет равен заданному запускать основной скрипт:
Которым нужно:
1. Удалить сам предмет (бутылку) DestroyObject(oItem)?
2. Снять с игрока все вещи, это через слоты? То есть проверять каждый INVENTORY_SLOT_...? Или еще как-то?
3. Проверить характеристики игрока? Не понятно, как быть, если больше 15 будет ни одна, а например две характеристики? Тогда какую повышать?
4. Повысить характеристику, ну и дать что там еще причитается, (экспу, деньги и так далее) и запись в журнале о выполнении квеста.
Наверно как-то так?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 29 2007, 09:37
Сообщение #58


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

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



Цитата(Artlira @ Oct 29 2007, 04:49) *
Мне не совсем понятно по этому квесту, как надо учитывать два одинаковых предмета? Или у них должны быть разные таги (это понятно, но противоречит условию задания),

не противоречит. Квестовым предметам можно и нужно давать уникальные тэги. (кроме случаев, когда по квесту надо скажем принести 10 обычных предметов, например волчьих шкур.)
Цитата(Artlira @ Oct 29 2007, 04:49) *
или каким-то образом надо проверять, откуда взята данная бутылка (это совсем не понятно… Как это можно сделать)?

это проверять не нужно. Если предмет уникальный (с уникальным тэгом и все такое) - он должен быть в модуле 1 и взять его можно будет только оттуда, откуда надо. Если предмет не уникальный (см выше про шкуры) то не проверяется, откуда они взялись. Вполне можно купить шкуры и выполнить задание. (пресловутая свобода (IMG:style_emoticons/kolobok_light/smile.gif) )


Цитата(Artlira @ Oct 29 2007, 04:49) *
1. Определить игрока, как GetFirstPC()?

можно GetLastDisrurbed(). Если модуль 100% только сингловый - можно и GetFirstPC(). Но считается хорошим тоном как можно меньше использовать GetFirstPC() с тем, чтобы при желании можно было чутка доработать модуль для мультиплеерного прохождения.
Цитата(Artlira @ Oct 29 2007, 04:49) *
2. Снять с игрока все вещи, это через слоты? То есть проверять каждый INVENTORY_SLOT_...? Или еще как-то?

циклом. (эти константы на самом деле числа от 0 до 17, так что вместо того, чтобы проверять все, проще запустить цикл (IMG:style_emoticons/kolobok_light/smile.gif) )
Цитата(Artlira @ Oct 29 2007, 04:49) *
3. Проверить характеристики игрока? Не понятно, как быть, если больше 15 будет ни одна, а например две характеристики? Тогда какую повышать?

ошибка в ТЗ квеста. Имхо - повышать самую большую характеристику. Если их 2 - любую из них (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 29 2007, 10:11
Сообщение #59


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Lex я дал такое задание и потому , что оно ЕСТЕСТВЕННО должно породить вопросы по определенным не совсем понятным вещам и тому, как их "разрулить" ( способность к такого рода анализу настолько же важна, как и сама реализация скриптом- то есть без одного не сделать другово)

а по этому
1) никто не говорил, что модуль сингловый( это вполне может быть и в шарде-такое надо учитывать)
2) никто не говорил, что у правильной бутылки будет уникальный ресреф( это Лех от себя добаввил не вникнув в условия создания квеста-ведь я ясно указал, что есть по крайней мере ДВЕ такие бутылки( в заначке у минотавра и еще одном сундуке, а Дионисию надо вернуть именно ту, которую у него украли ( и которая сейчас находиться в заначке))
3) задача на повышение характеристики специально так и была сформулирована( это не ошибка ТЗ (IMG:style_emoticons/kolobok_light/declare.gif) ), что бы возник вопрос : а что делать, если такие характеристики двое или больше
(я рад , что вы это "раскусили" - в разработке и отскриптовании реального квеста ( или скрипта) иногда возникают "нештатные ситуации" на подобие этой - способность отыскать такие "узкие места" являеться очень важной для разработчика- ведь квест( и любая другая скриптовая система) пишеться, что бы он сработал всегда, при любых вариантах действия игрока, а не только для одного правильного образа выполнения)

Цитата
Определить игрока, как GetFirstPC()?

в задании подразумеваеться, что у нас будет действий не одно, а несколько, взаимодействия могут происходить с несколькими предметатми и плейсеблами-значит будут несколько отдельных скриптова и в каждом игрока мы будем определять отдельно
из всего вышесказанного следует, что нам надо расписывать действия не одним спсиком( как мы делали это раньше), но несколькими( в зависимости от того, с кем происходит взаимодействие)..так и надо попытатся все расписать
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
shadowdweller
сообщение Oct 30 2007, 23:40
Сообщение #60


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

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



Решилась таки тоже ответить. (IMG:style_emoticons/kolobok_light/ph34r.gif)
В принципе, тут можно пойти по пути наименьшего сопротивления и сделать два скрипта:
1) Скрипт на сундук, который при закрывании дает золото.
Ставится OnClosed, при этом каждый раз в сундуке создается определенное количество золота. Для этого понадобится функция
Код
CreateItemOnObject("nw_it_gold001", OBJECT_SELF, 5);
где
"nw_it_gold001" - резреф (шаблон) создаваемого предмета,
OBJECT_SELF - объект, в инвентаре которого создается предмет, и
5 - количество предметов, которое будет создаваться. В общем-то, это и весь скрипт, он несложный.
Neverwinter Script Source
void main( )
{
CreateItemOnObject( "nw_it_gold001", OBJECT_SELF, 5 );
}

Хотя, мне кажется, я что-то пропустила и такой скрипт уже был??

2) Со вторым будет сложнее. Во-первых, нам понадобится условие
Neverwinter Script Source
if ( GetItemPossessor( GetObjectByTag( "it_botle_stq1" ) ) = OBJECT_SELF ) // Дальше пойдет цикл - надо раздеть РС и переложить предметы в инвентарь ( мы ж не звери, чобы для вознаграждения уничтожать все, что надето на игроке : ) )

object oItem = GetFirstItemInInventory( oEnter ); 
    while ( GetIsObjectValid( oItem ) )
   
    int nSlot;
    for ( nSlot = 0; nSlot < NUM_INVENTORY_SLOTS; nSlot++ )
    {
          oItem = GetItemInSlot( nSlot, oEnter );
          ActionUnequipItem( oItem );
    }

А вот дальше будет намного сложнее, поэтому куски скритов постить не буду. Наверное, дальше нам понадобится задать интеджер ( назовем int iChar, например), чтобы определить, какие же именно основные характеристики у РС больше 15.
Потом надо будет просмотреть все характеристики РС при помощи цикла (вот не знаю только, какого) и функции GetAbilityScore, и задать SetAbilityScore (iChar+1).
Ну, тут еще необходимо или задать в начале скрипта то, что он срабатывает один раз, или просто удалить с алтаря искомый объект - бутылку с "божьей росой", и повесить над алтарем спецэффект какой-нибудь, дабы у РС не возникло искушение прокачивать на халяву все эти характеристики бесконечно
Это просто
Neverwinter Script Source
DestroyObject( GetObjectByTag( "it_botle_stq1" ) );
// И, например, окружим алтарь световым кругом.
CreateObject( OBJECT_TYPE_PLACEABLE, "plc_solblue", location lLocation )

Только для этого нам нужно задать под алтарем вейпойнт и определить его как ту самую локацию (location lLocation), на которой будет создаваться плейсебл-эффект.
Немного сумбурно и здорово намудрила, конечно... (IMG:style_emoticons/kolobok_light/snoozer_17.gif)

ЗЫ: Lex, а где проверка д/з по описанию скриптов?

Сообщение отредактировал shadowdweller - Oct 30 2007, 23:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 31 2007, 09:21
Сообщение #61


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

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



Цитата(shadowdweller @ Oct 30 2007, 23:40) *
ЗЫ: Lex, а где проверка д/з по описанию скриптов

? я прокомментировал все ответы по этому заданию, что появились в теме.. или кого-то пропустил?
Цитата(mamuc @ Oct 29 2007, 10:11) *
Lex я дал такое задание и потому , ...

лана, лана, я ваще молчу (IMG:style_emoticons/kolobok_light/ph34r.gif) рули
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 31 2007, 09:37
Сообщение #62


Level 4
**

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



Цитата
Квестовым предметам можно и нужно давать уникальные тэги. (кроме случаев, когда по квесту надо скажем принести 10 обычных предметов, например волчьих шкур.)


Это все мне понятно, но дело в том, что в условии задания:

Цитата
мы сделаем в тулсете один кустомный итем - бутылку напитка "божья роса"( с тегом\ресрефом it_botle_stq1) и положим эту бутылку
1) в занычку
2) в сундук, который при закрывании дает золото...


Вот… Я, поэтому и спрашиваю, как проверить какой из двух предметов “настоящий”, если они оба имеют один и тот же тэг? И наверно еще такой вопрос, а почему нельзя сделать этим бутылкам разные тэги?

Я не знаю, с какой стороны подходить к скрипту на алтаре. Мне непонятно какое условие задавать, что бы он сработал…
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 31 2007, 10:25
Сообщение #63


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
) Скрипт на сундук, который при закрывании дает золото.
Ставится OnClosed, при этом каждый раз в сундуке создается определенное количество золота. Для этого понадобится функция

Код
CreateItemOnObject("nw_it_gold001", OBJECT_SELF, 5);
где
"nw_it_gold001" - резреф (шаблон) создаваемого предмета,
OBJECT_SELF - объект, в инвентаре которого создается предмет, и
5 - количество предметов, которое будет создаваться. В общем-то, это и весь скрипт, он несложный.

Neverwinter Script Source
void main( )
{
CreateItemOnObject( "nw_it_gold001", OBJECT_SELF, 5 );
}

Хотя, мне кажется, я что-то пропустила и такой скрипт уже был??

(IMG:style_emoticons/kolobok_light/rolleyes.gif) ммм ... внимательно читаем задание
Цитата
подготовка :
вариант реализации будет упрощенным - на одной и той же локе и без посторонних монстров и НПЦ( реально бутылочка в модуле длжна быть заныкана где-нить далеко-далеок и еще охраняться минотавром со своими дружбанами) то есть предпологаеться, что игрок задание уже получил
у нас уже есть лока с двумя сундуками, на эту локу мы поместим еще два юзабельных плейса - занычку (можно любой плейс-например телегу) и в противоположном углу алтарь Диониса, кроме того мы сделаем в тулсете один кустомный итем - бутылку напитка "божья роса"( с тегом\ресрефом it_botle_stq1) и положим эту бутылку
1) в занычку
2) в сундук, который при закрывании дает золото...

сие означает, что в процессе подготовки к квесту открываеться тулсет, в тулсете открываеться соответствующая(и наша пока единственная ) лока и производиться кое какие действия, в том числе и : "сделаем в тулсете один кустомный итем - бутылку напитка "божья роса"( с тегом\ресрефом it_botle_stq1) и положим эту бутылку
1) в занычку
2) в сундук, который при закрывании дает золото...
"
то есть при подготовке бутылка создана и положена на место( точнее оба заданных места) в тулсете и это НЕ НАДО больше делать скриптом

чтобы легче было бы расписать что , где и когда что надо заскриптить мысленно представьте, что вы есть тот игрок который только что получил квест..( то есть вы знаете, что
1)у Дионисия сперли бутылку
2)бутылку свистнул минотавр( по словам Дионисия)
3) минотавр ее где-то спрятал
4) вы не знаете точно где бутылка спрятана
5) вам надо бутылку найти
6) найденую бутылку вам надо доставить к алтарю Дионисия )

а теперь опишите, что вы делаете, какие будет ваши действия как игрока ?

для удобства воспользуемся такой схематической картой
=================================А=
===================================
===================================
===================================
===================================
========С1=========================
===================================
===============И===================
===================================
=======================С2==========
===================================
===================================
===================================
===================================
=З=================================

обозначения: А-алтарь Дионисия,И - игрок, С1-сундук дающий деньги, С2 - сундук-уничтожитель вещей, З - заначка минотавра


Добавлено через 38 минут 54 секунды

Цитата
И наверно еще такой вопрос, а почему нельзя сделать этим бутылкам разные тэги?

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

Цитата
Вот… Я, поэтому и спрашиваю, как проверить какой из двух предметов “настоящий”, если они оба имеют один и тот же тэг?

ага а вот тут мы вплотную подходим к одной из новых вещей, которые мы должны будем освоить (IMG:style_emoticons/kolobok_light/biggrin.gif)
этот способ называеться в просторечии"повесить локалку" - то есть на любой обьект можно добавить новую переменную и присвоить ей значение отличное от 0 - таким образом сделав этот предмет отличительным ( ведь у других обьектов такая переменная не присвоена-значит при проверке значения этой переменной мы будем получать 0(значение по умолчанию), а у нашего обьекта с "повешеной локалкой" оно не будет = 0)

Сообщение отредактировал mamuc - Oct 31 2007, 10:12
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Artlira
сообщение Oct 31 2007, 10:26
Сообщение #64


Level 4
**

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



Цитата
а теперь опишите, что вы делаете, какие будет ваши действия как игрока ?


Игрок, попав на такое поле, где есть сундуки, тачка и алтарь, первым делом все вскроет. Взяв первую же бутылку “Божья Роса”, потащит ее на алтарь.
Вот и все действия…
Но как я понимаю, каким-то образом игроку надо дать понять, что одна из бутылок – подстава. То есть кладет он ее на алтарь, а толку нет. Но вот как это сделать, если у бутылок одинаковые тэги мне и непонятно…

Цитата
ага а вот тут мы вплотную подходим к одной из новых вещей, которые мы должны будем освоить
этот способ называеться в просторечии"повесить локалку" - то есть на любой обьект можно добавить новую переменную и присвоить ей значение отличное от 0 - таким образом сделав этот предмет отличительным ( ведь у других обьектов такая переменная не присвоена-значит при проверке значения этой переменной мы будем получать 0(значение по умолчанию), а у нашего обьекта с "повешеной локалкой" оно не будет = 0)


То есть в тот момент как игрок берет предмет из заначки минотавра на него нужно повесить локалку?

Сообщение отредактировал Artlira - Oct 31 2007, 10:30
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 31 2007, 10:50
Сообщение #65


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

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



имхо, это очень надуманное и не реалистичное (по крайней мере мой опыт разработки квестов мне об этом говорит) ограничение про 2 бутылки с 1 тегом, а нужна тока одна. В таких случаях делают разные тэги.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 31 2007, 10:55
Сообщение #66


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
То есть в тот момент как игрок берет предмет из заначки минотавра на него нужно повесить локалку?

да ...и тогда эта локалка будет сигнализировать, что игрок взял бутылку из правильного места
Цитата
Но как я понимаю, каким-то образом игроку надо дать понять, что одна из бутылок – подстава. То есть кладет он ее на алтарь, а толку нет.

и ,если на игрока будет висеть правильная локалка, то мы будем знать откуда принес бутылку..
(IMG:style_emoticons/kolobok_light/good.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 31 2007, 11:16
Сообщение #67


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

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



Цитата(mamuc @ Oct 31 2007, 10:55) *
и ,если на игрока будет висеть правильная локалка, то мы будем знать откуда принес бутылку..

правда остается мелкая дырка, если мы возьмем обе, а положим всетаки вторую, которая неправильная. Локалка то висит.

зы: локалку надо вешать не на игрока, а на предмет, тогда такой беды нету.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 31 2007, 11:26
Сообщение #68


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



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

Лекс а почему ты думаешь, что вторая бутылка не нужна?..то, что она не нужна для выполнения этого конкретного квеста, отнюдь не означает, что она не нужна совсем...и, создавая свой квест, надо учитывать, что в это время может работать и другой квест с таким же предметом(здесь это бутылка"божьей росы") , как используешь ты...



Добавлено через 3 минуты 56 секунд

Цитата
правда остается мелкая дырка, если мы возьмем обе, а положим всетаки вторую, которая неправильная. Локалка то висит.

рррр... кто-то( не будем показывать пальцами) пару постов выше обещал не вмешиваться...

то, что нужно не только повесить локалку на игрока ,но и "пометить" бутылку -эту идею должны были выявить сами обучающиеся САМОСТОЯТЕЛЬНО...

и так с помощью Лекса мы выяснили ситуацию, когда можно найти обе бутылки и положить потом на алтарь неправильную... и Лекс же подсказал путь решения - повесить локалку и на бутылку
здесь есть один нюанс - можно не вешать новую локалку, можно обойтись у же тем что имееться...а иметься у итема такая возможность изменить чарджи( это используеться в волшебных палочках, для ограничеия количества примененых заклинаний, но кто сказал, что мы не можем добавлять чарджи другим итемам (IMG:style_emoticons/kolobok_light/biggrin.gif) ( чарджи можно добавить до 50, давайте и выставим мах количество)

это делает функция
SetItemCharges(object oItem, int nCharges)


Сообщение отредактировал mamuc - Oct 31 2007, 11:48
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 31 2007, 11:59
Сообщение #69


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

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



Цитата(mamuc @ Oct 31 2007, 11:22) *
Лекс а почему ты думаешь, что вторая бутылка не нужна?..то, что она не нужна для выполнения этого конкретного квеста, отнюдь не означает, что она не нужна совсем...и, создавая свой квест, надо учитывать, что в это время может работать и другой квест с таким же предметом(здесь это бутылка"божьей росы") , как используешь ты...

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

Добавлено через 56 секунд

Цитата(mamuc @ Oct 31 2007, 11:26) *
о, что нужно не только повесить локалку на игрока

на игрока вообще не нужна, вообще то. Нагрузки на локалку нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Oct 31 2007, 12:13
Сообщение #70


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



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

неа легче все-таки развести различными чарджами(вспомни мое предложение про дюжину бутылок для Дионисия (IMG:style_emoticons/kolobok_light/biggrin.gif) )..но это мое ИМХО (IMG:style_emoticons/kolobok_light/biggrin.gif)


Цитата
на игрока вообще не нужна, вообще то. Нагрузки на локалку нет.

одно мааленькое замечание - в сингле действительно не нужно (IMG:style_emoticons/kolobok_light/biggrin.gif) а в шарде ведь можно бутылочку передать другому (IMG:style_emoticons/kolobok_light/biggrin.gif)

Сообщение отредактировал Aiwan - Oct 31 2007, 19:34
Причины изменения: mamuc, если выделить текст и кликнуть на кнопке Q-Quote, он скопируется в сообщение в виде цитаты с именем человека ее написавшего. :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 31 2007, 12:41
Сообщение #71


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

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



Цитата(mamuc @ Oct 31 2007, 12:13) *
одно мааленькое замечание - в сингле действительно не нужно biggrin.gif а в шарде ведь можно бутылочку передать другому

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

Добавлено через 1 минуту 56 секунд

Цитата(mamuc @ Oct 31 2007, 11:26) *
здесь есть один нюанс - можно не вешать новую локалку, можно обойтись у же тем что имееться...а иметься у итема такая возможность изменить чарджи

омг! это анахронизм из СОУ (IMG:style_emoticons/kolobok_light/wacko.gif) . В ХОТУ и дальше уже есть локалки, нафига изобретать велосипед то? (а если сделать зелье реальным, те юзабельным со своим каким-то эффектом опьянения, там ваще будет 1 чарж, если я не ошибаюсь). Лучше как раз юзать локалки - они для этого и предназначены.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
SvYaT
сообщение Nov 26 2007, 22:01
Сообщение #72


Level 1


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



Я впринципе в скрипте слаб. Частично научился только с вшими уроками. Есть мысли на счёт этой задачи.
Нужно создать 2 скрипта. 1 скрипт повесить на Сундук у минатавра а 2 скрипт повесить на Алтарь.
1 В сундуке Минатавра должна лежать бутылка, при открытие сундука на бутылку лежащую Имено в сундуке повесится локалка и на игрока тоже.(если игра мултиплайерная).
2 У алтаря проверять бутылку и игрока на соответствие локалки.

Столкнулся с проблеммой если 2-3 бутылки поместятся в один слот, локалка исчезает с бутылки и квест не проходится. Обоити можно если только Бутылка будет не бутылкой, например кольцом (IMG:style_emoticons/kolobok_light/sad.gif)
Кто подскажет как посадить NPC и чем отличны версии Toolset 1.0.1115.0 от 1.0.870.0.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
SvYaT
сообщение Nov 27 2007, 13:38
Сообщение #73


Level 1


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



Вот скрипт для сундука у минатавра:
Neverwinter Script Source
void main( )
{   
    object oBarrel = OBJECT_SELF;
    object oPC = GetLastOpenedBy( );
    object oItem = GetItemPossessedBy( oBarrel, "VINO_DIONISIYA" );
   
    if ( GetIsObjectValid( oItem )==TRUE && GetLocalInt( oPC, "IGROK" )==0 )
    {
    SetLocalInt( oItem, "VINO", 1 );
    SetLocalInt( oPC, "IGROK", 1 );
    SendMessageToPC( oPC, "Скимпт сработал." );// Это для себя : )
    }
}


И скрипт для Алтаря:
Neverwinter Script Source
void main( )
{
    object oChes = OBJECT_SELF;
    object oPC = GetLastClosedBy( );
    object oItem = GetItemPossessedBy( oChes, "VINO_DIONISIYA" );
   
    if ( GetIsObjectValid( oItem )==TRUE && GetLocalInt( oItem, "VINO" )==1 && GetLocalInt( oPC, "IGROK" )==1 )
    {
    DestroyObject( oItem );
    SendMessageToPC( oPC, "Дионисий: Ура ты нашёл то вино которое украл этот подлый Минотавр!" );
    GiveGoldToCreature( oPC, 20000 );
    }
    if ( GetIsObjectValid( oItem )==TRUE && GetLocalInt( oItem, "VINO" )==0 && GetLocalInt( oPC, "IGROK" )==0 )
    {
    SendMessageToPC( oPC, "Дионисий: Это не та бутылка вина которую украл Минотавр, Хотя из той же партии." );
    }
    if ( GetIsObjectValid( oItem )==TRUE && GetLocalInt( oItem, "VINO" )==0 && GetLocalInt( oPC, "IGROK" )==1 )
    {
    SendMessageToPC( oPC, "Дионисий: Куда ты дел мою бутылку Вина Ришил утаить её от Меня? Быстро верни мне её." );
    }
}

Не судите строго.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Dec 9 2007, 15:48
Сообщение #74


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



Цитата
Столкнулся с проблеммой если 2-3 бутылки поместятся в один слот, локалка исчезает с бутылки и квест не проходится. Обоити можно если только Бутылка будет не бутылкой, например кольцом
впринцыпе эту проблему можно решить дав бутылке чардж( итемы с разными чарджами не складываються вместе)..правда тогда остаетьсчя вопрос о том если на бутылку делать из палитренной на которой уже висит сигл юз бутылку выпить..там надо проверять это дополнительно...

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

про посадить на стул : на форуме есть примеры как это сделать и несколько вариантов ..все решаеться с ActionSit
вот пример скрипта садящего на стул ПЦ и снимающего оружие при этом
Neverwinter Script Source

void main( )
{
    object oPC = GetLastUsedBy( );
    object oChair = OBJECT_SELF;
    if ( GetIsPC( oPC ) )
    {
    if ( GetIsObjectValid( oChair ) && !GetIsObjectValid ( GetSittingCreature( oChair ) ) )
        {
        AssignCommand( oPC, ActionUnequipItem( GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPC ) ) );
        AssignCommand( oPC, ActionUnequipItem( GetItemInSlot( INVENTORY_SLOT_LEFTHAND, oPC ) ) );
        AssignCommand( oPC, ActionSit( oChair ) );
        }
    }
}

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


и последнее..я сейчас буду некоторое время весьма занят, потому не смогу достаточно часто появляться здесь и соответсвенно быстро и оперативно вести занятия...поэтому давайте дружно попросим Лекса продолжить это нужное и полезное дело (IMG:style_emoticons/kolobok_light/scout.gif)

Лекс поможишь людям..ну пожалуйста (IMG:style_emoticons/kolobok_light/biggrin.gif) : (IMG:style_emoticons/kolobok_light/hi.gif) : (IMG:style_emoticons/kolobok_light/yess.gif) (IMG:style_emoticons/kolobok_light/yess.gif) (IMG:style_emoticons/kolobok_light/biggrin.gif)


Сообщение отредактировал mamuc - Dec 9 2007, 15:52
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Dec 27 2007, 09:35
Сообщение #75


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

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



мамук редиска, но и я тож хорош.
В общем кому еще тут что-то интересно, просто скажите какую тему хотите разобрать. Ну например вы ваяете свой модуль и там есть скриптовая задача, к которой вы боитесь подступиться даже. Описывайте ее тады прям сюда, будем думать вместе (сначала вы выскажете что об этом всем думаете, потом я и сравним что получилось (IMG:style_emoticons/kolobok_light/smile.gif) )

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

3 страниц V  < 1 2 3
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



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