示例#1
0
        public override void Execute(GameTrigger trigger)
        {
            trigger.Character.Client.Send(new DebugClearHighlightCellsMessage());

            var blue = trigger.Character.Map.GetBlueFightPlacement();
            var red  = trigger.Character.Map.GetRedFightPlacement();

            if (blue == null || blue.Length == 0)
            {
                trigger.ReplyError("Blue placements not defined");
            }
            else
            {
                trigger.Character.Client.Send(new DebugHighlightCellsMessage(Color.Blue.ToArgb(), blue.Select(x => x.Id)));
            }

            if (red == null || red.Length == 0)
            {
                trigger.ReplyError("Red placements not defined");
            }
            else
            {
                trigger.Character.Client.Send(new DebugHighlightCellsMessage(Color.Red.ToArgb(), red.Select(x => x.Id)));
            }
        }
示例#2
0
    private static VTrigger CreateTrigger(TriggerType type)
    {
        int      num      = TriggerManager.assign_trigger_id();
        VTrigger vTrigger = null;

        switch (type)
        {
        case TriggerType.GameTrigger:
            vTrigger = new GameTrigger(num);
            break;

        case TriggerType.UnitTrigger:
            vTrigger = new UnitTrigger(num);
            break;

        case TriggerType.TimerTrigger:
            vTrigger = new TimerTrigger(num);
            break;
        }
        if (vTrigger != null)
        {
            if (!TriggerManager.triggers.ContainsKey(num))
            {
                TriggerManager.triggers.Add(num, vTrigger);
            }
            else
            {
                TriggerManager.triggers[num] = vTrigger;
            }
        }
        return(vTrigger);
    }
示例#3
0
        public override void Execute(GameTrigger trigger)
        {
            var template = MountManager.Instance.GetTemplates().RandomElementOrDefault();
            var mount    = MountManager.Instance.CreateMount(trigger.Character, template);

            trigger.Character.EquipMount(mount);
        }
示例#4
0
        public override void Execute(GameTrigger trigger)
        {
            var map = trigger.Get <Map>("map");

            var pools = map.SpawningPools.OfType <DungeonSpawningPool>().ToArray();

            if (pools.Length == 0)
            {
                trigger.ReplyError("Target map {0} has no dungeon spawn", map.Id);
                return;
            }

            foreach (var spawn in pools.SelectMany(pool => pool.Spawns))
            {
                spawn.TeleportEvent     = true;
                spawn.TeleportCell      = trigger.Character.Cell.Id;
                spawn.TeleportMap       = trigger.Character.Map;
                spawn.TeleportDirection = trigger.Character.Direction;

                WorldServer.Instance.IOTaskPool.AddMessage(() =>
                                                           WorldServer.Instance.DBAccessor.Database.Update(spawn));
            }

            trigger.Reply("Teleport event defined.");
        }
示例#5
0
        public override void DoAction(IEventArgs args)
        {
            if (values != null)
            {
                args.TempUse(UnitTestConstant.Tester, GetPlayer(args));

                GameTrigger trigger = FreeLog.GetTrigger();

                foreach (ITestValue value in values)
                {
                    TestValue tv = value.GetCaseValue(args);
                    tv.Name = value.Name;

                    if (!dic.ContainsKey(tv.Name))
                    {
                        dic.Add(tv.Name, new List <TestValue>());
                        dic[tv.Name].Add(tv);
                    }

                    List <TestValue> list = dic[tv.Name];

                    if (!list[list.Count - 1].IsSame(tv))
                    {
                        list.Add(tv);
                    }
                }

                args.Resume(UnitTestConstant.Tester);
            }
        }
示例#6
0
    private void Update()
    {
        switch (_states)
        {
        case States.MenuState:
            MenuTrigger?.Invoke();
            break;

        case States.GameState:
            GameTrigger?.Invoke();
            break;

        case States.PauseState:
            PauseTrigger?.Invoke();
            break;

        case States.GameOverState:
            GameOverTrigger?.Invoke();
            break;

        case States.None:
            break;

        default:
            break;
        }
    }
示例#7
0
        public override void Execute(GameTrigger trigger)
        {
            var character = trigger.Character;
            var players   = character.Map.GetAllCharacters().ToArray();
            var itemToken = ItemManager.Instance.TryGetTemplate(20837);
            var amount    = trigger.Get <int>("amount");

            var item = character.Inventory.TryGetItem(itemToken);

            if (item.Stack < amount)
            {
                trigger.ReplyError("You doesn't have enough items !!");
                return;
            }

            character.Inventory.RemoveItem(item, amount);

            var amountPerPlayer = (int)Math.Ceiling((double)amount / players.Count());

            foreach (var player in players)
            {
                player.Inventory.AddItem(itemToken, amountPerPlayer);
            }

            trigger.Reply("Successfully add {0} items to {1} players !", amount, players.Count());
        }
示例#8
0
    public void placeTrigger(Vector3 triggerPoint, int triggerTypeIndex)
    {
        GameTrigger lTrigger = new GameTrigger();


        lTrigger.point = triggerPoint;
        lTrigger.type  = triggerTypeIndex;

        GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere);

        go.transform.position   = triggerPoint;
        go.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);

        switch (lTrigger.type)
        {
        case 0:
            go.GetComponent <Renderer>().material.color = new Color(0.5f, 1, 1);
            break;

        case 1:
            go.GetComponent <Renderer>().material.color = new Color(1, 0.5f, 1);
            break;

        case 2:
            go.GetComponent <Renderer>().material.color = new Color(1, 1, 0.5f);
            break;
        }


        lTrigger.gfx = go;

        gameTriggers.Add(lTrigger);
    }
示例#9
0
        public override void Execute(GameTrigger trigger)
        {
            var colorStr = trigger.Get <string>("color").ToLower();

            if (colorStr != "red" && colorStr != "blue")
            {
                trigger.ReplyError("Define a correct color (blue/red)");
                return;
            }

            var blue = colorStr == "blue";

            WorldServer.Instance.IOTaskPool.ExecuteInContext(() =>
            {
                if (blue)
                {
                    trigger.Character.Map.Record.BlueFightCells = new short[0];
                }
                else
                {
                    trigger.Character.Map.Record.RedFightCells = new short[0];
                }

                trigger.Character.Map.UpdateFightPlacements();

                WorldServer.Instance.DBAccessor.Database.Update(trigger.Character.Map.Record);
            });

            trigger.Character.Client.Send(new DebugClearHighlightCellsMessage());
        }
 public override void Execute(GameTrigger trigger)
 {
     trigger.Reply("Admin chat mode is : {0}", new object[]
     {
         trigger.Bold((trigger.Character.AdminMessagesEnabled = !trigger.Character.AdminMessagesEnabled) ? "Enabled" : "Disabled")
     });
 }
示例#11
0
        public override void Execute(GameTrigger trigger)
        {
            if (!trigger.Character.IsInFight())
            {
                trigger.ReplyError("You must be in a fight");
                return;
            }

            if (!trigger.Character.Fight.AIDebugMode)
            {
                trigger.ReplyError("AI debug mode must be enabled");
                return;
            }

            if (!(trigger.Character.Fight.FighterPlaying is AIFighter))
            {
                trigger.ReplyError("Current fighter is not an AI fighter");
                return;
            }

            var aiFighter = trigger.Character.Fight.FighterPlaying as AIFighter;

            int index = trigger.Get <int>("action");

            if (index >= aiFighter.Brain.SpellSelector.Possibilities.Count)
            {
                trigger.ReplyError("Specify an index between 0 and " + (aiFighter.Brain.SpellSelector.Possibilities.Count - 1));
                return;
            }

            var cast = aiFighter.Brain.SpellSelector.Possibilities[index];

            //aiFighter.Brain.ExecuteSpellCast(cast);
        }
示例#12
0
 private static void AddGameTrigger(GameTrigger trigger)
 {
     if (!TriggerManager.game_callbacks.ContainsKey(trigger.trigger_event))
     {
         TriggerManager.game_callbacks.Add(trigger.trigger_event, new List <GameTrigger>());
     }
     TriggerManager.game_callbacks[trigger.trigger_event].Add(trigger);
 }
示例#13
0
        public void TestLifeIsLessThanZero()
        {
            new LifeIsLessThanZero("0");
            GameTrigger.OnGameOver();
            var list = EntitiesRunner.Current.GetEntitiesOfType <FontText>();

            Assert.AreEqual(1, list.Count);
            Assert.AreEqual("Game Over", list[0].Text);
        }
        public void TestSubtractLife()
        {
            new SubtractLife();
            var player = new Player();

            GameTrigger.OnEnemyReachGoal();
            AdvanceTimeAndUpdateEntities();
            Assert.AreEqual(0, player.LivesLeft);
        }
示例#15
0
    public static VTrigger CreateGameEventTrigger(GameEvent e, TriggerCondition condition, TriggerAction action)
    {
        GameTrigger gameTrigger = (GameTrigger)TriggerManager.CreateTrigger(TriggerType.GameTrigger);

        TriggerManager.TriggerRegisterGameEvent(gameTrigger, e);
        TriggerManager.TriggerAddCondition(gameTrigger, condition);
        TriggerManager.TriggerAddAction(gameTrigger, action);
        return(gameTrigger);
    }
        public void TestStartingLives()
        {
            var trigger = new StartingLives("5");

            Assert.AreEqual(5, trigger.Lives);
            var player = new Player();

            GameTrigger.OnGameStarting();
            Assert.AreEqual(trigger.Lives, player.LivesLeft);
        }
        public void TestStartingGold()
        {
            var trigger = new StartingGold("50");

            Assert.AreEqual(50, trigger.Gold);
            var player = new Player();

            GameTrigger.OnGameStarting();
            Assert.AreEqual(trigger.Gold, player.Gold);
        }
示例#18
0
        public void TestStartTimer()
        {
            var trigger = new StartTimer("90");

            Assert.AreEqual(90, trigger.StartingTime);
            var player = new Player();

            GameTrigger.OnGameStarting();
            Assert.AreEqual(trigger.StartingTime, player.Time);
            GameTrigger.OnUpdateEverySecond();
        }
示例#19
0
        public override void Execute(GameTrigger trigger)
        {
            if (!trigger.Character.IsInFight())
            {
                trigger.ReplyError("You must be in a fight");
                return;
            }

            trigger.Character.Fight.AIDebugMode = !trigger.Character.Fight.AIDebugMode;
            trigger.Reply("AI debug mode " + (trigger.Character.Fight.AIDebugMode ? "enabled" : "disabled"));
        }
示例#20
0
        internal float Trigger(
            Guid userId,
            Guid characterId,
            GameTrigger triggerType,
            string triggerData = null,
            int triggerCount   = 1)
        {
            var requirement = achievement.Requirements.Where(x => x.Trigger == triggerType).ToList();

            if (requirement.Count == 0)
            {
                return(-1); // no such requirement
            }

            // Grab the achievement for this requirement
            // if (requirement.AchievementId)..

            // always go through all requirements to check if all
            // has been met.
            var requirementsMet = 0f;

            foreach (var req in achievement.Requirements)
            {
                var progress = userAchievement.Progress.FirstOrDefault(x => x.Trigger == req.Trigger && x.Data == req.Data);
                if (progress == null)
                {
                    progress = new UserAchievementProgress
                    {
                        Trigger = req.Trigger,
                        Data    = req.Data
                    };
                    userAchievement.Progress.Add(progress);
                }

                if (progress.Count >= req.Count && progress.Data == req.Data)
                {
                    ++requirementsMet;
                    continue;
                }

                if (req.Trigger == triggerType && req.Data == triggerData)
                {
                    progress.Count += triggerCount;
                    if (progress.Count >= req.Count && progress.Data == req.Data)
                    {
                        ++requirementsMet;
                    }
                }
            }

            return(requirementsMet / achievement.Requirements.Count);
        }
示例#21
0
        public override void Execute(GameTrigger trigger)
        {
            var character = trigger.Character;

            if (character.GuildMember != null)
            {
                character.Guild.SetBoss(character.GuildMember);
            }
            else
            {
                trigger.ReplyError("You must be in a guild to do that !");
            }
        }
示例#22
0
        private GameTrigger BeginModifyTrigger(TrackWriter trk)
        {
            var selected = SelectedTrigger;

            if (selected == -1)
            {
                return(null);
            }
            var trigger = trk.Triggers[selected];

            _trigger_copy = trigger.Clone();
            return(trigger);
        }
示例#23
0
        private bool ShouldTriggerRun(GameTrigger trigger)
        {
            bool shouldTriggerRun = false;
            var  targetElement    = this.GetElementById(trigger.TargetId);

            //
            //For Numeric comparisons (i.e. all except for Equal and Not Equal)
            //
            //Assume that if the Target Value is not numeric then its value is 0
            //Perhaps this should be checked by a validation method and an exception thrown when loading rather than using 0 here.
            float numericTargetValue = 0;

            float.TryParse(targetElement.Value, out numericTargetValue);
            //Assume that if the Trigger Value is not numeric then its value is 0
            //Perhaps this should be checked by a validation method and an exception thrown when loading rather than using 0 here.
            float numericTriggerValue = 0;

            float.TryParse(trigger.Value, out numericTriggerValue);

            switch (trigger.Comparison)
            {
            case TargetComparisons.Equal:
                shouldTriggerRun = targetElement.Value == trigger.Value;
                break;

            case TargetComparisons.NotEqual:
                shouldTriggerRun = targetElement.Value != trigger.Value;
                break;

            case TargetComparisons.GreaterThan:
                shouldTriggerRun = numericTargetValue > numericTriggerValue;
                break;

            case TargetComparisons.GreaterThanOrEqual:
                shouldTriggerRun = numericTargetValue >= numericTriggerValue;
                break;

            case TargetComparisons.LessThan:
                shouldTriggerRun = numericTargetValue < numericTriggerValue;
                break;

            case TargetComparisons.LessThanOrEqual:
                shouldTriggerRun = numericTargetValue <= numericTriggerValue;
                break;

            default:
                throw new Exception(string.Format("The Comparison {0} is not recognized, specified in the Trigger with Target {1}.", trigger.Comparison, trigger.TargetId));
            }

            return(shouldTriggerRun);
        }
示例#24
0
        public override void Execute(GameTrigger trigger)
        {
            var colorStr = trigger.Get <string>("color").ToLower();

            if (colorStr != "red" && colorStr != "blue")
            {
                trigger.ReplyError("Define a correct color (blue/red)");
                return;
            }

            var blue = colorStr == "blue";

            var cellsStr = trigger.Get <string>("cells").Split(',');

            var cells = cellsStr.Select(x =>
            {
                int id;
                if (!int.TryParse(x, out id) || id < 0 || id > 559)
                {
                    throw new ConverterException(string.Format("{0} is not a valid cell id", x));
                }

                var cell = trigger.Character.Map.GetCell(id);
                if (!cell.Walkable)
                {
                    throw new ConverterException(string.Format("Cell {0} is not walkable", x));
                }

                return(cell);
            });

            WorldServer.Instance.IOTaskPool.ExecuteInContext(() =>
            {
                if (blue)
                {
                    trigger.Character.Map.Record.BlueFightCells = cells.Select(x => x.Id).ToArray();
                }
                else
                {
                    trigger.Character.Map.Record.RedFightCells = cells.Select(x => x.Id).ToArray();
                }

                trigger.Character.Map.UpdateFightPlacements();

                trigger.Character.Client.Send(new DebugHighlightCellsMessage(Color.Blue.ToArgb(), trigger.Character.Map.Record.BlueFightCells));
                trigger.Character.Client.Send(new DebugHighlightCellsMessage(Color.Red.ToArgb(), trigger.Character.Map.Record.RedFightCells));

                WorldServer.Instance.DBAccessor.Database.Update(trigger.Character.Map.Record);
            });
        }
示例#25
0
        public override void Execute(GameTrigger trigger)
        {
            var target = trigger.Character.Map.GetActors <Merchant>(x => x.Name == trigger.Get <string>("target")).FirstOrDefault();

            if (target == null)
            {
                trigger.ReplyError("Target not found !");
                return;
            }

            MerchantManager.Instance.RemoveMerchantSpawn(target.Record);
            MerchantManager.Instance.UnActiveMerchant(target);

            trigger.Reply("Target Merchant kicked");
        }
        public override void DoAction(IEventArgs args)
        {
            if (values != null)
            {
                SimpleParaList testParaList = new SimpleParaList();

                FreeData fd = GetPlayer(args);
                if (null != fd)
                {
                    PlayerEntity player = fd.Player;
                    var          entity = args.GameContext.mapObject.GetEntityWithEntityKey(new EntityKey(player.gamePlay.UseEntityId, (int)EEntityType.MapObject));
                    if (null != entity && entity.hasDoorData)
                    {
                        testParaList.AddFields(new ObjectFields(entity.doorData));
                    }
                }

                SimpleParable sp = new SimpleParable(testParaList);
                args.TempUse("testPara", sp);

                args.TempUse(UnitTestConstant.Tester, GetPlayer(args));

                GameTrigger trigger = FreeLog.GetTrigger();

                foreach (ITestValue value in values)
                {
                    TestValue tv = value.GetCaseValue(args);
                    tv.Name = value.Name;

                    if (!dic.ContainsKey(tv.Name))
                    {
                        dic.Add(tv.Name, new List <TestValue>());
                        dic[tv.Name].Add(tv);
                    }

                    List <TestValue> list = dic[tv.Name];

                    if (!list[list.Count - 1].IsSame(tv))
                    {
                        list.Add(tv);
                    }
                }

                args.Resume("testPara");
                args.Resume(UnitTestConstant.Tester);
            }
        }
示例#27
0
        private void EndModifyTrigger(GameTrigger trigger, TrackWriter trk)
        {
            var selected = SelectedTrigger;

            if (selected == -1)
            {
                throw new Exception(
                          "SelectedTrigger was removed during ModifyTrigger");
            }

            _changemade   = true;
            trigger.Start = (int)(_spinnerStart.Value);
            trigger.End   = (int)(_spinnerStart.Value + _spinnerDuration.Value);
            trk.Triggers[SelectedTrigger] = trigger;
            _editor.Timeline.TriggerChanged(_trigger_copy, trigger);
            UpdateFrame();
        }
示例#28
0
        public override void DoAction(IEventArgs args)
        {
            if (values != null)
            {
                args.TempUse(UnitTestConstant.Tester, GetPlayer(args));

                GameTrigger trigger = FreeLog.GetTrigger();

                foreach (var value in values)
                {
                    TestValue tv = value.GetCaseValue(args);
                    tv.Name = value.Name;
                    RecordResult(args, trigger, new TestValue[] { tv });
                }

                args.Resume(UnitTestConstant.Tester);
            }
        }
示例#29
0
        public override void Execute(GameTrigger trigger)
        {
            if (!trigger.Character.IsInFight())
            {
                trigger.ReplyError("You must be in a fight");
                return;
            }

            if (!trigger.Character.Fight.AIDebugMode)
            {
                trigger.ReplyError("AI debug mode must be enabled");
                return;
            }

            if (!(trigger.Character.Fight.FighterPlaying is AIFighter))
            {
                trigger.ReplyError("Current fighter is not an AI fighter");
                return;
            }

            var aiFighter = trigger.Character.Fight.FighterPlaying as AIFighter;

            trigger.Character.ClearHighlight();

            var enemy = aiFighter.Brain.Environment.GetNearestEnemy();

            if (trigger.IsArgumentDefined("los"))
            {
                trigger.Reply(trigger.Color("Cast with LoS", trigger.Character.HighlightCells(aiFighter.Brain.Environment.GetCellsWithLoS(enemy.Cell))));
            }

            foreach (var spell in aiFighter.Spells.Values)
            {
                var cell = aiFighter.Brain.Environment.GetCellToCastSpell(new TargetCell(enemy.Cell), spell, spell.CurrentSpellLevel.CastTestLos);
                if (cell != null)
                {
                    trigger.Reply(trigger.Color("Cast " + spell, trigger.Character.HighlightCell(cell)));
                }
            }

            var fleeCell = aiFighter.Brain.Environment.GetCellToFlee();

            trigger.Reply(trigger.Color("Flee cell", trigger.Character.HighlightCell(fleeCell)));
        }
示例#30
0
        public virtual void Merge(TriggerList triggers)
        {
            GameTrigger iniTrigger = null;

            foreach (GameTrigger gt in triggers)
            {
                if (gt.GetKey() == 1)
                {
                    iniTrigger = gt;
                    break;
                }
            }
            if (iniTrigger == null)
            {
                iniTrigger = new GameTrigger(1);
                triggers.AddTrigger(iniTrigger);
            }
            iniTrigger.AddAction(new UseGameComponent.AddComponentParaAction(this, this.name, args));
        }
示例#31
0
	public void placeTrigger( Vector3 triggerPoint, int triggerTypeIndex )
	{
		GameTrigger lTrigger = new GameTrigger ();


		lTrigger.point = triggerPoint;
		lTrigger.type = triggerTypeIndex;

		GameObject go = GameObject.CreatePrimitive (PrimitiveType.Sphere);
		go.transform.position = triggerPoint;
		go.transform.localScale = new Vector3 (1.0f, 1.0f, 1.0f);

		switch(lTrigger.type)
		{
		case 0:
			go.GetComponent<Renderer>().material.color = new Color(0.5f,1,1); 
			break;
		case 1:
			go.GetComponent<Renderer>().material.color = new Color(1,0.5f,1); 
			break;
		case 2:
			go.GetComponent<Renderer>().material.color = new Color(1,1,0.5f); 
			break;
		}

			
		lTrigger.gfx = go;

		gameTriggers.Add (lTrigger);
	}