Bonjour,
Pas trop eu le temps de hanter les forums ces derniers temps.
Globalement la réponse est oui, création dans l'éditeur puis appel de scripts associés au roster généralement depuis une conversation pour les recruter.
Dans l'éditeur bien prévoir d'associer les scripts de type henchman ou compagnon (importer les propriétés)
Le plus simple est le mode henchman. Un henchman suit et combat mais ne peut être contrôlé par le joueur. Par ailleurs un henchman n'existe que dans un module et ne peut pas passer d'un module à l'autre dans une campagne.
Le script standard a appeler dans la conversation de recrutement est
ga_henchman_add. Pour le faire sortir du groupe on peut utiliser ga_henchman_remove.
Un compagnon contrôlable par le joueur et passe d'un module à l'autre dans une campagne, comme Khelgar dans la campagne officielle.
Il y a une série de script standards à appeler dans la conversation de recrutement, il te faudra trouver un tuto ou reprendre un des miens qui s'occupe de tout. Il est générique pour une campagne solo et contient deux paramètres :
- sRosterName : son futur nom dans le roster que je prends égal à son tag. Je recommande d'avoir toujours rostername = tag = ressource avec un nom ne comportant que des lettres minuscules.
- nCampaignNPC : son numéro de compagnon dans la campagne en partant de 0 pour le premier compagnon.
Il suffit d'appeler ce script dans la conversation de recrutement. Le script prend en charge toutes les instructions nécessaires à passer, donne au compagnon le même niveau XP que le PJ et rend tout son inventaire identifié et fait entrer le compagnon dans le groupe.
Note : il ne se préoccupe pas du nombre de compagnons à un instant t. A gérer par ailleurs si nécessaire. Script prévu pour une campagne solo.
// add a new companion
void MakeIdentified(int nSlot, object oC)
{
object oItem = GetItemInSlot(nSlot, oC);
if (GetIsObjectValid(oItem)) SetIdentified(oItem, 1);
}
void main(string sRosterName, int nCampaignNPC)
{
object oNPC = GetObjectByTag(sRosterName);
object oPC = GetFirstPC();
ChangeToStandardFaction(oNPC, STANDARD_FACTION_DEFENDER);
AddRosterMemberByCharacter(sRosterName, oNPC);
SetIsRosterMemberSelectable(sRosterName, TRUE);
int nXP = GetXP(oPC);
if (GetXP(oNPC) < nXP) GiveXPToCreature(oNPC, nXP);
ForceRest(oNPC);
AddRosterMemberToParty(sRosterName, oPC);
SetIsRosterMemberCampaignNPC(sRosterName, nCampaignNPC);
// make the inventory identified
object oItem = GetFirstItemInInventory(oNPC);
while (GetIsObjectValid(oItem))
{
SetIdentified(oItem,1);
oItem = GetNextItemInInventory(oNPC);
}
int n;
for (n = 0; n < NUM_INVENTORY_SLOTS; n++) MakeIdentified(n, oNPC);
}