예제 #1
0
 internal void Init(Int32 p_days, Int32 p_hours, Int32 p_minutes)
 {
     m_lastTime = (m_time = new MMTime(p_minutes, p_hours, p_days));
     m_turn     = 0;
     m_calendar = new MMCalendar();
     m_calendar.Init(MMCalendar.EWeekDays.ASHDA, 1, MMCalendar.EMonths.SUN_BLOSSOM, 575);
 }
예제 #2
0
 public void UpdateDurationLabel()
 {
     if (m_partyBuff == null)
     {
         return;
     }
     if (!m_partyBuff.IsExpired())
     {
         m_label.enabled = true;
         if (m_partyBuff.DurationIsMinutes)
         {
             MMTime mmtime = m_partyBuff.ExpireTime - LegacyLogic.Instance.GameTime.Time;
             m_label.text = LocaManager.GetText("TIMESTRING", mmtime.Hours.ToString("D2"), mmtime.Minutes.ToString("D2"));
         }
         else if (m_partyBuff.Infinite)
         {
             m_label.enabled = false;
         }
         else
         {
             m_label.text = m_partyBuff.ExpireTimeTurns.ToString();
         }
     }
     else
     {
         OnTooltip(false);
     }
 }
예제 #3
0
        private Single GetDayNightBlend()
        {
            MMTime time = LegacyLogic.Instance.GameTime.Time;
            Int32  num  = ConfigManager.Instance.Game.DawnStartHours * 60;
            Int32  num2 = ConfigManager.Instance.Game.NightStartHours * 60;
            Int32  num3 = time.Hours * 60 + time.Minutes;

            if (num3 >= num && num3 < num2)
            {
                Single num4 = num2 - num;
                return((num3 - num) / num4 - 0.5f);
            }
            Single num5 = 1440 - num2 + num;
            Int32  num6;

            if (num3 >= num2)
            {
                num6 = num3 - num2;
            }
            else
            {
                num6 = 1440 - num2 + num3;
            }
            return(num6 / num5 + 0.5f);
        }
예제 #4
0
 public QuestObjective(Int32 staticID, Int32 count)
 {
     m_staticData            = StaticDataHandler.GetStaticData <QuestObjectiveStaticData>(EDataType.QUEST_OBJECTIVES, staticID);
     m_currentCounter        = 0;
     m_maxCounter            = count;
     m_questState            = EQuestState.INACTIVE;
     m_activationTime        = default(MMTime);
     m_currentStepsOnTerrain = 0;
 }
예제 #5
0
        public void OnCheckRecharge()
        {
            GameTime gameTime = LegacyLogic.Instance.GameTime;
            MMTime   p_t      = new MMTime(0, 8, gameTime.Time.Days);

            if (gameTime.Time >= p_t && m_lastActivationTime < p_t)
            {
                State = EInteractiveObjectState.ON;
                LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.OBJECT_STATE_CHANGED, EventArgs.Empty);
            }
        }
예제 #6
0
 public ConditionHandler(Character p_character)
 {
     m_character                 = p_character;
     m_lastHandelTime            = LegacyLogic.Instance.GameTime.Time;
     m_poisonHealthDamagePercent = ConfigManager.Instance.Game.PoisonHealthDamage;
     m_tick = new MMTime(ConfigManager.Instance.Game.MinutesDeficiencySyndromesTick, 0, 0);
     m_deficiencySyndromesRest = default(MMTime);
     m_deficiencySyndromesRest.AddMinutes(ConfigManager.Instance.Game.HoursDeficiencySyndromesRest * 60);
     m_poisonEvadeDecrease = ConfigManager.Instance.Game.PoisonEvadeDecrease;
     m_sentEvent           = 0;
     m_logEntries          = new List <LogEntryEventArgs>();
     m_getKilledEntries    = new List <LogEntryEventArgs>();
 }
예제 #7
0
        private void OnGameTimeChanged(Object p_sender, EventArgs p_args)
        {
            MMTime time = LegacyLogic.Instance.GameTime.Time;

            foreach (QuestStep questStep in m_quests)
            {
                if (questStep.QuestState == EQuestState.ACTIVE && questStep.CheckTime(time))
                {
                    LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.QUESTLOG_CHANGED, new QuestChangedEventArgs(QuestChangedEventArgs.Type.COMPLETED_OBJECTIVE, questStep));
                    if (questStep.CheckFinished())
                    {
                        FinalizeStep(questStep);
                    }
                }
            }
        }
예제 #8
0
        internal void UpdateTime(Int32 p_minutes, ETimeChangeReason p_reason)
        {
            m_lastTime = m_time;
            m_time    += new MMTime(p_minutes);
            if (DayState != LastDayState)
            {
                OnDayStateChanged(p_reason);
            }
            MMTime p_t = new MMTime(0, 8, m_time.Days);

            if (m_time >= p_t && m_lastTime < p_t)
            {
                Grid grid = LegacyLogic.Instance.MapLoader.Grid;
                foreach (GridSlot gridSlot in grid.SlotIterator())
                {
                    foreach (InteractiveObject interactiveObject in gridSlot.GetInteractiveObjectIterator())
                    {
                        RechargingObject rechargingObject = interactiveObject as RechargingObject;
                        if (rechargingObject != null)
                        {
                            rechargingObject.OnCheckRecharge();
                        }
                    }
                }
            }
            if (p_reason == ETimeChangeReason.Movement && m_time.Hours == 0)
            {
                if ((p_minutes == 1 && m_time.Minutes == 1) || (p_minutes > 1 && m_time.Minutes > 0 && m_time.Minutes <= p_minutes))
                {
                    m_calendar.NextDay();
                }
            }
            else if (p_reason == ETimeChangeReason.Resting)
            {
                m_calendar.SetDateByPassedTime(m_time.Days);
            }
            LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.GAMETIME_TIME_CHANGED, new GameTimeEventArgs(DayState, LastDayState, p_reason));
        }
예제 #9
0
        public void UpdateItems()
        {
            Boolean flag = !m_initialItemUpdateDone;

            m_initialItemUpdateDone = true;
            if (m_offerData.RefreshType == EOfferRefreshType.DAYBREAK && m_updateTime.Days != LegacyLogic.Instance.GameTime.Time.Days)
            {
                flag = true;
            }
            if (flag)
            {
                m_items.Clear();
                m_updateTime = LegacyLogic.Instance.GameTime.Time;
                foreach (ItemOffer itemOffer in m_offerData.ItemOffers)
                {
                    for (Int32 j = 0; j < itemOffer.ItemQuantity; j++)
                    {
                        BaseItem baseItem = ItemFactory.CreateItem(itemOffer.ItemType, itemOffer.ItemID);
                        Boolean  flag2    = false;
                        foreach (BaseItem baseItem2 in m_items)
                        {
                            flag2 = Consumable.AreSameConsumables(baseItem2, baseItem);
                            if (flag2)
                            {
                                Consumable consumable = (Consumable)baseItem2;
                                consumable.Counter++;
                                break;
                            }
                        }
                        if (baseItem != null && !flag2)
                        {
                            m_items.Add(baseItem);
                        }
                    }
                }
            }
        }
예제 #10
0
 public void Interact()
 {
     if (State == EInteractiveObjectState.ON)
     {
         String text = String.Empty;
         State = EInteractiveObjectState.OFF;
         m_lastActivationTime = LegacyLogic.Instance.GameTime.Time;
         LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.OBJECT_STATE_CHANGED, EventArgs.Empty);
         if (m_partyBuff != EPartyBuffs.NONE)
         {
             LegacyLogic.Instance.WorldManager.Party.Buffs.AddBuff(m_partyBuff, 1f);
             text = Localization.Instance.GetText("GAMEMESSAGE_BLESSED");
             GameMessageEventArgs p_eventArgs = new GameMessageEventArgs(text, 0f, false);
             LegacyLogic.Instance.EventManager.InvokeEvent(null, EEventType.GAME_MESSAGE, p_eventArgs);
             MessageEventArgs p_args = new MessageEventArgs(text, true);
             LegacyLogic.Instance.ActionLog.PushEntry(p_args);
         }
         else if (m_special == ERechargerSpecial.RESTORE)
         {
             foreach (Character character in LegacyLogic.Instance.WorldManager.Party.GetCharactersAlive())
             {
                 if (!character.ConditionHandler.HasCondition(ECondition.DEAD) && (character.HealthPoints != character.MaximumHealthPoints || character.ManaPoints != character.MaximumManaPoints))
                 {
                     character.ChangeHP(character.MaximumHealthPoints + Math.Abs(character.HealthPoints));
                     character.ChangeMP(character.MaximumManaPoints + Math.Abs(character.ManaPoints));
                 }
             }
             LegacyLogic.Instance.EventManager.InvokeEvent(null, EEventType.PARTY_RESTORED, EventArgs.Empty);
             text = Localization.Instance.GetText("GAME_MESSAGE_PARTY_RESTORED");
             MessageEventArgs p_args2 = new MessageEventArgs(text, true);
             LegacyLogic.Instance.ActionLog.PushEntry(p_args2);
         }
         else if (m_special == ERechargerSpecial.CURE)
         {
             for (Int32 i = 0; i < 4; i++)
             {
                 Character member = LegacyLogic.Instance.WorldManager.Party.GetMember(i);
                 if (member.ConditionHandler.HasCondition(ECondition.DEAD))
                 {
                     member.ConditionHandler.RemoveCondition(ECondition.DEAD);
                     member.Resurrect();
                     LegacyLogic.Instance.EventManager.InvokeEvent(this, EEventType.CHARACTER_REVIVED, EventArgs.Empty);
                 }
                 if (member.ConditionHandler.HasCondition(ECondition.UNCONSCIOUS))
                 {
                     member.ConditionHandler.RemoveCondition(ECondition.UNCONSCIOUS);
                     member.Resurrect();
                 }
                 member.ConditionHandler.RemoveCondition(ECondition.PARALYZED);
                 member.ConditionHandler.RemoveCondition(ECondition.STUNNED);
                 member.ConditionHandler.RemoveCondition(ECondition.SLEEPING);
                 member.ConditionHandler.RemoveCondition(ECondition.POISONED);
                 member.ConditionHandler.RemoveCondition(ECondition.CONFUSED);
                 member.ConditionHandler.RemoveCondition(ECondition.WEAK);
                 member.ConditionHandler.RemoveCondition(ECondition.CURSED);
             }
             LegacyLogic.Instance.WorldManager.Party.Buffs.RemoveAllBuffs();
             text = Localization.Instance.GetText("GAMEMESSAGE_BLESSED");
             GameMessageEventArgs p_eventArgs2 = new GameMessageEventArgs(text, 0f, false);
             LegacyLogic.Instance.EventManager.InvokeEvent(null, EEventType.GAME_MESSAGE, p_eventArgs2);
             MessageEventArgs p_args3 = new MessageEventArgs(text, true);
             LegacyLogic.Instance.ActionLog.PushEntry(p_args3);
         }
     }
     else
     {
         GameMessageEventArgs p_eventArgs3 = new GameMessageEventArgs("GAMEMESSAGE_NOTHING_HAPPENS", 0f, true);
         LegacyLogic.Instance.EventManager.InvokeEvent(null, EEventType.GAME_MESSAGE, p_eventArgs3);
     }
 }
예제 #11
0
 public RechargingObject(Int32 p_staticID, Int32 p_spawnerID) : base(p_staticID, EObjectType.RECHARGING_OBJECT, p_spawnerID)
 {
     State = EInteractiveObjectState.ON;
     m_lastActivationTime = new MMTime(0, 0, 0);
 }
예제 #12
0
        /// <summary>
        /// Adds an event to the scenario that will be triggered at the specified time.
        /// </summary>
        /// <param name="timeInStringNotation">Time in hh:mm:ss:SSS string notation.</param>
        /// <param name="action">Action.</param>
        /// <param name="eventName">The name of the MMEvent to trigger when that event is met.</param>
        protected virtual void AddTimeEvent(string timeInStringNotation, Action action, string eventName = "")
        {
            float startTime = MMTime.TimeStringToFloat(timeInStringNotation);

            _scenario.Add(new ScenarioEvent(0f, startTime, action, eventName, ScenarioEvent.ScenarioEventTypes.TimeBased));
        }
예제 #13
0
        private Int32 GetTimeSinceLastRestAsHours(MMTime p_lastRestTime)
        {
            MMTime mmtime = LegacyLogic.Instance.GameTime.Time - p_lastRestTime;

            return(mmtime.Days * 24 + mmtime.Hours);
        }