Exemple #1
0
        public float resolveAction(Data.Action action)
        {
            Entity e;

            if (!entityList.TryGetValue(action.entityId, out e))
            {
                Debug.LogError("resolveAction() - can't find entity with id " + action.entityId);
            }
            if (action is MovementAction)
            {
                if (!action.isActionSkiped())
                {
                    MovementAction movementAction = (MovementAction)action;
                    solver.resolveMovement(e, movementAction.path);
                    return(movementAction.path.Length * 0.2f);
                } // TODO else give MP
            }
            else if (action is SpellAction)
            {
                if (!action.isActionSkiped())
                {
                    SpellAction spellAction = (SpellAction)action;
                    Cell        target      = grid.GetCell(spellAction.targetCellId);
                    SpellData   spell       = DataManager.SPELL_DATA[spellAction.spellId];
                    solver.resolveSpell(spell, e, target, spellAction is QuickSpellAction);
                    return(0.5f);
                } // TODO else give AP
            }
            return(0);
        }
Exemple #2
0
    void OnGUI()
    {
        Repaint();
        EditorUtility.SetDirty(this);

        popupselction = EditorGUILayout.Popup(popupselction, currentSpellsAsArray);
        if (workingSpell == null)
        {
            if (popupselction != 0)
            {
                try
                {
                    workingSpell = SpellAction.ParseAndCreateSpell("Spells/" + currentSpellsAsArray[popupselction]);
                }
                catch
                {
                    workingSpell = null;
                }
            }
        }
        else
        {
            workingSpell.DrawEditor();

            if (GUILayout.Button("Save"))
            {
                FileStream f        = File.Open("Assets/Resources/Spells/" + currentSpellsAsArray[popupselction] + ".json", FileMode.OpenOrCreate);
                string     contents = workingSpell.convertToJSONString();
                f.Write(Encoding.ASCII.GetBytes(contents), 0, Encoding.ASCII.GetByteCount(contents));
                f.Close();
            }
        }
    }
Exemple #3
0
    void OnGUI()
    {
        Repaint();
        EditorUtility.SetDirty(this);

        popupselction = EditorGUILayout.Popup(popupselction, currentSpellsAsArray);
        if (workingSpell == null)
        {
            if (popupselction != 0)
            {
                try
                {
                    workingSpell = SpellAction.ParseAndCreateSpell("Spells/" + currentSpellsAsArray[popupselction]);
                }
                catch
                {
                    workingSpell = null;
                }
            }
        }
        else
        {
            workingSpell.DrawEditor();

            if (GUILayout.Button("Save"))
            {
                FileStream f = File.Open("Assets/Resources/Spells/" + currentSpellsAsArray[popupselction] + ".json", FileMode.OpenOrCreate);
                string contents = workingSpell.convertToJSONString();
                f.Write(Encoding.ASCII.GetBytes(contents), 0, Encoding.ASCII.GetByteCount(contents));
                f.Close();
            }
        }
    }
 private void OnCollisionEnter2D(Collision2D collision)
 {
     if (collision.gameObject.CompareTag("Spell"))
     {
         if (collision.gameObject.GetComponent <SpellActionBomb>() != null)
         {
             SpellActionBomb SpellProjectile = collision.gameObject.GetComponent <SpellActionBomb>();
             if (SpellProjectile.SpellType == Weakness)
             {
                 Life--;
             }
             if (SpellProjectile.SpellType == GreatWeakness)
             {
                 Life = 0;
             }
         }
         else
         {
             SpellAction SpellProjectile = collision.gameObject.GetComponent <SpellAction>();
             if (SpellProjectile.SpellType == Weakness)
             {
                 Life--;
             }
             if (SpellProjectile.SpellType == GreatWeakness)
             {
                 Life = 0;
             }
         }
     }
 }
Exemple #5
0
        public override void Execute(Action action)
        {
            SpellAction sp = SpellAction.ParseAndCreateSpell(actionID);

            sp.character = character;
            character.AddAction(sp);
            action();
        }
 public static void DeepCopySpellAction(SpellAction to, SpellAction from)
 {
     to.input       = from.input;
     to.targetAnim  = from.targetAnim;
     to.throwAnim   = from.throwAnim;
     to.castTime    = from.castTime;
     to.focusCost   = from.focusCost;
     to.staminaCost = from.staminaCost;
 }
Exemple #7
0
        public override void StartAttack(GameObject attackTarget)
        {
            if (attackTarget == null)
            {
                return;
            }

            if (attackTarget is GameLiving && GameServer.ServerRules.IsAllowedToAttack(this, (GameLiving)attackTarget, true) == false)
            {
                return;
            }

            if (Brain is IControlledBrain)
            {
                if ((Brain as IControlledBrain).AggressionState == eAggressionState.Passive)
                {
                    return;
                }

                GamePlayer playerowner;
                if ((playerowner = ((IControlledBrain)Brain).GetPlayerOwner()) != null)
                {
                    playerowner.Stealth(false);
                }
            }

            TargetObject = attackTarget;
            if (TargetObject.Realm == 0 || Realm == 0)
            {
                m_lastAttackTickPvE = m_CurrentRegion.Time;
            }
            else
            {
                m_lastAttackTickPvP = m_CurrentRegion.Time;
            }

            if (m_attackers.Count == 0)
            {
                if (SpellTimer == null)
                {
                    SpellTimer = new SpellAction(this);
                }

                if (!SpellTimer.IsAlive)
                {
                    SpellTimer.Start(1);
                }
            }

            if (Brain is TurretMainPetTankBrain)
            {
                base.StartAttack(TargetObject);
            }
        }
Exemple #8
0
 void OnGUI()
 {
     for (int i = 0; i < SpellEditor.currentSpells.Count; i++)
     {
         if (GUILayout.Button(SpellEditor.currentSpells[i]))
         {
             SpellEditor.workingSpell = SpellAction.ParseAndCreateSpell(("Spells/" + SpellEditor.currentSpells[i]).Replace(".txt", ""));
             GUI.FocusWindow(0);
             Close();
         }
     }
 }
Exemple #9
0
    public static SpellAction ParseAndCreateSpell(string fileName)
    {
        if (allAbilites == null)
        {
            allAbilites = new Dictionary <string, SpellAction>();
        }

        LuaFile file = new LuaFile();

        file.Setup("Spells/" + fileName);
        SpellAction newSpell = new SpellAction();

        newSpell.name         = file.GetValue("Name").ToString();
        newSpell.targetType   = (TargetType)Convert.ToInt32(file.GetValue("TargetType"));
        newSpell.targetFilter = (TargetFilter)Convert.ToInt32(file.GetValue("TargetFilter"));
        newSpell.targetRange  = (TargetRange)Convert.ToInt32(file.GetValue("TargetRange"));
        newSpell.targetAOE    = (TargetAOE)Convert.ToInt32(file.GetValue("TargetAOE"));
        if (newSpell.targetRange == TargetRange.Range)
        {
            newSpell.range = Convert.ToInt32(file.GetValue("Range"));
        }
        else
        {
            newSpell.range = 1;
        }

        Table table = (Table)file.GetValue("Events");
        Table insideTable;

        foreach (DynValue dy in table.Values)
        {
            insideTable = dy.Table;
            switch (insideTable.Get("Type").String)
            {
            case "DamageEvent":
                newSpell.protoEvents.Add(DamageEventPrototype.Builder(insideTable));
                break;

            case "SpawnEvent":
                newSpell.protoEvents.Add(SpawnEventPrototype.Builder(insideTable));
                break;

            case "BuffCastEvent":
                newSpell.protoEvents.Add(BuffCastEventPrototype.Builder(insideTable));
                break;

            default:
                break;
            }
        }
        return(newSpell);
    }
Exemple #10
0
 public void OnAbilityButtonPressed(string name)
 {
     if (allowedActions.ContainsKey(name))
     {
         currentAction = allowedActions[name];
         if (currentAction.GetType() == typeof(SpellAction))
         {
             fallbackAction = (SpellAction)currentAction;
         }
     }
     else
     {
         currentAction = allowedActions["Move"];
     }
 }
    public static void DeepCopySpell(Spell from, Spell to)
    {
        to.item_id        = from.item_id;
        to.spellType      = from.spellType;
        to.spellClass     = from.spellClass;
        to.projectile     = from.projectile;
        to.spell_effect   = from.spell_effect;
        to.particlePrefab = from.particlePrefab;

        to.spellActions = new List <SpellAction>();
        for (int i = 0; i < from.spellActions.Count; i++)
        {
            SpellAction a = new SpellAction();
            DeepCopySpellAction(a, from.spellActions[i]);
            to.spellActions.Add(a);
        }
    }
Exemple #12
0
        private static void ChatHandlers_OnSpellCast(Mobile mob, SpellAction value)
        {
            if (mob == World.Player)
            {
                _lastSpell = value;
                GameActions.Print($"Player casting {_lastSpell}");
            }

            SpellHandle spell = default;

            if (!_mobiles.TryGetValue(mob.Serial, out spell))
            {
                _mobiles.Add(mob.Serial, spell = new SpellHandle());
            }

            spell.Value = value;
        }
Exemple #13
0
    public static SpellAction ParseAndCreateSpell(string fileName)
    {
        if (allAbilites == null)
            allAbilites = new Dictionary<string, SpellAction>();

        LuaFile file = new LuaFile();
        file.Setup( "Spells/" + fileName);
        SpellAction newSpell = new SpellAction();
        newSpell.name = file.GetValue("Name").ToString();
        newSpell.targetType = (TargetType)Convert.ToInt32(file.GetValue("TargetType"));
        newSpell.targetFilter = (TargetFilter)Convert.ToInt32(file.GetValue("TargetFilter"));
        newSpell.targetRange = (TargetRange)Convert.ToInt32(file.GetValue("TargetRange"));
        newSpell.targetAOE = (TargetAOE)Convert.ToInt32(file.GetValue("TargetAOE"));
        if(newSpell.targetRange == TargetRange.Range)
        {
            newSpell.range = Convert.ToInt32(file.GetValue("Range"));
        }
        else
        {
            newSpell.range = 1;
        }

        Table table = (Table)file.GetValue("Events");
        Table insideTable;
        foreach(DynValue dy in table.Values)
        {
            insideTable = dy.Table;
            switch (insideTable.Get("Type").String)
            {
                case "DamageEvent":
                    newSpell.protoEvents.Add(DamageEventPrototype.Builder(insideTable));
                    break;
                case "SpawnEvent":
                    newSpell.protoEvents.Add(SpawnEventPrototype.Builder(insideTable));
                    break;
                case "BuffCastEvent":
                    newSpell.protoEvents.Add(BuffCastEventPrototype.Builder(insideTable));
                    break;
                default:
                    break;
            }

        }
            return newSpell;
    }
Exemple #14
0
        public static void Update(double totalMS)
        {
            if (!IsEnabled || World.Player.IsDead)
            {
                return;
            }

            if (_timer <= totalMS)
            {
                if (TargetManager.IsTargeting)
                {
                    if (mob == null)
                    {
                        return;
                    }

                    SpellAction spell = SpellManager.LastSpell;

                    if (spell == SpellAction.Unknown)
                    {
                        spell = (SpellAction)GameActions.LastSpellIndexCursor;
                    }

                    int h1 = 0;
                    int h2 = 0;

                    if (!mob.IsDead && spell == SpellAction.GreaterHeal && (mob.IsPoisoned && mob.Hits < (h1 = _rand.Next(65, 80)) || mob.Hits < (h2 = _rand.Next(40, 70))))
                    {
                        GameActions.Print($"{h2}");
                        TargetManager.Target(mob);
                        _timer += 250;
                    }
                }
            }

            if (mob != null)
            {
                mob = null;
            }
        }
Exemple #15
0
    //Function called from the Sort X Actions functions to check and see if there are more spells recharging than we're able to add
    private bool CanAddSpellToList(SpellAction spellToCheck_)
    {
        //Int to track how many charges of this spell are in the spell actions list. Starts at the number of charges for the current spell
        int spellCharges = spellToCheck_.spellCharges;

        //Looping through all of the spells currently in the spell actions list
        foreach (SpellAction spell in this.allSpellActions)
        {
            //If this current spell is the same as the one we're sorting, we add the number of charges to the current total
            if (spell.actionName == spellToCheck_.actionName)
            {
                spellCharges += spell.spellCharges;
            }
        }

        //Int to track how many charges of this spell are currently recharging
        int spellsRecharging = 0;

        //Looping through all of the recharging spells to see if any match the one we're sorting
        foreach (SpellRecharge spell in this.rechargingSpells)
        {
            //If this current spell is the same as the one we're sorting, we add it to the total
            if (spell.spellThatsCharging.actionName == spellToCheck_.actionName)
            {
                spellsRecharging += 1;
            }
        }

        //If there are more spell charges than recharging, this spell can be added to the actions list
        if (spellsRecharging < spellCharges)
        {
            return(true);
        }
        //If there are more spells recharging than available, we shouldn't add it to the action list
        else
        {
            return(false);
        }
    }
Exemple #16
0
		public override void StartAttack(GameObject attackTarget)
		{
			if (attackTarget == null)
				return;

			if (attackTarget is GameLiving && GameServer.ServerRules.IsAllowedToAttack(this, (GameLiving)attackTarget, true) == false)
				return;

			if (Brain is IControlledBrain)
			{
				if ((Brain as IControlledBrain).AggressionState == eAggressionState.Passive)
					return;
				GamePlayer playerowner;
				if ((playerowner = ((IControlledBrain)Brain).GetPlayerOwner()) != null)
					playerowner.Stealth(false);
			}

			TargetObject = attackTarget;
			if (TargetObject.Realm == 0 || Realm == 0)
				m_lastAttackTickPvE = m_CurrentRegion.Time;
			else
				m_lastAttackTickPvP = m_CurrentRegion.Time;

			if (m_attackers.Count == 0)
			{
				if (SpellTimer == null)
					SpellTimer = new SpellAction(this);
				if (!SpellTimer.IsAlive)
					SpellTimer.Start(1);
			}

			if (Brain is TurretMainPetTankBrain)
			{
				base.StartAttack(TargetObject);
			}
		}
Exemple #17
0
        public static SpellCircle GetCircle(SpellAction spell)
        {
            switch (spell)
            {
            case SpellAction.Clumsy:
            case SpellAction.CreateFood:
            case SpellAction.Feeblemind:
            case SpellAction.MiniHeal:
            case SpellAction.MagicArrow:
            case SpellAction.NightSight:
            case SpellAction.ReactiveArmor:
            case SpellAction.Weaken:
                return(SpellCircle.First);

            case SpellAction.Agility:
            case SpellAction.Cunning:
            case SpellAction.Cure:
            case SpellAction.Harm:
            case SpellAction.MagicTrap:
            case SpellAction.MagicUntrap:
            case SpellAction.Protection:
            case SpellAction.Strength:
                return(SpellCircle.Second);

            case SpellAction.Bless:
            case SpellAction.Fireball:
            case SpellAction.MagicLock:
            case SpellAction.Poison:
            case SpellAction.Telekinesis:
            case SpellAction.Teleport:
            case SpellAction.Unlock:
            case SpellAction.WallOfStone:
                return(SpellCircle.Third);

            case SpellAction.ArchCure:
            case SpellAction.ArchProtection:
            case SpellAction.Curse:
            case SpellAction.FireField:
            case SpellAction.GreaterHeal:
            case SpellAction.Lightning:
            case SpellAction.ManaDrain:
            case SpellAction.Recall:
                return(SpellCircle.Fourth);

            case SpellAction.BladeSpirits:
            case SpellAction.DispelField:
            case SpellAction.Incognito:
            case SpellAction.MagicReflection:
            case SpellAction.MindBlast:
            case SpellAction.Paralyze:
            case SpellAction.PoisonField:
            case SpellAction.SummonCreature:
                return(SpellCircle.Fifth);

            case SpellAction.Dispel:
            case SpellAction.EnergyBolt:
            case SpellAction.Explosion:
            case SpellAction.Invisibility:
            case SpellAction.Mark:
            case SpellAction.MassCurse:
            case SpellAction.ParalyzeField:
            case SpellAction.Reveal:
                return(SpellCircle.Sixth);

            case SpellAction.ChainLightning:
            case SpellAction.EnergyField:
            case SpellAction.Flamestrike:
            case SpellAction.GateTravel:
            case SpellAction.ManaVampire:
            case SpellAction.MassDispel:
            case SpellAction.MeteorSwarm:
            case SpellAction.Polymorph:
                return(SpellCircle.Seventh);

            case SpellAction.Earthquake:
            case SpellAction.EnergyVortex:
            case SpellAction.Ressurection:
            case SpellAction.AirElemental:
            case SpellAction.SummonDaemon:
            case SpellAction.EarthElemental:
            case SpellAction.FireElemental:
            case SpellAction.WaterElemental:
                return(SpellCircle.Eighth);
            }
            throw new InvalidOperationException();
        }
Exemple #18
0
    void SpellAction(Action slot)
    {
        if (characterStats.currentStamina < slot.staminaCost)
        {
            return;
        }

        if (slot.spellClass != inventoryManager.currentSpell.Instance.spellClass ||
            characterStats.currentMana < slot.manaCost)
        {
            //Failed to cast spell
            Debug.Log("Cant cast spell!");
            PlayAnimation(StaticStrings.animState_CantCastSpell, slot.mirror);

            return;
        }

        ActionInput inp = actionManager.GetActionInput(this);

        if (inp == ActionInput.lb)
        {
            inp = ActionInput.rb;
        }
        if (inp == ActionInput.lt)
        {
            inp = ActionInput.rt;
        }

        Spell       spellInst = inventoryManager.currentSpell.Instance;
        SpellAction spellSlot = spellInst.GetAction(spellInst.actions, inp);

        if (spellSlot == null)
        {
            Debug.Log("CAN'T FIND SPELL SLOT");
            return;
        }

        SpellEffectManager.Instance.UseSpellEffect(spellInst.spellEffect, this);

        isSpellCasting    = true;
        spellCastTime     = 0;
        max_SpellCastTime = spellSlot.castTime;
        spellTargetAnim   = spellSlot.throwAnim;
        spellIsMirorred   = slot.mirror;
        currentSpellType  = spellInst.spellType;

        string targetAnim = spellSlot.targetAnim;

        if (spellIsMirorred)
        {
            targetAnim += StaticStrings._leftPrefix;
        }
        else
        {
            targetAnim += StaticStrings._rightPrefix;
        }

        projectileCandidate = inventoryManager.currentSpell.Instance.projectile;
        //If spellIsMirorred == true --> Left hand
        inventoryManager.CreateSpellParticle(inventoryManager.currentSpell, spellIsMirorred, (spellInst.spellType == SpellType.Looping));
        animator.SetBool(StaticStrings.animParam_SpellCasting, true);
        animator.SetBool(StaticStrings.animParam_Mirror, slot.mirror);
        PlayAnimation(targetAnim);

        currentManaCost    = spellSlot.manaCost;
        currentStaminaCost = spellSlot.staminaCost;
        animHook.InitIKForBreathSpell(spellIsMirorred);

        if (spellCastStart != null)
        {
            spellCastStart();
        }
    }
Exemple #19
0
 //Function called from SpellAction.cs when a spell is used
 public void StartSpellRecharge(SpellAction spellUsed_)
 {
     this.rechargingSpells.Add(new SpellRecharge(spellUsed_, spellUsed_.hoursUntilRecharged));
 }
Exemple #20
0
 public void OnStartTurn()
 {
     actionPoints   = 3;
     currentAction  = allowedActions["Move"];
     fallbackAction = (SpellAction)allowedActions["basic"];
 }
Exemple #21
0
 void OnDestroy()
 {
     workingSpell = null;
 }
Exemple #22
0
 private void Awake()
 {
     CastLine    = new List <Cell> ();
     objects     = FindObjectOfType <ObjectsHolder> ();
     spellAction = FindObjectOfType <SpellAction> ();
 }
Exemple #23
0
 void OnDestroy()
 {
     workingSpell = null;
 }
Exemple #24
0
 //Constructor for this class
 public SpellRecharge(SpellAction spell_, int hours_)
 {
     this.spellThatsCharging = spell_;
     this.hoursRemaining     = hours_;
 }
		private void StartMeleeAttackTimer()
		{
			if (m_attackers.Count == 0)
			{
				if (SpellTimer == null)
					SpellTimer = new SpellAction(this);

				if (!SpellTimer.IsAlive)
					SpellTimer.Start(1);
			}
		}
Exemple #26
0
 public void OnStartTurn()
 {
     actionPoints = 3;
     currentAction = allowedActions["Move"];
     fallbackAction = (SpellAction)allowedActions["basic"];
 }
Exemple #27
0
    void SpellAction(Action slot)
    {
        if (characterStats._stamina < slot.staminaCost)
        {
            return;
        }
        if (slot.spellClass != inventoryManager.currentSpell.instance.spellClass || characterStats._focus < slot.focusCost)
        {
            PlayAnimation("cant_spell", slot.mirror);
            return;
        }

        ActionInput inp = actionManager.GetActionInput(this);

        if (inp == ActionInput.lb)
        {
            inp = ActionInput.rb;
        }
        if (inp == ActionInput.lt)
        {
            inp = ActionInput.rt;
        }

        Spell       s_inst = inventoryManager.currentSpell.instance;
        SpellAction s_slot = s_inst.GetAction(s_inst.spellActions, inp);

        if (s_slot == null)
        {
            return;
        }

        SpellEffectManager.singleton.UseSpellEffect(s_inst.spell_effect, this);

        isSpellCasting   = true;
        spellCastTime    = 0;
        maxSpellCastTime = s_slot.castTime;
        spellTargetAnim  = s_slot.throwAnim;
        spellIsMirrored  = slot.mirror;
        curSpellType     = s_inst.spellType;

        string targetAnim = s_slot.targetAnim;

        if (spellIsMirrored)
        {
            targetAnim += StaticStrings._l;
        }
        else
        {
            targetAnim += StaticStrings._r;
        }

        projectileCandidate = inventoryManager.currentSpell.instance.projectile;
        inventoryManager.CreateSpellParticle(inventoryManager.currentSpell, spellIsMirrored, s_inst.spellType == SpellType.looping);

        anim.SetBool(StaticStrings.spellCasting, true);
        anim.SetBool(StaticStrings.mirror, slot.mirror);
        anim.CrossFade(targetAnim, 0.2f);

        curFocusCost   = s_slot.focusCost;
        curStaminaCost = s_slot.staminaCost;

        a_hook.InitIKForBreathSpell(spellIsMirrored);

        if (spellCast_Start != null)
        {
            spellCast_Start();
        }
    }
Exemple #28
0
 public void OnAbilityButtonPressed(string name)
 {
     if (allowedActions.ContainsKey(name))
     {
         currentAction = allowedActions[name];
         if (currentAction.GetType() == typeof(SpellAction))
         {
             fallbackAction = (SpellAction)currentAction;
         }
     }
     else
     {
         currentAction = allowedActions["Move"];
     }
 }