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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 108 109 110 111 112 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Aiwan
сообщение May 18 2007, 00:35
Сообщение #2721


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

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



Цитата(Lex @ May 17 2007, 22:51) [snapback]108348[/snapback]
эффект землетрясения наложить.

Попросить друга потрясти монитор (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Slam
сообщение May 22 2007, 18:51
Сообщение #2722


Level 2
*

Класс: Убийца
Характер: Neutral Evil
Раса: Человек



У меня вот образовалось два вопроса
1. Если я буду в одно и то же время выполнять много команд (например через DellayCommand с одинаковой задержкой), это может как-то негативно повлиять на работу скрипта?
2. Написал идущий ниже скрипт. Пытаюсь загнать его в функцию, но не получается. При дебаге выяснилось, что функция не может получить обьект НПС. Т.е. у меня в передаваемых параметрах стоит object NPC, когда функция начинает работать с ним, то возвращает OBJECT_INVALID. Пробовал НПС в скрипте определять и по тэгу и как OBJECT_SELF, результат один. Я вроде бы уже писал пару подобных функций и все было нормально...
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name: sl_KnockDown
//:: Place: Ever
//:://////////////////////////////////////////////
/*
Описание:
НПС вырубает ПС с анимацией одного удара
*/

//:://////////////////////////////////////////////
//:: Created By: Slam
//:: Created On: 22.05.07
//:://////////////////////////////////////////////

#include "sc_inc_debug"
void main()
{
    SetLocalInt(GetModule(), "DebugMode", 4);
    SetLocalInt(GetModule(), "DebugLogFile", 1);

    object oPC = GetFirstPC();
    object oNPC = OBJECT_SELF;

    SetCommandable(FALSE,oPC);
    SetImmortal(oPC, TRUE);
    SetImmortal(oNPC, TRUE);
    AssignCommand(oNPC, ClearAllActions());
// Записываем в локалку текущую фракцию НПС ////////////////////////////////////
    object oFactionMember = GetNextFactionMember(oNPC, FALSE);
    int i;
    for (i = 0; i < 5; i++)
    {
        if (oFactionMember != oNPC)
        {
            SetLocalObject(oNPC, "FactionMember", oFactionMember);
            break;
        }
        oFactionMember = GetNextFactionMember(oFactionMember, FALSE);
    }
////////////////////////////////////////////////////////////////////////////////

// ОПРЕДЕЛЯЕМ, ДЕРЖИТ ЛИ НПС ОРУЖИЕ В РУКАХ ДО НАЧАЛА БОЯ //////////////////////
    object oRHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC);
    object oLHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC);
    if(oRHand != OBJECT_INVALID || oLHand != OBJECT_INVALID)
    {
        SetLocalInt(oNPC, "bIsArmed", 1);
    }
////////////////////////////////////////////////////////////////////////////////

// Ударяем, а потом вырубаем ПС ////////////////////////////////////////////////
    effect eKnockdown = EffectKnockdown();
    float fNPCKnockdownTime = 10.0;
    AssignCommand(oNPC, ActionUseFeat(FEAT_KNOCKDOWN, oPC));
    DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eKnockdown, oPC, fNPCKnockdownTime));
////////////////////////////////////////////////////////////////////////////////

    DelayCommand(1.5, FadeToBlack(oPC));

// Востанавливаем фракцию НПС //////////////////////////////////////////////////
    if (GetIsObjectValid(GetLocalObject(oNPC, "FactionMember")))
    {
        object oFactionMember = GetLocalObject(oNPC, "FactionMember");
        DelayCommand(0.6, ChangeFaction(oNPC, oFactionMember));
        DelayCommand(0.7, DeleteLocalObject(oNPC, "FactionMember"));
    }
    else
        DelayCommand(0.6, ChangeToStandardFaction(oNPC, STANDARD_FACTION_COMMONER));
    DelayCommand(0.8, ClearPersonalReputation(oPC, oNPC));
////////////////////////////////////////////////////////////////////////////////

    AssignCommand(oNPC, DelayCommand(0.9, ClearAllActions(TRUE)));

// Лечим НПС и ПС //////////////////////////////////////////////////////////////
    int nMaxNPCHP = GetMaxHitPoints(oNPC);
    int nMaxPCHP = GetMaxHitPoints(oPC);
    DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(nMaxNPCHP), oNPC));
    DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(nMaxPCHP), oPC));
////////////////////////////////////////////////////////////////////////////////

// ЕСЛИ НПС ДО НАПАДЕНИЯ БЫЛ БЕЗ ОРУЖИЯ, УБИРАЕМ ОРУЖИЕ В ИНВЕНТАРЬ ////////////
    if (GetLocalInt(oNPC, "bIsArmed") == 0)
    {
        AssignCommand(oNPC, DelayCommand(
            9.0, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oNPC))));
        AssignCommand(oNPC, DelayCommand(
            9.1, ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oNPC))));
    }
    DeleteLocalInt(oNPC, "bIsArmed");
////////////////////////////////////////////////////////////////////////////////

    DelayCommand(fNPCKnockdownTime, FadeFromBlack(oPC));
    DelayCommand(fNPCKnockdownTime, SetCommandable(TRUE, oPC));
}

и вот ещё вопрос
3. Делаю скрипт с нападением НПС на ПС (меняю репутацию НПС а потом ActionAttack(oNPC,oPC)). Тестирую, и вот что мне невер выдаёт:
"You cannot perform this action on a friendly target due to PvP settings", как это переводится я знаю, но вот откуда такая чтука появилась... Раньше всё робило, видимо в самом Тулсете что-то нахимичил... Может кто сталкивался?

Сообщение отредактировал Slam - May 22 2007, 20:07
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 22 2007, 20:19
Сообщение #2723


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

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



1. Почти всегда, когда две команды попадут на одно время по секундам и долям секунд, выполнится та что первая считается движком. Вторая не выполнится.
2. Муть какая то непонятная. Где стоит скрипт, при каких условиях работает. Додумывать было лень.
3. Функция атаки не будет действовать на дружественные НПС. Код поправь под свои нужды.
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: ActionTaken  am_at_attack
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
    Стандартный скрипт аттаки игроком НПС.
    НПС переводится в НЕЙТРАЛЬНУЮ фракцию.
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 24.05.2005
//:://///////////////////////////////////////////
#include "nw_i0_generic"
void main()
{
    object oPC = GetPCSpeaker();
    object oNeutral = GetObjectByTag("GLOBAL_TRUE_NEUTRAL");
    object oSelf = OBJECT_SELF;
    AssignCommand(oSelf, ClearAllActions());
    ChangeFaction(oSelf, oNeutral);
    SetIsTemporaryEnemy(oPC, oSelf);
    AssignCommand(oSelf, DetermineCombatRound(oPC));
    DelayCommand(1.0, AssignCommand(oSelf, ActionAttack(oPC)));
}


Neverwinter Script Source
//:://////////////////////////////////////////////
//:: ActionTaken  am_at_attack_pc
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
    Скрипт аттаки игроком НПС в диалоге.
    НПС не переводится в НЕЙТРАЛЬНУЮ фракцию.
    Все НПС с одинаковой фракцией в радиусе
    50 метров будут нападать на РС.
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.12.2005
//:://///////////////////////////////////////////
#include "nw_i0_generic"

void main()
{
    object oPC = GetPCSpeaker();
    object oSelf = OBJECT_SELF;
    object oNpc = GetFirstObjectInShape(SHAPE_CUBE, 50.0, GetLocation(OBJECT_SELF));
    float n;
    string sSpeak;

    while (GetIsObjectValid(oNpc)) // пока такой объект существует...
    {
        if (GetFactionEqual(oSelf, oNpc)) // если фракциa сходна с исходным
        {
            n = IntToFloat(Random(50))/10.0;
            // врем задержки делное на 10. то есть от 0.0 до 5.0 секунды
            AssignCommand(oNpc, ClearAllActions()); // очистить действиa
            int iRand = Random(15);
              switch (iRand)
              {
                    case 0:
                    {
                        sSpeak = "Смерть тебе!"; break;
                    }
                    case 3:
                    {
                        sSpeak = "А ну! Стоять!"; break;
                    }
                    case 5:
                    {
                        sSpeak = "Стой!!!"; break;
                    }
                    case 8:
                    {
                        sSpeak = "Все сюда!"; break;
                    }
                    case 11:
                    {
                        sSpeak = "Тревога!!!"; break;
                    }
                    case 13:
                    {
                        sSpeak = "Я тебя убью!"; break;
                    }
              }
            DelayCommand(n - 0.2, AssignCommand(oNpc, SpeakString(sSpeak)));
            SetIsTemporaryEnemy(oPC, oNpc);
            AssignCommand(oNpc, DetermineCombatRound(oPC));
            DelayCommand(n, AssignCommand(oNpc, ActionAttack(oPC)));
        }
        oNpc = GetNextObjectInShape(SHAPE_CUBE, 50.0, GetLocation(OBJECT_SELF));
        // Берем следующего НПС в кубе с такой же гранью 50 метров
    }
    AssignCommand(oSelf, ClearAllActions());
    SetIsTemporaryEnemy(oPC, oNpc);
    AssignCommand(oSelf, DetermineCombatRound(oPC));
    DelayCommand(1.0, AssignCommand(oSelf, ActionAttack(oPC)));
}


Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Slam
сообщение May 22 2007, 22:18
Сообщение #2724


Level 2
*

Класс: Убийца
Характер: Neutral Evil
Раса: Человек



Цитата(Aiwan @ May 22 2007, 21:19) [snapback]108507[/snapback]
2. Муть какая то непонятная. Где стоит скрипт, при каких условиях работает. Додумывать было лень.
3. Функция атаки не будет действовать на дружественные НПС. Код поправь под свои нужды.

2. Скрипт стоит на диалоге. При выборе ПС определенной ветки диалога, выполняется этот скрипт. Сам по себе он рабочий, но у меня не получается сделать его функцией и запихать в свой инклуд.
3. Мой скрипт атаки один в один такой же кроме строчки AssignCommand(oSelf, DetermineCombatRound(oPC)); (кстати, всё хочу узнать, что это), проблемма в самом модуле, т.к. в новосозданном модуле атака проходит нормально.
ЗЫ: извините, если я не внятно выражаю свои мысли
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 22 2007, 23:36
Сообщение #2725


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

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



DetermineCombatRound это функция Биоварей, в ней много вяких действий типа подготовки к бою, окаст, наезд, облом (IMG:style_emoticons/kolobok_light/smile.gif)
Функции есть смысл делать если часто используется это. Дело в том что инклюды компилятся в тело исполняемых файлов и размер модуля растет прямо на дрожжах...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 23 2007, 09:41
Сообщение #2726


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

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



Цитата(Slam @ May 22 2007, 19:51) [snapback]108503[/snapback]
2. Написал идущий ниже скрипт. Пытаюсь загнать его в функцию, но не получается.

как ты пытаешься это сделать? никаких проблем не вижу
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 23 2007, 15:36
Сообщение #2727


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

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



Приведи инклюду сюда.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Легионер
сообщение Jun 6 2007, 10:01
Сообщение #2728


Level 3
*

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



Не составляется скрипт


Neverwinter Script Source
#include "lib"

void main()
{
object oPC = GetEnteringObject();
object oRoba = GetObjectByTag("itm_roba");
  {
  clearPCInventory();
  clearPCSlot(INVENTORY_SLOT_ARMS);
  clearPCSlot(INVENTORY_SLOT_ARROWS);
  clearPCSlot(INVENTORY_SLOT_BELT);
  clearPCSlot(INVENTORY_SLOT_BOLTS);
  clearPCSlot(INVENTORY_SLOT_BOOTS);
  clearPCSlot(INVENTORY_SLOT_BULLETS);
  clearPCSlot(INVENTORY_SLOT_CHEST);
  clearPCSlot(INVENTORY_SLOT_CLOAK);
  clearPCSlot(INVENTORY_SLOT_HEAD);
  clearPCSlot(INVENTORY_SLOT_LEFTHAND);
  clearPCSlot(INVENTORY_SLOT_LEFTRING);
  clearPCSlot(INVENTORY_SLOT_NECK);
  clearPCSlot(INVENTORY_SLOT_RIGHTHAND);
  clearPCSlot(INVENTORY_SLOT_RIGHTRING);
  ActionGiveItem(oRoba, oPC);
  AssignCommand(oPC, ActionWait(1.0));
  AssignCommand(oPC, ActionStartConversation(oPC, "start_dialog"));
  }
}



Пишут: Ошибка: Неопределенный идентификатор ()

Не подскажете, что здесь не так?

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 6 2007, 14:58
Сообщение #2729


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

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



желательно еще номер строчки, которая с ошибкой.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Легионер
сообщение Jun 7 2007, 11:00
Сообщение #2730


Level 3
*

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



Не указан. Наверное в инклюде ошибка.
Вот он
Neverwinter Script Source
/*

*/


//int W_DEBUG = TRUE;
int W_DEBUG = FALSE;

object getPC();
void print(string str);

int W_EV_BEAT = 1001;
int W_EV_CONV = 1004;

int W_EV_CEND = 201;
int W_EV_SPWN = 202;

// -----------------------------------------------

void clearPCInventory() {
  object obj= getPC();
  object item= GetFirstItemInInventory(obj);
  while(item!=OBJECT_INVALID) {
    DestroyObject(item);
    item= GetNextItemInInventory(obj);
  }
}

void clearPCSlot(int slot) {
  object obj= getPC();
  object item= GetItemInSlot(slot, obj);
  if(item!=OBJECT_INVALID)
    DestroyObject(item);
}
int hasItemEquipped(string tag, object obj) {
  object item= GetItemPossessedBy(obj, tag);
  return item!=OBJECT_INVALID && (
    GetItemInSlot(INVENTORY_SLOT_ARMS    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_ARROWS  , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_BELT    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_BOLTS    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_BOOTS    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_BULLETS  , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_CHEST    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_CLOAK    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_HEAD    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_LEFTHAND , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_LEFTRING , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_NECK    , obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, obj) == item ||
    GetItemInSlot(INVENTORY_SLOT_RIGHTRING, obj) == item
  );
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Jadent
сообщение Jun 7 2007, 13:20
Сообщение #2731


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

Класс: Обыватель
Характер: True Neutral
Раса: Человек
NWN2: Маппинг



Ругается оно на "getPC()" в функциях. Может, там имелось в виду "GetFirstPC()"? Тогда бы все работало.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Neo
сообщение Jun 7 2007, 13:35
Сообщение #2732



Иконки Групп

Класс: Пьяный Мастер
Характер: Lawful Good
Раса: Тварь
MySQL, PHP, JavaScript
Порядок Времени



Цитата(Легионер @ Jun 7 2007, 12:00) [snapback]109039[/snapback]
object getPC();
void print(string str);

а может там имелись ввиду две функции? которые объявлены в начале, но их текста я так и не увидел. вот на это он и ругается
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Легионер
сообщение Jun 7 2007, 15:12
Сообщение #2733


Level 3
*

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



Цитата
Ругается оно на "getPC()" в функциях. Может, там имелось в виду "GetFirstPC()"? Тогда бы все работало.


Ты был прав... спасибо
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Epsilon
сообщение Jun 9 2007, 19:18
Сообщение #2734


Level 4
**

Класс: Ученик Дракона
Характер: Lawful Good
Раса: Человек



Думал, думал и решил, что вопросы о таком скрипте в вопросы новичков не впихнуть.
Возможно ли написать скрипт, который заставит понимать русскоязычные сообщения чата персонажа?

Прошу администраторов удалить это сообщение: обдумывая структуру скрипта я осознал, что он мне не по силам
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 10 2007, 00:33
Сообщение #2735


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

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



Цитата(Epsilon @ Jun 9 2007, 20:18) [snapback]109184[/snapback]
Возможно ли написать скрипт, который заставит понимать русскоязычные сообщения чата персонажа?

возможно. Причем от скрипта, который бы понимал англ. речь он не отличался бы ничем, кроме набора распознаваемых шаблонов.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Esidor
сообщение Jun 18 2007, 10:08
Сообщение #2736


Level 1


Класс: Маг
Характер: Neutral Good
Раса: Чудовище



Где можно узнать функции команд и принципы составления скриптов?
Может вопрос и не в тему.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jun 18 2007, 12:59
Сообщение #2737


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



Все функции, имеют описание в самом тулсете. Так же есть Лексикон. Перевод, тоже имеется (смотри сайт).

Принципы построения, разжеваны в мануалах, это опять сайт/Лексикон.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 26 2007, 19:23
Сообщение #2738


Level 3
*

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



Neverwinter Script Source
void RemoveXPFromParty(int nXP, object oPC, int bAllParty=TRUE)
{

if (!bAllParty)
  {
  nXP=(GetXP(oPC)-nXP)>=0 ? GetXP(oPC)-nXP : 0;
  SetXP(oPC, nXP);
  }
else
  {
  object oMember=GetFirstFactionMember(oPC, TRUE);

  while (GetIsObjectValid(oMember))
      {
      nXP=(GetXP(oMember)-nXP)>=0 ? GetXP(oMember)-nXP : 0;
      SetXP(oMember, nXP);
      oMember=GetNextFactionMember(oPC, TRUE);
      }
  }
}
void ApplyPenalty(object oDead)
{
    int nXP = GetXP(oDead);
    int nPenalty = 250 * GetHitDice(oDead);
    int nHD = GetHitDice(oDead);
    // * You can not lose a level with this respawning
    int nMin = ((nHD * (nHD - 1)) / 2) * 1000;

    int nNewXP = nXP - nPenalty;
    if (nNewXP < nMin)
      nNewXP = nMin;
    SetXP(oDead, nNewXP);
    int nGoldToTake = FloatToInt(0.20 * GetGold(oDead));
    // * a cap of 10 000gp taken from you
    if (nGoldToTake > 50000)
    {
        nGoldToTake = 50000;
    }
    AssignCommand(oDead, TakeGoldFromCreature(nGoldToTake, oDead, TRUE));
    DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oDead, FALSE));
    DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oDead, FALSE));

}
#include "nw_i0_plot"
/*  Script generated by
Lilac Soul's NWN Script Generator, v. 2.0

For download info, please visit:
http://nwvault.ign.com/View.php?view=Other...4683&id=625    */


//Goes OnPlayerRespawn of the module properties
void main()
{

object oPC = GetLastRespawnButtonPresser();
object oDead = oPC;
string sArea = GetTag(GetArea(oPC));
if (!GetIsPC(oPC)) return;

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPC);

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPC)), oPC);

RemoveEffects(oPC);

object oTarget;
oTarget = oPC;

//Visual effects can't be applied to waypoints, so if it is a WP
//apply to the WP's location instead

int nInt;
nInt = GetObjectType(oTarget);

if((sArea == "AREA1") ||
  ( sArea == "AREA2") == FALSE )
{

  //Для Всех
  location lHALFELFTarget;
  oTarget = GetWaypointByTag("TN_SPAWN");
  lHALFELFTarget = GetLocation(oTarget);
  if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TIME_STOP), oTarget);
  else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_TIME_STOP), GetLocation(oTarget));

  if (GetAreaFromLocation(lHALFELFTarget)==OBJECT_INVALID) return;

  AssignCommand(oPC, ClearAllActions());

  AssignCommand(oPC, ActionJumpToLocation(lHALFELFTarget));



ApplyPenalty(oDead);


}

}



Задача скрипта: Ставиться в онреспавн, и должен кидать игрока после смерти в опр. точку. Тут все нормально, проблема в исключениях, когда игрок должен респавниться на месте. Есть 2 локации AREA1 & AREA2, когда игрок в этих локациях, после смерти при нажатии респавна он появляется на том же месте где и умер, без потери опыта\золота, с этим и проблема, в AREA2 все нормально, а первой не правильно работает, когда прописываю только одну локацию, то опять же все правильно работает. Может я использовал не тот символ " || " ? Помогите пожалуйста (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 26 2007, 21:48
Сообщение #2739


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

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



Neverwinter Script Source
if(sArea != "AREA1" || sArea != "AREA2")

Попробуй так.

Ты в своем выражинии описал ситуацию так: Если стринг арены 1 равен AREA1 или стринг арены2 не равен AREA2. Поэтому и косяк.
Можно и так записать. Придет Лекс скажет как грамотней (IMG:style_emoticons/kolobok_light/smile.gif) Но я бы так написал.
Neverwinter Script Source
if(sArea == "AREA1" || sArea == "AREA2")
{
  return;
}
else
       {
         // ТУТ ТВОЙ СКРИПТ
        }
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 26 2007, 22:11
Сообщение #2740


Level 3
*

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



Aiwan, спасибо большое. Первый вариант не сработал, но второй работает как часы (IMG:style_emoticons/kolobok_light/rolleyes.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jun 27 2007, 00:42
Сообщение #2741


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



QUOTE(Aiwan @ Jun 26 2007, 22:48) [snapback]109930[/snapback]
Neverwinter Script Source
if(sArea != "AREA1" || sArea != "AREA2")

Попробуй так.
Не ||, а &&.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 27 2007, 08:54
Сообщение #2742


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

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



Цитата(virusman @ Jun 27 2007, 03:42) [snapback]109938[/snapback]
Не ||, а &&.

Тогда не будет работать никогда, ведь будет поиск двух лок одновременно, а это всегда будет FALSE.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 27 2007, 09:48
Сообщение #2743


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

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



Цитата(Aiwan @ Jun 27 2007, 09:54) [snapback]109953[/snapback]
Тогда не будет работать никогда, ведь будет поиск двух лок одновременно, а это всегда будет FALSE.

нет.
Neverwinter Script Source
if(sArea != "AREA1" && sArea != "AREA2")

будет выдавать TRUE для всех локаций, тэг который не АРЕНА1 И не АРЕНА2. (те будет делать как раз то, что нужно)

ps: легко заметить, что условия, данные тобой и Вирусманом эквивалентны. Достаточно применить базовые принципы дискретной математики (ну или логики)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение Jun 27 2007, 12:21
Сообщение #2744


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

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



QUOTE(Lex @ Jun 27 2007, 10:48) [snapback]109956[/snapback]
ps: легко заметить, что условия, данные тобой и Вирусманом эквивалентны. Достаточно применить базовые принципы дискретной математики (ну или логики)
То, что у Айвана, всегда возвращает TRUE.
Я просто применил закон Де Моргана:
QUOTE
not (P and Q) = (not P) or (not Q)
not (P or Q) = (not P) and (not Q)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 27 2007, 14:11
Сообщение #2745


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

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



Да, я пропустил то что там два &&. Законы никакие не применял извините (IMG:style_emoticons/kolobok_light/pardon.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 108 109 110 111 112 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 27th July 2025 - 10:21