mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-11-04 09:46:23 +01:00 
			
		
		
		
	* Part 1 Removing closing tags when no HTML or other output comes after the last PHP codeblock. * Further removals * nothing --------- Co-authored-by: slawkens <slawkens@gmail.com>
		
			
				
	
	
		
			485 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			485 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
/**#@+
 | 
						|
 * @version 0.0.7
 | 
						|
 * @since 0.0.7
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * @package POT
 | 
						|
 * @version 0.1.3
 | 
						|
 * @author Wrzasq <wrzasq@gmail.com>
 | 
						|
 * @copyright 2007 - 2008 (C) by Wrzasq
 | 
						|
 * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Wrapper for spell info.
 | 
						|
 * 
 | 
						|
 * @package POT
 | 
						|
 * @version 0.1.3
 | 
						|
 * @property-read int $type Spell type.
 | 
						|
 * @property-read string $name Spell name.
 | 
						|
 * @property-read int $id Spell ID.
 | 
						|
 * @property-read string $words Spell formula.
 | 
						|
 * @property-read bool $agressive Does spell marks action as an attack.
 | 
						|
 * @property-read int $charges Rune charges count.
 | 
						|
 * @property-read int $level Required level.
 | 
						|
 * @property-read int $magicLevel Required magic level.
 | 
						|
 * @property-read int $mana Mana usage.
 | 
						|
 * @property-read int $soul Soul points usage.
 | 
						|
 * @property-read bool $hasParams Does spell has any arguments.
 | 
						|
 * @property-read bool $enabled Is spell enabled.
 | 
						|
 * @property-read bool $farUseAllowed Can the spell be used from distance.
 | 
						|
 * @property-read bool $premium Does spell requires PACC.
 | 
						|
 * @property-read bool $learnNeeded Does the spell needs to be learned.
 | 
						|
 * @property-read OTS_ItemType|null $conjure Conjure item type.
 | 
						|
 * @property-read OTS_ItemType|null $reagent Item required to cast this spell.
 | 
						|
 * @property-read int $conjuresCount Amount of items created with conjure cast.
 | 
						|
 * @property-read array $vocations List of vocations allowed to use.
 | 
						|
 */
 | 
						|
class OTS_Spell
 | 
						|
{
 | 
						|
/**
 | 
						|
 * Spell type.
 | 
						|
 * 
 | 
						|
 * @var int
 | 
						|
 */
 | 
						|
    private $type;
 | 
						|
 | 
						|
/**
 | 
						|
 * Spell info resource.
 | 
						|
 * 
 | 
						|
 * @var DOMElement
 | 
						|
 */
 | 
						|
    private $element;
 | 
						|
 | 
						|
/**
 | 
						|
 * Sets spell info.
 | 
						|
 * 
 | 
						|
 * @param int $type Spell type.
 | 
						|
 * @param DOMElement $spell Spell info.
 | 
						|
 */
 | 
						|
    public function __construct($type, DOMElement $spell)
 | 
						|
    {
 | 
						|
        $this->type = $type;
 | 
						|
        $this->element = $spell;
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns spell type.
 | 
						|
 * 
 | 
						|
 * @return int Spell type.
 | 
						|
 */
 | 
						|
    public function getType()
 | 
						|
    {
 | 
						|
        return $this->type;
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns spell name.
 | 
						|
 * 
 | 
						|
 * @return string Name.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getName()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('name');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns rune item id.
 | 
						|
 * 
 | 
						|
 * @return int Rune item ID.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getID()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('id');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns spell formula.
 | 
						|
 * 
 | 
						|
 * @return string Formula.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getWords()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('words');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if spell is threated as unfriendly by other creatures.
 | 
						|
 * 
 | 
						|
 * @version 0.1.0
 | 
						|
 * @since 0.1.0
 | 
						|
 * @return bool Is spell aggressive.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function isAggressive()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('aggressive') != '0';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * @version 0.1.0
 | 
						|
 * @return bool Is spell aggressive.
 | 
						|
 * @deprecated 0.1.0 Use isAggressive().
 | 
						|
 */
 | 
						|
    public function isAggresive()
 | 
						|
    {
 | 
						|
        return $this->isAggressive();
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Number of rune charges.
 | 
						|
 * 
 | 
						|
 * @return int Rune charges.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getCharges()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('charges');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Level required for use.
 | 
						|
 * 
 | 
						|
 * @return int Required level.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getLevel()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('lvl');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Magic level required to cast.
 | 
						|
 * 
 | 
						|
 * @return int Required magic level.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getMagicLevel()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('maglv');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Mana cost.
 | 
						|
 * 
 | 
						|
 * @return int Mana usage.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getMana()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('mana');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Soul points cost.
 | 
						|
 * 
 | 
						|
 * @return int Soul points usage.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getSoul()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('soul');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if spell has parameter.
 | 
						|
 * 
 | 
						|
 * @return bool True if spell takes a parameter.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function hasParams()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('params') == '1';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if spell is enabled.
 | 
						|
 * 
 | 
						|
 * @return bool Is spell enabled.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function isEnabled()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('enabled') != '0';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if distance use allowed.
 | 
						|
 * 
 | 
						|
 * @return bool Is it possible to use this spell from distance.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function isFarUseAllowed()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('allowfaruse') == '1';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if spell requires PACC.
 | 
						|
 * 
 | 
						|
 * @return bool Is spell only for Premium Account.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function isPremium()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('prem') == '1';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Checks if spell needs to be learned.
 | 
						|
 * 
 | 
						|
 * @return bool Does this spell need to be learned.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function isLearnNeeded()
 | 
						|
    {
 | 
						|
        return $this->element->getAttribute('needlearn') == '1';
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * @return int Item ID.
 | 
						|
 * @deprecated 0.1.0 Use getConjure()->getId().
 | 
						|
 */
 | 
						|
    public function getConjureId()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('conjureId');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns item type of conjured item.
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * Note: You need to have global items list resource loaded in order to use this method.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * @version 0.1.0
 | 
						|
 * @since 0.1.0
 | 
						|
 * @return OTS_ItemType|null Returns item type of conjure item (null if not exists).
 | 
						|
 * @throws E_OTS_NotLoaded When there is no global items list available.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getConjure()
 | 
						|
    {
 | 
						|
        return POT::getInstance()->getItemsList()->getItemType( (int) $this->element->getAttribute('conjureId') );
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * @return int Reagent ID.
 | 
						|
 * @deprecated 0.1.0 Use getReagent()->getId().
 | 
						|
 */
 | 
						|
    public function getReagentId()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('reagentId');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns item type of reagent item.
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * Note: You need to have global items list resource loaded in order to use this method.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * @version 0.1.0
 | 
						|
 * @since 0.1.0
 | 
						|
 * @return OTS_ItemType|null Returns item type of reagent item (null if not exists).
 | 
						|
 * @throws E_OTS_NotLoaded When there is no global items list available.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getReagent()
 | 
						|
    {
 | 
						|
        return POT::getInstance()->getItemsList()->getItemType( (int) $this->element->getAttribute('reagentId') );
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns amount of items conjured by this spell.
 | 
						|
 * 
 | 
						|
 * @return int Items count.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getConjureCount()
 | 
						|
    {
 | 
						|
        return (int) $this->element->getAttribute('conjureCount');
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns list of vocations that are allowed to learn this spell.
 | 
						|
 * 
 | 
						|
 * @return array List of vocation names.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function getVocations()
 | 
						|
    {
 | 
						|
	    global $config;
 | 
						|
	    if(!isset($config['vocation_ids']))
 | 
						|
		    $config['vocations_ids'] = array_flip($config['vocations']);
 | 
						|
	
 | 
						|
	    $vocations = array();
 | 
						|
 | 
						|
        foreach( $this->element->getElementsByTagName('vocation') as $vocation)
 | 
						|
        {
 | 
						|
	        if($vocation->getAttribute('id') != NULL) {
 | 
						|
		        $voc_id = $vocation->getAttribute('id');
 | 
						|
	        }
 | 
						|
	        else {
 | 
						|
		        $voc_id = $config['vocations_ids'][$vocation->getAttribute('name')];
 | 
						|
	        }
 | 
						|
	
 | 
						|
	        $vocations[] = $voc_id;
 | 
						|
        }
 | 
						|
 | 
						|
        return $vocations;
 | 
						|
    }
 | 
						|
	
 | 
						|
	public function getVocationsFull()
 | 
						|
	{
 | 
						|
	    global $config;
 | 
						|
	    if(!isset($config['vocation_ids']))
 | 
						|
	        $config['vocations_ids'] = array_flip($config['vocations']);
 | 
						|
	    
 | 
						|
		$vocations = array();
 | 
						|
		
 | 
						|
		foreach( $this->element->getElementsByTagName('vocation') as $vocation)
 | 
						|
		{
 | 
						|
		    $show = $vocation->getAttribute('showInDescription');
 | 
						|
            if($vocation->getAttribute('id') != NULL) {
 | 
						|
	            $voc_id = $vocation->getAttribute('id');
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                $voc_id = $config['vocations_ids'][$vocation->getAttribute('name')];
 | 
						|
            }
 | 
						|
		    
 | 
						|
		    $vocations[$voc_id] = strlen($show) == 0 || $show != '0';
 | 
						|
		}
 | 
						|
		
 | 
						|
		return $vocations;
 | 
						|
	}
 | 
						|
/**
 | 
						|
 * Creates conjure item.
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * Note: You need to have global items list resource loaded in order to use this method.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * @version 0.1.0
 | 
						|
 * @since 0.1.0
 | 
						|
 * @return OTS_Item Conjured item.
 | 
						|
 * @throws E_OTS_NotLoaded When there is no global items list available.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function createConjure()
 | 
						|
    {
 | 
						|
        $item = $this->getConjure()->createItem();
 | 
						|
        $item->setCount( $this->getConjureCount() );
 | 
						|
        return $item;
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Magic PHP5 method.
 | 
						|
 * 
 | 
						|
 * @version 0.1.0
 | 
						|
 * @since 0.1.0
 | 
						|
 * @param string $name Property name.
 | 
						|
 * @return mixed Property value.
 | 
						|
 * @throws E_OTS_NotLoaded When there is no global items list available.
 | 
						|
 * @throws OutOfBoundsException For non-supported properties.
 | 
						|
 * @throws DOMException On DOM operation error.
 | 
						|
 */
 | 
						|
    public function __get($name)
 | 
						|
    {
 | 
						|
        switch($name)
 | 
						|
        {
 | 
						|
            case 'type':
 | 
						|
                return $this->getType();
 | 
						|
 | 
						|
            case 'name':
 | 
						|
                return $this->getName();
 | 
						|
 | 
						|
            case 'id':
 | 
						|
                return $this->getId();
 | 
						|
 | 
						|
            case 'words':
 | 
						|
                return $this->getWords();
 | 
						|
 | 
						|
            case 'aggressive':
 | 
						|
                return $this->isAggressive();
 | 
						|
 | 
						|
            case 'charges':
 | 
						|
                return $this->getCharges();
 | 
						|
 | 
						|
            case 'level':
 | 
						|
                return $this->getLevel();
 | 
						|
 | 
						|
            case 'magicLevel':
 | 
						|
                return $this->getMagicLevel();
 | 
						|
 | 
						|
            case 'mana':
 | 
						|
                return $this->getMana();
 | 
						|
 | 
						|
            case 'soul':
 | 
						|
                return $this->getSoul();
 | 
						|
 | 
						|
            case 'hasParams':
 | 
						|
                return $this->hasParams();
 | 
						|
 | 
						|
            case 'enabled':
 | 
						|
                return $this->isEnabled();
 | 
						|
 | 
						|
            case 'farUseAllowed':
 | 
						|
                return $this->isFarUseAllowed();
 | 
						|
 | 
						|
            case 'premium':
 | 
						|
                return $this->isPremium();
 | 
						|
 | 
						|
            case 'learnNeeded':
 | 
						|
                return $this->isLearnNeeded();
 | 
						|
 | 
						|
            case 'conjure':
 | 
						|
                return $this->getConjure();
 | 
						|
 | 
						|
            case 'reagent':
 | 
						|
                return $this->getReagent();
 | 
						|
 | 
						|
            case 'conjuresCount':
 | 
						|
                return $this->getConjuresCount();
 | 
						|
 | 
						|
            case 'vocations':
 | 
						|
                return $this->getVocations();
 | 
						|
 | 
						|
            default:
 | 
						|
                throw new OutOfBoundsException();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
/**
 | 
						|
 * Returns string representation of XML.
 | 
						|
 * 
 | 
						|
 * <p>
 | 
						|
 * If any display driver is currently loaded then it uses it's method. Otherwise just returns spell XML format.
 | 
						|
 * </p>
 | 
						|
 * 
 | 
						|
 * @version 0.1.3
 | 
						|
 * @since 0.1.0
 | 
						|
 * @return string String representation of object.
 | 
						|
 */
 | 
						|
    public function __toString()
 | 
						|
    {
 | 
						|
        $ots = POT::getInstance();
 | 
						|
 | 
						|
        // checks if display driver is loaded
 | 
						|
        if( $ots->isDataDisplayDriverLoaded() )
 | 
						|
        {
 | 
						|
            return $ots->getDataDisplayDriver()->displaySpell($this);
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->element->ownerDocument->saveXML($this->element);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
/**#@-*/
 |