public void Can_Check_That_Character_Does_Not_Satisfy() { var character = new Character(StatBlock.With().Default().Str(13).Dex(15).Wis(10).Build()); var sut = new StatPrereq(StatBlock.With().Dex(15).Wis(9).Str(15).Build()); Check.That(sut.IsSatisfiedBy(character)).IsFalse(); }
void Awake() { stats = GetComponent <StatBlock>(); maxHealth = stats?.GetValue(StatName.Toughness) ?? maxHealth; currentHealth = maxHealth; stats?.RegisterInitializationCallback(UpdateMaxHealth); }
public virtual void OnEquip(StatBlock newOwner) { //register with the owner to set the OnTick to listen to an event. newOwner.CC.OnTick += OnTick; newOwner.CC.OnStruck += OnStruck; owner = newOwner; }
protected virtual void OnTriggerStay(Collider col) { StatBlock enemy = col.gameObject.GetComponent <StatBlock>(); ControlStatBlock enemyControl = col.gameObject.GetComponent <ControlStatBlock>(); if (enemy != null) { if (friendly != enemy.Friendly) { if (enemyControl != null && Enemy != null) { foreach (TimedBuff tb in Enemy) { enemyControl.ApplyBuff(tb.ShallowClone()); } } } else { if (enemyControl != null && Friend != null) { foreach (TimedBuff tb in Friend) { enemyControl.ApplyBuff(tb.ShallowClone()); } } } } }
public CreatureType Retrieve(CreatureTypeKey key) { CreatureType creatureType; StatBlock statblock; switch (key) { case CreatureTypeKey.Aberration: statblock = new StatBlock(new HitDie(1, 8)); creatureType = Spawn(statblock); break; case CreatureTypeKey.Animal: statblock = new StatBlock(new HitDie(1, 8)); creatureType = Spawn(statblock); break; case CreatureTypeKey.Humanoid: statblock = new StatBlock(new HitDie(1, 8)); creatureType = Spawn(statblock); break; default: throw new Exception("Prohibited CreatureType Key Detected"); } return(creatureType); }
public void Indexer_Returns_Negative_When_No_Stat() { StatBlock sut = StatBlock.With() .Str(13).Build(); Check.That(sut[Stat.Dex]).IsEqualTo(-1); }
public Weapon() { Attack = 1; Range = 1; type = DamageType.Phisical; WeaponStats = new StatBlock(); }
void OnCollisonStay(Collision col) { if (dmgTimer > 0.5f && !inUse) { StatBlock enemy = col.gameObject.GetComponent <StatBlock>(); ControlStatBlock enemyControl = col.gameObject.GetComponent <ControlStatBlock>(); IAttackIgnored colProj = col.gameObject.GetComponent <IAttackIgnored>(); if (colProj == null) //check to see if we collided with another projectile. if so ignore { //Debug.Log("Col with non-proj, Proj is: " + friendly); if (enemy != null) { //Debug.Log("Enemy has stat block, enem is friendly: " + enemy.Friendly); if (enemy.Friendly) { dmgTimer = 0f; enemy.TakeDamage(collideDmg, col.gameObject); if (enemyControl != null) { enemyControl.OnHit(collideDmg); } } } } } }
void Update() { if (abil.cdRemain > 0f) { float mult = 1; if (stats != null) { mult += 1 + StatBlock.CalcMult(stats.Cdr, stats.CdrMult); if (abil.isAttack) { mult += StatBlock.CalcMult(stats.AttackSpeed, stats.AttackSpeedMult); } } abil.cdRemain -= Time.deltaTime * mult; } if (abil.use) { abil.use = false; Use(); } if (abil.update) { abil.update = false; UpdateStats(); } }
new void Start() { base.Start(); Attacking = false; attack = false; // Set up animator animator = GetComponent <Animator>(); // Set up statblock stats = GetComponent <StatBlock>(); // Default spawnPos and movingRange spawnPos = transform.position; movingRange = 500f; chaseSpeed = 50f; movable = true; // Default vision visionAngle = 360f; visionDistance = 1000f; attackDistance = 3f; inAttackCoroutine = false; // Initial animation animator.SetBool("Fly Forward", true); animator.SetBool("Fly Backward", false); animator.SetBool("Fly Left", false); animator.SetBool("Fly Right", false); animator.SetBool("Defend", false); }
protected override void Activate() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0, 1.5f, 0), new Quaternion()); ProjectileBehave pbh = obj.GetComponentInChildren <ProjectileBehave>(); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.rotation = Quaternion.Slerp(transform.rotation, rotation, 1f); obj.transform.Translate(Vector3.forward * 1.3f); obj.transform.localScale = new Vector3(3.3f, 1f, 3.3f); Damage dmg; if (cost < 0.00001) { dmg = new Damage(Random.Range(dmgMin, dmgMax), 0, false, true, false); } else { float hplost = StatBlock.CalcMult(stats.HealthCur, stats.PhantomHpMult) * cost; stats.HealthCur -= hplost; Debug.Log("Cost player " + hplost + " hp."); dmg = new Damage(Random.Range(dmgMin, dmgMax), hplost / 2f, false, true, true); } pbh.dmg = stats.RealDamage(dmg); pbh.dmg.callback = this; }
void Awake() { rb = GetComponent <Rigidbody2D>(); col = transform.Find("Colliders").GetComponent <CircleCollider2D>(); stats = GetComponent <StatBlock>(); hp = GetComponent <BaseHealth>(); }
public void Utility_Property_Returns_Negative_When_No_Stat() { StatBlock sut = StatBlock.With() .Str(13).Build(); Check.That(sut.Dex).IsEqualTo(-1); }
private StatBlock InfStatement() { string first = "id if for get put return"; string follow = "}"; this.SkipErrors(first, follow); var lookaheadToken = this.TokenStream.Peek(); string lookahead = lookaheadToken.AToCCFormat(); if (first.HasToken(lookahead)) { this.ApplyDerivation("infStatement -> statement infStatement"); var block = new StatBlock(lookaheadToken.SourceLocation); var statement = Statement(); var trailingBlock = InfStatement(); block.Statements.Add(statement); block.Statements.JoinListWhereNotNull(trailingBlock?.Statements); return(block); } if (follow.HasToken(lookahead)) { this.ApplyDerivation("infStatement -> EPSILON"); return(new StatBlock(lookaheadToken.SourceLocation)); } return(null); }
// Update is called once per frame void Update() { //Debug.Log(stats.Fort + " mult: " + stats.FortMult); statlist.text = StatBlock.CalcMult(stats.Str, stats.StrMult).ToString("n1") + "\n" + StatBlock.CalcMult(stats.Dex, stats.DexMult).ToString("n1") + "\n" + StatBlock.CalcMult(stats.Myst, stats.MystMult).ToString("n1") + "\n" + StatBlock.CalcMult(stats.Fort, stats.FortMult).ToString("n1"); StatBlock detailedStats = stats.getStats(); column1.text = detailedStats.HealthMax.ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.HealthRegen, detailedStats.HealthRegenMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.Armor, detailedStats.ArmorMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.MoveSpeed, detailedStats.MoveSpeedMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.AttackSpeed, detailedStats.AttackSpeedMult).ToString("n1"); column2.text = (StatBlock.CalcMult(detailedStats.Cdr, detailedStats.CdrMult) * 100).ToString("n1") + "%\n" + StatBlock.CalcMult(detailedStats.Spell, detailedStats.SpellMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.MagicRes, detailedStats.MagicResMult).ToString("n1") + "\n" + (StatBlock.CalcMult(detailedStats.StatusRec, detailedStats.StatusRecMult) * 100).ToString("n1") + "%\n" + (StatBlock.CalcMult(detailedStats.AfflictRes, detailedStats.AfflictResMult) * 100).ToString("n1") + "%"; column3.text = StatBlock.CalcMult(detailedStats.RangedAttack, detailedStats.RangedAttackMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.MeleeAttack, detailedStats.MeleeAttackMult).ToString("n1") + "\n" + StatBlock.CalcMult(detailedStats.Damage, detailedStats.DamageMult).ToString("n1") + "\n" + (StatBlock.CalcMult(detailedStats.CritDamage, detailedStats.CritDamageMult) * 100).ToString("n1") + "%\n" + (StatBlock.CalcMult(detailedStats.CritChance, detailedStats.CritChanceMult) * 100).ToString("n1") + "%"; levelText.text = player.PlayerLevelExp.Level.ToString(); nameText.text = player.bloodlineController.playerName; classAgeText.text = textPlayerClass.ClassL.name + "\n" + player.bloodlineController.Age + " cycles"; }
protected override void Activate() { GameObject obj = Instantiate(projectile, gameObject.transform.position + new Vector3(0f, 2f, 0f), new Quaternion()); HorizontalSwipe pbh = obj.GetComponent <HorizontalSwipe>(); obj.transform.LookAt(mpd.CalculateWorldPosition()); var lookPos = mpd.CalculateWorldPosition() - transform.position; lookPos.y = 0; var rotation = Quaternion.LookRotation(lookPos); obj.transform.localScale = new Vector3(5f, 5f, 5f); pbh.speed = projSpeed; Damage dmg = new Damage(0f, Random.Range(dmgMin, dmgMax), false, false, true); pbh.dmg = stats.RealDamage(dmg); TimedBuff tb = slowdown.Instance; Stat stat = tb.Stats.Find(item => item.Name == Stat.MOVE_SPEED_MULT); // Debug.Log("just like the white winged dove : " + stat.Name + stat.Value + slowdownMult); stat = new Stat(stat.Name, StatBlock.CalcMult(stat.Value, slowdownMult)); tb.Stats.Remove(new Stat(Stat.MOVE_SPEED_MULT)); tb.Stats.Add(stat); tb.Duration += slowdownDur; tb.IsUnique = !slowdownStack; pbh.dmg.buffs.Add(tb); pbh.friendly = true; pbh.ttl = 4000f; pbh.player = gameObject; }
private void EvaluateStat() { if (targetStat == null) { return; } if (statBlock == null) { ConditionalGraph condGraph = graph as ConditionalGraph; if (condGraph.GetStateMachineOwner() == null) { return; } statBlock = condGraph.GetStateMachineOwner().GetComponent <StatBlock>(); if (statBlock == null) { return; } } Stat retreivedStat = null; if (statBlock.TryGetValue(targetStat, out retreivedStat)) { currentValue = retreivedStat.value; outputValue = retreivedStat.value; statValue = retreivedStat; } }
public void SetStat(string key, string value) { StatBlock block = GetStatBlock(key); block.Key = key; block.Value = value; }
protected void Awake() { stats = GetComponent <StatBlock>(); controlStats = GetComponent <ControlStatBlock>(); bossClass = GetComponent <PlayerClass>(); player = GameObject.FindGameObjectWithTag("Player"); }
void OnTriggerEnter(Collider col) { StatBlock enemy = col.gameObject.GetComponent <StatBlock>(); ControlStatBlock enemyControl = col.gameObject.GetComponent <ControlStatBlock>(); IAttackIgnored colProj = col.gameObject.GetComponent <IAttackIgnored>(); if (colProj == null) //check to see if we collided with another projectile. if so ignore { //Debug.Log("Col with non-proj, Proj is: " + friendly); if (enemy != null) { //Debug.Log("Enemy has stat block, enem is friendly: " + enemy.Friendly); if (friendly != enemy.Friendly) { enemy.TakeDamage(dmg, col.gameObject); if (enemyControl != null) { enemyControl.OnHit(dmg); } PlayAnim(col); //Debug.Log("Destroy due to hit non friend"); // Destroy(gameObject); } } else { PlayAnim(col); //Debug.Log("Destroy due to hit non stat char " + col.gameObject.name); // Destroy(gameObject); } } }
public void SetRace(Race newRace) { race = newRace; stats = race; stats.CC = this; renderer.material.mainTexture = race.tex; race.RegisterRacialAbility(); }
public void BecomeWoke(StatBlock stats, int level, GameObject player) { Level = level; this.stats = stats; playerTracker.Target = player; animator.SetTrigger("awake"); StartCoroutine(FinishWake()); }
public void Can_Be_Created() { var sut = new StatPrereq(StatBlock.With().Dex(15).Wis(13).Build()); Check.That(sut.Constraints).HasSize(2) .And.ContainsPair(Stat.Dex, 15) .And.ContainsPair(Stat.Wis, 13); }
protected virtual void Awake() { rb = GetComponent <Rigidbody2D>(); stats = GetComponent <StatBlock>(); hp = GetComponent <EnemyHealth>(); aggro = new PriorityQueue <AggroData>(MenuManager.maxPlayers, new MaxAggroComparator()); hp.postDamageEvent += AddAggroEvent; }
private void OnTriggerEnter(Collider collision) { if (collision.transform.GetComponent <StatBlock>()) { StatBlock target = collision.transform.GetComponent <StatBlock>(); target.TakeDamage(); EndProjectile(); } }
public static StatBlock operator -(StatBlock a, StatBlock b) { StatBlock toReturn = new StatBlock(); toReturn.resources = a.resources - b.resources; toReturn.ac = a.ac - b.ac; toReturn.ev = a.ev - b.ev; return(toReturn); }
protected override void Activate() { TimedBuff tb = Mend.Instance; Stat stat = tb.Stats.Find(item => item.Name == Stat.HEALTH_REGEN); stat.Value = StatBlock.CalcMult(stats.HealthMax * 1.01f, stats.PhantomHpMult) * ratio / tb.Duration; controlStats.ApplyBuff(tb); stats.HealthCur = 1f; }
public void Can_Check_Stat_Prereqs_When_False() { var character = new Character(StatBlock.With().Default().Str(14).Build()); StatBlock prereq = StatBlock.With().Str(15).Build(); Feat sut = FeatBuilder.Get().Build(); sut.AddStatPrereq(prereq); Check.That(sut.CanBeTakenBy(character)).IsFalse(); }
public P_CharacterInfo() { InitializeComponent(); DataContext = this; RemainingAttributePoints = StartingAttributePoints; Attributes = new StatBlock(); CharacterName = "Testy Mctest"; }
// Start is called before the first frame update void Start() { stats = GetComponent <StatBlock>(); controlStats = GetComponent <ControlStatBlock>(); PlayerClass pc = GetComponent <PlayerClass>(); abil = pc.abilities.Set[AbilName]; abil.cdRemain = 0f; UpdateStats(); }
public Model(int _t1, int _t2, double _mean, double _var, bool _isReturnRequests) { Model.Time = 0; _var = Math.Sqrt(_var); AbsTimeGenerator uniformGen = new UniformTimeGenerator(_t1, _t2); AbsTimeGenerator normGen = new NormalTimeGenerator(_mean, _var); m_ignoredRequests = new StatBlock(); m_successRequests = new StatBlock(); m_queue = new StandartQueue(m_ignoredRequests); m_generator = new Generator(uniformGen, m_queue); m_procBlock = new ProcessBlock(normGen, m_queue, m_successRequests); (m_queue as StandartQueue).SetSleepBlock(m_procBlock); if (_isReturnRequests) { m_successRequests.SetNextBlock(m_queue); } m_list = new List<IWorkBlock>(); m_list.Add(m_generator); m_list.Add(m_procBlock); }
public static void AttackMob(Skill skill = null) { var playerStats = Hero.Stats; StatBlock calcdStats = new StatBlock(); var target = Hero.CurrentTarget; var targetStats = target.GetStatBlock(); var targetDef = targetStats.PhysicalDefense; var procRoll = 0; //TODO: apply weapon and passive skill/xp-grid-buff dmgMods to dmgMod as well var dmgMod = 0; if (Hero.WieldState == Wielded.Dual || Hero.WieldState == Wielded.LH || Hero.WieldState == Wielded.TwoH) { var lh = Hero.LeftHand; calcdStats = playerStats.AddMods(lh.CombatMods); dmgMod += lh.CombatMods.Dmg; dmgMod.PctMod(lh.CombatMods.DmgPct); } if (Hero.WieldState == Wielded.RH || Hero.WieldState == Wielded.Dual) { ///TODO: Implement scaling 2-hand damage nerf reduction skill for warriors? var rh = Hero.RightHand; if (Hero.LeftHand == null) calcdStats = playerStats.AddMods(rh.CombatMods); else calcdStats = calcdStats.AddMods(rh.CombatMods); dmgMod += rh.CombatMods.Dmg; dmgMod.PctMod(rh.CombatMods.DmgPct); } //apply skill effects if (skill != null) { var mods = skill.Modifiers; calcdStats = calcdStats.AddMods(mods); dmgMod += mods.Dmg; dmgMod.PctMod(mods.DmgPct); } //Describe the attack Hero.DescAttack(skill); //roll for damage ///TODO: implement magical attacks #if DEBUG String.Format("(pAtk:{0} tDef:{1}) ", calcdStats.PhysicalAttack, targetDef).Color(suds.Normal, false); #endif var roll = Dice.RollRange(1, calcdStats.PhysicalAttack); if (roll > targetDef) { //hit! Compute damage (usually based on weapon and skill) var dmg = Dice.RollRange(1, roll + dmgMod - targetDef); //set skill timer if (skill != null) skill.Timer = skill.TimerMax; //crit calc // roll 1-100, if < critChance, CRIT! procRoll = Dice.RollPercent(); var didCrit = (procRoll <= calcdStats.CriticalChance.Scale()) ? true : false; #if DEBUG String.Format("(critChance:{0} roll:{1}) ", calcdStats.CriticalChance.Scale(), procRoll).Color(suds.Alert, false); #endif if (didCrit) { dmg *= 2; "You deliver a powerful blow! ".Color(suds.Alert, false); } //steal life from mob procRoll = Dice.RollPercent(); if (procRoll < calcdStats.LifeSteal.Scale()) { var life = (int)Math.Ceiling(Hero.Stats.MaxHealth / 15.0); dmg += life; Hero.Stats.Health = Math.Min(Hero.Stats.MaxHealth, Hero.Stats.Health + life); string.Format("You steal {0} life from your target! ", life).Color(suds.Magic, false); } //apply damage to mob target.TakeDamage(dmg, didCrit); //check mob life var h = target.GetStatBlock().Health; var mh = targetStats.MaxHealth; if (h <= 0) { var didCritOrOverkill = (h <= -0.5 * mh); target.Die(didCritOrOverkill); Hero.XP += target.GrantXP(didCritOrOverkill); //target.SetIsHostile(false); Console.WriteLine(); return; } //proc Fear & Stun procRoll = Dice.RollPercent(); if (procRoll < calcdStats.FearChance.Scale()) { "Your target is so afraid of you, it stops attacking! ".Color(suds.Fancy, false); target.SetIsHostile(false); //It's afraid, so it cowers. } procRoll = Dice.RollPercent(); if (procRoll < calcdStats.StunChance.Scale()) { "You stun your target with your powerful attack! ".Color(suds.Fancy, false); target.SetStunned(calcdStats.StunDuration); } //Hero.CurrentTarget = target; if (!Hero.CurrentTarget.GetIsHostile() && !Hero.CurrentTarget.GetIsDead()) Hero.CurrentTarget.SetIsHostile(true); } else { String.Format("You miss. ({0} vs {1})", roll, targetDef).Color(suds.Error, false); } Console.WriteLine(); }
public static void MobsAttackPlayer() { var room = Hero.CurrentRoom; var calcdStats = new StatBlock(); if (Hero.WieldState == Wielded.Dual || Hero.WieldState == Wielded.LH || Hero.WieldState == Wielded.TwoH) { var lh = Hero.LeftHand; calcdStats = Hero.Stats.AddMods(lh.CombatMods); } if (Hero.WieldState == Wielded.RH || Hero.WieldState == Wielded.Dual) { ///TODO: Implement scaling 2-hand damage nerf reduction skill for warriors? var rh = Hero.RightHand; if (Hero.LeftHand == null) calcdStats = Hero.Stats.AddMods(rh.CombatMods); else calcdStats = calcdStats.AddMods(rh.CombatMods); } int i, cnt, mAtt, procRoll; for (i = 0, cnt = room.Mobs.Count; i < cnt; i++) { if (room.Mobs[i].GetIsHostile()) { String.Format("{0} attacks you. ", room.Mobs[i].GetName()).Color(suds.Error, false); mAtt = room.Mobs[i].GetStatBlock().PhysicalAttack; var attRoll = Dice.RollRange(1, mAtt); if (attRoll > calcdStats.PhysicalDefense) { procRoll = Dice.RollPercent(); if (procRoll < calcdStats.DodgeChance.Scale(Hero.Boots.CombatMods.Dodge)) { "You dodge gracefully! ".Color(suds.Fancy); } else { var dmg = (room.Mobs[i].GetStatBlock().BaseDamage / 3 ) + Dice.RollRange(1, 3); Hero.Stats.Health -= dmg; "The attack hits!".Color(suds.Error); if (Hero.Stats.Health <= 0) Hero.Die(String.Format("You have been slain by {0}.", room.Mobs[i].GetName())); } } else { "The attack misses!".Color(suds.Normal); } } } }