@@ -13,15 +13,15 @@ public static class HalloweenHauntings
13
13
private static Timer _timer ;
14
14
private static Timer _clearTimer ;
15
15
16
- private static int m_TotalZombieLimit ;
17
- private static int m_DeathQueueLimit ;
18
- private static int m_QueueDelaySeconds ;
19
- private static int m_QueueClearIntervalSeconds ;
16
+ private const int TotalZombieLimit = 200 ;
17
+ private const int DeathQueueLimit = 200 ;
18
+ private const int QueueDelaySeconds = 120 ;
19
+ private const int QueueClearIntervalSeconds = 1800 ;
20
20
21
21
private static HashSet < PlayerMobile > _deathQueue ;
22
22
23
- private static readonly Rectangle2D [ ] m_Cemetaries =
24
- {
23
+ private static readonly Rectangle2D [ ] _cemetaries =
24
+ [
25
25
new ( 1272 , 3712 , 30 , 20 ) , // Jhelom
26
26
new ( 1337 , 1444 , 48 , 52 ) , // Britain
27
27
new ( 2424 , 1098 , 20 , 28 ) , // Trinsic
@@ -39,37 +39,31 @@ public static class HalloweenHauntings
39
39
new ( 712 , 1104 , 22 , 30 ) , // Yew
40
40
new ( 5824 , 1464 , 6 , 22 ) , // Fire Dungeon
41
41
new ( 5224 , 3655 , 5 , 14 ) // T2A
42
- } ;
42
+ ] ;
43
43
44
44
internal static Dictionary < PlayerMobile , ZombieSkeleton > _reAnimated ;
45
45
46
- public static void Initialize ( )
46
+ [ OnEvent ( nameof ( PlayerMobile . PlayerDeathEvent ) ) ]
47
+ public static void OnPlayerDeathEvent ( PlayerMobile pm )
47
48
{
48
- m_TotalZombieLimit = 200 ;
49
- m_DeathQueueLimit = 200 ;
50
- m_QueueDelaySeconds = 120 ;
51
- m_QueueClearIntervalSeconds = 1800 ;
49
+ var now = Core . Now ;
52
50
53
- var today = Core . Now ;
54
- var tick = TimeSpan . FromSeconds ( m_QueueDelaySeconds ) ;
55
- var clear = TimeSpan . FromSeconds ( m_QueueClearIntervalSeconds ) ;
56
-
57
- _reAnimated = new Dictionary < PlayerMobile , ZombieSkeleton > ( ) ;
58
- _deathQueue = new HashSet < PlayerMobile > ( ) ;
59
-
60
- if ( today >= HolidaySettings . StartHalloween && today <= HolidaySettings . FinishHalloween )
51
+ if ( now < HolidaySettings . StartHalloween || now > HolidaySettings . FinishHalloween )
61
52
{
62
- _timer = Timer . DelayCall ( tick , 0 , Timer_Callback ) ;
63
- _clearTimer = Timer . DelayCall ( clear , 0 , Clear_Callback ) ;
53
+ return ;
64
54
}
65
- }
66
55
67
- [ OnEvent ( nameof ( PlayerMobile . PlayerDeathEvent ) ) ]
68
- public static void OnPlayerDeathEvent ( PlayerMobile pm )
69
- {
70
- if ( _timer . Running && ! _deathQueue . Contains ( pm ) && _deathQueue . Count < m_DeathQueueLimit )
56
+ _timer ??= Timer . DelayCall ( TimeSpan . FromSeconds ( QueueDelaySeconds ) , 0 , Timer_Callback ) ;
57
+ _clearTimer ??= Timer . DelayCall ( TimeSpan . FromSeconds ( QueueClearIntervalSeconds ) , 0 , Clear_Callback ) ;
58
+
59
+ if ( _timer . Running )
71
60
{
72
- _deathQueue . Add ( pm ) ;
61
+ _deathQueue ??= [ ] ;
62
+
63
+ if ( _deathQueue . Count < DeathQueueLimit )
64
+ {
65
+ _deathQueue . Add ( pm ) ;
66
+ }
73
67
}
74
68
}
75
69
@@ -84,49 +78,53 @@ private static void Clear_Callback()
84
78
return ;
85
79
}
86
80
87
- _reAnimated . Clear ( ) ;
88
- _deathQueue . Clear ( ) ;
81
+ _reAnimated ? . Clear ( ) ;
82
+ _deathQueue ? . Clear ( ) ;
89
83
}
90
84
91
85
private static void Timer_Callback ( )
92
86
{
93
-
94
87
if ( Core . Now > HolidaySettings . FinishHalloween )
95
88
{
96
89
_timer . Stop ( ) ;
97
90
_timer = null ;
98
91
return ;
99
92
}
100
93
101
- PlayerMobile player = null ;
94
+ if ( _deathQueue == null )
95
+ {
96
+ return ;
97
+ }
102
98
99
+ PlayerMobile player = null ;
103
100
foreach ( var entry in _deathQueue )
104
101
{
105
- if ( ! _reAnimated . ContainsKey ( entry ) )
102
+ if ( _reAnimated ? . ContainsKey ( entry ) != true )
106
103
{
107
104
player = entry ;
108
105
break ;
109
106
}
110
107
}
111
108
112
- if ( player ? . Deleted != false || _reAnimated . Count >= m_TotalZombieLimit )
109
+ if ( player ? . Deleted != false || _reAnimated ? . Count >= TotalZombieLimit )
113
110
{
114
111
return ;
115
112
}
116
113
117
114
var map = Utility . RandomBool ( ) ? Map . Trammel : Map . Felucca ;
118
- var home = Utility . RandomPointIn ( m_Cemetaries . RandomElement ( ) , map ) ;
115
+ var home = Utility . RandomPointIn ( _cemetaries . RandomElement ( ) , map ) ;
119
116
120
117
if ( map . CanSpawnMobile ( home ) )
121
118
{
122
119
var zombieskel = new ZombieSkeleton ( player ) ;
123
120
121
+ _reAnimated ??= [ ] ;
124
122
_reAnimated . Add ( player , zombieskel ) ;
123
+
125
124
zombieskel . Home = home ;
126
125
zombieskel . RangeHome = 10 ;
127
126
128
127
zombieskel . MoveToWorld ( home , map ) ;
129
-
130
128
_deathQueue . Remove ( player ) ;
131
129
}
132
130
}
0 commit comments