///////////////////////////// The following section //// optimizes the use of //// health items on the //// survivors to maximize //// their health bonus. /////////////////////////////new Float:fTemp[4];// Sort by ascending health bonus after healingfor (new i = 0; i < 4; i++){ for (new j = 0; j < 4; j++) { if (fHealth[iKitPriority[j]] + fTempHealth[iKitPriority[j]] > 100) fTemp[j] = fHealth[iKitPriority[j]] + (100 - fHealth[iKitPriority[j]]) / 2; else fTemp[j] = fTempHealth[j]; } if ((fHealth[i] + (100 - fHealth[i]) * g_fSM_HealPercent) < (fTemp[0])) { iKitPriority[3] = iKitPriority[2]; iKitPriority[2] = iKitPriority[1]; iKitPriority[1] = iKitPriority[0]; iKitPriority[0] = i; } else if ((fHealth[i] + (100 - fHealth[i]) * g_fSM_HealPercent) < (fTemp[1])) { iKitPriority[3] = iKitPriority[2]; iKitPriority[2] = iKitPriority[1]; iKitPriority[1] = i; } else if ((fHealth[i] + (100 - fHealth[i]) * g_fSM_HealPercent) < (fTemp[2])) { iKitPriority[3] = iKitPriority[2]; iKitPriority[2] = i; } else { iKitPriority[3] = i; }}// Repeat optimization for each medkitfor (new k = 0; k < iTotalKits; k++){ // Move any dead or incapped survivors to the end for (new i = 0; i < 4; i++) { if (FloatCompare(fHealth[i], 0.0) < 1 && FloatCompare(fTempHealth[i], 0.0)) { iKitPriority[3] = i; iKitPriority[2] = iKitPriority[3]; iKitPriority[1] = iKitPriority[2]; iKitPriority[0] = iKitPriority[1]; } } // Apply a health kit fHealth[iKitPriority[0]] = fHealth[iKitPriority[0]] + (100 - fHealth[iKitPriority[0]]) * g_fSM_HealPercent; fTempHealth[iKitPriority[0]] = 0.0; for (new j = 0; j < 4; j++) { if (fHealth[iKitPriority[j]] + fTempHealth[iKitPriority[j]] > 100) fTemp[j] = fHealth[iKitPriority[j]] + (100 - fHealth[iKitPriority[j]]) / 2; else fTemp[j] = fTempHealth[j]; } // Sort the healed survivor back into the priority if ((fHealth[iKitPriority[0]] + (100 - fHealth[iKitPriority[0]]) * g_fSM_HealPercent) < (fTemp[1])) { iKitPriority[3] = iKitPriority[2]; iKitPriority[2] = iKitPriority[1]; iKitPriority[1] = iKitPriority[0]; } else if ((fHealth[iKitPriority[0]] + (100 - fHealth[iKitPriority[0]]) * g_fSM_HealPercent) < (fTemp[2])) { iKitPriority[3] = iKitPriority[2]; iKitPriority[2] = iKitPriority[0]; } else { iKitPriority[3] = iKitPriority[0]; }}// Calculate total health after medkits are appliedfor (new i = 0; i < 4; i++) fTotalHealth[i] = fHealth[i] + fTempHealth[i];// Sort by ascending temp healthfor (new i = 0; i < 4; i++){ if (fTotalHealth[i] < fTotalHealth[0]) { iTempPriority[3] = iTempPriority[2]; iTempPriority[2] = iTempPriority[1]; iTempPriority[1] = iTempPriority[0]; iTempPriority[0] = i; } else if (fTotalHealth[i] < fTotalHealth[1]) { iTempPriority[3] = iTempPriority[2]; iTempPriority[2] = iTempPriority[1]; iTempPriority[1] = i; } else if (fTotalHealth[i] < fTotalHealth[2]) { iTempPriority[3] = iTempPriority[2]; iTempPriority[2] = i; } else { iTempPriority[3] = i; }}// Move anyone with less than one set of pills worth of free health to the endfor (new i = 0; i < 4; i++){ if (fTotalHealth[iTempPriority[i]] > (g_iSM_PillPercent*100)) { iTempPriority[3] = iTempPriority[0]; iTempPriority[2] = iTempPriority[3]; iTempPriority[1] = iTempPriority[2]; iTempPriority[0] = iTempPriority[1]; }}// Move any dead or incapped survivors to the endfor (new i = 0; i < 4; i++){ if (FloatCompare(fHealth[i], 0.0) < 1 && FloatCompare(fTempHealth[i], 0.0) < 1) { iTempPriority[3] = i; iTempPriority[2] = iTempPriority[3]; iTempPriority[1] = iTempPriority[2]; iTempPriority[0] = iTempPriority[1]; }}// Apply pain pills in order of priorityfor (new i = 0; i < iTotalPills; i++) if (iTotalPills > 0) fTempHealth[iTempPriority[i]] += g_iSM_PillPercent;// Calculate total health after pills are applied accounting for max health 100for (new i = 0; i < 4; i++){ fTotalHealth[i] = fHealth[i] + fTempHealth[i]; if (fTotalHealth[i] > 100) { fTotalHealth[i] = 100.0; fTempHealth[i] = 100 - fHealth[i]; }}// Move anyone with less than one adrenaline worth of free health to the endfor (new i = 0; i < 4; i++){ if (fTotalHealth[iTempPriority[i]] > (g_iSM_AdrenPercent*100)) { iTempPriority[3] = iTempPriority[0]; iTempPriority[2] = iTempPriority[3]; iTempPriority[1] = iTempPriority[2]; iTempPriority[0] = iTempPriority[1]; }}// Move any dead or incapped survivors to the endfor (new i = 0; i < 4; i++){ if (FloatCompare(fHealth[i], 0.0) < 1 && FloatCompare(fTempHealth[i], 0.0) < 1) { iTempPriority[3] = i; iTempPriority[2] = iTempPriority[3]; iTempPriority[1] = iTempPriority[2]; iTempPriority[0] = iTempPriority[1]; }}// Apply adrenaline in order of priorityfor (new i = 0; i < iTotalAdren; i++) if (iTotalAdren > 0) fTempHealth[iTempPriority[i]] += g_iSM_AdrenPercent;// Calculate total health after adrenaline is applied accounting for max health 100for (new i = 0; i < 4; i++){ fTotalHealth[i] = fHealth[i] + fTempHealth[i]; if (fTotalHealth[i] > 100) { fTotalHealth[i] = 100.0; fTempHealth[i] = 100 - fHealth[i]; }}/////////////////////////// End of optimization ///////////////////////////