Postado Junho 2, 2014 10 anos 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 Novembro 14, 2018 6 anos por luanluciano93 (veja o histórico de edições) STYLLER OT 2022
Postado Junho 3, 2014 10 anos 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 Junho 3, 2014 10 anos por tiroleivi (veja o histórico de edições) Meus Conteúdos: Downloads :Distros Compilados [TFS 1.0 e 1.1]-[10.76] x86 - x64 + DLLs Baiak [8.60] + Site + Itens Donate + Cliente Próprio Global Full 8.60 + Zao, War-System, Cast System... Distros Compiladas [Linux-64x] Gesior 2012 para OldServer 7.x WebPage v1 - Para OTs SQL Blogger Para OTServ Sql Global V30 - OTX 10.99 DownloadTibia Loader! Tutoriais :Instalando Gesior ACC + TFS 1.0 Instalando ZnoteAAC 1.5 (10.x ~ 11.x)Criando Pagina de Xat Para Seu Site Gesior ! Gosta do meu trabalho? Quer me apoiar?
Postado Junho 3, 2014 10 anos Autor Tenta muda essa parte: AND stream_status > 0 AND online > por esta: AND cast > 0 AND online > Se funcionar eu troco no tópico! STYLLER OT 2022
Postado Junho 3, 2014 10 anos Funcionou REP +, tu é zika : p SÓ QUE NO OT NÃO ACONTECE NADA PARECE UMA MSG >> PARAMETERS NEEDED << Editado Junho 4, 2014 10 anos por tiroleivi (veja o histórico de edições) Meus Conteúdos: Downloads :Distros Compilados [TFS 1.0 e 1.1]-[10.76] x86 - x64 + DLLs Baiak [8.60] + Site + Itens Donate + Cliente Próprio Global Full 8.60 + Zao, War-System, Cast System... Distros Compiladas [Linux-64x] Gesior 2012 para OldServer 7.x WebPage v1 - Para OTs SQL Blogger Para OTServ Sql Global V30 - OTX 10.99 DownloadTibia Loader! Tutoriais :Instalando Gesior ACC + TFS 1.0 Instalando ZnoteAAC 1.5 (10.x ~ 11.x)Criando Pagina de Xat Para Seu Site Gesior ! Gosta do meu trabalho? Quer me apoiar?
Postado Junho 13, 2014 10 anos 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.