mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-24 05:35:51 +12:00
Add mods revenge
This commit is contained in:
parent
291b6e5292
commit
5fedb7841d
7 changed files with 233 additions and 17 deletions
144
Horse Isle Server/HorseIsleServer/Game/Events/ModsRevenge.cs
Normal file
144
Horse Isle Server/HorseIsleServer/Game/Events/ModsRevenge.cs
Normal file
|
@ -0,0 +1,144 @@
|
|||
using HISP.Game.Items;
|
||||
using HISP.Player;
|
||||
using HISP.Server;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
namespace HISP.Game.Events
|
||||
{
|
||||
public class ModsRevenge
|
||||
{
|
||||
public class ThrowTracker
|
||||
{
|
||||
public ThrowTracker(User thrower)
|
||||
{
|
||||
Thrower = thrower;
|
||||
ThrownAt = new List<User>();
|
||||
}
|
||||
public User Thrower;
|
||||
public List<User> ThrownAt;
|
||||
}
|
||||
|
||||
public bool Active = false;
|
||||
public const int REVENGE_TIMEOUT = 10;
|
||||
private List<ThrowTracker> trackedThrows;
|
||||
private Timer revengeTimeout;
|
||||
public ThrowTracker[] TrackedThrows
|
||||
{
|
||||
get
|
||||
{
|
||||
return trackedThrows.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public ModsRevenge()
|
||||
{
|
||||
trackedThrows = new List<ThrowTracker>();
|
||||
Active = false;
|
||||
}
|
||||
|
||||
public void StartEvent()
|
||||
{
|
||||
revengeTimeout = new Timer(new TimerCallback(revengeTimedOut), null, REVENGE_TIMEOUT * 60 * 1000, REVENGE_TIMEOUT * 60 * 1000);
|
||||
|
||||
int TOTAL_SPLATTERBALLS = 8; // I dont know the actural amount t-t
|
||||
|
||||
// Give Splatterballs
|
||||
int[] allUsers = Database.GetUsers();
|
||||
foreach (int userid in allUsers)
|
||||
{
|
||||
for (int i = 0; i < TOTAL_SPLATTERBALLS; i++)
|
||||
{
|
||||
ItemInstance itm = new ItemInstance(Item.ModSplatterball);
|
||||
|
||||
if (GameServer.IsUserOnline(userid))
|
||||
GameServer.GetUserById(userid).Inventory.AddWithoutDatabase(itm);
|
||||
|
||||
Database.AddItemToInventory(userid, itm);
|
||||
}
|
||||
}
|
||||
|
||||
byte[] annoucePacket = PacketBuilder.CreateChat(Messages.EventStartModsRevenge, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
|
||||
foreach (GameClient client in GameServer.ConnectedClients)
|
||||
if (client.LoggedIn)
|
||||
client.SendPacket(annoucePacket);
|
||||
}
|
||||
|
||||
public void EndEvent()
|
||||
{
|
||||
GameServer.RemoveAllItemsOfIdInTheGame(Item.ModSplatterball);
|
||||
|
||||
byte[] annoucePacket = PacketBuilder.CreateChat(Messages.EventEndModsRevenge, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
|
||||
foreach (GameClient client in GameServer.ConnectedClients)
|
||||
if (client.LoggedIn)
|
||||
client.SendPacket(annoucePacket);
|
||||
}
|
||||
private void revengeTimedOut(object state)
|
||||
{
|
||||
resetEvent();
|
||||
}
|
||||
|
||||
private void resetEvent()
|
||||
{
|
||||
revengeTimeout.Dispose();
|
||||
trackedThrows.Clear();
|
||||
Active = false;
|
||||
}
|
||||
private ThrowTracker getUserThrowTracker(User thrower)
|
||||
{
|
||||
foreach (ThrowTracker throwTracker in TrackedThrows)
|
||||
{
|
||||
if (throwTracker.Thrower.Id == thrower.Id)
|
||||
return throwTracker;
|
||||
}
|
||||
|
||||
return new ThrowTracker(thrower);
|
||||
}
|
||||
|
||||
private bool checkUserThrownAtAlready(ThrowTracker tracker, User thrownAt)
|
||||
{
|
||||
foreach (User user in tracker.ThrownAt)
|
||||
{
|
||||
if (user.Id == thrownAt.Id)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void LeaveEvent(User userToLeave)
|
||||
{
|
||||
foreach (ThrowTracker thrownMemory in TrackedThrows)
|
||||
{
|
||||
if (thrownMemory.Thrower.Id == userToLeave.Id)
|
||||
trackedThrows.Remove(thrownMemory);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Payout(User thrower, User throwAt)
|
||||
{
|
||||
ThrowTracker throwCounter = getUserThrowTracker(thrower);
|
||||
if(checkUserThrownAtAlready(throwCounter, throwAt))
|
||||
{
|
||||
|
||||
byte[] otherEarned = PacketBuilder.CreateChat(Messages.FormatModSplatterBallAwardedOther(thrower.Username), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
byte[] youEarned = PacketBuilder.CreateChat(Messages.FormatModSplatterBallAwardedYou(throwAt.Username), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
|
||||
thrower.Money += 50;
|
||||
throwAt.Money += 500;
|
||||
|
||||
thrower.LoggedinClient.SendPacket(youEarned);
|
||||
throwAt.LoggedinClient.SendPacket(otherEarned);
|
||||
|
||||
throwCounter.ThrownAt.Add(throwAt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue