Właśnie opatentowałem coś, co w łatwy sposób załatwia problem ograniczonej liczby aivarów. Zastosowań pakietu PermMem jest cała masa, i to co chcemy zrobić jest zależne tylko od naszej wyobraźni (i rozumu). Dla tego znalazłem już kilka zastosowań, między innymi mikstury o czasowym efekcie, działające także na npc oraz bardzo rozbudowany system trucizn. Do wyboru do koloru. Więcej wyjaśnię później, jeśli ktoś ma jakieś pytania.
const int MAX_ADDITIONAL_AIVARS = 20; //można więcej
const int AIV_AivarsData = 99;
class MoreAivars
{
var int aivar[MAX_ADDITIONAL_AIVARS];
};
instance MoreAivars@ (MoreAivars);
func void SetAdditionalAivar (var c_npc slf, var int offset, var int value)
{
if (!Hlp_IsValidHandle (MEM_ReadStatArr (slf.aivar, AIV_AivarsData)))
{
slf.aivar[AIV_AivarsData] = new (MoreAivars@);
};
MEM_WriteIntArray (getPtr (MEM_ReadStatArr (slf.aivar, AIV_AivarsData)), offset, value);
};
func int GetAdditionalAivar (var c_npc slf, var int offset)
{
if (Hlp_IsValidHandle (MEM_ReadStatArr (slf.aivar, AIV_AivarsData)))
{
return MEM_ReadIntArray (getPtr (MEM_ReadStatArr (slf.aivar, AIV_AivarsData)), offset);
};
};
func void ClearAdditionalAivars (var c_npc slf)
{
if (Hlp_IsValidHandle (MEM_ReadStatArr (slf.aivar, AIV_AivarsData)))
{
var int i; i = 0;
var int pos; pos = MEM_StackPos.position;
if (i < MAX_ADDITIONAL_AIVARS)
{
SetAdditionalAivar (slf, i, 0);
i += 1;
MEM_StackPos.position = pos;
};
};
};