• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!
  • 2026 staff recruitment is open! Check it out and consider applying!

spells for tfs 0.3.6 znote aac

mirak sebata

New Member
Joined
Dec 6, 2017
Messages
135
Reaction score
0
hi i want to edit my website with spells that i made in my ot, but on site it doesnt show vocations here's my picture
 

Attachments

Solution
here it is spells.xml from my ot server

Thanks;
And here is the spells.php fix:
PHP:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';

// Loading spell list
$spellsCache = new Cache('engine/cache/spells');
if (user_logged_in() && is_admin($user_data)) {
    if (isset($_GET['update'])) {
        echo "<p><strong>Logged in as admin, loading engine/XML/spells.xml file and updating cache.</strong></p>";
        // SPELLS XML TO PHP ARRAY
        $spellsXML = simplexml_load_file("engine/XML/spells.xml");
        if ($spellsXML !== false) {
            $types = array();
            $type_attr = array();
            $groups = array();

            // This empty array will eventually contain all spells grouped by...
Hello Mirak,

I don't mean to be rude but you should just use google for such issues, we're not going to spoonfeed you with solutions, this is a development forum.

This will tell you how to fix your issue: HTML Tables

Check the examples, you have exactly the same tables in your page, it's easy to solve, take your time and learn.

Kindest Regards,
Okke
 
ok no problem

i tried alot of things , but what is difference between spell.php and spells.php in uniserver folder... in spell.php its saying this look and spells.php is not correct i searched everywhere
 

Attachments

  • vocation show.jpg
    vocation show.jpg
    206.1 KB · Views: 13 · VirusTotal
Last edited by a moderator:
Could you upload your spells.xml file so I can have a look at it?
This might be my mistake, not sure if I tested the spells parser with TFS 0.3.6 in mind.
 
here it is spells.xml from my ot server

Thanks;
And here is the spells.php fix:
PHP:
<?php require_once 'engine/init.php'; include 'layout/overall/header.php';

// Loading spell list
$spellsCache = new Cache('engine/cache/spells');
if (user_logged_in() && is_admin($user_data)) {
    if (isset($_GET['update'])) {
        echo "<p><strong>Logged in as admin, loading engine/XML/spells.xml file and updating cache.</strong></p>";
        // SPELLS XML TO PHP ARRAY
        $spellsXML = simplexml_load_file("engine/XML/spells.xml");
        if ($spellsXML !== false) {
            $types = array();
            $type_attr = array();
            $groups = array();

            // This empty array will eventually contain all spells grouped by type and indexed by spell name
            $spells = array();

            // Loop through each XML spell object
            foreach ($spellsXML as $type => $spell) {
                // Get spell types
                if (!in_array($type, $types)) {
                    $types[] = $type;
                    $type_attr[$type] = array();
                }
                // Get spell attributes
                $attributes = array();
                // Extract attribute values from the XML object and store it in a more manage friendly way $attributes
                foreach ($spell->attributes() as $aName => $aValue)
                    $attributes["$aName"] = "$aValue";
                // Remove unececsary attributes
                if (isset($attributes['script'])) unset($attributes['script']);
                if (isset($attributes['spellid'])) unset($attributes['spellid']);
                //if (isset($attributes['id'])) unset($attributes['id']);
                //if (isset($attributes['conjureId'])) unset($attributes['conjureId']);
                if (isset($attributes['function'])) unset($attributes['function']);
                // Populate type attributes
                foreach (array_keys($attributes) as $attr) {
                    if (!in_array($attr, $type_attr[$type]))
                        $type_attr[$type][] = $attr;
                }
                // Get spell groups
                if (isset($attributes['group'])) {
                    if (!in_array($attributes['group'], $groups))
                        $groups[] = $attributes['group'];
                }
                // Get spell vocations
                $vocations = array();
                foreach ($spell->vocation as $vocation) {
                    foreach ($vocation->attributes() as $attributeName => $attributeValue) {
                        if ("$attributeName" == "name") {
                            $vocId = vocation_name_to_id("$attributeValue");
                            $vocations[] = ($vocId !== false) ? $vocId : "$attributeValue";
                        } elseif ("$attributeName" == "id") {
                            $vocations[] = (int)"$attributeValue";
                        }
                    }
                }
                // Exclude monster spells (Monster spells looks like this on the ORTS data pack)
                $words = (isset($attributes['words'])) ? $attributes['words'] : false;
                // Also exclude "house spells" such as aleta sio.
                $name = (isset($attributes['name'])) ? $attributes['name'] : false;
                if (substr($words, 0, 3) !== '###' && substr($name, 0, 5) !== 'House') {
                    // Build full spell list where the spell name is the key to the spell array.
                    $spells[$type][$name] = array('vocations' => $vocations);
                    // Populate spell array with potential relevant attributes for the spell type
                    foreach ($type_attr[$type] as $att)
                        $spells[$type][$name][$att] = (isset($attributes[$att])) ? $attributes[$att] : false;
                }
            }
            // Sort the spell list properly
            foreach (array_keys($spells) as $type) {
                usort($spells[$type], function ($a, $b) {
                    if (isset($a['lvl']))
                        return $a['lvl'] - $b['lvl'];
                    if (isset($a['maglv']))
                        return $a['maglv'] - $b['maglv'];
                    return -1;
                });
            }
            $spellsCache->setContent($spells);
            $spellsCache->save();
        } else {
            echo "<p><strong>Failed to load engine/XML/spells.xml file.</strong></p>";
        }
    } else {
        $spells = $spellsCache->load();
        ?>
        <form action="">
            <input type="submit" name="update" value="Generate new cache">
        </form>
        <?php
    }
    // END SPELLS XML TO PHP ARRAY
} else {
    $spells = $spellsCache->load();
}
// End loading spell list

if ($spells) {
    // Preparing data
    $configVoc = $config['vocations'];
    $types = array_keys($spells);
    $itemServer = 'http://'.$config['shop']['imageServer'].'/';

    // Filter spells by vocation
    $getVoc = (isset($_GET['vocation'])) ? getValue($_GET['vocation']) : 'all';
    if ($getVoc !== 'all') {
        $getVoc = (int)$getVoc;
        foreach ($types as $type)
            foreach ($spells[$type] as $name => $spell)
                if (!empty($spell['vocations']))
                    if (!in_array($getVoc, $spell['vocations']))
                        unset($spells[$type][$name]);
    }

    // Render HTML
    ?>

    <h1 id="spells">Spells<?php if ($getVoc !== 'all') echo ' ('.$configVoc[$getVoc]['name'].')';?></h1>

    <form action="#spells" class="filter_spells">
        <label for="vocation">Filter vocation:</label>
        <select id="vocation" name="vocation">
            <option value="all">All</option>
            <?php foreach ($config['vocations'] as $id => $vocation): ?>
                <option value="<?php echo $id; ?>" <?php if ($getVoc === $id) echo "selected"; ?>><?php echo $vocation['name']; ?></option>
            <?php endforeach; ?>
        </select>
        <input type="submit" value="Search">
    </form>

    <h2>Spell types:</h2>
    <ul>
        <?php foreach ($types as $type): ?>
        <li><a href="#spell_<?php echo $type; ?>"><?php echo ucfirst($type); ?></a></li>
        <?php endforeach; ?>
    </ul>

    <h2 id="spell_instant">Instant Spells</h2>
    <a href="#spells">Jump to top</a>
    <table class="table tbl-hover">
        <tbody>
            <tr class="yellow">
                <td>Name</td>
                <td>Words</td>
                <td>Level</td>
                <td>Mana</td>
                <td>Vocations</td>
            </tr>
            <?php foreach ($spells['instant'] as $spell): ?>
            <tr>
                <td><?php echo $spell['name']; ?></td>
                <td><?php echo $spell['words']; ?></td>
                <td><?php echo $spell['lvl']; ?></td>
                <td><?php echo $spell['mana']; ?></td>
                <td><?php
                if (!empty($spell['vocations'])) {
                    $names = array();
                    foreach ($spell['vocations'] as $id) {
                        if (isset($configVoc[$id]))
                            $names[] = $configVoc[$id]['name'];
                    }
                    echo implode(',<br>', $names);
                }
                ?></td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>

    <h2 id="spell_rune">Magical Runes</h2>
    <a href="#spells">Jump to top</a>
    <table class="table tbl-hover">
        <tbody>
            <tr class="yellow">
                <td>Name</td>
                <td>Level</td>
                <td>Magic Level</td>
                <td>Image</td>
                <td>Vocations</td>
            </tr>
            <?php foreach ($spells['rune'] as $spell): ?>
            <tr>
                <td><?php echo $spell['name']; ?></td>
                <td><?php echo $spell['lvl']; ?></td>
                <td><?php echo $spell['maglv']; ?></td>
                <td><img src="<?php echo $itemServer.$spell['id'].'.gif'; ?>" alt="Rune image"></td>
                <td><?php
                if (!empty($spell['vocations'])) {
                    $names = array();
                    foreach ($spell['vocations'] as $id) {
                        if (isset($configVoc[$id]))
                            $names[] = $configVoc[$id]['name'];
                    }
                    echo implode(',<br>', $names);
                }
                ?></td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>

    <h2 id="spell_conjure">Conjure Spells</h2>
    <a href="#spells">Jump to top</a>
    <table class="table tbl-hover">
        <tbody>
            <tr class="yellow">
                <td>Name</td>
                <td>Words</td>
                <td>Level</td>
                <td>Mana</td>
                <td>Soul</td>
                <td>Charges</td>
                <td>Image</td>
                <td>Vocations</td>
            </tr>
            <?php foreach ($spells['conjure'] as $spell): ?>
            <tr>
                <td><?php echo $spell['name']; ?></td>
                <td><?php echo $spell['words']; ?></td>
                <td><?php echo $spell['lvl']; ?></td>
                <td><?php echo $spell['mana']; ?></td>
                <td><?php echo $spell['soul']; ?></td>
                <td><?php echo $spell['conjureCount']; ?></td>
                <td><img src="<?php echo $itemServer.$spell['conjureId'].'.gif'; ?>" alt="Rune image"></td>
                <td><?php
                if (!empty($spell['vocations'])) {
                    $names = array();
                    foreach ($spell['vocations'] as $id) {
                        if (isset($configVoc[$id]))
                            $names[] = $configVoc[$id]['name'];
                    }
                    echo implode(',<br>', $names);
                }
                ?></td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    <a href="#spells">Jump to top</a>
    <?php
} else {
    ?>
    <h1>Spells</h1>
    <p>Spells have currently not been loaded into the website by the server admin.</p>
    <?php
}

/* Debug tests
foreach ($spells as $type => $spells) {
    data_dump($spells, false, "Type: $type");
}

// All spell attributes?
'group', 'words', 'lvl', 'maglv', 'charges', 'allowfaruse', 'blocktype', 'mana', 'soul', 'prem', 'aggressive', 'range', 'selftarget', 'needtarget', 'blockwalls', 'needweapon', 'exhaustion', 'groupcooldown', 'needlearn', 'casterTargetOrDirection', 'direction', 'params', 'playernameparam', 'conjureId', 'reagentId', 'conjureCount', 'vocations'
*/
include 'layout/overall/footer.php'; ?>

You need to login from admin account and regenerate the spells page after you have updated the file.
 
Solution

Similar threads

Back
Top