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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 28 29 30 31 32 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Aiwan
сообщение Feb 15 2005, 17:17
Сообщение #711


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

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



QUOTE (dumbo @ Feb 15 2005, 16:21)
я конечно не уверен, бо не проверял, но есть подозрение,
что при каждом попадании по NPC он будет делать доставание меча,
что, имхо, негативно скажется на его боеспособности...

Да, ты прав, я невнимательно написал и кстати без ароры, что естественно мог ошибиться в синтаксисе...
QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 18:25)
Например (это уже вопрос!) 75 акций - это для всех обьектов или для одного?

У каждого объекта есть стек команд, он вмещает 75 акций.
QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 18:25)
А так пришлось сендить все имеющиеся переменные и долго и упорно ловить мелкий(?!) но гадский глюк.

Давай поговорим через год. Тогда ты скажешь, нужна эта функция для доставания акций из стэка или нет. За два с лишним года ты первый кто об этом заикается. Но скажу так, никакие функции не заменят кривых скриптов. Мне интересно, как ты собрался десять акций идти по вейпам узнавать из какого скрипта какая акция? Ты хочешь еще кнопочку еррорлог, и тебе пишет тулсет где какую запятую тебе поставить, мол вы ошиблись. :) Учись скриптить и не морочь нам голову. К тому же, ты разбираешься в них неплохо для новичка. Так что скоро будешь смеяться над своим предложением.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Feb 15 2005, 17:22
Сообщение #712


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

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



QUOTE (Grazzt @ Dark Prince, Feb 15 2005, 14:25)
Например (это уже вопрос!) 75 акций - это для всех обьектов или для одного?

Для КАЖДОГО объекта.

А иметь возможность просматривать стек акций было бы действительно неплохо... :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 17:54
Сообщение #713


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

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



QUOTE (DBColl @ Feb 15 2005, 20:22)
А иметь возможность просматривать стек акций было бы действительно неплохо...

Согласен. Но не сделает Биовар это вам. Обсидан тоесть... Скажут учите Лексикон.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 15 2005, 18:12
Сообщение #714


Level 8
***

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



Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Created By: MasterMage ©
//:: Created On: edit 15.02.05
//::///////////////////////////////////////////////
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oRing=GetPCItemLastUnequipped();

    if (GetTag(oRing)=="Ring")
    {
    effect eEf=GetFirstEffect(oPC);
    while (GetIsEffectValid(eEf))
    {
    RemoveEffect(oPC,eEf);
    eEf=GetNextEffect(oPC);
    }
    }
    return;
}
это уменьшенная копия второго, но тут дело так, что все эффекты могут удалиться...Вот...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Grazzt, Dark Pri...
сообщение Feb 15 2005, 19:10
Сообщение #715


Level 5
**

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



[SIZE=1]
QUOTE (Aiwan @ Feb 15 2005, 17:54)
Согласен. Но  не сделает Биовар это вам. Обсидан тоесть... Скажут учите Лексикон.

:D Ну ведь есть раздел пожеланий. Наверно если хорошенько пожелать :lol: , да еще кто-то не поленится перевести... :D Так и вертится цитата:
"...Ибо Писание говорит фараону: для того самого Я и поставил тебя, чтобы показать над тобою силу Мою и чтобы проповедано было имя Мое по всей земле... "
Послание св. Павла к римлянам.
:DB:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 15 2005, 19:26
Сообщение #716


Level 8
***

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



Grazzt, Dark Prince :wizard:
ЭХ......мыслители..... Ээээээээх...
Aiwan СМОТРИ, СМОТРИ СЮДА!!!! :BRAVO:
Вот смотри... решил сделать скрипт, как вещи Нашера...Там где статы прибавлябтся, если все собрал... Но не понял особо инклуды и готовые, поэтому написал свой...
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastEquippedBy();
    object oItem1=GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
    object oItem2=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
    object oItem3=GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
    object oItem4=GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
    if(GetTag(oItem1)=="Item1"&&
    GetTag(oItem2)=="Item2"&&
    GetTag(oItem3)=="Item3"&&
    GetTag(oItem4)=="Item4"&&GetLocalInt(oPC,"Veshi")==0)
    {
    SetLocalInt(oPC,"Veshi",1);
    SetLocalInt(oPC,"i1",GetAbilityScore(oPC,ABILITY_STRENGTH));
    SetLocalInt(oPC,"i2",GetAbilityScore(oPC,ABILITY_DEXTERITY));
    SetLocalInt(oPC,"i3",GetAbilityScore(oPC,ABILITY_CONSTITUTION));
    SetLocalInt(oPC,"i4",GetAbilityScore(oPC,ABILITY_WISDOM));
    effect eEf1=EffectAbilityIncrease(ABILITY_STRENGTH,10);
    effect eEf2=EffectAbilityIncrease(ABILITY_DEXTERITY,10);
    effect eEf3=EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
    effect eEf4=EffectAbilityIncrease(ABILITY_WISDOM,10);
    effect eEf_main=EffectVisualEffect(VFX_DUR_STONEHOLD);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf1,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf2,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf3,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf4,oPC);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eEf_main,oPC,1.5);
    }
    return;

}
это когда одел


Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    int i1=(GetAbilityScore(oPC,ABILITY_STRENGTH) - GetLocalInt(oPC,"i1"));
    int i2=(GetAbilityScore(oPC,ABILITY_DEXTERITY) - GetLocalInt(oPC,"i2"));
    int i3=(GetAbilityScore(oPC,ABILITY_CONSTITUTION) - GetLocalInt(oPC,"i3"));
    int i4=(GetAbilityScore(oPC,ABILITY_WISDOM) - GetLocalInt(oPC,"i4"));
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
    SetLocalInt(oPC,"Veshi",0);
    effect eEf1=EffectAbilityDecrease(ABILITY_STRENGTH,i1);
    effect eEf2=EffectAbilityDecrease(ABILITY_DEXTERITY,i2);
    effect eEf3=EffectAbilityDecrease(ABILITY_CONSTITUTION,i3);
    effect eEf4=EffectAbilityDecrease(ABILITY_WISDOM,i4);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf1,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf2,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf3,oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEf4,oPC);

    }

}
это когда снял, но иконки эффекта не исчезают.... есть что-нить полегче, да и заодно подскажи, как полегче сделать.... Не зря ученик у учителю обращается... :this:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 15 2005, 19:36
Сообщение #717


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



MasterMage
тебе надо делать не EffectAbilityDecrease, а цикл по уже наложенным эффектам на перса, выуживать наложенные тобой, и их снимать. А так ты вешаешь допольнительные новые эффекты на снимании...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 15 2005, 19:51
Сообщение #718


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

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



QUOTE (Archangel @ Feb 13 2005, 17:46)
Есть Игрок, он пытается открыть дверь(точнее взломать-сначало дверь закрыта). Если у него енто получается, то рядом стоящий охранник говорит:"I kill you small thief!"

слот onUnLock
Neverwinter Script Source
void main()
{
object oGuard = GetNearestObjectByTag("Guard_dragons_1");
object oPC = GetLastUnlocked();
if (!GetIsPC(oPC)) return;
AssignCommand(oGuard,ClearAllActions());
AssignCommand(oGuard,ActionAttack(oPC));
AssignCommand(oGuard,SpeakString("I kill you small thief!"));
}

В случае, если РС успешно взломал дверь, то стражник нападает. Как тебе вроде и надо.

QUOTE (Archangel @ Feb 13 2005, 17:46)
Если ж у Игрока не получается тпереть дверь, то тогда охранник просто говорит: "What are you doing? Get out small thief!".

это нельзя сделать именно так. Можно что игрок пытается открыть дверь, но не может.
слот onFailToOpen
Neverwinter Script Source
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
object oGuard = GetNearestObjectByTag("Guard_dragons_1");
AssignCommand(oGuard,SpeakString("What are you doing? Get out small thief!"));
}


Проверил, все работает
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Feb 15 2005, 20:14
Сообщение #719


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

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



MasterMage я такие скрипты не писал. Спроси ДБа или Лекса. :rolleyes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 15 2005, 20:23
Сообщение #720


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

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



QUOTE (dumbo @ Feb 15 2005, 19:36)
MasterMage тебе надо делать не EffectAbilityDecrease, а цикл по уже наложенным эффектам на перса, выуживать наложенные тобой, и их снимать. А так ты вешаешь допольнительные новые эффекты на сниман

абсолютно верно.
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
       if (GetLocalInt(oPC,"Veshi")==0) return;
       SetLocalInt(oPC,"Veshi",0);
       effect ePCEffect = GetFirstEffect(oPC);
       effect eEf1=EffectAbilityIncrease(ABILITY_STRENGTH,10);
       effect eEf2=EffectAbilityIncrease(ABILITY_DEXTERITY,10);
       effect eEf3=EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
       effect eEf4=EffectAbilityIncrease(ABILITY_WISDOM,10);
      while (GetIsEffectValid(ePCEffect))
       {
          if ((ePCEffect==eEf1)||(ePCEffect==eEf2)||(ePCEffect==eEf3)||(ePCEffect==eEf4))
               RemoveEffect(oPC,ePCEffect);
          ePCEffect = GetNextEffect(oPC);
       }    
    }
}


Вроде так
Как видишь, локалки не нужны. Так что первый скрипт можно упростить


QUOTE (Grazzt @ Dark Prince, Feb 14 2005, 17:22)
Можно ли каким-то образом выяснить, есть ли к примеру в очереди для этого объекта комманда "переместиться к тэгу B" и очередность её выполнения относительно других комманд очереди? Можно ли каким-то образом "вручную" менять очередность?

нет.
Можно добиться такого эффекта другим методом, но копаться в стеке акций нельзя.


QUOTE (Archangel @ Feb 14 2005, 21:18)
В принципе все получается, но я не знаю как сделать проверку на, то, что НеПиСя атакуют.

если он получил Дамаг, значит его атакуют. проверка не нужна.

QUOTE (Aiwan @ Feb 15 2005, 17:17)
Ты хочешь еще кнопочку еррорлог, и тебе пишет тулсет где какую запятую тебе поставить, мол вы ошиблись.Учись скриптить и не морочь нам голову.

Не кипятись. :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 00:33
Сообщение #721


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



боюсь, что и Lex не попал... прилагаю официальную спраУку:
QUOTE

Remarks
A common mistake with this function is to use the following approach to remove, say, a sleep effect:
effect eSleep=EffectSleep();
RemoveEffect(oPC, eSleep);
This doesn't work, because calling EffectSleep creates a new effect. It is thus not the sleep effect that is currently on oPC, but a different sleep effect.


так что тут должно быть примерно такое:
Neverwinter Script Source
void main()
{
    object oPC=GetPCItemLastUnequippedBy();
    object oItem=GetPCItemLastUnequipped();
    if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
    {
      if (GetLocalInt(oPC,"Veshi")==0) return;
      SetLocalInt(oPC,"Veshi",0);
      effect ePCEffect = GetFirstEffect(oPC);
      while (GetIsEffectValid(ePCEffect))
      {
          if((GetEffectType(ePCEffect) == EFFECT_TYPE_ABILITY_INCREASE) &&
            ((GetEffectCreator(ePCEffect) == GetModule()))
              RemoveEffect(oPC, ePCEffect);
          ePCEffect = GetNextEffect(oPC);
      }   
    }
}


дабы не сымать "чужие" эффекты, стоит проверочка на создателя...
если я правильно помню, то этим не обойдешься, если хочешь,
чтоб все ровно было - после реста эти эффекты "улетают"... :swoon:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Feb 16 2005, 00:38
Сообщение #722


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

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



Хехе, нет, dumbo, тут я все попал. :)

CODE

effect eSleep=EffectSleep();
RemoveEffect(oPC, eSleep);
This doesn't work...

но я то что удаляю?
CODE

ePCEffect = GetNextEffect(oPC);
RemoveEffect(oPC,ePCEffect);

Проверку на креатора можно внести в мой вариант, но просто подъем стата на 10 пунктов вещь довольно редкая.


Но твой вариант тоже верен. За одним НО
- снимутся все эффекты повышения статов, наложенных модулем. А это могут быть эффекты от других вещей. (например зелье ловкости. Хотя тут я не уверен, что эффект накладывает модуль, надо попробовать.)

Я уже сталкивался с подобными делами. У себя я демал моим вариантом + проверял креатора. Чтобы уж наверняка. (креатором был НПС Effector, что стоял у меня в закрытой локации. )
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 00:58
Сообщение #723


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



Lex
эх, спорить буду. :tomato:
спраУку я привел немного не для того... а для чего - сейчас поймешь. :drag:
удаляешь ты тот что нужно эфект, перечисляемый. да. но!
обрати внимание с чем ты его сравниваешь. вот где порылась собака,
описываемая в нотайсе. ты сравниваешь эффект созданный (давно=) в OnEquip
с только что созданным новым эффектом. даже если эту конструкцию
пропустит компилер, в чем я сомневаюсь, равны они никак и никогда не будут.

спецовый НПС-зэк - стопудовый хит в деле создания скриптов... :good:
это я упустил. а зря.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shad
сообщение Feb 16 2005, 09:20
Сообщение #724


Level 3
*

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



QUOTE (Friedrich @ Feb 13 2005, 20:23)
QUOTE
И еще вопросик как мне соединить в скрипте на локации 4 заклинания Луч Мороза
Например 4 Точки маршрута и из 1 точки бьёт луч во 2 и т.д

На вейпоинты, по-моему, вообще ничего накладывать нельзя. На не статичные невидимые плейсаблы - можно.

Точно. И на локацию луч тож наложить нельзя. То все что я выше написал - неподходит. Подходит вот что:
1. Расставляем вейпойнты с тегами от имя0 до имяN, invisobj001 - ResRef невидимого _нестатического_ объекта (_статичекий_ невидимый лежит в Placeable Objects/Miscellaneous), этот скрипт вешаем на НПС:
Neverwinter Script Source
void main()
{
    int i = 0;
    string sWPTag = "имя";
    object oSource;
    object oTarget = CreateObject(OBJECT_TYPE_PLACEABLE, "invisobj001",
                    GetLocation(GetWaypointByTag(sWPTag+"0")),
                    0, "IO"+sWPTag+"0");
    //First temporary target object created
    ClearAllActions();
    ActionCastSpellAtObject(SPELL_RAY_OF_FROST, oTarget, METAMAGIC_ANY, 1);
    //NPC shoots first ray
    DestroyObject(oTarget, 7.0);
    //Temporary invisible target will be destroyed. Place here how long show must go on
    while(GetIsObjectValid(GetWaypointByTag(sWPTag+IntToString(++i))))//Validate next waypoint
    {
        oSource = oTarget;//Choose next source
        oTarget = CreateObject(OBJECT_TYPE_PLACEABLE, "invisobj001",
                  GetLocation(GetWaypointByTag(sWPTag+IntToString(i))),
                  0, "IO"+sWPTag+IntToString(i));
        //Create next temporary target object
        DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oSource, BODY_NODE_CHEST), oTarget, 30.0));
        //Delayed appliance of ray effect. Show time really maintained by destroying source/target object
        DestroyObject(oTarget, 7.0);//Destroy temporary object. Place here how long show must go on
    }
    DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oTarget, BODY_NODE_CHEST), GetObjectByTag("IO"+sWPTag+"0"), 30.0));
    //Close polygon
}

2. Расставляем невидимые нестатические с тегами от Тег0 до ТегN, вешаем скрипт на НПС:
Neverwinter Script Source
void main()
{
    int i = 0;
    string sIOTag = "Тег";
    object oSource;
    object oTarget = GetObjectByTag(sIOTag+"0");
    //First target object chosen
    ClearAllActions();
    ActionCastSpellAtObject(SPELL_RAY_OF_FROST, oTarget, METAMAGIC_ANY, 1);//NPC shoots first ray
    while(GetIsObjectValid(GetObjectByTag(sIOTag+IntToString(++i))))//Validate next waypoint
    {
        oSource = oTarget;//Choose next source
        oTarget = GetObjectByTag(sIOTag+IntToString(i));
        //Choose next target object
        DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oSource, BODY_NODE_CHEST), oTarget, 5.0-0.2*i));
        //Delayed appliance of ray effect. Replace 5.0 with needed show time
    }
    DelayCommand(2.0+0.2*i, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_COLD, oTarget, BODY_NODE_CHEST), GetObjectByTag(sIOTag+"0"), 5.0-0.2*i));
    //Close polygon. Replace 5.0 with needed show time
}


Приимущество первого - красиво постепенно исчезает єффект, приимущество второго - проще.

Сообщение отредактировал Shad - Feb 16 2005, 09:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nokoll
сообщение Feb 16 2005, 10:51
Сообщение #725


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

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



Shad
Спасибо Дома Попробую, сделать. ;)
Добавлено в [mergetime]1108541889[/mergetime]
Я непонел как это сделать Расставляем вейпойнты с тегами от имя0 до имяN, invisobj001 - ResRef невидимого _нестатического_ объекта (_статичекий_ невидимый лежит в Placeable Objects/Miscellaneous), этот скрипт вешаем на НПС:. и на кокой слот у НПК ставить.
Я Придумал свою версию скрипта как думаеш норма!
Делается 5 НЕВИДИМЫХ НПК ПРИСВАЕВАИМ им номера и теги и вперёд..

Neverwinter Script Source
void main()
{
        int nNumber = StringToInt(GetStringRight(GetTag(OBJECT_SELF),1));
        //determines target of the lightning
        if (nNumber == 5)
        {
            nNumber = 1;
        }
        else
        {
            nNumber++;
        }
        object oTarget = GetNearestObjectByTag("Nev_Npc" + IntToString(nNumber));
        if(GetIsObjectValid(oTarget))
        {
            DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_PERMANENT,EffectBeam(VFX_BEAM_COLD,OBJECT_SELF,BODY_NODE_CHEST),oTarget));
        }

}


его ещё не проверял хочу посаветывотся. :good:

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Feb 16 2005, 11:36
Сообщение #726


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

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



Neverwinter Script Source
       effect ePCEffect = GetFirstEffect(oPC);
       effect eEf1=EffectAbilityIncrease(ABILITY_STRENGTH,10);
       effect eEf2=EffectAbilityIncrease(ABILITY_DEXTERITY,10);
       effect eEf3=EffectAbilityIncrease(ABILITY_CONSTITUTION,10);
       effect eEf4=EffectAbilityIncrease(ABILITY_WISDOM,10);
      while (GetIsEffectValid(ePCEffect))
       {
          if ((ePCEffect==eEf1)||(ePCEffect==eEf2)||(ePCEffect==eEf3)||(ePCEffect==eEf4))
               RemoveEffect(oPC,ePCEffect);
          ePCEffect = GetNextEffect(oPC);
       }

Лекс, честно говоря, я согласен с Дамбо и сомневаюсь, что такая схема сработает. Компилятор-то ее схавает, а вот работать она будет неверно. То, что привел Дамбо - есть действительно правильный вариант.
Neverwinter Script Source
      effect ePCEffect = GetFirstEffect(oPC);
      while (GetIsEffectValid(ePCEffect))
      {
          if((GetEffectType(ePCEffect) == EFFECT_TYPE_ABILITY_INCREASE) &&
            ((GetEffectCreator(ePCEffect) == GetModule()))
              RemoveEffect(oPC, ePCEffect);
          ePCEffect = GetNextEffect(oPC);
      }

Только объект Модуля все же мне кажется не стоит проверять, как креатора. Креатором эффекта от Зелий является тот, кто пьет это зелье. По сути он применяет эффект на самого себя. Это как обкаст OBJECT_SELF.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 13:27
Сообщение #727


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



запустил-таки я этот гадский(потому что тормознооой) тулсет... :bad:
в конструкции Lex'a типа ePCEffect==eEf1, которая почему-то навеяла на меня сомнения(которые, впрочем, через некоторое время после нажатия кнопки "Отправить", рассеялись. просто редактировать посты - не мое;) относительно компилябельности, с этой точки зрения ничего предосудительного нет.

итак - краткое руководство по созданию "набора нашера": :drag:

1. на OnPlayerEquipItem вешаем:
Neverwinter Script Source
void main()
{
  object oPC = GetPCItemLastEquippedBy();
  object oItem1=GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
  object oItem2=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
  object oItem3=GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
  object oItem4=GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
  if(GetTag(oItem1)=="Item1"&&
    GetTag(oItem2)=="Item2"&&
    GetTag(oItem3)=="Item3"&&
    GetTag(oItem4)=="Item4"&&GetLocalInt(oPC,"Veshi")==0)
  {
    SetLocalInt(oPC,"Veshi",1);
    object oNasher = GetObjectByTag("Nasher");
    SetLocalObject(oNasher, "Veshi_owner", oPC);
    event eSpecialEvent = EventUserDefined(2222);
    SignalEvent(oNasher,eSpecialEvent);
  }
  return;
}


2. на OnPlayerUnEquipItem такое:
Neverwinter Script Source
void main()
{
  object oPC=GetPCItemLastUnequippedBy();
  object oItem=GetPCItemLastUnequipped();
  if(GetTag(oItem)=="Item1"||
    GetTag(oItem)=="Item2" ||
    GetTag(oItem)=="Item3" ||
    GetTag(oItem)=="Item4" )
  {
    if (GetLocalInt(oPC,"Veshi")==0) return;
    SetLocalInt(oPC,"Veshi",0);
    effect ePCEffect = GetFirstEffect(oPC);
    while(GetIsEffectValid(ePCEffect))
    {
      if((GetEffectType(ePCEffect) == EFFECT_TYPE_ABILITY_INCREASE) &&
        (GetEffectCreator(ePCEffect)==GetObjectByTag("Nasher")))
        RemoveEffect(oPC, ePCEffect);
      ePCEffect = GetNextEffect(oPC);
    }
  }
}


3. создаем товарища "Nasher Adio" с тэгом Nasher и
в OnUserDefined ему вешаем такое:
Neverwinter Script Source
void main()
{
  object oPC = GetLocalObject(OBJECT_SELF, "Veshi_owner");
  if (!GetIsPC(oPC)) return;
  if (GetUserDefinedEventNumber()==2222)
  {
    SpeakString("Ну ты молодец, в натуре!", TALKVOLUME_SHOUT);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,
      EffectAbilityIncrease(ABILITY_STRENGTH,10),oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,
      EffectAbilityIncrease(ABILITY_DEXTERITY,10),oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,
      EffectAbilityIncrease(ABILITY_CONSTITUTION,10),oPC);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT,
      EffectAbilityIncrease(ABILITY_WISDOM,10),oPC);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,
      EffectVisualEffect(VFX_DUR_STONEHOLD),oPC,1.5);
  }
  DeleteLocalObject(OBJECT_SELF, "Veshi_owner");
}


note: после сна эффекты снимутся. надо будет перенадевать шмотку.
2lazy... :drag:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 16 2005, 20:50
Сообщение #728


Level 8
***

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



dumbo Lex
пасибо...Туго у меня с while, но с остальным понял....Просто не знал как через уайл задать, чтоб не убирались все эййекты....
И кстати....Помнится с Дб говорили...
Remove убирает только эффекты с одного скрипта...В одном теле....
Обидно :vava:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 16 2005, 21:27
Сообщение #729


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



MasterMage, не понял тебя.
какие "эффекты с одного скрипта"? какие тела? :swoon:
Remove убирает то, что ему говорят, независимо от того, откуда это взялось.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
•Immortal•
сообщение Feb 16 2005, 21:51
Сообщение #730


Level 1


Класс: Бледный Мастер
Характер: Neutral Evil
Раса: Человек



Нужен скрипт чтобы непись давал плееру 10 лямов при базаре, просто я сам никрена в скриптах не лазею...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Feb 17 2005, 04:00
Сообщение #731



Иконки Групп

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



QUOTE (•Immortal• @ Feb 16 2005, 21:51)
Нужен скрипт чтобы непись давал плееру 10 лямов при базаре, просто я сам никрена в скриптах не лазею...

На ветке диалога, где нужно дать "10 лямов", переходишь на вкладку Action Taken (Совершены действия). Это справа внизу. Там нажимаешь на кнопку с иконкой красной шляпы. Далее разберешься.
Либо, если хочешь готовый, то:
Neverwinter Script Source
void main()
{
GiveGoldToCreature(GetPCSpeaker(), 1000000);
}

Пока не особо разбираешься в скриптах, юзай wizard`а (красная шляпка) и обязательно качай учебник Aiwan`а. Для новичка, ИМХО, самое лучшее. + даже если плохо знаешь англ, все равно используй lexicon. Там достаточно просто со словарем разобраться. + в редакторе скриптов, справа вверху есть фильтр. Большинство функций имеют в своем теле англ. слова. Обрати внимание на функцию выше. ДатьЗолотоСозданию. Соответсвенно в фильтре ты можешь ввести gold, и он тебе выдаст все функции, которые содержат этот набор букв (здесь gold), а это почти тоже самое, что и работают с этим набором букв (здесь золотом).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shad
сообщение Feb 17 2005, 05:19
Сообщение #732


Level 3
*

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



QUOTE (Nokoll @ Feb 16 2005, 10:51)
Shad
Спасибо Дома Попробую, сделать. ;) 
<small>Добавлено в 11:18</small>
Я непонел как это сделать Расставляем вейпойнты с тегами от имя0 до имяN, invisobj001 - ResRef невидимого _нестатического_ объекта (_статичекий_ невидимый лежит в Placeable Objects/Miscellaneous), этот скрипт вешаем на НПС:. и на кокой слот у НПК ставить.

Именя вейпойнтов например WP_NAME1,WP_NAME2,WP_NAME3,WP_NAME4..., тогда WP_NAME это имя, его вписываем в скрипт в строке
Neverwinter Script Source
string sWPTag = "имя";
Количество вейпойнтов неограничено.
Потом создаёшь из Placeable Objects/Miscellaneous/Invisible Object копию, снимая флаг Static (Useable ставить необязательно), ResRef получившегося объекта вставляем в скрипт вместо invisobj001.
Скрипт вешаем NPC на Action Taken в диалоге.
QUOTE (Nokoll @ Feb 16 2005, 10:51)

Я Придумал свою версию скрипта как думаеш норма!
Делается 5 НЕВИДИМЫХ НПК ПРИСВАЕВАИМ им номера и теги и вперёд..

Neverwinter Script Source
void main()
{
        int nNumber = StringToInt(GetStringRight(GetTag(OBJECT_SELF),1));
        //determines target of the lightning
        if (nNumber == 5)
        {
            nNumber = 1;
        }
        else
        {
            nNumber++;
        }
        object oTarget = GetNearestObjectByTag("Nev_Npc" + IntToString(nNumber));
        if(GetIsObjectValid(oTarget))
        {
            DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(VFX_BEAM_COLD, OBJECT_SELF, BODY_NODE_CHEST), oTarget));
        }

}


его ещё не проверял хочу посаветывотся. :good:


Можно и так, но тогда чётко ограничено количество узлов, и чтобы это хотябы заработало надо добавить пару строчек так:

Neverwinter Script Source
void main()
{
    int nNumber = StringToInt(GetStringRight(GetTag(OBJECT_SELF),1));
    //determines target of the lightning
    if (nNumber == 5)
    {
      nNumber = 1;
    }
    else
    {
      nNumber++;
    }
    object oTarget = GetNearestObjectByTag("Nev_Npc" + IntToString(nNumber));
    if(GetIsObjectValid(oTarget))
    {
       DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectBeam(VFX_BEAM_COLD, OBJECT_SELF, BODY_NODE_CHEST), oTarget));
    }
    int i = GetLocalInt(OBJECT_SELF, "RAYCHi");
    if (i++<5)
    {
        SetLocalInt(oTarget, "RAYCHi", i);
        DelayCommand(2.0, ExecuteScript("s3", oTarget));
        //Replace s3 here with your script name
    }
}

, а первому НПС повесить локальную переменную RAYCHi типа int значением 1.

Сообщение отредактировал Shad - Feb 17 2005, 06:57
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
MasterMage
сообщение Feb 17 2005, 09:19
Сообщение #733


Level 8
***

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



dumbo
смотри
В одном скрипте создал еффект, это раз
В другом ты хочешь его убрать RemoveEffect (oPC,eEf);, но он не уберет, так как не находит
Но если в скрипте
(смотри мой ролик в "Построение скриптовых сцен")
Добавлено в [mergetime]1108621226[/mergetime]
сначала создал, а потом убираешь, то убирается
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Лито
сообщение Feb 17 2005, 13:41
Сообщение #734


Level 9
***

Класс: Страж Тьмы
Характер: Chaotic Evil
Раса: Нежить



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

Вот скрипт который я уже написал:
OnSpawn
Neverwinter Script Source
void main()
{
object oPC = GetLastSpeaker();
SetListening(OBJECT_SELF, 1);
SetListenPattern(OBJECT_SELF,"бубен",1);
}


OnConversation
Neverwinter Script Source
#include "nw_i0_tool"
void main()
{
object oPC = GetLastSpeaker();
if (GetListenPatternNumber()==1 && GetIsListening(OBJECT_SELF))
   {

       SpeakString ("Доступ разрешен");
       SetListenPattern(OBJECT_SELF,"**",10);

   }

}


И еще как запирать дверь открытую ключом, обратно на тот же ключ?

Сообщение отредактировал Лито - Feb 17 2005, 13:45
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Feb 17 2005, 21:52
Сообщение #735


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



MasterMage
в твоем ролике все работает потому, что ты работаешь с одним и тем же экземпляром объекта эффекта(здесь и далее под словом "объект" я подразумеваю не object, а набор некоторых данных). неудобство заключается в том, что на некоторые объекты нельзя создавать ссылки. т.е. скажем ссылку на object, int, float, string, location ты можешь сохранить в локальных данных какого-либо объекта, а вот с effect, itemproperty это не проходит, а жаль... приходится их перебирать.

Лито
дык это...
OnSpawn
Neverwinter Script Source
void main()
{
  SetListening(OBJECT_SELF, 1);
  SetListenPattern(OBJECT_SELF,"бубен",1);
  SetListenPattern(OBJECT_SELF,"**",2);
}


OnConversation
Neverwinter Script Source
void main()
{
  object oPC = GetLastSpeaker();
  object oDoor = GetObjectByTag("golem_door");
  if (!GetIsListening(OBJECT_SELF)) return;
  switch (GetListenPatternNumber())
  {
      case 1:
        SpeakString ("Проходи");
        // отмыкаем дверь
        SetLocked(oDoor, FALSE);
        AssignCommand(oDoor, ActionOpenDoor(oDoor));
        break;
      case 2:
        SpeakString ("Ты не пройдешь");
        break;
      default:
        SpeakString ("Скажи пароль и проходи...");
  }
}


запирание двери не зависит от условий лочки, выставленных в свойствах оной -
- почитай описание SetLocked
на дверь - OnOpen, OnUnlock:
Neverwinter Script Source
void main()
{
  // на дверь можно повесить переменную close_delay - смысл понятен, думаю...
  float fDelay = IntToFloat(GetLocalInt(OBJECT_SELF, "close_delay"));
  if (fDelay==0.0) fDelay = 5.0;
  DelayCommand(fDelay, SetLocked(OBJECT_SELF, 1));
  DelayCommand(fDelay, ActionCloseDoor(OBJECT_SELF));
}


Сообщение отредактировал dumbo - Feb 17 2005, 21:53
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



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