Показать сообщение отдельно
Старый 05.01.2010, 20:58   #1
Nordway
Guest
 
Сообщений: n/a
По умолчанию [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. надеюсь из этой идеи получится хороший и полезный мод для серверов))
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
sven (07.01.2010)