Talk:CreateFullActorCopy
Revision as of 11:58, 6 July 2006 by imported>ShadowDancer (Why create this?)
Dragoon Wraith TALK 13:20, 5 July 2006 (EDT): Does this simply create a new Reference to the same Object, or does this create a new Object that is a duplicate of the original? (i.e. if I use Object-changing function on a copy, will it affect the original)
Also, anyone know a good way to copy over the factions and things that the base has, to create a true duplicate?
- ShadowDancer 10:32, 6 July 2006 (EDT): Well short of writing a script that goes through all of the factions and does a GetInFaction & GetFactionRank/SetFactionRank on the CreateActorFullCopy I can't think of an easy way to do it. Interestingly enough, while the CreateFullActorCopy may not have AI Packages, they do have the combat packages and spells hardcoded into the specified actor. Leaving out that one tab on the actor is a bit odd if you ask me, though I suppose it had to do with what they thought they were doing when they made the game. If you need the dialogue, I haven't a clue as to how you would add that onto a copy since I don't see how you could find out the packages that the actor originally had.
- Additionally, as long as you get a reference variable to the copy, you can pretty much do whatever to the copy without affecting the original from what I found by experimentation with this. Changing the name doesnt affect the base copy or the original in the game from what I have seen (I created an activator to duplicate an NPC reference though). Mileage might vary in a spell script since scripts sometimes have odd effects for no apparent reason. I did a SetActorFullName and a RemoveAllItems on the copy with no effects on the original in the same room. It essentially creates a new reference to the base object minus the dialogue and AI functions from what I can tell. I still have no idea why it wipes those other than possible questing conflicts that the dialogue may cause when talking to two copies of the same actor.
ScriptName Duplicate Ref ActorRef Ref DoOnce Float Timer Begin OnActivate If IsActionRef Player == 1 Set ActorRef to PriorMaborelRef.CreateFullActorCopy ;Creates actor copy EndIf End Begin GameMode If Timer >= 10 && DoOnce == 0 ActorRef.RemoveAllItems ;Removes items only on copy ActorRef.SetActorFullName "Idiot Savant" ;Changes name only on copy Set DoOnce to 1 Else Set Timer to Timer + GetSecondsPassed EndIf End
- Design decision I suppose. When the copy has to be independent from the base (which is a very good thing) You either need a flag that determines whether to use the base or not and check for this flag in each command that modifies the base, or you simply create a copy that isn't linked to the base. GetIsID tests for the ID of the base-object and when the base object isn't the same, the dialogue won't apply.--JOG 12:40, 6 July 2006 (EDT)
- ShadowDancer 12:53, 6 July 2006 (EDT): Pretty much what I figured towards the end. Although then the question becomes why bother to make a way to copy an actor in the first place? Still, I hope that what I found out is of some use to Dragoon Wraith TALK.