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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
205 страниц V  « < 201 202 203 204 205 >  
Ответить в эту темуОткрыть новую тему
> Вопросы новичков, Абсолютные глупости
zmeylsdn
сообщение Feb 21 2019, 20:52
Сообщение #5046


Level 3
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



-1- в NW_S0_Summon
CODE
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 10);
if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION
))
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oSummon);
}
SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре "oSummon: " или "oSummon: Ужасный барсук"
(имя предыдущего вызванного существа).

}

Видимо не успевает найти самона.
-2- в OnSpawn существа
CODE
object oMaster = GetMaster(OBJECT_SELF);
if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION
, oMaster))
{
object oTarget = OBJECT_SELF;
effect eBonus = EffectAbilityIncrease(ABILITY_STRENGTH, 10);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBonus, oTarget);
}
SendMessageToPC(GetFirstPC(), "oMaster: " + GetName(oMaster)); //в игре "oMaster: "
//SendMessageToPC(GetFirstPC(), "I`m: " + GetName(OBJECT_SELF)); в игре "I`m: Ужасный барсук"
}

видимо не находит мастера. нашел в nwn lexicon такую инфу: "Known bugs. This function (GetMaster()) always returns OBJECT_INVALID when used in creature OnSpawn event. To get correct results, use this function with slight delay or in signal event."
Вопрос теперь как эту строку "object oMaster = GetMaster(OBJECT_SELF);" выполнить с задержкой?
//ActionWait(2.0);
//AssignCommand(OBJECT_SELF, ActionWait(2.0));
не оказали эффекта, а как применить DelayCommand(2.0)); с сохранением привязки к переменной oMaster идей нет.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 22 2019, 07:47
Сообщение #5047


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Тогда предлагаю сделать отдельный скрипт и запускать его из спавна как delaycommand(executescript).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 22 2019, 10:53
Сообщение #5048


Level 3
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



Оба варианта, и OnSpawn, и внутри скрипта вызова, работают с DelayCommand(1.0, ExecuteScript("z_sbuff_onspawn", OBJECT_SELF));
Биг, биг спс.
Нашел как применить несколько эффектов сразу. Но не получается оптимизировать код.
CODE
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION))
{
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 6);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 6);
effect eDam = EffectDamageIncrease(DAMAGE_BONUS_6, DAMAGE_TYPE_BLUDGEONING);
effect eAtt = EffectAttackIncrease(6);
effect eAC = EffectACIncrease(6, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon);
}
else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION
))
{
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 4);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 4);
effect eDam = EffectDamageIncrease(DAMAGE_BONUS_4, DAMAGE_TYPE_BLUDGEONING);
effect eAtt = EffectAttackIncrease(4);
effect eAC = EffectACIncrease(4, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon);
}
else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION))
{
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 2);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, 2);
effect eDam = EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BLUDGEONING);
effect eAtt = EffectAttackIncrease(2);
effect eAC = EffectACIncrease(2, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon);
}
}

Например, такой вариант не срабатывает:
CODE
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
int eBonus;
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, eBonus);
effect eCon = EffectAbilityIncrease(ABILITY_CONSTITUTION, eBonus);
effect eDam = EffectDamageIncrease(eBonus, DAMAGE_TYPE_BLUDGEONING);
effect eAtt = EffectAttackIncrease(eBonus);
effect eAC = EffectACIncrease(eBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL);
if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION))
{
eBonus = 6;
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStr, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCon, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAtt, oSummon);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oSummon);
}
}


Сообщение отредактировал zmeylsdn - Feb 22 2019, 18:05
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ud4ever
сообщение Feb 25 2019, 16:33
Сообщение #5049


Level 3
*

Класс: Бард
Характер: Neutral Evil
Раса: Человек



Цитата(zmeylsdn @ Feb 22 2019, 11:53) *
Оба варианта, и OnSpawn, и внутри скрипта вызова, работают с DelayCommand(1.0, ExecuteScript("z_sbuff_onspawn", OBJECT_SELF));
Биг, биг спс.
Нашел как применить несколько эффектов сразу. Но не получается оптимизировать код.


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

CODE

// в подключаемом стандартном инклюде NWN содержится нужный скрипт который привожу ниже закомментированным на всякий случай
#include "x2_inc_itemprop"

/*

int IPGetDamageBonusConstantFromNumber(int nNumber)
{
switch (nNumber)
{
case 1: return DAMAGE_BONUS_1;
case 2: return DAMAGE_BONUS_2;
case 3: return DAMAGE_BONUS_3;
case 4: return DAMAGE_BONUS_4;
case 5: return DAMAGE_BONUS_5;
case 6: return DAMAGE_BONUS_6;
case 7: return DAMAGE_BONUS_7;
case 8: return DAMAGE_BONUS_8;
case 9: return DAMAGE_BONUS_9;
case 10: return DAMAGE_BONUS_10;
case 11: return DAMAGE_BONUS_11;
case 12: return DAMAGE_BONUS_12;
case 13: return DAMAGE_BONUS_13;
case 14: return DAMAGE_BONUS_14;
case 15: return DAMAGE_BONUS_15;
case 16: return DAMAGE_BONUS_16;
case 17: return DAMAGE_BONUS_17;
case 18: return DAMAGE_BONUS_18;
case 19: return DAMAGE_BONUS_19;
case 20: return DAMAGE_BONUS_20;

}

if (nNumber>20)
{
return DAMAGE_BONUS_20;
}
else
{
return -1;
}
}

*/

void EmpowerMySummon(int iBonus, object oSummon)
{
effect eSummonBonuses=EffectAbilityIncrease(ABILITY_STREN
GTH, iBonus);
eSummonBonuses= EffectLinkEffects(EffectAbilityIncrease(ABILITY_CO
NSTITUTION, iBonus),eSummonBonuses);
eSummonBonuses = EffectLinkEffects(EffectDamageIncrease(IPGetDamage
BonusConstantFromNumber(iBonus), DAMAGE_TYPE_BLUDGEONING),eSummonBonuses);
eSummonBonuses = EffectLinkEffects(EffectAttackIncrease(iBonus),eSu
mmonBonuses);
eSummonBonuses = EffectLinkEffects(EffectACIncrease(iBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL),eSummonBonuses);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSummonBonuses, oSummon);
}

void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
if(GetHasFeat(FEAT_EPIC_SPELL_FOCUS_CONJURATION))
{
EmpowerMySummon(6,oSummon);
}
else if(GetHasFeat(FEAT_GREATER_SPELL_FOCUS_CONJURATION
))
{
EmpowerMySummon(4,oSummon);
}
else if(GetHasFeat(FEAT_SPELL_FOCUS_CONJURATION))
{
EmpowerMySummon(2,oSummon);
}
}


Сообщение отредактировал ud4ever - Feb 25 2019, 16:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 25 2019, 22:30
Сообщение #5050


Level 3
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



Спасибо, работает.
Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ud4ever
сообщение Feb 25 2019, 23:16
Сообщение #5051


Level 3
*

Класс: Бард
Характер: Neutral Evil
Раса: Человек



Цитата(zmeylsdn @ Feb 25 2019, 23:30) *
Спасибо, работает.
Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC?


Можно с nwnx, в 1.69 плагин nwnx_funcs, в NWN EE эта функция в плагине nwnx_creature.

1.69
/* Gets whether or not oCreature has a specialist school of wizardry. */
int GetWizardSpecialization (object oCreature);

NWN EE
// Gets whether or not creature has a specialist school of wizardry.
int NWNX_Creature_GetWizardSpecialization(object creature);


Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 26 2019, 11:56
Сообщение #5052


Level 3
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1.
На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу:
int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale)
Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4).
Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный.
Итого, как лучше реализовать скалирование самонов от уровня мастера?
Как вариант нашел такой способ, основа из предыдущего сообщения:
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
ud4ever
сообщение Feb 26 2019, 23:05
Сообщение #5053


Level 3
*

Класс: Бард
Характер: Neutral Evil
Раса: Человек



Цитата(zmeylsdn @ Feb 26 2019, 12:56) *
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1.
На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу:
int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale)
Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4).
Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный.
Итого, как лучше реализовать скалирование самонов от уровня мастера?
Как вариант нашел такой способ, основа из предыдущего сообщения:
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon);
}


а той же функцией для левелапа хенчмана из X2_inc_summscale воспользоваться не пробовал?

int SSMLevelUpCreature(object oCreature, int nLevelUpTo, int nClass = CLASS_TYPE_INVALID, int bReadySpells =TRUE)

____________

#include "X2_inc_summscale"

void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
SSMLevelUpCreature(oSummon,GetHitDice(OBJECT_SELF)
);
}

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
zmeylsdn
сообщение Feb 27 2019, 14:02
Сообщение #5054


Level 3
*

Класс: Бледный Мастер
Характер: Chaotic Neutral
Раса: Человек



В x0_s2_fiend меняю стандартного врока на своего, докидываю DelayCommand(4.0, ExecuteScript("z_sbuff_scale", OBJECT_SELF)); после ApplyEffectAtLocation...
CODE
//z_sbuff_scale
#include "X2_inc_summscale"
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
SSMLevelUpCreature(oSummon,GetLevelByClass(CLASS_T
YPE_BLACKGUARD, OBJECT_SELF)+10);
SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре oSummon: Самон Эпик Врок
SendMessageToPC(GetFirstPC(), "oSummonlvl: " + IntToString(GetHitDice(oSummon)));//в игре oSummonlvl: 25
SendMessageToPC(GetFirstPC(), "BG+10lvl: " + IntToString(GetLevelByClass(CLASS_TYPE_BLACKGUARD, OBJECT_SELF)+10));//в игре BG+10lvl: 39
}

Но Врок остается 25й лвл как и был. У него стандартный набор скриптов "nw_ch_ac%"
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 27 2019, 18:20
Сообщение #5055


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



SSMLevelUpCreature возвращает 0 на ошибку, это стоит проверить.

Второй момент - чудеса внутри самой функции:
Neverwinter Script
int nLevel = LevelUpHenchman(oCreature,nClass,bReadySpells); // <-- первый ап oCreature
  // level me up until I the same level as my master (or something fails) <-- коммент врёт, нет проверки на уровень мастера (либо эта проверка вшита и её не обойти)
  while (nLevel < (nLevelUpTo) && nLevel != 0)
  {
    // level up to thenext level
      //PrintString(GetName(oCreature) + " is now level "+ IntToString(nLevel));
    nLevel = LevelUpHenchman(OBJECT_SELF,nClass,bReadySpells); // <-- а тут внезапно в цикле OBJECT_SELF
  }

Ещё он не просто так апает. У каждого класса есть пакет стандартных настроек, кажется, это всё в 2да. Тут тоже стоит проверить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Feb 28 2019, 16:30
Сообщение #5056


Level 6
**

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



Привет всем!
Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона?
В смысле, уничтожить одного очень упертого и несговорчивого непися.
Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне):
Neverwinter Script
void main()
{
    //object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
//  ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF);
    SetCommandable(FALSE);
}

Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает.
Если я правильно понял, дестрою мешает строка:
Neverwinter Script
SetIsDestroyable(FALSE,FALSE,FALSE);

Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть.
Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой.
Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы.
Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а?
Заранее спасибо и прошу простить за многабукафф.

Привет всем!
Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона?
В смысле, уничтожить одного очень упертого и несговорчивого непися.
Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне):
Neverwinter Script
void main()
{
    //object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
//  ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF);
    SetCommandable(FALSE);
}

Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает.
Если я правильно понял, дестрою мешает строка:
Neverwinter Script
SetIsDestroyable(FALSE,FALSE,FALSE);

Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть.
Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой.
Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы.
Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а?
Заранее спасибо и прошу простить за многабукафф.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 28 2019, 17:23
Сообщение #5057


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Можно одной строкой, что именно нужно сделать? (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Feb 28 2019, 18:44
Сообщение #5058


Level 6
**

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



Цитата(denis0k @ Feb 28 2019, 17:23) *
Можно одной строкой, что именно нужно сделать? (IMG:style_emoticons/kolobok_light/smile.gif)


Нужно уничтожить непися.
Команда " DestroyObject(GetObjectByTag("ELEFANT_DEATH"));" не срабатывает.
Причины, как я их понял, описаны в предыдущем посту.

Можно было бы еще убрать этого непися в закрытую локу. Но команда "JumpToObject" также игнорируется. Полагаю, по тем же причинам. То есть из-за строчки " SetIsDestroyable(FALSE,FALSE,FALSE);" в графе "Порожден" (спавн) тела непися. Но без этой строки непись исчезает сама, не дожидаясь команды.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Feb 28 2019, 19:11
Сообщение #5059


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Может перед дестроем сделать SetIsDestroyable(true)?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 1 2019, 13:14
Сообщение #5060


Level 6
**

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



Цитата(denis0k @ Feb 28 2019, 19:11) *
Может перед дестроем сделать SetIsDestroyable(true)?


Пробовал в разных вариантах. Весь вечер и половину ночи.
Исчезает невидимый плейс, с которым, собственно, и ведется диалог. (На саму непись нельзя кликнуть, как и задумано.) Но плейс-то легко уничтожить одной строчкой без всяких танцев с бубнами. А вот объяснить компилятору что применять SetIsDestroyable(true) надо не к плейсу, к этой чертовой неписи, я не сумел...
Пробовал и другой путь: привязать SetIsDestroyable к переменным. Есть переменная - TRUE, а пока ее нет - FALSE. Если не трудно, взгляни на скрипт. Может, поймешь, в чем моя ошибка. На мой взгляд, ошибаться там просто нечему, но это взгляд дилетанта, не знающего английского.
Neverwinter Script
void main()
{
    object oNpc = GetObjectByTag("ELEFANT_DEATH"); // Этот чертов слон

          ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc); // Слон мертв. Лежит и не рыпается, кликнуть нельзя.

              SetCommandable(FALSE);

                            if  (GetLocalInt(oNpc, "SLON") != 1) // Переменной еще нет.
    SetIsDestroyable(FALSE,FALSE,FALSE); // Слона не расшибешь ядрен-батоном.

                  if  (GetLocalInt(oNpc, "SLON") == 1) // Переменная присвоена

              SetIsDestroyable(TRUE,TRUE,TRUE); // Слон должен исчезнуть сам или по команда скрипта - не важно.
}


Не исчезает, зараза! Плевал он на переменные.
И что интересно, если строчку " ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);" переставить в любое другое место вниз, компилятор считает, что все правильно, а вот непись "оживает". Стоит на ножках, крутит башкой, кликнуть можно. Получаются не "похороны", а цирк какой-то.
Скрипт стоит на порождении (OnSpawn) непися.
Спасибо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Mar 1 2019, 17:39
Сообщение #5061


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
Исчезает невидимый плейс, с которым, собственно, и ведется диалог.
Почему плейс-то? (IMG:style_emoticons/kolobok_light/smile.gif) Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 1 2019, 18:30
Сообщение #5062


Level 6
**

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



Цитата(denis0k @ Mar 1 2019, 17:39) *
Почему плейс-то? (IMG:style_emoticons/kolobok_light/smile.gif) Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять.


Извини, зря я вообще этот плейс приплел. Путаницу вношу. Просто слона невозможно кликнуть, он же лежит труп-трупом. Диалог ("Снять шкуру --- Вырыть яму --- Закопать слона") идет с невидимым плейсом под брюхом у непися.
Теги у плейса и непися-слона, разумеется, разные.
Просто в конце диалога перс типа хоронит слона, дестроятся оба, и слон и плейс. То есть должны дестроиться. С плейсом все ок, а со слоном-неписью... Просто беда...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Mar 1 2019, 18:34
Сообщение #5063


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 1 2019, 18:48
Сообщение #5064


Level 6
**

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



В том то и проблема, что у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом.

Цитата(denis0k @ Mar 1 2019, 18:34) *
Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем.


Разумеется, я именно так и делал. Сначала дестрой слону, а потом, через пару строк, в самом конце диалога - плейсу. Разными скриптами. Иначе бы диалог просто прервался.
Причем На последней строчке не только дестрой плейсу, а еще + переключение квеста, куча дебафов на перса, типа задолбался, реплика перса. Через акции. И все работает как часики.
Кроме чертова слона!!!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Mar 2 2019, 00:22
Сообщение #5065


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Цитата
у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом.
Через ассигн? Кстати, неплохо бы и SetCommandable(true) делать. Иначе ассигн не сработает. А зачем вообще там false делается в начале? Он же вроде невыделяем вообще, его блокировать не надо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 2 2019, 03:05
Сообщение #5066


Level 6
**

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



Цитата(denis0k @ Mar 2 2019, 00:22) *
Через ассигн?

Нет. Через ассинг у меня последний скрипт в диалоге. Но там иначе никак. Много всего: переключение квеста, анимация, затемнение, отсчет времени, крейт с палитры кучи мусора (могила слона) и т. д. Но этот скрипт как раз работает нормально. Все команды выполняются.
А для "SetIsDestroyable(TRUE)" я пытался сочинить отдельный скрипт. Тоже в диалоге, парой строк раньше. Исключительно для нее. Где тупо, в лоб, желательно вообще одной строкой объяснить компилятору, что эту функцию надо применить к объекту с тегом "ELEFANT_DEATH". И не сумел.
Понимаешь, я вообще впервые с этой функцией столкнулся. Нет примера перед глазами, как правильно сформулировать. На все попытки сформулировать по аналогии с другими функциями компилятор ругается.
А сам сочинять я умею, увы, только на русском.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Mar 2 2019, 17:31
Сообщение #5067


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Как всё сложно. Нелегко ванговать, но могу предложить следующее:

SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый.

Для разрушения сделать в диалоге:
Neverwinter Script
AssignCommand("слон", SetIsDestroyable(TRUE));
AssignCommand(GetModule(), DestroyObject("слон"));
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 2 2019, 20:56
Сообщение #5068


Level 6
**

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



Цитата(denis0k @ Mar 2 2019, 17:31) *
Как всё сложно.


Дык, я обычно и не прошу помощи пока сам не расшибу лоб апстену. (IMG:style_emoticons/kolobok_light/vava.gif)

Цитата(denis0k @ Mar 2 2019, 17:31) *
SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый.


В том то и беда, что влияет. И еще как. Без этого FALSE-а моделька исчезает совершенно самостоятельно. Без всяких диалогов-команд-дестроев. Стоит только персонажу ее просто увидеть. Даже подходить не обязательно. И не получается как раз отменить эту функцию через скрипт диалога. Ну, или заменить на SetCommandable(труЪ); - тот же арбуз, только сбоку.
Кстати, я еще в первом посту на эту тему спрашивал: может, существует какой-то более другой способ удержать модельку? Без SetCommandable(FALSE); И тогда в нужный момент можно бы ее убрать простым дестроем, без танцев с бубнами.
За "GetModule()," спасибо огромное! Мне эта идея почему-то не приходила в голову. А надо бы! Нутром чую, раз моделька так себя ведет, - это модульные заморочки.
Пошел пробовать всякие варианты.
Спасибо еще раз!

denis0k, мой должок тебе, и без того немаленький, увеличился на порядок! Все работает! Мерзкая тварь исчезла.
Больше того, я понял, почему компилятор ругался на мои прежние попытки. Я писал как в теле (на OnSpawn) непися, т. е. SetIsDestroyable(TRUE,TRUE,TRUE); Оказалось, в диалоге надо всего 1 раз.
Я специально не писал, как для меня важен этот издевательский квест. А он не просто сюжетный, он ключевой. Понимаешь, мой Робинзон наконец-то добрал к людям, нашел деревушку с прекрасными туземками. Бежит к ним весь на крыльях, готовый спасать принцесс и побеждать драконов. А его все игнорят. И только старый ехидный шаман дает квест: иди как ты, геройский наш, закопай слона. Герой в ауте, но... куда деваться!
В общем, прошу прощения за оффтоп и многабукв.
denis0k, спасибо еще раз. Огромное!
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
denis0k
сообщение Mar 2 2019, 20:59
Сообщение #5069


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [PW]
Gem of the North
Край Лесов



Если нужно вырубать очередь, то можно её потом и включить: SetCommandable(TRUE, "слон").
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chiffa
сообщение Mar 2 2019, 21:07
Сообщение #5070


Level 6
**

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



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

205 страниц V  « < 201 202 203 204 205 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20th August 2025 - 18:44