using System;
using ACE.Entity;
using ACE.Entity.Enum;
using ACE.Entity.Models;
using ACE.Server.Entity.Chess;
using ACE.Server.Entity.Actions;
using ACE.Server.Factories;
using ACE.Server.Managers;
using ACE.Server.Network.GameEvent.Events;
namespace ACE.Server.WorldObjects
{
///
/// Represents a chessboard in game
///
public class Game : WorldObject
{
public ChessMatch ChessMatch;
private bool active;
///
/// A new biota be created taking all of its values from weenie.
///
public Game(Weenie weenie, ObjectGuid guid) : base(weenie, guid)
{
SetEphemeralValues();
}
///
/// Restore a WorldObject from the database.
///
public Game(Biota biota) : base(biota)
{
SetEphemeralValues();
}
private void SetEphemeralValues()
{
UseRadius = 6.5f;
}
///
/// This is raised by Player.HandleActionUseItem.
/// The item does not exist in the players possession.
/// If the item was outside of range, the player will have been commanded to move using DoMoveTo before ActOnUse is called.
/// When this is called, it should be assumed that the player is within range.
///
public override void ActOnUse(WorldObject activator)
{
if (!(activator is Player player))
return;
player.CreateMoveToChain(this, (success) =>
{
if (!success)
return;
ActOnJoin(player);
});
}
public void ActOnJoin(Player player)
{
if (!PropertyManager.GetBool("chess_enabled").Item)
{
ActOnJoin_Legacy(player);
return;
}
if (ChessMatch == null)
ChessMatch = new ChessMatch(this);
ChessMatch.Join(player);
}
public void ActOnJoin_Legacy(Player player)
{
if (active) return;
active = true;
// team is either 0 or 1. -1 means failed to join
var msgJoinResponse = new GameEventJoinGameResponse(player.Session, Guid, ChessColor.Black);
// 0 or 1 for winning team. -1 is used for stalemate, -2 (and gameId of 0) is used to exit game mode in client
// var msgGameOver = new GameEventGameOver(player.Session, 0, -2);
// player.Session.Network.EnqueueSend(msgJoinResponse, msgGameOver);
player.Session.Network.EnqueueSend(msgJoinResponse);
// 0xA9B2002E [135.97 133.313 94.4447] 1 0 0 0 (holtburg game location)
// Drudges
var drudgeRook1 = WorldObjectFactory.CreateNewWorldObject("drudgerook") as GamePiece;
drudgeRook1.Location = new Position(Location.Cell, Location.PositionX - 3.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeRook1.EnterWorld();
var drudgeKnight1 = WorldObjectFactory.CreateNewWorldObject("drudgeknight") as GamePiece;
drudgeKnight1.Location = new Position(Location.Cell, Location.PositionX - 2.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeKnight1.EnterWorld();
var drudgeBishop1 = WorldObjectFactory.CreateNewWorldObject("drudgebishop") as GamePiece;
drudgeBishop1.Location = new Position(Location.Cell, Location.PositionX - 1.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeBishop1.EnterWorld();
var drudgeQueen = WorldObjectFactory.CreateNewWorldObject("drudgequeen") as GamePiece;
drudgeQueen.Location = new Position(Location.Cell, Location.PositionX - 0.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeQueen.EnterWorld();
var drudgeKing = WorldObjectFactory.CreateNewWorldObject("drudgeking") as GamePiece;
drudgeKing.Location = new Position(Location.Cell, Location.PositionX + 0.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeKing.EnterWorld();
var drudgeBishop2 = WorldObjectFactory.CreateNewWorldObject("drudgebishop") as GamePiece;
drudgeBishop2.Location = new Position(Location.Cell, Location.PositionX + 1.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeBishop2.EnterWorld();
var drudgeKnight2 = WorldObjectFactory.CreateNewWorldObject("drudgeknight") as GamePiece;
drudgeKnight2.Location = new Position(Location.Cell, Location.PositionX + 2.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeKnight2.EnterWorld();
var drudgeRook2 = WorldObjectFactory.CreateNewWorldObject("drudgerook") as GamePiece;
drudgeRook2.Location = new Position(Location.Cell, Location.PositionX + 3.5f, Location.PositionY - 3.5f, Location.PositionZ, 0, 0, 0, 1);
drudgeRook2.EnterWorld();
var drudgePawn1 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn1.Location = new Position(Location.Cell, Location.PositionX - 3.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn1.EnterWorld();
var drudgePawn2 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn2.Location = new Position(Location.Cell, Location.PositionX - 2.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn2.EnterWorld();
var drudgePawn3 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn3.Location = new Position(Location.Cell, Location.PositionX - 1.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn3.EnterWorld();
var drudgePawn4 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn4.Location = new Position(Location.Cell, Location.PositionX - 0.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn4.EnterWorld();
var drudgePawn5 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn5.Location = new Position(Location.Cell, Location.PositionX + 0.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn5.EnterWorld();
var drudgePawn6 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn6.Location = new Position(Location.Cell, Location.PositionX + 1.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn6.EnterWorld();
var drudgePawn7 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn7.Location = new Position(Location.Cell, Location.PositionX + 2.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn7.EnterWorld();
var drudgePawn8 = WorldObjectFactory.CreateNewWorldObject("drudgepawn") as GamePiece;
drudgePawn8.Location = new Position(Location.Cell, Location.PositionX + 3.5f, Location.PositionY - 2.5f, Location.PositionZ, 0, 0, 0, 1);
drudgePawn8.EnterWorld();
// Mosswarts
var mosswartRook1 = WorldObjectFactory.CreateNewWorldObject("mosswartrook") as GamePiece;
mosswartRook1.Location = new Position(Location.Cell, Location.PositionX - 3.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartRook1.EnterWorld();
var mosswartKnight1 = WorldObjectFactory.CreateNewWorldObject("mosswartknight") as GamePiece;
mosswartKnight1.Location = new Position(Location.Cell, Location.PositionX - 2.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartKnight1.EnterWorld();
var mosswartBishop1 = WorldObjectFactory.CreateNewWorldObject("mosswartbishop") as GamePiece;
mosswartBishop1.Location = new Position(Location.Cell, Location.PositionX - 1.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartBishop1.EnterWorld();
var mosswartQueen = WorldObjectFactory.CreateNewWorldObject("mosswartqueen") as GamePiece;
mosswartQueen.Location = new Position(Location.Cell, Location.PositionX - 0.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartQueen.EnterWorld();
var mosswartKing = WorldObjectFactory.CreateNewWorldObject("mosswartking") as GamePiece;
mosswartKing.Location = new Position(Location.Cell, Location.PositionX + 0.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartKing.EnterWorld();
var mosswartBishop2 = WorldObjectFactory.CreateNewWorldObject("mosswartbishop") as GamePiece;
mosswartBishop2.Location = new Position(Location.Cell, Location.PositionX + 1.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartBishop2.EnterWorld();
var mosswartKnight2 = WorldObjectFactory.CreateNewWorldObject("mosswartknight") as GamePiece;
mosswartKnight2.Location = new Position(Location.Cell, Location.PositionX + 2.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartKnight2.EnterWorld();
var mosswartRook2 = WorldObjectFactory.CreateNewWorldObject("mosswartrook") as GamePiece;
mosswartRook2.Location = new Position(Location.Cell, Location.PositionX + 3.5f, Location.PositionY + 3.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartRook2.EnterWorld();
var mosswartPawn1 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn1.Location = new Position(Location.Cell, Location.PositionX - 3.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn1.EnterWorld();
var mosswartPawn2 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn2.Location = new Position(Location.Cell, Location.PositionX - 2.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn2.EnterWorld();
var mosswartPawn3 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn3.Location = new Position(Location.Cell, Location.PositionX - 1.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn3.EnterWorld();
var mosswartPawn4 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn4.Location = new Position(Location.Cell, Location.PositionX - 0.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn4.EnterWorld();
var mosswartPawn5 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn5.Location = new Position(Location.Cell, Location.PositionX + 0.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn5.EnterWorld();
var mosswartPawn6 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn6.Location = new Position(Location.Cell, Location.PositionX + 1.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn6.EnterWorld();
var mosswartPawn7 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn7.Location = new Position(Location.Cell, Location.PositionX + 2.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn7.EnterWorld();
var mosswartPawn8 = WorldObjectFactory.CreateNewWorldObject("mosswartpawn") as GamePiece;
mosswartPawn8.Location = new Position(Location.Cell, Location.PositionX + 3.5f, Location.PositionY + 2.5f, Location.PositionZ, 0, 0, 1, 0);
mosswartPawn8.EnterWorld();
// For HellsWrath...
ActionChain gdlChain = new ActionChain();
gdlChain.AddDelaySeconds(5);
gdlChain.AddAction(this, () =>
{
drudgeRook1.Kill();
drudgeBishop1.Kill();
drudgeKnight1.Kill();
drudgeQueen.Kill();
drudgeKing.Kill();
drudgeBishop2.Kill();
drudgeKnight2.Kill();
drudgeRook2.Kill();
drudgePawn1.Kill();
drudgePawn2.Kill();
drudgePawn3.Kill();
drudgePawn4.Kill();
drudgePawn5.Kill();
drudgePawn6.Kill();
drudgePawn7.Kill();
drudgePawn8.Kill();
mosswartRook1.Kill();
mosswartBishop1.Kill();
mosswartKnight1.Kill();
mosswartQueen.Kill();
mosswartKing.Kill();
mosswartBishop2.Kill();
mosswartKnight2.Kill();
mosswartRook2.Kill();
mosswartPawn1.Kill();
mosswartPawn2.Kill();
mosswartPawn3.Kill();
mosswartPawn4.Kill();
mosswartPawn5.Kill();
mosswartPawn6.Kill();
mosswartPawn7.Kill();
mosswartPawn8.Kill();
var msgGameOver = new GameEventGameOver(player.Session, Guid, 0);
player.Session.Network.EnqueueSend(msgGameOver);
});
gdlChain.AddDelaySeconds(2);
gdlChain.AddAction(this, () =>
{
byte[] msg = Convert.FromBase64String("Z2FtZXNkZWFkbG9s");
var popupGDL = new GameEventPopupString(player.Session, System.Text.Encoding.UTF8.GetString(msg, 0, msg.Length));
var msgGameOver2 = new GameEventGameOver(player.Session, new ObjectGuid(0), -2);
player.Session.Network.EnqueueSend(popupGDL, msgGameOver2);
player.ChessGamesLost++;
player.ChessTotalGames++;
active = false;
});
gdlChain.EnqueueChain();
}
public override void Heartbeat(double currentUnixTime)
{
if (ChessMatch != null)
ChessMatch.Update();
base.Heartbeat(currentUnixTime);
}
}
}