Might be because you're passing no pet type? That or your monster isn't setup correctly.
That's how I setup my summoning skill function:
Code: Select all
int __fastcall SKILLSRVDOFUNC_SummonPet(D2GameStrc* pGame, D2UnitStrc* pUnit, int nSkill, int nSkillLevel)
{
if (!pGame || !pUnit || pUnit->dwType != UNIT_PLAYER) return 0;
D2SkillsTXT* pSkillRecord = TXT_GetSkillsRecord(nSkill);
D2SkillsDataTXT* pSkillDataRecord = TXT_GetSkillsDataRecord(nSkill);
if (!pSkillRecord || !pSkillDataRecord) return 0;
pUnit->dwFlags |= UNITFLAG_SKSRVDOFUNC;
int nMinions = pSkillRecord->dwParam[0];
int nMaxMinions = D2COMMON_EvalSkillCalc(pUnit, pSkillRecord->dwPetMax, nSkill, nSkillLevel);
int nDuration = D2COMMON_EvalSkillCalc(pUnit, pSkillRecord->dwAuraLenCalc, nSkill, nSkillLevel);
D2SummonStrc Summon = {};
Summon.pOwner = pUnit;
Summon.nHcIdx = pSkillRecord->nSummon;
Summon.nMonMode = pSkillRecord->nSummMode;
Summon.nPetType = pSkillRecord->nPetType;
Summon.nPetMax = nMaxMinions;
if (nMinions > nMaxMinions) nMinions = nMaxMinions;
for (int i = 0; i < nMinions; i++)
{
D2UnitStrc* pMinion = D2GAME_CreateSummon(pGame, &Summon);
if (!pMinion) continue;
D2StatListStrc* pStatList = SUMMONS_CreateStatList(pGame, pMinion, nSkill, nSkillLevel);
if (!pStatList) continue;
SUMMONS_AssignStats(pUnit, pMinion, pStatList);
SUMMONS_AssignBaseStats(pUnit, pMinion, pStatList);
SUMMONS_AssignSkills(pUnit, pMinion, pStatList);
if (pSkillRecord->dwParam[1])
{
pMinion->pMonsterData->pAiControl->dwAiParam[0] = 1;
pMinion->pMonsterData->pAiControl->dwAiParam[1] = 0;
D2COMMON_AssignSkill(pMinion, pSkillRecord->nSummSkill[0], D2COMMON_EvalSkillCalc(pUnit, pSkillRecord->dwSummSkCalc[0], nSkill, nSkillLevel), 1, __FILE__, __LINE__);
}
if (nDuration > 0)
{
D2GAME_InitTimer(pGame, pMinion, UNITEVENTCALLBACK_QUESTCALLBACK, pGame->dwGameFrame + nDuration, 0, 0, 0);
MONUMODS_AssignMod(pGame, pMinion, MONUMOD_TEMPSUMMON, 0);
}
if (pSkillRecord->nSummUMod)
{
MONUMODS_AssignMod(pGame, pMinion, pSkillRecord->nSummUMod, 0);
}
D2GAME_UpdatePetAI(pGame, pMinion, pUnit->dwTargetGUID, 0);
}
return 1;
}