@gamefast/durak-sdk

```js import Client from '../src';

Usage no npm install needed!

<script type="module">
  import gamefastDurakSdk from 'https://cdn.skypack.dev/@gamefast/durak-sdk';
</script>

README

Client Usage Examle

import Client from '../src';

const client = new Client({
    host: '127.0.0.1',
    port: 3001,
    secure: false
});

/** Player */
/**
 * @param data Object
 * {
 *   status: Boolean,
 *   room: {
 *     players: {
 *          id1: { id: id1, name: String, avatar: String },
 *          id2: { id: id2, name: String, avatar: String },
 *          id3: { id: id3, name: String, avatar: String },
 *          id4: { id: id4, name: String, avatar: String },
 *     },
 *     hand: [[Object<Card>, Object<Card>], [Object<Card>], [Object<Card>]],
 *     attacker: Number (index),
 *     defender: Number (index),
 *     nextUser: Number (index)
 *   }
 *
 * }
 * */
client.onPlayerSubscribe(data => {
    console.log('======SUBSCRIBE========')
    console.log(data);
    users = _.toArray(data.room.players);
    playerIndex = _.findIndex(users, user => user.id == playerId);
    console.log('=======================');
    client.ready(true);
});

/**
 * @param cards
 *  [{ suit: 0, value: 6}, { suit: 2, value: 11}]
 * @param take Boolean (if player is defender and is taking hand cards)
 * */

client.onPlayerGetCards(({ cards, take }) => {
    console.log('====GET CARDS====', cards, take);
    // clearAllCards();
    drawCards(cards);
});

/**
 * @param cards
 *  [{ suit: 0, value: 6}, { suit: 2, value: 11}]
 * @param state Number Enum(states)
 * @description state to indicate what player can do
 * */

client.onPlayerGetValidCards(({ cards, state }) => {
    console.log('====GET VALID CARDS====', cards, state);
});

/** Room */
client.onGameStart(console.log);
client.onGameFinish(console.log);

/**
 * @param player
 * {
 *  id: String
 * }
 * */

client.onPlayerLeave(player => {
    console.log('===========ROOM PLAYER LEAVE========');
    console.log(player);
    users.splice(_.findIndex(users, user => user.id == player), 1)
});

client.onPlayerReady(console.log);
client.onPlayerNotReady(console.log);

/**
 * @param bonuses Array<String>
 * @param chips [{ amount: Number, type: 'sku_gold' }]
 * @param levelUp Boolean
 * @param xp Number
 * */

client.onPlayerFinish(({ bonuses, chips, levelUp, xp }) => {
    console.log('===========PLAYER FINISH========');
    console.log({ bonuses, chips, levelUp, xp });
});

/**
 * @param playerId String,
 * @param position Number
 * */
client.onRoomPlayerFinish(({ playerId, position }) => {
    console.log('===========ROOM PLAYER FINISH========');
    console.log({ playerId, position });
});


/**
 * @param count Number
 * @param trump Object { suit: 0, value: 11 }
 * */

client.onRoomGetCards(({ count, trump }) => {
    console.log('===========ROOM GET CARDS========');
    console.log(count, trump);
    document.getElementById('trump').src = `/img/cards/C${trump.suit}${trump.value}.png`
});

/**
 * @param card Object { suit: 1, value: 12 }
 * @param state Number Enum(states)
 * */
client.onRoomPlayCard(({ card, state }) => {
    console.log('===========ROOM PLAY CARD========');
    console.log(card);
    if (!card) return;
    try {
        _.findWhere(playerCards, card).image.remove();
    } catch (e) {}
    hand.push(new HandCard(card));
    switchAllOff();
});

/**
 * @param playerId String,
 * @param count Number
 * */

client.onRoomGetNewCards(({ playerId, count }) => {
    console.log('===========ROOM GET NEW CARDS========');
    console.log({ playerId, count });
});

/**
 * @param attacker Number (player index)
 * @param defender Number (player index)
 * @param userIndex Number (player index)
 * @param taking Boolean (if defender is taking)
 * @param state Number Enum(states)
 * */
client.onRoomNextUser(({ attacker, defender, userIndex, taking, state }) => {
    console.log('==========ROOM NEXT USER===========');
    console.log({ attacker, defender, userIndex, taking, state });
    console.log(users, playerIndex)
    document.getElementById('userId').style.color = userIndex === _.findIndex(users, user => user.id == playerId) ? 'red' : 'black';

    if (state === 8  || state === 9) {
        clearHand();
    }
});