-fenix-
Aug 10 2005, 16:33
Не знаю нужно это уже или нет

, но пусть будет, мож кому прегодиться. Все работает!
Теги и ресрефы везде конечно свои
На 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
Aug 11 2005, 00:13
Все спасибо всем, теперь все удаляеться и новый вопрос)
Вот значит лежит на земле труп, я его беру игроком в свой инвентарь - он превращаеться из плэйсебла в итем. Теперь выкладывая - обратное превращение. НО!!!! Если теперь этот игрок воскреснет вдруг по средствам кнопки Респауна, то труп , выложеный мной, не исчезает. Почему? Я думал , думал, пришел к выводу, что нет на вновь созданом трупе той переменной, которая даеться при смерти. Что мне делать в это ситуации?
З.Ы.
Если не понятное что-то в вопросе - спрашивайте.
Batkom
Aug 11 2005, 01:16
Повесь на итем у хозяина трупа переменную со статусом жив\мертв, а затем трупу на хертбит, на спавн или на юз проверку этой самой переменной сидящей в предмете в кармане хозяина, если жив дестрой
-fenix-
Aug 11 2005, 19:36
Я вот не нашел анимации при которойбы чел махал руками, как маг, когда кастует что-то. У меня ущербная 1.30, все дело вней или этого вообще нет!
-fenix-, не пробовал поставить скрипт кастования? ВОт сам скрипт
Neverwinter Script Source |
ActionCastFakeSpellAtObject(); ActionCastFakeSpellAtLocation(); |
Одно из двух.....
Добавлено в [mergetime]1123778403[/mergetime] Но возможно что вокруг чела будут летать те хре.... Ну корочи фигни
Archangel
Aug 11 2005, 20:09
QUOTE |
Я вот не нашел анимации при которойбы чел махал руками, как маг, когда кастует что-то. У меня ущербная 1.30, все дело вней или этого вообще нет! |
Я пользуюсь анимацией "ANIMATION_FIREFORGET_VICTORY2". Смотрится неплохо. Можешь попробывать сам.
DroWishSoul
Aug 12 2005, 07:56
Прошу прощенья, что суюсь в беседу
У меня вопрос появился. Я написал 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-
Aug 12 2005, 08:44
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
Aug 12 2005, 11:01
Я пробовал убирать oPC = GetMaster(oPC)
все равно не работает. Не знаю, почему. Может, я с эффектом наглючил?
Добавлено в [mergetime]1123834605[/mergetime]
Извиняюсь, все заработало. Спасибо.
Scaled
Aug 12 2005, 13:38
Мучил, мучил я систему смерть\воскрешение. Вот что получилось.
Создаем обьект - труп, обьект - сумочка
На труп в 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); } |
Но он чего-то не фурычит когда игрок выходит с сервера...
Большая прозьба внимательно посмотреть все или даже опробывать - если есть ошибки сообщить.
А разьве когда лежит труп, ри направлении курсора на него, его имя не видно?

Может посмотри смерть простых НеПиСей? ну или опять хенчманов? Когда их трупы валяються и направляешь на них курсор, их имя видно... скорее всего можно так сделать, но добавить уровень и т.д.
Scaled
Aug 12 2005, 16:31
Не я имею ввиду не когда курсор наводят, а когда нажимаешь на него..и перс подходит и взаимодействует. Должно вых строка "Имя" умершего. У меня получаеться, но когда игрок покидает шард то в место имени пустота.
-fenix-
Aug 12 2005, 18:19
Значит нужно имя в Базу данных сохранять, а когда чел опять конектится удалять.
Вот только я с БД не работал - пока и без них дел хватает.
Сам покопайся, уверен все поймешь
не нужна никакая база. просто нужно объект трупа обвесить переменными-параметрами игрока и потом брать имя(и остальное) из этих переменных. пример: добавить эту строку после создания объекта-трупа
Neverwinter Script Source |
SetLocalString(oCorpse, "Name", GetName(oPlayer)); |
Scaled
Aug 13 2005, 00:15
О большое спасибо. Теперь все окей
вот вечная проблема... Это ДНЕВНИК ( не школьный). Какой скрипт добавляет в журнал записи, изменяет их и переносит (и соответствено изменяет) в раздел выполненых?
-fenix-
Aug 13 2005, 18:11
У меня есть 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]
Создай задание в мастере сюжета и посмотри появившиеся скрипты.
Тэ-э-экс! Хреново, что посты тю-тю... я их скопировать не успел... ежели у кого есь те страницы, киньте на мыло!
А ежели нет ни у кого, то извиняюсь, но снова е же вопросы задам:
1. Как сделать, чобы хенчмен НЕ ВОССТАНАВЛИВАЛ жизнь при отдыхе, но ЗЕЛЬЯМИ нормально лечился (ну о-о-о-очень надо!)
2. у меня сингл. есть два модуля. мне нужно перенести локальную переменную из првого во второй. Помню, писали, что сохранять надо на вещах. А как? (пусть есть невыбрасываемая вещь, тег: "ТЕГ", рес реф: "ресреф". как на нее В ДИАЛОГЕ повесить локальную переменную Z=1, и как в другом модуле В ДИАЛОГЕ ее определять?) (тоже ну о-о-о-очень надо!)
3. как сделать, чтобы при использовании уникальной силы вещи:
а) открывался диалог
б)на ДРУГУЮ ВЕЩЬ вешалась локалка?
если можно, то подробно и с примерами, ведь это сложно...наверно.
и еще анимацию молнии из одного обьекта в другой, угу?
-fenix-
Aug 16 2005, 10:48
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 - пишем в кавычках название разговорника
Если это значение не указано, то будет использован прикрепленный к объекту диалог.
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).
Fenix, а про хенчмена случаем не знаешь?
QUOTE |
Neverwinter Script Source ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_BEAM_LIGHTNING), Тут на кого); |
а ежели мне надобно, чтоба при использовании камня молния била из ВТОРОГО камня в ТРЕТИЙ?
Добавлено в [mergetime]1124179572[/mergetime] P.S. Ставлю хенчам стандарные скрипты (из Орд) они пока живые - нормальные. Помирают - осавляют юзабельный труп. Эо нормально. А вот если их воскрешаешь, то они за тобой бегают, но НЕ НАПАДАЮТ НА ВРАГА И СТАНОВЯТСЯ БЕССМЕРТНЫМИ. А (ВЫРЕЗАНО ЦЕНЗУРОЙ) мне нужны бессмертные хенчмены?
Добавлено в [mergetime]1124179852[/mergetime] Не врублюсь, как сделать:
Идет бой, PC почи что убивает негодяя и тот начинает молить о пощаде. То есть, как запустить диалог, если у непися во время бос осталось , ну, скажем 25% жизни?
Если есть, то готовый скрипт с пояснениями, если нет, то образец с пояснениями.
(Еще Ян Амос Коменский говорил, что в обучении важна наглядность!!!)
Добавлено в [mergetime]1124180045[/mergetime] Скрипт на повреждение PC, OK? Типа встал перс в триггер, его молнией с неба-(ВЫРЕЗАНО ЦЕНЗУРОЙ), и наносится повреждение в Х ЕЖ.
Добавлено в [mergetime]1124180169[/mergetime] И еще: сть ли в природе хаки с:
1. примитивным огнестрельным оружием
2. ползающими тварями, типа наг и ормирр из POOL OF RADIANCE?
-fenix-
Aug 16 2005, 11:23
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) |
А вот если их воскрешаешь |
А как ты их воскрешаешь?
Да-с. вопросов много. Как-никак неделю скриптить тренировался и вот вопрос № следующий. Не получилось написать скрипт, идея которого такая: При Юзаньи предмета во всех локах модуля, в WP_skel появляются скелеты.
Добавлено в [mergetime]1124180930[/mergetime]
Этим... как его там... Забыл блин название спелла. то ли воскрешение, то ли поднять мертвого... вроде воскрешение. Ну, в ордах жезлы воскрешения были. Вот таким и воскрешаю...
Добавлено в [mergetime]1124181035[/mergetime]
QUOTE |
Смотря, что подразумевается под использованием? Если просто клик, то скрипт ставешь на OnUsed (не забудь объект поставить используемым). Но тогда нужно писать через AssignCommand.
|
Да...да...да...! Именно то, что надь... вроде. Тулсета нет под рукой проверить, но вроде оно!
Добавлено в [mergetime]1124181202[/mergetime]
как звать такую анимацию : непись медленно уходит вдаль и исчезает из поля зрения, его больше нет.
Добавлено в [mergetime]1124181441[/mergetime]
вопрос номер (ВЫРЕЗАНО ЦЕНЗУРОЙ) его знает какой: Как сделать, чтобы эффект при использовании уникальной силы накладывался случайным образом. Например, или каменная кожа, или проклятие, или повреждние персу на Х хр?
zmey
QUOTE |
как звать такую анимацию : непись медленно уходит вдаль и исчезает из поля зрения, его больше нет. |
Я бы отправил его в вэйпоинт коорый стоит далеко, а потом зделал бы прыжок в другую локу...
zmey посмотри раздел скриптов, базу скриптов вернее. ТАм я написал как сделать что бы НПС не умер а начал что-то.
-fenix-
Aug 16 2005, 12:09
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); } |
Скоро еще напишу
Proydoha
Aug 16 2005, 13:24
У меня такие два вопроса:
1. Почему когда я делаю кастомные токены у меня в диалоге высвечиваеться только первый из нескольких.(Остальные <Унрекогнайзед Токен>). Из-за чего это может случаться?
2. Мне нужно генерировать случайные числа в пределах от -1 до 36. Я пробовал:
Neverwinter Script Source |
iNumber=Random(37)-1; |
Но почему-то всегда получаеться 10. Что делать?
-fenix-
Aug 16 2005, 14:29
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) |
Остальные <Унрекогнайзед Токен> |
Чего?
QUOTE (Proydoha @ Aug 16 2005, 13:24) |
2. Мне нужно генерировать случайные числа в пределах от -1 до 36. Я пробовал: |
Ну не знаю почему все время 10
А вообще через рэндом числа с минусом не генерируются. Т.к Он их генерирует от 0 до твоего числа -1.
Это значит, что random(3) сгенерирует от 0 до 2.
Еще, где ты эти числа используешь?
Скажем в switch могут быть только целые числа.
У меня if (iRandom == -1), реагировал на int iRandom = Random(2)-1.
Анамиэль
Aug 16 2005, 17:15
насколько я помню 1 часть НВН, бегая по тюрьме в поисках сбежавших существ,нарываешся на орка охранника,который после битвы меняет фракцию с враждебной на дружественную...
вопрос в том возможно ли ведение диалога с НПС враждебной фракции?(т.е. без смены)
-fenix-
Aug 16 2005, 17:36
QUOTE (Анамиэль @ Aug 16 2005, 17:15) |
возможно ли ведение диалога с НПС враждебной фракции?(т.е. без смены) |
Нет. Если он враждебный, то будет курсор атаки и через меню НПС ты с ним поговорить не сможешь.
Вот у меня вопрос... Ка зделать вид сражения двух воинов? Ну что бы они дрались, но не наносили повреждений..
Dik Morris
Aug 16 2005, 20:39
1) Вариант:
Сделай им оружие которое не наносит повреждения.
2) Вариант:
Сделай их сюжетными (т.е бессмертными)
Archangel
Aug 16 2005, 20:40
QUOTE |
Вот у меня вопрос... Ка зделать вид сражения двух воинов? Ну что бы они дрались, но не наносили повреждений.. |
Просто сделай обоих НПС бессмертными. Т.е. поставь галочку, в закладке св-в НПС "Улучшенный", на "бессмертный".
Добавлено в [mergetime]1124214104[/mergetime]
Упс. Немного опоздал...
Proydoha
Aug 16 2005, 22:34
Наверное я плохо описал в чем суть дела...
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"? Может есть какие другие методы генерации случайных чисел в таком диапазоне?
Proydoha1. приведи кусок скрипта, а так же расскажи где и в какой момент ты вызываешь этот скрипт. по идее тут нечему просто "ломаться"

2. варианта два: первый - у тебя лохматая версия, в которой могли быть проблемы с рандомизацией сид-кодов. второй - у тебя где-то написано "...if(iNumber=10)..."
Proydoha
Aug 17 2005, 10:10
1.А это не может происходить из-за sString=""; ?
2.А что? if(iNumber=10) это так фатально? Да у меня есть такой кусок в скрипте, но ведь это условие?
-fenix-
Aug 17 2005, 12:13
QUOTE (Proydoha @ Aug 17 2005, 10:10) |
2.А что? if(iNumber=10) это так фатально? Да у меня есть такой кусок в скрипте, но ведь это условие? |
Смысл совсем другой!
"=" - это оператор присваивания, присваивает левой части значение правой. А равно это "==".
э-Э-Э-Э-э-э-э, вот у меня такой вопросик

КОторый кроме как в "ВОПРОСЫ НОВИЧКОВ" нельзя поместить

Как зделат что бы НеПиСь выполняла сразу несколько действий оновремено? Пробовал зделать так:
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("Деритесь! Вы же войны!!!"))); // Жрец говорит |
Но ничего...
-fenix-
Aug 17 2005, 13:19
DEM, второй вариант рабочий (нужно через SpeakString).
Наверное у тебя есть еще действия, которые мешают(мож скрипт покажешь).
Vitalist
Aug 17 2005, 17:09
Можно ли в диалоге сделать так, чтобы у перса сняли XP'у?
baskan
Aug 17 2005, 17:30
Вставляеш в ячейку Action Taken(выполнить действие)
Neverwinter Script Source |
void main() { GiveXPToCreature(GetPCSpeaker(), -количество опыта); } |
Neverwinter Script Source |
DelayCommand(2.5, AssignCommand(oJREC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFUL))); DelayCommand(3.5, AssignCommand(oJREC, SpeakString("Деритесь! Вы же войны!!!"))); // Жрец говорит |
Задержку второй строки увеличь. Тогда первое действо начнется, второе чуток попозже, как раз будет реально.
Vitalist
Aug 17 2005, 18:54
Не, мне надо чтобы ЗАБРАЛИ. Такое можно?
-fenix-
Aug 17 2005, 19:18
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
Aug 17 2005, 19:26
Думаю лучше так:
Neverwinter Script Source |
void main() { SetXP(GetPCSpeaker(), GetXP(GetPCSpeaker())-(нужное_колво_опыта_для_снятия)); } |
QUOTE (-fenix- @ Aug 17 2005, 22:18) |
А почему так, у меня в одно время и все нормально.? |
Видишь ли, много задачь в одно время могут порушить цепь или сработать неверно. рекомендую никогда не юзать одно время много раз. Лучше измени на пол секунды, вернее будет.
Proydoha
Aug 17 2005, 21:25
Исправил с = на == и все равно-таки получаеться 10! Может есть какие другие команды для генерации случайных чисел? Помниться в Turbo Pascal была команда Randomize без нее программа все время генерировала одни и те же случайные числа. Может и тут у меня что-то такое?
Proydoha рандом привязан к локации и тайлам и прочему. ЕСли локи одинаковые и маленькие то будут одни и те же цифры. Я это уже съел. Читай лексикон.
Proydoha
Aug 17 2005, 22:29
Понял. Буду искать другие методы.
Aiwan
я тоже прочитал плачевные нотайсы к рандому, но смею тебя заверить: в текущей версии ничего подобного не наблюдается. даже специально проверил - создал две пустые локи 2х2, переход между ними и default.nss[SendMessageToPC(OBJECT_SELF, IntToString(Random(50)));] - нормальный рандом. никаких повторов последовательностей нет. а товарищу Proydoha еще раз посоветую показать скрипт - судя по ошибкам, там им есть где развернуться...
Vitalist
Aug 18 2005, 12:04
Если пользоваться стандартным скриптом на атаку, то атакуют все из этой фракции. А что нужно, чтобы только конкретно говорящий атаковал (после диалога), а остальные не нападали?