Пример #1
0
        /// <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);
        }
Пример #2
0
        /*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;
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /*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);
        }