// //////////////////////////////////////////////////////////////////////////// void applyLimitSet(void) { MULTISTRUCTLIMITS *pEntry = ingame.pStructureLimits; unsigned int i; if (ingame.numStructureLimits == 0) { return; } // Get the limits and decode for (i = 0; i < ingame.numStructureLimits; ++i) { UBYTE id = pEntry[i].id; // So long as the ID is valid if (id < numStructureStats) { unsigned int j; for (j = 0; j < MAX_PLAYERS; ++j) { asStructLimits[j][id].limit = pEntry[i].limit; } } } freeLimitSet(); }
void runLimitScreen(void) { UDWORD i, id, statid; frontendMultiMessages(); // network stuff. id = widgRunScreen(psWScreen); // Run the current set of widgets // sliders if((id > IDLIMITS_ENTRIES_START) && (id< IDLIMITS_ENTRIES_END)) { statid = widgGetFromID(psWScreen,id-1)->UserData ; if(statid) { asStructLimits[0][statid].limit = (UBYTE) ((W_SLIDER*)(widgGetFromID(psWScreen,id)))->pos; } } else { // icons that are always about. switch(id) { case IDLIMITS_RETURN: // reset the sliders.. for (i = 0; i < numStructureStats ; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // free limiter structure freeLimitSet(); //inform others sendOptions(); eventReset(); changeTitleMode(MULTIOPTION); // make some noize. if(!ingame.localOptionsReceived) { addConsoleMessage(_("Limits reset to default values"),DEFAULT_JUSTIFY, SYSTEM_MESSAGE); } else { sendTextMessage("Limits Reset To Default Values",true); } break; case IDLIMITS_OK: resetReadyStatus(false); createLimitSet(); changeTitleMode(MULTIOPTION); break; default: break; } } widgDisplayScreen(psWScreen); // show the widgets currently running }
// //////////////////////////////////////////////////////////////////////////// void createLimitSet(void) { UDWORD i, numchanges = 0, bufSize, idx = 0; MULTISTRUCTLIMITS *pEntry; debug(LOG_NET, "LimitSet created"); // free old limiter structure freeLimitSet(); // don't bother creating if a challenge mode is active // there are no settings loaded from the .ini file for now... if (challengeActive) { return; } // Count the number of changes for (i = 0; i < numStructureStats; i++) { // If the limit differs from the default if (asStructLimits[0][i].limit != LOTS_OF) { numchanges++; } } // Allocate some memory for the changes bufSize = numchanges * sizeof(MULTISTRUCTLIMITS); pEntry = (MULTISTRUCTLIMITS *)malloc(bufSize); memset(pEntry, 255, bufSize); // Prepare chunk ASSERT(numStructureStats < UBYTE_MAX, "Too many structure stats"); for (i = 0; i < numStructureStats; i++) { if (asStructLimits[0][i].limit != LOTS_OF) { ASSERT(idx < numchanges, "Bad number of changed limits"); pEntry[idx].id = i; pEntry[idx].limit = asStructLimits[0][i].limit; idx++; } } ingame.numStructureLimits = numchanges; ingame.pStructureLimits = pEntry; if (bHosted) { sendOptions(); } }
void runLimitScreen(void) { frontendMultiMessages(); // network stuff. WidgetTriggers const &triggers = widgRunScreen(psWScreen); unsigned id = triggers.empty()? 0 : triggers.front().widget->id; // Just use first click here, since the next click could be on another menu. // sliders if((id > IDLIMITS_ENTRIES_START) && (id< IDLIMITS_ENTRIES_END)) { unsigned statid = widgGetFromID(psWScreen,id-1)->UserData; if(statid) { asStructLimits[0][statid].limit = (UBYTE) ((W_SLIDER*)(widgGetFromID(psWScreen,id)))->pos; } } else { // icons that are always about. switch(id) { case IDLIMITS_RETURN: // reset the sliders.. for (unsigned i = 0; i < numStructureStats; ++i) { asStructLimits[0][i].limit = asStructLimits[0][i].globalLimit; } // free limiter structure freeLimitSet(); //inform others if (bHosted) { sendOptions(); } eventReset(); changeTitleMode(MULTIOPTION); // make some noize. if(!ingame.localOptionsReceived) { addConsoleMessage(_("Limits reset to default values"),DEFAULT_JUSTIFY, SYSTEM_MESSAGE); } else { sendTextMessage("Limits Reset To Default Values",true); } break; case IDLIMITS_OK: resetReadyStatus(false); createLimitSet(); changeTitleMode(MULTIOPTION); break; default: break; } } widgDisplayScreen(psWScreen); // show the widgets currently running }