-/* game_uno.c - NeonServ v5.4
+/* game_uno.c - NeonServ v5.6
* Copyright (C) 2011-2012 Philipp Kreil (pk910)
*
* This program is free software: you can redistribute it and/or modify
free(card);
}
}
+ free(deck);
}
void uno_free_player(struct uno_player *player, struct uno_card_deck *deck) {
struct uno_game *game = data;
game->timer = NULL;
if(game->players == 1) {
- //TEXT: too less users
+ uno_reply(game, NULL, "NF_UNO_LESS_PLAYERS");
uno_free_game(game);
return;
}
int uno_check_card_valid(struct uno_game *game, struct uno_card *card) {
if(game->take_cards_pending && card->card != game->top_card->card)
return 1;
- if(card->color == UNO_COLOR_BLACK)
+ if(card->color == UNO_COLOR_BLACK || game->top_card->color == UNO_COLOR_BLACK)
return 0;
if(card->color != game->top_card->color && card->card != game->top_card->card)
return 1;
uno_reply(game, NULL, "NF_UNO_USER_WIN", game->active_player->chanuser->user->nick);
if(player->prev)
player->prev->next = player->next;
+ else
+ game->player = player->next;
if(player->next)
player->next->prev = player->prev;
player->next = NULL;
winner_count = 1;
char rank_buf[20], won_buf[50], total_won_buf[50];
char *tmp, *tmp2;
- for(cplayer = game->winner; cplayer->next; cplayer = cplayer->next) {
+ for(cplayer = game->winner; cplayer; cplayer = cplayer->next) {
sprintf(rank_buf, "%d", winner_count++);
content[0] = rank_buf;
content[1] = cplayer->chanuser->user->nick;
}
}
-void uno_event_quit(struct UserNode *user) {
- struct uno_game *game;
- for(game = uno_active_games; game; game = game->next) {
- struct uno_player *player;
- for(player = game->player; player; player = player->next) {
- if(player->chanuser->user == user) {
- uno_free_player(player, game->deck);
- break;
- }
- }
- }
-}
-
void uno_event_freechan(struct ChanNode *chan) {
struct uno_game *game;
for(game = uno_active_games; game; game = game->next) {
if(game->channel == chan) {
uno_free_game(game);
+ return;
}
}
}