Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
-fenix-
Не знаю нужно это уже или нет dntknw.gif , но пусть будет, мож кому прегодиться. Все работает!
Теги и ресрефы везде конечно свои

На OnPlayerDeath
Neverwinter Script Source
void Clear(object oBag = OBJECT_SELF)
{
object oItem = GetFirstItemInInventory(oBag);
while (GetIsObjectValid(oItem))
  {
  DestroyObject(oItem);
  oItem = GetNextItemInInventory(oBag);
  }
DestroyObject(oBag,1.0);
}

void main()
{
object oPlayer = GetLastPlayerDied();
string sTag = GetName(oPlayer);
location lDiedHere = GetLocation(oPlayer);
string sHelpString="Вы мертвы, если желаете реинкарнироватьсЯ нажмите кнопку Респавн.";
object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE,"blueprint001", lDiedHere,TRUE);
object oLoot = CreateObject(OBJECT_TYPE_PLACEABLE, "blueprint002", lDiedHere, TRUE, sTag);
int nGP = GetGold(oPlayer);
SetLocalObject(oPlayer, "oOwner", oCorpse);
SetImmortal(oPlayer, TRUE);

int i = 0;
object oItem = GetFirstItemInInventory(oPlayer);
while (GetIsObjectValid(oItem))
    {
    if (GetDroppableFlag(oItem))
      CopyObject(oItem,lDiedHere,oLoot);
    DestroyObject(oItem);
    oItem = GetNextItemInInventory(oPlayer);
    }
oItem = GetItemInSlot(i,oPlayer);
while (i<14)
    {
    if (GetDroppableFlag(oItem))
      CopyObject(oItem,lDiedHere,oLoot);
    DestroyObject(oItem);
    i++;
    oItem = GetItemInSlot(i,oPlayer);
    }

AssignCommand(oLoot,TakeGoldFromCreature(nGP,oPlayer,FALSE));

ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
AssignCommand(oPlayer,ClearAllActions());
AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE"))));
DelayCommand(1.0,PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));
}


На OnPlayerRespawn

Neverwinter Script Source
#include "nw_i0_plot"

void ApplyPenalty(object oDead)
{
  int nXP = GetXP(oDead);
  int nPenalty = 250 * GetHitDice(oDead);
  int nHD = GetHitDice(oDead);
  // * You can not lose a level with this respawning


  int nNewXP = nXP - nPenalty;

  SetXP(oDead, nNewXP);

}
void main()
{
  object oRespawner = GetLastRespawnButtonPresser();
  object oCorpse = GetLocalObject(oRespawner,"oOwner");

  DestroyObject(oCorpse);
  AssignCommand(oRespawner,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE01"))));
  ApplyPenalty(oRespawner);
  ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
  ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
  RemoveEffects(oRespawner);
  DeleteLocalInt(oRespawner,"oOwner");
  SetImmortal(oRespawner,FALSE);

}
Scaled
Все спасибо всем, теперь все удаляеться и новый вопрос)
Вот значит лежит на земле труп, я его беру игроком в свой инвентарь - он превращаеться из плэйсебла в итем. Теперь выкладывая - обратное превращение. НО!!!! Если теперь этот игрок воскреснет вдруг по средствам кнопки Респауна, то труп , выложеный мной, не исчезает. Почему? Я думал , думал, пришел к выводу, что нет на вновь созданом трупе той переменной, которая даеться при смерти. Что мне делать в это ситуации?
З.Ы.
Если не понятное что-то в вопросе - спрашивайте.
Batkom
Повесь на итем у хозяина трупа переменную со статусом жив\мертв, а затем трупу на хертбит, на спавн или на юз проверку этой самой переменной сидящей в предмете в кармане хозяина, если жив дестрой
-fenix-
Я вот не нашел анимации при которойбы чел махал руками, как маг, когда кастует что-то. У меня ущербная 1.30, все дело вней или этого вообще нет!

DEM
-fenix-, не пробовал поставить скрипт кастования? ВОт сам скрипт
Neverwinter Script Source
ActionCastFakeSpellAtObject();
ActionCastFakeSpellAtLocation();


Одно из двух..... biggrin.gif

Добавлено в [mergetime]1123778403[/mergetime]
Но возможно что вокруг чела будут летать те хре.... Ну корочи фигни smile.gif
Archangel
QUOTE
Я вот не нашел анимации при которойбы чел махал руками, как маг, когда кастует что-то. У меня ущербная 1.30, все дело вней или этого вообще нет!

Я пользуюсь анимацией "ANIMATION_FIREFORGET_VICTORY2". Смотрится неплохо. Можешь попробывать сам. wink.gif
DroWishSoul
Прошу прощенья, что суюсь в беседу yes.gif
У меня вопрос появился. Я написал 2 скрипта. Поставил их на OnDeath двух разных NPC. Суть скрипта проста. После смерти он проверяет, мертв ли второй объект, после чего идет действие.
Вот сам скрипт одного из NPC
Neverwinter Script Source
void main()
{
object oPC = GetLastKiller();
object oTag = GetObjectByTag("tag"); // второй объект
effect eCurse = EffectCurse(4, 4, 4, 4, 4, 4); // я выбрал первое попавшееся действие просто для првоерки скрипта

oPC = GetMaster(oPC);

if(!GetIsPC(oPC)) return;

if(!GetIsDead(oTag)) return;

ApplyEffectToObject(1, eCurse, oPC, 10.0);

}

Скрипт компилится, умирают оба объекта, но ничего не происходит. Не могу понять, в чем дело.
-fenix-
DroWishSoul
Тут ты смотрешь, кто убил твоего НПС
Neverwinter Script Source
object oPC = GetLastKiller();

А потом получаешь мастера убийцы, убийца всегда хенч?
Далее смотрешь является ли мастер PC, если нет, то скрипт не работает. Зачем все это?
Neverwinter Script Source
oPC = GetMaster(oPC);

if(!GetIsPC(oPC)) return;

Не знаю, что тебе на самом деле нужно, но вот один из скриптов. Работает на убийцу-PC.

Neverwinter Script Source
void main()
{
object oPC = GetLastKiller();
object oTag = GetObjectByTag("tag");
effect eCurse = EffectCurse(4, 4, 4, 4, 4, 4);

if(!GetIsPC(oPC)) return;

if(!GetIsDead(oTag)) return;

ApplyEffectToObject(1, eCurse, oPC, 10.0);
}
DroWishSoul
Я пробовал убирать oPC = GetMaster(oPC)
все равно не работает. Не знаю, почему. Может, я с эффектом наглючил?
Добавлено в [mergetime]1123834605[/mergetime]
Извиняюсь, все заработало. Спасибо.
Scaled
Мучил, мучил я систему смерть\воскрешение. Вот что получилось.

Создаем обьект - труп, обьект - сумочка

На труп в OnSpellCast(вродек так называеться)
Neverwinter Script Source
void main()
{

  if (GetResRef(OBJECT_SELF) != "pc_corpse") return;
  object oPC = GetLocalObject(OBJECT_SELF, GetName(oPC));
  if (oPC == OBJECT_INVALID) return;

  int nPenalty;
  int nSpell = GetLastSpell();
  if (nSpell == SPELL_RAISE_DEAD)
    nPenalty =100*GetHitDice(oPC);
  else if (nSpell==SPELL_RESURRECTION)
    nPenalty =50*GetHitDice(oPC);
  else return;


  AssignCommand(oPC, ClearAllActions(TRUE));
  AssignCommand(oPC, ActionJumpToLocation(GetLocation(OBJECT_SELF)));


  int nXP = GetXP(oPC);
  int nNewXP = nXP - nPenalty;
  SetXP(oPC, nNewXP);

  DeleteLocalObject(oPC,"oCorpse");
  DestroyObject(OBJECT_SELF, 1.0);
}


OnPlayerRespawn
Neverwinter Script Source
#include "nw_i0_plot"

void ApplyPenalty(object oDead)
{
  int nXP = GetXP(oDead);
  int nPenalty = 250 * GetHitDice(oDead);
  int nHD = GetHitDice(oDead);
  int nNewXP = nXP - nPenalty;
  SetXP(oDead, nNewXP);

}
void main()
{
  object oRespawner= GetLastRespawnButtonPresser();
  object oCorpse = GetObjectByTag("pc_corpse");
  if(GetLocalObject(oCorpse ,"oCorpse")==oRespawner)
    {
  DelayCommand(1.0,DestroyObject(oCorpse));
  AssignCommand(oRespawner,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE01"))));
  ApplyPenalty(oRespawner);
  ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
  ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
  RemoveEffects(oRespawner);
  DeleteLocalObject(oRespawner,"oCorpse");
  SetImmortal(oRespawner,FALSE);
    } }



OnPlayerDead
Neverwinter Script Source
void main()
{
object oPlayer = GetLastPlayerDied();
location lDiedHere = GetLocation(oPlayer);

string sHelpString="Вы мертвы, если желаете реинкарнироватьсЯ нажмите кнопку Респаун.";
DelayCommand(0.1,ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer));
DelayCommand(0.5,AssignCommand(oPlayer,JumpToLocation(GetLocation(GetObjectByTag("WP_RAISE")))));
object oCorpse = CreateObject(OBJECT_TYPE_PLACEABLE,"pc_corpse", lDiedHere,FALSE);
SetLocalObject(oCorpse, "oCorpse",oPlayer);
object oBag = CreateObject(OBJECT_TYPE_PLACEABLE,"pc_bag", lDiedHere,FALSE);
SetImmortal(oPlayer, TRUE);
int nGP = GetGold(oPlayer);
int i=0;
  while(i<14)
    {
    AssignCommand(oBag,ActionTakeItem(GetItemInSlot(i, oPlayer),oPlayer));
    i++;
        }

AssignCommand(oBag,TakeGoldFromCreature(nGP,oPlayer,FALSE));
DelayCommand(6.0,PopUpDeathGUIPanel (oPlayer, TRUE,TRUE,1, sHelpString));
}




Neverwinter Script Source
OnPlayerDyining
void DyingTicker(object oPC)
{
  int iHP=GetCurrentHitPoints(oPC);
  if (iHP>0) {
      RemoveEffect(oPC,EffectBlindness());
      DeleteLocalInt(oPC,"DyingDC");
      DeleteLocalInt(oPC,"STvsDeathSucceed");
      return;
  }
  int iDC;
  int iDam;
  int iSuc;
  if (iHP<-9) { ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(TRUE,TRUE),oPC); }
  else {
      iDam=d4();
      iDC=GetLocalInt(oPC,"DyingDC");
      if (FortitudeSave(oPC,iDC)>0) {
          iDam=iDam/2;
          iSuc=GetLocalInt(oPC,"STvsDeathSucceed")+1;
          SetLocalInt(oPC,"STvsDeathSucceed",iSuc);
          if (iSuc>2) {
              FloatingTextStringOnCreature("Кровотечение прекратилось",oPC,FALSE);
              return;
          }
      }
      AssignCommand(oPC,DelayCommand(6.0,DyingTicker(oPC)));
      ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(iDam), oPC);
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectBlindness(),oPC,6.0);
      SetLocalInt(oPC,"DyingDC",iDC+1);
  }
}

void main()
{
  object oPC=GetLastPlayerDying();
  if (!GetIsPC(oPC)) return;
  SetLocalInt(oPC,"DyingDC",15);
  SetLocalInt(oPC,"STvsDeathSucceed",0);
  FloatingTextStringOnCreature("У менЯ открылось кровотечение",oPC,FALSE);
  DyingTicker(oPC);
}



Я взял стандарные скрипты предложеные на WRG.RU на слоты OnPlayerDying и на OnSpellCast (на трупе)
pc_corpse - тег и ресреф трупа
pc_bag - тег и ресреф сумочки

В итоге что у меня вышло - После того как хиты персонажа падают за 0 - он теряет сознание и лежит без него пока хиты не упадут за -10. Дальше Смерть - перс переноситься в фугу.....Шмот и деньги сбрасываються в сумку, появляеться труп, через который можно воскресить персонажа. Воскрешение - через кнопку Респан - теряет опыт 250хЛевел. Через Заклы 50хЛевел или 100хЛевел.

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

Далее вопрос:

Я вот пытался сделать, чтобы при руп при нажатии на него выдавал инфу "кто покойник".
В голову не пришло более ничего только это
OnUsed
Neverwinter Script Source
void FRAZA(object oD)
{
object oPlayer =  GetLocalObject(oD, "oCorpse");
string nm = GetName(oPlayer);
string s1="Здесь лежит"+nm+"";
AssignCommand(oD,DelayCommand(1.0,SpeakString(s1)));
}
void main()
{
object oPC = GetLastUsedBy();
object oD =OBJECT_SELF;
FRAZA(oD);
}

Но он чего-то не фурычит когда игрок выходит с сервера...
Большая прозьба внимательно посмотреть все или даже опробывать - если есть ошибки сообщить.

DEM
А разьве когда лежит труп, ри направлении курсора на него, его имя не видно? swoon.gif Может посмотри смерть простых НеПиСей? ну или опять хенчманов? Когда их трупы валяються и направляешь на них курсор, их имя видно... скорее всего можно так сделать, но добавить уровень и т.д.
Scaled
Не я имею ввиду не когда курсор наводят, а когда нажимаешь на него..и перс подходит и взаимодействует. Должно вых строка "Имя" умершего. У меня получаеться, но когда игрок покидает шард то в место имени пустота.
-fenix-
Значит нужно имя в Базу данных сохранять, а когда чел опять конектится удалять.
Вот только я с БД не работал - пока и без них дел хватает.
Сам покопайся, уверен все поймешь wink.gif
dumbo
не нужна никакая база. просто нужно объект трупа обвесить переменными-параметрами игрока и потом брать имя(и остальное) из этих переменных. пример: добавить эту строку после создания объекта-трупа
Neverwinter Script Source
SetLocalString(oCorpse, "Name", GetName(oPlayer));
Scaled
О большое спасибо. Теперь все окей
DEM
вот вечная проблема... Это ДНЕВНИК ( не школьный). Какой скрипт добавляет в журнал записи, изменяет их и переносит (и соответствено изменяет) в раздел выполненых?
-fenix-
У меня есть 3 функции.

Neverwinter Script Source
AddJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE)


GetJournalQuestExperience(string szPlotID)



RemoveJournalQuestEntry(string szPlotID, object oCreature, int
bAllPartyMembers=TRUE, int bAllPlayers=FALSE)

Добавлено в [mergetime]1123946547[/mergetime]
Создай задание в мастере сюжета и посмотри появившиеся скрипты.
zmey
Тэ-э-экс! Хреново, что посты тю-тю... я их скопировать не успел... ежели у кого есь те страницы, киньте на мыло!

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

1. Как сделать, чобы хенчмен НЕ ВОССТАНАВЛИВАЛ жизнь при отдыхе, но ЗЕЛЬЯМИ нормально лечился (ну о-о-о-очень надо!)

2. у меня сингл. есть два модуля. мне нужно перенести локальную переменную из првого во второй. Помню, писали, что сохранять надо на вещах. А как? (пусть есть невыбрасываемая вещь, тег: "ТЕГ", рес реф: "ресреф". как на нее В ДИАЛОГЕ повесить локальную переменную Z=1, и как в другом модуле В ДИАЛОГЕ ее определять?) (тоже ну о-о-о-очень надо!)

3. как сделать, чтобы при использовании уникальной силы вещи:
а) открывался диалог
б)на ДРУГУЮ ВЕЩЬ вешалась локалка?

если можно, то подробно и с примерами, ведь это сложно...наверно.

и еще анимацию молнии из одного обьекта в другой, угу? crazy.gif
-fenix-
QUOTE (zmey @ Aug 16 2005, 10:18)
2. у меня сингл. есть два модуля. мне нужно перенести локальную переменную из првого во второй. Помню, писали, что сохранять надо на вещах. А как?

На диалоге в Соверешенные действия поставить установку переменной.
Вот функция.
Neverwinter Script Source
void main()
{
SetLocalInt(object oObject, string sVarName, int nValue);
}

object oObject - Объект на которм сохраняется переменная
string sVarName - имя переменной
int nValue - значение переменной

А в другом диалоге, на Текст появляется при проверить переменную.
Вот функция.
Neverwinter Script Source
int StartingConditional()
{
    if(GetLocalInt(object oObject, string sVarName) == 1)
    return TRUE;
    return FALSE;
}

object oObject - на коком объекте смотреть переменную
string sVarName - имя искомой переменной
1 - число которое нужно посмотреть(1, это для примера)

QUOTE (zmey @ Aug 16 2005, 10:18)
3. как сделать, чтобы при использовании уникальной силы вещи: а) открывался диалог б)на ДРУГУЮ ВЕЩЬ вешалась локалка?

а)
Для начала надо установить вещи уникальную силу, в ее св-вах.
Потом в св-вах модуля на OnActivateItem
Neverwinter Script Source
ActionStartConversation(object oObjectToConverseWith, string sDialogResRef="", int bPrivateConversation=FALSE, int bPlayHello=TRUE)

object oObjectToConverseWith - задает с кем будет идти разговор (ну конечно с вами)
string sDialogResRef - пишем в кавычках название разговорника pardon.gif
Если это значение не указано, то будет использован прикрепленный к объекту диалог.
int bPrivateConversation - приватный разговор (TRUE) или это слышат все (FALSE)
int bPlayHello - когда начинаешь разговор скажи привет (TRUE) или тупо промолчи (FALSE)
б) Как устанавливать локалки уже писал.
QUOTE (zmey @ Aug 16 2005, 10:18)
и еще анимацию молнии из одного обьекта в другой, угу?

Это не анимация, а эффект.
Neverwinter Script Source
ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)

int nDurationType - определяет, сколько этот эффект будет продолжаться :
DURATION_TYPE_INSTANT - мгновенно
DURATION_TYPE_PERMANENT - всегда
DURATION_TYPE_TEMPORARY - временно
effect eEffect - прмиеняемый эффект
object oTarget - объект, к оторому будет применяться эффект
float fDuration - длительность эффект (если в nDurationType стоит DURATION_TYPE_TEMPORARY)
тебе нужен наверно этот эффект: EffectVisualEffect(VFX_BEAM_LIGHTNING).
zmey
Fenix, а про хенчмена случаем не знаешь?

QUOTE
Neverwinter Script Source
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_BEAM_LIGHTNING), Тут на кого);

а ежели мне надобно, чтоба при использовании камня молния била из ВТОРОГО камня в ТРЕТИЙ? biggrin.gif



Добавлено в [mergetime]1124179572[/mergetime]
P.S. Ставлю хенчам стандарные скрипты (из Орд) они пока живые - нормальные. Помирают - осавляют юзабельный труп. Эо нормально. А вот если их воскрешаешь, то они за тобой бегают, но НЕ НАПАДАЮТ НА ВРАГА И СТАНОВЯТСЯ БЕССМЕРТНЫМИ. А (ВЫРЕЗАНО ЦЕНЗУРОЙ) мне нужны бессмертные хенчмены?


Добавлено в [mergetime]1124179852[/mergetime]
Не врублюсь, как сделать:
Идет бой, PC почи что убивает негодяя и тот начинает молить о пощаде. То есть, как запустить диалог, если у непися во время бос осталось , ну, скажем 25% жизни?

Если есть, то готовый скрипт с пояснениями, если нет, то образец с пояснениями.

(Еще Ян Амос Коменский говорил, что в обучении важна наглядность!!!)
Добавлено в [mergetime]1124180045[/mergetime]
Скрипт на повреждение PC, OK? Типа встал перс в триггер, его молнией с неба-(ВЫРЕЗАНО ЦЕНЗУРОЙ), и наносится повреждение в Х ЕЖ.
Добавлено в [mergetime]1124180169[/mergetime]
И еще: сть ли в природе хаки с:
1. примитивным огнестрельным оружием
2. ползающими тварями, типа наг и ормирр из POOL OF RADIANCE?
-fenix-
zmey, посмотри еще раз пост, я там кое что поправил.
QUOTE (zmey @ Aug 16 2005, 10:56)
а ежели мне надобно, чтоба при использовании камня молния била из ВТОРОГО камня в ТРЕТИЙ?

Смотря, что подразумевается под использованием?
Если просто клик, то скрипт ставешь на OnUsed (не забудь объект поставить используемым).
Но тогда нужно писать через AssignCommand.

Neverwinter Script Source
void main()
{
object oStone1 = GetObjectByTag("Таг первого камня");
object oStone2 = GetObjectByTag("Таг второго камня");
AssignCommand(oStone1, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_BEAM_LIGHTNING)), oStone2);
}
QUOTE (zmey @ Aug 16 2005, 10:56)
А вот если их воскрешаешь

А как ты их воскрешаешь?
zmey
Да-с. вопросов много. Как-никак неделю скриптить тренировался и вот вопрос № следующий. Не получилось написать скрипт, идея которого такая: При Юзаньи предмета во всех локах модуля, в WP_skel появляются скелеты.
Добавлено в [mergetime]1124180930[/mergetime]
Этим... как его там... Забыл блин название спелла. то ли воскрешение, то ли поднять мертвого... вроде воскрешение. Ну, в ордах жезлы воскрешения были. Вот таким и воскрешаю...
Добавлено в [mergetime]1124181035[/mergetime]
QUOTE
Смотря, что подразумевается под использованием?
Если просто клик, то скрипт ставешь на OnUsed (не забудь объект поставить используемым).
Но тогда нужно писать через AssignCommand.
Да...да...да...! Именно то, что надь... вроде. Тулсета нет под рукой проверить, но вроде оно!
Добавлено в [mergetime]1124181202[/mergetime]
как звать такую анимацию : непись медленно уходит вдаль и исчезает из поля зрения, его больше нет.
Добавлено в [mergetime]1124181441[/mergetime]
вопрос номер (ВЫРЕЗАНО ЦЕНЗУРОЙ) его знает какой: Как сделать, чтобы эффект при использовании уникальной силы накладывался случайным образом. Например, или каменная кожа, или проклятие, или повреждние персу на Х хр?
DEM
zmey
QUOTE
как звать такую анимацию : непись медленно уходит вдаль и исчезает из поля зрения, его больше нет.

Я бы отправил его в вэйпоинт коорый стоит далеко, а потом зделал бы прыжок в другую локу...
Aiwan
zmey посмотри раздел скриптов, базу скриптов вернее. ТАм я написал как сделать что бы НПС не умер а начал что-то.
-fenix-
QUOTE (zmey @ Aug 16 2005, 10:56)
Скрипт на повреждение PC, OK? Типа встал перс в триггер, его молнией с неба-(ВЫРЕЗАНО ЦЕНЗУРОЙ), и наносится повреждение в Х ЕЖ.

Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
effect eEffect = EffectVisualEffect(VFX_IMP_DOOM);
effect eDamage = EffectDamage(5, DAMAGE_TYPE_ELECTRICAL, DAMAGE_POWER_ENERGY);

ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
}

Скоро еще напишу smile.gif
Proydoha
У меня такие два вопроса:
1. Почему когда я делаю кастомные токены у меня в диалоге высвечиваеться только первый из нескольких.(Остальные <Унрекогнайзед Токен>). Из-за чего это может случаться?
2. Мне нужно генерировать случайные числа в пределах от -1 до 36. Я пробовал:
Neverwinter Script Source
iNumber=Random(37)-1;

Но почему-то всегда получаеться 10. Что делать? dntknw.gif
-fenix-
QUOTE (zmey @ Aug 16 2005, 11:26)
вопрос номер (ВЫРЕЗАНО ЦЕНЗУРОЙ) его знает какой: Как сделать, чтобы эффект при использовании уникальной силы накладывался случайным образом. Например, или каменная кожа, или проклятие, или повреждние персу на Х хр?

Как обычно, ставешь у объекта уникальную силу, зетем в Св-вах модуля на OnActivateItem скрипт.
Neverwinter Script Source
void main()
{
object oActivator = GetItemActivator();
object oActivated = GetItemActivated();
int iRandom = Random(3); // это рандомное число от 0 до 2
string sTag = GetTag(oActivated);

if (sTag == "таг предмета") // проверяем, кокой объект используется

switch(iRandom)
{
case 0: // если равно 0
    {
    // накладываем один эффект
    ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)
    break;
    }
case 1: // если равно 1
    {
    // накладываем другой эффект и т.д
    ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)
    break;
    }
case 2: // если равно 2
    {
    ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)
    break;
    }
}

}


Как сделать ущерб смотри в примере выше(с молнией)
.
QUOTE (Proydoha @ Aug 16 2005, 13:24)
Остальные <Унрекогнайзед Токен>

Чего? smile.gif
QUOTE (Proydoha @ Aug 16 2005, 13:24)
2. Мне нужно генерировать случайные числа в пределах от -1 до 36. Я пробовал:

Ну не знаю почему все время 10 dntknw.gif
А вообще через рэндом числа с минусом не генерируются. Т.к Он их генерирует от 0 до твоего числа -1.
Это значит, что random(3) сгенерирует от 0 до 2.
Еще, где ты эти числа используешь?
Скажем в switch могут быть только целые числа.
У меня if (iRandom == -1), реагировал на int iRandom = Random(2)-1.
Анамиэль
насколько я помню 1 часть НВН, бегая по тюрьме в поисках сбежавших существ,нарываешся на орка охранника,который после битвы меняет фракцию с враждебной на дружественную...
вопрос в том возможно ли ведение диалога с НПС враждебной фракции?(т.е. без смены)
-fenix-
QUOTE (Анамиэль @ Aug 16 2005, 17:15)
возможно ли ведение диалога с НПС враждебной фракции?(т.е. без смены)

Нет. Если он враждебный, то будет курсор атаки и через меню НПС ты с ним поговорить не сможешь.
DEM
Вот у меня вопрос... Ка зделать вид сражения двух воинов? Ну что бы они дрались, но не наносили повреждений.. black eye.gif
Dik Morris
1) Вариант:
Сделай им оружие которое не наносит повреждения.
2) Вариант:
Сделай их сюжетными (т.е бессмертными)
Archangel
QUOTE
Вот у меня вопрос... Ка зделать вид сражения двух воинов? Ну что бы они дрались, но не наносили повреждений..

Просто сделай обоих НПС бессмертными. Т.е. поставь галочку, в закладке св-в НПС "Улучшенный", на "бессмертный".
Добавлено в [mergetime]1124214104[/mergetime]
CODE
Aug 16 2005, 23:39

CODE
Aug 16 2005, 23:40

Упс. Немного опоздал...
Proydoha
Наверное я плохо описал в чем суть дела...
1.Скриптовая команда
Neverwinter Script Source
SetCustomToken(номер токена, стринг)

позволяет вставлять в диалоги различные, меняющиеся в зависимости от стринга, фрагменты. Так вот у меня при использовании нескольких таких токенов в диалоге отображаеться только первый, а вместо остальных <UNRECOGNIZED TOKEN>. Из-за чего такое может быть?
2. Команда
Neverwinter Script Source
Random(38)

генерирует числа от 0 до 37. Следовательно если сделать так:
Neverwinter Script Source
iNumber=Random(38)-1;

То должно выйти что переменной iNumber должны присваиваться случайные числа от -1 до 36. Почему все время получаеться "10"? Может есть какие другие методы генерации случайных чисел в таком диапазоне?
dumbo
Proydoha
1. приведи кусок скрипта, а так же расскажи где и в какой момент ты вызываешь этот скрипт. по идее тут нечему просто "ломаться" wink.gif
2. варианта два: первый - у тебя лохматая версия, в которой могли быть проблемы с рандомизацией сид-кодов. второй - у тебя где-то написано "...if(iNumber=10)..."
Proydoha
1.А это не может происходить из-за sString=""; ?
2.А что? if(iNumber=10) это так фатально? Да у меня есть такой кусок в скрипте, но ведь это условие?
-fenix-
QUOTE (Proydoha @ Aug 17 2005, 10:10)
2.А что? if(iNumber=10) это так фатально? Да у меня есть такой кусок в скрипте, но ведь это условие?

Смысл совсем другой!
"=" - это оператор присваивания, присваивает левой части значение правой. А равно это "==".
DEM
э-Э-Э-Э-э-э-э, вот у меня такой вопросик biggrin.gif КОторый кроме как в "ВОПРОСЫ НОВИЧКОВ" нельзя поместить biggrin.gif Как зделат что бы НеПиСь выполняла сразу несколько действий оновремено? Пробовал зделать так:
Neverwinter Script Source
DelayCommand(2.5, AssignCommand(oJREC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL))); // Жрец машет руками, как бы сердитсья
DelayCommand(2.5, AssignCommand(oJREC, ActionSpeakString("Деритесь! Вы же войны!!!"))); // Жрец говорит

И так:
Neverwinter Script Source
DelayCommand(2.5, AssignCommand(oJREC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL))); // Жрец машет руками, как бы сердитсья
DelayCommand(2.5, AssignCommand(oJREC, SpeakString("Деритесь! Вы же войны!!!"))); // Жрец говорит


Но ничего... this.gif black eye.gif
-fenix-
DEM, второй вариант рабочий (нужно через SpeakString).
Наверное у тебя есть еще действия, которые мешают(мож скрипт покажешь).

Vitalist
Можно ли в диалоге сделать так, чтобы у перса сняли XP'у?
baskan
Вставляеш в ячейку Action Taken(выполнить действие)

Neverwinter Script Source
void main()
{
  GiveXPToCreature(GetPCSpeaker(), -количество опыта);
}
Aiwan
Neverwinter Script Source
DelayCommand(2.5, AssignCommand(oJREC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL)));
DelayCommand(3.5, AssignCommand(oJREC, SpeakString("Деритесь! Вы же войны!!!"))); // Жрец говорит

Задержку второй строки увеличь. Тогда первое действо начнется, второе чуток попозже, как раз будет реально.
Vitalist
Не, мне надо чтобы ЗАБРАЛИ. Такое можно?
-fenix-
QUOTE (Vitalist @ Aug 17 2005, 18:54)
Не, мне надо чтобы ЗАБРАЛИ. Такое можно?

Функции не видел, но наверное можно с помощью
Neverwinter Script Source
int GetXP(object oCreature) // получить ко-во опыта
void SetXP(object oCreature, int nXpAmount) // установить опыт

С помощью GetXP получаешь опыт, затем уменьшаешь его на нужное кол-во и спомощью SetXP устанавливаешь его.
QUOTE (Aiwan @ Aug 17 2005, 18:15)
Задержку второй строки увеличь. Тогда первое действо начнется, второе чуток попозже, как раз будет реально.

А почему так, у меня в одно время и все нормально.?
Valleo
Думаю лучше так:
Neverwinter Script Source
void main()
{
  SetXP(GetPCSpeaker(), GetXP(GetPCSpeaker())-(нужное_колво_опыта_для_снятия));
}
Aiwan
QUOTE (-fenix- @ Aug 17 2005, 22:18)
А почему так, у меня в одно время и все нормально.?

Видишь ли, много задачь в одно время могут порушить цепь или сработать неверно. рекомендую никогда не юзать одно время много раз. Лучше измени на пол секунды, вернее будет.
Proydoha
Исправил с = на == и все равно-таки получаеться 10! Может есть какие другие команды для генерации случайных чисел? Помниться в Turbo Pascal была команда Randomize без нее программа все время генерировала одни и те же случайные числа. Может и тут у меня что-то такое?
Aiwan
Proydoha рандом привязан к локации и тайлам и прочему. ЕСли локи одинаковые и маленькие то будут одни и те же цифры. Я это уже съел. Читай лексикон.
Proydoha
Понял. Буду искать другие методы.
dumbo
Aiwan
я тоже прочитал плачевные нотайсы к рандому, но смею тебя заверить: в текущей версии ничего подобного не наблюдается. даже специально проверил - создал две пустые локи 2х2, переход между ними и default.nss[SendMessageToPC(OBJECT_SELF, IntToString(Random(50)));] - нормальный рандом. никаких повторов последовательностей нет. а товарищу Proydoha еще раз посоветую показать скрипт - судя по ошибкам, там им есть где развернуться...
Vitalist
Если пользоваться стандартным скриптом на атаку, то атакуют все из этой фракции. А что нужно, чтобы только конкретно говорящий атаковал (после диалога), а остальные не нападали?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.