Skip to content

Instantly share code, notes, and snippets.

@faustofjunqueira
Created May 26, 2020 04:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save faustofjunqueira/4b26d5f66c399a7c84ae30c376383636 to your computer and use it in GitHub Desktop.
Save faustofjunqueira/4b26d5f66c399a7c84ae30c376383636 to your computer and use it in GitHub Desktop.
/* TheoSystem AntCheat
* Sistema de prevencao a alteracao do stats, feats e skill do arquivo .2da
* Fausto Ferreira Junqueira
* 01/08/2012
* Configurado para check em level 1
* File Name :theo_an_stats
*/
int Anticheat_GetBaseScoreSTR(int iRace) {
if (iRace == RACIAL_TYPE_HALFORC) {
return 10;
}
if (iRace == RACIAL_TYPE_GNOME || iRace == RACIAL_TYPE_HALFLING) {
return 6;
}
return 8;
}
int Anticheat_GetBaseScoreDEX(int iRace) {
if (iRace == RACIAL_TYPE_ELF || iRace == RACIAL_TYPE_HALFELF ) {
return 10;
}
return 8;
}
int Anticheat_GetBaseScoreCON(int iRace) {
if (iRace == RACIAL_TYPE_ELF) {
return 6;
} else if (iRace == RACIAL_TYPE_GNOME || iRace == RACIAL_TYPE_DWARF) {
return 10;
}
return 8;
}
int Anticheat_GetBaseScoreWIS(int iRace) {
return 8;
}
int Anticheat_GetBaseScoreINT(int iRace) {
if (iRace == RACIAL_TYPE_HALFORC) {
return 6;
}
return 8;
}
int Anticheat_GetBaseScoreCHA(int iRace) {
if (iRace == RACIAL_TYPE_DWARF || iRace == RACIAL_TYPE_HALFORC) {
return 6;
}
return 8;
}
// Returns the amount of point remained. If returns -1, means that the user are invalid
int Anticheat_SpentPointAbilityScore(int iPointsRemain, int iAbilityScore, int iIteration=0) {
if (iPointsRemain == -1) {
return -1;
}
if(iAbilityScore == 0) {
return iPointsRemain;
} else if(iPointsRemain > 0) {
if (iIteration < 6) {
return Anticheat_SpentPointAbilityScore(iPointsRemain-1, iAbilityScore-1, iIteration+1);
} else if (iIteration < 8) {
return Anticheat_SpentPointAbilityScore(iPointsRemain-2, iAbilityScore-1, iIteration+1);
} else if (iIteration < 10) {
return Anticheat_SpentPointAbilityScore(iPointsRemain-3, iAbilityScore-1, iIteration+1);
}
}
return -1;
}
int Anticheat_CheckAbilityScore(object oPC) {
int iPointsRemain = 30; // Default by NWN
int iRace = GetRacialType(oPC);
int iLevel = GetHitDice(oPC);
int iSTR = GetAbilityScore(oPC, ABILITY_STRENGTH) - Anticheat_GetBaseScoreSTR(iRace);
int iDEX = GetAbilityScore(oPC, ABILITY_DEXTERITY) - Anticheat_GetBaseScoreDEX(iRace);
int iCON = GetAbilityScore(oPC, ABILITY_CONSTITUTION) - Anticheat_GetBaseScoreCON(iRace);
int iINT = GetAbilityScore(oPC, ABILITY_INTELLIGENCE) - Anticheat_GetBaseScoreINT(iRace);
int iWIS = GetAbilityScore(oPC, ABILITY_WISDOM) - Anticheat_GetBaseScoreWIS(iRace);
int iCHA = GetAbilityScore(oPC, ABILITY_CHARISMA) - Anticheat_GetBaseScoreCHA(iRace);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iSTR);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iDEX);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iCON);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iINT);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iWIS);
iPointsRemain = Anticheat_SpentPointAbilityScore(iPointsRemain, iCHA);
// Must use all points
return iPointsRemain == 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment