/*
文件名:ItemClass.nut
路径:BaseClass/ItemClass/ItemClass.nut
创建日期:2024-04-18	15:10
文件用途:Item类
*/
class Item extends Base_C_Object {
    Attribute = null;
    IsEmpty = false;
    constructor(CObject) {
        base.constructor(CObject);
        Attribute = Sq_Point2Blob(CObject, 62);
        if (GetIndex() == 0) IsEmpty = true;
    }

    function Output() {
        local Str = "[";
        foreach(Value in Attribute) {
            Str = format("%s%02X", Str, Value);
            Str += ",";
        }
        Str += "]";
        print(Str);
    }

    //获取类型
    function GetType() {
        Attribute.seek(1);
        local Type = Attribute.readn('c');
        switch (Type) {
            case 1:
                return "装备";
            case 2:
                return "消耗品";
            case 3:
                return "材料";
            case 4:
                return "任务材料";
            case 10:
                return "副职业材料";
            default:
                return "未知类型";
        }
    }

    //获取编号
    function GetIndex() {
        Attribute.seek(2);
        return Attribute.readn('i');
    }
    //获取品级
    function GetRarity() {
        return Sq_CallFunc(S_Ptr("0x80F12D6"), "int", ["pointer"], this.C_Object);
    }
    //设置编号
    function SetIndex(Index) {
        Attribute.seek(2);
        Attribute.writen(Index, 'i');
    }

    //获取强化等级
    function GetUpgrade() {
        Attribute.seek(6);
        return Attribute.readn('c');
    }
    //设置强化等级
    function SetUpgrade(Level) {
        Attribute.seek(6);
        Attribute.writen(Level, 'c');
    }

    //获取 品级 或 数量 如果是装备就是品级 如果是其他就是数量
    function GetAdd_Info() {
        Attribute.seek(7);
        return Attribute.readn('i');
    }
    //设置 品级 或 数量 如果是装备就是品级 如果是其他就是数量
    function SetAdd_Info(Value) {
        Attribute.seek(7);
        Attribute.writen(Value, 'i');
    }

    //获取耐久度
    function GetDurable() {
        Attribute.seek(11);
        return Attribute.readn('c');
    }
    //设置耐久度
    function SetDurable(Value) {
        Attribute.seek(11);
        Attribute.writen(Value, 'c');
    }

    //获取增幅属性
    function GetAmplification() {
        Attribute.seek(17);
        return Attribute.readn('w');
    }
    //设置增幅属性
    function SetAmplification(Value) {
        Attribute.seek(17);
        Attribute.writen(Value, 'w');
    }

    //获取锻造属性
    function GetForging() {
        Attribute.seek(51);
        return Attribute.readn('c');
    }
    //设置锻造属性
    function SetForging(Value) {
        Attribute.seek(51);
        Attribute.writen(Value, 'c');
    }

    //获取附魔属性
    function GetEnchanting() {
        Attribute.seek(13);
        return Attribute.readn('i');
    }
    //设置附魔属性
    function SetEnchanting(Value) {
        Attribute.seek(13);
        Attribute.writen(Value, 'i');
    }


    //获取交易类型
    function GetAttachType() {
        return Sq_CallFunc(S_Ptr("0x80F12E2"), "int", ["pointer"], this.C_Object);
    }

    //刷写装备数据
    function Flush() {
        Sq_WriteBlobToAddress(C_Object, Attribute);
    }

    //检查是否为空
    // function IsEmpty() {
    //     return Sq_CallFunc(S_Ptr("0x811ED66"), "int", ["pointer"], this.C_Object);
    // }

    //删除道具
    function Delete() {
        Sq_Inven_RemoveItem(C_Object);
        this = null;
    }


}

//是否可打包
function Item::IsPackagble() {
    return Sq_CallFunc(S_Ptr("0x828B5B4"), "int", ["pointer"], this.C_Object);
}