Nekito Posted August 5, 2016 Share Posted August 5, 2016 Hello everyone I have been playing around with npcs spawning commands, their attitudes and spawntrees, and tried to implement a custom exec function to spawn an entity on horse, like the 'Rider' spawn case.Here is the code exec function spawnen(path : string, optional quantity : int, optional distance : float, optional isHostile : bool, optional wantimmortal : bool, optional level : int ) { var ent : CEntity; var horse : CEntity; var pos, cameraDir, player, posFin, normal, posTemp : Vector; var rot : EulerAngles; var i, sign : int; var s,r,x,y : float; var template : CEntityTemplate; var horseTemplate : CEntityTemplate; var horseTag : array<name>; var resourcePath : string; var l_aiTree : CAIHorseDoNothingAction; var templateCSV : C2dArray; quantity = Max(quantity, 1); rot = thePlayer.GetWorldRotation(); rot.Yaw += 180; cameraDir = theCamera.GetCameraDirection(); if( distance == 0 ) distance = 3; cameraDir.X *= distance; cameraDir.Y *= distance; player = thePlayer.GetWorldPosition(); pos = cameraDir + player; pos.Z = player.Z; posFin.Z = pos.Z; s = quantity / 0.2; r = SqrtF(s/Pi()); template = (CEntityTemplate)LoadResource(path,true); if ( path == "quests\sidequests\novigrad\quest_files\sq312_ves\characters\sq312_commando_melee_rider.w2ent" ) horseTemplate = (CEntityTemplate)LoadResource('horse'); for(i=0; i<quantity; i+=1) { x = RandF() * r; y = RandF() * (r - x); if(RandRange(2)) sign = 1; else sign = -1; posFin.X = pos.X + sign * x; if(RandRange(2)) sign = 1; else sign = -1; posFin.Y = pos.Y + sign * y; if(theGame.GetWorld().StaticTrace( posFin + Vector(0,0,5), posFin - Vector(0,0,5), posTemp, normal )) { posFin = posTemp; } ent = theGame.CreateEntity(template, posFin, rot, true, false, false, PM_Persist ); if ( horseTemplate ) { horseTag.PushBack('enemy_horse'); horse = theGame.CreateEntity(horseTemplate, posFin, rot,true,false,false,PM_DontPersist,horseTag); l_aiTree = new CAIHorseDoNothingAction in ent; l_aiTree.OnCreated(); ((CActor)ent).ForceAIBehavior( l_aiTree, BTAP_AboveEmergency2, 'AI_Rider_Load_Forced' ); ((CActor)ent).SignalGameplayEventParamInt( 'RidingManagerMountHorse', MT_instant | MT_fromScript ); } if( isHostile ) { ((CActor)ent).SetTemporaryAttitudeGroup( 'monsters', AGP_Default ); } if( wantimmortal ) { ((CActor)ent).SetImmortalityMode(AIM_Immortal, AIC_Default); } else { ((CActor)ent).ForceVulnerable(); } if ( level != 0 ) { ((CNewNPC)ent).SetLevel( level ); } } } Unfortunately, it just spawns a horse and an npc nearby. It must be something to do with AIBehaviour line If anyone has any ideas, please let me know Link to comment Share on other sites More sharing options...
Recommended Posts