public void AddEquip(int itemId, BodyDrawInfo drawInfo) { if (itemId <= 0) { return; } var cloth = GameUtil.GetCloth(itemId, drawInfo); _clothes[cloth.EqSlot] = cloth; }
public Hair(int hairId, BodyDrawInfo drawInfo) { _stances = new Dictionary <Stance.Id, Dictionary <Layer, Dictionary <short, TextureD> > >(); var hairNode = (WzImage)Wz.Character["hair"][$"000{hairId}.img"]; foreach (var keyValuePair in Stance.Names) { var stanceName = keyValuePair.Value; var stance = keyValuePair.Key; var stanceNode = hairNode[stanceName]; if (stanceNode == null) { continue; } for (short frame = 0; frame < stanceNode.WzProperties.Count; frame++) { var frameNode = stanceNode.WzProperties[frame]; foreach (var layerNode0 in frameNode.WzProperties) { var layerNode = layerNode0.GetByUol(); var layerName = layerNode.Name; if (!LayersByName.ContainsKey(layerName)) { continue; } var layer = (Layer)LayersByName[layerName]; if (layerName.Equals("hairShade")) { layerNode = layerNode["0"]; } var brow = ((WzVectorProperty)layerNode["map"]["brow"]).Pos(); var shift = drawInfo.GetHairPosition(stance, frame) - brow; if (!_stances.ContainsKey(stance)) { _stances[stance] = new Dictionary <Layer, Dictionary <short, TextureD> >(); } if (!_stances[stance].ContainsKey(layer)) { _stances[stance][layer] = new Dictionary <short, TextureD>(); } _stances[stance][layer][frame] = new TextureD(layerNode).Shift(shift); } } } name = (string)Wz.String["Eqp.img"]["Eqp"]["Hair"][$"{hairId}"]["name"].WzValue; var args = new[] { "黑色", "红色", "橘黄色", "金色", "绿色", "蓝色", "紫罗兰色", "棕色" }; color = hairId % 10 < args.Length ? args[hairId % 10] : ""; }
public Clothing(int id, BodyDrawInfo drawInfo) { _stances = new Dictionary <Stance.Id, Dictionary <Layer, Dictionary <Short, TextureD> > >(); ItemId = id; var equipData = GameUtil.GetEquipData(ItemId); EqSlot = equipData.EqSlot; TwoHanded = EqSlot == EquipSlot.Id.Weapon && new WeaponData(ItemId).TwoHanded; const int noneWeaponTypes = 15; const int weaponOffset = noneWeaponTypes + 15; const int weaponTypes = 20; var index = (ItemId / 10000) - 100; Layer chLayer; if (index < noneWeaponTypes) { chLayer = _layers[index]; } else if (index >= weaponOffset && index < weaponOffset + weaponTypes) { chLayer = Layer.Weapon; } else { chLayer = Layer.Cape; } var strId = $"0{ItemId}"; var category = equipData.ItemData.category; var src = (WzImage)Wz.Character[category][$"{strId}.img"]; var info = (WzSubProperty)src["info"]; VsLot = info.GetString("vslot"); switch ((int)info["stand"]) { case 1: Stand = Stance.Id.Stand1; break; case 2: Stand = Stance.Id.Stand2; break; default: Stand = TwoHanded ? Stance.Id.Stand2 : Stance.Id.Stand1; break; } switch ((int)info["walk"]) { case 1: Walk = Stance.Id.Walk1; break; case 2: Walk = Stance.Id.Walk2; break; default: Walk = TwoHanded ? Stance.Id.Walk2 : Stance.Id.Walk1; break; } foreach (var iter in Stance.Names) { var stanceName = iter.Value; var stance = iter.Key; var stanceNode = src[stanceName]; if (stanceNode == null) { continue; } for (short frame = 0; frame < stanceNode.WzProperties.Count; frame++) { var frameNode = (WzSubProperty)stanceNode[$"{frame}"].GetByUol(); foreach (var partNode0 in frameNode.WzProperties) { if (partNode0.GetByUol() is WzCanvasProperty) { var partNode = (WzCanvasProperty)partNode0.GetByUol(); var part = partNode.Name; var z = chLayer; var zs = partNode.GetString("z"); if (part.Equals("mailArm")) { z = Layer.MailArm; } else { if (SubLayerNames.ContainsKey(zs)) { z = SubLayerNames[zs]; } } var parent = ""; var parentPos = new Vector2(); foreach (var mapNode0 in partNode["map"].WzProperties) { var mapNode = mapNode0.GetByUol(); if (mapNode is WzVectorProperty) { parent = mapNode.Name; parentPos = ((WzVectorProperty)mapNode).Pos(); } } var shift = new Vector2(); switch (EqSlot) { case EquipSlot.Id.Face: shift -= parentPos; break; case EquipSlot.Id.Shoes: case EquipSlot.Id.Gloves: case EquipSlot.Id.Top: case EquipSlot.Id.Bottom: case EquipSlot.Id.Cape: shift = drawInfo.GetBodyPosition(stance, frame) - parentPos; break; case EquipSlot.Id.Hat: case EquipSlot.Id.EarAcc: case EquipSlot.Id.EyeAcc: shift = drawInfo.GetFacePosition(stance, frame) - parentPos; break; case EquipSlot.Id.Shield: case EquipSlot.Id.Weapon: if (parent.Equals("handMove")) { shift += drawInfo.GetHeadPosition(stance, frame); } else if (parent.Equals("hand")) { shift += drawInfo.GetArmPosition(stance, frame); } else if (parent.Equals("navel")) { shift += drawInfo.GetBodyPosition(stance, frame); } shift -= parentPos; break; } if (!_stances.ContainsKey(stance)) { _stances[stance] = new Dictionary <Layer, Dictionary <Short, TextureD> >(); } if (!_stances[stance].ContainsKey(z)) { _stances[stance][z] = new Dictionary <Short, TextureD>(); } _stances[stance][z][new Short(frame)] = new TextureD(partNode).Shift(shift); } } } } var transParents = new HashSet <int>() { 1002186 }; TransParent = transParents.Contains(ItemId); }
public Body(int skin, BodyDrawInfo drawInfo) { _stances = new Dictionary <Stance.Id, Dictionary <Layer, Dictionary <short, TextureD> > >(); var strId = skin.ToString().PadLeft(2, '0'); var bodyNode = (WzImage)Wz.Character[$"000020{strId}.img"]; var headNode = (WzImage)Wz.Character[$"000120{strId}.img"]; foreach (var keyValuePair in Stance.Names) { var stanceName = keyValuePair.Value; var stance = keyValuePair.Key; var stanceNode = bodyNode[stanceName]; if (stanceNode == null) { continue; } for (short frame = 0; frame < stanceNode.WzProperties.Count; frame++) { var frameNode = stanceNode.WzProperties[frame]; foreach (var partNode0 in frameNode.WzProperties) { var partNode = partNode0.GetByUol(); if (!(partNode is WzCanvasProperty)) { continue; } var z = ((WzStringProperty)partNode["z"]).Value; var layer = LayerByName(z); if (layer == Layer.None) { continue; } Vector2 shift; var wzMap = partNode["map"]; switch (layer) { case Layer.HandBelowWeapon: shift = drawInfo.GetHandPosition(stance, frame); shift -= ((WzVectorProperty)wzMap["handMove"])?.Pos() ?? new Vector2(); break; default: shift = drawInfo.GetBodyPosition(stance, frame); shift -= ((WzVectorProperty)wzMap["navel"])?.Pos() ?? new Vector2(); break; } if (!_stances.ContainsKey(stance)) { _stances[stance] = new Dictionary <Layer, Dictionary <short, TextureD> >(); } if (!_stances[stance].ContainsKey(layer)) { _stances[stance][layer] = new Dictionary <short, TextureD>(); } _stances[stance][layer][frame] = new TextureD(partNode).Shift(shift); } WzObject headSfNode0 = headNode[stanceName]?[frame.ToString()]["head"]; if (headSfNode0 == null) { continue; } var headSfNode = headSfNode0.GetByUol(); var shift2 = drawInfo.GetHeadPosition(stance, frame); if (!_stances.ContainsKey(stance)) { _stances[stance] = new Dictionary <Layer, Dictionary <short, TextureD> >(); } if (!_stances[stance].ContainsKey(Layer.Head)) { _stances[stance][Layer.Head] = new Dictionary <short, TextureD>(); } _stances[stance][Layer.Head][frame] = new TextureD(headSfNode).Shift(shift2); } } var args = new[] { "Light", "Tan", "Dark", "Pale", "Blue", "Green", "", "", "", "Grey", "Pink", "Red" }; _name = skin < args.Length ? args[skin] : ""; }