POKER What
unknown
plain_text
3 years ago
5.5 kB
7
Indexable
// Note: 0, 1 should be the hand, the rest are community cards.
AnaylzePokerHand(playerid, Hand[])
{
new pokerArray[7];
for(new i = 0; i < sizeof(pokerArray); i++) {
pokerArray[i] = Hand[i];
}
new suitArray[4][13];
new tmp = 0;
new pairs = 0;
new bool:isRoyalFlush = false;
new bool:isFlush = false;
new bool:isStraight = false;
new bool:isFour = false;
new bool:isThree = false;
new bool:isTwoPair = false;
new bool:isPair = false;
// Convert Hand[] (AKA pokerArray) to suitArray[]
for(new i = 0; i < sizeof(pokerArray); i++) {
if(pokerArray[i] <= 12) { // Clubs (0 - 12)
suitArray[0][pokerArray[i]] = 1;
}
if(pokerArray[i] <= 25 && pokerArray[i] >= 13) { // Diamonds (13 - 25)
suitArray[1][pokerArray[i]-13] = 1;
}
if(pokerArray[i] <= 38 && pokerArray[i] >= 26) { // Hearts (26 - 38)
suitArray[2][pokerArray[i]-26] = 1;
}
if(pokerArray[i] <= 51 && pokerArray[i] >= 39) { // Spades (39 - 51)
suitArray[3][pokerArray[i]-39] = 1;
}
}
// Royal Check
for(new i = 0; i < 4; i++) {
if(suitArray[i][0] == 1) {
if(suitArray[i][9] == 1) {
if(suitArray[i][10] == 1) {
if(suitArray[i][11] == 1) {
if(suitArray[i][12] == 1) {
isRoyalFlush = true;
break;
}
}
}
}
}
}
tmp = 0;
// Flush Check
for(new i = 0; i < 4; i++) {
for(new j = 0; j < 13; j++) {
if(suitArray[i][j] == 1) {
tmp++;
}
}
if(tmp > 4) {
isFlush = true;
break;
} else {
tmp = 0;
}
}
tmp = 0;
// Four of a Kind Check
// Three of a Kind Check
for(new i = 0; i < 4; i++) {
for(new j = 0; j < 13; j++) {
if(suitArray[i][j] == 1) {
for(new c = 0; c < 4; c++) {
if(suitArray[c][j] == 1) {
tmp++;
}
}
if(tmp == 4) {
isFour = true;
}
else if(tmp >= 3) {
isThree = true;
} else {
tmp = 0;
}
}
}
}
tmp = 0;
// Two Pair & Pair Check
for(new j = 0; j < 13; j++) {
tmp = 0;
for(new i = 0; i < 4; i++) {
if(suitArray[i][j] == 1) {
tmp++;
if(tmp >= 2) {
isPair = true;
pairs++;
if(pairs >= 2) {
isTwoPair = true;
}
}
}
}
}
tmp = 0;
// Straight Check
for(new j = 0; j < 13; j++) {
for(new i = 0; i < 4; i++) {
if(suitArray[i][j] == 1) {
for(new s = 0; s < 5; s++) {
for(new c = 0; c < 4; c++) {
if(j+s == 13)
{
if(suitArray[c][0] == 1) {
tmp++;
break;
}
}
else if (j+s >= 14)
{
break;
}
else
{
if(suitArray[c][j+s] == 1) {
tmp++;
break;
}
}
}
}
}
if(tmp >= 5) {
isStraight = true;
}
tmp = 0;
}
}
tmp = 0;
// Convert Hand to Singles
// Card 1
if(pokerArray[0] > 12 && pokerArray[0] < 26) pokerArray[0] -= 13;
if(pokerArray[0] > 25 && pokerArray[0] < 39) pokerArray[0] -= 26;
if(pokerArray[0] > 38 && pokerArray[0] < 52) pokerArray[0] -= 39;
if(pokerArray[0] == 0) pokerArray[0] = 13; // Convert Aces to worth 13.
// Card 2
if(pokerArray[1] > 12 && pokerArray[1] < 26) pokerArray[1] -= 13;
if(pokerArray[1] > 25 && pokerArray[1] < 39) pokerArray[1] -= 26;
if(pokerArray[1] > 38 && pokerArray[1] < 52) pokerArray[1] -= 39;
if(pokerArray[1] == 0) pokerArray[1] = 13; // Convert Aces to worth 13.
// 10) POKER_RESULT_ROYAL_FLUSH - A, K, Q, J, 10 (SAME SUIT) * ROYAL + FLUSH *
if(isRoyalFlush) {
SetPVarString(playerid, "pkrResultString", "Royal Flush");
return 1000 + pokerArray[0] + pokerArray[1];
}
// 9) POKER_RESULT_STRAIGHT_FLUSH - Any five card squence. (SAME SUIT) * STRAIGHT + FLUSH *
if(isStraight && isFlush) {
SetPVarString(playerid, "pkrResultString", "Straight Flush");
return 900 + pokerArray[0] + pokerArray[1];
}
// 8) POKER_RESULT_FOUR_KIND - All four cards of the same rank. * FOUR KIND *
if(isFour) {
SetPVarString(playerid, "pkrResultString", "Four of a Kind");
return 800 + pokerArray[0] + pokerArray[1];
}
// 7) POKER_RESULT_FULL_HOUSE - Three of a kind combined with a pair. * THREE KIND + PAIR *
if(isThree && isTwoPair) {
SetPVarString(playerid, "pkrResultString", "Full House");
return 700 + pokerArray[0] + pokerArray[1];
}
// 6) POKER_RESULT_FLUSH - Any five cards of the same suit, no sequence. * FLUSH *
if(isFlush) {
SetPVarString(playerid, "pkrResultString", "Flush");
return 600 + pokerArray[0] + pokerArray[1];
}
// 5) POKER_RESULT_STRAIGHT - Five cards in sequence, but not in the same suit. * STRAIGHT *
if(isStraight) {
SetPVarString(playerid, "pkrResultString", "Straight");
return 500 + pokerArray[0] + pokerArray[1];
}
// 4) POKER_RESULT_THREE_KIND - Three cards of the same rank. * THREE KIND *
if(isThree) {
SetPVarString(playerid, "pkrResultString", "Three of a Kind");
return 400 + pokerArray[0] + pokerArray[1];
}
// 3) POKER_RESULT_TWO_PAIR - Two seperate pair. * TWO PAIR *
if(isTwoPair) {
SetPVarString(playerid, "pkrResultString", "Two Pair");
return 300 + pokerArray[0] + pokerArray[1];
}
// 2) POKER_RESULT_PAIR - Two cards of the same rank. * PAIR *
if(isPair) {
SetPVarString(playerid, "pkrResultString", "Pair");
return 200 + pokerArray[0] + pokerArray[1];
}
// 1) POKER_RESULT_HIGH_CARD - Highest card.
SetPVarString(playerid, "pkrResultString", "High Card");
return pokerArray[0] + pokerArray[1];
}Editor is loading...