- Site Map >
- Modding and Creation >
- Sims 3 Creation >
- Modding Discussion >
- Imaginary friend invisibility
- Site Map >
- Modding and Creation >
- Sims 3 Creation >
- Modding Discussion >
- Imaginary friend invisibility
Replies: 0 (Who?), Viewed: 1931 times.
#1
22nd Jan 2024 at 8:27 PM
Posts: 197
Thanks: 2022 in 7 Posts
Imaginary friend invisibility
Well hello there!I am making a moodlet that is intended to make the sim having it become invisible to everyone except the sim who gave them the moodlet. I am also making it so they are unable to socialize with anyone else.
The moodlet appears in game correctly, so that's not an issue, but the sim never becomes invisible when switching sims and they can still socialize with whomever they want.
I am not sure where to go from here as I have tried a lot of things, so if anyone else has an idea, it would be very much appreciated.
The moodlet:
Code:
public class BuffIAmHallucinationMoodlet : Buff { public class BuffInstanceIAmHallucinationMoodlet : BuffInstance { public Sim mSim; public ulong SimDescID; public SimDescription mSimDescription; public Sim controllingFriend; public EventListener mOnSelectedSimChangedListener; public Sim ControllingFriend { get { return controllingFriend; } set { controllingFriend = value; } } public BuffInstanceIAmHallucinationMoodlet() { } public BuffInstanceIAmHallucinationMoodlet(Buff buff, BuffNames buffGuid, int effectValue, float timeoutCount) : base(buff, buffGuid, effectValue, timeoutCount) { } public override BuffInstance Clone() { BuffInstanceIAmHallucinationMoodlet buffInstanceIAmHallucinationMoodlet = new BuffInstanceIAmHallucinationMoodlet(base.mBuff, base.mBuffGuid, base.mEffectValue, base.mTimeoutCount); buffInstanceIAmHallucinationMoodlet.mSim = mSim; return buffInstanceIAmHallucinationMoodlet; } public bool CanSocializeWith(Sim otherSim) { if (otherSim == null) { return true; } SimDescription simDescription = otherSim.SimDescription; if (simDescription == mSimDescription) { return true; } if (simDescription.SimDescriptionId == SimDescID) { return true; } return false; } public ListenerAction OnSelectedSimChanged(Event e) { RefreshVisibility(false); return ListenerAction.Keep; } public bool RefreshVisibility(bool immediate) { if (mSimDescription == null) { return false; } Sim createdSim = mSimDescription.mSim; if (createdSim == null) { return false; } bool flag = false; if (!mSim.BuffManager.HasElement((BuffNames)(0xA348C41FEA93A9C5))) { flag = true; } else { Sim selectedActor = PlumbBob.SelectedActor; SimDescription simDescription = (selectedActor == null) ? null : selectedActor.SimDescription; if (simDescription != null && (simDescription.SimDescriptionId == SimDescID || selectedActor == createdSim)) { flag = true; } } float fadeTime = immediate ? 0f : GameObject.kGlobalObjectFadeTime; if (flag) { createdSim.FadeIn(false, fadeTime); } else { createdSim.FadeOut(false, false, fadeTime); } Audio.MuteAllSounds(createdSim.ObjectId, !flag); return flag; } public void SetupSimHandlers() { SetupSimHandlers(); if (mSim.BuffManager.HasElement((BuffNames)(0xA348C41FEA93A9C5))) { if (mOnSelectedSimChangedListener == null || !EventTracker.ContainsListener(mOnSelectedSimChangedListener)) { mOnSelectedSimChangedListener = EventTracker.AddListener(EventTypeId.kEventSimSelected, OnSelectedSimChanged); } } } public override void Dispose(BuffManager bm) { if (TransparencyAlarm != AlarmHandle.kInvalidHandle) { mSim.RemoveAlarm(TransparencyAlarm); TransparencyAlarm = AlarmHandle.kInvalidHandle; } } } private const ulong kBuffIAmHallucinationsMoodletGuid = 0xA348C41FEA93A9C5; public static ulong StaticGuid { get { return 0xA348C41FEA93A9C5; } } public BuffIAmHallucinationMoodlet(BuffData info) : base(info) { } public override BuffInstance CreateBuffInstance() { return new BuffInstanceIAmHallucinationMoodlet(this, base.BuffGuid, base.EffectValue, base.TimeoutSimMinutes); } public override void OnAddition(BuffManager bm, BuffInstance bi, bool travelReaddition) { Sim Actor = bm.Actor; BuffInstanceIAmHallucinationMoodlet obj = bi as BuffInstanceIAmHallucinationMoodlet; obj.mSim = bm.Actor; Sim controllingFriend = obj.ControllingFriend; obj.RefreshVisibility(true); obj.CanSocializeWith(obj.controllingFriend); base.OnAddition(bm, bi, travelReaddition); } public override void OnRemoval(BuffManager bm, BuffInstance bi) { Sim Actor = bm.Actor; BuffInstanceIAmHallucinationMoodlet obj = bi as BuffInstanceIAmHallucinationMoodlet; obj.mSim = bm.Actor; (bi as BuffInstanceIAmHallucinationMoodlet).Dispose(bm); bi.Dispose(bm); } public override void OnTimeout(BuffManager bm, BuffInstance bi, OnTimeoutReasons reason) { Sim Actor = bm.Actor; BuffInstanceIAmHallucinationMoodlet obj = bi as BuffInstanceIAmHallucinationMoodlet; obj.mSim = bm.Actor; (bi as BuffInstanceIAmHallucinationMoodlet).Dispose(bm); bi.Dispose(bm); } public override bool ShouldAdd(BuffManager bm, MoodAxis axisEffected, int moodValue) { Sim Actor = bm.Actor; if (!Actor.SimDescription.IsHuman) { return false; } return true; } }
The sim description of the sim who gave them the moodlet gets stored in an interaction like this
Code:
base.Target.BuffManager.AddElement((BuffNames)(0xA348C41FEA93A9C5), Origin.None); BuffIAmHallucinationMoodlet.BuffInstanceIAmHallucinationMoodlet obj = base.Target.BuffManager.GetElement((BuffNames)(0xA348C41FEA93A9C5)) as BuffIAmHallucinationMoodlet.BuffInstanceIAmHallucinationMoodlet; obj.SimDescID = base.Actor.SimDescription.SimDescriptionId;
Who Posted
|