Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты: Просьбы о написании
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights 2 Obsidian Toolset
Страницы: 1, 2
Aiwan
Если вам нужен скрипт, который вы не наши на форуме и не в состоянии написать сами, то тут можете попросить других форумчан о помощи. Таким образом в теме только запрос и скрипт под него, ничего более. Если вам нужно оптимизировать скрипт или понять, почему он плохо работает, то вам сюда.

___
База скриптов (NWN)
Скрипты для новичков (NWN)
Вопросы по скриптам (NWN)
Построение скриптовых сцен (NWN)
Вопросы по скриптам (NWN2)

Так как скриптинг не сильно изменился, то большая часть вещей, написаная под НВН1 нормально работает и в НВН2. Посмотрите в этих темах, вполне возможно вы найдете интересующую вас информацию.
Lex
разговоры об архиве статей тудысь: http://www.city-of-masters.ru/forums/index...=2580&st=50
Sugo77
Привет всем мне требуются 2 скрипта:первый на респ монстров и нпс, через какоето время
и второй на смену фракции ну то есть подхожу к какомуто предмету тыкаю на него и стаю враждебен (хостаил) другому игроку автоматически(как намногих пвп шардах).
shadowdweller
Пробую написать скрипт на дверь, которая должна открываться при проверке на две переменные. В 13 строке (это вторая снизу фигурная скобка) выдает ERROR: INCORRECT VARIABLE STATE LEFT ON STACK. Не подскажут ли мне, где ошибка?

Neverwinter Script Source
int StartingConditional()
{
    object oPC = GetPCSpeaker();

    if(GetIsPC(oPC))
    {
        if((GetLocalInt(oPC, "ПЕРЕМЕННАЯ_1") == 1) & (GetLocalInt(oPC, "ПЕРЕМЕННАЯ_2") == 1))

        object oDr1 = GetObjectByTag("DOOR_KEP_ENT");

        SetLocked(oDr1,FALSE);
        AssignCommand(oDr1, ActionOpenDoor(oDr1));
    }
}
Jadent
1. int StartingConditional() — это для условия в диалоге. Т.е. появится данная фраза или нет. А в данном случае нужно использовать void main()
2. Во втором условии (где проверяются переменные) лучше использовать оператор &&, а не & (мелочь, правда, но все-таки).
3. После этого же условия не хватает операторных скобок: "{" на 8 строке, "}" после 12 строки (из-за этого не компилируется).
Lex
4. object oDr1 = GetObjectByTag("DOOR_KEP_ENT"); лучше вынести из-под условия, разделив на 2 части
Neverwinter Script Source
object oDr1;
...
if ()
  {
  oDr1 = GetObjectByTag("DOOR_KEP_ENT");
  }

в данном скрипте не критично, но в более сложных может сыграть плохую шутку.
gennady
Цитата
Пробую написать скрипт на дверь, которая должна открываться при проверке на две переменные. В 13 строке (это вторая снизу фигурная скобка) выдает ERROR: INCORRECT VARIABLE STATE LEFT ON STACK. Не подскажут ли мне, где ошибка?

shadowdweller, если используете int StartingConditional(), то нужно обязательно использовать return… (поэтому скрипт и не компилится)

Второе, после проверки условия, если нужно выполнить несколько операций, то нужно записать все действия в скобочках. Иначе выполнится только одна нижняя строка под проверкой…

Neverwinter Script Source
if((GetLocalInt(oPC, "ПЕРЕМЕННАЯ_1") == 1) & (GetLocalInt(oPC, "ПЕРЕМЕННАЯ_2") == 1))
object oDr1 = GetObjectByTag("DOOR_KEP_ENT");

Проверку на ГГ делать не надо, ведь на нем должно висеть две локалки – этого более чем достаточно… biggrin.gif

Ваш скрипт можно записать примерно так:

Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();
object oDr1 = GetObjectByTag("DOOR_KEP_ENT");

if(GetLocalInt(oPC, "ПЕРЕМЕННАЯ_1") == 1 & GetLocalInt(oPC, "ПЕРЕМЕННАЯ_2") == 1)
{
  SetLocked(oDr1,FALSE);
  AssignCommand(oDr1, ActionOpenDoor(oDr1));
  SpeakString("Проходите!");
  return TRUE;
}
else
{SpeakString("Вы не можете пройти!"); return FALSE;}
}
shadowdweller
Спасибо, господа! Пойду ковырять. smile.gif
Lex
вопросы про ГУИ и интерфейсные моды перенесены сюда: http://www.city-of-masters.ru/forums/index...?showtopic=2580
Валеско
Решил переписать скрипт:

Neverwinter Script Source
void main( )
{
object oWeapon = GetItemInSlot
( INVENTORY_SLOT_RIGHTHAND,
GetLastUsedBy( ) );

if ( !GetIsObjectValid( oWeapon )) return;
AddItemProperty( DURATION_TYPE_TEMPORARY,
ItemPropertyDamageBonus
( IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1d6
)
, oWeapon, 40.0 );
}



который на жаровне. Нужно чтобы распространялся только на оружие с определенным тегом и это оружие по истечении времени исчезало (расплавлялось). Можно, чтобы в конце еще кидало сообщение что "оружие расплавилось".
Jadent
Я еще добавил сообщения-напоминания и спецэффект:

Neverwinter Script Source
//------------------------------ конфиг ------------------------------------------------------------------------------------------------------------
float fTime = 120.0; //время, через которое оружие расплавится
string sTag = "fire_weapon"; //тег оружия, которое игрок может здесь использовать
effect eEffect = EffectNWN2SpecialEffectFile( "sp_fire_cast" ); //спецэффект при наложении эффекта и уничтожении оружия
string sMesError = "Только особенное оружие может выдержать пламя этой жаровни."; //сообщение, выдаваемое когда у игрока нет оружия или оно имеет другой тег
string sMessage1 = "Оружие в ваших руках сильно нагревается от магического пламени."; //сообщение, выдаваемое через 1/4 времени до уничтожения оружия
string sMessage2 = "Оружие в ваших руках раскалено добела и понемногу начинает терять форму."; //сообщение, выдаваемое через 1/2 времени до уничтожения оружия
string sMessage3 = "Оружие в ваших руках плавится и скоро станет непригодным к использованию."; //сообщение, выдаваемое через 3/4 времени до уничтожения оружия
string sMessage4 = "Оружие в ваших руках окончательно расплавилось."; //сообщение, выдаваемое во время уничтожения оружия
//--------------------------------------------------------------------------------------------------------------------------------------------------

object oPlayer = GetLastUsedBy( );
object oWeapon = GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPlayer );
void Melting( int iLevel );

void main( )
{
    if ( GetTag( oWeapon )!=sTag )
    {
        SendMessageToPC( oPlayer, "<color=red><b>"+sMesError+"</b></color>" );
        return;
    }
    if ( GetLocalInt( oWeapon, "Melting" ) ) return;
   
    SetLocalInt( oWeapon, "Melting", 1 );
    AddItemProperty( DURATION_TYPE_TEMPORARY, ItemPropertyDamageBonus( IP_CONST_DAMAGETYPE_FIRE, IP_CONST_DAMAGEBONUS_1d6 ), oWeapon, fTime );
    ApplyEffectToObject( DURATION_TYPE_INSTANT, eEffect, oPlayer );
    DelayCommand( 0.25*fTime, Melting( 1 ) );
}

void Melting( int iLevel )
{
    if ( GetItemInSlot( INVENTORY_SLOT_RIGHTHAND, oPlayer )==oWeapon )
    {
        switch ( iLevel )
        {
        case 1:
            SendMessageToPC( oPlayer, "<color=red><b>"+sMessage1+"</b></color>" );
        break;
        case 2:
            SendMessageToPC( oPlayer, "<color=red><b>"+sMessage2+"</b></color>" );
        break;
        case 3:
            SendMessageToPC( oPlayer, "<color=red><b>"+sMessage3+"</b></color>" );
        break;
        case 4:
            SendMessageToPC( oPlayer, "<color=red><b>"+sMessage4+"</b></color>" );
            ApplyEffectToObject( DURATION_TYPE_INSTANT, eEffect, oPlayer );
        break;
        }
    }
    if ( iLevel<4 ) DelayCommand( 0.25*fTime, Melting( iLevel+1 ) );
    else DestroyObject( oWeapon );
}

Хотелось бы увидеть комментарии мастеров по оптимизации.
Валеско
Заработало. Jadent, молоток, - отличный скрипт!
gennady
Jadent, хорошо прибумал запустить функцию из самой функции! Молодец! Одно но, если присвоил предмету локалку, то и проверяй ее в функции Melting... Зачем проверять любое оружие в руке?
Jadent
Цитата(gennady @ Oct 21 2007, 12:43) *
Одно но, если присвоил предмету локалку, то и проверяй ее в функции Melting... Зачем проверять любое оружие в руке?
Вообще, это проверка на тот случай, когда игрок уже снял или выбросил "плавящееся" оружие. Чтобы не посылать ему ненужных сообщений.

А по локалке там проверять нельзя, иначе игроку будет идти сразу по несколько сообщений, если он сделает несколько таких "плавящихся" клинков.
Локалка-то на все оружия ставится одна и та же.
Lex
Переместил вопросы по скриптам сюда: Скрипты
Переместил одиночные вопросы сюда: Одиночные вопросы
и не нужно в следующий раз сразу в двух темах постить одно и то же. Одного раза более чем достаточно.
Celestial
Нужен скрипт, чтобы адамантиновое оружие рассыпалось при выносе его из Андердарка.

Технически вижу это так: если (условия для применения пенальти дроу/дургарам) = True, и если предмет из адамантина - то изъять у PC предмет и сделать надпись в лог-бокс PC.
Kirald
Маленькая просьба.
Нашел скрипт на проверку в диалогах спасброска на волю вот он

Код
// Will tests as used i the cinderella convo
int StartingConditional(int nDC)
{
    SetLocalInt(GetFirstPC(),"WILSAVE",nDC);
    
    int nSAVE = d20(1) + GetWillSavingThrow(GetFirstPC());
    
    SetCustomToken(100,GetStringByStrRef(16777844) +IntToString(nDC) +GetStringByStrRef(16777845) +IntToString(nSAVE) +GetStringByStrRef(16777808));
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;
}


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

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

Заранее спасибо всем откликнувшимся (даже ругающимся админам (если они не ругаються конечно)))) а так же создателю или просто человеку который положил этот скрипт в свой модул (Крик волка) чуваку (в русском смысле)))) который создал модуль Крик волка, а так же его переводчикам журналу игромания или точнее формату С фуу-у-ух.
azathoth
а какая разница, писать "check_will/fort" или "check [1] [2]" - ? первое всё же нагляднее

Neverwinter Script
int StartingConditional(int nDC, int nType)
{
    object oPC = GetPCSpeaker();

    if (nType == 1)
    {
        return WillSave(oPC, nDC) != 0;
    }
    else if (nType == 2)
    {
        return ReflexSave(oPC, nDC) != 0;
    }
    return FortitudeSave(oPC, nDC) != 0;
}
Melshin
Есть серьезная идея, над которой нужно подумать. В свое время создавал парсер локаций для системы телепортационных кругов. Круги менялись объектами, всякими.

Теперь возник другой вопрос. Существуют АОЕ заклинания. Возьмем 3 заклинания - масло, паутина и клауд килл.

Что нужно сделать по маслу - первоначальная простая версия - 1 лужа на кастера. Вторая, версия средней сложности - масло не стыкуется на 1 квадрате, т.е. 2 спаса кинуть в принципе невозможно, если АОЕ эффекты соприкасаются, то последний скастованный уничтожается.

С паутиной - в принципе то же самое, не должна стыковаться с маслом (т.е. тоже об него убивается). А также при соприкосновении паутина - паутина последний уничтожается, на первом увеличивается ДЦ.

Ну и клауд килл должен стыковать с остальными, при касте на 1 квадрат увеличивается ДЦ до определенного капа.

Это непросто, это сложно и требует полностью свои новые функции... Если вот эти 3 примера мне или кому-то или совместно удастся реализовать, то все остальное пойдет по шаблону...

ЗЫ: и еще по сабжу - делаю универсальные инклуд функции, к примеру void DoExplosion (int nDC, int nAllowReflexSave, int nAllowEvasion, int nDamage, int nDamageType, float fRadius, effect eExplVis, effect eHitVis, location locTarget) - пока только не магические взрывы, позже еще проверку спелл резистов сделаю и т.д. Делается с целью полного переделывания заклинаний НВН-а 2 под 1 строчку и создания многоцелевых функций... Как сделаю таковых побольше, выложу... Кстати, с такой функцией в применении к, допустим, файрболлу - возможны чеки на пространство и вообще возможность атакуемой цели двигаться, т.е. если увернуться некуда - эвэйжн и т.д. не сработает, ну или если цель не может двигаться - броска рефлекса вообще не будет (ну никак она не может увернуться). Ну и т.д.
Jadent
Как сделать одну лужу на кастера. В скрипте nw_s0_grease есть такая строчка:
Neverwinter Script
//Declare major variables including Area of Effect Object
effect eAOE = EffectAreaOfEffect(AOE_PER_GREASE);
Меняем ее на следующее:
Neverwinter Script
string sAoeTag = GetFirstName(OBJECT_SELF)+GetLastName(OBJECT_SELF)+"_Grease";
object oAoe = GetObjectByTag(sAoeTag);
if (GetIsObjectValid(oAoe)) DestroyObject(oAoe);

//Declare major variables including Area of Effect Object
effect eAOE = EffectAreaOfEffect(AOE_PER_GREASE, "", "", "", sAoeTag);
Думаю, идея понятна.

В этом же примере можно организовать стыковку — для паутины проверять, нет ли рядом (в радиусе паутины) объекта с тегом, оканчивающимся на "_Grease".

Для стыковки DC — находить объект с тем же тегом ("_Web", например), удалять его и на его месте создавать новый АоЕ-эффект с бОльшим DC.
Тут еще придется дописать несколько мелочей — чтобы лишний раз не срабатывали OnExit и OnEnter при смене AoE-объекта и сохранялась длительность действия спелла (если нужно).
Это сведется к проверкам локалок, скорее всего, так что ничего трудного.
DarkPhoenix
Есть ли какая-то возможность пркрепить фигурку нпц или хотя бы плейсебл к модели ГГ? Например зделать чтоб фигурка демилича парила над плечем ГГ и он мог так бегать.
Melshin
Одну лужу на кастера и повышение ДЦ это в принципе ясно... И то и то уже сам реализовал, первое давно находится на шарде. Проблема в другом... Как быстро и вовремя уничтожить АОЕ эффект, складывающийся с другим и при этом не вносить в каждый закл сто проверок на каждый другой закл...

Ладно, пока что попробую создать несколько общих функций:

1) Создать АОЕ эффект и назначить ему тэг "тип спелла" (ака облако лужа) + "номер" с учетом 2 функции для задания номера.
2) Проверяет, существует ли на локации "тип спелла_1", потом "тип спелла_2" и т.д.
3) Проверяет, не находится ли цель закла/создающийся (важно, чтобы он не создался) АОЕ эффект в зоне нового АОЕ эффекта. Учитываются только теги от "тип спелла_х" до "тип спелла_0" по убыванию.

Промодифицировать этими функциями создание АОЕ эффекта... Выглядит не сложно...

Локалки стараюсь создавать в последнюю очередь, если нет другого выбора. Базу данных тоже лишний раз не трогаю...

Мде, каждый обьект на локации тоже плохо проверять...

2 функция.

Код
void main ()
{
string sNum = "1";
int nNum = 1;
object oLastAoe = GetObjectByTag ("AOE_ID"+ тэг локи + sNum);
while (GetIsObjectValid (eLastAoe));
{
  nNum = nNum+1;
  sNum = IntToString (nNum);
  object oLastAoe = GetObjectByTag ("AOE_"+ тэг локи+sNum);
}
//возвращаем номер АОЕ, там подумаю, как лучше и удобнее
}


1 функция пропускаем, банально просто, а вот третья... Как дойду до тулсета, поэкспериментирую...

Разрушать придется точно тот АОЕ, который уже был... Потому что создать АОЕ из воздуха не получается, xD.
Jadent
Цитата(Melshin @ Oct 19 2008, 14:03) *
1) Создать АОЕ эффект и назначить ему тэг "тип спелла" (ака облако лужа) + "номер" с учетом 2 функции для задания номера.
2) Проверяет, существует ли на локации "тип спелла_1", потом "тип спелла_2" и т.д.
Индексация ненадежна, потому что у спеллов может быть разное время действия.
Если "спелл_1" просто уничтожится после положенного количества раундов, то "спелл_2" и "спелл_3" циклы уже обрабатывать не смогут.

Соприкасающиеся эффекты лучше удалять так:
Neverwinter Script
//В скрипте спелла:
    location lTarget = GetSpellTargetLocation();
    int iSpellType = AOE_PER_WEB;//тип берем из функции EffectAreaOfEffect
    string sTagSuffix = "_Web";
    float fRadius = StringToFloat(Get2DAString("vfx_persistent", "RADIUS", iSpellType));//нужен радиус чтобы узнать, соприкасаются ли AOE

    int i = 1;
    object oOld = GetNearestObjectToLocation( OBJECT_TYPE_AREA_OF_EFFECT, lTarget, i);
    while (GetIsObjectValid(oOld) && GetDistanceBetweenLocations(lTarget, GetLocation(oOld)) < fRadius*2)//берем каждый AOE в двойном радиусе
    {
        if (GetStringRight(GetTag(oOld), GetStringLength(sTagSuffix)) == sTagSuffix) DestroyObject(oOld);//если найденный AOE того же типа, удаляем его
        i++;
        oOld = GetNearestObjectToLocation( OBJECT_TYPE_AREA_OF_EFFECT, lTarget, i);
    }


Цитата(Melshin @ Oct 19 2008, 14:03) *
Разрушать придется точно тот АОЕ, который уже был... Потому что создать АОЕ из воздуха не получается, xD.
???
Melshin
Хороший скрипт... Ладно, вначале попытаюсь до конца все реализовать по вот такому виду, а после перейду к следующей стадии, немного усложню... Выше в принципе все описано.

Цитата
Разрушать придется точно тот АОЕ, который уже был... Потому что создать АОЕ из воздуха не получается, xD.
???


Не обращай внимания, у меня дурацкий тип мышления.
Lex
[offtop]
А чего лидер ДМов занялся скриптами?
[/offtop]
Melshin
// Ну я изначально скриптер, изредка ДМ саппортом заходил, потом квесты водить стал. Теперь временно главный ДМ, т.к. настоящий ДМ неизвестно куда исчез...

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

А хотя, в общем-то, думаю, нет надобности.
Celestial
Ребят, очень нужен скриптер, на дня 2 работы: сделать скрипты на шарде.
Работу могу серьезно оплатить.
Bobaleht
Здраствуйте! Нужен скрипт чтобы вся партия автоматом переходила в др. локацию(город невервинтер конкретно)
azathoth
Из диалога? Уже есть такой скрипт

ga_jump_players(string sDestTag, int bWholePary=0, int bOnlyThisArea=1)
sDestTag - тэг вейпоинта или объекта назначения.
bWholePary - переносить ли всех; в нашем случае нужно 1.
bOnlyThisArea - только тех, кто в локе с нами; лучше 0 для надёжности.
Bobaleht
Хм, ничего не понял... Я ничего не смыслю в скриптинге, просто тупо надо обойти очередной баг(вылет при выходе из таверны дяди в 1 главе клиент storm of zehir 1.21 nodvd для 1.20.). Наверно не туда полез, извиняюсь, попробую написать в тех вопросах.
Celestial
Нужен скрипт, который затем можно будет поставить на событие: игрок заходит на шард.

Скрипт должен быть следующего содержания:

Если Мировоззрение Игрока = Good, то Фракция Игрока = GOOD;
Если Мировоззрение Игрока = Evil, то Фракция Игрока = EVIL;
Если Мировоззрение Игрока = Neutral, то Фракция Игрока = NEUTRAL;
Если в Инвенторе Игрока есть предмет с тегом ITEMIN, то Фракция Игрока = MAD;

Запустить стандартный скрипт для входа плеера на шард.
greye
Среда NWN2
Neverwinter Script
void main()
{
    object oPC = GetEnteringObject();
    int nFaction = 0, i = 0;
   
    if (GetIsPC(oPC))
    {
       for (i=0; i<18; i++)
       {
          if (GetTag(GetItemInSlot(i, oPC))=="ITEMIN") {nFaction = 9; break;}
       }
       if (!nFaction)
       {
          object oItem = GetFirstItemInInventory(oPC);
          while (nFaction ==-1 || oItem != OBJECT_INVALID)
          {
             if (GetTag(oItem)=="ITEMIN") nFaction = 9;
          }
       }
      
       if (!nFaction) nFaction = GetAlignmentGoodEvil(oPC);
      
       int nEvil=0, nMad=0, nGood=0, nNeutral=0; //Влияют на изменение репутации к соответствующим сторонам
       switch (nFaction)
       {
          case 0: break;
          case 9: {nMad = 100; nGood = 1; nNeutral = 0; nEvil = 2;}; break; //Присваивания верные только 100, остальные в зависимости от отношений фракций друг к другу (-100..100)
          case ALIGNMENT_GOOD: {nGood = 100; nNeutral = 1; nMad = 2; nEvil = 3;}; break;
          case ALIGNMENT_EVIL: {nEvil = 100; nNeutral = 1; nMad = 2; nGood = 3;}; break;
          case ALIGNMENT_NEUTRAL: {nNeutral = 100; nGood = 1; nEvil = 2; nMad = 3;}; break;
       }
      
       AdjustReputation(oPC, GetObjectByTag("EvilMember"), nEvil); //Везде в кавычках тег существа из нужной фракции
       AdjustReputation(oPC, GetObjectByTag("GoodMember"), nGood);
       AdjustReputation(oPC, GetObjectByTag("NeutralMember"), nNeutral);
       AdjustReputation(oPC, GetObjectByTag("MadMember"), nMad);               
    }
}

Насчет последнего не понял: смотря для чего тебе надо, либо убей персонажа, либо надо писать другой скрипт для ExecuteScript или onUserDefinedevent. Поправьте, если что не так.

Конкретику отправил в ПМ.
Celestial
Спасибо!

1. ExecuteScript, да спасибо. Именно это поставлю.

2. Мне нужно что-нибудь менять внутри скрипта?
У меня фракции следующей структуры: Гуд воюет с Ивлом и наоборот, Нейтрал ни с кем не воюет (и с ним тоже не воюют соответственно), Мэд - мочит всех и все мочат его.
Demon132
Народ, помогите пожалуйста..... Оч. нужен скрипт, что бы сделать Хватку титана спелом.....Для вара
Nevan
Просьба написать скрипт, который делает всех игроков враждебными друг к другу, исключая тех, которые находятся в одной группе. Событие: On Heartbeat Script. (на самом деле событие можно использовать любое, если оно позволяет добиться того же эффекта)
Kirald
Что же может измениться за год,-спросите вы,- многое,- отвечу я. Ну вот сегодня решил возобновить свою деятельность в Тулсете. За прошедший год я успел многое сделать, создал квестовый плагин для Обливиона, изучил пару скриптовых языков и языков программирования, перерыл кучу игровых движков и разобрался что к чему, ну и конечно же я повзраслел... ну короче к черту этотмонолог выложу наконец то что я сварганил и то на основе двух скриптов, это так для будующих поколений.

Код
// Save test - Тест спасбросов
// <Custom10x>; <Custom20x> где x номер спасброска (0 1 или 2)
// Type:
// 0 - Will - Воля
// 1 - Reflex - Реакция
// 2 - Fortitude - Удача
int StartingConditional(int nDC, int nType)
{
    
    if (nType == 0)// Will
    {
    
    int nSAVE = d20(1) + GetWillSavingThrow(GetFirstPC());
    
    SetCustomToken(100,IntToString(nDC)); // Скока требуеться
    SetCustomToken(200,IntToString(nSAVE)); // Спасбросок (d20)
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;
    }
    else if (nType == 1)// Reflex
    {
        
        
    int nSAVE = d20(1) + GetReflexSavingThrow(GetFirstPC());
    
    SetCustomToken(101,IntToString(nDC)); // Скока требуеться
    SetCustomToken(201,IntToString(nSAVE)); // Спасбросок (d20)
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;
    }
    
                        //Fortitude
            
    int nSAVE = d20(1) + GetFortitudeSavingThrow(GetFirstPC());
    
    SetCustomToken(102,IntToString(nDC)); // Скока требуеться
    SetCustomToken(202,IntToString(nSAVE)); // Спасбросок (d20)
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;


}
Marta
Хай. Люди добрые, помогите, плииз, написать такой скрипт, чтобы заменять на герое броню. Позарез надо. Это, вроде бы, должно быть просто, но стандартный скрипт ga_equip_slot почему-то не работает, вероятно это баг, а я в скриптах ничего не понимаю. С тем, чтобы снять с ГГ броню в диалоге проблем нет, но как одеть ему другую из диалога? У меня установлена Голд-версия "Акеллы" с двумя официальными аддонами, если это имеет значение.
Marta
Спасибо, уже не надо, скрипт написан.
Celestial
Прошу написать скрипт для сундуков:

Сундук заперт, неразрушаем.
Если сундук пуст, то с интервалом в TIMER-секунд в нем генерится случайное количество вещей (от 1 до 4х*), которые берутся из сторе с тэгом STORE.
* Если вещь - снаряд (аммуниция), то за одну вещь считается пачка в 49 снярядов - в общем, не должно генериться по одной стреле или одному сюрикену.
Если сундук заперт и его взламывают, то всей партии игрока, взломавшего замок, получает VZLOMXP-опыта.
Если сундук с ловушкой и ловушку обезвреживают, то всей партии игрока, обезвредившего ловушку, дается LOVUSHKAXP-опыта.
Если сундук заперт и получает количество повреждений, равное 100*DCзамка, то он становится открытым, но опыт за взлом не дается.
Lex
хм.. на первый взгляд все довольно просто. Что заставило обратиться за помощью с этой системой?

зы: я бы не генерил предметы раз в Х секунд. А создавал новые спустя Х секунд после того, как забрали старые, да еще с проверкой наличия игроков в зоне. (возможно привязываться лучше не к забору старых, а к открытию сундука. вдруг глянули, а там фигня, и ее оставили лежать).
Celestial
Цитата
зы: я бы не генерил предметы раз в Х секунд. А создавал новые спустя Х секунд после того, как забрали старые, да еще с проверкой наличия игроков в зоне. (возможно привязываться лучше не к забору старых, а к открытию сундука. вдруг глянули, а там фигня, и ее оставили лежать).

Да, ты прав, так будет лучше.

Цитата
Что заставило обратиться за помощью с этой системой?

Полное отсутствие навыков программирования и уход из шарда в реал нашего скриптера...
Moltean
Всем привет.Мне нужен скрипт,чтобы на определенном месте появлялся Placed effect,но не на вейпойнте,а на месте с координатами + чтобы он потом исчезал через некоторое,регулируемое время.
Lex
а в чем проблема? Тебе нужна функция ApplyEffectAtLocation координаты через location (см в редакторе какие ему параметры требуются).
Montalaar
Добрый день. Мне нужны два скрипта:

1) Скрипт который позволял бы полноценно взаимодействовать с присоеденёнными персонажами как в официальной компании(поднимать им уровень, менять снаряжение, управлять ими)
2) Скрипт который позволял бы бродить некоторым NPC по местности (например патрулирование стражником улицы)
Lex
1) это не скрипт. Просто у твоего присоединяемого персонажа должны в слотах стоять скрипты хенчей (по дефолту там другое). Посмотри в палитре хенчманов, какие там скрипты, и ставь нужному тебе НПС такие же.
2) это тоже по факту не скрипт. Достаточно сделать точки для НПС вида WP_[NPC-TAG]_[NUMBER] (где [NPC-TAG] - тэг нужного НПС, а [NUMBER] - порядковый номер точки, начиная с 01) и НПС будет по ним ходить. Причем точки делаются даже не в ручную, а через меню свойств НПС.
Orochimaru
А как сделать рассы активными при создании перса?Допустим сделать Орка или вампира как класс при создании персонажа? scratch_one-s_head.gif
Lex
кроме 2да нужно дорабатывать еще и GUI генерации персонажа (страницу выбора расы. Орк и вампир это все-таки не класс, а раса).
Как дорабатывать? тебе вряд ли кто скажет, никто вроде этим тут не занимался. Лучше всего качнуть на волте хак с новыми игровыми расами и посмотреть как там сделано.

еще один пост не по теме - будет предупреждение. Читай название топика, куда пишешь, и думай, подходит ли твой вопрос теме топика или нет.
Orochimaru
Цитата(Lex @ Aug 27 2010, 17:10) *
еще один пост не по теме - будет предупреждение. Читай название топика, куда пишешь, и думай, подходит ли твой вопрос теме топика или нет.

Сори scratch_one-s_head.gif
noooox
Может кто объяснить почему Золотой дворф-GOLDDWARF проходит проверку скриптом за рассу дуэргар? Использую этот скрипт gc_check_race_pc-DUERGAR.
Lorendroll
noooox, наверное ID перепутаны. Посмотри в racialtypes.2da.
added:
посмотрел сам, айди разные (0 и 1), но базовая раса у них одинаковая. Надо выяснять. Лучше написать свой скрипт проверки.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.