/// <summary> /// Возможно ли добавить к prevMarker дополнительный extraMarker. /// </summary> /// <param name="prevMarker">Исходный маркер, в который можно добавить новый.</param> /// <param name="extraMarker">Новый маркер.</param> /// <returns>Возвращает true - можно, false - нельзя.</returns> public static bool CheckPrevMarkerNeedsExtraMarker(Game.Marker prevMarker, Game.Marker extraMarker) { #region null and empty marker check if (prevMarker == null || extraMarker == null) { return(false); } if (prevMarker.Compare(0, 0, 0)) { return(false); } #endregion #region Перехват 200700 // Перехват. 200700 // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (prevMarker.Compare(2, 7, 0)) { var res = extraMarker.Compare(1, 3, 0) || extraMarker.Compare(1, 4, 0) || extraMarker.Compare(1, 5, 0) || extraMarker.Compare(1, 8, 0) || extraMarker.Compare(1, 6, 1); return(res); } #endregion #region Единоборство. 200100 // Единоборство. 200100 // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (prevMarker.Compare(2, 1, 0)) { var res = extraMarker.Compare(1, 3, 0) || extraMarker.Compare(1, 4, 0) || extraMarker.Compare(1, 5, 0) || extraMarker.Compare(1, 8, 0) || extraMarker.Compare(1, 6, 1); return(res); } #endregion #region Отбор 200600 // Отбор. 200600 // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (prevMarker.Compare(2, 6, 0)) { var res = extraMarker.Compare(1, 3, 0) || extraMarker.Compare(1, 4, 0) || extraMarker.Compare(1, 5, 0) || extraMarker.Compare(1, 8, 0) || extraMarker.Compare(1, 6, 1); return(res); } #endregion #region Отбитый бросок // Отбитый бросок 400200 // возможен с флагами: // Фиксация шайбы вратарем 300600 // Отбивание шайбы вратарем 100900 if (prevMarker.Compare(4, 2, 0)) { var res = extraMarker.Compare(3, 6, 0) || extraMarker.Compare(1, 9, 0); return(res); } #endregion return(false); }
/*registrator_save_del_f_match_event * * Параметры: * @action tinyint - 1 - сохранить, 2 - удалить * @id int - id маркера (для сохранения и удаления) * @match_id int - id матча * @half tinyint - номер тайма * @second float - секунда * @c_action int - id действия * @f_team int - id команды * @f_player int - id игрока * @opponent_f_team int - id команды оппонента * @opponent_f_player int - id игрока-оппонента * @pos_x float - позиция точки (X) * @pos_y float - позиция точки (Y) * @opponent_pos_x float - позиция точки назначения (X) * @opponent_pos_y float - позиция точки назначения (Y) * @c_zone tinyint - id зоны * @opponent_c_zone tinyint - id зоны назначения * @f_user int - id пользователя, сохраняющего/удаляющего данные * @ret int OUTPUT - результат операции: вернет id маркера при удаче и отрицательное значение при ошибке * @msg varchar(500) OUTPUT - вернет текст ошибки */ public static void SaveMarker(Game.HockeyIce game, Game.Marker mk) { if (mk.Compare(3, new int[] { 1, 2 }) || mk.Compare(8, 1)) { mk.Win = 0; } var datain = new Dictionary <string, object>(); datain.Add("action", mk.FlagDel ? 2 : 1); if (mk.Id > 0) { datain.Add("id", mk.Id); } datain.Add("match_id", game.Match.Id); datain.Add("half", mk.Half.Index); var time = Math.Round((float)mk.TimeVideoReal / 1000f, 3); if (Uniso.InStat.Game.HockeyIce.Role == Game.HockeyIce.RoleEnum.Online && !mk.Compare(18) && !mk.Compare(16)) { datain.Add("second_online", time); } else { datain.Add("second", time); } datain.Add("second_clear", Math.Round((float)mk.TimeActual / 1000f, 3)); datain.Add("c_action", mk.ActionCode); if (mk.Team1 != null) { datain.Add("f_team", mk.Team1.Id); } if (mk.Player1 != null) { datain.Add("f_player", mk.Player1.Id); } if (mk.Team2 != null) { datain.Add("opponent_f_team", mk.Team2.Id); } if (mk.Player2 != null) { datain.Add("opponent_f_player", mk.Player2.Id); } if (!mk.Point1.IsEmpty) { datain.Add("pos_x", mk.Point1.X); datain.Add("pos_y", mk.Point1.Y); } if (!mk.Point2.IsEmpty) { datain.Add("opponent_pos_x", mk.Point2.X); datain.Add("opponent_pos_y", mk.Point2.Y); } datain.Add("data1_int", mk.Num); datain.Add("data2_int", mk.Sync); datain.Add("f_user", mk.user_id); datain.Add("link", mk.Link); // TODO: Вот тут в datain добавлять свойства маркера. var dataout = new Dictionary <string, object>(); dataout.Add("ret", "int"); dataout.Add("msg", "varchar(500)"); var rqst = String.Empty; var req = Request(HOCK_PRE, "registrator_save_del_f_match_event_2", datain, dataout, out rqst); if (!req.ContainsKey("variables")) { throw new Exception("Error parsing saving"); } var vars = (Dictionary <string, object>)req["variables"]; if (!vars.ContainsKey("@ret")) { throw new Exception("Error parsing saving"); } var ret = Convert.ToInt32(vars["@ret"]); if (ret <= 0) { throw new Exception("Ошибка при сохранении маркера. MESSAGE: " + Convert.ToString(vars["@msg"])); } mk.Id = ret; mk.FlagUpdate = false; }
/// <summary> /// Получить правило создания дополнительного маркера childMarker в маркере sourceMarker. /// </summary> /// <param name="sourceMarker">Родительский маркер.</param> /// <param name="childMarker">Дочерний маркер в составе родительского.</param> /// <returns>Правило создания дополнительного маркер.</returns> public static AddChildMarkerRule CheckRuleForeExtraMarker(Game.Marker sourceMarker, Game.Marker childMarker) { #region Перехват 200700 // Перехват. 200700 // добавляется 100 мс. // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (sourceMarker.Compare(2, 7, 0)) { var isMyRule = childMarker.Compare(1, 3, 0) || childMarker.Compare(1, 4, 0) || childMarker.Compare(1, 5, 0) || childMarker.Compare(1, 8, 0) || childMarker.Compare(1, 6, 1); return(isMyRule ? AddChildMarkerRule.Add100ms : AddChildMarkerRule.None); } #endregion #region Единоборство 200100 // Единоборство. 200100 // добавляется 100 мс. // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (sourceMarker.Compare(2, 1, 0)) { var isMyRule = childMarker.Compare(1, 3, 0) || childMarker.Compare(1, 4, 0) || childMarker.Compare(1, 5, 0) || childMarker.Compare(1, 8, 0) || childMarker.Compare(1, 6, 1); return(isMyRule ? AddChildMarkerRule.Add100ms : AddChildMarkerRule.None); } #endregion #region Единоборство 200600 // Отбор. 200600 // добавляется 100 мс. // возможен с: // Пас по борту 100300 // Пас 100400 // ОП 100500 // Вброс 100800 // Выброс(+) 100601 if (sourceMarker.Compare(2, 6, 0)) { var isMyRule = childMarker.Compare(1, 3, 0) || childMarker.Compare(1, 4, 0) || childMarker.Compare(1, 5, 0) || childMarker.Compare(1, 8, 0) || childMarker.Compare(1, 6, 1); return(isMyRule ? AddChildMarkerRule.Add100ms : AddChildMarkerRule.None); } #endregion return(AddChildMarkerRule.None); }
/*registrator_ask_f_match_event * * Параметры: * @match_id int - id матча * @dl tinyint - 1 - выдать все маркеры, включая удаленные, 0 - только не удаленные * * Возвращает поля: * id - id записи * half - номер тайма * second - секунда * c_action - id действия * action_name - наименование действия * f_team - id команды * team_name - наименование команды * f_player - id игрока * player_name - имя+фамилия игрока * opponent_f_team - id команды оппонента * opponent_team_name - наименование команды оппонента * opponent_f_player - id игрока-оппонента * opponent_player_name - имя+фамилия игрока-оппонента * pos_x * pos_y * opponent_pos_x * opponent_pos_y * f_user - id последнего изменившего запись пользователя * user_name - имя+фамилия последнего изменившего запись пользователя * dl - флаг удаления записи */ public static List <Marker> GetMarkers(Uniso.InStat.Game.HockeyIce game, int match_id) { var datain = new Dictionary <string, object>(); datain.Add("match_id", match_id); datain.Add("dl", 0); string rqst; var req = Request(HOCK_PRE, "registrator_ask_f_match_event", datain, new Dictionary <string, object>(), out rqst); var objlist = (object[])req["data"]; var res = new List <Marker>(); foreach (Dictionary <string, object> u in objlist) { try { var period = Convert.ToInt32(u["half"]); var half = game.HalfList.FirstOrDefault(o => o.Index == period); if (half == null) { throw new Exception(String.Format("Указанный период игры ({0}) не найден в системе", period)); } var c_action = Convert.ToInt32(u["c_action"]); var sync = 0; if (u.ContainsKey("data2_int")) { sync = Convert.ToInt32(u["data2_int"]); } var mk = new Game.Marker(game) { Id = Convert.ToInt32(u["id"]), ActionCode = c_action, Half = half, Link = u.ContainsKey("link") && u["link"] != null?Convert.ToInt32(u["link"]) : 0, player1_id = u["f_player"] != null?Convert.ToInt32(u["f_player"]) : 0, team1_id = u["f_team"] != null?Convert.ToInt32(u["f_team"]) : 0, player2_id = u["opponent_f_player"] != null?Convert.ToInt32(u["opponent_f_player"]) : 0, team2_id = u["opponent_f_team"] != null?Convert.ToInt32(u["opponent_f_team"]) : 0, Point1 = new System.Drawing.PointF { X = u["pos_x"] != null?Convert.ToSingle(u["pos_x"]) : 0, Y = u["pos_y"] != null?Convert.ToSingle(u["pos_y"]) : 0, }, Point2 = new System.Drawing.PointF { X = u["opponent_pos_x"] != null?Convert.ToSingle(u["opponent_pos_x"]) : 0, Y = u["opponent_pos_y"] != null?Convert.ToSingle(u["opponent_pos_y"]) : 0, }, user_id = u["f_user"] != null?Convert.ToInt32(u["f_user"]) : 0, Sync = sync, }; if (u.ContainsKey("second_clear") && u["second_clear"] != null) { try { var sav = 0.0f; var sa = u["second_clear"].ToString().Replace(".", System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator); if (Single.TryParse(sa, out sav)) { mk.TimeActualSrv = Convert.ToInt32(sav * 1000f); } } catch { } } if (Game.HockeyIce.Role == Game.HockeyIce.RoleEnum.Online) { if (!mk.Compare(1, 1) && !mk.Compare(1, 2) && !mk.Compare(3, 8) && !mk.Compare(8, 1) && !mk.Compare(5) && !mk.Compare(9) && !mk.Compare(3, 1) && !mk.Compare(16) && !mk.Compare(18)) { continue; } if (mk.Compare(18, 9)) { continue; } } var time1 = -1; if (u.ContainsKey("second") && u["second"] != null) { time1 = Convert.ToInt32(Convert.ToSingle(u["second"].ToString().Replace(".", System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)) * 1000f); } var time2 = -1; if (u.ContainsKey("second_online") && u["second_online"] != null) { time2 = Convert.ToInt32(Convert.ToSingle(u["second_online"].ToString().Replace(".", System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator)) * 1000f); } mk.TimeVideoReal = Game.HockeyIce.Role == Game.HockeyIce.RoleEnum.Online ? time2 : time1; if (u.ContainsKey("players_num_team1")) { mk.NumTeam1 = Convert.ToInt32(u["players_num_team1"]); } if (u.ContainsKey("players_num_team2")) { mk.NumTeam2 = Convert.ToInt32(u["players_num_team2"]); } if (u.ContainsKey("data1_int")) { mk.Num = Convert.ToInt32(u["data1_int"]); } res.Add(mk); } catch (Exception ex) { Log.WriteException(ex); throw new Exception("Ошибка в формате данных registrator_ask_f_match_event"); } } return(res); }