docker-tmserver/xaseco/plugins/jfreu.lite.php

179 lines
5.8 KiB
PHP
Raw Normal View History

2022-06-26 17:43:44 +02:00
<?php
/* vim: set noexpandtab tabstop=2 softtabstop=2 shiftwidth=2: */
/**
* Jfreu's lite plugin.
* Provides only the player join/leave messages and the INFO messages.
* Add this to plugins.xml instead of jfreu.plugin.php if you don't
* need the rest of the Jfreu features. If you don't want the INFO
* messages, set $infomessages = 0 in jfreu.config.php.
* Created by Xymph
*
* Dependencies: none
*/
Aseco::registerEvent('onStartup', 'init_jfreu');
Aseco::registerEvent('onEndRace', 'info_message');
Aseco::registerEvent('onPlayerConnect', 'player_connect');
Aseco::registerEvent('onPlayerDisconnect', 'player_disconnect');
Aseco::addChatCommand('message', 'Shows random informational message');
class Jfreu
{
//** Jfreu's plugin version **//
var $version;
//** colors **// <-- use aseco colors ?
var $white;
var $yellow;
var $red;
var $blue;
var $green;
var $admin;
//** random info message **//
var $messages;
var $nbmessages;
var $infomessages;
var $message_start;
//** player join/leave messages **//
var $player_join;
var $player_joins;
var $player_left;
} // class Jfreu
// called @ onStartup
function init_jfreu($aseco, $command)
{
include_once('includes/jfreu.config.php');
$version = '0.14';
$aseco->server->jfreu = new Jfreu();
$aseco->server->jfreu->version = $version;
$aseco->server->jfreu->message_start = $message_start;
$aseco->server->jfreu->player_join = $player_join;
$aseco->server->jfreu->player_joins = $player_joins;
$aseco->server->jfreu->player_left = $player_left;
//** random information messages **//
$aseco->server->jfreu->infomessages = $infomessages;
$i = 1;
while (isset(${'message'.$i}) && $i < 1000) {
$aseco->server->jfreu->messages[$i] = ${'message'.$i};
$i++;
}
if ($i != 1000) {
$aseco->server->jfreu->nbmessages = $i - 1;
} else {
$aseco->server->jfreu->nbmessages = 0;
}
//** colors **//
$whi = $aseco->server->jfreu->white = $aseco->formatColors('$z$s{#highlite}');
$yel = $aseco->server->jfreu->yellow = $aseco->formatColors('$z$s{#server}');
$red = $aseco->server->jfreu->red = $aseco->formatColors('$z$s{#error}');
$blu = $aseco->server->jfreu->blue = $aseco->formatColors('$z$s{#message}');
$gre = $aseco->server->jfreu->green = $aseco->formatColors('$z$s{#record}');
$adm = $aseco->server->jfreu->admin = $aseco->formatColors('$z$s{#logina}');
//** Loaded message **//
$message = $yel.'>> '.$whi.'Jfreu'.$blu.'\'s lite plugin '.$gre.$version.$blu.': '.$whi.'Loaded'.$blu.'.';
$aseco->client->query('ChatSendServerMessage', $message);
} // init_jfreu
// called @ onEndRace
function info_message($aseco, $data)
{
// if no info messages, bail out
if ($aseco->server->jfreu->infomessages == 0) return;
// get random message
$i = rand(1, $aseco->server->jfreu->nbmessages);
$message = $aseco->formatColors($aseco->server->jfreu->message_start . $aseco->server->jfreu->messages[$i]);
// hyperlink release page on TMF
if ($aseco->server->getGame() == 'TMF') {
$message = preg_replace('|' . XASECO_TMN . '|', '$l[$0]$0$l', $message);
$message = preg_replace('|' . XASECO_ORG . '|', '$l[$0]$0$l', $message);
}
// send the message & test for scoreboard or /message command
if ($aseco->server->getGame() == 'TMF' && $aseco->server->jfreu->infomessages == 2 &&
function_exists('send_window_message'))
send_window_message($aseco, $message, ($data !== false));
else
$aseco->client->query('ChatSendServerMessage', $message);
} // info_message
function chat_message($aseco, $command)
{
info_message($aseco, false);
} // chat_message
// called @ onPlayerConnect
function player_connect($aseco, $player)
{
global $rasp, $feature_ranks;
$whi = $aseco->server->jfreu->white;
$yel = $aseco->server->jfreu->yellow;
$red = $aseco->server->jfreu->red;
$blu = $aseco->server->jfreu->blue;
$gre = $aseco->server->jfreu->green;
$adm = $aseco->server->jfreu->admin;
// if starting up, bail out immediately
if ($aseco->startup_phase) return;
// define admin/player title
$title = $aseco->isMasterAdmin($player) ? $adm.$aseco->titles['MASTERADMIN'][0] :
($aseco->isAdmin($player) ? $adm.$aseco->titles['ADMIN'][0] :
($aseco->isOperator($player) ? $adm.$aseco->titles['OPERATOR'][0] :
$blu.'New Player'));
// format ladder rank with narrow spaces between the thousands
$rank = str_replace(' ', '$n $m', number_format($player->ladderrank, 0, ' ', ' '));
// abbreviate long nations
$nation = $player->nation;
if (strlen($nation) > 14)
$nation = mapCountry($nation);
if ($feature_ranks) {
$message = formatText($aseco->server->jfreu->player_joins,
$title, clean_nick($player->nickname),
$nation, $rank, $rasp->getRank($player->login));
} else {
$message = formatText($aseco->server->jfreu->player_join,
$title, clean_nick($player->nickname),
$nation, $rank);
}
$aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message));
} // player_connect
// called @ onPlayerDisconnect
function player_disconnect($aseco, $player)
{
$message = formatText($aseco->server->jfreu->player_left,
clean_nick($player->nickname),
formatTimeH($player->getTimeOnline() * 1000, false));
$aseco->client->query('ChatSendServerMessage', $aseco->formatColors($message));
} // player_disconnect
function clean_nick($nick)
{
global $aseco;
$whi = $aseco->server->jfreu->white;
$yel = $aseco->server->jfreu->yellow;
$red = $aseco->server->jfreu->red;
$blu = $aseco->server->jfreu->blue;
$gre = $aseco->server->jfreu->green;
$adm = $aseco->server->jfreu->admin;
$propre = stripColors($nick);
if ($propre == '') {
return $red.'ERROR';
}
return $propre;
} // clean_nick
?>