![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2861
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Ну, я имел ввиду операторов ну тады почему нету? for, while - циклы. Ветвление.. не знаю, что ты имеешь ввиду, но switch есть Добавлено через 2 минуты 44 секунды П.С. И еще. У меня сразу после драки игрок и НПС становятся друзьями и НПС должен начать диалог. Но из-за того, что они только что дрались этого делать нельзя... Как обойти сие ограничение? как делаешь друзьями? можно очистить личные отношения, перевести в дружественную фракцию, сделать друзьями временно и тд. А потом очистить стек. Neverwinter Script Source while( GetIsObjectValid( shkura ) ) { DestroyObject( shkura ); i++; } вечный цикл. Нехватает shkura = GetObjectByTag( "w_gray",i ); (или что ты там хотел) Это к вопросу о "слишком много инструкций". Второй цикл тоже вечный. |
![]()
Сообщение
#2862
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
П.С. И еще. У меня сразу после драки игрок и НПС становятся друзьями и НПС должен начать диалог. Но из-за того, что они только что дрались этого делать нельзя... Как обойти сие ограничение? Тогда вам поможет скрипт прекращения атаки всех существ в радиусе 30 метров от героя. Учтите, скрипт не меняет фракционных отношений! Если нужно вернуть нормальное отношение фракции, то пропишите это в диалоге, на проверку локалки KONEZ_BOY на НПС, или в скрипте проверки сигнала на невидимом ближайшем объекте с тегом S_BOYA. НПС - носитель скрипта, должен быть бессмертным, чтобы случайным критическим ударом не отправить его на тот свет… Neverwinter Script Source //::////////////////////////////////////////////////// //:: Прекращение атаки //:: File name: end_attak //:: Слот: OnDamaged, OnCombatRoundEnd, OnHeartBeat //::////////////////////////////////////////////////// void main( ) { object oPC = GetFirstPC( ); object oSelf = OBJECT_SELF; object oNPC = GetFirstObjectInShape( SHAPE_SPHERE, 30.0, GetLocation( oPC ), TRUE ); if ( GetCurrentHitPoints( oSelf ) < 30 && GetLocalInt( oSelf, "KONEZ_BOY" ) != 1 ) { while ( GetIsObjectValid( oNPC )) // Все существа в радиусе 30 метров { if( GetIsInCombat( oNPC ) || GetIsEnemy( oPC, oNPC )) { AssignCommand( oNPC, SurrenderToEnemies( ) ); AssignCommand( oNPC, ClearAllActions( TRUE )); } oNPC = GetNextObjectInShape( SHAPE_SPHERE, 30.0, GetLocation( oPC ), TRUE ); } SetLocalInt( oSelf, "KONEZ_BOY", 1 ); AssignCommand( oPC, ClearAllActions( TRUE )); SpeakString( "Я сдаюсь... Прекратим бой!" ); AssignCommand( oSelf, ActionPlayAnimation( ANIMATION_FIREFORGET_BOW )); DelayCommand( 1.5, PlaySound( "as_pl_wailingm2" )); int nHeal = GetMaxHitPoints( oSelf ) - GetCurrentHitPoints( oSelf ); effect eHeal = EffectHeal( nHeal ); DelayCommand( 100.0, ApplyEffectToObject( DURATION_TYPE_INSTANT, eHeal, oSelf )); DelayCommand( 100.0, SetLocalInt( oSelf, "KONEZ_BOY", FALSE )); // Дать сигнал SignalEvent( GetNearestObjectByTag( "S_BOYA" ), EventUserDefined( 777 )); } } /* Все существа в радиусе 30 метров прекращают бой. Владелиц скрипта, получает переменную для начала диалога. Через 100 сек. снимается эта переменная и лечится персонаж. Подается сигнал на ближайший объект с тегом S_BOYA */ |
![]()
Сообщение
#2863
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
|
![]()
Сообщение
#2864
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Всем спасибо! (IMG:style_emoticons/kolobok_light/thank_you.gif)
Цитата вечный цикл. Нехватает shkura = GetObjectByTag( "w_gray",i ); (или что ты там хотел) Это к вопросу о "слишком много инструкций". Второй цикл тоже вечный. Упс... че-т до меня не доперло... Что где не там стоит? помоему я shkura объявил в начале. Или то, что ты написал нужно поставить в цикле? |
![]()
Сообщение
#2865
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Или то, что ты написал нужно поставить в цикле? угу. Ибо в цикле ты что делаешь? удаляешь объект shkura постоянно (НЕ переопределяя его. Те удалил его 1 раз, а дальше уже в холостую) и плюсуешь i. Так как удаление само не происходит мгновенно (а если точнее, то само удаление происходит после окончания скрипта) то условие GetIsObjectValid( shkura ) будет всегда правдивым. Добавлено через 1 минуту 53 секунды если цель была удалить все объекты с таким тэгом, переопределение shkura надо вносить внутрь цикла сразу после i++; Причем i обязательно должно быть среди параметров задачи shkura Neverwinter Script Source GetObjectByTag( "w_gray", i ); иначе ниче не будет. |
![]()
Сообщение
#2866
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Neverwinter Script Source while( GetIsObjectValid( shkura )) { DestroyObject( shkura ); i++; object shkura = GetObjectByTag( "w_gray", i ); } Я, наверное, неверно понял, т.к. снова много инструкций.. (IMG:style_emoticons/kolobok_light/unsure.gif) |
![]()
Сообщение
#2867
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
тут уже должно быть не "слишком много инструкций", а "омг!! что ж происходит то, епт!". Ибо нельзя под цикл заносить определение переменной.
Neverwinter Script Source object shkura = GetObjectByTag( "w_gray", i ); while( GetIsObjectValid( shkura ) ) { DestroyObject( shkura ); i++; shkura = GetObjectByTag( "w_gray", i ); } найдите 2 отличия, что называется. |
![]()
Сообщение
#2868
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Илья, я бы записал примерно так:
Neverwinter Script Source void main( ) { object oPC = GetPCSpeaker( ); object oItem = GetFirstItemInInventory( oPC ); // Первый предмет int iGold, iTigr, iGray; while( GetIsObjectValid( oItem )) // Если существует предмет { if ( GetTag( oItem ) == "w_gray" ) // ВОЛК {iGold+=10; iGray++; DestroyObject( oItem );} if ( GetTag( oItem ) == "w_tigr1" ) // ТИГР {iGold+=60; iTigr++; DestroyObject( oItem );} oItem = GetNextItemInInventory( oPC ); // Следующий предмет } if( iGold > 0 ) { GiveGoldToCreature( oPC, iGold ); if( iGray > 0 ) // Количество шкур Волка SendMessageToPC( oPC, "Продано шкур Волка: "+IntToString( iGray )); if( iTigr > 0 ) // Количество шкур Тигра SendMessageToPC( oPC, "Продано шкур Тигра: "+IntToString( iTigr )); } } P.S. Что будет не понятно спрашивай, и все же почитай про написание циклов… Лекс, а зачем удалять все шкурки в модуле? (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2869
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Лекс, а зачем удалять все шкурки в модуле? да я тупо не прочитал исходную задачу. Правил только проблемный кусок с зависшим циклом. То что там неправильная работа с инвентарем - я как-то и не заметил. (IMG:style_emoticons/kolobok_light/smile.gif) и кстати ты имхо зря целиком пишешь скрипт. Надо проблемные кусочки + подсказки как самому исправлять. А целиком.. (IMG:style_emoticons/kolobok_light/nea.gif) |
![]()
Сообщение
#2870
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
Спасибо огромное вам обоим! К сожалению, пришлось воспользоваться скриптом Геннадия, так как мой скрип забирал и шкурки у самого торговца)))) А золото мне давал, кстати)))
|
![]()
Сообщение
#2871
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Спасибо огромное вам обоим! К сожалению, пришлось воспользоваться скриптом Геннадия, так как мой скрип забирал и шкурки у самого торговца)))) А золото мне давал, кстати))) это потому что кроме проблемы бесконечного цикла у тебя еще куча неточностей была. В следующий раз сделаешь просто ту же ошибку, не более того. |
![]()
Сообщение
#2872
|
|
Level 2 ![]() Класс: Маг Характер: True Neutral Раса: Эльф ![]() |
Напишите, пожалуйста, скрипт на то, чтобы с появления персонажа он лежал на спине...
|
![]()
Сообщение
#2873
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
могу подсказать куда копать. Готовый скрипт в принципе тоже могу дать, но толку будет 0: все скрипты для модуля за тебя никто не напишет. нужно осваивать самому или привлекать скриптера.
собсна подсказка: функция ActionPlayAnimation + константа-параметр ANIMATION_***_DEAD_BACK (там под *** FIREFORGET вроде, но я не уверен). Если под персонажем ты имел ввиду НПС, то добавить получившуюся строку в onSpawn скрипт. Если персонаж - игрок, то втыкать это надо в onClientEnter в слотах модуля. Но там придется воспользоваться AssignCommand |
![]()
Сообщение
#2874
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
QUOTE как перевести из int в string? На С++ atoi() и atof() atof переводила массив чаров в дабл. atoi переводила массив чаров в инт. Чтение хедеров фтв. |
![]()
Сообщение
#2875
|
|
Level 11 ![]() ![]() ![]() Класс: Воин Характер: Lawful Good Раса: Человек ![]() |
|
![]()
Сообщение
#2876
|
|
Level 3 ![]() Класс: Обыватель Характер: Chaotic Evil Раса: Человек ![]() |
QUOTE для примера привел эти два оператора. Это не операторы, это функции. |
![]()
Сообщение
#2877
|
|
Level 7 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны ![]() |
Есть невидимые объекты (creature). Нужно реализовать, чтобы они были видимыми только когда у PC надет определенный айтем (шлем к примеру), при этом всем другим PC они должны оставаться невидимыми. Подскажите как реализовать, если это возможно.
|
![]()
Сообщение
#2878
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
шлем с трусиингом?
|
![]()
Сообщение
#2879
|
|
Level 7 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны ![]() |
Наподобе, но чтобы стандартные заклинания определяющие невидимых не работали на этих существах.
|
![]()
Сообщение
#2880
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Есть невидимые объекты (creature). Нужно реализовать, чтобы они были видимыми только когда у PC надет определенный айтем (шлем к примеру), при этом всем другим PC они должны оставаться невидимыми. Подскажите как реализовать, если это возможно. Стандартными средставми NWN именно так, как описано, сделать нельзя. Я недавно сделал Proof of Concept и в скором времени напишу NWNX-плагин для таких вещей (индивидуальное управление видимостью объектов).
|
![]()
Сообщение
#2881
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Добрый вечер. Скажите, пожалуйста, как можно прописать в скрипте, чтобы девастат не убивал, а, например, заберал 80% ХП?
Ответ можно прислать и на мыло: dracul@ukr.net |
![]()
Сообщение
#2882
|
|
Level 2 ![]() Класс: Маг Характер: Chaotic Good Раса: Человек ![]() |
Вообщето я не понял, кто такой девостат, но...
почему нельзя просто узнать сколько у персонажа XP и просто присвоить ему на 80% меньше? типа: Код object oPC=GetFirstPC();//работаем з нашим главным персонажем //або якщо комусь більше подобається, можна написати object oPC=GetEnteringObject(); int XP=0;//инициируем переменную XP = GetXP(oPC);//вытаскиваем нинищнее значение XP XP = FloatToInt(XP-XP*0.8); //Выщитываем результат SetXP(oPC,XP);//Бросаем назад нашему персонажу Если я правильно понял - то так (IMG:style_emoticons/kolobok_light/rolleyes.gif) Сообщение отредактировал ZipovUA - Feb 12 2008, 23:05 |
![]()
Сообщение
#2883
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. ХП - Хит Поинты, а не очки опыта. Так что приведенный код малек не туда
2. проблема описанной идеи не в написании кода (это как раз детский сад). А в том, чтобы привязать код к эффекту от девастата. Я не помню как там сделано в НВН1, но вроде бы девастат - фит не активируемый на противнике.. соотв своего скрипта-исполнителя у него нету. Поэтому как решить задачу не через nwnx не знаю (через нвнх тоже не знаю как, но знаю что можно) |
![]()
Сообщение
#2884
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Возможно вы не поняли суть вопроса, шард имеет лвлкап 25, девастат в чистом виде сильно крут для этого шарда, спасы не соответсвуют, но выключать его полностью - значит сделать дисбаланс в сторону магов, можно ли как-то или понизить дц девастата или сделать чтоб он не убивал, а снимал Х число хитов, либо в процентах?
|
![]()
Сообщение
#2885
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
|
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 16:30 |