SHOW:
|
|
- or go back to the newest paste.
1 | package twcore.bots.battlebot.PublicOps.Flags; | |
2 | ||
3 | import java.util.ArrayList; | |
4 | import java.util.Iterator; | |
5 | import java.util.List; | |
6 | ||
7 | import twcore.bots.battlebot.BZTimer; | |
8 | import twcore.bots.battlebot.ChatBuffer; | |
9 | import twcore.bots.battlebot.DoorMan; | |
10 | import twcore.core.BotAction; | |
11 | import twcore.core.events.PlayerDeath; | |
12 | import twcore.core.events.PlayerPosition; | |
13 | import twcore.core.events.WatchDamage; | |
14 | import twcore.core.game.Player; | |
15 | ||
16 | public class BaseFlagging { | |
17 | BotAction b; | |
18 | ChatBuffer bzChat; | |
19 | DoorMan bob; | |
20 | ||
21 | public BaseFlagging(BotAction b, ChatBuffer c, DoorMan bob) | |
22 | { | |
23 | this.b = b; | |
24 | this.bzChat = c; | |
25 | this.bob = bob; | |
26 | } | |
27 | ||
28 | /*-------------------------------------------------------------------------------\ | |
29 | * | |
30 | - | private String b_AtomicKiller = "~none~"; |
30 | + | * NEEDED VARS |
31 | - | private int b_AtomicKillerCount = 0; |
31 | + | * |
32 | *-------------------------------------------------------------------------------*/ | |
33 | private boolean m_StartingGame = false; | |
34 | private boolean m_GameOn = false; | |
35 | public boolean GameOn(){ return this.m_GameOn; } | |
36 | ||
37 | private long m_GameStartTimeStamp; | |
38 | ||
39 | // Flag lvz | |
40 | private int m_LvzOn = 1428; | |
41 | private int m_LvzOff = 1427; | |
42 | ||
43 | // Door to toggle on and off | |
44 | private byte m_DoorNumber = 5; | |
45 | ||
46 | // Map room coords | |
47 | private short[] m_MapRoom1 = new short[]{ 225 * 16, 778 * 16, 499 * 16, 846 * 16}; | |
48 | private short[] m_MapRoom2 = new short[]{ 499 * 16, 792 * 16, 785 * 16, 846 * 16}; | |
49 | private short[] m_FlagHotSpot = new short[]{ 12336, 13328, 12496, 13488 }; | |
50 | ||
51 | // Settings for timer | |
52 | private BZTimer m_StartGameSet; | |
53 | // settings for game timer | |
54 | private BZTimer m_GameTimerSet; | |
55 | ||
56 | // If base has initially been raided | |
57 | private boolean m_BeenRaided = false; | |
58 | private String m_WhoRaided = "~nobody~"; | |
59 | private short m_FreqRaided = 8025; | |
60 | private long m_RaidTime = 0; | |
61 | ||
62 | // Freq that owns the flag | |
63 | private short m_BaseOwner = 8025; | |
64 | private long m_BaseTimestamp; | |
65 | ||
66 | /*-------------------------------------------------------------------------------\ | |
67 | * | |
68 | * SUBSPACE EVENTS | |
69 | * | |
70 | *-------------------------------------------------------------------------------*/ | |
71 | public void PlayerPositionEvent(PlayerPosition p) | |
72 | { | |
73 | // If there is no game check for stragglers in the area | |
74 | if (!m_GameOn) | |
75 | { | |
76 | // Flag room | |
77 | if (InRegion(p,m_MapRoom1)||InRegion(p,m_MapRoom2)) | |
78 | { | |
79 | // Warp them back | |
80 | b.sendPrivateMessage(p.getPlayerID(), "There are no matches at this time and you are not authorized to be in this area."); | |
81 | b.warpTo(p.getPlayerID(), 512,512); | |
82 | } | |
83 | // No need to track flag hot spot unless game has started | |
84 | return; | |
85 | } | |
86 | ||
87 | // Flag HOTSPOT - If a new freq has taken possession | |
88 | if (InRegion(p, m_FlagHotSpot) && b.getPlayer(p.getPlayerID()).getFrequency() != m_BaseOwner) | |
89 | baseRaided(p); | |
90 | } | |
91 | public void PlayerDeathEvent(PlayerDeath pd) | |
92 | { | |
93 | // Don't continue if game isn't running | |
94 | if (!m_GameOn) return; | |
95 | ||
96 | if (InMapRoom(pd.getKillerID()) || InMapRoom(pd.getKilleeID())) | |
97 | { | |
98 | // Get basing freqs | |
99 | BaseFreq killerF = getBaseFreq(b.getPlayer(pd.getKillerID()).getFrequency(),b.getPlayerName(pd.getKillerID())); | |
100 | BaseFreq killedF = getBaseFreq(b.getPlayer(pd.getKilleeID()).getFrequency(),b.getPlayerName(pd.getKilleeID())); | |
101 | // Get players | |
102 | BasePlayer killer = killerF.getPlayer(b.getPlayerName(pd.getKillerID())); | |
103 | BasePlayer killed = killedF.getPlayer(b.getPlayerName(pd.getKilleeID())); | |
104 | ||
105 | killer.KilledPlayer(); | |
106 | killed.Died(); | |
107 | ||
108 | if (killerF.getFreq() == killedF.getFreq()) | |
109 | killer.killedTeamMate(); | |
110 | else if (killer.getMultis() > 1) | |
111 | updateMultiKillPlayer(killer); | |
112 | } | |
113 | } | |
114 | public void damageEvent(WatchDamage w) | |
115 | { | |
116 | if (!m_GameOn) return; | |
117 | ||
118 | if (InMapRoom(w.getAttacker()) || InMapRoom(w.getVictim())) | |
119 | { | |
120 | // Get basing freqs | |
121 | BaseFreq attackerF = getBaseFreq(b.getPlayer(w.getAttacker()).getFrequency(),b.getPlayerName(w.getAttacker())); | |
122 | BaseFreq victimF = getBaseFreq(b.getPlayer(w.getVictim()).getFrequency(),b.getPlayerName(w.getVictim())); | |
123 | ||
124 | BasePlayer a = attackerF.getPlayer(b.getPlayerName(w.getAttacker())); | |
125 | BasePlayer v = victimF.getPlayer(b.getPlayerName(w.getVictim())); | |
126 | ||
127 | if(a.equals(v)) | |
128 | a.damagedSelf(w.getEnergyLost()); | |
129 | else | |
130 | { | |
131 | a.dealtDamage(w.getEnergyLost()); | |
132 | v.tookDamage(w.getEnergyLost()); | |
133 | } | |
134 | } | |
135 | } | |
136 | /*-------------------------------------------------------------------------------\ | |
137 | * | |
138 | * MultiKills | |
139 | * | |
140 | *-------------------------------------------------------------------------------*/ | |
141 | // Time setting for multikills | |
142 | int m_MultiKillTimeLimit = 3000;//3 seconds | |
143 | // Holds all the multi kill messages | |
144 | private List<MultiMessageEvent> m_MultiKillMessages = new ArrayList<MultiMessageEvent>(); | |
145 | // SoundCodes to messages sent | |
146 | private int[] m_MultiAnnouncementsSoundCodes = new int[]{ 2, 2, 2, 21 }; | |
147 | // Messages to send according to kill amount | |
148 | private String[] m_MultiAnnouncements = new String[] | |
149 | { | |
150 | "[MULTIKILL] - @name@ got a DOUBLE kill.",//2 kills | |
151 | "[MULTIKILL] - @name@ with the TRIPLE KILL.",//3 kills | |
152 | "[MULTIKILL] - Quadruple ownage by @name@!",// 4 kills | |
153 | "[MULTIKILL] - Stop the madness! @name@ got @kills@ kills!"//5+ kills | |
154 | }; | |
155 | // Configures the message and sends it out | |
156 | private void announceMultiKillMessage(String PlayerName, int Kills) | |
157 | { | |
158 | int index = (Kills - 2) > (m_MultiAnnouncements.length - 1) ? m_MultiAnnouncements.length - 1: Kills - 2; | |
159 | ||
160 | b.sendArenaMessage( | |
161 | m_MultiAnnouncements[index].replace("@name@", PlayerName).replace("@kills@", Integer.toString(Kills)) | |
162 | , m_MultiAnnouncementsSoundCodes[index]); | |
163 | } | |
164 | // This goes in timer - checks for new messages and sends them | |
165 | private void updateMultiKillList() | |
166 | { | |
167 | // Ignore method if list is empty | |
168 | if (m_MultiKillMessages.isEmpty()) return; | |
169 | ||
170 | // Check next message | |
171 | if (m_MultiKillMessages.get(0).timeToSend()) | |
172 | { | |
173 | // Send out message and delete | |
174 | announceMultiKillMessage(m_MultiKillMessages.get(0).getPlayerName(),m_MultiKillMessages.get(0).getNumberOfKills()); | |
175 | m_MultiKillMessages.remove(0); | |
176 | } | |
177 | } | |
178 | // Creates/Updates multikill messages | |
179 | private void updateMultiKillPlayer(BasePlayer BPlayer) | |
180 | { | |
181 | // If player is already on list - update it | |
182 | for (MultiMessageEvent m: m_MultiKillMessages) | |
183 | { | |
184 | if (m.getPlayerName() == BPlayer.getPlayerName()) | |
185 | { | |
186 | m.updateMultiPlayer(BPlayer.getMultis()); | |
187 | return; | |
188 | } | |
189 | } | |
190 | // If he isn't on list create and store it in list | |
191 | m_MultiKillMessages.add( new MultiMessageEvent(BPlayer.getPlayerName(),BPlayer.getMultis())); | |
192 | } | |
193 | // Object to hold multi kill message info | |
194 | private class MultiMessageEvent | |
195 | { | |
196 | public MultiMessageEvent(String PlayerName, int Kills) | |
197 | { | |
198 | this.m_PlayerName = PlayerName; | |
199 | this.m_Kills = Kills; | |
200 | } | |
201 | ||
202 | private String m_PlayerName; | |
203 | public String getPlayerName(){ return m_PlayerName; } | |
204 | ||
205 | private long m_Timestamp = System.currentTimeMillis(); | |
206 | public void updateMultiPlayer(int Kills) | |
207 | { | |
208 | this.m_Kills = Kills; | |
209 | this.m_Timestamp = System.currentTimeMillis(); | |
210 | } | |
211 | ||
212 | private int m_Kills; | |
213 | public int getNumberOfKills() { return m_Kills;}; | |
214 | ||
215 | // Expiration time for new update - send out message | |
216 | public boolean timeToSend(){ return (System.currentTimeMillis() - m_Timestamp > m_MultiKillTimeLimit + 1000) ? true: false; } | |
217 | } | |
218 | ||
219 | /*-------------------------------------------------------------------------------\ | |
220 | * | |
221 | * BASE FLAG TIMER | |
222 | * | |
223 | *-------------------------------------------------------------------------------*/ | |
224 | // main timer for game | |
225 | public void BaseTimer() | |
226 | { | |
227 | updateMultiKillList(); | |
228 | updateTimerTasks(); | |
229 | } | |
230 | // List of timed events | |
231 | private List<BZTimer> Timers = new ArrayList<BZTimer>(); | |
232 | // Updates timers | |
233 | public void updateTimerTasks() | |
234 | { | |
235 | // sort through timers and update | |
236 | for (int i=Timers.size()-1; i> -1; i--) | |
237 | { | |
238 | if (!Timers.get(i).TimerExpired() ) | |
239 | Timers.get(i).UpdateTimer(b, bzChat); | |
240 | else | |
241 | { | |
242 | doTimerTask(Timers.get(i).getTimerTask()); | |
243 | Timers.remove(i); | |
244 | } | |
245 | } | |
246 | } | |
247 | // Timer tasks | |
248 | private void doTimerTask(int Task) | |
249 | { | |
250 | switch(Task) | |
251 | { | |
252 | case 1: doGameTimer(); break; | |
253 | case 2: doGameOver(); break; | |
254 | } | |
255 | } | |
256 | /*-------------------------------------------------------------------------------\ | |
257 | * | |
258 | * MAIN FUNCTIONS | |
259 | * | |
260 | *-------------------------------------------------------------------------------*/ | |
261 | public void m_StartGame() | |
262 | { | |
263 | if (m_GameOn || m_StartingGame) | |
264 | { | |
265 | bzChat.debugMessage("BaseFlagging has already been activated."); | |
266 | return; | |
267 | } | |
268 | // starting game duh | |
269 | m_StartingGame = true; | |
270 | ||
271 | b.sendUnfilteredPublicMessage("*objset -" + m_LvzOn + ", +" + m_LvzOff + ","); | |
272 | ||
273 | // ## Debug ## | |
274 | bzChat.debugMessage(" - [T20 Attack] Starting timer for Game start."); | |
275 | ||
276 | // Record the start to timer | |
277 | m_StartGameSet.StartTimer(); | |
278 | // add to our timer list | |
279 | Timers.add(m_StartGameSet); | |
280 | } | |
281 | private void doGameTimer() | |
282 | { | |
283 | // ## Debug ## | |
284 | bzChat.debugMessage(" - [T20 Attack] GameStarted"); | |
285 | ||
286 | // turn game on | |
287 | m_GameOn = true; | |
288 | // Open the map room doors | |
289 | bob.ChangeDoorStatus(m_DoorNumber, !m_GameOn); | |
290 | // Start Game timer | |
291 | m_GameTimerSet.StartTimer(); | |
292 | m_GameStartTimeStamp = System.currentTimeMillis(); | |
293 | // add to our timer list | |
294 | Timers.add(m_GameTimerSet); | |
295 | } | |
296 | private void doGameOver() | |
297 | { | |
298 | // ## Debug ## | |
299 | bzChat.debugMessage(" - [T20 Attack] GameEnded"); | |
300 | ||
301 | // Close the map room doors | |
302 | bob.ChangeDoorStatus(m_DoorNumber, !m_GameOn); | |
303 | ||
304 | // Record the last time held | |
305 | BaseFreq raided = getBaseFreq(m_BaseOwner,""); | |
306 | raided.addHoldTime(System.currentTimeMillis() - m_BaseTimestamp); | |
307 | ||
308 | int winFreqIndex = 999; | |
309 | long wintime = 0; | |
310 | ||
311 | ||
312 | for(BaseFreq bf: FreqList) | |
313 | { | |
314 | if(bf.getTotalHoldTime() > wintime) | |
315 | { | |
316 | winFreqIndex = FreqList.indexOf(bf); | |
317 | wintime = bf.getTotalHoldTime(); | |
318 | } | |
319 | } | |
320 | ||
321 | FreqList.get(winFreqIndex).doEndGameLoad(); | |
322 | ||
323 | for (String s:FreqList.get(winFreqIndex).getGamePrintOut()) | |
324 | b.sendArenaMessage(s); | |
325 | ||
326 | for(BaseFreq bf: FreqList) | |
327 | { | |
328 | //if (FreqList.indexOf(bf) != winFreqIndex) | |
329 | //{ | |
330 | // bf.doEndGameLoad(); | |
331 | // | |
332 | // for (String s:bf.getGamePrintOut()) | |
333 | // b.sendArenaMessage(s); | |
334 | //} | |
335 | /* b.sendArenaMessage("+-----------------------------------------------------------------------------"); | |
336 | b.sendArenaMessage("| Freq[ "+padL(Integer.toString(bf.getFreq()),4," ")+" : "+bf.getFreqName()+" ] Total Time[ "+getTimeMs(bf.getTotalHoldTime())+" ] "); | |
337 | b.sendArenaMessage("+-----------------------------------------------------------------------------"); | |
338 | for(BasePlayer bp:bf.FreqPlayers()) | |
339 | { | |
340 | b.sendPrivateMessage(bp.getPlayerName(),"Player: " + bp.getPlayerName()); | |
341 | b.sendPrivateMessage(bp.getPlayerName(),"-------------+ Captured Flags : " + bp.getCapturedFlags()); | |
342 | b.sendPrivateMessage(bp.getPlayerName(),"| | Kills : " + (bp.getKills() - bp.getTKs())); | |
343 | b.sendPrivateMessage(bp.getPlayerName(),"| | Deaths : " + bp.getDeaths()); | |
344 | b.sendPrivateMessage(bp.getPlayerName(),"| | Damage Dealt : " + bp.getDamageDealt()); | |
345 | b.sendPrivateMessage(bp.getPlayerName(),"| | Damage Received: " + bp.getDamageTaken()); | |
346 | b.sendPrivateMessage(bp.getPlayerName(),"| | Self Damage wtf: " + bp.getDamageSelf()); | |
347 | b.sendPrivateMessage(bp.getPlayerName(),"+------------+----------------------------------------------------------------"); | |
348 | }*/ | |
349 | } | |
350 | ||
351 | // Reset vars | |
352 | m_GameOn = false; | |
353 | m_StartingGame = false; | |
354 | m_BeenRaided = false; | |
355 | m_WhoRaided = "~nobody~"; | |
356 | m_FreqRaided = 8025; | |
357 | m_RaidTime = 0; | |
358 | m_BaseOwner = 8025; | |
359 | FreqList = new ArrayList<BaseFreq>(); | |
360 | // load timers | |
361 | loadTimers(); | |
362 | ||
363 | // Toggle flag off | |
364 | b.sendUnfilteredPublicMessage("*objset -" + m_LvzOn + ", +" + m_LvzOff + ","); | |
365 | } | |
366 | // Base has been raided | |
367 | private void baseRaided(PlayerPosition p) | |
368 | { | |
369 | // Grab freq info | |
370 | BaseFreq raiders = getBaseFreq(b.getPlayer(p.getPlayerID()).getFrequency(),b.getPlayerName(p.getPlayerID())); | |
371 | BasePlayer raider = raiders.getPlayer(b.getPlayerName(p.getPlayerID())); | |
372 | ||
373 | raider.capturedAFlag(); | |
374 | ||
375 | // Has base been initialy raided? | |
376 | if (!m_BeenRaided) | |
377 | { | |
378 | // Record initial raiders - getTimeMs | |
379 | m_BeenRaided = true; | |
380 | m_WhoRaided = b.getPlayerName(p.getPlayerID()); | |
381 | m_FreqRaided = raiders.getFreq(); | |
382 | m_RaidTime = System.currentTimeMillis() - m_GameStartTimeStamp; | |
383 | ||
384 | // ## DEBUG ## | |
385 | bzChat.debugMessage("Initial Base Raid: Player[ "+m_WhoRaided+" ] Freq[ "+m_FreqRaided+" ] Time[ "+getTimeMs(m_RaidTime)+" ]"); | |
386 | } | |
387 | else | |
388 | { | |
389 | // Grab losers info | |
390 | BaseFreq raided = getBaseFreq(m_BaseOwner,raider.getPlayerName()); | |
391 | raided.addHoldTime(System.currentTimeMillis() - m_BaseTimestamp); | |
392 | ||
393 | b.sendOpposingTeamMessageByFrequency(m_BaseOwner, "Flag lost. Time held [ "+getTimeMs(System.currentTimeMillis() - m_BaseTimestamp)+" ] TotalHoldTime[ "+getTimeMs(raided.getTotalHoldTime())+" ]"); | |
394 | } | |
395 | ||
396 | // make them owners | |
397 | m_BaseOwner = raiders.getFreq(); | |
398 | m_BaseTimestamp = System.currentTimeMillis(); | |
399 | // Toggle gfx | |
400 | FlagToggle(raiders.getFreq()); | |
401 | } | |
402 | // Toggle flag lvz for raid | |
403 | private void FlagToggle(short Freq) | |
404 | { | |
405 | // Get all Players | |
406 | Iterator<Player> i = b.getPlayingPlayerIterator(); | |
407 | ||
408 | // Toggle lvz off for all players | |
409 | b.sendUnfilteredPublicMessage("*objset -" + m_LvzOn + ", +" + m_LvzOff + ","); | |
410 | ||
411 | // Get all players on same freq and toggle lvz. | |
412 | while( i.hasNext() ){ | |
413 | Player p = i.next(); | |
414 | if( p.getFrequency() == Freq){ | |
415 | //Toggle lvz on for freq | |
416 | b.sendUnfilteredPrivateMessage( p.getPlayerID(), "*objset +" + m_LvzOn + ", -" + m_LvzOff + ","); | |
417 | } | |
418 | } | |
419 | } | |
420 | /*-------------------------------------------------------------------------------\ | |
421 | * | |
422 | * Player Object Methods | |
423 | * | |
424 | *-------------------------------------------------------------------------------*/ | |
425 | private class BasePlayer | |
426 | { | |
427 | public BasePlayer(String PlayerName) | |
428 | { | |
429 | this.m_PlayerName = PlayerName; | |
430 | } | |
431 | ||
432 | private String m_PlayerName; | |
433 | public String getPlayerName(){ return m_PlayerName; } | |
434 | ||
435 | private int m_CapturedFlags = 0; | |
436 | public int getCapturedFlags(){ return this.m_CapturedFlags;} | |
437 | public void capturedAFlag(){ m_CapturedFlags +=1; } | |
438 | ||
439 | private int m_TKs = 0; | |
440 | public int getTKs(){ return this.m_TKs;} | |
441 | public void killedTeamMate(){ this.m_TKs += 1;} | |
442 | ||
443 | private int m_Multi = 0; | |
444 | public int getMultis(){ return this.m_Multi;} | |
445 | private int m_BestMulti = 1; | |
446 | public int getBestMulti(){ return this.m_BestMulti;} | |
447 | private long m_KillTimestamp = System.currentTimeMillis(); | |
448 | ||
449 | private int m_Kills = 0; | |
450 | public int getKills(){ return this.m_Kills;} | |
451 | public void KilledPlayer() | |
452 | { | |
453 | // add player kills | |
454 | this.m_Kills += 1; | |
455 | // check for multikill | |
456 | if (System.currentTimeMillis() - m_KillTimestamp < m_MultiKillTimeLimit) | |
457 | { | |
458 | m_Multi+=1; | |
459 | if (m_Multi > m_BestMulti) m_BestMulti = m_Multi; | |
460 | } | |
461 | else m_Multi = 1; | |
462 | ||
463 | // update kill timestamp | |
464 | m_KillTimestamp = System.currentTimeMillis(); | |
465 | } | |
466 | ||
467 | private int m_Deaths = 0; | |
468 | public int getDeaths(){ return this.m_Deaths;} | |
469 | public void Died(){ this.m_Deaths += 1;} | |
470 | ||
471 | private int m_DamageSelf = 0; | |
472 | public int getDamageSelf() { return this.m_DamageSelf; } | |
473 | public void damagedSelf(int Damage) { this.m_DamageSelf += Damage;} | |
474 | ||
475 | private int m_DamageDealt = 0; | |
476 | public int getDamageDealt() { return this.m_DamageDealt; } | |
477 | public void dealtDamage(int Damage) { this.m_DamageDealt += Damage;} | |
478 | ||
479 | private int m_DamageTaken = 0; | |
480 | public int getDamageTaken() { return this.m_DamageTaken; } | |
481 | public void tookDamage(int Damage) { this.m_DamageTaken += Damage;} | |
482 | } | |
483 | /*-------------------------------------------------------------------------------\ | |
484 | * | |
485 | * Freq Object Methods | |
486 | * | |
487 | *-------------------------------------------------------------------------------*/ | |
488 | // Master list of active freqs | |
489 | private List<BaseFreq> FreqList = new ArrayList<BaseFreq>(); | |
490 | // Get freq object by freq number | |
491 | private BaseFreq getBaseFreq(short freq, String PlayerName) | |
492 | { | |
493 | for(BaseFreq b:FreqList) | |
494 | if (b.getFreq() == freq) return b; | |
495 | ||
496 | BaseFreq newBF = new BaseFreq(freq,b.getPlayer(PlayerName).getSquadName()); | |
497 | FreqList.add(newBF); | |
498 | return FreqList.get((FreqList.indexOf(newBF))); | |
499 | } | |
500 | // Object to store freq info | |
501 | private class BaseFreq | |
502 | { | |
503 | public BaseFreq(short freq, String FreqName) | |
504 | { | |
505 | this.b_Freq = freq; | |
506 | this.b_FreqName = FreqName; | |
507 | } | |
508 | ||
509 | private String b_FreqName; | |
510 | public String getFreqName() { return b_FreqName; } | |
511 | ||
512 | private short b_Freq; | |
513 | public short getFreq(){ return this.b_Freq;} | |
514 | ||
515 | private List<BasePlayer> b_FreqPlayers = new ArrayList<BasePlayer>(); | |
516 | public List<BasePlayer> FreqPlayers() | |
517 | { return b_FreqPlayers; } | |
518 | ||
519 | /*----------------------------------------------\ | |
520 | * STAT VARIABLES | |
521 | *---------------------------------------------*/ | |
522 | // ----------------------------------- FREQ Stats | |
523 | private long b_LongestHoldTime = 0; | |
524 | public long getLongestHoldTime() | |
525 | { return b_LongestHoldTime; } | |
526 | ||
527 | private long b_TotalHoldTime = 0; | |
528 | public long getTotalHoldTime() | |
529 | { return b_TotalHoldTime; } | |
530 | ||
531 | private int b_TotalKills = 0; | |
532 | private int b_TotalDeaths = 0; | |
533 | private int b_TotalTKs = 0; | |
534 | private int b_TotalDamage = 0; | |
535 | private int b_TotalDamageTaken = 0; | |
536 | private int b_TotalSelfDamage = 0; | |
537 | private int b_TotalRaids = 0; | |
538 | // ----------------------------- PLAYER STATS | |
539 | private String b_BestKiller = "~none~"; | |
540 | private int b_BestKillerCount = 0; | |
541 | ||
542 | private String b_Suicider = "~none~"; | |
543 | private int b_SuiciderCount = 0; | |
544 | ||
545 | private String b_Cannibal = "~none~"; | |
546 | private int b_CannibalCount = 0; | |
547 | ||
548 | private String b_BestPainDealer = "~none~"; | |
549 | private int b_BestPainDealerDamage = 0; | |
550 | ||
551 | private String b_PunchingBag = "~none~"; | |
552 | private int b_PunchingBagDamage = 0; | |
553 | ||
554 | private String b_Masochist = "~none~"; | |
555 | private int b_MasochistDamage = 0; | |
556 | ||
557 | private String b_BestRaider = "~none~"; | |
558 | private int b_BestRaidCount = 0; | |
559 | ||
560 | private String b_AtomicKiller = "~none~";// best mob destroyer | |
561 | private int b_AtomicKillerCount = 0; | |
562 | ||
563 | // most toys used??? | |
564 | // biggest lagger | |
565 | // most weapon fire | |
566 | // least weapons used | |
567 | // | |
568 | ||
569 | /*----------------------------------------------\ | |
570 | * TASKS | |
571 | *---------------------------------------------*/ | |
572 | // Load the stats to vars and load printout | |
573 | public void doEndGameLoad() | |
574 | { | |
575 | for (BasePlayer b: b_FreqPlayers) | |
576 | { | |
577 | // Load raid stats | |
578 | this.b_TotalRaids += b.getCapturedFlags(); | |
579 | if (b.getCapturedFlags() > b_BestRaidCount) | |
580 | { | |
581 | this.b_BestRaider = b.getPlayerName(); | |
582 | this.b_BestRaidCount = b.getCapturedFlags(); | |
583 | } | |
584 | ||
585 | // Best multi killer | |
586 | if (b.getBestMulti() > b_AtomicKillerCount) | |
587 | { | |
588 | this.b_AtomicKillerCount = b.getBestMulti(); | |
589 | this.b_AtomicKiller = b.getPlayerName(); | |
590 | } | |
591 | ||
592 | // Load kill stats | |
593 | this.b_TotalKills += b.getKills(); | |
594 | if (b.getKills() > b_BestKillerCount) | |
595 | { | |
596 | this.b_BestKillerCount = b.getKills(); | |
597 | this.b_BestKiller = b.getPlayerName(); | |
598 | } | |
599 | this.b_TotalDeaths += b.getDeaths(); | |
600 | if (b.getDeaths() > b_SuiciderCount) | |
601 | { | |
602 | this.b_SuiciderCount = b.getDeaths(); | |
603 | this.b_Suicider = b.getPlayerName(); | |
604 | } | |
605 | this.b_TotalTKs += b.getTKs(); | |
606 | if (b.getTKs() > b_CannibalCount) | |
607 | { | |
608 | this.b_CannibalCount = b.getTKs(); | |
609 | this.b_Cannibal = b.getPlayerName(); | |
610 | } | |
611 | ||
612 | // Load most damage | |
613 | this.b_TotalDamage += b.getDamageDealt(); | |
614 | if (b.getDamageDealt() > b_BestPainDealerDamage) | |
615 | { | |
616 | this.b_BestPainDealerDamage = b.getDamageDealt(); | |
617 | this.b_BestPainDealer = b.getPlayerName(); | |
618 | } | |
619 | this.b_TotalDamageTaken += b.getDamageTaken(); | |
620 | if (b.getDamageTaken() > b_PunchingBagDamage) | |
621 | { | |
622 | this.b_PunchingBagDamage = b.getDamageTaken(); | |
623 | this.b_PunchingBag = b.getPlayerName(); | |
624 | } | |
625 | this.b_TotalSelfDamage += b.getDamageSelf(); | |
626 | if (b.getDamageSelf() > b_MasochistDamage) | |
627 | { | |
628 | this.b_MasochistDamage = b.getDamageSelf(); | |
629 | this.b_Masochist = b.getPlayerName(); | |
630 | } | |
631 | loadGamePrintOut(); | |
632 | } | |
633 | } | |
634 | ||
635 | private String[] m_GamePrintOut = new String[7]; | |
636 | public String[] getGamePrintOut() {return m_GamePrintOut;} | |
637 | ||
638 | private void loadGamePrintOut() | |
639 | { | |
640 | m_GamePrintOut[0] = "+-----------------------------------------------------------------------------"; | |
641 | m_GamePrintOut[1] = "| Freq[ "+padL(Integer.toString(this.b_Freq),4,"0")+" :"+padR(this.b_FreqName,10," ")+" ] Total Time[ "+getTimeMs(b_TotalHoldTime)+" ] "; | |
642 | m_GamePrintOut[2] = "+---------------+--------------+------------+---------------------------------"; | |
643 | m_GamePrintOut[3] = "| Name | Category | Amount | Award "; | |
644 | m_GamePrintOut[4] = "+---------------+--------------+------------+---------------------------------"; | |
645 | m_GamePrintOut[5] = "| " +padR(b_BestKiller,14," ")+ "| Most Kills | " + padR(Integer.toString(b_BestKillerCount),11," ") + "| Freq AssASSin "; | |
646 | m_GamePrintOut[6] = "+---------------+--------------+------------+---------------------------------"; | |
647 | } | |
648 | ||
649 | // Grab player for freq list | |
650 | // If not on list add player | |
651 | public BasePlayer getPlayer(String PlayerName) | |
652 | { | |
653 | // Find player on list | |
654 | for (BasePlayer b: b_FreqPlayers) | |
655 | if (b.getPlayerName() == PlayerName) return b; | |
656 | ||
657 | // Make new player if not found | |
658 | BasePlayer b = new BasePlayer(PlayerName); | |
659 | b_FreqPlayers.add(b); | |
660 | return b_FreqPlayers.get(b_FreqPlayers.indexOf(b)); | |
661 | } | |
662 | // Increment hold time and check to see if its longest | |
663 | public void addHoldTime(long time) | |
664 | { | |
665 | b_TotalHoldTime+= time; | |
666 | ||
667 | if (time > b_LongestHoldTime ) b_LongestHoldTime = time; | |
668 | } | |
669 | } | |
670 | /*-------------------------------------------------------------------------------\ | |
671 | * | |
672 | * MISC FUNCTIONS | |
673 | * | |
674 | *-------------------------------------------------------------------------------*/ | |
675 | public void InitializeBaseFlagging() | |
676 | { | |
677 | // Hide flag on start of module | |
678 | b.sendUnfilteredPublicMessage("*objset -1427,-1428,"); | |
679 | loadTimers(); | |
680 | } | |
681 | public void loadTimers() | |
682 | { | |
683 | // Store all settings for Timer to start game | |
684 | m_StartGameSet = new BZTimer(1,35); | |
685 | m_StartGameSet.setInitialMessage("T20 BaseAttack starting in @time@ ! Hop in to join the fun.", 4); | |
686 | m_StartGameSet.setEndMessage("GO GO GO - Defend T20!", 104); | |
687 | m_StartGameSet.setNotification(60, "[@time@] until T20 Base Attack starts! Head over to O17 now!!", 0); | |
688 | m_StartGameSet.setNotification(30, "[@time@] until T20 Base Attack starts! Head over to O17 now!!", 0); | |
689 | m_StartGameSet.setNotification(5, "- 5 -", 26); | |
690 | m_StartGameSet.setNotification(4, "- 4 -", 26); | |
691 | m_StartGameSet.setNotification(3, "- 3 -", 26); | |
692 | m_StartGameSet.setNotification(2, "- 2 -", 26); | |
693 | m_StartGameSet.setNotification(1, "- 1 -", 26); | |
694 | // Settings for Game Timer | |
695 | m_GameTimerSet = new BZTimer(2,360); | |
696 | m_GameTimerSet.setInitialMessage("T20 BaseAttack - All your flag are belong to us... Defend the O-17 Flag! [Game Time = @time@] ", 0); | |
697 | m_GameTimerSet.setNoEndMessage(); | |
698 | //m_GameTimerSet.setEndMessage(" ----- Score Printout here -----.", 104); | |
699 | m_GameTimerSet.setNotification(180, "T20 Attack - @time@ remaining!", 0); | |
700 | m_GameTimerSet.setNotification(60, "T20 Attack - @time@ remaining!", 0); | |
701 | m_GameTimerSet.setNotification(30, "T20 Attack - @time@ remaining!", 0); | |
702 | m_GameTimerSet.setNotification(5, "- 5 -", 26); | |
703 | m_GameTimerSet.setNotification(4, "- 4 -", 26); | |
704 | m_GameTimerSet.setNotification(3, "- 3 -", 26); | |
705 | m_GameTimerSet.setNotification(2, "- 2 -", 26); | |
706 | m_GameTimerSet.setNotification(1, "- 1 -", 26); | |
707 | } | |
708 | ||
709 | // Simple collision check - seeing if player is in a given region | |
710 | private boolean InRegion( PlayerPosition p, short[] Region) | |
711 | { return InRegion(p.getXLocation(),p.getYLocation(),Region); } | |
712 | private boolean InMapRoom(int PlayerID) | |
713 | { | |
714 | return InRegion(b.getPlayer(PlayerID).getXLocation(),b.getPlayer(PlayerID).getYLocation(),m_MapRoom1) | |
715 | || InRegion(b.getPlayer(PlayerID).getXLocation(),b.getPlayer(PlayerID).getYLocation(),m_MapRoom2); | |
716 | } | |
717 | // Simple collision check - seeing if player is in a given region | |
718 | private boolean InRegion( short x, short y, short[] Region) | |
719 | { | |
720 | return (x > Region[0] && x < Region[2] && | |
721 | y > Region[1] && y < Region[3]) ? true:false; | |
722 | } | |
723 | private String padR(String Str, int Amount, String Char) | |
724 | { | |
725 | if (Str.length() < Amount) | |
726 | { | |
727 | String NewStr = Str; | |
728 | int maxIndex = Amount - Str.length(); | |
729 | ||
730 | for (int i = 0; i < maxIndex;i++) | |
731 | { | |
732 | NewStr += Char; | |
733 | } | |
734 | return NewStr; | |
735 | } | |
736 | return Str; | |
737 | } | |
738 | private String padL(String Str, int Amount, String Char) | |
739 | { | |
740 | if (Str.length() < Amount) | |
741 | { | |
742 | String NewStr = Str; | |
743 | int maxIndex = Amount - Str.length(); | |
744 | ||
745 | for (int i = 0; i < maxIndex;i++) | |
746 | { | |
747 | NewStr = Char + NewStr; | |
748 | } | |
749 | return NewStr; | |
750 | } | |
751 | return Str; | |
752 | } | |
753 | // Format time to print | |
754 | public String getTimeMs(long elapsedTime) { | |
755 | String format = String.format("%%0%dd", 2); | |
756 | elapsedTime = elapsedTime / 1000; | |
757 | String seconds = String.format(format, elapsedTime % 60); | |
758 | String minutes = String.format(format, (elapsedTime % 3600) / 60); | |
759 | String hours = String.format(format, elapsedTime / 3600); | |
760 | long milli = elapsedTime - ((elapsedTime % 60) + ((elapsedTime % 3600) / 60) + (elapsedTime / 3600)); | |
761 | String time = hours + "h:" + minutes + "m:" + seconds +"s:" + milli + "ms"; | |
762 | return time; | |
763 | } | |
764 | } |