It's a lot easier to use arrays....
example:
Code:
define SKILL_SLOT = skill99;
define EXTRA_SKILLS = 100;
define ENTITY_LIMIT = 100;
define SKILLARRAYSIZE = 10000; //EXTRA_SKILLS*ENTITY_LIMIT
var skills[SKILLARRAYSIZE];
var skillslots[ENTITY_LIMIT];
entity* tempSkillEnt;
function init_skills(ent)
{
tempSkillEnt = ent;
var i;
while(i<ENTITY_LIMIT)
{
if(!skillslots[i]){ tempSkillEnt.SKILL_SLOT = i; skillslots[i]=1; return(1); }
i+=1;
}
return(0); // no free slots!
}
function destroy_ent_skills(ent)
{
var i;
tempSkillEnt = ent;
skillslots[i]=1;
while(i<EXTRA_SKILLS)
{
skills[tempSkillEnt.SKILL_SLOT*EXTRA_SKILLS+i]=0;
i+=1;
}
tempSkillEnt.SKILL_SLOT = -1;
return(1);
}
// resets all skills (in event of level load!)
function destroy_all_skills()
{
var i;
while(i<ENTITY_LIMIT)
{
skillslots[i]=0;
i+=1;
}
while(i<SKILLARRAYSIZE)
{
skills[i]=0;
i+=1;
}
return(1);
}
function set_skill(ent,skillNum,value)
{
tempSkillEnt = ent;
if(tempSkillEnt.SKILL_SLOT==-1){return(0);}
skills[tempSkillEnt.SKILL_SLOT*EXTRA_SKILLS+skillNum]=value;
return(1);
}
function get_skill(ent,skillNum)
{
tempSkillEnt = ent;
if(tempSkillEnt.SKILL_SLOT==-1){return(0);}
return( skills[tempSkillEnt.SKILL_SLOT*EXTRA_SKILLS+skillNum] );
}
Example usage:
Code:
action my_extra_skills_entity
{
init_skills(my);
set_skill(my,50,100); //sets extra skill #50 to 100
get_skill(my,50); // returns 100
}
Untested, but should work.