A new server has been set up in Canyon, with the great eXpansion controller,
to host past TMplus missions maps. If you don't know them, go check the server
for fun race, trial, lol, and endurance maps !
[maniaplanet]maniaplanet://#join=chapo001@TMPLUS@redix[/maniaplanet]
A CP live plugin was used on previous server with XAseco, and we would like to have it for eXpansion.
Its funciton is to tell at which CP each active player is, useful for trials and rpg maps.
The php source of the plugin is neatly structured, but having no clues, it would be nice if someone
knowledgeable could help on explaining what is needed to port it to eXpansion.
(I tried to contact Lambda on the email provided in source, but no reply yet)
Thanks !
Here is the source :
Code: Select all
<?php
/**
* Checkpoint Live plugin by Lambda (hello.lam***@yahoo.com) email address modified for 'pry-vacy'
* plugin cplive_occam_stef 14-nov-2011
* version: ???
* manialnik version = 0
*
* 17-nov-2011
* - Undefined variable: login on line 131 in file (136) FIXED
*/
// !!!
global $num_rows, $xframe, $yframe, $sframe, $string_lenght, $line;
global $color_title_text1, $color_title_text2, $color_title_text3, $color_player_text4, $color_player_text5, $color_player_text6, $color_player_text7, $color_player_text8;
//*** CONIGURATION ***//
//number of displayed rows
$num_rows = 20;
//frame position left
$xframe = -63.8; //horizontal
$yframe = 21.5; //vertical
$sframe = 1.27; //widget scale
$string_lenght = 8; //string lenght (login)
//colors
$color_title_text1 = 'FFF'; //CP Live text
$color_title_text2 = 'ABC'; //Track cp's text
$color_title_text3 = 'ABC'; //cp's numbers ABC
$color_player_text4 = '567'; //Position number
$color_player_text5 = 'F93'; //CP
$color_player_text6 = '0F0'; //smile
$color_player_text7 = '09D'; //Time FFC
$color_player_text8 = 'FFA'; //player
//*** END CONIGURATION ***//
Aseco::registerEvent('onPlayerConnect', 'player_on');
Aseco::registerEvent('onCheckpoint', 'get_cp');
Aseco::registerEvent('onPlayerFinish', 'finish_giveup');
Aseco::registerEvent('onEndRound', 'list_cp_end');
Aseco::registerEvent('onBeginMap', 'reset_all');
Aseco::registerEvent('onPlayerDisconnect', 'player_off');
Aseco::registerEvent('onSync', 'control_start');
Aseco::registerEvent('onRestartMap', 'restart_reset');
global $Players, $CpNb, $list, $all_cps;
$Players = array();
$CpNb = array();
function control_start($lambda, $empty){
get_cps($lambda);
}
function restart_reset($lambda, $empty){
get_cps($lambda);
reset_all($lambda);
display_hud($lambda);
}
//onPlayerConnect
function player_on($lambda, $ondata){
global $Players, $CpNb;
global $string_lenght;
$login = $ondata->login;
$nickname = substr($login, 0, $string_lenght);
$Players[$login] = array("Player" => $nickname);
$CpNb[$login] = array("CPNumber" => 0,
"Time" => '');
title_manialink($lambda, $login);
}
//onCheckpoint
function get_cp($lambda, $cpdata){
global $CpNb;
$CpNb[$cpdata[1]] = array("CPNumber" => $cpdata[4]+1, "Time" => $cpdata[2]);
display_hud($lambda);
}
//onPlayerFinish
function finish_giveup($lambda, $finish){
global $all_cps;
global $CpNb;
$login = $finish->player->login;
$cps = $finish->map->nbchecks;
if ($CpNb[$login]["CPNumber"] != $cps) {
$CpNb[$login] = array ("CPNumber" => 0,
"Time" => '');
display_hud($lambda);
}
}
//onEndRound
function list_cp_end ($lambda, $end){
$hud = '<manialink version="0" id="01928378"></manialink>';
$hud .= '<manialink version="0" id="019283781"></manialink>';
$lambda->client->query("SendDisplayManialinkPage", $hud, 1, false);
}
//onBeginMap
function reset_all($lambda){
global $CpNb;
foreach ($lambda->server->players->player_list as $tpl){
$login = $tpl->login;
$CpNb[$login] = array("CPNumber" => 0,
"Time" => '');
title_manialink($lambda, $login);
}
get_cps($lambda);
display_hud($lambda);
}
//onPlayerDisconnect
function player_off ($lambda, $info) {
global $Players, $CpNb, $list;
$login = $info->login;
unset($Players[$login]);
unset($CpNb[$login]);
unset($list[$login]);
display_hud($lambda);
}
function subval_sort($a,$subkey) {
foreach($a as $k=>$v) {
$b[$k] = strtolower($v[$subkey]);
}
arsort($b);
foreach($b as $k=>$v) {
$c[] = $a[$k];
}
return $c;
}
function display_hud($lambda){
global $Players, $CpNb, $list;
global $all_cps, $num_rows;
global $xframe, $yframe, $sframe;
global $color_player_text4, $color_player_text5, $color_player_text6, $color_player_text7, $color_player_text8;
$List = $list = array_merge_recursive($Players, $CpNb);
if (empty($list) == array()){
$List = subval_sort($List, "CPNumber");
$List = array_slice ($List, 0, $num_rows);
$hud = '<?xml version="1.0" encoding="UTF-8"?>';
$hud .= '<manialink version="0" id="019283781">';
$hud .= '<frame scale="'.$sframe.'" posn="'.$xframe.' '.$yframe.'">';
$pid = 1;
$line = '';
foreach ($List as $tcp){
$line .= '$'.$color_player_text4.''.str_pad($pid, 2, '0', STR_PAD_LEFT).'. $z';
if (($tcp["CPNumber"]-1) === $all_cps){
$line .= '$'.$color_player_text5.'CP-$'.$color_player_text6.''.str_pad(":-)",4 ,' ' ,STR_PAD_RIGHT).'$z';
} else {
$line .= '$'.$color_player_text5.'CP-'.str_pad($tcp["CPNumber"],3 ,' ' ,STR_PAD_RIGHT).'$z';
}
$line .= '$'.$color_player_text7.''.str_pad(formatMilSecMinHrs($tcp["Time"]), 10,' ' ,STR_PAD_BOTH).'$z';
$line .= '$'.$color_player_text8.''.trim($tcp["Player"]).'$z'.LF;
$pid++;
}
$hud .= '<label scale="0.5" posn="0.4 -2 0.1" halign="left" valign="center" style="TextRaceMessage" text="'.$line.'"/>';
$hud .= '</frame>';
$hud .= '</manialink>';
$lambda->client->addCall('SendDisplayManialinkPage', array($hud, 0, false));
}
}
//get all track cp's
function get_cps($lambda){
global $all_cps;
$lambda->client->query('GetCurrentMapInfo');
$CCInfo = $lambda->client->getResponse();
$all_cps = ($CCInfo['NbCheckpoints'])-1;
}
//manialink title
function title_manialink($lambda, $login){
global $sframe, $xframe, $yframe, $all_cps, $line;
global $color_title_text1, $color_title_text2, $color_title_text3;
$hud = '<?xml version="1.0" encoding="UTF-8"?>';
$hud .= '<manialink version="0" id="01928378">';
$hud .= '<frame scale="'.$sframe.'" posn="'.$xframe.' '.$yframe.'">';
$hud .= '<quad posn="0 0 0" sizen="15 2 0.08" halign="left" valign="center" style="BgsPlayerCard" substyle="BgCard"/>';
$hud .= '<label scale="0.5" posn="0.4 0.1 0.1" halign="left" valign="center" style="TextRaceMessage" text=" $'.$color_title_text1.'CP Live $'.$color_title_text2.'Track cp\'s: $'.$color_title_text3.''.$all_cps.'"/>';
$hud .= '</frame>';
$hud .= '</manialink>';
$lambda->client->addCall('SendDisplayManialinkPageToLogin', array($login, $hud, 0, false));
}
//time format 0:00:00:000
function formatMilSecMinHrs ($milliseconds) {
if ($milliseconds >= 0) {
$seconds = floor ($milliseconds / 1000);
$minutes = floor ($seconds / 60);
$hours = floor ($minutes / 60);
$milliseconds = $milliseconds % 1000;
$seconds = $seconds % 60;
$minutes = $minutes % 60;
if ($hours) {
$format = '%u:%02u:%02u.%03u';
$time = sprintf ($format, $hours, $minutes, $seconds, $milliseconds);
return $time;
} else {
$format = '%u:%02u.%03u';
$time = sprintf ($format, $minutes, $seconds, $milliseconds);
return $time;
}
} else {
echo "[formatMilliseconds] Wrong input! ($milliseconds)" . LF;
}
}
?>