mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-14 17:09:48 +12:00
Fix Arena TOCTOU
This commit is contained in:
parent
ab05db6cbf
commit
51223172c4
4 changed files with 35 additions and 11 deletions
|
@ -132,12 +132,12 @@ namespace HISP.Game
|
||||||
}
|
}
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if(Entries.Count <= 0)
|
Mode = "COMPETING";
|
||||||
|
if (Entries.Count <= 0)
|
||||||
{
|
{
|
||||||
reset();
|
reset();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Mode = "COMPETING";
|
|
||||||
foreach(ArenaEntry entry in Entries.ToArray())
|
foreach(ArenaEntry entry in Entries.ToArray())
|
||||||
{
|
{
|
||||||
string swf = getSwf(entry);
|
string swf = getSwf(entry);
|
||||||
|
@ -299,7 +299,6 @@ namespace HISP.Game
|
||||||
if (Entries.Count >= 4 && Type == "DRESSAGE")
|
if (Entries.Count >= 4 && Type == "DRESSAGE")
|
||||||
entry.EnteredUser.Awards.AddAward(Award.GetAwardById(10)); // Great Dressage
|
entry.EnteredUser.Awards.AddAward(Award.GetAwardById(10)); // Great Dressage
|
||||||
|
|
||||||
|
|
||||||
if (Entries.Count >= 2 && Type == "DRAFT")
|
if (Entries.Count >= 2 && Type == "DRAFT")
|
||||||
entry.EnteredUser.Awards.AddAward(Award.GetAwardById(38)); // Strong Horse Award
|
entry.EnteredUser.Awards.AddAward(Award.GetAwardById(38)); // Strong Horse Award
|
||||||
|
|
||||||
|
@ -341,12 +340,15 @@ namespace HISP.Game
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void AddEntry(User user, Horse.HorseInstance horse)
|
public void AddEntry(User user, HorseInstance horse)
|
||||||
{
|
{
|
||||||
ArenaEntry arenaEntry = new ArenaEntry();
|
if(!UserHasHorseEntered(user))
|
||||||
arenaEntry.EnteredUser = user;
|
{
|
||||||
arenaEntry.EnteredHorse = horse;
|
ArenaEntry arenaEntry = new ArenaEntry();
|
||||||
Entries.Add(arenaEntry);
|
arenaEntry.EnteredUser = user;
|
||||||
|
arenaEntry.EnteredHorse = horse;
|
||||||
|
Entries.Add(arenaEntry);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Arena GetArenaUserEnteredIn(User user)
|
public static Arena GetArenaUserEnteredIn(User user)
|
||||||
|
@ -369,7 +371,8 @@ namespace HISP.Game
|
||||||
foreach(Arena arena in Arenas)
|
foreach(Arena arena in Arenas)
|
||||||
{
|
{
|
||||||
if (minutes % arena.RaceEvery == 0)
|
if (minutes % arena.RaceEvery == 0)
|
||||||
arena.Start();
|
if(arena.Mode == "TAKINGENTRIES")
|
||||||
|
arena.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,8 @@ namespace HISP.Game.Chat
|
||||||
return Command.UnBan(message, args, user);
|
return Command.UnBan(message, args, user);
|
||||||
if (message.ToUpper().StartsWith("%ESCAPE"))
|
if (message.ToUpper().StartsWith("%ESCAPE"))
|
||||||
return Command.Escape(message, args, user);
|
return Command.Escape(message, args, user);
|
||||||
|
if (message.ToUpper().StartsWith("%CALL HORSE"))
|
||||||
|
return Command.CallHorse(message, args, user);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ using HISP.Game.Items;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using HISP.Game.Events;
|
using HISP.Game.Events;
|
||||||
|
using HISP.Game.Horse;
|
||||||
|
|
||||||
namespace HISP.Game.Chat
|
namespace HISP.Game.Chat
|
||||||
{
|
{
|
||||||
|
@ -354,6 +355,23 @@ namespace HISP.Game.Chat
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool CallHorse(string message, string[] args, User user)
|
||||||
|
{
|
||||||
|
string formattedmessage = Messages.FormatPlayerCommandCompleteMessage(message.Substring(1));
|
||||||
|
|
||||||
|
WildHorse horse = WildHorse.WildHorses[GameServer.RandomNumberGenerator.Next(0, WildHorse.WildHorses.Length)];
|
||||||
|
horse.X = user.X;
|
||||||
|
horse.Y = user.Y;
|
||||||
|
|
||||||
|
GameServer.UpdateAreaForAll(user.X, user.Y);
|
||||||
|
|
||||||
|
byte[] chatPacket = PacketBuilder.CreateChat(formattedmessage, PacketBuilder.CHAT_BOTTOM_LEFT);
|
||||||
|
user.LoggedinClient.SendPacket(chatPacket);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static bool Dance(string message, string[] args, User user)
|
public static bool Dance(string message, string[] args, User user)
|
||||||
{
|
{
|
||||||
string moves = string.Join(" ", args).ToLower();
|
string moves = string.Join(" ", args).ToLower();
|
||||||
|
|
|
@ -157,7 +157,7 @@ namespace HISP.Game.Horse
|
||||||
|
|
||||||
public void Escape()
|
public void Escape()
|
||||||
{
|
{
|
||||||
while(true)
|
for(int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
int tryX = X + GameServer.RandomNumberGenerator.Next(-5, 5);
|
int tryX = X + GameServer.RandomNumberGenerator.Next(-5, 5);
|
||||||
int tryY = Y + GameServer.RandomNumberGenerator.Next(-5, 5);
|
int tryY = Y + GameServer.RandomNumberGenerator.Next(-5, 5);
|
||||||
|
@ -168,10 +168,11 @@ namespace HISP.Game.Horse
|
||||||
{
|
{
|
||||||
X = tryX;
|
X = tryX;
|
||||||
Y = tryY;
|
Y = tryY;
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Logger.ErrorPrint("Horse is stuck (cannot move after 1000 tries) " + Instance.Breed.Name + " at X" + X + " Y" + Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Capture(User forUser)
|
public void Capture(User forUser)
|
||||||
|
|
Loading…
Add table
Reference in a new issue