public void ApplyEffects(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer player = NWPlayer.Wrap(user.Object); target.RemoveEffect(EFFECT_TYPE_REGENERATE); PCSkill skill = _skill.GetPCSkill(player, SkillType.FirstAid); int luck = _perk.GetPCPerkLevel(player, PerkType.Lucky); int perkDurationBonus = _perk.GetPCPerkLevel(player, PerkType.HealingKitExpert) * 6 + (luck * 2); float duration = 30.0f + (skill.Rank * 0.4f) + perkDurationBonus; int restoreAmount = 1 + item.GetLocalInt("HEALING_BONUS") + player.EffectiveFirstAidBonus; int perkBlastBonus = _perk.GetPCPerkLevel(player, PerkType.ImmediateImprovement); if (perkBlastBonus > 0) { int blastHeal = restoreAmount * perkBlastBonus; if (_random.Random(100) + 1 <= luck / 2) { blastHeal *= 2; } _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectHeal(blastHeal), target.Object); } Effect regeneration = _.EffectRegenerate(restoreAmount, 6.0f); _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, regeneration, target.Object, duration); player.SendMessage("You successfully treat " + target.Name + "'s wounds."); int xp = (int)_skill.CalculateRegisteredSkillLevelAdjustedXP(100, item.RecommendedLevel, skill.Rank); _skill.GiveSkillXP(player, SkillType.FirstAid, xp); }
public void ApplyEffects(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer player = user.Object; var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); int skillRank = _skill.GetPCSkillRank(player, SkillType.Medicine); int perkLevel = _perk.GetPCPerkLevel(player, PerkType.ResuscitationDevices); int rank = item.GetLocalInt("RANK"); int baseHeal; switch (rank) { case 1: baseHeal = 1; break; case 2: baseHeal = 11; break; case 3: baseHeal = 31; break; case 4: baseHeal = 51; break; default: return; } baseHeal += perkLevel * 2; baseHeal += effectiveStats.Medicine / 2; baseHeal += item.MedicineBonus / 2; int delta = item.RecommendedLevel - skillRank; float effectivenessPercent = 1.0f; if (delta > 0) { effectivenessPercent = effectivenessPercent - (delta * 0.1f); } baseHeal = (int)(baseHeal * effectivenessPercent); Player dbPlayer = _data.Single <Player>(x => x.ID == user.GlobalID); int hpRecover = (int)(target.MaxHP * (0.01f * baseHeal)); int fpRecover = (int)(dbPlayer.MaxFP * (0.01f * baseHeal)); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectResurrection(), target); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectHeal(hpRecover), target); dbPlayer.CurrentFP = fpRecover; _data.SubmitDataChange(dbPlayer, DatabaseActionType.Update); player.SendMessage("You successfully resuscitate " + target.Name + "!"); if (target.IsPlayer) { int xp = (int)_skill.CalculateRegisteredSkillLevelAdjustedXP(600, item.RecommendedLevel, skillRank); _skill.GiveSkillXP(player, SkillType.Medicine, xp); } }
public bool CanCastSpell(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.Aegis); int activeAegisLevel = _customEffect.GetActiveEffectLevel(oTarget, CustomEffectType.Aegis); return(level >= activeAegisLevel); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.Purify); int luck = _perk.GetPCPerkLevel(oPC, PerkType.Lucky); bool luckBonus = _random.Random(100) + 1 <= luck; if (level >= 1 || luckBonus) { _customEffect.RemovePCCustomEffect((NWPlayer)oTarget, CustomEffectType.Bleeding); } if (level >= 2 || luckBonus) { _customEffect.RemovePCCustomEffect((NWPlayer)oTarget, CustomEffectType.Poison); } if (level >= 3 || luckBonus) { _customEffect.RemovePCCustomEffect((NWPlayer)oTarget, CustomEffectType.Burning); } Effect vfx = _.EffectVisualEffect(VFX_IMP_HEALING_S); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, vfx, oTarget.Object); foreach (Effect effect in oTarget.Effects) { int effectType = _.GetEffectType(effect); if (effectType == EFFECT_TYPE_POISON || effectType == EFFECT_TYPE_DISEASE) { _.RemoveEffect(oTarget.Object, effect); } } _skill.RegisterPCToAllCombatTargetsForSkill(oPC, SkillType.AlterationMagic); }
public void ApplyEffects(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer player = user.Object; int ability = item.GetLocalInt("ABILITY_TYPE"); int amount = item.GetLocalInt("AMOUNT") + item.MedicineBonus; int rank = player.IsPlayer ? _skill.GetPCSkillRank(player, SkillType.Medicine) : 0; int recommendedLevel = item.RecommendedLevel; float duration = 30.0f; int perkLevel = player.IsPlayer ? _perk.GetPCPerkLevel(player, PerkType.StimFiend) : 0; float percentIncrease = perkLevel * 0.25f; duration = duration + (duration * percentIncrease); Effect effect = _.EffectAbilityIncrease(ability, amount); effect = _.TagEffect(effect, "STIM_PACK_EFFECT"); _.ApplyEffectToObject(NWScript.DURATION_TYPE_TEMPORARY, effect, target, duration); user.SendMessage("You inject " + target.Name + " with a stim pack. The stim pack will expire in " + duration + " seconds."); _.DelayCommand(duration + 0.5f, () => { player.SendMessage("The stim pack that you applied to " + target.Name + " has expired."); }); if (!Equals(user, target)) { NWCreature targetCreature = target.Object; targetCreature.SendMessage(user.Name + " injects you with a stim pack."); } int xp = (int)_skill.CalculateRegisteredSkillLevelAdjustedXP(300, item.RecommendedLevel, rank); _skill.GiveSkillXP(player, SkillType.Medicine, xp); }
private void HandleRegenerationTick(NWPlayer oPC, Data.Entity.Player entity) { entity.RegenerationTick = entity.RegenerationTick - 1; int rate = 20; int amount = entity.HPRegenerationAmount; if (entity.RegenerationTick <= 0) { if (oPC.CurrentHP < oPC.MaxHP) { var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(oPC); // CON bonus int con = oPC.ConstitutionModifier; if (con > 0) { amount += con; } amount += effectiveStats.HPRegen; if (oPC.Chest.CustomItemType == CustomItemType.HeavyArmor) { int sturdinessLevel = _perk.GetPCPerkLevel(oPC, PerkType.Sturdiness); if (sturdinessLevel > 0) { amount += sturdinessLevel + 1; } } _.ApplyEffectToObject(NWScript.DURATION_TYPE_INSTANT, _.EffectHeal(amount), oPC.Object); } entity.RegenerationTick = rate; } }
public string IsValidTarget(NWCreature user, NWItem item, NWObject target, Location targetLocation) { NWItem targetItem = target.Object; float maxDurability = _durability.GetMaxDurability(targetItem); float durability = _durability.GetDurability(targetItem); if (target.ObjectType != NWScript.OBJECT_TYPE_ITEM) { return("Only items may be targeted by repair kits."); } if (targetItem.CustomItemType != (CustomItemType)item.GetLocalInt("REPAIR_CUSTOM_ITEM_TYPE_ID")) { return("You cannot repair that item with this repair kit."); } if (maxDurability <= 0.0f || durability >= maxDurability) { return("That item does not need to be repaired."); } if (durability <= 0.0f) { return("That item is broken and cannot be repaired."); } if (maxDurability <= 0.1f) { return("You cannot repair that item any more."); } SkillType skillType = GetSkillType(item); int techLevel = item.GetLocalInt("TECH_LEVEL"); if (skillType == SkillType.Armorsmith) { if (_perk.GetPCPerkLevel(user.Object, PerkType.ArmorRepair) < techLevel) { return("Your level in the 'Armor Repair' perk is too low to use this repair kit."); } } else if (skillType == SkillType.Weaponsmith) { if (_perk.GetPCPerkLevel(user.Object, PerkType.WeaponRepair) < techLevel) { return("Your level in the 'Weapon Repair' perk is too low to use this repair kit."); } } else if (skillType == SkillType.Engineering) { if (_perk.GetPCPerkLevel(user.Object, PerkType.ElectronicRepair) < techLevel) { return("Your level in the 'Electronic Repair' perk is too low to use this repair kit."); } } return(null); }
public bool Run(params object[] args) { NWPlayer player = (NWPlayer)args[0]; string oreResref = (string)args[1]; List <ItemProperty> itemProperties = (List <ItemProperty>)args[2]; player.IsBusy = false; int rank = _skill.GetPCSkillRank(player, SkillType.Engineering); int level = _craft.GetIngotLevel(oreResref); string ingotResref = _craft.GetIngotResref(oreResref); if (level < 0 || string.IsNullOrWhiteSpace(ingotResref)) { return(false); } int delta = rank - level; int count = 2; if (delta > 2) { count = delta; } if (count > 4) { count = 4; } if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.Lucky)) { count++; } if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.ProcessingEfficiency) * 10) { count++; } for (int x = 1; x <= count; x++) { var item = (_.CreateItemOnObject(ingotResref, player.Object)); foreach (var ip in itemProperties) { _biowareXP2.IPSafeAddItemProperty(item, ip, 0.0f, AddItemPropertyPolicy.IgnoreExisting, true, true); } } var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); int stronidiumAmount = 2 + effectiveStats.Harvesting; _.CreateItemOnObject("stronidium", player.Object, stronidiumAmount); int xp = (int)_skill.CalculateRegisteredSkillLevelAdjustedXP(100, level, rank); _skill.GiveSkillXP(player, SkillType.Engineering, xp); return(true); }
public bool Run(params object[] args) { NWPlayer player = NWPlayer.Wrap(Object.OBJECT_SELF); NWPlaceable forge = NWPlaceable.Wrap(player.GetLocalObject("FORGE")); string resref = forge.GetLocalString("FORGE_ORE"); forge.DeleteLocalObject("FORGE_USER"); player.DeleteLocalObject("FORGE"); forge.DeleteLocalString("FORGE_ORE"); player.IsBusy = false; PCSkill pcSkill = _skill.GetPCSkill(player, SkillType.Engineering); int level = _craft.GetIngotLevel(resref); string ingotResref = _craft.GetIngotResref(resref); if (pcSkill == null || level < 0 || string.IsNullOrWhiteSpace(ingotResref)) { return(false); } int delta = pcSkill.Rank - level; int count = 2; if (delta > 2) { count = delta; } if (count > 6) { count = 6; } if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.Lucky)) { count++; } if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.ProcessingEfficiency) * 10) { count++; } for (int x = 1; x <= count; x++) { _.CreateItemOnObject(ingotResref, player.Object); } int xp = (int)_skill.CalculateRegisteredSkillLevelAdjustedXP(100, level, pcSkill.Rank); _skill.GiveSkillXP(player, SkillType.Engineering, xp); if (_random.Random(100) + 1 <= 3) { _food.DecreaseHungerLevel(player, 1); } return(true); }
private bool CheckValidity(NWPlaceable forge, NWPlayer pc, NWItem item) { if (pc.IsBusy) { ReturnItemToPC(pc, item, "You are too busy."); return(false); } if (_.GetIsObjectValid(forge.GetLocalObject("FORGE_USER")) == NWScript.TRUE) { ReturnItemToPC(pc, item, "This forge is currently in use. Please wait..."); return(false); } string[] allowed = { "power_core", "raw_veldite", "raw_scordspar", "raw_plagionite", "raw_keromber", "raw_jasioclase", "raw_hemorgite", "raw_ochne", "raw_croknor", "raw_arkoxit", "raw_bisteiss" }; if (!allowed.Contains(item.Resref)) { ReturnItemToPC(pc, item, "Only power cores and raw materials may be placed inside."); return(false); } int level = _craft.GetIngotLevel(item.Resref); int rank = _skill.GetPCSkillRank(pc, SkillType.Engineering); int delta = rank - level; if (delta <= -4) { ReturnItemToPC(pc, item, "You do not have enough skill to refine this material."); return(false); } int pcPerkLevel = _perk.GetPCPerkLevel(pc, PerkType.Refining); int orePerkLevel = _craft.GetIngotPerkLevel(item.Resref); if (pcPerkLevel < orePerkLevel) { ReturnItemToPC(pc, item, "You do not have the perk necessary to refine this material."); return(false); } return(true); }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel((NWPlayer)user, PerkType.SpeedyMedic) * 10) { return(0.1f); } PCSkill skill = _skill.GetPCSkill((NWPlayer)user, SkillType.FirstAid); return(12.0f - (skill.Rank * 0.1f)); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int perkLevel = _perk.GetPCPerkLevel(oPC, PerkType.ExpulsionManeuver); float length; int ab; int chance; switch (perkLevel) { case 1: length = 12.0f; ab = 1; chance = 10; break; case 2: length = 12.0f; ab = 1; chance = 20; break; case 3: length = 12.0f; ab = 2; chance = 20; break; case 4: length = 12.0f; ab = 2; chance = 30; break; case 5: length = 12.0f; ab = 3; chance = 30; break; default: return; } int luck = _perk.GetPCPerkLevel(oPC, PerkType.Lucky) + oPC.EffectiveLuckBonus; chance += luck; if (_random.Random(100) + 1 <= chance) { _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, _.EffectAttackIncrease(ab), oPC.Object, length); oPC.SendMessage(_color.Combat("You perform a defensive maneuver.")); } }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer player = NWPlayer.Wrap(user.Object); if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.SpeedyMedic) * 10) { return(0.1f); } PCSkill skill = _skill.GetPCSkill(player, SkillType.FirstAid); return(12.0f - (skill.Rank + player.EffectiveFirstAidBonus / 2) * 0.1f); }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer player = (user.Object); var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(player, PerkType.SpeedyFirstAid) * 10) { return(0.1f); } int rank = _skill.GetPCSkillRank(player, SkillType.Medicine); return(12.0f - (rank + effectiveStats.Medicine / 2) * 0.1f); }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { if (_random.Random(100) + 1 <= _perk.GetPCPerkLevel(user.Object, PerkType.SpeedyFirstAid) * 10) { return(0.1f); } int rank = _skill.GetPCSkillRank(user.Object, SkillType.Medicine); float seconds = 6.0f - (rank * 0.2f); if (seconds < 1.0f) { seconds = 1.0f; } return(seconds); }
private void ApplyFeatChanges(NWPlayer oPC, NWItem oItem) { NWItem equipped = oItem ?? oPC.RightHand; if (Equals(equipped, oItem) || equipped.CustomItemType != CustomItemType.Vibroblade) { _nwnxCreature.RemoveFeat(oPC, FEAT_POWER_ATTACK); _nwnxCreature.RemoveFeat(oPC, FEAT_IMPROVED_POWER_ATTACK); if (_.GetActionMode(oPC, ACTION_MODE_POWER_ATTACK) == TRUE) { _.SetActionMode(oPC, ACTION_MODE_POWER_ATTACK, FALSE); } if (_.GetActionMode(oPC, ACTION_MODE_IMPROVED_POWER_ATTACK) == TRUE) { _.SetActionMode(oPC, ACTION_MODE_IMPROVED_POWER_ATTACK, FALSE); } return; } int perkLevel = _perk.GetPCPerkLevel(oPC, PerkType.BladePowerAttack); _nwnxCreature.AddFeat(oPC, FEAT_POWER_ATTACK); if (perkLevel >= 2) { _nwnxCreature.AddFeat(oPC, FEAT_IMPROVED_POWER_ATTACK); } }
private int CalculateAmount(NWPlayer player) { var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); int perkLevel = _perk.GetPCPerkLevel(player, PerkType.Rest); int amount; switch (perkLevel) { default: amount = 2; break; case 4: case 5: case 6: amount = 3; break; case 7: amount = 4; break; } amount += effectiveStats.Rest; return(amount); }
public bool Run(params object[] args) { NWPlayer oPC = NWPlayer.Wrap(_.GetLastDisturbed()); NWItem oItem = NWItem.Wrap(_.GetInventoryDisturbItem()); NWPlaceable point = NWPlaceable.Wrap(NWN.Object.OBJECT_SELF); int disturbType = _.GetInventoryDisturbType(); if (disturbType == INVENTORY_DISTURB_TYPE_ADDED) { _item.ReturnItem(oPC, oItem); } else { if (point.InventoryItems.Count <= 0 && point.GetLocalInt("FORAGE_POINT_FULLY_HARVESTED") == 1) { string seed = point.GetLocalString("FORAGE_POINT_SEED"); if (!string.IsNullOrWhiteSpace(seed)) { _.CreateObject(OBJECT_TYPE_ITEM, seed, point.Location); int perkLevel = _perk.GetPCPerkLevel(oPC, PerkType.SeedPicker); if (_random.Random(100) + 1 <= perkLevel * 10) { _.CreateObject(OBJECT_TYPE_ITEM, seed, point.Location); } } point.Destroy(); _farming.RemoveGrowingPlant(point); } } return(true); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int perkLevel = _perk.GetPCPerkLevel(oPC, PerkType.BlockingRecovery); int chance; int amount; switch (perkLevel) { case 1: chance = 50; amount = 1; break; case 2: chance = 50; amount = 2; break; case 3: chance = 50; amount = 3; break; case 4: chance = 75; amount = 3; break; case 5: chance = 75; amount = 4; break; default: return; } int luck = _perk.GetPCPerkLevel(oPC, PerkType.Lucky) + oPC.EffectiveLuckBonus; chance += luck; if (_random.Random(100) + 1 <= chance) { Effect heal = _.EffectHeal(amount); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, heal, oPC.Object); } }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.FireBlast); int damage; int ticks = 0; switch (level) { case 1: damage = _random.Random(6) + 1; break; case 2: damage = _random.Random(6) + 1; ticks = 3; break; case 3: damage = _random.Random(6) + 1; damage += _random.Random(6) + 1; ticks = 4; break; case 4: damage = _random.Random(4) + 1; damage += _random.Random(4) + 1; damage += _random.Random(4) + 1; damage += _random.Random(4) + 1; ticks = 4; break; case 5: damage = _random.Random(8) + 1; damage += _random.Random(8) + 1; damage += _random.Random(8) + 1; ticks = 5; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.2f) + (wisdom * 0.1f); damage = (int)(damage * damageMultiplier); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectVisualEffect(VFX_COM_HIT_FIRE), oTarget.Object); if (ticks > 0) { _customEffect.ApplyCustomEffect(oPC, (NWCreature)oTarget, CustomEffectType.Burning, ticks, level); } _skill.RegisterPCToNPCForSkill(oPC, (NWCreature)oTarget, SkillType.EvocationMagic); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage, DAMAGE_TYPE_FIRE), oTarget.Object); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.GraspingIce); int damage; float slowLength = 0.0f; switch (level) { case 1: damage = _random.Random(6) + 1; break; case 2: damage = _random.Random(6) + 1; slowLength = 3.0f; break; case 3: damage = _random.Random(6) + 1; damage += _random.Random(6) + 1; slowLength = 3.0f; break; case 4: damage = _random.Random(4) + 1; damage += _random.Random(4) + 1; damage += _random.Random(4) + 1; damage += _random.Random(4) + 1; slowLength = 3.0f; break; case 5: damage = _random.Random(8) + 1; damage += _random.Random(8) + 1; damage += _random.Random(8) + 1; slowLength = 3.0f; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.2f) + (wisdom * 0.1f); damage = (int)(damage * damageMultiplier); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectVisualEffect(VFX_FNF_HOWL_MIND), oTarget.Object); if (slowLength > 0.0f) { _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, _.EffectSlow(), oTarget.Object, slowLength + 0.1f); } _skill.RegisterPCToNPCForSkill(oPC, (NWCreature)oTarget, SkillType.EvocationMagic); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage), oTarget.Object); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.HolyShot); int damage; int alterationBonus = oPC.EffectiveAlterationBonus; switch (level) { case 1: damage = _random.Random(8 + alterationBonus) + 1; break; case 2: damage = _random.Random(6 + alterationBonus) + 1; damage += _random.Random(6 + alterationBonus) + 1; break; case 3: damage = _random.Random(6 + alterationBonus) + 1; damage += _random.Random(6 + alterationBonus) + 1; break; case 4: damage = _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; break; case 5: damage = _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; damage += _random.Random(4 + alterationBonus) + 1; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.4f) + (wisdom * 0.2f); damage = (int)(damage * damageMultiplier); Effect vfx = _.EffectBeam(VFX_BEAM_SILENT_HOLY, oPC.Object, BODY_NODE_CHEST); _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, vfx, oTarget.Object, 1.5f); _skill.RegisterPCToNPCForSkill(oPC, NWCreature.Wrap(oTarget.Object), SkillType.AlterationMagic); oPC.AssignCommand(() => { _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage), oTarget.Object); }); }
private float CalculateCraftingDelay(NWPlayer oPC, int skillID) { PerkType perkType; float adjustedSpeed = 1.0f; SkillType skillType = (SkillType)skillID; if (skillType == SkillType.Metalworking) { perkType = PerkType.SpeedyMetalworking; } else if (skillType == SkillType.Weaponsmith) { perkType = PerkType.SpeedyWeaponsmith; } else if (skillType == SkillType.Armorsmith) { perkType = PerkType.SpeedyArmorsmith; } else if (skillType == SkillType.Cooking) { perkType = PerkType.SpeedyCooking; } else if (skillType == SkillType.Woodworking) { perkType = PerkType.SpeedyWoodworking; } else { return(BaseCraftDelay); } int perkLevel = _perk.GetPCPerkLevel(oPC, perkType); switch (perkLevel) { case 1: adjustedSpeed = 0.9f; break; case 2: adjustedSpeed = 0.8f; break; case 3: adjustedSpeed = 0.7f; break; case 4: adjustedSpeed = 0.6f; break; case 5: adjustedSpeed = 0.5f; break; case 6: adjustedSpeed = 0.4f; break; case 7: adjustedSpeed = 0.3f; break; case 8: adjustedSpeed = 0.2f; break; case 9: adjustedSpeed = 0.1f; break; case 10: adjustedSpeed = 0.01f; break; } return(BaseCraftDelay * adjustedSpeed); }
public void OnImpact(NWPlayer player, NWObject target, int level) { var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); int luck = _perk.GetPCPerkLevel(player, PerkType.Lucky) + effectiveStats.Luck; int lightBonus = effectiveStats.LightAbility; int min = 1; float length; int damage; int wisdom = player.WisdomModifier; int intelligence = player.IntelligenceModifier; min += lightBonus / 4 + wisdom / 3 + intelligence / 4; switch (level) { case 1: damage = _random.D4(1, min); length = 3; break; case 2: damage = _random.D4(1, min); length = 6; break; case 3: damage = _random.D6(1, min); length = 6; break; case 4: damage = _random.D8(1, min); length = 6; break; case 5: damage = _random.D8(1, min); length = 9; break; case 6: // Only available with background perk damage = _random.D12(1, min); length = 9; break; default: return; } if (_random.Random(100) + 1 <= luck) { length = length * 2; player.SendMessage("Lucky force push!"); } _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage, DAMAGE_TYPE_POSITIVE), target); _.ApplyEffectToObject(DURATION_TYPE_TEMPORARY, _.EffectKnockdown(), target, length); _skill.RegisterPCToNPCForSkill(player, target, SkillType.LightSideAbilities); }
public void OnImpact(NWPlayer oPC, NWObject oTarget) { int level = _perk.GetPCPerkLevel(oPC, PerkType.LightningShock); int damage; int evocationBonus = oPC.EffectiveEvocationBonus; switch (level) { case 1: damage = _random.Random(8 + evocationBonus) + 1; break; case 2: damage = _random.Random(6 + evocationBonus) + 1; damage += _random.Random(6 + evocationBonus) + 1; break; case 3: damage = _random.Random(6 + evocationBonus) + 1; damage += _random.Random(6 + evocationBonus) + 1; break; case 4: damage = _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; break; case 5: damage = _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; damage += _random.Random(4 + evocationBonus) + 1; break; default: return; } int wisdom = oPC.WisdomModifier; int intelligence = oPC.IntelligenceModifier; float damageMultiplier = 1.0f + (intelligence * 0.2f) + (wisdom * 0.1f); damage = (int)(damage * damageMultiplier); _skill.RegisterPCToNPCForSkill(oPC, (NWCreature)oTarget, SkillType.EvocationMagic); _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectVisualEffect(VFX_IMP_DOOM), oTarget.Object); oPC.AssignCommand(() => { _.ApplyEffectToObject(DURATION_TYPE_INSTANT, _.EffectDamage(damage), oTarget.Object); }); }
private int EffectiveMaxHitPoints(NWPlayer player, EffectiveItemStats stats) { int hp = 25 + player.ConstitutionModifier * 5; float effectPercentBonus = _customEffect.CalculateEffectHPBonusPercent(player); hp += _perk.GetPCPerkLevel(player, PerkType.Health) * 5; hp += stats.HP; hp = hp + (int)(hp * effectPercentBonus); if (hp > 1275) { hp = 1275; } if (hp < 20) { hp = 20; } return(hp); }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { const float BaseHarvestingTime = 16.0f; float harvestingTime = BaseHarvestingTime; if (user.IsPlayer) { var player = (user.Object); harvestingTime = BaseHarvestingTime - BaseHarvestingTime * (_perk.GetPCPerkLevel(player, PerkType.SpeedyHarvester) * 0.1f); } return(harvestingTime); }
public void OnImpact(NWPlayer player, NWObject target, int perkLevel) { var effectiveStats = _playerStat.GetPlayerItemEffectiveStats(player); float length; int ab; int chance; switch (perkLevel) { case 1: length = 12.0f; ab = 1; chance = 10; break; case 2: length = 12.0f; ab = 1; chance = 20; break; case 3: length = 12.0f; ab = 2; chance = 20; break; case 4: length = 12.0f; ab = 2; chance = 30; break; case 5: length = 12.0f; ab = 3; chance = 30; break; default: return; } int luck = _perk.GetPCPerkLevel(player, PerkType.Lucky) + effectiveStats.Luck; chance += luck; if (_random.Random(100) + 1 <= chance) { _.ApplyEffectToObject(NWScript.DURATION_TYPE_TEMPORARY, _.EffectAttackIncrease(ab), player.Object, length); player.SendMessage(_color.Combat("You perform a defensive maneuver.")); } }
public int EffectiveMaxHitPoints(NWPlayer player, NWItem ignoreItem) { int hp = 25 + player.ConstitutionModifier * 5; int equippedItemHPBonus = 0; var skills = _data.Where <PCSkill>(x => x.PlayerID == player.GlobalID) .Select(x => new { x.SkillID, x.Rank }).ToDictionary(x => x.SkillID, x => x.Rank); float effectPercentBonus = _customEffect.CalculateEffectHPBonusPercent(player); for (int slot = 0; slot < NUM_INVENTORY_SLOTS; slot++) { NWItem item = _.GetItemInSlot(slot, player); if (item.Equals(ignoreItem)) { continue; } var skillType = _item.GetSkillTypeForItem(item); int rank = skills[(int)skillType]; equippedItemHPBonus += CalculateAdjustedValue(item.HPBonus, item.RecommendedLevel, rank, 0); } hp += _perk.GetPCPerkLevel(player, PerkType.Health) * 5; hp += equippedItemHPBonus; hp = hp + (int)(hp * effectPercentBonus); if (hp > 1275) { hp = 1275; } if (hp < 20) { hp = 20; } return(hp); }
public float Seconds(NWCreature user, NWItem item, NWObject target, Location targetLocation, CustomData customData) { NWPlayer userPlayer = (user.Object); NWItem targetItem = (target.Object); float perkBonus = 0.0f; if (ItemService.ArmorBaseItemTypes.Contains(targetItem.BaseItemType)) { perkBonus = _perk.GetPCPerkLevel(userPlayer, PerkType.SpeedyArmorsmith) * 0.1f; } else if (ItemService.WeaponBaseItemTypes.Contains(targetItem.BaseItemType)) { perkBonus = _perk.GetPCPerkLevel(userPlayer, PerkType.SpeedyWeaponsmith) * 0.1f; } float seconds = 18.0f - (18.0f * perkBonus); if (seconds <= 0.1f) { seconds = 0.1f; } return(seconds); }