Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

132 lines
2.7 KiB
C#

using System;
using Server;
using System.Collections;
using Server.Items;
namespace Server.Items
{
public class CardDeck
{
private int m_DeckSize;
private short[] m_cards;
private int m_DeckPointer = 0;
private int m_BackDesign;
private int m_shufflecount = 0;
private int[] BackDesigns = new int[] { 10100, 10307, 21252, 21255, 21504, 21510, 30501, 30502, 30503, 30504, 30505, 30506, 30507, 30508, 30509, 30510 };
private bool m_randomback = true;
public CardDeck(int decksize, int backdesign)
{
m_DeckSize = decksize > 8 ? 8 : decksize < 1 ? 1 : decksize;
m_cards = new short[decksize * 52];
for (int i = 0; i < m_cards.Length; i++)
m_cards[i] = (short) (i % 52);
m_cards = LongShuffle(m_cards);
if (backdesign != 0)
{
m_randomback = false;
m_BackDesign = backdesign;
}
else
m_BackDesign = Utility.RandomList(BackDesigns);
}
public int Remaining
{
get { return (m_DeckSize * 52) - m_DeckPointer; }
}
public int BackDesign
{
get { return m_BackDesign; }
}
public void ChangeBackDesign()
{
m_BackDesign = Utility.RandomList(BackDesigns);
}
public void ShuffleDeck()
{
m_cards = NormalShuffle(m_cards);
}
public void QuickShuffle()
{
m_cards = QuickShuffle(m_cards);
}
public short[] QuickShuffle(short[] cards)
{
return Shuffle(cards, 1);
}
private short[] NormalShuffle(short[] cards)
{
return Shuffle(cards, 4);
}
private short[] LongShuffle(short[] cards)
{
return Shuffle(cards, 8);
}
private short[] Shuffle(short[] cards, short shufflecount)
{
if (shufflecount == 1)
cards = Cut(cards);
for (int c = 0; c < shufflecount; c++)
{
for (int i = 0; i < cards.Length; i++)
{
short rnd1 = (short)i;
short rnd2 = (short)Utility.Random(cards.Length);
if (rnd2 == rnd1)
continue;
short temp = cards[rnd1];
cards[rnd1] = cards[rnd2];
cards[rnd2] = temp;
}
if (c % 2 == 0 && shufflecount > 1)
cards = Cut(cards);
}
m_DeckPointer = 0;
m_shufflecount++;
if (m_shufflecount > 25 && m_randomback)
{
ChangeBackDesign();
m_shufflecount = 0;
}
return cards;
}
private short[] Cut(short[] cards)
{
short[] copy = new short[cards.Length];
int cutpoint = cards.Length / 2;
int rnum = Utility.Random(2);
cutpoint += (rnum == 0 ? Utility.Random(10) * (cards.Length % 52 + 1) * -1 : Utility.Random(10) * (cards.Length % 52 + 1));
for (int i = 0; i < copy.Length; i++)
{
copy[i] = cards[cutpoint];
cutpoint++;
if (cutpoint == cards.Length)
cutpoint = 0;
}
return copy;
}
public short GetOneCard()
{
if (m_DeckPointer >= m_cards.Length)
{
ShuffleDeck();
}
return m_cards[m_DeckPointer++];
}
}
}