Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
DarkDeivel
Люди. Как сделать так чтобы каждая раса начинала в разном городе. Типа челове в Человеческом городе. Эльф в эльфийском. и.т.д.
Dik Morris
Написать простой скрипт, который проверяет расу игрока и кидает того в нужное место:

NSS
// Под точкой старта, создаем триггер и на onEnter, вешаем код:
void main()
{
string sRace;
object oEnter = GetEnteringObject();
int nRace =GetRacialType(oEnter);
int nInt = GetLocalInt(oEnter, "nEnterPlayer");

if (nInt == 1)
   return;

if (GetIsPC(oEnter) == FALSE)
   return;

SetLocalInt(oEnter, "nEnterPlayer", 1);

switch (nRace)
   {
   case RACIAL_TYPE_DWARF: sRace = "DWARF"; break;
   case RACIAL_TYPE_GNOME: sRace = "GNOME"; break;
   case RACIAL_TYPE_HALFELF: sRace = "HALFELF"; break;
   case RACIAL_TYPE_HALFLING: sRace = "HALFLING"; break;
   case RACIAL_TYPE_HALFORC: sRace = "HALFORC"; break;
   case RACIAL_TYPE_HUMAN: sRace = "HUMAN"; break;
   case RACIAL_TYPE_ELF: sRace = "ELF"; break;
   }
AssignCommand(oEnter, ClearAllActions());
AssignCommand(oEnter, ActionJumpToObject(GetWaypointByTag("WP_"+sRace+"")));
}


Теперь о его настройке. Для каждой рассы необходимо создать вайпоинт c тэгом: WP_+НАЗВАНИЕ_РАССЫ и разместить в нужном месте. Т.е скажем для людей это будет: WP_HUMAN, который соответственно будет находится в людском городе.
DarkDeivel
Если честно, то я не въехал. nea.gif

Я имею ввиду. Что при создании нового перса он сразу начинается в определённом городе. Если ты написал то что мне надо. То я попробовал чот неправильно. Я давно не создавал все позабывал. Поэтому не ругай меня за мою тупость.
-fenix-
Кстати, какую-нить расу можно в скрипте не указывать. Тогда ее представитель появется в точке старта. Не поставить ее не получится, так что че ей просто так стоять? smile.gif
Dik Morris
-fenix-, логично. smile.gif

DarkDeivel,
QUOTE
Что при создании нового перса он сразу начинается в определённом городе

именно это и написал. smile.gif

PS: в скрипте была небольшая ошибка, но я исправил. Читай пост еще раз. И описание. wink3.gif
DarkDeivel
ВОт код я повешал. Ты писал

Теперь о его настройке. Для каждой рассы необходимо создать вайпоинт c тэгом: WP_+НАЗВАНИЕ_РАССЫ и разместить в нужном месте. Т.е скажем для людей это будет: WP_HUMAN, который соответственно будет находится в людском городе.

А вот WP_HUMAN куданить в скрипте записывать надО?? biggrin.gif
Lex
не в скрипте.
- берешь ЛЮБОЙ вэйпоинт из палитры
- ставишь его туда, где будут люди появляться
- даешь ему тэг WP_HUMAN
дальше по аналогии с другими рассами.

что не ясно то?
DarkDeivel
QUOTE(Lex @ Sep 22 2006, 09:59) [snapback]92436[/snapback]

не в скрипте.
- берешь ЛЮБОЙ вэйпоинт из палитры
- ставишь его туда, где будут люди появляться
- даешь ему тэг WP_HUMAN
дальше по аналогии с другими рассами.

что не ясно то?

Всё ясно. Все работает. declare.gif
Diamond
Пара вопросов по скриптам.

Есть скрипт, который сажает непися на стул (то что запостил в первый раз это был полный бред...)

NSS
void main()
{
ActionSit (GetNearestObjectByTag("SIT_STOOL", OBJECT_SELF));
}


Но при разговоре с игроком непись ясное дело встаёт. Сам вопрос: как надо поменять скрипт, чтобы после завершения диалога непись опять садился?

И ещё вопрос: Что надо поставит на триггер, чтобы когда на него наступит игрок к нему подбегал непись и начинал диалог, но этого бы не происходило пока переменная "Перем" скажем не равна 1?
Lex
NSS
    if (IsInConversation(OBJECT_SELF)) return; // если разговариваем - выход
    if (GetIsInCombat(OBJECT_SELF)) return; // если в бою - выход
    // в остальных случаях садимся
   ActionSit (GetNearestObjectByTag("SIT_STOOL", OBJECT_SELF));

Этот блок поставить в ХБ скрипт или в ЮД, в ту часть, которая отвечает за ХБ.

скрипт для триггера и диалога НПС писали уже раз 100. поищи.
Diamond
Со стулом теперь всё ОК good.gif Спасибо!
Diamond
Вопрос: Есть скрипт на ТекстПоявляетсяПри
NSS
int StartingConditional()
{

    // Inspect local variables
    if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_sailok") != 1))
        return FALSE;
    if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_sajala") != 1))
        return FALSE;
    if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_ship_contr") != 1))
        return FALSE;
    if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_ship_merc") != 1))
        return FALSE;

    return TRUE;
}


Но мне нужно, чтобы строка диалога исчезала только если все 4 переменныи равны 1, а в этом вареанте она исчезает если одна равна 1.
Dik Morris
NSS
int StartingConditional()
{
    object oPC = GetPCSpeaker();

    if (GetLocalInt(oPC, "ar1_leave_sailok") == 1 && GetLocalInt(oPC, "ar1_leave_sajala") == 1 &&
    GetLocalInt(oPC, "ar1_leave_ship_contr") == 1 && GetLocalInt(oPC, "ar1_leave_ship_merc") == 1)
    {
     return FALSE;
    }
    else
     return TRUE;
}


Когда все 4 переменные равны TRUE, то строка исчезает. Иначе - висит.
2_advanced
а при компиляци не ругается на некое невозвращенное значение функции? crazy.gif

имхо else return TRUE;
заменить на просто return TRUE;
StalkerDtN
QUOTE(2_advanced @ Sep 25 2006, 00:20) [snapback]92679[/snapback]
а при компиляци не ругается на некое невозвращенное значение функции?

if-else типа друг друга дополняют, так что не ругается! biggrin.gif
Ilrilan
Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит
:-((
Dart_Vadder
QUOTE(Ilrilan @ Sep 27 2006, 11:57) [snapback]92874[/snapback]

Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит
:-((

Ясно дело, не ловится. Программно это дело не решается.
2_advanced
внешним софтом отлавливать посыл пакета на выход =)
а чтоб не альтились - сделать спец палку с диалогом, бутящую персов =)
dumbo
QUOTE(Ilrilan @ Sep 27 2006, 09:57) [snapback]92874[/snapback]
Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит

интересный метод "альтования", однако. при описываемом тобой раскладе, альтующийся извращенец быстро склеит ласты, ибо сервер пакет выхода не видит, и думает что чел здесь. и только через минуту таймаута сервак по отсутствию "пингов" поймет, что чела нет и спокойно завершит сессию, записав состояние перса. а состояние это скорее всего будет "несвежим", и зайдя обратно чел будет тщетно взывать к ДМам "БАГ!Я ЗОШОЛ МЕРТВЫЙ!!!!А БЫЛ ЖИВОЙ!!!!" shout.gif. так что способ этот относится скорее к сепукке, нежели к позорному бегству.

QUOTE(2_advanced @ Sep 27 2006, 16:31) [snapback]92904[/snapback]
внешним софтом отлавливать посыл пакета на выход =)

это "ответ чемберлену" на нормальное альтование. wink3.gif
Sharklike
QUOTE(dumbo @ Sep 28 2006, 02:41) [snapback]92934[/snapback]

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

В большинстве случаев так и будет, но не всегда. Если клиент линуховый и его убивают, то сервер тут же отключает чела, даже не получив пакет выхода. Видать как-то еще обрабатывается состояние сокета.
Animeslave
Пытался сделать дверь которая закрывается 20 часов вечера и открывается в 8 утра.

Что не правильно? Ставил на OnHeartBeat

NSS
void main()
{
    object door=OBJECT_SELF;
    {
        if (GetIsOpen(door)==FALSE && GetTimeHour()>=8 && GetTimeHour()<20)
        {
            ActionUnlockObject(door);
            ActionOpenDoor(door);
        }
        if (GetIsOpen(door)==TRUE && GetTimeHour()>=20 && GetTimeHour()<8)
        {
            ActionCloseDoor(door);
            ActionLockObject(door);
        }
    }
}
Lex
А что не работает?
зы: запирать дверь лучше
NSS
// Set the locked state of oTarget, which can be a door or a placeable object.
void SetLocked(object oTarget, int bLocked)
Animeslave
Lex спасибо, что перенес. Хочу сильно извениться за свои слова. Простите!

И Lex Если это ты мне, то дело не в том, что плохо запирается, а в том, что, вообще, в назначеный час, не закрываестя, или не открывается дверь.

ps: извеняюсь за неинформативность.
Lex
- Ну для начала у тебя неверное условие:
"GetTimeHour()>=20 && GetTimeHour()<8" Время не может быть одновременно больше 20 и меньше 8. Там надо не И, а ИЛИ ставить.
- потом у тебя идет проверка на открытость/закрытость двери, а надо бы на запертость
- ну и если дверь заперта на ключ, то ты ее некорректно отпираешь, поэтому открыть ее не получается утром.. ну а вечером не закрывается потому что условие неверное.

В итоге что-то такое получается: (скрипт из ПЛ, только тут наоборот, днем закрыто, а ночью открыто.. ночной храм был)
NSS
void main()
{
int H = GetTimeHour();
object oSelf = OBJECT_SELF;
if ((H>=8)&&(H<20)&&(!GetLocked(oSelf)))
   {
   SetLocked(oSelf,TRUE);
   ActionCloseDoor(oSelf);
   }
if (((H>=20)||(H<8))&&(GetLocked(oSelf)))
   {
   SetLocked(oSelf,FALSE);
   ActionCloseDoor(oSelf);
   }
}
Animeslave
Lex спасибо за помощь нашел ошибку. переправил скрипт.

NSS
void main()
{
    object door=OBJECT_SELF;
    {
        if (GetTimeHour()>=8 && GetTimeHour()<20)
        {
            if (GetLocked(door)==TRUE)
            {
                SetLocked(door, FALSE);
                ActionOpenDoor(door);
            }
            else
            {
                ActionOpenDoor(door);
            }
        }
        else
        {
            if (GetLocked(door)==FALSE)
            {
                ActionCloseDoor(door);
                SetLocked(door, TRUE);
            }
            else
            {
                ActionCloseDoor(door);
            }
        }
    }
}


Все также на OnHeartBeat двери. И Начальное состояние двери закрыто.
Проверил работает

ps: Твой скрипт,Lex, почемуто отказывается работать.

LEX: ну у меня работал и работает до сих пор, хотя и старенький, его надо бы оптимизировать.
Aiwan
Чертишь триггер перед дверью сразу. И вешаешь на ОнЕнтер триггера скрипт:
NSS
//:://////////////////////////////////////////////
//:: OnEnter  am_ten_door_d_n
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
      Триггер закрыв. двери ночью
          и открыв. днем/утром
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.04.2005
//:://////////////////////////////////////////////
void main()
{
object oDoor = GetNearestObject(OBJECT_TYPE_DOOR);
int iLock = GetLocalInt(oDoor, "LOCKED_NIGHT");
if ((GetIsNight()&&iLock==TRUE)||(GetIsDay()||GetIsDawn()&&iLock==FALSE))
  {
  return;
  }
  if (GetIsNight())
  {
  SetLocked(oDoor, TRUE);
  SetLocalInt(oDoor, "LOCKED_NIGHT", TRUE);
  return;
  }
  if (GetIsDay()||GetIsDawn() && iLock == TRUE)
      {
      SetLocked(oDoor, FALSE);
      SetLocalInt(oDoor, "LOCKED_NIGHT", FALSE);
      }
}
gennady
Маленькая модернизация скрипта Лекса. Можно менять час закрытия у нужной двери.
NSS
//:://///////////////////////////////////////
//:: Закрытие двери: день - ночь.  Слот ХБ
//:: Created By: Gennady
//:://///////////////////////////////////////
void main()
{
  object oSelf = OBJECT_SELF;
  int T = GetTimeHour();
  int iNewT = StringToInt(GetLockKeyTag(oSelf)); // Новый час ЗАКРЫТИЯ
  int iT = 21; // БАЗОВЫЙ час ЗАКРЫТИЯ

  if (iNewT >= 1) iT = iNewT;
  if(T>=iT || T<6)
  {
    AssignCommand(oSelf, ActionCloseDoor(oSelf));
    AssignCommand(oSelf, ActionDoCommand(SetLocked(oSelf, TRUE)));
  }
  else
    AssignCommand(oSelf, SetLocked(oSelf, FALSE));
}
/* Если в слоте тэга ключа стоит цифра, то это новый час закрытия этой двери */
Lex
gennady, имхо:
- прятать инфу в LockKeyTag когда можно уже локалки делать в тулсе как-то попахивает нафталином smile.gif
- ставить SetLocked в очередь совершенно не обязательно. Фишка в том, что SetLocked(..,TRUE) можно сделать даже открытой двери. И закрыв ее - мы сразу ее и запрем. (ну эт так, придирка)
- чтобы не сравнивать каждый раз if (iNewT >= 1) iT = iNewT; проще вписать базовый час открытия в локалку (если ее не задал пользователь) и потом всегда работать с локалкой.
- ну и самое главное - ты не проверяешь, заперта ли уже дверь или нет, а значит всю ночь (с 21 до 6) ты будешь ее закрывать и запирать. Это лишнее.

доступно объяснил? smile.gif

Animeslave в принципе нормальный скрипт привел, только там else лишние малек.
так же у Айва неплохой вариант, позволяющий не загружать ХБ, только его конечно лучше немного переписать в плане структуры и проверок - корявенький. А идея интересная.
Neo
не совсем понял смыла таких эээ... больших скриптов pardon.gif я бы написал нечто вроде
NSS
int nLock = GetTimeHour() < GetLocalInt(OBJECT_SELF, "open_time") || GetTimeHour() >= GetLocalInt(OBJECT_SELF, "close_time");
if( GetLocked(OBJECT_SELF) != nLock ) {
  if( nLock ) AssignCommand(OBJECT_SELF, ActionCloseDoor(OBJECT_SELF));
  SetLocked(OBJECT_SELF, nLock);
}

не проверял понятно pardon.gif

можно еще добавить проверку на open_time > close_time scratch_one-s_head.gif
r1Stranger
Какой скрипт (если есть) отвечает за восстановление заклинаний у кастеров?

Aiwan
NSS
ForceRest(oPC);

Такой не помогает?
SoulReaver
Человек я здесь новый, но перейду сразу к делу. Меня интересует следующее - как ограничить развитие oPC по классу (т.е. задать для пользователя развитие только по тому классу, который определит разработчик). Или скажите хотя бы, как называется скрипт, который описывает все классы.
Vhall
Тебе нужен не скрипт, а classes.2da
Там есть столбец PlayerClass: 1 - игрок может выбирать при генерации, 0 - нет.
SoulReaver
Это я знаю, но мне этот вариант не подходит. Мысль в следующем: oPC развивается по классу который задал автор, но по ходу игры некоторые NPC могут предоставить возможность обучатся и по другому классу. Вся сложность в том, что необходимо выдержать линейность сюжета, а иначе полная белеберда получится.
Lex
хм.. ну в принципе можно сделать следующее:
перевести все классы, кроме начального в позицию "престиж класс". (или что наверное более логично - сделать копии нужных классов в формате престижа, закрыв базовые классы). Так как в условия взятия престижа можно внести локалку (те определенная локалка имеет определенное значение), то установив ее в диалоге нужном, можно открыть нужный престиж класс.
Я ясно выражаюсь? smile.gif
Ноин
Мне нужно, чтобы персонаж выглядел определенным образом - То есть человек, с рожей с рогами и с хвостом (по сюжету это тифлинг) Как это сделать?
Lex
ы? у НПС в свойствах Appearance все настраивается.
Если скриптами, то есть
NSS
// Sets the body part model to be used on the creature specified.
// The model names for parts need to be in the following format:
//  p<m/f><race letter><phenotype>_<body part><model number>.mdl
//
// - nPart (CREATURE_PART_*)
//      CREATURE_PART_RIGHT_FOOT
//      CREATURE_PART_LEFT_FOOT
//      CREATURE_PART_RIGHT_SHIN
//      CREATURE_PART_LEFT_SHIN
//      CREATURE_PART_RIGHT_THIGH
//      CREATURE_PART_LEFT_THIGH
//      CREATURE_PART_PELVIS
//      CREATURE_PART_TORSO
//      CREATURE_PART_BELT
//      CREATURE_PART_NECK
//      CREATURE_PART_RIGHT_FOREARM
//      CREATURE_PART_LEFT_FOREARM
//      CREATURE_PART_RIGHT_BICEP
//      CREATURE_PART_LEFT_BICEP
//      CREATURE_PART_RIGHT_SHOULDER
//      CREATURE_PART_LEFT_SHOULDER
//      CREATURE_PART_RIGHT_HAND
//      CREATURE_PART_LEFT_HAND
//      CREATURE_PART_HEAD
// - nModelNumber: CREATURE_MODEL_TYPE_*
//      CREATURE_MODEL_TYPE_NONE
//      CREATURE_MODEL_TYPE_SKIN (not for use on shoulders, pelvis or head).
//      CREATURE_MODEL_TYPE_TATTOO (for body parts that support tattoos, i.e. not heads/feet/hands).
//      CREATURE_MODEL_TYPE_UNDEAD (undead model only exists for the right arm parts).
// - oCreature: the creature to change the body part for.
// Note: Only part based creature appearance types are supported.
// i.e. The model types for the playable races ('P') in the appearance.2da
void SetCreatureBodyPart(int nPart, int nModelNumber, object oCreature=OBJECT_SELF)
Ноин
Я говорю про гг естественно
мне нужно, чтобы при создании персонажа был достпен только один вид лица и тела + уже забитые цвета. совсем хорошо было бы сделать его с хвостом...
Lex
зафиксировать части тела врядли получится.. можно конечно накопировать нужную голову под всеми возможными номерами, чтобы как не переключай, все равно была одна и та же, но это плохой выход.
Хвост приделать после генережки.. голову тоже там рекомендую поменять, как и все остальное. Цвета - хз.
Don_Beavis
Народ, подскажите хороший скриптик генератора лута.
-fenix-
Генерация лута не просто скриптик - это целая система.
Понятие "хороший" тут вообще не приемлимо, так как все системы пишутся под четкие нужды, концепцию модуля.

Для начала нужно понять, что тебе нужно от этой системы, что собственно должно получиться после после ее работы, что она и как должна генерировать. Я не про примудрости скриптинга, не про саму реализацию - об этом скриптер будет думать. А о самой концепции - нужно четко представлять, как она будет работать, и каким должен быть конечный результат.

Если что-то о стандартном, то тут где-то на форуме должны быть такие скрипты или примеры. Посмотри в "Базе скриптов", поиск используй. Еще полюбому есть всякие настраиваемые системы на ваулте (тож поиск).

Но опять же, советовать что-то по такому поводу очень проблематично. Ты сам должен определиться с тем, что собственно нужно и уже исходя из этого выбрать тот "хороший скриптик".
Ноин
QUOTE
зафиксировать части тела врядли получится.. можно конечно накопировать нужную голову под всеми возможными номерами, чтобы как не переключай, все равно была одна и та же, но это плохой выход.
Хвост приделать после генережки.. голову тоже там рекомендую поменять, как и все остальное. Цвета - хз


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

__
ну и вариант 3 - не забивать себе голову такими мелочами. Когда начнешь нормально делать модуль, влезешь в сюжетно-квестовые заморочки, диалоги и скриптование всего этого, такие вот вещи как ненастраеваемая внешность покажутся пустяками, на которые не стоит тратить время.
Neo
QUOTE(Lex @ Oct 29 2006, 00:45) [snapback]96085[/snapback]
поковырять GUI и попробовать там проскочить настройку внешности или заблокировать возможности ее изменения.. но как - я глубоко хз.

Ноин, берешь файлО cg_appearance.gui, бирешь любой гыфыфы-едитор, смотришь кнопки по тегу с частью тела, в примере HairButton, конкренто показываю:
IPB Image
и убиваешь ее, либо помечаешь неактивной, либо выставляешь координаты точно за пределами экрана.
Если не получиццо ничего из этого - делаешь страшшшнае лицо orc.gif и кричишь грозным голосом: "Не будешь работать, буду под нывыны2 делать" biggrin.gif
Ноин

QUOTE
ну и вариант 3 - не забивать себе голову такими мелочами. Когда начнешь нормально делать модуль, влезешь в сюжетно-квестовые заморочки, диалоги и скриптование всего этого, такие вот вещи как ненастраеваемая внешность покажутся пустяками, на которые не стоит тратить время.


Весь смысл всего модуля потеряется если гг будет обычным человеком, а ему будут кричать люди при встрече - демон, демон, страааажа, помогиите!

2NeoJSmith - спасибо
Zirrex
С переходом на версию 1.68 возник вопрос, как менять облик плаща скриптово? Пробовал по старинке с помощью функции "CopyItemAndModify". Не копирует. Конечно, спасибо им за плащи, как говорится, не прошло и года. Долго ждали. Но, чувствуется, не все до конца доделали.

Пробовал так, бесполезно:
NSS
#include "x2_inc_craft"

void main()
{
    object oPC = GetPCSpeaker();
    object oCloak = CIGetCurrentModItem(oPC);

    int nPart = StringToInt(Get2DAString("cloakmodel", "MODEL", Random(14)+1));

    if (GetIsObjectValid(oCloak))
    {
        object oItem = CopyItemAndModify(oCloak, ITEM_APPR_TYPE_SIMPLE_MODEL, 0, nPart);
        AssignCommand(oPC, ActionEquipItem(oItem, INVENTORY_SLOT_CLOAK));
        DestroyObject(oCloak);
        CISetCurrentModItem(oPC, oItem);
    }
}

Можно, в принципе, обойтись и без "Get2DAString", но все равно ничего не меняется. Из-за этого изменения перестали генерироваться случайные плащи в модуле sad.gif
-fenix-
Хм, копировать руками?
Тобишь создавать плащ, навешивать на него св-ва нужные и мудрить с моделью, а старый удалять????
Zirrex
-fenix-, берем плащ, и изменяем ему, к примеру, модель. С другими вещами эта функция работает как нужно, с новыми плащами она отказывается работать. Плащ просто исчезает. И правильно, потому что функция дальше удаляет старый объект, только нового плаща нет.

Навешивать что-либо на вещь можно и без изменения модели. С этим проблем нет, а вот что касается плащей, тут загвоздка. Видимо придется делать 14 разных моделей плаща, чтобы не менять модель. Я еще это делал для крафта, чтобы можно было поменять облик шлема, ну и плаща, раз такая появилась возможность.
denis0k
Для крафта шапок и щитов приходилось делать кучу итемов в палитре, а потом ручками создавать/удалять. Этак "по-скриптерски в лоб" smile.gif Но как говорил один мой друг, самый простой метод - самый правильный smile.gif
2_advanced
QUOTE(denis0k @ Oct 31 2006, 03:14) [snapback]96282[/snapback]

Для крафта шапок и щитов приходилось делать кучу итемов в палитре, а потом ручками создавать/удалять. Этак "по-скриптерски в лоб" smile.gif Но как говорил один мой друг, самый простой метод - самый правильный smile.gif

угу =) особенно если стоит СЕП.
100 плащей и х100 на каждый цвет)
итого - плащи весят больше чем модуль ph34r.gif

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