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); }
public PlayerSpell(TomeSpell learnt, PlayerWitch owner) { new PlayerSpell(new Recipe(learnt.Recipe), owner, learnt.IsRepeatable()); }