PDA

Просмотр полной версии : [mod] История арены


Nordway
05.01.2010, 20:58
Вообщем даж язык не поворачивается назвать это патчем, но тем неменее - игрокам приятно, админам полезно. Просто хотелось сделать так же как в Оруженой на Оф сервере.

Цель: в базу записывается каждая игра на арене, кто с кем, когда, на какой карте, кто победил, новый рейтинг.

Т.к. в C++ ноль, и в коде мангоса пока мало разбираюсь, сделал по простому "чтоб работало". Если кто подскажет куда лучше запихнуть добавленный мной код (или может его как-то изменить) буду признателен.

Патч:

diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp
index c909a6e..a0ef7bd 100644
--- a/src/game/BattleGround.cpp
+++ b/src/game/BattleGround.cpp
@@ -826,6 +826,9 @@ void BattleGround::EndBattleGround(uint32 winner)
// this way all arena team members will get notified, not only the ones who participated in this match
winner_arena_team->NotifyStatsChanged();
loser_arena_team->NotifyStatsChanged();
+ CharacterDatabase.BeginTransaction();
+ CharacterDatabase.PExecute("INSERT INTO arena_team_history (winner_team, winner_rating, loser_team, loser_rating, type, map) VALUES ('%u', '%u', '%u', '%u', '%u', '%u')", winner_arena_team->GetId(), winner_arena_team->GetRating(), loser_arena_team->GetId(), loser_arena_team->GetRating(), winner_arena_team->GetType(), GetMapId());
+ CharacterDatabase.CommitTransaction();
}

if (winmsg_id)



SQL (в базу чаров):

DROP TABLE IF EXISTS `arena_team_history`;
CREATE TABLE `arena_team_history` (
`id` int(11) NOT NULL auto_increment COMMENT 'Identifier',
`winner_team` int(10) unsigned NOT NULL default '0',
`winner_rating` int(10) unsigned NOT NULL default '0',
`loser_team` int(10) unsigned NOT NULL default '0',
`loser_rating` int(10) unsigned NOT NULL default '0',
`type` int(2) unsigned NOT NULL default '0',
`map` int(10) unsigned NOT NULL default '0',
`play_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


winner_team - записывается ID победившей команды
winner_rating - новый рейтинг победившей команды
loser_team - записывается ID проигравшей команды
loser_rating - новый рейтинг проигравшей команды
type - тип арены
map - ID карты (572 - лордерон, 559 - награнд, 562 - острогорье)
play_time - дата игры

Этих данных вполне хватит для небольшой статистики.


Для того чтобы можно было просматривать статистику самих матчей нужно будет сделать ещё одну таблицу, куда залить данные:
1. guid-ы игравших игроков
2. нанесённый ими урон\хил
3. количество смертельных ударов

Но пока что-то не получается найти те переменные, которые хранят эти данные для записи их в БД. Если кто поможет буду оч рад:))


P.S. надеюсь из этой идеи получится хороший и полезный мод для серверов))