На днях решил написать личный кабинет + админку для Mangos Zero. За основу взят yii-framework, и данный проект реализован как модуль к нему.
Что реализовано:
1) Простенький редактор таблицы characters, таких полей как name, account, level, money, class, gender, race, playerBytes, playerBytes2.
Поля gender, race, playerBytes, playerBytes2 напрямую редактировать нельзя, данные берутся путем копирования с существующих персонажей, поиск которых производится с помощью таблицы на странице. Нужна авторизация.
2) Статистика игроков онлайн. Вывод ника, уровня, класса и локации. Так же сортировка и фильтрация всего, кроме локации. Примененные фильтры сохраняются в сессии, нужно реализовать кнопку сброса сессии.
3) Статистика пвп. Для корректной работы нужно создать таблицу, вот скуль и серверная часть (думаю, сами догадаетесь куда присобачить эту функцию):
Код:
CREATE TABLE `character_honor_static` (
`guid` int(10) unsigned NOT NULL,
`hk` int(8) unsigned NOT NULL DEFAULT '0',
`dk` int(8) unsigned NOT NULL DEFAULT '0',
`today_hk` int(8) unsigned NOT NULL DEFAULT '0',
`today_dk` int(8) unsigned NOT NULL DEFAULT '0',
`yesterday_kills` int(8) unsigned NOT NULL DEFAULT '0',
`yesterday_cp` int(8) unsigned NOT NULL DEFAULT '0',
`thisWeek_kills` int(8) unsigned NOT NULL DEFAULT '0',
`thisWeek_cp` int(8) unsigned NOT NULL DEFAULT '0',
`lastWeek_kills` int(8) unsigned NOT NULL DEFAULT '0',
`lastWeek_cp` int(8) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Код:
void Player::_SaveHonorStatic()
{
CharacterDatabase.PExecute("DELETE FROM character_honor_static WHERE guid = '%u'", GetGUIDLow());
std::ostringstream ss;
ss << "INSERT INTO character_honor_static (guid, hk, dk, today_hk, today_dk, "
"yesterday_kills, yesterday_cp, thisWeek_kills, thisWeek_cp, lastWeek_kills, lastWeek_cp) VALUES ("
<< GetGUIDLow() << ", "
<< GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS) << ", "
<< GetUInt32Value(PLAYER_FIELD_LIFETIME_DISHONORABLE_KILLS) << ", "
<< GetUInt16Value(PLAYER_FIELD_SESSION_KILLS, 0) << ", "
<< GetUInt16Value(PLAYER_FIELD_SESSION_KILLS, 1) << ", "
<< GetUInt32Value(PLAYER_FIELD_YESTERDAY_KILLS) << ", "
<< GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION) << ", "
<< GetUInt32Value(PLAYER_FIELD_THIS_WEEK_KILLS) << ", "
<< GetUInt32Value(PLAYER_FIELD_THIS_WEEK_CONTRIBUTION) << ", "
<< GetUInt32Value(PLAYER_FIELD_LAST_WEEK_KILLS) << ", "
<< GetUInt32Value(PLAYER_FIELD_LAST_WEEK_CONTRIBUTION) << ")";
CharacterDatabase.Execute( ss.str().c_str() );
}
Репозиторий модуля, там же и описание как устанавливать:
https://bitbucket.org/hyperionzero/cms/src
С радостью отвечу на любые Ваши вопросы и выслушаю пожелания.
P.S. Буду очень благодарен за тестирование, так как у самого нет возможности все это протестировать.