public static Actor CreateRandomActor(Actor.Attribute PrimaryAttribute, Actor.Attribute SecondaryAttribute) { RPGCalc calc = new RPGCalc(); Actor newActor = new Actor(); int[] rolls = calc.RollAttributes(); // order int array by value Array.Sort(rolls, 0, rolls.Length); // clear actor's current attributes for (int i = 0; i < newActor.BaseAttributes.Length; i++) { newActor.BaseAttributes[i] = 0; } // fill important attributes with values int next = 5; newActor.BaseAttributes[(int)PrimaryAttribute] = rolls[next--]; newActor.BaseAttributes[(int)SecondaryAttribute] = rolls[next--]; // fill rest for (int i = 0; i < newActor.BaseAttributes.Length; i++) { // find blank and fill with next if (newActor.BaseAttributes[i] == 0) { newActor.BaseAttributes[i] = rolls[next--]; } } newActor.Name = "Random Actor"; // set current stats to match newActor.ResetAttributes(); newActor.HPBaseMax = calc.GetBaseHP(newActor); newActor.MPBaseMax = calc.GetBaseMP(newActor); newActor.ResetStats(); newActor.BaseSpeed = RPGCalc.DEFAULT_SPEED; newActor.CurrentSpeed = newActor.BaseSpeed; newActor.lastAttack = System.DateTime.Now; newActor.lastDamage = new DateTime(); newActor.SetAlignment(calc.RollAlignment()); newActor.inventory.AddPackItem(RPGPotion.CreateRandomPotion()); //newActor.SpellBook = RPGSpellBook.CreateRandomSpellbook(); newActor.SpellBook = RPGSpellBook.CreateTestSpellbook(); return(newActor); }
public void ApplyToTarget(RPGObject targetObject) { this.TargetObject = targetObject; Actor targetActor = targetObject as Actor; string PrintLine = ""; if (targetObject.isOfType(typeof(Actor))) { targetActor = targetObject as Actor; PrintLine += targetActor.Name; } // actually change the target based on the effect if (EffectIsABuff) { switch (TargetBuff) { case (EffectTargetBuff.Attack): { targetActor.BaseAttack += Power; targetActor.UpdateAttack(); PrintLine += " Attack changed by " + Power; break; } case (EffectTargetBuff.Charisma): { targetActor.BaseCharisma += Power; targetActor.ResetAttributes(); PrintLine += " Charisma changed by " + Power; break; } case (EffectTargetBuff.Constitution): { targetActor.BaseConstitution += Power; targetActor.ResetAttributes(); PrintLine += " Constitution changed by " + Power; break; } case (EffectTargetBuff.Defense): { targetActor.BaseDefense += Power; targetActor.UpdateDefense(); PrintLine += " Defense changed by " + Power; break; } case (EffectTargetBuff.Dexterity): { targetActor.BaseDexterity += Power; targetActor.ResetAttributes(); PrintLine += " Dexterity changed by " + Power; break; } case (EffectTargetBuff.Intelligence): { targetActor.BaseIntelligence += Power; targetActor.ResetAttributes(); PrintLine += " Intelligence changed by " + Power; break; } case (EffectTargetBuff.RaiseDamage): { targetActor.BaseDamage += Power; PrintLine += " Damage changed by " + Power; break; } case (EffectTargetBuff.RaiseMaxHP): { targetActor.HPBaseMax += Power; targetActor.HPAdjustCurrentMax(Power); targetActor.HPAdjustCurrent(Power); PrintLine += " Max HP changed by " + Power; break; } case (EffectTargetBuff.RaiseMaxMP): { targetActor.MPBaseMax += Power; targetActor.MPAdjustCurrentMax(Power); targetActor.MPAdjustCurrent(Power); PrintLine += " Max MP changed by " + Power; break; } case (EffectTargetBuff.RestoreHP): { // because we are only restoring, it cannot go over the max targetActor.HPAdjustCurrent(Math.Min(Power, Math.Max(targetActor.HPCurrentMax - targetActor.HPCurrent, 0))); PrintLine += " HP restored by " + Power; break; } case (EffectTargetBuff.RestoreMP): { // because we are only restoring, it cannot go over the max targetActor.MPAdjustCurrent(Math.Min(Power, Math.Max(targetActor.MPCurrentMax - targetActor.MPCurrent, 0))); PrintLine += " MP restored by " + Power; break; } case (EffectTargetBuff.Speed): { targetActor.BaseSpeed += Power; targetActor.CurrentSpeed += Power; PrintLine += " Speed changed by " + Power; break; } case (EffectTargetBuff.Strength): { targetActor.BaseStrength += Power; targetActor.ResetAttributes(); PrintLine += " Strength changed by " + Power; break; } case (EffectTargetBuff.Wisdom): { targetActor.BaseWisdom += Power; targetActor.ResetAttributes(); PrintLine += " Wisdom changed by " + Power; break; } } // end switch } else { } Session.Print(PrintLine); }