示例#1
0
        /// <summary>
        /// Check if we should trigger due symptoms
        /// </summary>
        private void CheckSymptomOccurence(SicknessAffliction sicknessAffliction, LivingHealthMasterBase playerHealth)
        {
            Sickness sickness = sicknessAffliction.Sickness;

            // Loop on each reached stage to see if a symptom should trigger
            for (int stage = 0; stage < sickness.SicknessStages.Count; stage++)
            {
                if (stage < sicknessAffliction.CurrentStage)
                {
                    float?stageNextOccurence = sicknessAffliction.GetStageNextOccurence(stage);
                    if ((stageNextOccurence != null) && (startedTime > stageNextOccurence))
                    {
                        SicknessStage sicknessStage = sickness.SicknessStages[stage];

                        // Since many symptoms need to be called within the main thread, we invoke it
                        sicknessManager.blockingCollectionSymptoms.Add(new SymptomManifestation(sicknessAffliction, stage, playerHealth));

                        if (sicknessStage.RepeatSymptom)
                        {
                            ScheduleStageSymptom(sicknessAffliction, stage);
                        }
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Schedule the next occurence of the symptom of a particular stage
        /// </summary>
        /// <param name="sicknessAffliction">A sickness afflicting a player</param>
        /// <param name="stage">The stage for which the symptom must be scheduled</param>
        private void ScheduleStageSymptom(SicknessAffliction sicknessAffliction, int stage)
        {
            Sickness      sickness      = sicknessAffliction.Sickness;
            SicknessStage sicknessStage = sickness.SicknessStages[stage];

            if (sicknessStage.RepeatMaxDelay < sicknessStage.RepeatMinDelay)
            {
                Logger.LogError($"Sickness: {sickness.SicknessName}. Repeatable sickness symptoms should always have a RepeatMaxDelay ({sicknessStage.RepeatMaxDelay}) >= RepeatMinDelay ({sicknessStage.RepeatMinDelay})", Category.Health);
                return;
            }

            if (sicknessStage.RepeatMinDelay < 5)
            {
                Logger.LogError($"Sickness: {sickness.SicknessName}. Repeatable sickness symptoms should have a RepeatMinDelay ({sicknessStage.RepeatMinDelay}) >= 5.  Think of the server performance.", Category.Health);
                return;
            }

            sicknessAffliction.ScheduleStageNextOccurence(stage, startedTime + random.Next((int)sicknessStage.RepeatMinDelay, (int)sicknessStage.RepeatMaxDelay));
        }