Example #1
0
        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);
        }
Example #2
0
        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));
        }