public VMAvatar(GameObject obj) : base(obj) { Name = "Sim"; WorldUI = new AvatarComponent(); BodyStrings = Object.Resource.Get<STR>(Object.OBJ.BodyStringID); SetAvatarType(BodyStrings); SkinTone = AppearanceType.Light; var avatarc = (AvatarComponent)WorldUI; avatarc.Avatar = Avatar; for (int i = 0; i < 16; i++) { MotiveChanges[i] = new VMMotiveChange(); MotiveChanges[i].Motive = (VMMotive)i; } }
public void SetAvatarType(STR data) { if (data == null) { AvatarType = VMAvatarType.Adult; } else { var type = data.GetString(0); if (type == "adult") AvatarType = VMAvatarType.Adult; else if (type == "child") AvatarType = VMAvatarType.Child; else if (type == "cat") AvatarType = VMAvatarType.Cat; else if (type == "dog") AvatarType = VMAvatarType.Dog; } switch (AvatarType) { case VMAvatarType.Adult: Avatar = new SimAvatar(TSO.Content.Content.Get().AvatarSkeletons.Get("adult.skel")); Avatar.Head = TSO.Content.Content.Get().AvatarOutfits.Get("mah010_baldbeard01.oft"); //default to bob newbie, why not Avatar.Body = TSO.Content.Content.Get().AvatarOutfits.Get("mab002_slob.oft"); Avatar.Handgroup = Avatar.Body; break; case VMAvatarType.Cat: var skel = TSO.Content.Content.Get().AvatarSkeletons.Get("cat.skel"); Avatar = new SimAvatar(skel); Avatar.Body = TSO.Content.Content.Get().AvatarOutfits.Get("uaa002cat_calico.oft"); break; case VMAvatarType.Dog: Avatar = new SimAvatar(TSO.Content.Content.Get().AvatarSkeletons.Get("dog.skel")); Avatar.Body = TSO.Content.Content.Get().AvatarOutfits.Get("uaa012dog_scottish.oft"); //;) break; } }
public void SetAvatarBodyStrings(STR data, VMContext context) { if (data == null) return; try { var body = data.GetString(1); var randBody = data.GetString(9); if (randBody != "") { var bodySpl = randBody.Split(';'); BodyOutfit = Convert.ToUInt64(bodySpl[context.NextRandom((ulong)bodySpl.Length)], 16); } else if (body != "") { BodyOutfit = Convert.ToUInt64(body, 16); } var head = data.GetString(2); var randHead = data.GetString(10); if (randHead != "") { var headSpl = randHead.Split(';'); HeadOutfit = Convert.ToUInt64(headSpl[context.NextRandom((ulong)headSpl.Length)], 16); } else if (head != "") { HeadOutfit = Convert.ToUInt64(head, 16); } } catch { //head or body invalid, resort to default. } var gender = data.GetString(12); var genVar = (int)VMPersonDataVariable.Gender; if (gender.Equals("male", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 0; else if (gender.Equals("female", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 1; else if (gender.Equals("dogmale", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 8; else if (gender.Equals("dogfemale", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 9; else if (gender.Equals("catmale", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 16; else if (gender.Equals("catfemale", StringComparison.InvariantCultureIgnoreCase)) PersonData[genVar] = 17; var names = data.GetString(11); if (names != "") { var nameSpl = names.Split(';'); Name = nameSpl[context.NextRandom((ulong)nameSpl.Length)]; } PersonData[(int)VMPersonDataVariable.PersonsAge] = Convert.ToInt16(data.GetString(13)); var skinTone = data.GetString(14); if (skinTone.Equals("lgt", StringComparison.InvariantCultureIgnoreCase)) SkinTone = AppearanceType.Light; else if (skinTone.Equals("med", StringComparison.InvariantCultureIgnoreCase)) SkinTone = AppearanceType.Medium; else if (skinTone.Equals("drk", StringComparison.InvariantCultureIgnoreCase)) SkinTone = AppearanceType.Dark; }
public static void ShowDialog(VMStackFrame context, VMDialogStringsOperand operand, STR source) { string MessageBody = ParseDialogString(context, source.GetString(operand.MessageStringID - 1)); System.Diagnostics.Debug.Print(MessageBody); }
public static string ParseDialogString(VMStackFrame context, string input, STR source) { int state = 0; StringBuilder command = new StringBuilder(); StringBuilder output = new StringBuilder(); for (int i = 0; i < input.Length; i++) { if (state == 0) { if (input[i] == '$') { state = 1; //start parsing string command.Clear(); } else { output.Append(input[i]); } } else { command.Append(input[i]); if (i == input.Length - 1 || !CommandSubstrValid(command.ToString())) { if (i != input.Length - 1 || char.IsDigit(input[i])) { command.Remove(command.Length - 1, 1); i--; } var cmdString = command.ToString(); ushort[] values = new ushort[3]; if (cmdString.Length > 1 && cmdString[cmdString.Length - 1] == ':') { try { if (cmdString == "DynamicStringLocal:") { for (int j=0; j<3; j++) { char next = input[++i]; string num = ""; while (char.IsDigit(next)) { num += next; next = (++i == input.Length) ? '!': input[i]; } if (num == "") { values[j] = 65535; if (j == 1) values[2] = 65535; break; } values[j] = ushort.Parse(num); if (i == input.Length) break; } } else { char next = input[++i]; string num = ""; while (char.IsDigit(next)) { num += next; next = (++i == input.Length) ? '!' : input[i]; } values[0] = ushort.Parse(num); } i--; } catch (FormatException) { } } switch (cmdString) { case "Object": output.Append(context.StackObject.ToString()); break; case "Me": output.Append(context.Caller.ToString()); break; case "TempXL:": output.Append(VMMemory.GetBigVariable(context, scopes.VMVariableScope.TempXL, values[0]).ToString()); break; case "Temp:": output.Append(VMMemory.GetBigVariable(context, scopes.VMVariableScope.Temps, values[0]).ToString()); break; case "$": output.Append("$"); i--; break; case "Attribute:": output.Append(VMMemory.GetBigVariable(context, scopes.VMVariableScope.MyObjectAttributes, values[0]).ToString()); break; case "DynamicStringLocal:": STR res = null; if (values[2] != 65535 && values[1] != 65535) { VMEntity obj = context.VM.GetObjectById((short)context.Locals[values[2]]); if (obj == null) break; ushort tableID = (ushort)context.Locals[values[1]]; {//local if (obj.SemiGlobal != null) res = obj.SemiGlobal.Resource.Get<STR>(tableID); if (res == null) res = obj.Object.Resource.Get<STR>(tableID); if (res == null) res = context.Global.Resource.Get<STR>(tableID); } } else { res = source; } ushort index = (ushort)context.Locals[values[0]]; if (res != null) output.Append(res.GetString(index)); break; case "Local:": output.Append(VMMemory.GetBigVariable(context, scopes.VMVariableScope.Local, values[0]).ToString()); break; case "NameLocal:": output.Append("(NameLocal)"); break; default: output.Append(cmdString); break; } state = 0; } } } output.Replace("\r\n", "\r\n\r\n"); return output.ToString(); }
public static void ShowDialog(VMStackFrame context, VMDialogStringsOperand operand, STR source) { VMDialogInfo info = new VMDialogInfo { Caller = context.Caller, Icon = context.StackObject, Operand = operand, Message = ParseDialogString(context, source.GetString(operand.MessageStringID - 1), source), Title = (operand.TitleStringID == 0) ? "" : ParseDialogString(context, source.GetString(operand.TitleStringID - 1), source), IconName = (operand.IconNameStringID == 0) ? "" : ParseDialogString(context, source.GetString(operand.IconNameStringID - 1), source), Yes = (operand.YesStringID == 0) ? "Yes" : ParseDialogString(context, source.GetString(operand.YesStringID - 1), source), }; context.VM.SignalDialog(info); }