Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74
StalkerDtN
QUOTE(2_advanced @ Oct 31 2006, 16:01) [snapback]96300[/snapback]
и х100 на каждый цвет)

Цвет, по крайней мере, можно менять. Например так, поменяется на ура:
NSS
object oItem = CopyItemAndModify(oCloak, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, 175);
Zirrex
denis0k, и зачем? Все это изменяется легко с помощью одной вещи.

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

Кстати видоизменить шлем можно точно так же, как я показал в скрипте. Если его немного доработать, то можно просто перебирать, начиная с первой модели шлема и заканчивая последней, а когда достигнешь предела, начать заново.

StalkerDtN, цвет то меняется, это и так понятно. Попробуй модель плащу поменять скриптово smile.gif

З.Ы. Как доработаю генератор, выложу на обозрение скрипт. Покритикуете smile.gif
denis0k
QUOTE
Принцип работы генератора простой. Создаем магазин, закидываем туда все типы вещей, которые нужно генерировать, потом выбираем из него случайную вещь, видоизменяем модель, перекрашиваем, если есть такая возможность, добавляем случайные параметры (зависят от уровня персонажа), и выкладываем перед персонажем. Все.
Упс, по-моему мы говорим о разных вещах smile.gif Генератор лута понятное дело берет базовую шмотку и потом накручивает ее в зависимости от уровня (иначе палитра будет больше самого мода). Я имел в виду крафт, доступный игрокам, где игрок для готовой вещи сам меняет внешний вид. Вот для него пришлось шлемы и щиты в палитру добавлять. Конечно в описании CopyItemAndModify() про шлемы сказано, но вот у меня не очень получилось их там менять - при любых значених nPart создает пустую модель. Но это в 1.66 было.
Zirrex
denis0k, не знаю, как это было в версии 1.66, ибо она давно уже ушла в историю, но в версии 1.67 поменять облик можно любой вещи, пользуясь только одним объектом. Со щитами несколько сложнее, потому что от вида щита зависит базовый коэффициент брони. Поэтому, когда будет изменяться облик щита, придется сделать три разных щита, и в зависимости от размеров щита, такой облик щита и предлагать. Плохо, что щиты нельзя перекрашивать, иначе можно было бы составлять наборы. Правда, визуально видно лишь шлем, броню, щит и оружие, но, начиная с версии 1.68, видно теперь плащ, которому, увы, нельзя изменить модель скриптово.

Видимо все же придется сделать 14 моделей плаща и перебирать их, что не самое лучшее решение.
Mandrake
2_advanced, при возможности отрубать это уродство(плащи) в 1.68 было бы очень хорошо biggrin.gif Поэтому если вы сможете создать нечто такое, что будет отрубать их, буду вам очень признателен(и я думаю не один я).

Lex
замени назад строку плащей в baseitems.2da (возьми из версии 1.67, там модели указаны другие.. ну и вообще)

И исправь cloakmodel.2da (а может эту и не надо):

CODE

     LABEL     MODEL   TEXTURE   ICON   HIDEWING  HIDETAIL  HIDESHOL  HIDESHOR   ENVMAP        
0     ****          0       0         0      0         0         0         0         ****
1     ****          0       0         0      0         0         0         0         ****
.....
12     ****          0       0         0      0         0         0         0         ****
13     ****          0       0         0      0         0         0         0         ****
Mandrake
Спасибо thank_you.gif
StalkerDtN
QUOTE(Zirrex @ Nov 1 2006, 01:45) [snapback]96340[/snapback]
Попробуй модель плащу поменять скриптово

На досуге попробывал - тож меняется biggrin.gif ... правда не совсем только скриптами. Вообщем дело обстоит так. В начале правим baseitems.2da а именно строчку cloak, столбец Category: вместо 4, ставим 5 (сие делается по аналогии со шлемами, которые в отличии от плащей модифицируются).
Далее уже скрипт:
NSS
oItem = CopyItemAndModify(oItem, ITEM_APPR_TYPE_ARMOR_MODEL, ITEM_APPR_ARMOR_MODEL_BELT, 1);


Вот собственно и все. smile.gif
Zirrex
StalkerDtN, а ты не пробовал менять их, не правя baseitems.2da, и используя эту же строчку? Или ты просто плащ подвел под типы брони, из-за чего появился облик "ITEM_APPR_ARMOR_MODEL_BELT"?

Работает отлично, надо поправить будет и сам генератор по этому же типу.
StalkerDtN
Пробывал, но работает только так...хотя возможно комбинации "Category" и "ITEM_APPR_ARMOR_MODEL_*" могут быть и другими, честно говоря, не экспериментировал.
Solmyr2000
Короче бился-бился, но так и не удалось banned.gif создать систему отдыха.

Идея такая -
Отдыхать на природе по системе HotU.
Отдыхать в городе можно, однако только ночью и в 50% шансов около тебя появляется страж и прерывает твой отдых, днём же прерывается.
Отдыхать в зданиях можно только на кроватях (в "диалоге" с кроватью), остальной отдых автоматически прерывается ClearAllActions().

Ничего не удалось crazy.gif всё глючит crazy.gif
Дело в том, что проверка на exterior/interior бесполезна, ибо город тоже экстериор.
А отдых на кроватях прерывается также, как и не на ней. (Установка/проверка переменных тоже не помогает)

Может кто-нибудь поможет ?
-fenix-
Скрипт отдыха в студию.
mamuc
QUOTE
Отдыхать в городе можно, однако только ночью и в 50% шансов около тебя появляется страж и прерывает твой отдых, днём же прерывается.
Отдыхать в зданиях можно только на кроватях (в "диалоге" с кроватью), остальной отдых автоматически прерывается ClearAllActions().


самоое простое, что приходит на ум - через свич сделай 2 списка с ресрефами и\ или тегами лок : список лок городских( где стражник может пробудить- а ведь это не все горлские места-врятли разрешит спать например , на центральной площади у храма а где нить в трущобах-другое дело, которче говоря к свичу еще неплохо добавить небольшую структуру с ресрефом локи и вероятностью 1-99%) и список лок, где вообще какая нить кровать находиться... а потом проверять по списку мона или нийзя- сразу массу неосответствующих отметет, а потом уже дальше проверяй другие условия biggrin.gif

но , чтобы разобраться с тонкостям неработы ,
QUOTE
Скрипт отдыха в студию.

(с) феникс
Solmyr2000
Пока так и не понял как разделить всё это на группы blush.gif всмысле город, внешняя местность и дом.
И - вопрос такой - почему вызываются 2 стража, вместо одного biggrin.gif
Скрипт на OnPlayerRest (ТОЛЬКО ГОРОД) (сc_rest_cheking)
NSS
void main()
{
object oPC = GetFirstPC();
int i = (Random(100));
if (i < 50)
{
DelayCommand(0.0, ExecuteScript("cc_rest_town", oPC));
}
   if (i > 50)
    {
    DelayCommand(0.0, ExecuteScript("cc_rest_guards", oPC));
    }
}


Cкрипт с охранниками (cc_rest_guards):

NSS
void main()
{
object oPC = GetFirstPC();
object oTarget;
object oSpawn;
location lTarget;
oTarget = oPC;

DelayCommand(0.0, FadeToBlack(oPC));
DelayCommand(1.0, StopFade(oPC));

lTarget = GetLocation(oTarget);

oTarget = CreateObject(OBJECT_TYPE_CREATURE, "rest_cc_guard", lTarget);

AssignCommand(oTarget, ActionStartConversation(oPC, ""));

}


Нормальный отдых в городе (cc_rest_town):

NSS
void main()
{
object oPC = GetFirstPC();
DelayCommand(1.0, FadeToBlack(oPC));
DelayCommand(10.0, FadeFromBlack(oPC));
}
Lex
у меня есть автоопределения типа в системе отдыха (разделяет город и дикую местность), но вообще я пользуюсь системой поинтов. (в каждой локе поинт, который хранит настройки для данной локации.. тип зоны, параметры дикого отдыха, общелокационный запрет/разрешение отдыха, радиус поиска энкаунтеров при опасном отдыхе). Правда там отдых скрещен еще с ожиданием (потому что игровые часы имеют значение) и есть подготовка ко сну (в дикой местности постановка лагеря, в городе просто игрок кладет подстилку)
r1Stranger
Прет всем, сори за вмешательство.
По отдыху: а нельзя ли геру при вхождении в триггер местности отдыха присваивать ТРУЕ crazy.gif , а после отбытия ФАЛЬСЕ crazy.gif ? А в свойствах мода OnRest проверять этот параметр если он ФАЛЬСЕ, то прерывать?

А вообще такой вопрос? Как сделать, чтобы в скриптах взрывов (баллиста, катапульта, мины) при определении цели учитывалась геометрия местности - чтоб файрболы не летели сквозь стены. Когда создаешь локацию - там же в скриптах нет никакой проверки на геометрию местности - и она может вполне создасться внутри стены или внутри холма и там все и взорвется...Как то нехорошо...Нет ли че-нить учитывающего это?
Neo
а в локациях, где возможно прерывание отдыха с какой-то вероятностью, присваивать почти true crazy.gif
r1Stranger
QUOTE(NeoJSmith @ Nov 18 2006, 14:57) [snapback]98428[/snapback]

а в локациях, где возможно прерывание отдыха с какой-то вероятностью, присваивать почти true crazy.gif


не тупи crazy.gif crazy.gif crazy.gif crazy.gif
Lex
QUOTE(r1Stranger @ Nov 18 2006, 14:26) [snapback]98429[/snapback]
не тупи

если ты не понимаешь ничего в многозначной логике, это не значит, что ее нет.
зы: это была шутка, если плохо доходит smile.gif


QUOTE(r1Stranger @ Nov 18 2006, 13:45) [snapback]98427[/snapback]
По отдыху: а нельзя ли геру при вхождении в триггер местности отдыха присваивать ТРУЕ (IMG:style_emoticons/kolobok_light/crazy.gif) , а после отбытия ФАЛЬСЕ (IMG:style_emoticons/kolobok_light/crazy.gif) ? А в свойствах мода OnRest проверять этот параметр если он ФАЛЬСЕ, то прерывать?

так обычно и делают.
QUOTE(r1Stranger @ Nov 18 2006, 13:45) [snapback]98427[/snapback]
А вообще такой вопрос? Как сделать, чтобы в скриптах взрывов (баллиста, катапульта, мины) при определении цели учитывалась геометрия местности - чтоб файрболы не летели сквозь стены. Когда создаешь локацию - там же в скриптах нет никакой проверки на геометрию местности - и она может вполне создасться внутри стены или внутри холма и там все и взорвется...Как то нехорошо...Нет ли че-нить учитывающего это?

нормально проверить не сможешь. Ненормально тоже. Я взрывы делал в рандомной точке около расставленных поинтов, было нормально.
r1Stranger
QUOTE(Lex @ Nov 18 2006, 17:04) [snapback]98434[/snapback]

нормально проверить не сможешь. Ненормально тоже. Я взрывы делал в рандомной точке около расставленных поинтов, было нормально.

Спасібо. Се, без флуда больше.
По взрывам. Еслі в скріптах геометрію местності нікак не проверіть - не подскажіте лі (хотя б прімерно) формулу полета ядра із катапульты. Чтоб через определенный шаг правільно проверять налічіе целі. А то вначале полета все норм (есі сам вперед катапульты во время выстрела сунешься, то взрыв все вокруг расхерачіт включая саму катапульту), а потом отклоенніе ідет.

А то очень хочется не по намеченным точкам стелять,перебірая іх, а в завісiмості от меткості стреляющего. (2стрелка/4 катапульты и локация 20/20 за 5 мин зачищена)


Lex
за форумулой - тебе к физикам-кинетикам. Но вообще тут это и не нужно, ты задаешь тип движения (балистика) и цель. Меткость и прочие навыки можешь включить на уровне расчета радиуса отклонения от точки (чем стреляющий круче, тем меньше радиус и точнее выстрел). Расчитав радиус и взяв цель в качестве центра, расчитываешь случайную точку, куда в итоге полетит снаряд. И усе, вперед.
зы: есть ограничения в плане растояния полета, но я их уже на память не помню.
azathoth
формула полета ядра из катапульты: парабола, подробно см. глобальную школьную книжку "Алгебра".
r1Stranger
QUOTE(azathoth @ Nov 23 2006, 19:17) [snapback]98989[/snapback]

формула полета ядра из катапульты: парабола, подробно см. глобальную школьную книжку "Алгебра".

Спасибо. Буду все додумывать сам.
А по рандомным точкам все равно не хочется стрелять.
Проблема в чем - на плоскости все идет как надо - все зависит от наводки и меткости - куда направлю и как далеко заряжу туда и летит и там взрывается crazy.gif crazy.gif , тут чисто и без вопросов.
А ВОТ КОГДА идет штурм Форта - ядра сквозь стены летают crazy.gif crazy.gif Приколно смотрится. crazy.gif crazy.gif Но ето ладно - типа если в стену, значит не попал, а если на стене стрелок-защитник, то хотелось бы его в эту пораболу полета ядра и стовить, чтоб он как цель отмечался. А то локацию взрыва надо создавать в точке цели как никак.

ЗЫ Просто хочется штурм переходящих нейтральных (типа завоевал форт - и он за тебя) фортов красивше сделать.
mamuc
QUOTE
object oPC = GetFirstPC();

ммм а почему при ресие не используешь
// Get the last PC that has rested in the module.
object GetLastPCRested()

QUOTE
Пока так и не понял как разделить всё это на группы всмысле город, внешняя местность и дом.

ну я же писал - сделай просто свича с списком
1) лок которые у тя город
2) лок у которые у тя дома
а остальные автоматом у тя будет дикой местностью biggrin.gif .... вот примерно такой маленький инклюд
NSS
/////////////////////////////////////////
// Rest area base
// filename : ???????????
/////////////////////////////////////////

    struct stRestarea
{
    int nr;
    int type;
    int police
    string name;
    string tag;
};

///////////////////////////////////////
// type = 0 wild area (default)
// type = 1 gorod+ strazhnik
// type = 2 dom s krovatju
// police 1-99%
///////////////////////////////////////

struct stRestarea GetSpecRestArea(int nNr)
{
    struct stRestarea stA;
    stA.nr = nNr;
    switch (nNr)
    {
        case 1:
            stA.name = "gorod 1";
            stA.type = 1;
            stA.police = 50;
            stA.tag = "areatag1";
            break;
        case 2:
            stA.name = "gorod 2-centr";
            stA.type = 1;
            stA.police = 95;
            stA.tag = "areatag2";
            break;
        case 3:
            stA.name = "dom 1";
            stA.type = 2;
            stA.police = 0;
            stA.tag = "areatag3";
            break;
    }
    return stA;
}

int CheckSpecRestArea(string sAreatag)
{
    struct stRestarea stArea;
    int nSpecAreaCount = 3;
    int i, nRez;

    for (i=1;i<=nSpecAreaCount;i++)
    {
        stArea = GetSpecRestArea(i);
        if (sAreatag==stA.tag)
        {
            nRez = i;
        }
    }
    return nRez;
}
Lex
ууу.. ну тут все немного похуже. Летит то она скорее всего по параболике, но параметры какие у функции никто кроме тварей не знает, хотя это не беда - можно расчитать по 2м точкам. (старт и финиш собсна). Потом делается анализ координат НПС по отношению к функции траектории полета (фактически нужно оценить длину нормали, опущенной из точки на параболику), и если он оказываются в опасной зоне (те нормаль меньше критического значения), происходит редирект с точки на данного несчастливого НПС. И все.. но заставить снаряд лететь как летел и сымитировать взрыв от ударв в НПС у тя не получится... те это можно но с таким допущением: снаряд полетит дальше, а вот сам взрыв будет у НПС.

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


-------------
Мамук, это жость... у тебя у лок всего 3 разных тэга? smile.gif
mamuc
QUOTE
Мамук, это жость... у тебя у лок всего 3 разных тэга?

цэ пример biggrin.gif (сделаный на скорую руку)
...а такие свичи реально гораздо длинее biggrin.gif
человек, который это будет применять, сам допишет все свои спец локи, которые нужно .. и еще типы добавит скоко надо .. и структуру поменяет под свои нужды moil.gif biggrin.gif
Адонтос
Не подскажите, есть ли скрипт не позволяющий сразу прыгнуть в локу как только загрузилась следующая? Тоесть прыгаеш в локу появляешся, но сразу-же обратно прыгнуть не можеш, а к примеру по истечении 6ти секунд.
gennady
NSS
// ДЛЯ ДВЕРЕЙ И ТРИГГЕРОВ
void main()
{
object oPoint = GetTransitionTarget(OBJECT_SELF); // Точка перемещениЯ
object oPC = GetFirstPC(); // Наш ПС

if (GetLocalInt(oPC, "AREA_BLOK") == 1) return; // Выход из скрипта
AssignCommand(oPC, ClearAllActions()); // Чистим акции
AssignCommand(oPC,ActionJumpToObject(oPoint)); // Прыгаем в нужное место
}
// помещать в слот OnClick OnAreaTransitionClick
// если триггер, то поставить галку нет точки перемещения.

На вход области
NSS
void main()
{
  object oPC = GetEnteringObject();
  if (!GetIsPC(oPC)) return;
SetLocalInt(oPC,"AREA_BLOK",1);
DelayCommand(6.0, SetLocalInt(oPC,"AREA_BLOK",0));
}
Адонтос
Понял. Спасибо.
Адонтос
Подскажите, можно ли проскриптить чтоб друид смог кастить в формах, или к примеру в одной форме?
r1Stranger
QUOTE(Lex @ Nov 24 2006, 15:48) [snapback]99068[/snapback]

ууу.. ну тут все немного похуже. Летит то она скорее всего по параболике, но параметры какие у функции никто кроме тварей не знает, хотя это не беда - можно расчитать по 2м точкам. (старт и финиш собсна). Потом делается анализ координат НПС по отношению к функции траектории полета (фактически нужно оценить длину нормали, опущенной из точки на параболику), и если он оказываются в опасной зоне (те нормаль меньше критического значения), происходит редирект с точки на данного несчастливого НПС. И все.. но заставить снаряд лететь как летел и сымитировать взрыв от ударв в НПС у тя не получится... те это можно но с таким допущением: снаряд полетит дальше, а вот сам взрыв будет у НПС.

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



При стрельбе из баллисты - да, херня пока выходит. Но с катапультой у меня все получилось. Проводил испытательные стрельбы по двухуровневому замку. Все потенциальные противники успешно поражены. Полеты ядра при попаданиях нормальные (а если никого нет в локации, то то что заряд на высоте сквозь стену проходит - не беда! Не попал, значит!). При одноуровневом замке - и того проще. Попадание в стену разочарований больших не вызывает, а перелет - взрыв во дворе замка.

Вот мой скрипт на выстрел из катапульты:
(Формула горбатая, но зато выведенная эксперементальным путем. И можно улучшить при желании.)

NSS
#include "cat_damage"
void main()
{
    object oCurrentArea = GetArea(OBJECT_SELF);
    object oPC = GetPCSpeaker();
    object oBomber = GetLastUsedBy();
    vector vCurrentPosition = GetPosition(OBJECT_SELF);
    float fCurrentFacing = GetFacing(OBJECT_SELF);
  /*int iRange = GetLocalInt(OBJECT_SELF,"Range");*/
    float varz = 0.5;
    SetLocalInt(OBJECT_SELF,"high",FloatToInt(varz));
    if (fCurrentFacing > 360.0)
    {
        fCurrentFacing = 720 - fCurrentFacing;
    }
/* ActionWait(10.0);*/
    int iRange = 0;
    SetLocalInt(OBJECT_SELF,"line",iRange);
    vector vDelta;
    vDelta.x = cos(fCurrentFacing) * iRange;
    vDelta.y = sin(fCurrentFacing) * iRange;
    vDelta.z = varz;

    vector vImpact;
    vImpact.x = vCurrentPosition.x + vDelta.x;
    vImpact.y = vCurrentPosition.y + vDelta.y;
    vImpact.z = vDelta.z;

    vector vImpact1 = vImpact;

    location lImpact = Location(oCurrentArea, vImpact, fCurrentFacing);
    object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,6.0,lImpact,TRUE,OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_CREATURE);
    if (GetIsObjectValid(oTarget))
    {
    if (GetDistanceToObject(oTarget)<=6.5 || GetIsDead(oTarget))
    {
      oTarget = OBJECT_INVALID;
    }
    }
    while (oTarget==OBJECT_INVALID && iRange < GetLocalInt(OBJECT_SELF,"Range") && LineOfSightVector(vImpact1,vImpact)==TRUE && GetLocalInt(OBJECT_SELF,"high")>=0)
    {
      iRange = GetLocalInt(OBJECT_SELF,"line")+2;
      SetLocalInt(OBJECT_SELF,"line",iRange);
      if (FloatToInt(iRange * 1.66) <= GetLocalInt(OBJECT_SELF,"Range"))
      {
      varz = GetLocalInt(OBJECT_SELF,"high")+1.9;
      SetLocalInt(OBJECT_SELF,"high",FloatToInt(varz));
      }
      else
      {
        if (FloatToInt(iRange * 1.5) <= GetLocalInt(OBJECT_SELF,"Range"))
        {
        varz = IntToFloat(GetLocalInt(OBJECT_SELF,"high"));
        SetLocalInt(OBJECT_SELF,"high",FloatToInt(varz));
        }
        else
        {
        varz = GetLocalInt(OBJECT_SELF,"high")-3.2;
        if (varz<0.3)
        {
          varz =0.3;
        }
        SetLocalInt(OBJECT_SELF,"high",FloatToInt(varz));
        }
      }
      vector vDelta;
      vDelta.x = cos(fCurrentFacing) * iRange;
      vDelta.y = sin(fCurrentFacing) * iRange;
      vDelta.z = varz;

      vector vImpact;
      vImpact.x = vCurrentPosition.x + vDelta.x;
      vImpact.y = vCurrentPosition.y + vDelta.y;
      vImpact.z = vDelta.z;

      lImpact = Location(oCurrentArea, vImpact, fCurrentFacing);
      oTarget = GetNextObjectInShape(SHAPE_SPHERE,6.0,lImpact,TRUE,OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE | OBJECT_TYPE_CREATURE);
      if (GetIsObjectValid(oTarget))
      {
        if (GetDistanceToObject(oTarget)<=6.5 || GetIsDead(oTarget))
        {
        oTarget = OBJECT_INVALID;
        }
      }
    }
    if (oTarget != OBJECT_INVALID)
    {
    lImpact = GetLocation(oTarget);
    SpeakString("Цель в фокусе:"+GetName(oTarget),TALKVOLUME_TALK);
    }
    float fImpactDelay = IntToFloat(iRange)/12;
    effect eImpact = EffectVisualEffect(VFX_FNF_FIREBALL);
    effect eBump = EffectVisualEffect(VFX_FNF_SCREEN_BUMP);
    ActionCastFakeSpellAtLocation(SPELL_FIREBALL, lImpact, PROJECTILE_PATH_TYPE_BALLISTIC);
    ActionWait(fImpactDelay);
    ActionDoCommand(ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lImpact));
    ActionDoCommand(ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eBump, lImpact));
    DelayCommand(fImpactDelay,cDamage(lImpact,oBomber));
}

Инклуд - для функции cDamage(lImpact,oBomber).
Чтоб не загромождать не буду его писать. Если напишите - приведу потом. Его нетрудно и самим дописать как угодно.
Для настройки CurrentFacing и GetLocalInt(OBJECT_SELF,"Range") - свои несложные функции.

***К слову - все свершается через диалог и выстрел и повороты/регулировка дальности, вид ядер и тд

В догонку - тут еще проблемы! crazy.gif crazy.gif crazy.gif
Как ее (баллисту) установить и создать?? Что то CreateObject на заказные объекты не работает никак. А то все зря vava.gif

И еще: а как свои звуки вставлять в игру - куда копировать ресурсы?
Lex
ну.. если тебе надо заранее поставить - то простов тулсете поставь smile.gif там в палитре думаю сам знаешь
А если динамически через скрипт делать, то CreateObject. Только предварительно ты создай свою балисту в палитре, с уникальным тэгом, рефом, закрепленными скриптами и диалогом. Н
Адонтос
Так некто подсказать не может, как можно зделать чтоб друид кастил в форме?
r1Stranger
QUOTE(Lex @ Dec 4 2006, 17:25) [snapback]99795[/snapback]

ну.. если тебе надо заранее поставить - то простов тулсете поставь smile.gif там в палитре думаю сам знаешь
А если динамически через скрипт делать, то CreateObject. Только предварительно ты создай свою балисту в палитре, с уникальным тэгом, рефом, закрепленными скриптами и диалогом. Н


А реф обязательно уникальный? Создал балисту со своим тегом и пробую создатоь - и ниче не получается. Что это может быть?
Скрипт создания такой:
void DelayCreate(int iType, string sRes, location lLoc)
{
CreateObject(iType, sRes, lLoc);
}
void main()
{
object oItem = GetItemActivated();
if (GetTag(oItem)=="catapult_unuseable")
{
object oBomber = GetItemActivator();
DestroyObject(oItem,1.0);
DelayCommand(2.0, DelayCreate(OBJECT_TYPE_PLACEABLE,"Catapult_my", GetLocation(oBomber)));
FloatingTextStringOnCreature("Собрана катапульта",oBomber,FALSE);
}
}
Waromon
To Адонтос, да скорее всего никак, ИМХО, это движковое, хотя... Возможно я ошибаюсь pleasantry.gif


To r1Stranger, насчет звуков;
- Формат WAV;
- Oбязательно Mono;
Запаковываем все в хак, подключаем выбераем нужные звуки. smile.gif

А по поводу катапульты;

QUOTE
DelayCommand(2.0, DelayCreate(OBJECT_TYPE_PLACEABLE,"Catapult_my", GetLocation(oBomber)));


Функция CreateObject, работает по ResRef'y, а он как известно не может начинатся с заглавной буквы. wink3.gif
azathoth
QUOTE(r1Stranger @ Dec 16 2006, 12:17) [snapback]100571[/snapback]
А реф обязательно уникальный?

Обязательно, или как невер поймет, какой из объектов создавать. Реф и не получится сделать не уникальным - тулс будет ругаться.
В CreateObject нада передавать именно реф, а не тэг (реф можно глянуть где-то в свойствах объекта).
Lex
QUOTE(Waromon @ Dec 16 2006, 12:48) [snapback]100572[/snapback]
Функция CreateObject, работает по ResRef'y, а он как известно не может начинатся с заглавной буквы.

тем не менее в функции CreateObject можно писать реф и большими буквами - движок поймет. Там скорее всего встроена предварительная обработка строки, которая делает все буквы маленькими.
Zik
Никак не могу разобраться- у меня в модуле система трупов (игрок при смерти попадает на фугу, на месте остается тело которое можно воскресить и тп). Игрок может воскреситься на место смерти (т.е. к своему трупу). Если он так делает- все ок- тело исчезает, он появляется из фуги, но если после этого перезайти в игру, то рядом появляется мертвое тело (то есть ты сам можешь свой же труп взять). Как бы это устранить? smile.gif

Где не копался, найти не могу, какие скрипты показать?
Lex
я же вроде говорил Акселю в каком направлении смотреть. Там дело в том, что локалки при респе не все снимаются и связь игрок-труп нормально не сделана.
Zik
У меня сейчас нету к сожалению толковых скриптеров... vava.gif
Neo
QUOTE(Zik @ Dec 21 2006, 22:42) [snapback]100707[/snapback]
Где не копался, найти не могу, какие скрипты показать?

все crazy.gif
Lex
ну все не надо.. но вот скрипт смерти, 3 библы, вход в фугу, скрипты респа (через диалог, через закл, через что-то там еще) и скрипты на вход в модуль и на загрузку модуля - это как минимум smile.gif

зы: честно говоря мне кажется проще написать с 0 smile.gif не все конечно, но респовую часть системы как минимум. Там и так намешано много веселого smile.gif
Zik
Прямо сюда кидать? smile.gif
Neo
не, Лекс, ты зря, уж смотреть так все, Zik, все выкладывай yes3.gif
QUOTE(Zik @ Dec 22 2006, 00:43) [snapback]100719[/snapback]
Прямо сюда кидать?

а то куда жеж wink3.gif
Zik
На самом деле самый серьезный баг заключается в том, что если поднять свое же тело, на его месте остается remains в виде золота- точного количества, которое есть у тебя самого. Несложно догадаться что потратив пять минут времени можно скопить несколько миллионовsmile.gif самое главное исправить это, а уж ньансы можно и подождать, чтобы не грузить вас... вот конкретно это где может быть?
Neo
хехе, даю наводку - в скрипте, где точно надо смотреть _все_ связаные с этим скрипты, и это работа не на 3 минуты wink3.gif и править там не 2 и не 3 строки кода, или ты думал подругому?
kreon
Писал их я. Баг там в восстановлении. Когда чар мрёт, записываются координаты его тела в модуль.
Когда он перезаходит тело восстанавливается. Найди скрипт респавна и затри локалки.
(Это было в последней версии мода что я отдавал)

P.S. А по поводу золота - в onacquireitem найди где удаляется труп и добавь
NSS
TakeGoldFromCreature(GetGold(oC), oC, TRUE);

Где oC - обьект, который был копирован CopyObject от игрока.
Lex
QUOTE(Zik @ Dec 22 2006, 00:48) [snapback]100722[/snapback]
На самом деле самый серьезный баг заключается в том, что если поднять свое же тело, на его месте остается remains в виде золота- точного количества, которое есть у тебя самого.

хм.. исправленные скрипты именно по этому багу я кидал Акселю.. еще наверное месяца полтора назад.
Zik
QUOTE
хм.. исправленные скрипты именно по этому багу я кидал Акселю.. еще наверное месяца полтора назад.


Мистика smile.gif Ничего об этом не знаю, а Акселя трудновато найти...не осталось случайно где нибудь в закромах?smile.gif
Lex
QUOTE(NeoJSmith @ Dec 22 2006, 00:51) [snapback]100723[/snapback]
P.S. А по поводу золота - в onacquireitem найди где удаляется труп и добавь
NSS
TakeGoldFromCreature(GetGold(oC), oC, TRUE);

Где oC - обьект, который был копирован CopyObject от игрока.

да, вроде что-то такое я и сделал в итоге - удаление денег перед тем, как удалять тело. Хотя там деньги удалялись сразу при создании, но где-то они опять всплывали.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.