示例#1
0
        /// <summary>
        /// Check a parts of introduction event/quest when player warped.
        /// When player reach 10 floor of mines, then we got letter tomorrow
        /// When player got letter and go to Adventurer's guild, play Marlon event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Events_CheckEvent(object sender, ICheckEventEventArgs e)
        {
            if (e.Location.Name.Equals("AdventureGuild") && e.Player.mailReceived.Contains(LETTER_KEY) && !this.GameMaster.Data.GetPlayerState(e.Player).isEligible)
            {
                if (this.contentLoader.LoadStrings("Data/Events").TryGetValue("adventureBegins", out string eventData) && !Game1.eventUp)
                {
                    Event marlonEvent = new Event(eventData);

                    marlonEvent.onEventFinished += new Action(() => {
                        Quest nextQuest = this.StoryHelper.GetQuestById(2);

                        nextQuest.showNew.Value = true;
                        nextQuest.accept();

                        this.GameMaster.Data.GetPlayerState().isEligible = true;
                        this.GameMaster.SyncData();
                        this.monitor.Log($"Player {e.Player.Name} is now eligible to recruit companions!", LogLevel.Info);

                        Game1.player.questLog.Add(nextQuest);
                        Game1.addHUDMessage(new HUDMessage(this.contentLoader.LoadString("Strings/Strings:objectiveUpdate"), 2));
                    });

                    e.Location.startEvent(marlonEvent);
                }
            }
        }
示例#2
0
        private void Events_CheckEvent(object sender, ICheckEventEventArgs e)
        {
            if (Game1.CurrentEvent != null || Game1.eventUp)
            {
                return;
            }

            var recruitedCsm = this.companionManager
                               .PossibleCompanions
                               .Values
                               .FirstOrDefault(csm => csm.CurrentStateFlag == StateMachine.CompanionStateMachine.StateFlag.RECRUITED);

            if (recruitedCsm == null)
            {
                return;
            }

            var events = this.contentLoader.LoadStrings("Data/Events");

            foreach (var key in events.Keys)
            {
                string[] tokens = key.Split('/');

                if (tokens.Length >= 4 && tokens[0] == "companion" && recruitedCsm.Name == tokens[2] && e.Location.Name == tokens[3])
                {
                    int eventId = int.Parse(tokens[1]);

                    if (!Game1.player.eventsSeen.Contains(eventId))
                    {
                        e.Location.startEvent(new Event(events[key], eventId));
                        break;
                    }
                }
            }
        }
        private void Events_CheckEvent(object sender, ICheckEventEventArgs e)
        {
            if (Game1.CurrentEvent != null || Game1.eventUp)
            {
                return;
            }

            var recruitedCsm = this.companionManager
                               .PossibleCompanions
                               .Values
                               .FirstOrDefault(csm => csm.CurrentStateFlag == StateMachine.CompanionStateMachine.StateFlag.RECRUITED);

            if (recruitedCsm == null)
            {
                return;
            }

            var events = this.contentLoader.LoadStrings("Data/Events");

            foreach (var key in events.Keys)
            {
                string[] tokens = key.Split('/');

                if (tokens.Length >= 4 && tokens[0] == "companion" && recruitedCsm.Name == tokens[2] && e.Location.Name == tokens[3])
                {
                    int  eventId = int.Parse(tokens[1]);
                    bool canPlay = tokens.Length == 4 || this.epu.CheckConditions(string.Join("/", tokens.Skip(4).ToArray()));

                    if (!Game1.player.eventsSeen.Contains(eventId) && canPlay)
                    {
                        var companionEvent = new Event(events[key], eventId);

                        companionEvent.onEventFinished += () =>
                        {
                            var afterEventPosition = Game1.player.positionBeforeEvent;

                            if (recruitedCsm.Companion.currentLocation is MineShaft mines)
                            {
                                afterEventPosition = recruitedCsm.Reflection.GetProperty <Vector2>(mines, "tileBeneathLadder").GetValue();
                                Game1.player.positionBeforeEvent = afterEventPosition;
                            }

                            recruitedCsm.Companion.setTileLocation(afterEventPosition);
                        };

                        e.Location.startEvent(companionEvent);
                        break;
                    }
                }
            }
        }