| Code: |
function CheckSkillCap(who, ev)
var attributeid := ev.skid;
var priorValue;
var theId;
var lowerholder;
var lockArray := GetObjProperty(who, "SkLockArray");
priorValue := GetAttributeBaseValue(who, attributeid);
if(priorValue < 1000)
if (ev.base > priorValue) // Adding Skill, check for lock set to up
if ((!lockArray) ||
(lockArray[GetSkillIdByAttributeId(attributeid) + 1] == 0))
SetAttributeBaseValue(who, attributeid, Cint(ev.base));
endif
elseif (ev.base < priorValue) // Lowering Skill, check for lock set to down
if ((lockArray != error) &&
(lockArray[GetSkillIdByAttributeId(attributeid) + 1] == 1))
SetAttributeBaseValue(who, attributeid, Cint(ev.base));
endif
endif
endif
if(GetAttributeBaseValue(who, attributeid) > 1000)
priorValue := 1000;
SetAttributeBaseValue(who, attributeid, 1000);
endif
var skillarray := GetObjProperty(who,"SkillArray");
var skilltotal := 0;
var skillval := 0;
var check := 0;
var loops := 0;
var holder, newval, final;
var base, mods, true;
while(check == 0)
if(loops >= 6)
if (priorValue < GetAttributeBaseValue(who, attributeid))
SetAttributeBaseValue(who, attributeid, priorValue);
endif
break;
endif
skilltotal := 0;
lowerholder := -1;
for (theId := 0; theID < SKILLID__HIGHEST; theID := theID + 1)
true := GetBaseSkillBaseValue(who, theID);
base := Cint(true - GetAttributeIntrinsicMod(who, GetAttributeIdBySkillId(theId)));
skilltotal := skilltotal + base;
if ( (base > 0) &&
(lockarray != error) &&
(lockarray[theId + 1] == 1) )
lowerholder := theId;
elseif (base > 0)
holder := theId;
endif
if ((lowerholder >= 0) && (skilltotal > CONST_SKILLCAP))
break;
endif
endfor
if (lowerholder >=0)
holder := lowerholder;
endif
if(skilltotal > CONST_SKILLCAP)
newval := GetBaseSkillBaseValue(who, holder);
final := (newval - 1);
SetBaseSkillBaseValue(who, holder, final);
else
check := 1;
endif
loops := loops + 1;
endwhile
return 1;
endfunction
|