示例#1
0
    private void OnItemEndDragItem(object param)
    {
        dragItem.gameObject.SetActive(false);
        ItemData item = (ItemData)param;

        ShowMask(item, false);

        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (static_data.sub_ype == ItemSubType.Ring && equip_items[0].onItem)
        {
            RoleData.mainRole.EquipItem(item.id);
        }
        else if (static_data.sub_ype == ItemSubType.Ride && equip_items[1].onItem)
        {
            RoleData.mainRole.EquipItem(item.id);
        }
        else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            for (int idx = 0; idx < battle_items.Length; idx++)
            {
                if (battle_items[idx].onItem)
                {
                    RoleData.mainRole.EquipItem(item.id, idx);
                    break;
                }
            }
        }
    }
示例#2
0
    /// <summary>
    /// 创建新物品
    /// </summary>
    public int NewItem(int static_id, ref int count)
    {
        bool old_id = remove_items.Count > 0; // 是否复用丢弃的物品id
        int  item_id;

        if (old_id)
        {
            item_id = remove_items.Dequeue();
        }
        else
        {
            item_id = all_item.Count;
        }
        ItemData item = new ItemData()
        {
            static_id = static_id, count = 1, id = item_id
        };

        if (old_id)
        {
            all_item[item_id] = item;
        }
        else
        {
            all_item.Add(item);
        }
        ItemStaticData static_data = item_static_data[static_id];
        int            item_count  = Mathf.Min(count, static_data.maxcount);

        item.count = item_count;
        count     -= item_count;
        return(item_id);
    }
示例#3
0
    /// <summary>
    /// 物品是否装备着
    /// </summary>
    /// <returns></returns>
    public bool ItemIsEquip(int item_id)
    {
        var            item        = GameData.instance.all_item[item_id];
        bool           isWear      = false; // 是否穿戴者
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (static_data.sub_ype == ItemSubType.Ring)
        {
            return(equip_items[0] == item.id);  // 戒指位置
        }
        else if (static_data.sub_ype == ItemSubType.Ride)
        {
            return(equip_items[1] == item.id);  // 坐骑位置
        }
        else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            foreach (var id in remedy_items)   // 丹药
            {
                if (id == item.id)
                {
                    isWear = true;
                    break;
                }
            }
        }
        return(isWear);
    }
示例#4
0
    private void UpdateItem(ItemData item)
    {
        ItemStaticData staticData = GameData.instance.item_static_data[item.static_id];

        item_name.text     = staticData.name;
        item_type.text     = GameConst.itemTypeName[staticData.type];
        item_sub_type.text = GameConst.itemSubTypeName[staticData.sub_ype];
        item_need_lv.text  = LevelConfigData.GetBigName(staticData.level);

        string[] array = staticData.des.Split('\n');
        for (int i = 1; i < transform.childCount; i++)
        {
            if (i > array.Length)
            {
                transform.GetChild(i).gameObject.SetActive(false);
            }
            else
            {
                GameObject obj = transform.GetChild(i).gameObject;
                obj.SetActive(true);
                obj.GetComponent <Text>().text = array[i - 1];
            }
        }
        //item_attr.text = GetItemAttrDes(staticData);
        item_bg.sprite    = UIAssets.instance.bgColor[staticData.color];
        item_color.sprite = UIAssets.instance.itemColor[staticData.color];
        item_icon.sprite  = UIAssets.instance.itemIcon[staticData.icon];
        item_use.SetActive(RoleData.mainRole.ItemIsEquip(item.id));
    }
示例#5
0
    private void ShowMask(ItemStaticData static_data, bool show)
    {
        switch (static_data.sub_ype)
        {
        case ItemSubType.Heart:
            yuan.SetActive(show);
            break;

        case ItemSubType.Attack:
            yuan1.SetActive(show);
            break;

        case ItemSubType.Skill:
            yuan2.SetActive(show);
            break;

        case ItemSubType.Body:
            yuan3.SetActive(show);
            break;

        case ItemSubType.Magic:
            yuan4.SetActive(show);
            break;
        }
    }
示例#6
0
    public static GongfaStaticData GetStaticGongfaFromItem(int item_id)
    {
        ItemData         item        = instance.all_item[item_id];
        ItemStaticData   static_data = instance.item_static_data[item.static_id];
        GongfaStaticData gongfa      = instance.gongfa_static_data[static_data.param[0]];

        return(gongfa);
    }
示例#7
0
    /// <summary>
    /// 卸下功法
    /// </summary>
    public void UnfixGongfa(GongfaData gongfa)
    {
        int              item_id       = gongfa.item_id;
        ItemData         item          = GameData.instance.all_item[item_id];
        ItemStaticData   static_data   = GameData.instance.item_static_data[item.static_id];
        GongfaStaticData static_gongfa = GetGongfaStaticData(gongfa);

        UnfixGongfa(static_data.sub_ype, GetHeartType(static_gongfa.type));
    }
示例#8
0
    /// <summary>
    /// 获取功法静态数据
    /// </summary>
    public GongfaStaticData GetGongfaStaticData(GongfaData gongfa)
    {
        int              item_id          = gongfa.item_id;
        ItemData         item             = GameData.instance.all_item[item_id];
        ItemStaticData   static_data      = GameData.instance.item_static_data[item.static_id];
        int              gongfa_static_id = static_data.param[0]; // 根据物品获取功法静态数据id
        GongfaStaticData static_gongfa    = GameData.instance.gongfa_static_data[gongfa_static_id];

        return(static_gongfa);
    }
示例#9
0
    private void OnItemEndDragItem(object param)
    {
        dragItem.gameObject.SetActive(false);
        GongfaData     gongfa      = (GongfaData)param;
        int            item_id     = gongfa.item_id;
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        ShowMask(static_data, false);

        switch (static_data.sub_ype)
        {
        case ItemSubType.Heart:
            for (int i = 0; i < heart_items.Length; i++)
            {
                if (heart_items[i].onItem)
                {
                    RoleData.mainRole.EquipGongfa(gongfa, i);
                    break;
                }
            }
            break;

        case ItemSubType.Attack:
            if (atk_items[0].onItem)
            {
                RoleData.mainRole.EquipGongfa(gongfa);
            }
            break;

        case ItemSubType.Skill:
            if (atk_items[1].onItem)
            {
                RoleData.mainRole.EquipGongfa(gongfa);
            }
            break;

        case ItemSubType.Body:
            if (atk_items[2].onItem)
            {
                RoleData.mainRole.EquipGongfa(gongfa);
            }
            break;

        case ItemSubType.Magic:
            if (atk_items[3].onItem)
            {
                RoleData.mainRole.EquipGongfa(gongfa);
            }
            break;
        }
    }
示例#10
0
    private void OnItemBeginDragItem(object param)
    {
        GongfaData gongfa = (GongfaData)param;

        dragItem.GetComponent <GongfaItem>().SetItem(gongfa);
        dragItem.gameObject.SetActive(true);

        int            item_id     = gongfa.item_id;
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        ShowMask(static_data, true);
    }
示例#11
0
    public int GetItemAttrbuite(int item_id, RoleAttribute attribute)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        for (int i = 0; i < static_data.attributes.Length; i++)
        {
            if (static_data.attributes[i] == RoleAttribute.max_item)
            {
                return(static_data.attr_values[i]);
            }
        }
        return(0);
    }
示例#12
0
    public void RemoveItem(int item_id, int count = 1, bool removeDepot = true)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (count == 0)
        {
            count = item.count;
        }
        // 移除背包的
        item.count -= count;
        if (item.count <= 0)
        {
            bag_items.Remove(item_id);
        }
        if (item.count <= 0)
        {
            // 移除穿在身上的
            if (static_data.type == ItemType.Equip)
            {
                for (int i = 0; i < equip_items.Length; i++)
                {
                    if (equip_items[i] == item.id)
                    {
                        equip_items[i] = -1;
                        break;
                    }
                }
            }
            else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
            {
                for (int i = 0; i < remedy_items.Length; i++)
                {
                    if (remedy_items[i] == item.id)
                    {
                        remedy_items[i] = -1;
                        break;
                    }
                }
            }
            if (removeDepot)
            {
                // 移除物品库
                GameData.instance.RemoveItem(item_id);
            }
        }
        EventManager.SendEvent(EventTyp.ItemChange, null);
    }
示例#13
0
    /*
     * <color=#E28225FF>装备后可获得以下属性属性</color>
     * 背包上限:<color=#20C123FF>+12</color>
     *
     */
    private string GetItemAttrDes(ItemStaticData staticData)
    {
        if (staticData.attributes == null || staticData.attributes.Length < 1)
        {
            return(null);
        }
        RoleAttrConfig[] attribute_config = RoleAttrConfigData.GetAttrConfig();
        StringBuilder    myString         = new StringBuilder("<color=#E28225FF>装备后可获得以下属性</color>");

        for (int i = 0; i < staticData.attributes.Length; i++)
        {
            myString.AppendLine();
            myString.Append(attribute_config[(int)staticData.attributes[i]].name);
            myString.AppendFormat("<color=#20C123FF>+{0}</color>", staticData.attr_values[i]);
        }
        return(myString.ToString());
    }
示例#14
0
    /// <summary>
    /// 添加或新建道具
    /// </summary>
    /// <param name="static_id">添加的物品静态配置id</param>
    /// <param name="count">添加的数量,返回时大于0则是无法添加的数量</param>
    /// <returns>是否成功添加 无法添加的数量在count</returns>
    public bool AddOrCreateItem(int static_id, ref int count)
    {
        ItemStaticData static_data = GameData.instance.item_static_data[static_id];

        // 判断是否可以叠加
        for (int i = 0; i < bag_items.Count; i++)
        {
            ItemData item = GameData.instance.all_item[bag_items[i]];
            if (item.static_id == static_id && item.count < static_data.maxcount)
            {
                // 背包有物品 并且堆叠数量未满
                int can_count = static_data.maxcount - item.count;
                if (can_count >= count)
                {
                    item.count += count;
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return(true);
                }
                else
                {
                    count      -= can_count;
                    item.count += can_count;
                }
            }
        }

        if (bag_items.Count >= GetAttr(RoleAttribute.max_item))
        {
            MessageTips.Message(21); // 提示背包已满
            return(false);
        }
        do
        {
            int item_id = GameData.instance.NewItem(static_id, ref count);
            if (!AddItem(item_id, ref count))
            {
                GameData.instance.RemoveItem(item_id);
                return(false);
            }
        } while (count > 0);
        return(true);
    }
示例#15
0
    private void ShowMask(ItemData item, bool show)
    {
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        switch (static_data.sub_ype)
        {
        case ItemSubType.Ring:
            yuan1.SetActive(show);
            break;

        case ItemSubType.Ride:
            yuan2.SetActive(show);
            break;

        case ItemSubType.recoverRemedy:
        case ItemSubType.buffRemedy:
            fang.SetActive(show);
            break;
        }
    }
示例#16
0
    public void EquipItem(int item_id, int idx)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level))
        {
            MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level));
            return;
        }

        if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            remedy_items[idx] = item_id;
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else
        {
            EquipItem(item_id);
        }
    }
示例#17
0
    /// <summary>
    /// 物品是否装备着
    /// </summary>
    /// <returns></returns>
    public bool GonfaIsEquip(GongfaData gongfa)
    {
        bool isWear = false; // 是否穿戴着

        int            item_id     = gongfa.item_id;
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        switch (static_data.sub_ype)
        {
        case ItemSubType.Heart:
            for (int i = 0; i < heart_gongfa.Length; i++)
            {
                if (gongfa == heart_gongfa[i])
                {
                    isWear = true;
                }
            }
            break;

        case ItemSubType.Body:
            isWear = body_gongfa == gongfa;
            break;

        case ItemSubType.Attack:
            isWear = attack_gongfa == gongfa;
            break;

        case ItemSubType.Skill:
            isWear = skill_gongfa == gongfa;
            break;

        case ItemSubType.Magic:
            isWear = magic_gongfa == gongfa;
            break;
        }

        return(isWear);
    }
示例#18
0
    /// <summary>
    /// 添加道具
    /// </summary>
    /// <param name="static_id">添加的物品id</param>
    /// <param name="count">添加的数量,返回时大于0则是无法添加的数量</param>
    /// <returns>是否成功添加 无法添加的数量在count</returns>
    public bool AddItem(int item_id, ref int count)
    {
        ItemData       add_item    = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[add_item.static_id];

        // 判断是否可以叠加
        for (int i = 0; i < bag_items.Count; i++)
        {
            ItemData item = GameData.instance.all_item[bag_items[i]];
            if (item.static_id == add_item.static_id && item.count < static_data.maxcount)
            {
                // 背包有物品 并且堆叠数量未满
                int can_count = static_data.maxcount - item.count;
                if (can_count >= count)
                {
                    item.count += count;
                    GameData.instance.RemoveItem(add_item.id); // 物品堆叠到一起,删除旧的物品
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return(true);
                }
                else
                {
                    count      -= can_count;
                    item.count += can_count;
                }
            }
        }

        if (bag_items.Count >= GetAttr(RoleAttribute.max_item))
        {
            MessageTips.Message(21); // 提示背包已满
            return(false);
        }
        // 增加物品
        bag_items.Add(item_id);
        EventManager.SendEvent(EventTyp.ItemChange, null);
        return(true);
    }
示例#19
0
    /// <summary>
    /// 是否可以穿戴物品
    /// </summary>
    /// <param name="item_id">返回可穿在的索引</param>
    /// <returns></returns>
    public int CanEquipItem(int item_id)
    {
        if (ItemIsEquip(item_id))
        {
            return(-1);
        }
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        // 移除穿在身上的
        if (static_data.sub_ype == ItemSubType.Ring)
        {
            if (equip_items[0] == -1)   // 戒指
            {
                return(0);
            }
        }
        else if (static_data.sub_ype == ItemSubType.Ride)
        {
            if (equip_items[1] == -1)   // 坐骑
            {
                return(1);
            }
        }
        else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            for (int i = 0; i < remedy_items.Length; i++)   // 丹药
            {
                if (remedy_items[i] == -1)
                {
                    return(i);
                }
            }
        }
        return(-1);
    }
示例#20
0
    private ItemTipsBtn[] GetItemBtns()
    {
        if (item == null || roleData == null || !isBag)
        {
            return(new ItemTipsBtn[0]);
        }
        bool item_is_equip             = roleData.ItemIsEquip(item.id);
        List <ItemTipsBtn> btns        = new List <ItemTipsBtn>();
        ItemStaticData     static_data = GameData.instance.item_static_data[item.static_id];

        if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy ||
            static_data.sub_ype == ItemSubType.Ring || static_data.sub_ype == ItemSubType.Ride)
        {
            if (item_is_equip)
            {
                // 卸载按钮
                btns.Add(new ItemTipsBtn()
                {
                    btn_name = 28, btn_func = BtnEquip
                });
            }
            else
            {
                if (static_data.sub_ype == ItemSubType.Ride)
                {
                    // 乘骑按钮
                    btns.Add(new ItemTipsBtn()
                    {
                        btn_name = 31, btn_func = BtnEquip
                    });
                }
                else
                {
                    // 装备按钮
                    btns.Add(new ItemTipsBtn()
                    {
                        btn_name = 22, btn_func = BtnEquip
                    });
                }
            }
        }
        if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.aptitudesRemedy)
        {
            // 食用按钮
            btns.Add(new ItemTipsBtn()
            {
                btn_name = 23, btn_func = BtnUse
            });
        }
        if (static_data.type == ItemType.Gongfa)
        {
            // 学习按钮
            btns.Add(new ItemTipsBtn()
            {
                btn_name = 25, btn_func = BtnUse
            });
        }
        if (!item_is_equip)
        {
            // 丢弃按钮
            btns.Add(new ItemTipsBtn()
            {
                btn_name = 24, btn_func = BtnDiscard
            });
        }
        return(btns.ToArray());
    }
示例#21
0
    public void SetItem(ItemData item, RoleData role = null, bool isBag = false, bool isRound = false, string show_count = null, System.Action clickFunc = null)
    {
        roleData       = role;
        this.item      = item;
        this.isBag     = isBag;
        this.clickFunc = clickFunc;
        if (item == null)
        {
            if (isRound)
            {
                color.sprite = UIAssets.instance.gongfaColor[0];
            }
            else
            {
                color.sprite = UIAssets.instance.itemColor[0];
            }
            icon.enabled = false;
            if (show_count != null)
            {
                count.enabled = true;
                count.text    = show_count;
            }
            else
            {
                count.enabled = false;
            }
            Tools.SetActive(useing, false);
            can_drag = false;
            return;
        }


        icon.enabled  = true;
        count.enabled = true;
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        icon.sprite = UIAssets.instance.itemIcon[static_data.icon];
        if (isRound)
        {
            color.sprite = UIAssets.instance.gongfaColor[static_data.color];
        }
        else
        {
            color.sprite = UIAssets.instance.itemColor[static_data.color];
        }

        if (show_count != null)
        {
            count.text = show_count;
        }
        else if (static_data.maxcount > 1)
        {
            count.text = item.count.ToString();
        }
        else
        {
            count.text = "";
        }


        if (roleData == null || !isBag)
        {
            can_drag = false;
            Tools.SetActive(useing, false);
            return;
        }

        bool isWear = roleData.ItemIsEquip(item.id); // 是否穿戴者

        Tools.SetActive(useing, isWear);
        can_drag = roleData == RoleData.mainRole && !isWear &&
                   (static_data.type == ItemType.Equip ||                                                               // 装备
                    static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy); // 恢复丹药或增益丹药
    }
示例#22
0
    /// <summary>
    /// 装备物品
    /// 戒指或坐骑:如果是已穿戴就卸下,否则就穿戴
    /// 药物:是已装备的药物则卸下,否则装备到最后一个空格子,没有的话提示装备已满
    /// </summary>
    public void EquipItem(int item_id)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level))
        {
            MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level));
            return;
        }
        // 移除穿在身上的
        if (static_data.sub_ype == ItemSubType.Ring)
        {
            if (equip_items[0] != -1)
            {
                int empty_count = GetAttr(RoleAttribute.max_item) - bag_items.Count;
                if (equip_items[0] == item_id)
                {
                    // 脱下
                    empty_count -= GetItemAttrbuite(item_id, RoleAttribute.max_item);
                }
                else
                {
                    // 更换
                    if (equip_items[0] != -1)
                    {
                        empty_count -= GetItemAttrbuite(equip_items[0], RoleAttribute.max_item);
                    }
                    empty_count += GetItemAttrbuite(item_id, RoleAttribute.max_item);
                }
                if (empty_count < 0)
                {
                    // 无法更换或脱下戒指
                    MessageTips.Message(44);
                    return;
                }
            }

            if (equip_items[0] == item_id)   // 戒指
            {
                equip_items[0] = -1;
            }
            else
            {
                equip_items[0] = item_id;
            }
            UpdateAttr();
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else if (static_data.sub_ype == ItemSubType.Ride)
        {
            if (equip_items[1] == item_id)   // 坐骑
            {
                equip_items[1] = -1;
            }
            else
            {
                equip_items[1] = item_id;
            }
            UpdateAttr();
            EventManager.SendEvent(EventTyp.ItemChange, null);
        }
        else if (static_data.sub_ype == ItemSubType.recoverRemedy || static_data.sub_ype == ItemSubType.buffRemedy)
        {
            for (int i = 0; i < remedy_items.Length; i++)   // 判断卸下丹药
            {
                if (remedy_items[i] == item_id)
                {
                    remedy_items[i] = -1;
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return;
                }
            }
            for (int i = 0; i < remedy_items.Length; i++)   // 判断穿戴丹药
            {
                if (remedy_items[i] == -1)
                {
                    remedy_items[i] = item_id;
                    EventManager.SendEvent(EventTyp.ItemChange, null);
                    return;
                }
            }
            MessageTips.Message(27);
        }
    }
示例#23
0
    public void UseItem(int item_id, int count = 1)
    {
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        if (!LevelConfigData.CheckLevel(GetAttr(RoleAttribute.level), static_data.level))
        {
            MessageTips.Message(43, LevelConfigData.GetBigName(static_data.level));
            return;
        }


        switch (static_data.type)
        {
        case ItemType.Remedy:     // 丹药类
            switch (static_data.sub_ype)
            {
            case ItemSubType.recoverRemedy:         // 恢复类丹药
                // 扣除道具
                RemoveItem(item_id, count);
                // 恢复
                for (int i = 0; i < static_data.attributes.Length; i++)
                {
                    ChangeAttrebuteValue(static_data.attributes[i], static_data.attr_values[i] * count);
                }
                break;

            case ItemSubType.aptitudesRemedy:         // 资质丹药
                // 扣除道具
                RemoveItem(item_id, count);
                // 增加属性
                for (int i = 0; i < static_data.attributes.Length; i++)
                {
                    int multiple = (GetAttr(static_data.attributes[i]) >= static_data.param[0]) ? 0 : 1;
                    ChangeAttrebuteMaxValue(static_data.attributes[i], static_data.attr_values[i] * count * multiple);
                    if (multiple < 1)
                    {
                        MessageTips.Message(46);
                    }
                }
                break;

            case ItemSubType.buffRemedy:
                break;

            case ItemSubType.otherRemedy:
                break;
            }
            break;

        case ItemType.Gongfa:     // 功法类
            GongfaStaticData  gongfa    = GameData.GetStaticGongfaFromItem(item_id);
            RoleAttribute[][] need_attr = gongfa.attr_condition;
            var need_value      = gongfa.value_condition;
            int condition_count = need_value.Length;
            for (int i = 0; i < condition_count; i++)
            {
                RoleAttribute[] need  = need_attr[i];
                int             value = need_value[i];
                bool            can   = false;
                foreach (RoleAttribute attr in need)
                {
                    if (GetAttr(attr) >= value)
                    {
                        can = true;
                        break;
                    }
                }
                if (!can)
                {
                    // 修炼资质不足
                    MessageTips.Message(45);
                    return;
                }
            }
            RemoveItem(item_id, count, false);
            GongfaData new_gongfa = new GongfaData()
            {
                item_id = item.id, attr_value = gongfa.attr_value, ex_values = gongfa.ex_values, ex_color = gongfa.ex_color
            };
            all_gongfa.Add(new_gongfa);
            int mood = 10;
            ChangeAttrebuteValue(RoleAttribute.mood, -mood);
            GameData.instance.SetGameData(GlobalAttribute.time, GameData.instance.GetGameData(GlobalAttribute.time) + GameConst.oneDayTicks * 15);
            MessageWindow.Message(49, 50, null, 0, mood.ToString(), gongfa.name);
            break;
        }
    }
示例#24
0
    /// <summary>
    /// 装配功法
    /// </summary>
    public void EquipGongfa(GongfaData gongfa, int idx = -1)
    {
        int            item_id     = gongfa.item_id;
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        switch (static_data.sub_ype)
        {
        case ItemSubType.Heart:
            GongfaStaticData static_gongfa = GetGongfaStaticData(gongfa);
            GongfaType       sub_type      = GetHeartType(static_gongfa.type);
            // 先判断是否有装备相同类型的功法
            int same = -1;
            for (int i = 0; i < heart_gongfa.Length; i++)
            {
                if (heart_gongfa[i] == null)
                {
                    if (idx == -1)
                    {
                        idx = i;
                    }
                    continue;
                }
                GongfaStaticData equip_gongfa = GetGongfaStaticData(heart_gongfa[i]);
                if ((equip_gongfa.type & sub_type) == sub_type)
                {
                    same = i;
                    if (idx == -1)
                    {
                        idx = i;
                    }
                }
            }
            if (CheckDaodian(gongfa, same == -1 ? 0 : ((HeartGongfaStaticData)GetGongfaStaticData(gongfa)).need_daodian))
            {
                if (same != -1)
                {
                    heart_gongfa[same] = null;
                }
                heart_gongfa[idx] = gongfa;
            }
            else
            {
                MessageTips.Message(47);
            }
            break;

        case ItemSubType.Body:
            body_gongfa = gongfa;
            break;

        case ItemSubType.Attack:
            attack_gongfa = gongfa;
            break;

        case ItemSubType.Skill:
            skill_gongfa = gongfa;
            break;

        case ItemSubType.Magic:
            magic_gongfa = gongfa;
            break;
        }
        EventManager.SendEvent(EventTyp.GongfaChange, null);
        UpdateAttr();
    }
示例#25
0
    /// <summary>
    /// 更新属性 重新计算装备增加的属性
    /// </summary>
    public void UpdateAttr()
    {
        int count = attribute.Length;

        if (definitive_attribute == null || definitive_max_attribute == null)
        {
            definitive_attribute     = new int[count];
            definitive_max_attribute = new int[count];
            for (int i = 0; i < count; i++)
            {
                definitive_attribute[i]     = attribute[i];
                definitive_max_attribute[i] = max_attribute[i];
            }
        }

        int old_ride = GetAttr(RoleAttribute.ride_id);
        int new_ride = -1;

        // 记录更新属性
        int[] max_value = new int[count];
        for (int i = 0; i < count; i++)
        {
            max_value[i] = max_attribute[i];
        }

        // 计算装备增加的属性
        for (int i = 0; i < equip_items.Length; i++)
        {
            int item_id = equip_items[i];
            if (item_id == -1)
            {
                continue;
            }
            ItemData       item        = GameData.instance.all_item[item_id];
            ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];
            for (int j = 0; j < static_data.attributes.Length; j++)
            {
                int attr = (int)static_data.attributes[j];
                max_value[attr] += static_data.attr_values[j];
            }
            if (static_data.sub_ype == ItemSubType.Ride)
            {
                new_ride = static_data.param[0];
            }
        }
        // 计算功法加的属性
        int daodian = 0; // 记录功法使用的道点
        List <GongfaData> gongfas = new List <GongfaData>(heart_gongfa);

        gongfas.Add(attack_gongfa);
        gongfas.Add(skill_gongfa);
        gongfas.Add(body_gongfa);
        gongfas.Add(magic_gongfa);
        for (int i = 0; i < gongfas.Count; i++)
        {
            GongfaData gongfa = gongfas[i];
            if (gongfa != null)
            {
                GongfaStaticData static_gongfa = GetGongfaStaticData(gongfa);
                for (int j = 0; j < static_gongfa.attr_id.Length; j++)
                {
                    GongfaAttrData attr_data = GongfaAttrConfig.GetAttrConfig(static_gongfa.attr_id[j]);
                    if (!attr_data.isSkill)
                    {
                        int value = gongfa.attr_value[j][0];
                        max_value[(int)attr_data.attr] += value;
                    }
                }
                for (int j = 0; j < static_gongfa.ex_id.Length; j++)
                {
                    GongfaAttrData attr_data = GongfaAttrConfig.GetAttrConfig(static_gongfa.ex_id[j]);
                    if (!attr_data.isSkill)
                    {
                        int value = gongfa.ex_values[j][0];
                        max_value[(int)attr_data.attr] += value;
                    }
                }
                if (static_gongfa is HeartGongfaStaticData)
                {
                    daodian += ((HeartGongfaStaticData)static_gongfa).need_daodian;
                }
            }
        }

        RoleAttrConfig[] attribute_config = RoleAttrConfigData.GetAttrConfig();
        for (int i = 0; i < count; i++)
        {
            float rate = definitive_attribute[i] == definitive_attribute[i] ? 1 : definitive_attribute[i] * 1f / definitive_max_attribute[i];
            if (attribute_config[i].type == RoleAttrShowType.FixedMinMax)
            {
                definitive_max_attribute[i] = max_value[i];
                continue;
            }
            else if (attribute_config[i].type != RoleAttrShowType.MinMax)
            {
                rate = 1;
            }
            definitive_max_attribute[i] = max_value[i];
            definitive_attribute[i]     = (int)(max_value[i] * rate);
        }
        definitive_attribute[(int)RoleAttribute.daodian] = daodian; // 修改当前使用的道点

        EventManager.SendEvent(EventTyp.AttrChange, this);          // 通知属性变更

        if (old_ride != new_ride)
        {
            SetAttrebuteValue(RoleAttribute.ride_id, new_ride);
            EventManager.SendEvent(EventTyp.ChangeRide, this); // 通知坐骑变更
        }
    }
示例#26
0
    public static void CreateGongfaItem(GongfaStaticData gongfa, List <ItemStaticData> item_list, ItemSubType sub_type)
    {
        StringBuilder des = new StringBuilder();

        if (gongfa is HeartGongfaStaticData)
        {
            HeartGongfaStaticData gf = (HeartGongfaStaticData)gongfa;
            des.AppendFormat("道点消耗:{0}", gf.need_daodian);
        }
        else if (gongfa is SkillGongfaStaticData)
        {
            SkillGongfaStaticData gf = (SkillGongfaStaticData)gongfa;
            des.AppendFormat("技能冷却:{0}", gf.cool);
            des.AppendLine();
            des.AppendFormat("施法消耗:{0}", gf.cost);
        }
        des.AppendLine();
        des.AppendLine("——————————————————");

        bool isSkill = true;

        for (int i = 0; i < gongfa.attr_id.Length; i++)
        {
            var            attr_id        = gongfa.attr_id[i];
            GongfaAttrData main_attr_data = GongfaAttrConfig.GetAttrConfig(attr_id);
            if (!main_attr_data.isSkill && isSkill)
            {
                isSkill = false;
                des.AppendLine("<color=#E28225FF>装备后可获得以下属性</color>");
            }
            if (isSkill)
            {
                des.AppendLine(DesFormat(main_attr_data.des, gongfa.attr_value[i]));
            }
            else
            {
                des.AppendLine(" " + DesFormat(main_attr_data.des, gongfa.attr_value[i]));
            }
        }
        des.AppendLine("——————————————————");
        for (int i = 0; i < gongfa.ex_id.Length; i++)
        {
            GongfaAttrData congfa_attr_data = GongfaAttrConfig.GetAttrConfig(gongfa.ex_id[i]);
            des.AppendFormat(" <size=10>{1}</size>:<color=#{0}>", GameConst.item_color_str[gongfa.ex_color[i]], GameConst.attr_level_name[i]);
            des.Append(DesFormat(congfa_attr_data.des, gongfa.ex_values[i]));
            des.AppendLine("</color>");
        }
        des.AppendLine("——————————————————");
        if (gongfa.attr_condition[0].Length == 1)
        {
            RoleAttrConfig[] attribute_config = RoleAttrConfigData.GetAttrConfig();
            des.AppendFormat("学习条件:{0}达到{1}", attribute_config[(int)gongfa.attr_condition[0][0]].name, gongfa.value_condition[0]);
        }
        else
        {
            des.AppendFormat("任意一项战斗资质达到{0}", gongfa.value_condition[0]);
        }



        int item_static_id = item_list.Count;
        var item           = new ItemStaticData()
        {
            id       = item_static_id,
            type     = ItemType.Gongfa,
            sub_ype  = sub_type,
            price    = gongfa.price,
            maxcount = 1,
            param    = new int[] { gongfa.id },

            name  = gongfa.name,
            icon  = ItemSubType.Magic - sub_type,
            color = gongfa.color,
            level = gongfa.level,

            des         = des.ToString(),
            attributes  = null,
            attr_values = null,
        };

        item_list.Add(item);
    }
示例#27
0
    public void SetItem(GongfaData gongfa, RoleData role = null, bool isBag = false, System.Action clickFunc = null)
    {
        roleData       = role;
        this.gongfa    = gongfa;
        this.isBag     = isBag;
        this.clickFunc = clickFunc;
        if (gongfa == null)
        {
            icon.enabled = false;
            color.sprite = UIAssets.instance.gongfaColor[0];;
            if (bg)
            {
                bg.sprite = UIAssets.instance.bgColor[0];
            }
            if (t_name)
            {
                t_name.text = null;
            }
            if (t_type)
            {
                t_type.text = null;
            }
            if (t_level)
            {
                t_level.text = null;
            }
            Tools.SetActive(useing, false);
            return;
        }

        int            item_id     = gongfa.item_id;
        ItemData       item        = GameData.instance.all_item[item_id];
        ItemStaticData static_data = GameData.instance.item_static_data[item.static_id];

        icon.enabled = true;
        icon.sprite  = UIAssets.instance.itemIcon[static_data.icon];
        color.sprite = UIAssets.instance.gongfaColor[static_data.color];
        if (bg)
        {
            bg.sprite = UIAssets.instance.bgColor[static_data.color];
        }
        if (t_name)
        {
            t_name.text = static_data.name;
        }
        if (t_type)
        {
            t_type.text = GameConst.itemSubTypeName[static_data.sub_ype];
        }
        if (t_level)
        {
            t_level.text = LevelConfigData.GetBigName(static_data.level);
        }

        if (roleData == null || !isBag)
        {
            can_drag = false;
            Tools.SetActive(useing, false);
            return;
        }

        bool isWear = roleData.GonfaIsEquip(gongfa); // 是否穿戴着

        Tools.SetActive(useing, isWear);
        can_drag = roleData == RoleData.mainRole && !isWear;
    }