YTDB

YTDB (http://ytdb.ru/index.php)
-   Патчи (http://ytdb.ru/forumdisplay.php?f=26)
-   -   [mod] История арены (http://ytdb.ru/showthread.php?t=2037)

Nordway 05.01.2010 20:58

[mod] История арены
 
Вообщем даж язык не поворачивается назвать это патчем, но тем неменее - игрокам приятно, админам полезно. Просто хотелось сделать так же как в Оруженой на Оф сервере.

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

Т.к. в 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. надеюсь из этой идеи получится хороший и полезный мод для серверов))


Текущее время: 02:22. Часовой пояс GMT +4.

YTDB - MaNGOS DataBase