Exemple #1
0
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;
	}
}
Exemple #2
0
/*
 *   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();
}
Exemple #4
0
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();
}