This forum is locked and will eventually go offline. If you have feedback to share you can find us in our Discord channel "MythoLogic Interactive" https://discord.gg/nECKnbT7gk

Forum rules

Scripting 18 - Change player outfit

A smaller forum with a few tutorials how to get started with the ScriptAPI.
Forum rules
By using the forum you agree to the following rules.
Locked
User avatar
Gurt
Lead Programmer
Lead Programmer
Posts: 1887
Joined: Sun Feb 28, 2016 3:22 pm
Title: Lead programmer
Started SFD: Made it!
Location: Sweden
Gender:
Age: 36

Scripting 18 - Change player outfit

Post by Gurt » Sun Aug 25, 2019 10:08 am

Scripting 18 - Change player outfit

Scripting in SFD assumes you have a fair knowledge of C#.

The following code demonstrates how to randomize a player's outfit when pressing a button. Available after v.1.3.1b.

Code: Select all

static Random RND = new Random();

public void ButtonPressed(TriggerArgs args)
{
	if (args.Sender is IPlayer) 
	{
		IPlayer plr = (IPlayer)args.Sender;
		IProfile profile = plr.GetProfile();
		profile.ChestUnder = GetRandomItem(Game.GetClothingItemNamesHands(profile.Gender));
		profile.Legs = GetRandomItem(Game.GetClothingItemNamesLegs(profile.Gender));
		profile.Waist = GetRandomItem(Game.GetClothingItemNamesWaist(profile.Gender));
		profile.Feet = GetRandomItem(Game.GetClothingItemNamesFeet(profile.Gender));
		profile.ChestOver = GetRandomItem(Game.GetClothingItemNamesChestOver(profile.Gender));
		profile.Accessory = GetRandomItem(Game.GetClothingItemNamesAccessory(profile.Gender));
		profile.Hands = GetRandomItem(Game.GetClothingItemNamesHands(profile.Gender));
		profile.Head = GetRandomItem(Game.GetClothingItemNamesHead(profile.Gender));
		plr.SetProfile(profile);
	}
}

public IProfileClothingItem GetRandomItem(string[] items)
{
	// a 20 % chance for nothing
	if (RND.NextDouble() < 0.2f || items.Length == 0)
	{
		return null;
	}
	string itemName = items[RND.Next(0, items.Length)];
	string colorPalette = Game.GetClothingItemColorPaletteName(itemName);
	ColorPalette cp = Game.GetColorPalette(colorPalette);
	string colorA = "", colorB = "", colorC = "";
	if (cp != null) {
		colorA = (cp.PrimaryColorPackages != null && cp.PrimaryColorPackages.Length > 0 ? cp.PrimaryColorPackages[RND.Next(0, cp.PrimaryColorPackages.Length)] : "");
		colorB = (cp.SecondaryColorPackages != null && cp.SecondaryColorPackages.Length > 0 ? cp.SecondaryColorPackages[RND.Next(0, cp.SecondaryColorPackages.Length)] : "");
		colorC = (cp.TertiaryColorPackages != null && cp.TertiaryColorPackages.Length > 0 ? cp.TertiaryColorPackages[RND.Next(0, cp.TertiaryColorPackages.Length)] : "");
	}
	return new IProfileClothingItem(itemName, colorA, colorB, colorC);
}

You can also get a profile directly from an IObjectPlayerProfileInfo tile in your map.

Code: Select all

		IObjectPlayerProfileInfo prof = Game.GetObject<IObjectPlayerProfileInfo>("ProfileA");
		if (prof != null) {
			plr.SetProfile(prof.GetProfile());
		}

1 x
Gurt

Locked