Beispiel #1
0
        private void DoLearn(PlayerWitch p, TomeSpell spell)
        {
            int index = _tome.IndexOf(spell);

            if (p.Inventory.Delta[0] < index * READ_AHEAD_COST)
            {
                throw new GameException("Not enough ingredients to learn " + spell.Id);
            }
            for (int i = 0; i < index; ++i)
            {
                _tomeStockGain[i]    += READ_AHEAD_COST;
                p.Inventory.Delta[0] -= READ_AHEAD_COST;
            }
            PlayerSpell learnt = new PlayerSpell(spell, p);

            p.Spells.Add(learnt);

            int maxToGet       = MAX_SPACE - p.Inventory.GetTotal();
            int ingredientsGot = Math.Min(maxToGet, spell.GetStock());

            p.Inventory.Delta[0] += ingredientsGot;

            _learntSpells.Add(spell);

            EventData e = new EventData();

            e.Type      = EventData.LEARN;
            e.PlayerIdx = p.Index;
            e.SpellId   = spell.Id;
            e.ResultId  = learnt.Id;
            e.TomeIdx   = index;
            e.Acquired  = ingredientsGot;
            e.Lost      = spell.GetStock() - ingredientsGot;
            _viewerEvents.Add(e);
        }
Beispiel #2
0
 public PlayerSpell(TomeSpell learnt, PlayerWitch owner)
 {
     new PlayerSpell(new Recipe(learnt.Recipe), owner, learnt.IsRepeatable());
 }