Пример #1
0
/**
 * @brief Updates character experience after a mission.
 * @param[in,out] ent Pointer to the character that should get the experience updated
 * @sa CP_UpdateCharacterStats
 * @sa G_UpdateCharacterScore
 * @sa G_UpdateHitScore
 */
static void G_UpdateCharacterExperience (edict_t *ent)
{
	character_t *chr = &ent->chr;

	int i;
	unsigned int maxXP, gainedXP, totalGainedXP;

	/* Robots/UGVs do not get skill-upgrades. */
	if (chr->teamDef->robot)
		return;

	totalGainedXP = 0;
	for (i = 0; i < SKILL_NUM_TYPES; i++) {
		const abilityskills_t skill = (abilityskills_t)i;
		maxXP = G_CharacterGetMaxExperiencePerMission(skill);
		gainedXP = G_GetEarnedExperience(skill, ent);

		gainedXP = std::min(gainedXP, maxXP);
		chr->score.experience[i] += gainedXP;
		totalGainedXP += gainedXP;
	}

	/* Health isn't part of abilityskills_t, so it needs to be handled separately. */
	assert(i == SKILL_NUM_TYPES);	/**< We need to get sure that index for health-experience is correct. */
	maxXP = G_CharacterGetMaxExperiencePerMission((abilityskills_t)i);
	gainedXP = std::min(maxXP, totalGainedXP / 2);
	chr->score.experience[i] += gainedXP;
}
Пример #2
0
/**
 * @brief Updates character skills after a mission.
 * @param[in,out] chr Pointer to the character that should get the skills updated
 * @sa CP_UpdateCharacterStats
 * @sa G_UpdateCharacterScore
 * @sa G_UpdateHitScore
 */
static void G_UpdateCharacterSkills (character_t *chr)
{
	abilityskills_t i = 0;
	unsigned int maxXP, gainedXP, totalGainedXP;

	/* Robots/UGVs do not get skill-upgrades. */
	if (chr->teamDef->race == RACE_ROBOT)
		return;

	totalGainedXP = 0;
	for (i = 0; i < SKILL_NUM_TYPES; i++) {
		maxXP = G_CharacterGetMaxExperiencePerMission(i);
		gainedXP = G_GetEarnedExperience(i, chr);

		gainedXP = min(gainedXP, maxXP);
		chr->score.experience[i] += gainedXP;
		totalGainedXP += gainedXP;
		chr->score.skills[i] = chr->score.initialSkills[i] + (int) (pow((float) (chr->score.experience[i]) / 100, 0.6f));
		G_PrintStats(va("Soldier %s earned %d experience points in skill #%d (total experience: %d). It is now %d higher.",
				chr->name, gainedXP, i, chr->score.experience[i], chr->score.skills[i] - chr->score.initialSkills[i]));
	}

	/* Health isn't part of abilityskills_t, so it needs to be handled separately. */
	assert(i == SKILL_NUM_TYPES);	/**< We need to get sure that index for health-experience is correct. */
	maxXP = G_CharacterGetMaxExperiencePerMission(i);
	gainedXP = min(maxXP, totalGainedXP / 2);

	chr->score.experience[i] += gainedXP;
	chr->maxHP = chr->score.initialSkills[i] + (int) (pow((float) (chr->score.experience[i]) / 100, 0.6f));
	G_PrintStats(va("Soldier %s earned %d experience points in skill #%d (total experience: %d). It is now %d higher.",
			chr->name, gainedXP, i, chr->score.experience[i], chr->maxHP - chr->score.initialSkills[i]));
}
Пример #3
0
/**
 * @brief Updates character experience after a mission.
 * @param[in,out] ent Pointer to the character that should get the experience updated
 * @sa CP_UpdateCharacterStats
 * @sa G_UpdateCharacterScore
 * @sa G_UpdateHitScore
 */
static void G_UpdateCharacterExperience (Edict* ent)
{
	character_t* chr = &ent->chr;

	/* Robots/UGVs do not get skill-upgrades. */
	if (chr->teamDef->robot)
		return;

	unsigned int totalGainedXP = 0;
	for (int i = 0; i < SKILL_NUM_TYPES; i++) {
		const abilityskills_t skill = static_cast<abilityskills_t>(i);
		const int gainedXP = G_GetEarnedExperience(skill, ent);

		chr->score.experience[i] += gainedXP;
		totalGainedXP += gainedXP;
	}

	/* Speed and health are handled separately */
	chr->score.experience[ABILITY_SPEED] += totalGainedXP / 5;
	/* This is health */
	chr->score.experience[SKILL_NUM_TYPES] += totalGainedXP / 5;
}