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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
205 страниц V  « < 61 62 63 64 65 > »   
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
Batkom
сообщение Jul 4 2005, 00:59
Сообщение #1551


Level 4
**

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



чтобы проверить весь список игроков можно сделать так:

Neverwinter Script Source
void main()
{
object oPC = GetFirstPC();
while (GetIsObjectValid(oPC) == TRUE)
{
/*

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

*/

oPC = GetNextPC();
}
}


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


Вот еще вопрос, допустим у меня стоит нипись, которому можно дать денег на сохранность, игрок пишет сумму в чате, у него забирается голд и записывается в базу данных с помощью SetCampaignInt привязанок имени чара и сидикеям.
Проблема в том, что я не могу узнать что же такое написал игрок...просто не знаю как...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoingPro)
сообщение Jul 4 2005, 19:10
Сообщение #1552


Level 3
*

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Человек



Помогите пожалуйсто разобраться в диологах.
Я хотел зделать так что бы НПС поговорив с игроком, дает ему задание, а после следующих кликов на НПС он говорит мол "иди выполни задание потом поговорим"...Ты идешь к следующему НПС и он начинает с тобой говорить только после того как ты поговрил с тем что дал задание, а иначе говорит например "отстань я занят", потом ты возвращаешься обратно к первому после выполнения задания и он тебя благодарит и дает вознаграждение, как это зделать? помогите пожалуйста.
Я делал через проверку на шмотку, но это очень примитивно когда НПС все время дает вещь....
Плиз помогите :this:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jul 4 2005, 19:55
Сообщение #1553


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

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



А зачем через проверку, на шмотку? :yes: Ты делай на проверку через локальные переменные.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jul 4 2005, 20:06
Сообщение #1554


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



GoingPro), прочитай монуал Айвана в файлах, составишь представление.
А на перввое время делай квесты через визорд - там все просто, разберешься.
В русской версии Волшебницы -> мастер сюжета.

Сообщение отредактировал -fenix- - Jul 4 2005, 20:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 4 2005, 22:28
Сообщение #1555


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



GoingPro), скрипт смерти с трупом, сумочкой с вещами и деньгами, посмотри в модуле HCR. Конечно, в нем скрипт написан очень бездарно, но хоть какое-то представление о создании подобной смерти ты получишь.

Чтобы НПС говорил разные фразы до завершения квеста, необходимо в момент передачи квестовой вещи изменять переменные. Какие? Да любые, какие только могут придти на ум. Тут фантазия безгранична, одно условие, они не должны повторяться, иначе будет каша. И самое главное, не забывать их удалять, когда они более не нужны. Хотя в одиночной игре они не удаляются, а переходят в завершенный вариант, т.е. переключаются на те числа, которые уже не смогут дать первоначальный вариант диалога.

И еще, крайне советую анализировать существующие скрипты. Они могут здорово помочь в написании своих скриптов. Язык не сложный, к тому же созданы довольно понятные функции. Знай, создавай свои миры.

Batkom, чем меньше на Хертбите скриптов, тем лучше. Когда нет лагов с одним игроком, могут быть проблемы с большим количеством игроков. Поэтому скрипты, которые срабатывают в определенной момент, например при смерти, должны находиться только там.

Так ты заставь НПС слушать. Он услышит написанную цифру и преобразует ее в слова. А вообще банки на словах не самая лучшая вещь. Посмотри на Ваулте разные варианты банков, может быть один из них да приглянется.

Сообщение отредактировал Zirrex - Jul 4 2005, 22:31
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 4 2005, 23:33
Сообщение #1556


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

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



QUOTE (Zirrex @ Jul 5 2005, 01:28)
Хотя в одиночной игре они не удаляются, а переходят в завершенный вариант, т.е. переключаются на те числа, которые уже не смогут дать первоначальный вариант диалога.

Neverwinter Script Source
void DeleteLocalInt(object oObject, string sVarName)

Все удаляется. И вообще. Обычно проверка на 0 (ноль) есть понятие того, что локалки нет. Можно локалку удалить так как внизу.
Neverwinter Script Source
SetLocalInt(OBJECT_SELF, "MESSAGE", FALSE);
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jul 5 2005, 01:15
Сообщение #1557


Level 4
**

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



У меня он лайн мод, в принципе пока не лагает, хотя игроков не очень много, гдето около 20-25 одновременно

я функцию нужную найти не могу и систему выслушивания немного недопонимаю

если установка слушающего нипися пишется как SetListening(OBJECT_SELF, TRUE);
то как же узнать что же такое он наслушал? ну я понимаю типа string sFarse = а что дальше понятия не имею, я лексикон листал, чтот не понял ибо мои познания в английском невелики
из гетлистена я нашел GetListenPatternNumber(), но я так и не понял как это работает


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

Сообщение отредактировал Batkom - Jul 5 2005, 01:16
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 5 2005, 02:07
Сообщение #1558


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

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



Batkom
поползай по форуму, пользуй поиск - много интересного узнаешь и большинство вопросов отпадут сами собой... ;)

пример "слушания" - http://www.wrg.ru/forums/index.php?showtop...st=0&#entry6707
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jul 5 2005, 22:20
Сообщение #1559


Level 4
**

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



сенк пойду делать
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 5 2005, 22:56
Сообщение #1560


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Aiwan, я несколько не это подразумевал, что они не удаляются. Дело в том, что если их удалять, то в момент диалога может выполниться снова уже один раз прозвучавший диалог, который проверяется у этой переменной на ноль. Лучше уж эту переменную приравнять 2, и проверить на 2 вторую ветку диалога, чем создавать еще одну переменную, при проверке которой не будет выполняться первая ветвь диалога.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 6 2005, 07:03
Сообщение #1561


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

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



Zirrex любая переменная проверенная на ноль выдасть TRUE, это движковое. Так что учи матчасть, прежде чем что-то утверждать.
Добавлено в [mergetime]1120622736[/mergetime]
Что бы проверить истинно существующую локалку. То просто проверяется на TRUE. Если она существует, то будет результат. И не важно, 1 или 20 она ровна.
Добавлено в [mergetime]1120623210[/mergetime]
Расскажи лучше чем занят? ;)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 6 2005, 21:08
Сообщение #1562


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Aiwan, да, что-то немного ступил, и правда, изначально она равна 0, далее ее просто можно таким образом удалить, и меньше скриптов.

з.ы. На данный момент занимаюсь проектом Амен. Не знаю, слышал ли про такой онлайновый шард или нет. Существует уже 2,5 года.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoingPro)
сообщение Jul 6 2005, 21:25
Сообщение #1563


Level 3
*

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Человек



Помогите а что тут за ошибка ? плиз
CODE
void main()
{

object GetPlayerSpirit(object oPlayer);

object GetPlayerSpirit(object oPlayer)
{
object oItem = GetFirstItemInInventory(oPlayer);

if (GetResRef(oItem) == "spirit")
 return oItem;

while(oItem != OBJECT_INVALID)
 {
 oItem = GetNextItemInInventory(oPlayer);

 if (GetResRef(oItem) == "spirit")
   return oItem;
 }
return OBJECT_INVALID;
}
}


кричит на object GetPlayerSpirit(object oPlayer); первый который :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 6 2005, 23:09
Сообщение #1564


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

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



GoingPro)
синтаксис NWN-script заимствован из C, а в нем, в отличие от Pascal'я, не допускаются вложенные описания процедур. да и вообще, каша какая-то...
Neverwinter Script Source
// опережающее объявление функции - применяется в случае,
// когда вызов функции идет в скрипте выше, чем ее описание (она сама)
object GetPlayerSpirit(object oPlayer);
// также применяется для удобства - если в начале скрипта
// сделать опережающие объявления всех содержащихся в скрипте функций,
// то можно не заботиться об порядке их описания.
// в данном случае оно не нужно - достаточно перенести описание функции
// в начало скрипта - до main()...

void main()
{
  object oPC = GetLastUsedBy(); // например
  object oSpirit = GetPlayerSpirit(oPC);
  // ...
}

// сама функция
object GetPlayerSpirit(object oPlayer)
{
  object oItem = GetFirstItemInInventory(oPlayer);
  while(GetIsObjectValid(oItem))
  {
    if (GetResRef(oItem) == "spirit")
      return oItem;
    oItem = GetNextItemInInventory(oPlayer);
  }
  return OBJECT_INVALID;
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 6 2005, 23:42
Сообщение #1565


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



GoingPro), как я понял, ты решил сделать сохранение персонажей на локации после рестарта? Не делай так, как описано это в базе скриптов, т.е. не кидай скрипт сохранения локации персонажа на каждую локацию в эвент "OnEnter". Лучше повесь его на скрипт "default". Скрипт срабатывает каждый раунд, и постоянно перезаписывает координаты персонажа, в отличие от того, что установлен на "OnEnter". Какого-либо падения скорости это не вызовет. Единственное но, при входе на шард, скрипт чтения переменных и координат надо разместить на скрипт "OnClientEnter", и запретить работу скрипта "default" в стартовой локации, иначе сохранит координаты.

Да, и чтобы не было подобных казусов, который произошел у тебя, знакомься с чужими скриптами, смотри как они написаны и что следует писать в разных случаях. Потом научишься быстро делать свои скрипты. И не лишним будем знакомство с основами С++. Только, главное, не копировать чужие ошибки :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jul 7 2005, 00:21
Сообщение #1566


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

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



QUOTE (Zirrex @ Jul 7 2005, 00:08)
Aiwan, да, что-то немного ступил, и правда, изначально она равна 0, далее ее просто можно таким образом удалить, и меньше скриптов.

Да, забудь :friend: Я там сам стальными яйцами погремел :D
QUOTE (Zirrex @ Jul 7 2005, 00:08)
На данный момент занимаюсь проектом Амен. Не знаю, слышал ли про такой онлайновый шард или нет. Существует уже 2,5 года.

Слышал конечно. Ну, вливайся к нам на форум! ;)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jul 7 2005, 01:46
Сообщение #1567


Level 4
**

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



Я столкнулся с проблемой баланса.
Дело в том, что сорки и визарды в раскачанов состоянии являются грубо говоря читерскими классами ибо файтер против мага в пвп мало что может сделать(сжимающая бигби + исаак, если у файтера нет мегашмоток он труп).
Я уже и трусинг убрал и на исааки проверку на спасброски по реакции повесил и бигби по времениурезал, все равно сорки сильнее и даже самых крутых мобов не обладающих спелл имуном кладут только в путь, а обкаст делает ихнеуязвимыми в ближних атаках.
И тут родилась идея, а что если сорки и визарды будут получать 25% от опыта назначеного в настройках модуля, я слышал где-то это уже было реализовано, вот толлько как?
Если придется редактировать 2da дайте пожалуйста ссылочку на то, как это делать.




И вот еще вопрос:
скрипт отдыха я взял стандартный и поправил, добавив необходимость в еде и матрасе, но он почему то циклится, яубрал эту неприятность довольно примитивно заставив игрока самолично подбирать матрас, но тут появилась необходимость накладывать эффект сна в конце отдыха, чтобы персонаж во первых спал дольше, во вторых была возможность его убить одним удачным ударом.

Как это лучше сделать?
вот скрипт
Neverwinter Script Source
#include "nw_i0_generic"
#include "x2_inc_restsys"
#include "x2_inc_switches"
#include "nw_i0_plot"


void main()
{
    object oBedroll;
    object oPC = GetLastPCRested();

    if (!HasItem(oPC, "food"))
              {
            AssignCommand(oPC, ClearAllActions());
            SendMessageToPC(oPC, "Вы не можете отдыхать на пустой желудок.");
                    }
                    else if (!HasItem(oPC, "bedrollitem"))
                    {
                    SendMessageToPC(oPC, "Вы не можете отдыхать без спальника.");
                    AssignCommand(oPC, ClearAllActions());
                    }
                    else
                    {
                object food =  GetItemPossessedBy(oPC ,"food");
                DestroyObject(food);
                object ibedroll =  GetItemPossessedBy(oPC ,"bedrollitem");
                DestroyObject(ibedroll);
                object item = GetItemPossessedBy(oPC, "deathtocken");//это токен означающий смерть игрока, в последствии я вставил изьятие итема при рессуректе и райздеде, но если лечить дмской силой, она спеллом не считается, потому надо отдохнуть, чтобы при перезаходе не умереть, позже я научился работать с базами данных, но проверку смерти по предмету все же решил оставить
                DestroyObject(item);
                oBedroll =  CreateObject(OBJECT_TYPE_PLACEABLE, "blueprint005", GetLocation(oPC));

    if (GetModuleSwitchValue(MODULE_SWITCH_USE_XP2_RESTSYSTEM) == TRUE)
    {

        /*  Georg, August 11, 2003
            Added this code to allow the designer to specify a variable on the module
            Instead of using a OnAreaEnter script. Nice new toolset feature!
            Basically, the first time a player rests, the area is scanned for the
            encounter table string and will set it up.
        */

        object oArea = GetArea (oPC);

        string sTable = GetLocalString(oArea,"X2_WM_ENCOUNTERTABLE") ;
        if (sTable != "" )
        {
            int nDoors = GetLocalInt(oArea,"X2_WM_AREA_USEDOORS");
            int nDC = GetLocalInt(oArea,"X2_WM_AREA_LISTENCHECK");
            WMSetAreaTable(oArea,sTable,nDoors,nDC);

            //remove string to indicate we are set up
            DeleteLocalString(oArea,"X2_WM_ENCOUNTERTABLE");
        }


        /* Brent, July 2 2003
          - If you rest and are a low level character at the beginning of the module.
            You will trigger the first dream cutscene
        */

        if (GetLocalInt(GetModule(), "X2_G_LOWLEVELSTART") == 10)
        {
            AssignCommand(oPC, ClearAllActions());
            if (GetHitDice(oPC) >= 12)
            {
                ExecuteScript("bk_sleep", oPC);


                return;
            }
            else
            {
                FloatingTextStrRefOnCreature(84141 , oPC);
                return;
            }
        }

        if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED)
        {

            if (!WMStartPlayerRest(oPC))
            {
                // The resting system has objections against resting here and now
                // Probably because there is an ambush already in progress
                FloatingTextStrRefOnCreature(84142  ,oPC);
                AssignCommand(oPC,ClearAllActions());
            }
            if (WMCheckForWanderingMonster(oPC))
            {
                //This script MUST be run or the player won't be able to rest again ...
                ExecuteScript("x2_restsys_ambus",oPC);

            }
        }
        else if (GetLastRestEventType()==REST_EVENTTYPE_REST_CANCELLED)
        {

        // No longer used but left in for the community
        // WMFinishPlayerRest(oPC,TRUE); // removes sleep effect, etc
        }
        else if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED)
        {


        // No longer used but left in for the community
        //  WMFinishPlayerRest(oPC); // removes sleep effect, etc
        }
    }

}
}


Честно говоря я не понял назначения большинства функций, потому решил просто доплнить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Jul 7 2005, 03:53
Сообщение #1568


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

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



Batkom
1. не видел пока шардов с оставленной по умолчанию системой выдачи опыта. везде применяется самостоятельная система выдачи опыта - при смерти кричи оценивается уровень оной, уровень игрока, количество народа в партии(соотношение уровней игроков в партии), количество нанесенного урона итд итп, и на основе всего этого игроку выдается опыт. ноги растут из nw_c2_default7(смерть кричи), nw_c2_default6(урон).
2. скрипт отдыха вызывается не только в начале оного - в начале, в конце, при отмене, и при неудачной попытке отдохнуть. какое именно событие произошло определяется функцией GetLastRestEventType(). эффект сна, накладываемый на начинающего отдыхать, отменяет отдых. дефолтную систему отдыха можно смело выкидывать, все равно ты ее не используешь. заготовка скрипта:
Neverwinter Script Source
void restDone(object oPC)
{
  effect eEffect = GetFirstEffect(oPC);
  while(GetIsEffectValid(eEffect))
  {
    int nType = GetEffectType(eEffect);
    if(nType == EFFECT_TYPE_BLINDNESS)
      RemoveEffect(oPC, eEffect);
    eEffect = GetNextEffect(GetFirstPC());
  }
}

void restStart(object oPC)
{
  effect eBlind =  EffectBlindness();
  effect eVis = EffectVisualEffect(VFX_IMP_SLEEP);
  // проверки еды, воды, спальника, плюшевого мишки итд.
  if (!GetIsObjectValid(GetItemPossessedBy(oPC, "bedrollitem")))
  {
    SendMessageToPC(oPC, "без подстилки не уснешь...");
    AssignCommand(oPC, ClearAllActions());
    return;
  }
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oPC, 5.0);
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlind, oPC, 60.0);
}

void main()
{
    object oPC = GetLastPCRested();
    int iRestEvent = GetLastRestEventType();
    switch (iRestEvent)
    {
      case REST_EVENTTYPE_REST_STARTED:
        restStart(oPC);
        break;
      case REST_EVENTTYPE_REST_CANCELLED:
        restDone(oPC);
        break;
      case REST_EVENTTYPE_REST_FINISHED:
        restDone(oPC);
        break;
      case REST_EVENTTYPE_REST_INVALID:
        //SendMessageToPC(oPC, "rest failed");
        break;
    }
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoingPro)
сообщение Jul 7 2005, 17:41
Сообщение #1569


Level 3
*

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Человек



Где можно взять хак пак с замками и каменными стенами и всей этой ерундой если конечно такой есть, хотя я думаю должен быть 100%. Помогите пожалуйсто.

И ещо есть игроку присваивать SetLocalInt(oPc, "INT", 1); то после рестарта сервера оно сохраняеться?
Если нет то как одевать на персонажа шкуру, просто туда можно было бы поприсваивать че то :)?


Молю о помощи, брожу в неведании и это мешает в работе :) Помогите пожалуйсто.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 7 2005, 19:24
Сообщение #1570


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



GoingPro), искать какие-либо хак-паки стоит тут Neverwinter Vault. Также там много чего полезного для начинающего разработчика.

Нет, не сохранится. Все переменные хранятся на персонаже до рестарта. Рестарт же их затирает. Есть хорошие функции, которые пишут переменные в базу. Например, так:

Neverwinter Script Source
string sID = GetName(oPC) + GetPCPublicCDKey(oPC);
int iVariable = GetCampaignInt("player", "Variable" + sID) + 1;
SetLocalInt(oPC, "INT", iVariable);
SetCampaignInt("player", "Variable", iVariable);

а потом считываешь при входе:
Neverwinter Script Source
string sID = GetName(oPC) + GetPCPublicCDKey(oPC);
int iVariable = GetCampaignInt("player", "Variable" + sID);
SetLocalInt(oPC, "INT", iVariable);

Только надо вначале описать, при каких условиях переменная создается первый раз, чтобы этого не происходило вторично.

Извиняюсь, если ошибся, мало работал с ними.

Одеть предмет на персонажа легко. Во-первых, нужен сам предмет, его тэг, а во-вторых, если это сервер, то в настройках его должна быть выключена опция "Item Level Restrictions", иначе вещь не по уровню просто не наденется на персонажа, а будет валяться в рюкзаке. Далее делаем так:
Neverwinter Script Source
object oChest = CreateItemOnObject("am_it_cchest",oPC);

if (GetItemPossessedBy(oPC,"am_it_cchest") != OBJECT_INVALID)
{
    AssignCommand(oPC, ActionEquipItem(oChest, INVENTORY_SLOT_CARMOUR));
}


Сообщение отредактировал Zirrex - Jul 7 2005, 19:31
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jul 7 2005, 19:43
Сообщение #1571


Level 4
**

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



вот еще вопрос, делая алхимию, как один из эффектов при неудачном смешении ингридиентов игрок превращался в корову или пингвина. Дело в том, что после установки полиморфа игрок может его отменить нажав "отменить полиморф" как лишить игрока этой возможности?
я пробовал накладывать паралич, но игрок просто преврашается обратно и стоит в параличе может можно убрать как нибудь эту кнопку, или лишить игрока всех действий
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 7 2005, 19:59
Сообщение #1572


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Batkom, хехе, да все просто, ты не делай полиморфа, а просто изменяй облик. Смотри:

Neverwinter Script Source
void Penguin(object oTarget, object oUser)
{
    effect eParalyze = EffectCutsceneImmobilize();

    AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_PENGUIN));
    AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eParalyze, oTarget));
    SetLocalInt(oTarget, "toaded", 1);
}

void RemovePenguin(object oTarget, object oUser)
{
    if (GetLocalInt(oTarget, "toaded") == 1)
    {
        effect eMyEffect = GetFirstEffect(oTarget);

        while (GetIsEffectValid(eMyEffect))
        {
            if (GetEffectType(eMyEffect) == EFFECT_TYPE_CUTSCENEIMMOBILIZE)
            {
                RemoveEffect(oTarget, eMyEffect);
                SetLocalInt(oTarget, "toaded", 0);
            }
            eMyEffect = GetNextEffect(oTarget);
        }

        if (GetRacialType(oTarget) == RACIAL_TYPE_ELF)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_ELF));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_GNOME)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_GNOME));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_DWARF)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_DWARF));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_HALFLING)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_HALFLING));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_HUMAN)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_HUMAN));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_HALFELF)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_HALF_ELF));
        }
        else if (GetRacialType(oTarget) == RACIAL_TYPE_HALFORC)
        {
            AssignCommand(oTarget, SetCreatureAppearanceType(oTarget,APPEARANCE_TYPE_HALF_ORC));
        }
    }
}

Переменная не обязательна, но можно и оставить, она у меня служила для выбора условий.

Сообщение отредактировал Zirrex - Jul 7 2005, 20:03
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Batkom
сообщение Jul 7 2005, 21:57
Сообщение #1573


Level 4
**

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



сенк, сейчас опробую





ТHX все работает, чейчас буду разбираться с опытом



М.....э...а можно какой нибудь примерчик?
Я никак не могу найти, в каком именно месте игроку выдается опыт....

Сообщение отредактировал Batkom - Jul 8 2005, 01:59
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
GoingPro)
сообщение Jul 8 2005, 09:26
Сообщение #1574


Level 3
*

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Человек



Batkom На смерть моба форумулу зделай, и все будет путем.

Хотел ещо узнать вот что:
1) На лаги модуля или локации влияет большое количество юзибл объктов?
2) Как получить данные о игроке когда он использует придмет object oPC = ????();

Спасибо.

Со вторым я уже разобрался object oPC = GetLastUsedBy(); должно работать поидеи, но я ещо не проверял...

Сообщение отредактировал GoingPro) - Jul 8 2005, 14:39
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Zirrex
сообщение Jul 8 2005, 09:26
Сообщение #1575


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

Класс: Друид
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [PW]
Амен



Batkom, выдается он обычно при срабатывании скрипта "nw_c2_default7", но в нем ты ничего не найдешь, потому что за опыт отвечает параметр "Xp Scale" в настройках модуля. Если ты хочешь использовать свою систему распределения опыта, то это значение надо ставить в 0. Правда есть одно но, даже если его убрать в 0, то все равно будет писаться опыт, только всегда будет иметь нулевое значение. Чтобы этого не было, надо в скрипте "nw_c2_default7" прописать следующее:

Neverwinter Script Source
void main()
{
    object oKiller = GetLastKiller();

    if (GetLastKiller() == OBJECT_SELF) return;

// и в самом конце скрипта, можно и перед флагом "NW_FLAG_DEATH_EVENT"
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), OBJECT_SELF);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(2000, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_PLUS_TWENTY), OBJECT_SELF);

Урон равен 2000, потому что есть монстры, у которых жизни больше 1000, если у тебя нет таких, то ставь максимум, который не превышается.

Дальше внутри скрипта ставишь ссылку на свой скрипт, который распределяет опыт, например так:
Neverwinter Script Source
if (GetStandardFactionReputation(STANDARD_FACTION_HOSTILE, OBJECT_SELF))
{
    ExecuteScript("pwfxp",OBJECT_SELF);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

205 страниц V  « < 61 62 63 64 65 > » 
Ответить в эту темуОткрыть новую тему
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 30th April 2025 - 10:25