All pastes #1242515 Raw Edit

Someone

public text v1 · immutable
#1242515 ·published 2008-11-01 18:25 UTC
rendered paste body
/*
 *  The Mana World Server
 *  Copyright 2004 The Mana World Development Team
 *
 *  This file is part of The Mana World.
 *
 *  The Mana World is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  The Mana World is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with The Mana World; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ifndef _TMWSERV_MAGIC
#define _TMWSERV_MAGIC

#include <string>
#include <list>

class Script;
class Being;

struct rune 
{
    int id;
    std::string name;
    int slots;
    int cost;
};

struct effectRune : rune
{
    int level;
    int element;
    int damage;
};

enum spellType
{
    SPELL_CAST = 0,
    SPELL_TARGET,
    SPELL_AOE
}

struct applicationRune : rune
{
    spellType type;
    char enchanementLimit = 3;
    Script *script;
    std::list<int> allowedElements;
    std::list<int> disallowedEnchancements;
};

struct enhancementRune : rune
{
    std::list<int> allowedElements;
    std::list<int> disallowedEnchancements;
};

class Spells
{
    public:
       Spells();
       ~Spells();

       /**
        * Returns true if the spell passed to it is possible
        */
       bool isValid(int effect, int application, int e1 = 0, int e2 = 0, int e3 = 0);

       /**
        * Calls the Lua script for a certain spell
        */

       bool cast(being* caster,
             int effect, int application, int e1 = 0, int e2 = 0, int e3 = 0);

       bool cast(being* caster, being* target,
             int effect, int application, int e1 = 0, int e2 = 0, int e3 = 0);

       bool cast(being* caster, int x, int y,
             int effect, int application, int e1 = 0, int e2 = 0, int e3 = 0);
       /**
        * Modifies agruments passed to it to get spell info
        */
       bool spellInfo(int &slots, int &cost, int effect, int application, int e1 = 0, int e2 = 0, int e3 = 0);

    private:
       
       effectRune* findEffectRune(int id);
       applicationRune* findApplicationRune(int id);
       findEnhancementRune* fineEnhancementRune(int id);

       std::list<effectRune*> effectRunes;
       std::list<applicationRune*> applicationRunes;
       std::list<enhancementRune*> enhancementRunes;
};

#endif