//вставить в onUnequip int isCursed(object oItem) { if (!GetIsObjectValid(oItem)) { return FALSE; } if (GetLocalInt(oItem,"ImmediateUncursed")) { return FALSE; } else if (GetLocalInt(oItem,"Cursed")) { return TRUE; } else if (GetStringRight(GetTag(oItem),6) == "Cursed") { return TRUE; } else { return FALSE; } }
void main() { object oItem = GetPCItemLastUnequipped(); object oPC = GetPCItemLastUnequippedBy(); if (isCursed(oItem)) {
object oCopy = CopyItem(oItem,oPC,TRUE); int nSlot = GetLocalInt(oItem,"InventorySlot"); if (nSlot != -1) { if (nSlot == INVENTORY_SLOT_RIGHTHAND) { object oRightHand = GetItemInSlot(nSlot,oPC); object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); if (isCursed(oRightHand)) { if (isCursed(oLeftHand)) { SetLocalInt(oRightHand,"ImmediateUncursed",1); DelayCommand(0.05, AssignCommand(oPC, ActionEquipItem(oCopy, INVENTORY_SLOT_RIGHTHAND))); DelayCommand(0.1, SetLocalInt(oRightHand, "ImmediateUncursed", 0)); } else { DelayCommand(0.05, AssignCommand(oPC, ActionEquipItem(oCopy, INVENTORY_SLOT_LEFTHAND))); } } else { DelayCommand(0.05, AssignCommand(oPC, ActionEquipItem(oCopy, nSlot))); } } else { object oCurrent = GetItemInSlot(nSlot,oPC); if (isCursed(oCurrent)) { SetLocalInt(oCurrent,"ImmediateUncursed",1); DelayCommand(0.1, SetLocalInt(oCurrent, "ImmediateUncursed", 0)); } DelayCommand(0.05, AssignCommand(oPC, ActionEquipItem(oCopy, nSlot))); } } DestroyObject(oItem,0.01); } }
//вставить в onEquip
void main() { object oItem = GetPCItemLastEquipped(); object oPC = GetPCItemLastEquippedBy(); //AssignCommand(oPC,SpeakString("Item Equipped!",TALKVOLUME_SILENT_SHOUT)); if ((GetLocalInt(oItem,"Cursed") == 1) || (GetStringRight(GetTag(oItem),6) == "Cursed")) { effect eCurse = EffectLinkEffects(EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE), EffectCurse(2, 2, 2, 2, 4, 2)); ApplyEffectToObject(DURATION_TYPE_PERMANENT,eCurse,oPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY)), oPC); int nSlot = 0; int nSlotEquipped = -1; while ((nSlot < 18) && (nSlotEquipped == -1)) { if (GetItemInSlot(nSlot,oPC) == oItem) { nSlotEquipped = nSlot; } nSlot++; } SetLocalInt(oItem,"InventorySlot",nSlotEquipped); FloatingTextStringOnCreature(GetName(oPC) + " equipped a cursed item.",oPC); } }
//а этот файл сохраните под именем nw_s0_remeffect
#include "X0_I0_SPELLS" #include "x2_inc_spellhook" void main() { if (!X2PreSpellCastCode()){} int nSpellID = GetSpellId(); object oTarget = GetSpellTargetObject(); int nEffect1; int nEffect2; int nEffect3; int bAreaOfEffect = FALSE; effect eVis = EffectVisualEffect(VFX_IMP_REMOVE_CONDITION); if(nSpellID == SPELL_REMOVE_BLINDNESS_AND_DEAFNESS) { nEffect1 = EFFECT_TYPE_BLINDNESS; nEffect2 = EFFECT_TYPE_DEAF; bAreaOfEffect = TRUE; } else if(nSpellID == SPELL_REMOVE_CURSE) { nEffect1 = EFFECT_TYPE_CURSE; int nSlot = 0; object oItem; object oUncursed; string sUncursedForm; while (nSlot < 18) { oItem = GetItemInSlot(nSlot,oTarget); if ((GetLocalInt(oItem,"Cursed") == 1) || (GetStringRight(GetTag(oItem),6) == "Cursed")) { sUncursedForm = GetLocalString(oItem,"UncursedVersion"); if (sUncursedForm == "") { sUncursedForm = GetStringLeft(GetStringLowerCase(GetTag(oItem)),GetStringLength(GetTag(oItem)) - 6); } oUncursed = CreateItemOnObject(sUncursedForm,oTarget); if (GetIdentified(oItem)) { SetIdentified(oUncursed,TRUE); } SetLocalInt(oItem,"ImmediateUncursed",1); DestroyObject(oItem,0.1); FloatingTextStringOnCreature(GetName(oItem) + " is no longer cursed.",oTarget,FALSE); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_HOLY_SILENT), oTarget); ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_HOLY_SILENT), oTarget); } nSlot++; } } else if(nSpellID == SPELL_REMOVE_DISEASE || nSpellID == SPELLABILITY_REMOVE_DISEASE) { nEffect1 = EFFECT_TYPE_DISEASE; nEffect2 = EFFECT_TYPE_ABILITY_DECREASE; } else if(nSpellID == SPELL_NEUTRALIZE_POISON) { nEffect1 = EFFECT_TYPE_POISON; nEffect2 = EFFECT_TYPE_DISEASE; nEffect3 = EFFECT_TYPE_ABILITY_DECREASE; }
if (bAreaOfEffect == TRUE) { effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_30); effect eLink; spellsGenericAreaOfEffect(OBJECT_SELF, GetSpellTargetLocation(), SHAPE_SPHERE, RADIUS_SIZE_MEDIUM, SPELL_REMOVE_BLINDNESS_AND_DEAFNESS, eImpact, eLink, eVis, DURATION_TYPE_INSTANT, 0.0, SPELL_TARGET_ALLALLIES, FALSE, TRUE, nEffect1, nEffect2); return; } SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, nSpellID, FALSE)); RemoveSpecificEffect(nEffect1, oTarget); if(nEffect2 != 0) { RemoveSpecificEffect(nEffect2, oTarget); } if(nEffect3 != 0) { RemoveSpecificEffect(nEffect3, oTarget); } ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); }
// чтобы создать проклЯтую(неснимаемую) вещь, надо просто присвоить ей тэг 39;XCursed39;, где Х - уникальное имя //шмотки. Авторство - CelestialRyan. |