void tlobby_main::network_handler() { if(gamelist_dirty_ && !delay_gamelist_update_ && (SDL_GetTicks() - last_gamelist_update_ > game_config::lobby_refresh)) { if(gamelist_diff_update_) { update_gamelist_diff(); } else { update_gamelist(); gamelist_diff_update_ = true; } } if(player_list_dirty_) { update_gamelist_filter(); update_playerlist(); } try { config data; if(wesnothd_connection_.receive_data(data)) { process_network_data(data); } } catch(wesnothd_error& e) { LOG_LB << "caught wesnothd_error in network_handler: " << e.message << "\n"; throw; } }
/* * Save a character and inventory. * Would be cool to save NPC's too for quest purposes, * some of the infrastructure is provided. */ void save_char_obj( CHAR_DATA * ch ) { FILE * fp; CHAR_DATA * pet; char buf[ MAX_STRING_LENGTH ]; char strsave[ MAX_INPUT_LENGTH ]; if ( IS_NPC( ch ) ) { return; } if ( ch->desc && ch->desc->original ) { ch = ch->desc->original; } update_playerlist( ch ); ch->save_time = current_time; fclose( fpReserve ); /* player files parsed directories by Yaz 4th Realm */ sprintf( strsave, "%s%c/%s", PLAYER_DIR, LOWER( ch->name[ 0 ] ), capitalize( ch->name ) ); if ( !( fp = fopen( strsave, "w" ) ) ) { sprintf( buf, "Save_char_obj: fopen %s: ", ch->name ); bug( buf, 0 ); perror( strsave ); } else { fwrite_char( ch, fp ); if ( ch->carrying ) { fwrite_obj( ch, ch->carrying, fp, 0, FALSE ); } if ( !IS_NPC( ch ) && ch->pcdata->storage ) { fwrite_obj( ch, ch->pcdata->storage, fp, 0, TRUE ); } for ( pet = ch->in_room->people; pet; pet = pet->next_in_room ) { if ( IS_NPC( pet ) ) { if ( CHECK_BIT( pet->act, ACT_PET ) && ( pet->master == ch ) ) { save_pet( ch, fp, pet ); break; } } } tail_chain(); fprintf( fp, "#END\n" ); } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; }
void tmp_side_wait::generate_menu(twindow& window) { if (stop_updates_) { return; } std::stringstream strstr; users_.clear(); sides_table_->clear(); std::vector<std::set<int> > team_names = generate_team_names_from_side(level_); std::vector<int> allies = generate_allies_from_team_names(team_names); int side = 0; BOOST_FOREACH (const config &sd, level_.child_range("side")) { if (!sd["current_player"].empty()) { const std::string player_id = sd["current_player"].str(); connected_user_list::const_iterator it = users_.begin(); for (; it != users_.end(); ++ it) { if (it->name == player_id) { break; } } if (it == users_.end()) { users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0)); } } } regenerate_hero_map_from_users(disp_, heros_, users_, member_users_); BOOST_FOREACH (const config &sd, level_.child_range("side")) { if (!sd["allow_player"].to_bool(true)) { side ++; continue; } // std::stringstream str; std::map<std::string, string_map> data; data["number"]["label"] = sd["side"].str(); strstr.str(""); if (!sd["current_player"].empty()) { strstr << sd["current_player"].str(); } else { std::string controller = sd["controller"].str(); if (controller == "network") { strstr << _("Network Player"); } else if (controller == "ai") { strstr << _("Computer Player"); } else if (controller == "null") { strstr << _("Empty"); } } data["player"]["label"] = strstr.str(); if (!sd["leader"].empty()) { hero& leader = heros_[sd["leader"].to_int()]; data["faction"]["label"] = leader.name(); data["portrait"]["label"] = leader.image(); data["feature"]["label"] = hero::feature_str(leader.side_feature_); } else { data["faction"]["label"] = _("Random"); data["portrait"]["label"] = "hero-64/random.png"; data["feature"]["label"] = hero::feature_str(HEROS_NO_FEATURE); } strstr.str(""); strstr << allies[side]; data["ally"]["label"] = strstr.str(); strstr.str(""); strstr << sd["gold"].to_int() << "/" << sd["income"].to_int(); data["income"]["label"] = strstr.str(); sides_table_->add_row(data); tgrid* grid_ptr = sides_table_->get_row_grid(side); side ++; } update_playerlist(); window.invalidate_layout(); }
void tmp_side_wait::generate_menu(twindow& window) { if (stop_updates_) { foreach (const config &sd, level_.child_range("side")) { hero& leader = heros_[sd["leader"].to_int()]; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature >= COMBO_FEATURES_MIN_VALID) { leader.side_feature_ = hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]; } else if (selected_feature == COMBO_FEATURES_NONE) { leader.side_feature_ = HEROS_NO_FEATURE; } } return; } /* if (sides_table_->get_item_count()) { return; } */ std::vector<std::string> details; users_.clear(); sides_table_->clear(); int side = 0; foreach (const config &sd, level_.child_range("side")) { if (!sd["allow_player"].to_bool(true)) { side ++; continue; } if (!sd["current_player"].empty()) { const std::string player_id = sd["current_player"].str(); connected_user_list::const_iterator it = users_.begin(); for (; it != users_.end(); ++ it) { if (it->name == player_id) { break; } } if (it == users_.end()) { users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0)); } } // std::stringstream str; std::map<std::string, string_map> data; data["number"]["label"] = sd["side"].str(); data["player"]["label"] = sd["user_description"]; if (!sd["leader"].empty()) { hero& leader = heros_[sd["leader"].to_int()]; data["faction"]["label"] = leader.name(); data["portrait"]["label"] = leader.image(); } else { data["faction"]["label"] = _("Random"); data["portrait"]["label"] = "hero-64/random.png"; } std::string feature_str; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature == COMBO_FEATURES_RANDOM) { data["feature"]["label"] = _("Random"); } else if (selected_feature >= COMBO_FEATURES_MIN_VALID) { data["feature"]["label"] = hero::feature_str(hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]); } data["income"]["label"] = sd["income"].str(); data["color"]["label"] = get_color_string(side); // data["label"]["use_markup"] = "true"; sides_table_->add_row(data); tgrid* grid_ptr = sides_table_->get_row_grid(side); tlabel* label = find_widget<tlabel>(grid_ptr, "color", false, true); label->set_use_markup(true); side ++; } update_playerlist(); window.invalidate_layout(); }