Example #1
0
    public static List <string> BuildPlayerSimplePreloadAssets(PMatchProcessInfo info, List <string> assets = null)
    {
        if (assets == null)
        {
            assets = new List <string>();
        }

        // Player model
        var model = ConfigManager.Get <CreatureInfo>(info.roleProto);

        if (model)
        {
            assets.AddRange(model.models);
        }

        var w = WeaponInfo.GetWeapon(0, info.fashion.weapon);

        // Player weapons
        BuildWeaponSimplePreloadAssets(info.roleProto, info.gender, w.weaponID, w.weaponItemId, assets);

        // Equipments
        assets.AddRange(CharacterEquip.GetEquipAssets(info.fashion));

        return(assets);
    }
Example #2
0
    public static List <string> BuildWeaponPreloadAssets(int proto, int gender, int weaponID, int weaponItemID = -1, int offWeaponID = -1, int offWeaponItemID = -1, List <string> assets = null, bool player = false)
    {
        if (assets == null)
        {
            assets = new List <string>();
        }

        assets.Add(Creature.GetAnimatorName(weaponID, gender));    // Animator

        var w = WeaponInfo.GetWeapon(weaponID, weaponItemID);      // Main-hand weapon models

        w.GetAllAssets(assets);

        assets.Add(WeaponInfo.GetVictoryAnimation(weaponID, gender));

        if (offWeaponID > -1)
        {
            w = WeaponInfo.GetWeapon(offWeaponID, offWeaponItemID);   // Off-hand weapon models
            w.GetAllAssets(assets);
        }

        // Collect all weapon assets
        StateMachineInfo.GetAllAssets(weaponID, offWeaponID, assets, proto, gender, weaponItemID, offWeaponItemID, player);

        return(assets);
    }
Example #3
0
    public static List <string> BuildPlayerSimplePreloadAssets(PRoleSummary info, List <string> assets = null)
    {
        if (assets == null)
        {
            assets = new List <string>();
        }

        // Player model
        var model = ConfigManager.Get <CreatureInfo>(info.proto);

        if (model)
        {
            assets.Add(model.models[0]);
        }

        var w = WeaponInfo.GetWeapon(0, info.fashion.weapon);

        // Player weapons
        BuildWeaponSimplePreloadAssets(info.proto, info.gender, w.weaponID, w.weaponItemId, assets);

        // Equipments
        assets.AddRange(CharacterEquip.GetEquipAssets(info.fashion));

        if (info.pet == null || info.pet.itemId == 0)
        {
            return(assets);
        }

        var rPet = PetInfo.Create(info.pet);

        BuildPetSimplePreloadAssets(rPet, assets, 2);

        return(assets);
    }
Example #4
0
    private List <string> GetItemModels(PItem item)
    {
        var l = new List <string>();

        if (item == null)
        {
            return(l);
        }

        var type = Module_Equip.GetEquipTypeByItem(item);
        var info = item.GetPropItem();

        if (type == EquipType.Cloth)
        {
            var model = info?.previewModel;
            if (!string.IsNullOrEmpty(model))
            {
                l.Add(model);
            }
        }
        else if (type == EquipType.Gun || type == EquipType.Weapon)
        {
            var weapon = WeaponInfo.GetWeapon(info.subType, info.ID);
            weapon.GetAllAssets(l);
        }
        return(l);
    }
Example #5
0
    public CreatureInfo BuildPlayerInfo(PMatchProcessInfo matchInfo, bool playerBuff = true, bool playerSkill = true)
    {
        var info = ConfigManager.Get <CreatureInfo>(matchInfo.roleProto);

        if (!info)
        {
            Logger.LogError("Module_Player::BuildPlayerInfo: Build CreatureInfo from PMatchInfo failed, could not find proto template config: {0}", matchInfo.roleProto);
            return(null);
        }

        info = info.Clone <CreatureInfo>();

        var w  = WeaponInfo.GetWeapon(0, matchInfo.fashion.weapon);
        var ww = WeaponInfo.GetWeapon(0, matchInfo.fashion.gun);

        if (w.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid weapon item:<b>[{0}]</b>", matchInfo.fashion.weapon);
        }

        if (ww.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid off weapon item:<b>[{0}]</b>", matchInfo.fashion.gun);
        }

        info.weaponID        = w.weaponID;
        info.offWeaponID     = ww.weaponID;
        info.weaponItemID    = matchInfo.fashion.weapon;
        info.offWeaponItemID = matchInfo.fashion.gun;
        info.buffs           = null;

        return(info);
    }
Example #6
0
    public CreatureInfo BuildPlayerInfo(PRoleSummary rRole)
    {
        var info = ConfigManager.Get <CreatureInfo>(rRole.proto);

        if (!info)
        {
            Logger.LogError("Module_Player::BuildPlayerInfo: Build CreatureInfo from PMatchInfo failed, could not find proto template config: {0}", rRole.proto);
            return(null);
        }

        info = info.Clone <CreatureInfo>();

        var w  = WeaponInfo.GetWeapon(0, rRole.fashion.weapon);
        var ww = WeaponInfo.GetWeapon(0, rRole.fashion.gun);

        if (w.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid weapon item:<b>[{0}]</b>", rRole.fashion.weapon);
        }

        if (ww.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid off weapon item:<b>[{0}]</b>", rRole.fashion.gun);
        }

        info.weaponID        = w.weaponID;
        info.offWeaponID     = ww.weaponID;
        info.weaponItemID    = rRole.fashion.weapon;
        info.offWeaponItemID = rRole.fashion.gun;

        return(info);
    }
Example #7
0
    private void OnGMLockClass(Event_ e)
    {
        var nc = proto;

        var c = (int)e.param1;
        var i = (int)e.param2;

        var ci = c > 0 ? ConfigManager.Get <CreatureInfo>(c) : null;

        m_lockedClass  = ci ? ci.ID : m_proto;
        m_lockedGender = ci ? ci.gender : m_gender;

        var w = m_lockedClass == m_proto && i < 1 ? null : WeaponInfo.GetWeapon(m_lockedClass, i);

        if (w == null || w.isEmpty)
        {
            m_lockedElementType = m_elementType;
        }
        else
        {
            var a = ConfigManager.Get <WeaponAttribute>(w.weaponItemId);
            m_lockedElementType = a == null ? m_elementType : (CreatureElementTypes)a.elementType;
        }

        Logger.LogDetail("Lock class <b><color=#66EECC>[weapon:{0}, gender:{1}, weaponItem:{2}, elementType:{3}]</color></b>", proto, gender, w != null && !w.isEmpty ? w.weaponItemId : -1, elementType);

        DispatchEvent("OnPostGmLockClass", Event_.Pop(nc == proto));
    }
Example #8
0
    public CreatureInfo BuildPlayerInfo(PTeamMemberInfo memberInfo, bool playerBuff = true, bool playerSkill = true)
    {
        var info = ConfigManager.Get <CreatureInfo>(memberInfo.roleProto);

        if (!info)
        {
            Logger.LogError("Module_Player::BuildPlayerInfo: Build CreatureInfo from PTeamMemberInfo failed, could not find proto template config: {0}", memberInfo.roleProto);
            return(null);
        }

        info = memberInfo.attrInfo.ToCreatureInfo(info.Clone <CreatureInfo>());

        var w  = WeaponInfo.GetWeapon(0, memberInfo.fashion.weapon);
        var ww = WeaponInfo.GetWeapon(0, memberInfo.fashion.gun);

        if (w.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid weapon item:<b>[{0}]</b>", memberInfo.fashion.weapon);
        }

        if (ww.isEmpty)
        {
            Logger.LogError("Creature::BuildPlayerInfo: MatchInfo has invalid off weapon item:<b>[{0}]</b>", memberInfo.fashion.gun);
        }

        info.elementType     = memberInfo.elementType;
        info.weaponID        = w.weaponID;
        info.offWeaponID     = ww.weaponID;
        info.weaponItemID    = memberInfo.fashion.weapon;
        info.offWeaponItemID = memberInfo.fashion.gun;
        info.bulletCount     = memberInfo.bulletCount;
        info.energy          = memberInfo.energy;
        info.maxEnergy       = memberInfo.maxEnergy;
        info.awakeDuration   = memberInfo.awakeDuration;
        memberInfo.awakeChangeAttr.CopyTo(ref info.awakeChangeAttr);

        if (playerBuff)
        {
            info.buffs = memberInfo.buffs.SimpleClone();
        }
        else
        {
            info.buffs = null;
        }

        if (playerSkill && memberInfo.skills != null && memberInfo.skills.Length > 0)
        {
            PSkill[] skills = null;
            memberInfo.skills.CopyTo(ref skills);
            info.skills = skills;
        }
        else
        {
            info.skills = null;
        }

        return(info);
    }
Example #9
0
    public static List <string> BuildWeaponSimplePreloadAssets(int proto, int gender, int weaponID, int weaponItemID, List <string> assets = null)
    {
        if (assets == null)
        {
            assets = new List <string>();
        }

        assets.Add(Creature.GetAnimatorNameSimple(weaponID, gender)); // Animator

        var w = WeaponInfo.GetWeapon(weaponID, weaponItemID);         // Main-hand weapon models

        w.GetAllAssets(assets);

        // Simple statemachine
        StateMachineInfo.GetAllAssets(weaponID, -1, assets, proto, gender, weaponItemID, -1, false, true);

        return(assets);
    }
Example #10
0
    public static List <string> BuildPlayerPreloadAssets(PTeamMemberInfo info, List <string> assets = null)
    {
        if (assets == null)
        {
            assets = new List <string>();
        }
        if (info == null)
        {
            return(assets);
        }

        // Player shadow
        if (info.roleId == modulePlayer.id_)
        {
            assets.Add(CombatConfig.sdefaultSelfShadow);
        }

        // Player model
        var model = ConfigManager.Get <CreatureInfo>(info.roleProto);

        if (model)
        {
            assets.AddRange(model.models);
        }

        var w  = WeaponInfo.GetWeapon(0, info.fashion.weapon);
        var ww = WeaponInfo.GetWeapon(0, info.fashion.gun);

        // Player weapons
        BuildWeaponPreloadAssets(info.roleProto, info.gender, w.weaponID, w.weaponItemId, ww.weaponID, ww.weaponItemId, assets);

        // Buff effects
        BuildBuffPreloadAssets(info.buffs, assets);

        // Equipments
        assets.AddRange(CharacterEquip.GetEquipAssets(info.fashion));

        // Pet
        BuildPetPreloadAssets(assets, info.pet != null && info.pet.itemTypeId != 0 ? PetInfo.Create(info.pet) : null);

        return(assets);
    }
Example #11
0
    private bool UpdateWeaponModel(bool off)
    {
        var weaponID = off ? m_creature.offWeaponID : m_creature.weaponID;
        var itemId   = off ? m_creature.offWeaponItemID : m_creature.weaponItemID;

        var weapon = WeaponInfo.GetWeapon(weaponID, itemId);

        if (!off && weapon.isEmpty && weaponID < Creature.MAX_WEAPON_ID) // Only main weapon need error log
        {
            Logger.LogError("Could not find weapon config [{0}:{1}]", weaponID, itemId);
            return(false);
        }

        if (off)
        {
            m_offWeaponInfo = weapon;
        }
        else
        {
            m_weaponInfo = weapon;
        }

        var ws = off ? m_offWeapons : m_mainWeapons;

        foreach (var w in ws)
        {
            w.Value?.transform.SetParent(m_weapon, false);
            m_weapons.Remove(w.Value);
        }
        ws.Clear();

        Util.DisableAllChildren(m_weapon);

        var sws = weapon.singleWeapons;

        if (sws.Length < 1)
        {
            return(true);
        }

        var visible = !m_creature.currentState || !off || m_creature.currentState.showOffWeapon;

        foreach (var sw in sws)
        {
            if (string.IsNullOrEmpty(sw.model))
            {
                Logger.LogError("Invalid weapon config [weapon:{0}, itemID:{1}, index:{2}, name:{3}]", weapon.weaponID, weapon.weaponItemId, sw.index, weapon.name);
                continue;
            }

            var t = m_weapon.Find(sw.model);
            var w = t?.gameObject;

            if (!w)
            {
                w = Level.GetPreloadObject(sw.model);
                if (!w)
                {
                    Logger.LogError("Could not load weapon model [{0}]", sw.model);
                }
                else
                {
                    w.name = sw.model;
                    UpdateWeaponEffects(w, weapon, sw);
                }
            }

            if (w)
            {
                w.SetActive(visible);
                Util.AddChild(m_weapon, w.transform);

                ws.Set(sw.index, w);
                m_weapons.Add(w);
            }
        }

        if (off)
        {
            var sm = ConfigManager.Get <StateMachineInfoOff>(1);
            if (sm)
            {
                SetWeaponBind(sm.defaultWeaponBinds, true);
            }
        }
        else if (m_creature.currentState)
        {
            SetWeaponBind(m_creature.currentState.bindInfo);
        }

        Logger.LogInfo("{2}eapon changed to [{0}: {3}:{1}]", weapon.weaponID, weapon.weaponItemId, off ? "Off W" : "W", weapon.name);

        return(true);
    }