Dear forum users! In compliance with the new European GDPR regulations, we'd just like to inform you that if you have an account, your email address is stored in our database. We do not share your information with third parties, and your email address and password are encrypted for security reasons.

New to the forum? Say hello in this topic! Also make sure to read the 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.
Post Reply
User avatar
Gurt
Lead Programmer
Lead Programmer
Posts: 1884
Joined: Sun Feb 28, 2016 3:22 pm
Title: Lead programmer
Started SFD: Made it!
Location: Sweden
Gender:
Age: 34

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

Post Reply