Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Bom pessoal, resolvi fazer esse tópico para complementar o tópico da distro que postei .. 

Ela é TFS 0.4 rev 3777, e tem os códigos do cast system adicionados na distro, então vou ensinar neste tópico o que adicionar no servidor para o cast funcionar ... 

• LINK DA DISTRO - DOWNLOAD

 

Vamos lá ... 

Primeiramente entre no phpmyadmin, selecione sua database, entre em SQL e execute o seguinte código:

ALTER TABLE  `players` ADD  `cast` TINYINT NOT NULL DEFAULT  '0',
ADD  `castViewers` INT( 11 ) NOT NULL DEFAULT  '0',
ADD  `castDescription` VARCHAR( 255 ) NOT NULL

Agora entre em data/talkactions/talkactions.xml e adicione a seguinte tag:

<talkaction words="/cast;!cast" event="script" value="cast.lua"/>

Depois entre em data/talkactions/scripts/ ... e crie um arquivo lua com o nome cast.lua e coloque o seguinte código dentro:

 

cast.lua

Spoiler

function onSay(cid, words, param, channel)
	local tmp = param:explode(" ")
	if not(tmp[1]) then
		return doPlayerSendCancel(cid, "Parameters needed")
	end
	
	if tmp[1] == "on" then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has started.")
		doPlayerSetCastState(cid, true)
		doPlayerSave(cid)
	elseif getPlayerCast(cid).status == false then
		return doPlayerSendCancel(cid, "Your cast has to be running for this action.")
	elseif tmp[1] == "off" then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast has ended.")
		doPlayerSetCastState(cid, false)
				doPlayerSave(cid)
	elseif isInArray({"pass", "password", "p"}, tmp[1]) then
		if not(tmp[2]) then
			return doPlayerSendCancel(cid, "You need to set a password")
		end
		
		if tmp[2]:len() > 10 then
			return doPlayerSendCancel(cid, "The password is too long. (Max.: 10 letters)")
		end
		
		if tmp[2] == "off" then
			doPlayerSetCastPassword(cid, "")
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password has been removed.")
		else
			doPlayerSetCastPassword(cid, tmp[2])
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast password was set to: " .. tmp[2])
		end
	elseif isInArray({"desc", "description", "d"}, tmp[1]) then
		local d = param:gsub(tmp[1]..(tmp[2] and " " or ""), "")
		
		if not(d) or d:len() == 0 then
			return doPlayerSendCancel(cid, "You need to specify a description.")
		end
		
		if d:len() > 50 then
			return doPlayerSendCancel(cid, "The description is too long. (Max.: 50 letters)")
		end
		
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cast description was set to: ")
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, d)
		doPlayerSetCastDescription(cid, d)
	elseif tmp[1] == "ban" then
		if not(tmp[2]) then
			return doPlayerSendCancel(cid, "Specify a spectator that you want to ban.")
		end
		
		if doPlayerAddCastBan(cid, tmp[2]) then
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been banned.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be banned.")
		end
	elseif tmp[1] == "unban" then
		if not(tmp[2]) then
			return doPlayerSendCancel(cid, "Specify the person you want to unban.")
		end
		
		if doPlayerRemoveCastBan(cid, tmp[2]) then
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unbanned.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unbanned.")
		end
	elseif param == "bans" then
		local t = getCastBans(cid)
		local text = "Cast Bans:\n\n"
		for k, v in pairs(t) do
			text = text .. "*" .. v.name .. "\n"
		end 
		if text == "Cast Bans:\n\n" then
			text = text .. "No bans."
		end
		doShowTextDialog(cid, 5958, text)
	elseif tmp[1] == "mute" then
		if not(tmp[2]) then
			return doPlayerSendCancel(cid, "Specify a spectator that you want to mute.")
		end
		
		if doPlayerAddCastMute(cid, tmp[2]) then
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been muted.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be muted.")
		end
	elseif tmp[1] == "unmute" then
		if not(tmp[2]) then
			return doPlayerSendCancel(cid, "Specify the person you want to unmute.")
		end
		
		if doPlayerRemoveCastMute(cid, tmp[2]) then
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' has been unmuted.")
		else
			doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Spectator '" .. tmp[2] .. "' could not be unmuted.")
		end
	elseif param == "mutes" then
		local t = getCastMutes(cid)
		local text = "Cast Mutes:\n\n"
		for k, v in pairs(t) do
			text = text .. "*" .. v.name .. "\n"
		end 
		if text == "Cast Bans:\n\n" then
			text = text .. "No mutes."
		end
		doShowTextDialog(cid, 5958, text)
	elseif param == "viewers" then
		local t = getCastViewers(cid)
		local text, count = "Cast Viewers:\n#Viewers: |COUNT|\n\n", 0
		for _,v in pairs(t) do
			count = count + 1
			text = text .. "*" .. v.name .."\n"
		end
		
		if text == "Cast Viewers:\n#Viewers: |COUNT|\n\n" then text = "Cast Viewers:\n\nNo viewers." end
		text = text:gsub("|COUNT|", count)
		doShowTextDialog(cid, 5958, text)
	elseif param == "status" then
		local t, c = getCastViewers(cid), getPlayerCast(cid)
		local count = 0
		for _,v in pairs(t) do count = count + 1 end
		
		doShowTextDialog(cid, 5958, "Cast Status:\n\n*Viewers:\n      " .. count .. "\n*Description:\n      "..(c.description == "" and "Not set" or c.description).."\n*Password:\n      " .. (c.password == "" and "Not set" or "Set - '"..c.password.."'"))
	elseif param == "update" then
		if getPlayerStorageValue(cid, 656544) > os.time() then
			return doPlayerSendCancel(cid, "You used this command lately. Wait: " .. (getPlayerStorageValue(cid, 656544)-os.time()) .. " sec.")
		end
		doPlayerSave(cid)
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The cast settings have been updated.")
		doPlayerSetStorageValue(cid, 656544, os.time()+60)
	end
	return true
end

 

Depois crie um arquivo em seu site com o nome de live.php e coloque o seguinte código dentro: (não esqueça de add no index.php caso precise, e no layout.php para o pessoal visualizar a página).

 

live.php

Spoiler
 

<?PHP
$update_interval = 2;
if(count($config['site']['worlds']) > 1)
{
	$worlds .= '<i>Select world:</i> ';
	foreach($config['site']['worlds'] as $id => $world_n)
	{
		$worlds .= ' <a href="?subtopic=livestreams&world='.$id.'">'.$world_n.'</a> , ';
		if($id == (int) $_GET['world'])
		{
			$world_id = $id;
			$world_name = $world_n;
		}
	}
	$main_content .= substr($worlds, 0, strlen($worlds)-3);
}
if(!isset($world_id))
{
	$world_id = 0;
	$world_name = $config['server']['serverName'];
}
// Sorting type
$order = $_REQUEST['order'];
if($order == 'level')
	$orderby = 'level';
elseif($order == 'vocation')
	$orderby = 'vocation';
if(empty($orderby))
	$orderby = 'name';
$tmp_file_name = 'cache/livestreams-'.$orderby.'-'.$world_id.'.tmp';
if(file_exists($tmp_file_name) && filemtime($tmp_file_name) > (time() - $update_interval))
{
	$tmp_file_content = explode(",", file_get_contents($tmp_file_name));
	$number_of_players_online = $tmp_file_content[0];
	$players_rows = $tmp_file_content[1];
}
else
{
	$players_online_data = $SQL->query('SELECT * FROM players WHERE world_id = '.(int) $world_id.' AND cast > 0 AND online > 0 ORDER BY '.$orderby);
	$number_of_players_online = 0;
	foreach($players_online_data as $player)
	{
		$number_of_players_online++;
                $acc = $SQL->query('SELECT flag, vip_time FROM '.$SQL->tableName('accounts').' WHERE '.$SQL->fieldName('id').' = '.$player['account_id'].' LIMIT 1;')->fetch();
		if(is_int($number_of_players_online / 2))
			$bgcolor = $config['site']['darkborder'];
		else
			$bgcolor = $config['site']['lightborder'];
		
		$skull = '';
		if($config['site']['show_skull']) {
			if ($player['skulltime'] > 0 && $player['skull'] == 3)
					$skull = '<right><image src="./images/whiteskull.gif"/></right>';
			elseif ($player['skulltime'] =  $player['skull'] == 4)
					$skull = '<right><image src="./images/redskull.gif"/></right>';
			elseif ($player['skulltime'] =  $player['skull'] == 5)
					$skull = '<right><image src="./images/blackskull.gif"/></right>';
		}
		$players_rows .= '
		<TR BGCOLOR='.$bgcolor.'>
			<TD><center><image src="images/flags/'.$acc['flag'].'.png"/></center></TD>
			<TD><A HREF="?subtopic=characters&name='.$player['name'].'">'.$player['name'].'</A></TD>
			<TD>'.$player['stream_desc'].'</TD>
			<TD>'.$player['level'].'</TD>
			<TD>'.$vocation_name[$world_id][$player['promotion']][$player['vocation']].'</TD>
			<TD>'.($acc['vip_time'] > 0 ? '<font color="green"><b>VIP</b></font>' : '<font color="red"><b>NO</b></font></TD>').'
		</TR>';
	}
	file_put_contents($tmp_file_name, $number_of_players_online.','.$players_rows);
}

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>There are no players streaming right now on <b>'.$config['site']['worlds'][$world_id].'</b>.</TD></TR>
				</TABLE>
			</TD>
		</TR>
	</TABLE>
	<BR>';
else
{
//Vocations pics
$vocs = array();
foreach($SQL->query('SELECT `vocation`, COUNT(`id`) AS `count` FROM `players` WHERE `world_id` = "'.$world_id.'" AND `online` > 0 GROUP BY `vocation`') as $entry)
	  $vocs[$entry['vocation']] = $entry['count'];


$main_content .= '
<div class="TableContainer" > 
	<table class="Table1" cellpadding="0" cellspacing="0" >
		<div class="CaptionContainer" >
			<div class="CaptionInnerContainer" >
				<span class="CaptionEdgeLeftTop" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-edge.gif);" /></span>
				<span class="CaptionEdgeRightTop" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-edge.gif);" /></span>
				<span class="CaptionBorderTop" style="background-image:url(http://static.tibia.com/images/global/content/table-headline-border.gif);" ></span>
				<span class="CaptionVerticalLeft" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-vertical.gif);" /></span>
				<div class="Text" >World Information</div>
					<span class="CaptionVerticalRight" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-vertical.gif);" /></span>
					<span class="CaptionBorderBottom" style="background-image:url(http://static.tibia.com/images/global/content/table-headline-border.gif);" ></span>
					<span class="CaptionEdgeLeftBottom" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-edge.gif);" /></span>
					<span class="CaptionEdgeRightBottom" style="background-image:url(http://static.tibia.com/images/global/content/box-frame-edge.gif);" /></span>
				</div>
			</div>
		<tr>
			<td>
				<div class="InnerTableContainer" >
					<table style="width:100%;" >
						<tr>
							<td class="LabelV150" ><b>Status:</b></td>
							<td>Online</td></tr><tr><td class="LabelV150" ><b>Live Streams:</b></td>
							<td>'.$number_of_players_online.'</td></tr><tr><td class="LabelV150" ><b>Creation Date:</b></td>
							<td>30/11/2010</td></tr>
						<tr><td class="LabelV150" ><b>Location:</b></td><td>Brazil</td></tr>
						<tr><td class="LabelV150" ><b>PvP Type:</b></td><td>Open PvP</td></tr>
						<tr>
							<td class="LabelV150" ><b>World Quest Titles:</b></td>
							<td><a href="?subtopic=lightbearer">Lightbearer</a></td>
						</tr>         
					</table>        
				</div>  
			</td>
		</tr>
	</table>
</div>
<br>';
	

	
//list of players
$width_name = 35;
if($config['site']['show_outfit']) {
	$players_outfit_row = '<TD WIDTH=5%><a href="" CLASS=white >Outfit</a></TD>';
	$width_name = 30;
}
$main_content .= '
<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%>
	<TR BGCOLOR="'.$config['site']['vdarkborder'].'">
		<TD WIDTH=5%><a href="" CLASS=white >Country</a></TD>
		'.$players_outfit_row.'
		<TD WIDTH='.width_name.'%><A HREF="?subtopic=livestreams&order=name&world='.$world_id.'" CLASS=white>Name</A></TD>
		<TD WIDTH=40%><A HREF="?subtopic=livestreams&order=stream_desc&world='.$world_id.'" CLASS=white>Stream Description</A></TD>
		<TD WIDTH=5%><A HREF="?subtopic=livestreams&order=level&world='.$world_id.'" CLASS=white>Level</A></TD>
		<TD WIDTH=10%><A HREF="?subtopic=livestreams&order=vocation&world='.$world_id.'" CLASS=white>Vocation</TD>
		<TD WIDTH="5%><a href="" CLASS=white >VIP</a></TD></TR>'.$players_rows.'</TABLE>';
//search bar
$main_content .= '
<BR>
<FORM ACTION="?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>';
}
?>
 



E pra finalizar adicione isso no config.lua:

enableCast = true

Bem simples né pessoal? Erros e Dúvidas postem aqui!

Abraços e até mais! ?

Editado por luanluciano93 (veja o histórico de edições)

  • Respostas 67
  • Visualizações 24k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

Postado

No meu site da esse erro!!!

 

o nome do arquivo live eu mudei para castsystem.

 

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'stream_status' in 'where clause'' in C:\xampp\htdocs\live.php:39 Stack trace: #0 C:\xampp\htdocs\live.php(39): PDO->query('SELECT * FROM p...') #1 C:\xampp\htdocs\index.php(249): include('C:\xampp\htdocs...') #2 {main} thrown in C:\xampp\htdocs\live.php on line 39

 

Index :

case "castsystem";
                $subtopic = "castsystem";
                $topic = "CastSystem";
                include("castsystem.php");

 

break;

 

Layout.php:

<a href='?subtopic=castsystem'>
  <div id='submenu_castsystem' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'>
    <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
    <div id='ActiveSubmenuItemIcon_castsystem' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div>
    <div class='SubmenuitemLabel'><blink><font color=green>Cast System</font></blink></div>
    <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div>
  </div>

 

</a>

Editado por tiroleivi (veja o histórico de edições)

  • 2 weeks later...
Postado

apareceu esse erro aki 

Fatal error: Call to undefined function getOutfitLink() in C:\xampp\htdocs\castsystem.php on line 61

alguma solução ?

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo