Attention tel qu'utilisé CopyObject ne marchera que s'il existe déjà un objet de tag "Tag_NPC" dans le module.
Pour créer dynamiquement un objet (créature, plaçable, effet, ...) avec CreateObject, il faut définir d'abord un
blueprint. Il suffit de copier un blueprint existant et de le modifier à sa guise pour les propriétés et si besoin attacher des scripts dans le blueprint.
Ensuite on passe dans le paramètre
sTemplate de la fonction CreateObject le ResRef du blueprint.
En effet CreateObject cherche dans les blueprints, s'il n'y a pas de blueprint correspondant CreateObject ne fait rien.
Voilà un exemple de spawn dynamique d'ennemis tiré d'une célèbre campagne
. On crée autant d'ennemis qu'il y a de points d'apparition
portant le même tag posés sur la map. Ici on a deux blueprints, un pour les vampires masculins et un pour les vampires féminins de ResRef "vampire_m" et "vampire_s". On les associe au points de spawn correspondants "WPS_vampire_m" et "WPS_vampire_f".
Dans l'exemple le tag des créatures créées est posé dynamiquement.
// spawn some opposition in the temple
void SpawnAt(string sResRef, string sWP)
{
int n = 0;
object oWP = GetObjectByTag(sWP);
while (GetIsObjectValid(oWP))
{
CreateObject(OBJECT_TYPE_CREATURE, sResRef, GetLocation(oWP), FALSE, "enemy_temple");
n++;
oWP = GetObjectByTag(sWP, n);
}
}
void main()
{
SpawnAt("vampire_m", "WPS_vampire_m");
SpawnAt("vampire_f", "WPS_vampire_f");
}