/// <summary> /// Perfroms additional set up of the spell projectile based on the spell id or its derived type. /// </summary> public void Setup(Server.Entity.Spell spell, ProjectileSpellType spellType) { Spell = spell; SpellType = spellType; InitPhysicsObj(); // Runtime changes to default state ReportCollisions = true; Missile = true; AlignPath = true; PathClipped = true; IgnoreCollisions = false; if (!Spell.Name.Equals("Rolling Death")) Ethereal = false; if (SpellType == ProjectileSpellType.Bolt || SpellType == ProjectileSpellType.Streak || SpellType == ProjectileSpellType.Arc || SpellType == ProjectileSpellType.Volley || SpellType == ProjectileSpellType.Blast || WeenieClassId == 7276 || WeenieClassId == 7277 || WeenieClassId == 7279 || WeenieClassId == 7280) { PhysicsObj.DefaultScript = PlayScript.ProjectileCollision; PhysicsObj.DefaultScriptIntensity = 1.0f; } // Some wall spells don't have scripted collisions if (WeenieClassId == 7278 || WeenieClassId == 7281 || WeenieClassId == 7282 || WeenieClassId == 23144) { ScriptedCollision = false; } AllowEdgeSlide = false; // No need to send an ObjScale of 1.0f over the wire since that is the default value if (ObjScale == 1.0f) ObjScale = null; if (SpellType == ProjectileSpellType.Ring) { if (spell.Id == 3818) { DefaultScriptId = (uint)PlayScript.Explode; DefaultScriptIntensity = 1.0f; ScriptedCollision = true; } else { ScriptedCollision = false; } } // Whirling Blade spells get omega values and "align path" turned off which // creates the nice swirling animation if (WeenieClassId == 1636 || WeenieClassId == 7268 || WeenieClassId == 20979) { AlignPath = false; Omega = new Vector3(12.56637f, 0, 0); } }
public float GetProjectileScriptIntensity(ProjectileSpellType spellType) { if (spellType == ProjectileSpellType.Wall) { return(0.4f); } if (spellType == ProjectileSpellType.Ring) { if (Spell.Level == 6 || Spell.Id == 3818) { return(0.4f); } if (Spell.Level == 7) { return(1.0f); } } // Bolt, Blast, Volley, Streak and Arc all seem to use this scale // TODO: should this be based on spell level, or power of first scarab? // ie. can this use Spell.Formula.ScarabScale? switch (Spell.Level) { case 1: return(0f); case 2: return(0.2f); case 3: return(0.4f); case 4: return(0.6f); case 5: return(0.8f); case 6: case 7: case 8: return(1.0f); default: return(0f); } }
/// <summary> /// Perfroms additional set up of the spell projectile based on the spell id or its derived type. /// </summary> public void Setup(Spell spell, ProjectileSpellType spellType) { Spell = spell; SpellType = spellType; //InitPhysicsObj(); // Runtime changes to default state ReportCollisions = true; Missile = true; AlignPath = true; PathClipped = true; IgnoreCollisions = false; // FIXME: use data here if (!Spell.Name.Equals("Rolling Death")) { Ethereal = false; } if (SpellType == ProjectileSpellType.Bolt || SpellType == ProjectileSpellType.Streak || SpellType == ProjectileSpellType.Arc || SpellType == ProjectileSpellType.Volley || SpellType == ProjectileSpellType.Blast || WeenieClassId == 7276 || WeenieClassId == 7277 || WeenieClassId == 7279 || WeenieClassId == 7280) { DefaultScriptId = (uint)PlayScript.ProjectileCollision; DefaultScriptIntensity = 1.0f; } // Some wall spells don't have scripted collisions if (WeenieClassId == 7278 || WeenieClassId == 7281 || WeenieClassId == 7282 || WeenieClassId == 23144) { ScriptedCollision = false; } AllowEdgeSlide = false; // No need to send an ObjScale of 1.0f over the wire since that is the default value if (ObjScale == 1.0f) { ObjScale = null; } if (SpellType == ProjectileSpellType.Ring) { if (spell.Id == 3818) { DefaultScriptId = (uint)PlayScript.Explode; DefaultScriptIntensity = 1.0f; ScriptedCollision = true; } else { ScriptedCollision = false; } } // Projectiles with RotationSpeed get omega values and "align path" turned off which // creates the nice swirling animation if ((RotationSpeed ?? 0) != 0) { AlignPath = false; PhysicsObj.Omega = new Vector3((float)(Math.PI * 2 * RotationSpeed), 0, 0); } }