• 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!

TFS 1.X+ PHP Cast system on webpage.

trustjah

Newbie
Joined
Jan 22, 2009
Messages
124
Solutions
6
Reaction score
14
Location
Belgium
Hey,

I've been trying to get this script to run with -
https://otland.net/threads/10-95-cast-tfs-1-2-custom-modifications- this cast system.

PHP:
<img id="ContentBoxHeadline" class="Title" src="layouts/tibiacom/images/header/cast.png" alt="Contentbox headline">

<?php
if(!defined('INITIALIZED'))
    exit;
$order = $_REQUEST['order'];
if($order == 'name') {
    $orderby = 'name';
}
if($order == 'level') {
    $orderby = 'level';
}
if($order == 'vocation') {
    $orderby = 'vocation';
}
if(empty($orderby)) {
    $orderby = 'name';
}
if(count($config['site']['worlds']) > 1)
{
    $worlds .= '<i>Select world:</i> ';
    foreach($config['site']['worlds'] as $idd => $world_n)
    {
        if($idd == (int) $_GET['world'])
        {
            $world_id = $idd;
            $world_name = $world_n;
        }
    }
}
if($idd == (int) $_GET['world'])
{
    $world_id = $idd;
    $world_name = $world_n;
}
if(!isset($world_id))
{
    $world_id = 0;
    $world_name = $config['server']['serverName'];
}
if(count($config['site']['worlds']) > 1)
{
    $main_content .= '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD>
        <FORM ACTION="?subtopic=whoisonline" METHOD=get><INPUT TYPE=hidden NAME=subtopic VALUE=whoisonline><INPUT TYPE=hidden NAME=list VALUE=experience>
        <TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>World Selection</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['lightborder'].'">
        <TABLE BORDER=0 CELLPADDING=1><TR><TD>World: </TD><TD><SELECT SIZE="1" NAME="world"><OPTION VALUE="" SELECTED>(choose world)</OPTION>';
        foreach($config['site']['worlds'] as $id => $world_n)
        {
            $main_content .= '<OPTION VALUE="'.$id.'">'.$world_n.'</OPTION>';
        }
        $main_content .= '</SELECT> </TD><TD><INPUT TYPE=image NAME="Submit" ALT="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18>
        </TD></TR></TABLE></TABLE></FORM></TABLE><br>';
}
$players_online_data = $SQL->query('SELECT player_id FROM live_casts');
$number_of_players_online = 0;
foreach($players_online_data as $player)
{
    $number_of_players_online++;
    if($config['site']['show_flag'])
    {
        $account = $SQL->query('SELECT * FROM players WHERE id = '.$player['id'].'')->fetch();
        $flag = '<image src="images/flags/'.$account['flag'].'.png"/> ';
    }
    if(is_int($number_of_players_online / 2))
    {
        $bgcolor = $config['site']['darkborder'];
    }
    else
    {
        $bgcolor = $config['site']['lightborder'];
    }
    $players_rows .= '
    <TR BGCOLOR='.$bgcolor.'>
        <TD WIDTH=40%>'.$flag.'<A HREF="index.php?subtopic=characters&name='.urlencode($player['name']).'">'.$player['name'].'</A><br/>'.$player['level'].' '.$vocation_name[$player['world_id']][$player['promotion']][$player['vocation']].'</TD>
        <TD WIDTH=20%><font color="#008000">ONLINE</font></TD>
    </TR>';
}
if($number_of_players_online == 0)
{
    //server status - server empty
    $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><B>Server Status</B></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=1><TR><TD>Currently there are no active casts on '.$config['server']['serverName'].'.</TD></TR></TABLE></TD></TR></TABLE><BR>';
}
else
{
    //server status - someone is online
    $main_content .= '
    <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
        <TR BGCOLOR="'.$config['site']['vdarkborder'].'">
            <TD CLASS=white><B>Server Status</B></TD>
        </TR>
        <TR BGCOLOR='.$config['site']['darkborder'].'>
            <TD>';
            $main_content .= 'Currently there are '.$number_of_players_online.' active live casts';
            $main_content .= ' on '.$world_name.' gameworlds.<br>
            </TD>
        </TR>
    </TABLE><BR>';
    //list of players
    $main_content .= '
    <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
        <TR BGCOLOR="'.$config['site']['vdarkborder'].'">
            <TD><A HREF="index.php?subtopic=whoisonline&order=name" CLASS=white>Name</A></TD>
            <TD><A HREF="index.php?subtopic=whoisonline&order=vocation" CLASS=white>Status</TD>
        </TR>
    '.$players_rows.'</TABLE>';
    //search bar
    //$main_content .= '<BR><FORM ACTION="index.php?subtopic=characters" METHOD=post>  <TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Search Character</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><TABLE BORDER=0 CELLPADDING=1><TR><TD>Name:</TD><TD><INPUT NAME="name" VALUE=""SIZE=29 MAXLENGTH=29></TD><TD><INPUT TYPE=image NAME="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18></TD></TR></TABLE></TD></TR></TABLE></FORM>';
}
    $main_content .= '<BR><TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>Description</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'"><h4 style="margin: 0px;">Commands (owner):</h4><i>!cast {on/off}</TD></TR></TABLE>';

I can get the query to return that someone is actually castinng,
PrequelOTland.png


but i am unable to get the character names to display in the field.
something is not correct in this part of the code but i cannot figure it out myself,

PHP:
$players_online_data = $SQL->query('SELECT player_id FROM live_casts');
$number_of_players_online = 0;
foreach($players_online_data as $player)
{
    $number_of_players_online++;
    if($config['site']['show_flag'])
    {
        $account = $SQL->query('SELECT * FROM players WHERE id = '.$player['id'].'')->fetch();
        $flag = '<image src="images/flags/'.$account['flag'].'.png"/> ';

another solution would be to put this query
Lua:
db.query("UPDATE `players` SET `cast` = 1 WHERE `id` = " .. getPlayerGUID(cid) .. ";")
into this function
Code:
function onSay(player, words, param)
    if player:startLiveCast(param) then
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You have started casting your gameplay.")
    else
        player:sendCancelMessage("You're already casting your gameplay.")
    end
    return false
end

but i have no idea how to accomplish this either.
Anyone here able to help me a hand? much appreciated!

Edit: my account is 9 years old but i am still a newbie.
 
Last edited:
Try
Code:
$players_online_data = $SQL->query('SELECT player_id FROM live_casts');
$number_of_players_online = 0;
foreach($players_online_data as $player)
{
    $number_of_players_online++;
    if($config['site']['show_flag'])
    {
        $account = $SQL->query('SELECT * FROM players WHERE id = '.$player['id'].'')->fetch();
        $flag = '<image src="images/flags/'.$account['flag'].'.png"/> ';
        print_r($account);
and show us what gets printed
 
I've figured out a way to update the database within the function which looks like this,
Code:
function onSay(player, words, param)
    if player:startLiveCast(param) then
        player:sendTextMessage(MESSAGE_INFO_DESCR, "You have started casting your gameplay.")
        db.query("UPDATE `players` SET `cast` = 1")
    else
        player:sendCancelMessage("You're already casting your gameplay.")
        end
    return false
end
as you can see it updates all the player rows now and sets the cast to 1.
Is there a way to get the player id within this function? if i use
Code:
("UPDATE `players` SET `cast` = 0 WHERE `id` = " .. getPlayerGUID(cid) .. ";")
Then the console returns;
attempt to concatenate a boolean value
C in function __concat

any idea's?
 
Last edited:
In your original post you are using $players_online_data and then $player for the foreach loop then you call $account for the sql query.
live_casts table does not store the player name, but the account does.
I cannot see you set player['name'].

Shouldn't player['name'] be account['name'].

Actually having another look you are calling
$players_online_data = $SQL->query('SELECT player_id FROM live_casts');
$account = $SQL->query('SELECT * FROM players WHERE id = '.$player['id'].'')->fetch();

Then asking for $player['id'], in my db live_casts uses player_id as the first sql query states.

try select player_id as id FROM
or change $player['id'] to $player['player_id']
 
Last edited:
Back
Top