Add Random Events

This commit is contained in:
SilicaAndPina 2021-05-12 10:11:53 +12:00
parent d7e350fef6
commit 9add26a6fa
5 changed files with 165 additions and 4 deletions

View file

@ -0,0 +1,84 @@
using HISP.Game.Horse;
using HISP.Game.Items;
using HISP.Player;
using HISP.Server;
using System.Collections.Generic;
namespace HISP.Game.Events
{
public class RandomEvent
{
public static List<RandomEvent> RandomEvents = new List<RandomEvent>();
public static RandomEvent GetRandomEvent()
{
int randomEvent = GameServer.RandomNumberGenerator.Next(0, RandomEvents.Count);
return RandomEvents[randomEvent];
}
public static void ExecuteRandomEvent(User user)
{
while (true)
{
RandomEvent rngEvent = RandomEvent.GetRandomEvent();
if (rngEvent.HorseHealthDown != 0 && user.HorseInventory.HorseList.Length <= 0)
continue;
if (rngEvent.Text.Contains("%HORSENAME%") && user.HorseInventory.HorseList.Length <= 0)
continue;
int moneyEarned = 0;
if (rngEvent.MinMoney != 0 || rngEvent.MaxMoney != 0)
moneyEarned = GameServer.RandomNumberGenerator.Next(rngEvent.MinMoney, rngEvent.MaxMoney);
if (rngEvent.GiveObject != 0)
user.Inventory.AddIgnoringFull(new ItemInstance(rngEvent.GiveObject));
if(moneyEarned != 0)
user.Money += moneyEarned;
HorseInstance effectedHorse = null;
if(user.HorseInventory.HorseList.Length > 0)
{
int randomHorseIndex = GameServer.RandomNumberGenerator.Next(0, user.HorseInventory.HorseList.Length);
effectedHorse = user.HorseInventory.HorseList[randomHorseIndex];
}
if (rngEvent.HorseHealthDown != 0)
effectedHorse.BasicStats.Health -= rngEvent.HorseHealthDown;
string horseName = "[This Message Should Not Appear, if it does its a bug.]";
if (effectedHorse != null)
horseName = effectedHorse.Name;
string msg = Messages.FormatRandomEvent(rngEvent.Text, moneyEarned, horseName);
byte[] chatPacket = PacketBuilder.CreateChat(Messages.RandomEventPrefix + msg, PacketBuilder.CHAT_BOTTOM_RIGHT);
user.LoggedinClient.SendPacket(chatPacket);
return;
}
}
public RandomEvent(int id, string text, int minMoney, int maxMoney, int horseHealth, int giveObject)
{
Id = id;
Text = text;
MinMoney = minMoney;
MaxMoney = maxMoney;
HorseHealthDown = horseHealth;
GiveObject = giveObject;
RandomEvents.Add(this);
}
public int Id;
public string Text;
public int MinMoney;
public int MaxMoney;
public int HorseHealthDown;
public int GiveObject;
}
}

View file

@ -69,6 +69,9 @@ namespace HISP.Game
public static string SocialTypeFormat;
public static string SocialPlayerNoLongerNearby;
// Random Event
public static string RandomEventPrefix;
// Events : Mods Revenge
public static string EventStartModsRevenge;
public static string EventEndModsRevenge;
@ -1171,6 +1174,12 @@ namespace HISP.Game
return itemFormat.Replace("%USERNAME%", username);
}
// Random Events
public static string FormatRandomEvent(string txt, int moneyEarned, string horseName)
{
return txt.Replace("%HORSENAME%", horseName).Replace("%MONEYEARNED%", "$" + moneyEarned.ToString("N0", CultureInfo.InvariantCulture).Replace("-", ""));
}
// Event : Water Ballon Game
public static string FormatWaterBalloonGameWinner(string username, int timesHit)
{

View file

@ -6,6 +6,7 @@ using System.Threading;
using HISP.Player;
using HISP.Game;
using HISP.Game.Horse;
using HISP.Game.Events;
namespace HISP.Server
{
@ -84,6 +85,12 @@ namespace HISP.Server
SendPacket(playTimeMessage);
}
if (GameServer.RandomNumberGenerator.Next(0, 100) == 59) // RANDOM EVENT HAS OCCURED!
{
RandomEvent.ExecuteRandomEvent(LoggedinUser);
}
bool gotoPrision = false;
foreach(HorseInstance horse in LoggedinUser.HorseInventory.HorseList)
{
@ -196,16 +203,16 @@ namespace HISP.Server
if (totalMinutesElapsed % 5 == 0)
LoggedinUser.Thirst--;
if (totalMinutesElapsed % 10 == 0)
if (totalMinutesElapsed % 15 == 0)
LoggedinUser.Hunger--;
if (totalMinutesElapsed % 15 == 0)
LoggedinUser.Tiredness--;
}
if (!isDisconnecting)
minuteTimer.Change(oneMinute, oneMinute);
dcLock = false;

View file

@ -858,6 +858,32 @@ namespace HISP.Server
Logger.DebugPrint("Registered Real Time Quiz Category: " + name);
}
// Register Random Event
int totalRandomEvent = gameData.events.random_events.Count;
for (int i = 0; i < totalRandomEvent; i++)
{
int minmoney = 0;
int maxmoney = 0;
int lowerHorseHealth = 0;
int giveObj = 0;
int id = gameData.events.random_events[i].id;
string txt = gameData.events.random_events[i].text;
if(gameData.events.random_events[i].min_money != null)
minmoney = gameData.events.random_events[i].min_money;
if(gameData.events.random_events[i].max_money != null)
maxmoney = gameData.events.random_events[i].max_money;
if(gameData.events.random_events[i].lower_horse_health != null)
lowerHorseHealth = gameData.events.random_events[i].lower_horse_health;
if(gameData.events.random_events[i].give_object != null)
giveObj = gameData.events.random_events[i].give_object;
new RandomEvent(id, txt, minmoney, maxmoney, lowerHorseHealth, giveObj);
Logger.DebugPrint("Registered Random Event: " + txt);
}
HorseInfo.HorseNames = gameData.horses.names.ToObject<string[]>();
@ -964,6 +990,9 @@ namespace HISP.Server
// Message Queue
Messages.MessageQueueHeader = gameData.messages.message_queue;
// Random Event
Messages.RandomEventPrefix = gameData.messages.random_event_prefix;
// Events : Mods Revenge
Messages.EventStartModsRevenge = gameData.messages.events.mods_revenge.event_start;
Messages.EventEndModsRevenge = gameData.messages.events.mods_revenge.event_end;