QUOTE |
...Из него выпадает мешок с лутом. Этот мешок будет иметь Таг "BodyBag..." |
Neverwinter Script Source |
object oBag = GetFirstObjectInArea(); while (GetIsObjectValid(oBag)) { if (GetHasInventory(oBag) && GetTag(oBag)=="BodyBag") { object oItem = GetFirstItemInInventory(oBag); while (GetIsObjectValid(oItem)) { DestroyObject(oItem); oItem = GetNextItemInInventory(oBag); } //DelayCommand(3.0, DestroyObject(oBag)); } oBag = GetNextObjectInArea(); } |
QUOTE (dumbo @ May 26 2005, 04:37) |
Лито 1. тебя погубят пиво, сигареты, и безответственность в расставлении отступов! ![]() ![]() |
Neverwinter Script Source |
|| (GetObjectType(oDestr) == 64 && GetTag(oDestr) == "BodyBag")) |
QUOTE (Aiwan @ May 27 2005, 15:16) |
dumbo ты знаешь, я чистил лут в мешках, но что то не работало |
Neverwinter Script Source |
DoMissileStorm |
Neverwinter Script Source |
void DoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE) |
Neverwinter Script Source |
DoMissileStorm(2, 20, SPELL_ISAACS_GREATER_MISSILE_STORM,VFX_IMP_MIRV,VFX_IMP_MAGBLUE,DAMAGE_TYPE_MAGICAL,FALSE,TRUE); |
QUOTE (dumbo @ May 28 2005, 08:49) |
Лито компилится без проблем. видимо, до тебя уже кто-то что-то подправил... |
QUOTE |
в свойствах НПС поставь immortale |
QUOTE (Мефистофель @ May 28 2005, 19:49) |
Lex Ваш Скрипт про скелетообразную смерть неработает |
QUOTE (Мефистофель @ May 28 2005, 19:49) |
в свойствах НПС поставь immortale |
QUOTE (Мефистофель @ May 28 2005, 19:49) |
можно узнать как это сделать? |
QUOTE |
Свойства создания - закладка advansed - флаг immortale (там всего 5 флажков, найти не проблема) |
Neverwinter Script Source |
//* Array Functions void SetLokalArrayString (object oidObject, string sVarName, int nVarNum, string nValue); string GetLocalArrayString (object oidObject, string sVarName, int nVarNum); void SetLocalArrayInt (object oidObject, string sVarName, int nVarName, int nValue); int GetLocalArrayInt (object oidObject, string sVarName, int nVarName); //* Lab Functions void CreateLabItem (int nSpellID); int nNumberOfCombos = 5; void BadResult () { SpeakString ("Bad Result!!!"); object oTarget = GetLastSpellCaster (); int nDamage = d20*2; effect eVis = EffectVisualEffect (VFX_IMP_FLAME_S); effect eFire = EffectDamage (nDamage, DAMAGE_TYPE_FIRE); DelayCommand (0.6,ApplyEffectToObject (DURATION_TYPE_INSTANT, eFire, oTarget)); DelayCommand (0.6,ApplyEffectToObject (DURATION_TYPE_INSTANT, eVis, oTarget)); } void SetupLab () { SetLocalString (GetModule(), "NW_MYCHESTTAG", "M3Q1LABCHEST"); //* M3Q1LABCHEST - тег сундука с ингридиентами int nComboNumber = 1; for (nComboNumber = 1; nComboNumber <= nNumberOfCombos; nComboNumber++) { switch (nComboNumber) { case 1: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MELFS_ACID_ARROW); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC09"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MRING004); break; case 2: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MAGEARMOR); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC10"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MNECK015); break; case 3: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_ENERVATION); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC11"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC08"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, M3Q1A09LABROBE); break; case 4: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_FEEBLEMIND); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_WMGST005); break; case 5: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_STONESKIN); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC14"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MBOOTS004); break; } } } int GetSpellPosition (int nSpellID) { int i; int nMatch = -1; for (i = 1; i <= nNumberOfCombos; i++) { if (GetLocalArrayInt(OBJECT_SELF, "NW_COMBO_SPELL", i) == nSpellID) { nMatch = i; } } return nMatch; } int GetCombo (int SpellID) { string sReagent1, sReagent2; object oItem = GetFirstItemInInventory (); int i = 0; int nArrayPosition = -1; object oDeleteItem1, oDeleteItem2; while (bValid == TRUE) { i = i + 1; if (i == 1) { sReagent1 = GetTag (oItem); oDeleteItem1 = oItem; } if (i == 2) { sReagent2 = GetTag (oItem); oDeleteItem2 = oItem; } oItem = GetNextItemInInventory (); bValid = GetIsObjectValid (oItem); if (i>2) bValid = FALSE; } if ((i<=0)||(i>=3)) { nArrayPosition = -1; } else { nArrayPosition = GetSpellPosition (nSpellID); if (nArrayPosition != -1) { string sArrayReagent1 = GetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nArrayPosition); string sArrayReagent2 = GetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nArrayPosition); if ((sArrayReagent1 == sReagent1 || sArrayReagent1 == sReagent2) && (sArrayReagent2 == sReagent1 || sArrayReagent2 == sReagent2)) { DestroyObject (oDeleteItem1); DestroyObject (oDeleteItem2); return nArrayPosition; } else { nArrayPosition = -1; } } } return nArrayPosition; } void CreateLabItem (int nSpellID) { int nCombo = GetCombo (nSpellID); string sItem = GetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nCombo); if (sItem == "") { nCombo = -1; } if (nCombo != -1) { SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nCombo, ""); CreateItemOnObject (sItem); ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectVisualEffect (VFX_IMP_MAGICAL_VISION), GetLastSpellCaster()); } else { BadResult (); } } string GetLacalArrayString (object oidObject, string sVarName, int nVarNum) { string sFullVarName = sVarName + IntToString (nVarNum); return GetLocalString (oidObject, sFullVarName); } void SetLacalArrayString (object oidObject, string sVarName, int nVarNum, string nValue) { string sFullVarName = sVarName + IntToString (nVarNum); SetLocalString (oidObject, sFullVarName, nValue); } int GetLacalArrayInt (object oidObject, string sVarName, int nVarNum) { string sFullVarName = sVarName + IntToString (nVarNum); return GetLocalInt (oidObject, sFullVarName); } void SetLacalArrayInt (object oidObject, string sVarName, int nVarNum, int nValue) { string sFullVarName = sVarName + IntToString (nVarNum); SetLocalString (oidObject, sFullVarName, nValue); } |
Neverwinter Script Source |
int GetCombo (int SpellID) { string sReagent1, sReagent2; |
QUOTE |
Я переписал скрипт на 4 ингридиента, которые ложатся в сундук. |
QUOTE (Lex @ May 20 2005, 22:22) |
Через стоимость вещи вроде можно определить уровень. Где-то кто-то расписывал табличку такую. Сравнивай потом с уровнем игрока и все. |
QUOTE |
Archangel, есть идея, ставь на хартбит игрока или модуля скрипт который будет проверять время суток(день-ночь). Если ночь, то начинается диалог(который будет за табличку). Ну еще сделай локалку чтобы ночью диалог не начинался каждые 6 секунд |
QUOTE |
2 Архангел. Табличку кроме панели смерти прилепить нельзя. |
QUOTE |
Я выложил вариант с двумя ингридиентами так как он проще. Но и в не мчто-то не работает. Функция SetupLab () создает своебразный массив по номеру комбинации. Допустим если было кастованр заклинание из первой комбинации, то имеем в переменной nComboNumber = 1. А в массиве под этим номером уже читаем сами ингридиенты и то что должно получиться. mamuc в каком именно цикле for? |
Neverwinter Script Source |
void SetupLab (int nComboNumber) { SetLocalString (GetModule(), "NW_MYCHESTTAG", "M3Q1LABCHEST"); //* M3Q1LABCHEST - тег сундука с ингридиентами switch (nComboNumber) { case 1: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MELFS_ACID_ARROW); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC09"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MRING004); break; case 2: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_MAGEARMOR); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC12"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC10"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MNECK015); break; case 3: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_ENERVATION); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC11"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC08"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, M3Q1A09LABROBE); break; case 4: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_FEEBLEMIND); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_WMGST005); break; case 5: SetLocalArrayInt (OBJECT_SELF, "NW_COMBO_SPELL", nComboNumber, SPELL_STONESKIN); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT1", nComboNumber, "NW_IT_MSMLMISC14"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REAGENT2", nComboNumber, "NW_IT_MSMLMISC06"); SetLocalArrayString (OBJECT_SELF, "NW_COMBO_REWARD", nComboNumber, NW_IT_MBOOTS004); break; } } |
Neverwinter Script Source |
struct stRec { int spell; string req1; string req2; string rez; }; struct stRec SetupLab(int nComboNumber) { struct stRec stR; if (!nComboNumber) return stR; switch (nComboNumber) { case 1: stR.spell = SPELL_MELFS_ACID_ARROW; stR.req1 = "NW_IT_MSMLMISC12"; stR.req2 = "NW_IT_MSMLMISC09"; stR.rez = "****"; // kstati v sozdanii rezultata nuzhen resref, a ne tag itema // ( i resref obichno pishetsa strokovimi bukvami) break; case 2: stR.spell = SPELL_MAGEARMOR; stR.req1 = "NW_IT_MSMLMISC12"; stR.req2 = "NW_IT_MSMLMISC10"; stR.rez = "****"; break; // i tak dalee } return stR; } |
QUOTE (Лито @ May 30 2005, 14:18) | ||
Где именно? Через поиск ничего не нашел. ![]() |
Neverwinter Script Source |
void Read2DA() { int nRow; string sDA; // можно на модуль, можно на плэйс какой-нибудь... object oStore = GetModule(); for (nRow = 0; nRow < 60; nRow++) { sDA = Get2DAString("itemvalue", "MAXSINGLEITEMVALUE", nRow); if (sDA == "") break; SetLocalInt(oStore, "ILR_"+IntToString(nRow+1), StringToInt(sDA)); } } int GetILR(object oItem) { object oStore = GetModule(); int bIdentified = GetIdentified(oItem); if (!bIdentified) SetIdentified(oItem, TRUE); int nGP = GetGoldPieceValue(oItem); SetIdentified(oItem, bIdentified); int nLevel = 1; while (nLevel < 60 && GetLocalInt(oStore, "ILR_"+IntToString(nLevel)) < nGP) nLevel++; return nLevel; } |
Neverwinter Script Source |
#include "dmb_inc_ilr" void main() { Read2DA(); ... |
Neverwinter Script Source |
#include "dmb_inc_ilr" void main() { object oPC = GetPCItemLastEquippedBy(); object oItem = GetPCItemLastEquipped(); int nLevel = GetILR(oItem); if (nLevel > GetHitDice(oPC)) { SendMessageToPC(oPC, "Для ношения этой вещи требуется "+ IntToString(nLevel)+" уровень"); // закрываем окно инвентаря, ибо его плющит... OpenInventory(oPC, oPC); OpenInventory(oPC, oPC); AssignCommand(oPC, ActionUnequipItem(oItem)); return; } ... |
QUOTE (dumbo @ May 31 2005, 13:28) |
DBColl по spell-hook'ам - ТУТ основная зависимость скриптов спеллов от 2да'х - в spells.2da в колонке ImpactScript прописаны их имена..или ты про что-то другое? |
QUOTE (Мефистофель @ May 31 2005, 01:21) |
Спасибо Лекс, но возникли некоторые неполадки, дело в том что скелет, после смерти непися, долго появляется, и эффект смери не работает, скелет нападает на ПК. |
QUOTE |
так тебе это и надо было, нет? Или надо чтобы скелет на земле валялся? Тогда при его создании ставь SetIsDestroyable(FALSE,FALSE); и накладывай эффект смерти EffectDeath() через ApplyEffectToObject() |
Neverwinter Script Source |
void main() { object oNPC = OBJECT_SELF; if (GetLocalInt(oNPC,"DEATH")) return; SetLocalInt(oNPC,"DEATH",TRUE); ClearAllActions(TRUE); SetImmortal(oNPC,TRUE); SetIsDestroyable(FALSE); SetAILevel(oNPC, AI_LEVEL_VERY_LOW); // stop nw_c2_default1 and 2 float fT = 0.0, fSpasm1 = 2.0, fSpasm2 = 1.0, fDestroy = 5.0; DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectResurrection(),oNPC)); DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectHeal(30),oNPC)); DelayCommand(fT+=0.10,PlayAnimation(ANIMATION_LOOPING_SPASM, 1.0, fSpasm1)); DelayCommand(fT+=fSpasm1,SetCreatureAppearanceType(oNPC, APPEARANCE_TYPE_SKELETON_COMMON)); DelayCommand(fT+=0.01,PlayAnimation(ANIMATION_LOOPING_SPASM, 1.5, fSpasm2)); DelayCommand(fT+=fSpasm2,SetImmortal(oNPC,FALSE)); DelayCommand(fT+=0.01,ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),oNPC)); DelayCommand(fT+=fDestroy,SetIsDestroyable(TRUE)); } |
Neverwinter Script Source |
void main() { if (!GetLocalInt(OBJECT_SELF,"DEATH")) ExecuteScript("nw_c2_default5", OBJECT_SELF); } |
Neverwinter Script Source |
SetCutsceneMode(GetPCSpeaker(),TRUE); // вот не помню, катит тут такое определение игрока или нет |
Neverwinter Script Source |
SetCutsceneMode(GetPCSpeaker(),FALSE); |
Neverwinter Script Source |
struct stRec { string req1; string req2; string req3; string req4; string rez; int num; }; struct stRec SetupLab(int nSpellID) { struct stRec stR; switch (nSpellID) { case SPELL_MELFS_ACID_ARROW: stR.req1 = "NW_IT_MSMLMISC12"; stR.req2 = "NW_IT_MSMLMISC09"; stR.req3 = "****"; stR.req4 = "****"; stR.rez = "****"; stR.num = 4; // число ингридиентов break; case SPELL_MAGEARMOR: stR.req1 = "NW_IT_MSMLMISC12"; stR.req2 = "NW_IT_MSMLMISC10"; stR.req3 = "****"; stR.rez = "****"; stR.num = 3; break; // пример для 2 спеллов } return stR; } |
Neverwinter Script Source |
DelayCommand(2.2, AssignCommand(oPC, SetCameraFacing(CAMERA_MODE_STIFF_CHASE_CAMERA))); |
QUOTE |
Archangelэ А что должно произойти по твоей задумке? А то не совсем понятно. |
QUOTE |
по тому что у тебя написано камера закрепится за игроком без возможности поворота. |
Neverwinter Script Source |
void SetCameraMode( object oPlayer, int nCameraMode ); |
QUOTE (Анамиэль @ Jun 6 2005, 16:55) |
Можно ли сделать так,чтобы НПС сидел в кресле,но так чтобы с ним было возможно ведение диалога? |
Neverwinter Script Source |
void main() { if (GetAILevel() == AI_LEVEL_VERY_LOW) return; ExecuteScript("nw_c2_default1", OBJECT_SELF); if (!IsInConversation(OBJECT_SELF) && !GetIsInCombat() && GetCurrentAction() != ACTION_SIT) ExecuteScript("dd_sit",OBJECT_SELF); } |
Neverwinter Script Source |
void main() { ExecuteScript("nw_c2_default9", OBJECT_SELF); ExecuteScript("dmb_sit", OBJECT_SELF); } |
Neverwinter Script Source |
void main() { int nIndex = 0; object oChair = OBJECT_INVALID; string sChairTag = GetLocalString(OBJECT_SELF, "Chair"); if (sChairTag!="") { oChair = GetObjectByTag(sChairTag); } else { for (nIndex = 1; nIndex < 10; nIndex++) { oChair = GetNearestObject(OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nIndex); if (!GetIsObjectValid(oChair)) break; if (FindSubString(GetStringUpperCase(GetTag(oChair)), "CHAIR")!=-1 && !GetIsObjectValid(GetSittingCreature(oChair))) { nIndex = 0; break; } } } if (nIndex==0 && GetIsObjectValid(oChair)) ActionSit(oChair); } |