コード例 #1
0
ファイル: DebugInfoAction.cs プロジェクト: Hengle/CsharpCode
        public override void DoAction(IEventArgs args)
        {
            string realKey = FreeUtil.ReplaceVar(key, args);

            if (realKey == "sc")
            {
                int c = args.GameContext.sceneObject.GetEntities().Length;

                args.TempUsePara(new StringPara("info", c.ToString()));

                action.Act(args);

                args.ResumePara("info");
            }

            if (realKey == "mp")
            {
                List <MapConfigPoints.ID_Point> ps = MapConfigPoints.current.IDPints;

                List <string> list = new List <string>();
                foreach (MapConfigPoints.ID_Point p in ps)
                {
                    list.Add(p.ID + "=" + p.points.Count);
                }

                args.TempUsePara(new StringPara("info", StringUtil.GetStringFromStrings(list, ", ")));

                action.Act(args);

                args.ResumePara("info");
            }
        }
コード例 #2
0
        public static void Handle(IEventArgs args, DebugCommand message, PlayerEntity player)
        {
            if (commandDic.ContainsKey(message.Command.ToLower()))
            {
                FreeLog.Reset();

                IGameAction action = commandDic[message.Command.ToLower()];

                if (FreeLog.IsEnable())
                {
                    FreeLog.SetTrigger(string.Format("命令行 {0}: {1}", message.Command, string.Join(" ", message.Args)));
                }

                if (commandPara == null)
                {
                    commandPara = new StringPara("command", "");
                }

                if (message.Args != null)
                {
                    for (int i = 1; i <= message.Args.Length; i++)
                    {
                        args.TempUsePara(new StringPara("arg" + i, message.Args[i - 1]));
                    }
                }


                args.TempUsePara(commandPara);
                args.TempUse("current", (FreeData)player.freeData.FreeData);

                action.Act(args);

                if (message.Command == "relive")
                {
                    player.isFlagCompensation = true;
                }

                args.Resume("current");
                args.ResumePara("command");

                if (message.Args != null)
                {
                    for (int i = 1; i <= message.Args.Length; i++)
                    {
                        args.ResumePara("arg" + i);
                    }
                }

                FreeLog.Print();
            }
        }
コード例 #3
0
ファイル: TriggerArgs.cs プロジェクト: yangfan111/CsharpCode
        public void Trigger(IEventArgs args, GameTriggers triggers, int trigger)
        {
            for (int i = 0; i < units.Count; i++)
            {
                if (units[i].unit != null)
                {
                    args.TempUse(units[i].key, units[i].unit);
                }
            }
            for (int i = 0; i < paras.Count; i++)
            {
                args.TempUsePara(paras[i]);
            }

            triggers.Trigger(trigger, args);

            for (int i = 0; i < units.Count; i++)
            {
                if (units[i].unit != null)
                {
                    args.Resume(units[i].key);
                }
            }
            for (int i = 0; i < paras.Count; i++)
            {
                args.ResumePara(paras[i].GetName());
            }

            Reset();
        }
コード例 #4
0
ファイル: TriggerArgs.cs プロジェクト: yangfan111/CsharpCode
        public void Act(IEventArgs args, IGameAction action)
        {
            for (int i = 0; i < units.Count; i++)
            {
                if (units[i].unit != null)
                {
                    args.TempUse(units[i].key, units[i].unit);
                }
            }
            for (int i = 0; i < paras.Count; i++)
            {
                args.TempUsePara(paras[i]);
            }

            action.Act(args);

            for (int i = 0; i < units.Count; i++)
            {
                if (units[i].unit != null)
                {
                    args.Resume(units[i].key);
                }
            }
            for (int i = 0; i < paras.Count; i++)
            {
                args.ResumePara(paras[i].GetName());
            }

            Reset();
        }
コード例 #5
0
        private void HandlePlayer(Collider collider, IEventArgs fr, Contexts contexts, float damage, Vector3 bombPos)
        {
            var entityReference = collider.transform.GetComponent <EntityReference>();
            var player          = entityReference.Reference as PlayerEntity;

            if (null == player)
            {
                Logger.ErrorFormat("player {0} has no player reference ", collider.name);
                return;
            }
            if (HasObstacle(player.position.Value, player.position.Value + Vector3.up * CeilCheckDistance))
            {
                return;
            }

            /*if (player.IsOnVehicle())
             * {
             *  if (Logger.IsDebugEnabled)
             *  {
             *      Logger.Debug("player in vehicle ");
             *  }
             *  var vehicleEntity = contexts.vehicle.GetEntityWithEntityKey(player.controlledVehicle.EntityKey);
             *  vehicleEntity.GetGameData().DecreaseHp(Core.Prediction.VehiclePrediction.Cmd.VehiclePartIndex.Body, damage);
             * }
             * else
             * {*/
            if (null != action)
            {
                disPara.SetValue(Math.Max(0,
                                          (fr.GetFloat(radius) - Vector3.Distance(bombPos, player.position.Value)) / fr.GetFloat(radius)));
                fr.TempUsePara(damagePara);
                fr.TempUsePara(disPara);
                fr.TempUsePara(typePara);
                fr.TempUse("current", (FreeData)player.freeData.FreeData);
                action.Act(fr);

                fr.ResumePara("damage");
                fr.ResumePara("dis");
                fr.ResumePara("type");
                fr.Resume("current");
            }

            //}
        }
コード例 #6
0
ファイル: ActionCondition.cs プロジェクト: yangfan111/common
        public bool Meet(IEventArgs args)
        {
            condition.SetValue(false);
            args.TempUsePara(condition);

            if (action != null)
            {
                action.Act(args);
            }

            args.ResumePara(Success);

            return((bool)condition.GetValue());
        }
コード例 #7
0
        public override void DoAction(IEventArgs args)
        {
            long serverTime = args.Rule.ServerTime;

            if (!string.IsNullOrEmpty(time) && realTime == 0)
            {
                realTime = args.GetInt(time);
            }

            if (startTime == 0)
            {
                startTime = serverTime;
                timePara  = new IntPara(Time, 0);
            }

            timePara.SetValue(serverTime - startTime);
            args.TempUsePara(timePara);

            if (action != null)
            {
                action.Act(args);
            }

            if (realTime > 0 && serverTime - startTime >= realTime)
            {
                args.FreeContext.AiSuccess = true;
                startTime = 0;
            }

            if (condition != null && condition.Meet(args))
            {
                args.FreeContext.AiSuccess = true;
                startTime = 0;
            }

            args.ResumePara(Time);
        }
コード例 #8
0
        public override void DoAction(IEventArgs args)
        {
            Ini(args);

            List <FreeData> list = new List <FreeData>();

            foreach (PlayerEntity unit in args.GameContext.player.GetInitializedPlayerEntities())
            {
                if (unit.hasFreeData)
                {
                    FreeData fd = (FreeData)unit.freeData.FreeData;
                    args.TempUse(selectedName, fd);
                    if (con == null || con.Meet(args))
                    {
                        list.Add(fd);
                    }
                    args.Resume(selectedName);
                }
            }

            if (!StringUtil.IsNullOrEmpty(order))
            {
                DataBlock bl = new DataBlock();
                foreach (FreeData fd in list)
                {
                    bl.AddData(fd);
                }
                if (method == null || FreeUtil.IsVar(order))
                {
                    method = new SelectMethod(order);
                }
                list.Clear();
                foreach (IFeaturable fe in method.Select(bl).GetAllDatas())
                {
                    list.Add((FreeData)fe);
                }
            }
            if (list.Count > 0)
            {
                if (count > 0)
                {
                    int[] ids = RandomUtil.Random(0, list.Count - 1, count);
                    if (!StringUtil.IsNullOrEmpty(order))
                    {
                        ids = new int[(int)MyMath.Min(count, list.Count)];
                        for (int i = 0; i < ids.Length; i++)
                        {
                            ids[i] = i;
                        }
                    }
                    for (int i = 0; i < ids.Length; i++)
                    {
                        int      id   = ids[i];
                        FreeData unit = list[id];
                        args.TempUsePara(new IntPara("index", i + 1));
                        args.TempUsePara(new IntPara("count", ids.Length));
                        args.TempUse(selectedName, unit);
                        action.Act(args);
                        args.Resume(selectedName);
                        args.ResumePara("index");
                        args.ResumePara("count");
                    }
                }
                else
                {
                    int i = 1;
                    foreach (FreeData unit in list)
                    {
                        args.TempUsePara(new IntPara("index", i++));
                        args.TempUsePara(new IntPara("count", list.Count));
                        args.TempUse(selectedName, unit);
                        action.Act(args);
                        args.Resume(selectedName);
                        args.ResumePara("index");
                        args.ResumePara("count");
                    }
                }
            }
            else
            {
                if (noneAction != null)
                {
                    noneAction.Act(args);
                }
            }
        }