使用Java来处理C++存储在数据库中的Blob数据。

73 篇文章 1 订阅

 面对这个问题的原因其实很简单,游戏项目,服务器采用C++开发,用户数据以二进制数据保存在mysql中,对应数据类型为Blob。

现在,公司想要通过web查看到这些玩家的数据,顾,需要读取mysql,玩家的二进制数据包,进行拆分,这样不仅面对Java对Blob数据的处理,还要进行Java与C++数据的转换。

 

公有类:

package cn.vicky.utils;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**  
 * 仅仅适用于 Java 与 C++ 通讯中,网络流解析与生成使用  
 *  
 * 高低位互换(Big-Endian 大头在前 & Little-Endian 小头在前)。  
 * 举例而言,有一个4字节的数据0x01020304,要存储在内存中或文件中编号0˜3字节的位置,两种字节序的排列方式分别如下:  
 * <pre>  
 * Big Endian  
 *    
 * 低地址                           高地址  
 * ----------------------------------------------------+ 
 * 地址编号  
 * |     0      |      1     |     2       |      3    |  
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
 * |     01     |      02    |     03      |     04    |  
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
 *   
 * Little Endian  
 *   
 * 低地址                           高地址  
 * ----------------------------------------------------+ 
 * 地址编号  
 * |     0      |      1     |     2       |      3    |  
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
 * |     04     |      03    |     02      |     01    |  
 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+  
 * </pre>  
 * Java则统一使用big模式  
 * c中的unsigned short  对应着java中的char两个字节,无符号  
 * c的无符号int,short,byte字节数组,相应转换成java的long,char,short  
 *  
 * @author Snowolf  
 * @version 1.0  
 * @since 1.0  
 */
public abstract class CIOUtil {

    public static final String CHARSET = "UTF-8";

    /**  
     * 从输入流中读布尔   
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static boolean readBoolean(DataInputStream is) throws IOException {
        return is.readBoolean();
    }

    /**  
     * 从流中读定长度字节数组  
     *   
     * @param is  
     * @param s  
     * @return  
     * @throws IOException  
     */
    public static byte[] readBytes(DataInputStream is, int i)
            throws IOException {
        byte[] data = new byte[i];
        is.readFully(data);

        return data;
    }

    /**  
     * 从输入流中读字符   
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static char readChar(DataInputStream is) throws IOException {
        return (char) readShort(is);
    }

    /**  
     * 从输入流中读双精度   
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static double readDouble(DataInputStream is) throws IOException {
        return Double.longBitsToDouble(readLong(is));
    }

    /**  
     * 从输入流中读单精度  
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static float readFloat(DataInputStream is) throws IOException {
        return Float.intBitsToFloat(readInt(is));
    }

    /**  
     * 从流中读整型  
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static int readInt(DataInputStream is) throws IOException {
        return Integer.reverseBytes(is.readInt());
    }

    /**  
     * 从流中读长整型  
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static long readLong(DataInputStream is) throws IOException {
        return Long.reverseBytes(is.readLong());
    }

    /**  
     * 从流中读短整型  
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static short readShort(DataInputStream is) throws IOException {
        return Short.reverseBytes(is.readShort());
    }

    /**  
     * 从输入流中读字符串 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串  
     *   
     * @param is  
     * @return  
     * @throws IOException  
     */
    public static String readUTF(DataInputStream is) throws IOException {
        short s = readShort(is);
        byte[] str = new byte[s];

        is.readFully(str);

        return new String(str, CHARSET);
    }

    /**  
     * 向输出流中写布尔  
     *   
     * @param os  
     * @param b  
     * @throws IOException  
     */
    public static void writeBoolean(DataOutputStream os, boolean b)
            throws IOException {
        os.writeBoolean(b);
    }

    /**  
     * 向输出流中写字节数组  
     *   
     * @param os  
     * @param data  
     * @throws IOException  
     */
    public static void writeBytes(DataOutputStream os, byte[] data)
            throws IOException {
        os.write(data);
    }

    /**  
     * 向输出流中写字符  
     *   
     * @param os  
     * @param b  
     * @throws IOException  
     */
    public static void writeChar(DataOutputStream os, char b)
            throws IOException {
        writeShort(os, (short) b);
    }

    /**  
     * 向输出流中写双精度  
     *   
     * @param os  
     * @param d  
     * @throws IOException  
     */
    public static void writeDouble(DataOutputStream os, double d)
            throws IOException {
        writeLong(os, Double.doubleToLongBits(d));
    }

    /**  
     * 向输出流中写单精度  
     *   
     * @param os  
     * @param f  
     * @throws IOException  
     */
    public static void writeFloat(DataOutputStream os, float f)
            throws IOException {
        writeInt(os, Float.floatToIntBits(f));
    }

    /**  
     * 向输出流中写整型  
     *   
     * @param os  
     * @param i  
     * @throws IOException  
     */
    public static void writeInt(DataOutputStream os, int i) throws IOException {
        os.writeInt(Integer.reverseBytes(i));
    }

    /**  
     * 向输出流中写长整型  
     *   
     * @param os  
     * @param l  
     * @throws IOException  
     */
    public static void writeLong(DataOutputStream os, long l)
            throws IOException {
        os.writeLong(Long.reverseBytes(l));
    }

    /**  
     * 向输出流中写短整型  
     *   
     * @param os  
     * @param s  
     * @throws IOException  
     */
    public static void writeShort(DataOutputStream os, short s)
            throws IOException {
        os.writeShort(Short.reverseBytes(s));
    }

    /**  
     * 向输出流中写字符串 字符串 结构 为 一个指定字符串字节长度的短整型+实际字符串  
     *   
     * @param os  
     * @param str  
     * @throws IOException  
     */
    public static void writeUTF(DataOutputStream os, String str)
            throws IOException {
        byte[] data = str.getBytes(CHARSET);
        writeShort(os, (short) data.length);
        os.write(data);
    }
}


 

测试类,读取mysql的blob数据,进行处理。

 

package cn.vicky.blob;

import cn.vicky.dao.DB;
import cn.vicky.dao.DBImpl;
import cn.vicky.utils.CIOUtil;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Vicky.H
 */
public class BlobData {

    public static void main(String[] args) {
        DB db = new DBImpl("192.168.1.96", 3306, "solokingrole", "root", "123456");
        String sql = "select * from roledata where roleid = 2";
        db.getCon();
        db.doPstm(sql);
        try {
            ResultSet set = db.getRs();
            while (set.next()) {
                System.out.println(set.getObject(1));
                System.out.println(set.getObject(2));
                Blob blob = set.getBlob(3);
                System.out.println(blob);
                InputStream is = blob.getBinaryStream();
                DataInputStream dis = new DataInputStream(is);
                try {
                    // Player.h struct stPlayerContexts
                    System.out.println("版本号 : " + CIOUtil.readShort(dis)); // stPlayerContext.nMainVision
                    
                        // stPlayerContext struct stPROPERTY playerProperty 人物属性表
                        System.out.println("最大血量 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nMaxHp
                        System.out.println("当前血量 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nHp
                        System.out.println("最大魔法值 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nMaxEp
                        System.out.println("当前魔法值 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nEp
                        System.out.println("攻击力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nAtk
                        System.out.println("火焰攻击力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nFireAtk
                        System.out.println("冰霜攻击力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nIceAtk
                        System.out.println("物理防御力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPhyDef
                        System.out.println("魔法防御力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nMgcDef
                        System.out.println("命中 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nHit
                        System.out.println("暴击 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nCritRate
                        System.out.println("暴击伤害 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreCritDmg
                        System.out.println("闪避 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nMissRate
                        System.out.println("抗暴能力 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nMisCritRate
                        System.out.println("当前经验 : " + CIOUtil.readInt(dis)); // stPlayerContext.playerProperty.nExp
                        System.out.println("最大经验 : " + CIOUtil.readInt(dis)); // stPlayerContext.playerProperty.nMaxExp
                        System.out.println("火耐 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreFireRestrain
                        System.out.println("冰耐 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreIceRestrain
                        System.out.println("异耐 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreNegRestrain
                        System.out.println("物理免疫 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPhyImanity
                        System.out.println("疲劳度 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.playerProperty.nTired
                        System.out.println("经验倍率 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreExpTimes
                        System.out.println("nSuckRate : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nSuckRate
                        System.out.println("nSuckhpNum : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nSuckhpNum
                        System.out.println("nPreSuckHp : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nPreSuckHp
                        System.out.println("nSuckAp : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nSuckAp
                        System.out.println("nSuckSp : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nSuckSp
                        System.out.println("nSuckMp : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nSuckMp
                        System.out.println("nCurse : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nCurse
                        System.out.println("攻击速度 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nAtkSpeed
                        System.out.println("移动速度 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.playerProperty.byMoveSpeed
                        System.out.println("声望值 : " + CIOUtil.readInt(dis)); // stPlayerContext.playerProperty.nPrestige
                        System.out.println("罪恶值 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nEvil
                        System.out.println("战场疲劳度 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.playerProperty.nArenaTire
                        System.out.println("雷属性 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nThunder
                        System.out.println("雷抗性 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nThunderRestrain
                        System.out.println("预留1 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[0]
                        System.out.println("预留2 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[1]
                        System.out.println("预留3 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[2]
                        System.out.println("预留4 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[3]
                        System.out.println("预留5 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[4]
                        System.out.println("预留6 : " + CIOUtil.readShort(dis)); // stPlayerContext.playerProperty.nReserve[5]
                        
                        // stPlayerContext struct stPlayerSkill sPlayerSkill 人物技能表
                        System.out.println("技能个数 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.sPlayerSkill.nSkillNum
                        System.out.println("总共技能点 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.sPlayerSkill.byTotalSkillPoint
                        System.out.println("剩余技能点 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.sPlayerSkill.byRemainPoint
                        // stPlayerContext.sPlayerSkill.sSkill 技能结构
                        for (int i = 1; i < 31; i++) {
                            System.out.println("技能结构["+i+"].技能id : " + CIOUtil.readShort(dis)); // stPlayerContext.sPlayerSkill.sSkill.nSkill
                            System.out.println("技能结构["+i+"].剩余cd时间 : " + CIOUtil.readInt(dis)); // stPlayerContext.sPlayerSkill.sSkill.nCoolDownTime
                            System.out.println("技能结构["+i+"].剩余cd时间 : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.sPlayerSkill.sSkill.nCoolDownTime
                        }
                        // stPlayerContext.sPlayerSkill.sEffect buff结构
                        for (int i = 1; i < 11; i++) {
                            System.out.println("buff结构["+i+"].nEffectId : " + CIOUtil.readInt(dis)); // stPlayerContext.sPlayerSkill.sEffect.nEffectId
                            for (int j = 1; j < 6; j++) {
                                System.out.println("buff结构["+i+"]["+j+"].nCycTime : " + CIOUtil.readInt(dis)); // stPlayerContext.sPlayerSkill.sEffect.nCycTime
                                System.out.println("buff结构["+i+"]["+j+"].byEffectType : " + CIOUtil.readBytes(dis,1)[0]); // stPlayerContext.sPlayerSkill.sEffect.byEffectType
                                System.out.println("buff结构["+i+"]["+j+"].nNum : " + CIOUtil.readShort(dis)); // stPlayerContext.sPlayerSkill.sEffect.nNum
                            }
                        }
                        
                        // stPlayerItems
                        // stPlayerItems.stItems
                        for (int i = 1; i < 61; i++) {
                            
                        }
                } catch (IOException ex) {
                    Logger.getLogger(BlobData.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    try {
                        dis.close();
                        is.close();
                    } catch (IOException ex) {
                        Logger.getLogger(BlobData.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(BlobData.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            db.close();
        }
    }
}


 

输出结果:

 

run:
select * from roledata where roleid = 2
2
0
com.mysql.jdbc.Blob@e2eec8
版本号 : 1000
最大血量 : 140
当前血量 : 140
最大魔法值 : 100
当前魔法值 : 100
攻击力 : 24
火焰攻击力 : 0
冰霜攻击力 : 0
物理防御力 : 26
魔法防御力 : 20
命中 : 9300
暴击 : 300
暴击伤害 : 15000
闪避 : 300
抗暴能力 : 0
当前经验 : 0
最大经验 : 9
火耐 : 0
冰耐 : 0
异耐 : 0
物理免疫 : 0
疲劳度 : 100
经验倍率 : 0
nSuckRate : 0
nSuckhpNum : 0
nPreSuckHp : 0
nSuckAp : 0
nSuckSp : 0
nSuckMp : 0
nCurse : 0
攻击速度 : 1000
移动速度 : 60
声望值 : 0
罪恶值 : 0
战场疲劳度 : 100
雷属性 : 0
雷抗性 : 0
预留1 : 0
预留2 : 0
预留3 : 0
预留4 : 0
预留5 : 0
预留6 : 0
技能个数 : 0
总共技能点 : 0
剩余技能点 : 0
技能结构[1].技能id : 0
技能结构[1].剩余cd时间 : 256
技能结构[1].剩余cd时间 : -119
技能结构[2].技能id : 19
技能结构[2].剩余cd时间 : 16777216
技能结构[2].剩余cd时间 : 0
技能结构[3].技能id : 0
技能结构[3].剩余cd时间 : 0
技能结构[3].剩余cd时间 : 0
技能结构[4].技能id : 0
技能结构[4].剩余cd时间 : 0
技能结构[4].剩余cd时间 : 0
技能结构[5].技能id : 0
技能结构[5].剩余cd时间 : 0
技能结构[5].剩余cd时间 : 0
技能结构[6].技能id : 0
技能结构[6].剩余cd时间 : 0
技能结构[6].剩余cd时间 : 0
技能结构[7].技能id : 0
技能结构[7].剩余cd时间 : 0
技能结构[7].剩余cd时间 : 0
技能结构[8].技能id : 0
技能结构[8].剩余cd时间 : 0
技能结构[8].剩余cd时间 : 0
技能结构[9].技能id : 0
技能结构[9].剩余cd时间 : 0
技能结构[9].剩余cd时间 : 0
技能结构[10].技能id : 0
技能结构[10].剩余cd时间 : 0
技能结构[10].剩余cd时间 : 0
技能结构[11].技能id : 0
技能结构[11].剩余cd时间 : 0
技能结构[11].剩余cd时间 : 0
技能结构[12].技能id : 0
技能结构[12].剩余cd时间 : 0
技能结构[12].剩余cd时间 : 0
技能结构[13].技能id : 0
技能结构[13].剩余cd时间 : 0
技能结构[13].剩余cd时间 : 0
技能结构[14].技能id : 0
技能结构[14].剩余cd时间 : 0
技能结构[14].剩余cd时间 : 0
技能结构[15].技能id : 0
技能结构[15].剩余cd时间 : 0
技能结构[15].剩余cd时间 : 0
技能结构[16].技能id : 0
技能结构[16].剩余cd时间 : 0
技能结构[16].剩余cd时间 : 0
技能结构[17].技能id : 0
技能结构[17].剩余cd时间 : 0
技能结构[17].剩余cd时间 : 0
技能结构[18].技能id : 0
技能结构[18].剩余cd时间 : 0
技能结构[18].剩余cd时间 : 0
技能结构[19].技能id : 0
技能结构[19].剩余cd时间 : 0
技能结构[19].剩余cd时间 : 0
技能结构[20].技能id : 0
技能结构[20].剩余cd时间 : 0
技能结构[20].剩余cd时间 : 0
技能结构[21].技能id : 0
技能结构[21].剩余cd时间 : 0
技能结构[21].剩余cd时间 : 0
技能结构[22].技能id : 0
技能结构[22].剩余cd时间 : 0
技能结构[22].剩余cd时间 : 0
技能结构[23].技能id : 0
技能结构[23].剩余cd时间 : 0
技能结构[23].剩余cd时间 : 0
技能结构[24].技能id : 0
技能结构[24].剩余cd时间 : 0
技能结构[24].剩余cd时间 : 0
技能结构[25].技能id : 0
技能结构[25].剩余cd时间 : 0
技能结构[25].剩余cd时间 : 0
技能结构[26].技能id : 0
技能结构[26].剩余cd时间 : 0
技能结构[26].剩余cd时间 : 0
技能结构[27].技能id : 0
技能结构[27].剩余cd时间 : 0
技能结构[27].剩余cd时间 : 0
技能结构[28].技能id : 0
技能结构[28].剩余cd时间 : 0
技能结构[28].剩余cd时间 : 0
技能结构[29].技能id : 0
技能结构[29].剩余cd时间 : 0
技能结构[29].剩余cd时间 : 0
技能结构[30].技能id : 0
技能结构[30].剩余cd时间 : 0
技能结构[30].剩余cd时间 : 0
buff结构[1].nEffectId : 0
buff结构[1][1].nCycTime : 0
buff结构[1][1].byEffectType : 0
buff结构[1][1].nNum : 0
buff结构[1][2].nCycTime : 0
buff结构[1][2].byEffectType : 0
buff结构[1][2].nNum : 0
buff结构[1][3].nCycTime : 0
buff结构[1][3].byEffectType : 0
buff结构[1][3].nNum : 0
buff结构[1][4].nCycTime : 0
buff结构[1][4].byEffectType : 0
buff结构[1][4].nNum : 0
buff结构[1][5].nCycTime : 0
buff结构[1][5].byEffectType : 0
buff结构[1][5].nNum : 0
buff结构[2].nEffectId : 0
buff结构[2][1].nCycTime : 0
buff结构[2][1].byEffectType : 0
buff结构[2][1].nNum : 0
buff结构[2][2].nCycTime : 0
buff结构[2][2].byEffectType : 0
buff结构[2][2].nNum : 0
buff结构[2][3].nCycTime : 0
buff结构[2][3].byEffectType : 0
buff结构[2][3].nNum : 0
buff结构[2][4].nCycTime : 0
buff结构[2][4].byEffectType : 0
buff结构[2][4].nNum : 0
buff结构[2][5].nCycTime : 0
buff结构[2][5].byEffectType : 0
buff结构[2][5].nNum : 0
buff结构[3].nEffectId : 0
buff结构[3][1].nCycTime : 0
buff结构[3][1].byEffectType : 0
buff结构[3][1].nNum : 0
buff结构[3][2].nCycTime : 0
buff结构[3][2].byEffectType : 0
buff结构[3][2].nNum : 0
buff结构[3][3].nCycTime : 0
buff结构[3][3].byEffectType : 0
buff结构[3][3].nNum : 0
buff结构[3][4].nCycTime : 0
buff结构[3][4].byEffectType : 0
buff结构[3][4].nNum : 0
buff结构[3][5].nCycTime : 0
buff结构[3][5].byEffectType : 0
buff结构[3][5].nNum : 0
buff结构[4].nEffectId : 0
buff结构[4][1].nCycTime : 0
buff结构[4][1].byEffectType : 0
buff结构[4][1].nNum : 0
buff结构[4][2].nCycTime : 0
buff结构[4][2].byEffectType : 0
buff结构[4][2].nNum : 0
buff结构[4][3].nCycTime : 0
buff结构[4][3].byEffectType : 0
buff结构[4][3].nNum : 0
buff结构[4][4].nCycTime : 0
buff结构[4][4].byEffectType : 0
buff结构[4][4].nNum : 0
buff结构[4][5].nCycTime : 0
buff结构[4][5].byEffectType : 0
buff结构[4][5].nNum : 0
buff结构[5].nEffectId : 0
buff结构[5][1].nCycTime : 0
buff结构[5][1].byEffectType : 0
buff结构[5][1].nNum : 0
buff结构[5][2].nCycTime : 0
buff结构[5][2].byEffectType : 0
buff结构[5][2].nNum : 0
buff结构[5][3].nCycTime : 0
buff结构[5][3].byEffectType : 0
buff结构[5][3].nNum : 0
buff结构[5][4].nCycTime : 0
buff结构[5][4].byEffectType : 0
buff结构[5][4].nNum : 0
buff结构[5][5].nCycTime : 0
buff结构[5][5].byEffectType : 0
buff结构[5][5].nNum : 0
buff结构[6].nEffectId : 0
buff结构[6][1].nCycTime : 0
buff结构[6][1].byEffectType : 0
buff结构[6][1].nNum : 0
buff结构[6][2].nCycTime : 0
buff结构[6][2].byEffectType : 0
buff结构[6][2].nNum : 0
buff结构[6][3].nCycTime : 0
buff结构[6][3].byEffectType : 0
buff结构[6][3].nNum : 0
buff结构[6][4].nCycTime : 0
buff结构[6][4].byEffectType : 0
buff结构[6][4].nNum : 0
buff结构[6][5].nCycTime : 0
buff结构[6][5].byEffectType : 0
buff结构[6][5].nNum : 0
buff结构[7].nEffectId : 0
buff结构[7][1].nCycTime : 0
buff结构[7][1].byEffectType : 0
buff结构[7][1].nNum : 0
buff结构[7][2].nCycTime : 0
buff结构[7][2].byEffectType : 0
buff结构[7][2].nNum : 0
buff结构[7][3].nCycTime : 0
buff结构[7][3].byEffectType : 4
buff结构[7][3].nNum : -512
buff结构[7][4].nCycTime : -888927745
buff结构[7][4].byEffectType : 78
buff结构[7][4].nNum : 216
buff结构[7][5].nCycTime : 0
buff结构[7][5].byEffectType : 0
buff结构[7][5].nNum : 16640
buff结构[8].nEffectId : 65542
buff结构[8][1].nCycTime : 0
buff结构[8][1].byEffectType : 0
buff结构[8][1].nNum : 0
buff结构[8][2].nCycTime : 0
buff结构[8][2].byEffectType : 0
buff结构[8][2].nNum : 0
buff结构[8][3].nCycTime : 0
buff结构[8][3].byEffectType : 0
buff结构[8][3].nNum : 0
buff结构[8][4].nCycTime : 0
buff结构[8][4].byEffectType : 0
buff结构[8][4].nNum : 0
buff结构[8][5].nCycTime : 0
buff结构[8][5].byEffectType : 0
buff结构[8][5].nNum : 0
buff结构[9].nEffectId : 0
buff结构[9][1].nCycTime : 0
buff结构[9][1].byEffectType : 0
buff结构[9][1].nNum : 0
buff结构[9][2].nCycTime : 0
buff结构[9][2].byEffectType : 0
buff结构[9][2].nNum : 0
buff结构[9][3].nCycTime : 0
buff结构[9][3].byEffectType : 0
buff结构[9][3].nNum : 0
buff结构[9][4].nCycTime : 0
buff结构[9][4].byEffectType : 0
buff结构[9][4].nNum : 0
buff结构[9][5].nCycTime : 0
buff结构[9][5].byEffectType : 0
buff结构[9][5].nNum : 0
buff结构[10].nEffectId : 0
buff结构[10][1].nCycTime : 0
buff结构[10][1].byEffectType : 0
buff结构[10][1].nNum : 0
buff结构[10][2].nCycTime : 0
buff结构[10][2].byEffectType : 0
buff结构[10][2].nNum : 0
buff结构[10][3].nCycTime : 0
buff结构[10][3].byEffectType : 0
buff结构[10][3].nNum : 0
buff结构[10][4].nCycTime : 0
buff结构[10][4].byEffectType : 0
buff结构[10][4].nNum : 0
buff结构[10][5].nCycTime : 0
buff结构[10][5].byEffectType : 0
buff结构[10][5].nNum : 0
成功生成(总时间:7 秒)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值