diff --git a/Beu/SimpleChatColorer.php b/Beu/SimpleChatColorer.php new file mode 100644 index 0000000..227dd7e --- /dev/null +++ b/Beu/SimpleChatColorer.php @@ -0,0 +1,177 @@ +maniaControl = $maniaControl; + $this->maniaControl->getCallbackManager()->registerCallbackListener('ManiaPlanet.PlayerChat', $this, 'handlePlayerChat'); + $this->maniaControl->getCallbackManager()->registerCallbackListener(SettingManager::CB_SETTING_CHANGED, $this, 'updateSettings'); + + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_CHATDAMDMINCOLORER_USEADMINCOLOR, true, "Use Admin Color of Maniacontrol settings"); + $this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_CHATDAMDMINCOLORER_NUMBEROFGROUPS, 1, "Nomber of groups to setup"); + + $this->InitGroupsSettings(); + + try { + $this->maniaControl->getClient()->chatEnableManualRouting(); + $this->enabled = true; + } catch (\Exception $ex) { + $this->enabled = false; + echo "error! \n"; + } + } + + /** + * Update Widgets on Setting Changes + * + * @param Setting $setting + */ + public function updateSettings(Setting $setting) { + if ($setting->belongsToClass($this)) { + $this->InitGroupsSettings(); + } + } + + private function InitGroupsSettings() { + $i = 1; + $nbofgroups = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_CHATDAMDMINCOLORER_NUMBEROFGROUPS); + $this->groups = []; + + for ($i; $i <= $nbofgroups; $i++) { + $this->maniaControl->getSettingManager()->initSetting($this, "Group " . $i . " prefix", "", "Chat prefix of the group one"); + $this->maniaControl->getSettingManager()->initSetting($this, "Group " . $i . " players login", "", "Comma separated players login"); + + $this->groups[$this->maniaControl->getSettingManager()->getSettingValue($this, "Group " . $i . " prefix")] = explode(',', str_replace(' ', '', $this->maniaControl->getSettingManager()->getSettingValue($this, "Group " . $i . " players login"))); + } + + $allsettings = $this->maniaControl->getSettingManager()->getSettingsByClass($this); + foreach ($allsettings as $key => $value) { + $name = $value->setting; + preg_match('/^Group (\d*) prefix$/', $name, $match); + if (count($match) > 0 && $match[1] > $nbofgroups) { + $this->maniaControl->getSettingManager()->deleteSetting($this, "Group " . $match[1] . " prefix"); + $this->maniaControl->getSettingManager()->deleteSetting($this, "Group " . $match[1] . " players login"); + } + } + } + + + public function handlePlayerChat($callback) { + $playerUid = $callback[1][0]; + $login = $callback[1][1]; + $text = $callback[1][2]; + + if ($playerUid != 0 && substr($text, 0, 1) != "/" && $this->enabled) { + $source_player = $this->maniaControl->getPlayerManager()->getPlayer($login); + if ($source_player == null) { + return; + } + $nick = $source_player->nickname; + $authLevel = $source_player->authLevel; + + $prefix = ""; + + if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_CHATDAMDMINCOLORER_USEADMINCOLOR) && $authLevel > 0) { + $prefix = $this->maniaControl->getColorManager()->getColorByLevel($authLevel); + } else { + foreach ($this->groups as $groupprefix => $players) { + if (in_array($login, $players)) { + $prefix = $groupprefix; + break; + } + } + } + + try { + $this->maniaControl->getClient()->chatSendServerMessage('[$<' . $prefix . $nick . '$>] ' . $text); + } catch (\Exception $e) { + echo "error while sending chat message to $login: " . $e->getMessage() . "\n"; + } + } + } + + /** + * Unload the plugin and its Resources + */ + public function unload() { + $this->maniaControl->getClient()->chatEnableManualRouting(false); + $this->maniaControl->getCallbackManager()->unregisterCallbackListening('ManiaPlanet.OnPlayerChat', $this); + } +} +