public Doodad Create(uint bcId, uint id, Character character) { if (!_templates.ContainsKey(id)) { return(null); } var template = _templates[id]; var doodad = new Doodad(); doodad.ObjId = bcId > 0 ? bcId : ObjectIdManager.Instance.GetNextId(); doodad.TemplateId = template.Id; doodad.Template = template; doodad.OwnerBcId = character?.ObjId ?? 0; doodad.OwnerId = character?.Id ?? 0; doodad.FuncGroupId = doodad.GetGroupId(); // TODO look, using doodadFuncId return(doodad); }
public void Create(Character owner, SkillItem skillData) { var activeSlaveInfo = GetActiveSlaveByOwnerObjId(owner.ObjId); if (activeSlaveInfo != null) { // TODO - IF TO FAR AWAY DONT DELETE Delete(owner, activeSlaveInfo.ObjId); return; } var item = owner.Inventory.GetItem(skillData.ItemId); if (item == null) { return; } var itemTemplate = (SummonSlaveTemplate)ItemManager.Instance.GetTemplate(item.TemplateId); if (itemTemplate == null) { return; } var slaveTemplate = GetSlaveTemplate(itemTemplate.SlaveId); if (slaveTemplate == null) { return; } var tlId = (ushort)TlIdManager.Instance.GetNextId(); var objId = ObjectIdManager.Instance.GetNextId(); // TODO owner.SendPacket(new SCSlaveCreatedPacket(owner.ObjId, tlId, objId, false, 0, owner.Name)); var template = new Slave { TlId = tlId, ObjId = objId, TemplateId = slaveTemplate.Id, Position = owner.Position.Clone(), Name = slaveTemplate.Name, Level = (byte)slaveTemplate.Level, ModelId = slaveTemplate.ModelId, Template = slaveTemplate, Hp = 100000000, Mp = 10000, ModelParams = new UnitCustomModelParams(), Faction = owner.Faction, Id = 10 // TODO }; template.Position.X += 5.0f; template.Position.Y += 5.0f; template.Spawn(); owner.SendPacket(new SCSlaveStatePacket(objId, tlId, owner.Name, owner.Id, template.Id)); // TODO - DOODAD SERVER SIDE foreach (var doodadBinding in template.Template.DoodadBindings) { var doodad = new Doodad { ObjId = ObjectIdManager.Instance.GetNextId(), TemplateId = doodadBinding.DoodadId, OwnerObjId = owner.ObjId, ParentObjId = template.ObjId, AttachPoint = (byte)doodadBinding.AttachPointId, Position = new Point(0f, 3.204f, 12588.96f, 0, 0, 0), OwnerId = owner.Id, PlantTime = DateTime.Now, OwnerType = DoodadOwnerType.Slave, DbId = template.Id, Template = DoodadManager.Instance.GetTemplate(doodadBinding.DoodadId), Data = (byte)doodadBinding.AttachPointId }; doodad.SetScale(doodadBinding.Scale); doodad.FuncGroupId = doodad.GetGroupId(); owner.SendPacket(new SCDoodadCreatedPacket(doodad)); } _activeSlaves.Add(owner.ObjId, template); owner.SendPacket(new SCMySlavePacket(template.ObjId, template.TlId, template.Name, template.TemplateId, template.Hp, template.Mp, template.Position.X, template.Position.Y, template.Position.Z)); }