void pilotfile::csg_write_missions() { int idx, j; cmission *missionp; startSection(Section::Missions); for (idx = 0; idx < MAX_CAMPAIGN_MISSIONS; idx++) { if (Campaign.missions[idx].completed) { missionp = &Campaign.missions[idx]; cfwrite_int(idx, cfp); // flags cfwrite_int(missionp->flags, cfp); // goals cfwrite_int(missionp->num_goals, cfp); for (j = 0; j < missionp->num_goals; j++) { cfwrite_string_len(missionp->goals[j].name, cfp); cfwrite_char(missionp->goals[j].status, cfp); } // events cfwrite_int(missionp->num_events, cfp); for (j = 0; j < missionp->num_events; j++) { cfwrite_string_len(missionp->events[j].name, cfp); cfwrite_char(missionp->events[j].status, cfp); } // variables cfwrite_int(missionp->num_variables, cfp); for (j = 0; j < missionp->num_variables; j++) { cfwrite_int(missionp->variables[j].type, cfp); cfwrite_string_len(missionp->variables[j].text, cfp); cfwrite_string_len(missionp->variables[j].variable_name, cfp); } // scoring stats cfwrite_int(missionp->stats.score, cfp); cfwrite_int(missionp->stats.rank, cfp); cfwrite_int(missionp->stats.assists, cfp); cfwrite_int(missionp->stats.kill_count, cfp); cfwrite_int(missionp->stats.kill_count_ok, cfp); cfwrite_int(missionp->stats.bonehead_kills, cfp); cfwrite_uint(missionp->stats.p_shots_fired, cfp); cfwrite_uint(missionp->stats.p_shots_hit, cfp); cfwrite_uint(missionp->stats.p_bonehead_hits, cfp); cfwrite_uint(missionp->stats.s_shots_fired, cfp); cfwrite_uint(missionp->stats.s_shots_hit, cfp); cfwrite_uint(missionp->stats.s_bonehead_hits, cfp); // ship kills (scoring) for (j = 0; j < static_cast<int>(Ship_info.size()); j++) { cfwrite_int(missionp->stats.kills[j], cfp); } // medals earned (scoring) for (j = 0; j < Num_medals; j++) { cfwrite_int(missionp->stats.medal_counts[j], cfp); } } } endSection(); }
// int Test_color = 0; void chatbox_add_line(const char *msg, int pid, int add_id) { int backup; int n_lines,idx; int n_chars[3]; const char *p_str[3]; // for the initial line (unindented) char msg_extra[CHATBOX_STRING_LEN]; if(!Chatbox_created){ return; } // maybe stick on who sent the message if(add_id){ if(MULTI_STANDALONE(Net_players[pid])){ sprintf(msg_extra, NOX("%s %s"), NOX("<SERVER>"), msg ); } else { sprintf(msg_extra, NOX("%s: %s"), Net_players[pid].m_player->short_callsign, msg ); } } else { strcpy_s(msg_extra,msg); } Assert(strlen(msg_extra) < (CHATBOX_STRING_LEN - 2)); // split the text up into as many lines as necessary n_lines = split_str(msg_extra, Chatbox_disp_w, n_chars, p_str, 3); Assert(n_lines != -1); // setup the first line -- be sure to clear out the line memset( Brief_chat_lines[Brief_current_add_line], 0, CHATBOX_STRING_LEN ); // add the player id # Brief_chat_lines[Brief_current_add_line][0] = (char)(pid % 16); // Brief_chat_lines[Brief_current_add_line][0] = (char)Test_color; // Test_color = (Test_color == MAX_PLAYERS - 1) ? 0 : Test_color++; // set the indent to 0 Brief_chat_indents[Brief_current_add_line] = 0; // copy in the chars strncpy(&Brief_chat_lines[Brief_current_add_line][1],p_str[0],CHATBOX_STRING_LEN - 1); if(n_chars[0] >= CHATBOX_STRING_LEN){ Brief_chat_lines[Brief_current_add_line][CHATBOX_STRING_LEN - 1] = '\0'; } else { Brief_chat_lines[Brief_current_add_line][n_chars[0] + 1] = '\0'; } // increment the total line count if we haven't reached the max already if(Num_brief_chat_lines<MAX_BRIEF_CHAT_LINES){ Num_brief_chat_lines++; } // get the index of the next string to add text to Brief_current_add_line = Brief_chat_next_index[Brief_current_add_line]; // if we have more than 1 line, re-split everything so that the rest are indented if(n_lines > 1){ // split up the string after the first break-marker n_lines = split_str(msg_extra + n_chars[0],Chatbox_disp_w - CHAT_LINE_INDENT,n_chars,p_str,3); Assert(n_lines != -1); // setup these remaining lines for(idx=0;idx<n_lines;idx++){ // add the player id# Brief_chat_lines[Brief_current_add_line][0] = (char)(pid % 16); // add the proper indent Brief_chat_indents[Brief_current_add_line] = CHAT_LINE_INDENT; // copy in the line text itself strncpy(&Brief_chat_lines[Brief_current_add_line][1],p_str[idx],CHATBOX_STRING_LEN-1); if(n_chars[idx] >= CHATBOX_STRING_LEN){ Brief_chat_lines[Brief_current_add_line][CHATBOX_STRING_LEN - 1] = '\0'; } else { Brief_chat_lines[Brief_current_add_line][n_chars[idx] + 1] = '\0'; } // increment the total line count if we haven't reached the max already if(Num_brief_chat_lines<MAX_BRIEF_CHAT_LINES){ Num_brief_chat_lines++; } // get the index of the next line to add text to Brief_current_add_line = Brief_chat_next_index[Brief_current_add_line]; } } // COMMAND LINE OPTION if(Cmdline_multi_stream_chat_to_file && Multi_chat_stream!=NULL && msg[0] != '\0'){ // stream to the file if we're supposed to cfwrite_string(msg,Multi_chat_stream); cfwrite_char('\n',Multi_chat_stream); } // if this line of text is from the player himself, automatically go to the bottom of // the chat list if(pid == MY_NET_PLAYER_NUM){ if(Num_brief_chat_lines > Chatbox_max_lines){ Brief_start_display_index = Brief_current_add_line; for(backup = 1;backup <= Chatbox_max_lines;backup++){ Brief_start_display_index = Brief_chat_prev_index[Brief_start_display_index]; } } } // if we have enough lines of text to require scrolling, scroll down by one. else { chatbox_scroll_down(); } }
void pilotfile_convert::csg_export_missions() { startSection(Section::Missions); size_t list_size = csg->missions.size(); for (size_t idx = 0; idx < list_size; idx++) { cfwrite_int(csg->missions[idx].index, cfp); // flags cfwrite_int(csg->missions[idx].flags, cfp); // goals size_t count = csg->missions[idx].goals.size(); cfwrite_int((int)count, cfp); for (size_t j = 0; j < count; j++) { cfwrite_string_len(csg->missions[idx].goals[j].name, cfp); cfwrite_char(csg->missions[idx].goals[j].status, cfp); } // events count = csg->missions[idx].events.size(); cfwrite_int((int)count, cfp); for (size_t j = 0; j < count; j++) { cfwrite_string_len(csg->missions[idx].events[j].name, cfp); cfwrite_char(csg->missions[idx].events[j].status, cfp); } // variables count = csg->missions[idx].variables.size(); cfwrite_int((int)count, cfp); for (size_t j = 0; j < count; j++) { cfwrite_int(csg->missions[idx].variables[j].type, cfp); cfwrite_string_len(csg->missions[idx].variables[j].text, cfp); cfwrite_string_len(csg->missions[idx].variables[j].variable_name, cfp); } // scoring stats cfwrite_int(csg->missions[idx].stats.score, cfp); cfwrite_int(csg->missions[idx].stats.rank, cfp); cfwrite_int(csg->missions[idx].stats.assists, cfp); cfwrite_int(csg->missions[idx].stats.kill_count, cfp); cfwrite_int(csg->missions[idx].stats.kill_count_ok, cfp); cfwrite_int(csg->missions[idx].stats.bonehead_kills, cfp); cfwrite_uint(csg->missions[idx].stats.p_shots_fired, cfp); cfwrite_uint(csg->missions[idx].stats.p_shots_hit, cfp); cfwrite_uint(csg->missions[idx].stats.p_bonehead_hits, cfp); cfwrite_uint(csg->missions[idx].stats.s_shots_fired, cfp); cfwrite_uint(csg->missions[idx].stats.s_shots_hit, cfp); cfwrite_uint(csg->missions[idx].stats.s_bonehead_hits, cfp); // ship kills (scoring) count = csg->missions[idx].stats.ship_kills.size(); for (size_t j = 0; j < count; j++) { cfwrite_int(csg->missions[idx].stats.ship_kills[j].val, cfp); } // medals earned (scoring) count = csg->missions[idx].stats.medals_earned.size(); for (size_t j = 0; j < count; j++) { cfwrite_int(csg->missions[idx].stats.medals_earned[j].val, cfp); } } endSection(); }