/* * raisedead * * Usage: raisedead oldname [newname] * * Restores an account that has been previously removed using "remplayer". * The zombie files from which it came are removed. Under most * circumstances, you restore the account to the same handle it had * before (oldname). However, in some circumstances you may need to * restore the account to a different handle, in which case you include * "newname" as the new handle. After "raisedead", you may need to use the * "asetpasswd" command to get the player started again as a registered * user, especially if the account had been locked * by setting the password to *. */ int com_raisedead(int p, param_list param) { char *player = param[0].val.word; char *newplayer = (param[1].type == TYPE_NULL ? player : param[1].val.word); char playerlower[MAX_LOGIN_NAME], newplayerlower[MAX_LOGIN_NAME]; char plrFile[MAX_FILENAME_SIZE]; int p2, lookup; strcpy(playerlower, player); stolower(playerlower); strcpy(newplayerlower, newplayer); stolower(newplayerlower); /* First make sure we have a player to raise. */ sprintf (plrFile, "%s/%c/.rem.%s", PLAYER_DIR, playerlower[0], playerlower); if (!file_exists (plrFile)) { pprintf(p, "No deleted player %s.\n", player); return COM_OK; } /* Now check for registered player. */ sprintf (plrFile, "%s/%c/%s", PLAYER_DIR, newplayerlower[0], newplayerlower); if (file_exists (plrFile)) { pprintf(p, "A player named %s is already registered.\n", newplayerlower); pprintf(p, "Obtain a new handle for the dead person.\n"); pprintf(p, "Then use raisedead [oldname] [newname].\n"); return COM_OK; } /* Don't raise over a logged in user. */ if (player_find_bylogin(newplayerlower) >= 0) { pprintf(p, "A player named %s is logged in.\n", newplayerlower); pprintf(p, "Can't raise until that person leaves.\n"); return COM_OK; } /* OK, ready to go. */ if (!player_reincarn(playerlower, newplayerlower)) { if (param[1].type == TYPE_WORD) pprintf(p, "Player %s reincarnated to %s.\n", player, newplayer); else pprintf(p, "Player %s raised.\n", player); p2 = player_new(); if (!(lookup = player_read(p2, newplayerlower))) { if (param[1].type == TYPE_WORD) { free(player_globals.parray[p2].name); player_globals.parray[p2].name = strdup(newplayer); player_save(p2); } /*if (player_globals.parray[p2].s_stats.rating > 0) UpdateRank(TYPE_STAND, newplayer, &player_globals.parray[p2].s_stats, newplayer); if (player_globals.parray[p2].z_stats.rating > 0) UpdateRank(TYPE_CRAZYHOUSE, newplayer, &player_globals.parray[p2].z_stats, newplayer); if (player_globals.parray[p2].w_stats.rating > 0) UpdateRank(TYPE_WILD, newplayer, &player_globals.parray[p2].w_stats, newplayer);*/ } player_remove(p2); } else { pprintf(p, "Raisedead failed.\n"); } return COM_OK; #if 0 if (param[1].type == TYPE_NULL) { if (!player_raise(playerlower)) { pprintf(p, "Player %s raised from dead.\n", player); p1 = player_new(); if (!(lookup = player_read(p1, playerlower))) { /*if (player_globals.parray[p1].s_stats.rating > 0) UpdateRank(TYPE_STAND, player, &player_globals.parray[p1].s_stats, player); if (player_globals.parray[p1].z_stats.rating > 0) UpdateRank(TYPE_CRAZYHOUSE, player, &player_globals.parray[p1].z_stats, player); if (player_globals.parray[p1].w_stats.rating > 0) UpdateRank(TYPE_WILD, player, &player_globals.parray[p1].w_stats, player);*/ } player_remove(p1); } else { pprintf(p, "Raisedead failed.\n"); } return COM_OK; } else { if (player_find_bylogin(newplayerlower) >= 0) { pprintf(p, "A player by the requested name is logged in.\n"); pprintf(p, "Can't reincarnate until they leave.\n"); return COM_OK; } p2 = player_new(); lookup = player_read(p2, newplayerlower); player_remove(p2); if (!lookup) { pprintf(p, "A player by the name %s is already registered.\n", player); pprintf(p, "Obtain another new handle for the dead person.\n"); return COM_OK; } if (!player_reincarn(playerlower, newplayerlower)) { pprintf(p, "Player %s reincarnated to %s.\n", player, newplayer); p2 = player_new(); if (!(lookup = player_read(p2, newplayerlower))) { free(player_globals.parray[p2].name); player_globals.parray[p2].name = strdup(newplayer); player_save(p2); /*if (player_globals.parray[p2].s_stats.rating > 0) UpdateRank(TYPE_STAND, newplayer, &player_globals.parray[p2].s_stats, newplayer); if (player_globals.parray[p2].z_stats.rating > 0) UpdateRank(TYPE_CRAZYHOUSE, newplayer, &player_globals.parray[p2].z_stats, newplayer); if (player_globals.parray[p2].w_stats.rating > 0) UpdateRank(TYPE_WILD, newplayer, &player_globals.parray[p2].w_stats, newplayer);*/ } player_remove(p2); } else { pprintf(p, "Raisedead failed.\n"); } } return COM_OK; #endif }
void player_turn(player_t* player) { decision_t decision; if (player == game_last_player()) return; if (player->cash <= 0) { /* player have no cash and only watching */ ui_refresh_msg(M1, "%s has no cash to turn.", player->name); ui_sleep(game.sleep_time); } else { ui_refresh_msg(M1, "%s is thinking...", player->name); if (player->is_ai) ui_sleep(game.sleep_time); decision = (player->is_ai) ? ai_decision(player) : ui_selector(player); switch (decision) { case CHECK: set_msg(M2, "%s: checks.", player->name); break; case BET: set_msg(M2, "%s bets %u", player->name, BIG_BLIND); player_bet(player, BIG_BLIND); break; case RAISE: set_msg(M2, "%s raises to %u", player->name, game.bet * 2); player_raise(player); break; case FOLD: LOG("%s says fold\n", player->name); set_msg(M2, "%s: folds.", player->name); player_bank(player); player->is_in_game = FALSE; break; case CALL: set_msg(M2, "%s calls %u", player->name, game.bet); player_bet(player, game.bet - player->bet); break; } ai_update_behaviour(player, decision, behaviour); } player->is_move_made = TRUE; /*FOR_EACH_PLAYER(i) { LOG("%s's statistics: %u %u %u %u %u %u %u %u %u %u %u\n", game.players[i].name, behaviour[i].raises, behaviour[i].bets, behaviour[i].calls, behaviour[i].checks, behaviour[i].folds, behaviour[i].raises_total, behaviour[i].bets_total, behaviour[i].calls_total, behaviour[i].checks_total, behaviour[i].folds_total, behaviour[i].last); }*/ }