chenhui540

打工系統

發表於 2026-5-1 23:54:21
chenhui540 發表於 2026-5-1 23:54:21 | 顯示全部樓層 |閱讀模式
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
7.jpg
6.jpg


源码部分

    public static byte[] getCharList(String secondpw, List<MapleCharacter> chars, int charslots) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter();

        mplew.writeShort(SendPacketOpcode.CHARLIST.getValue());

        mplew.write(0);
        mplew.write(chars.size());
        for (MapleCharacter chr : chars) {
            addCharEntry(mplew, chr, true, false);
            mplew.write(0);//104
        }
        mplew.writeShort(3);
        mplew.writeLong(charslots);
        mplew.writeReversedLong(PacketHelper.getTime(System.currentTimeMillis())); //同步客户端与服务端时间
        mplew.writeInt(0);

        return mplew.getPacket();
    }

#####################################



    /*
    打工
    */
    public static void addPartTimeJob(MaplePacketLittleEndianWriter mplew, PartTimeJob parttime) {
        mplew.write(parttime.getJob());
        if (parttime.getJob() > 0 && parttime.getJob() <= 5) {
            mplew.writeReversedLong(parttime.getTime());
        } else {
            mplew.writeReversedLong(getTime(-2));
        }
        mplew.writeInt(parttime.getReward());
        mplew.write(parttime.getReward() > 3 ? 1 : 0); // 1 2 3 普通提示 4 5 6 特殊提示
    }

##################################################################


    /*
    打工操作
    */
    public static void PartJob(LittleEndianAccessor slea, MapleClient c) {
        if (c.getPlayer() != null || !c.isLoggedIn()) {
            c.getSession().close();
            return;
        }
        final byte mode = slea.readByte();
        final int cid = slea.readInt();
        if (mode == 1) {
            final PartTimeJob partTime = MapleCharacter.getPartTime(cid);
            final byte job = slea.readByte();
            if (job < 0 || job > 5 || partTime.getReward() > 0 || (partTime.getJob() > 0 && partTime.getJob() <= 5)) {
                c.getSession().close();
                return;
            }

            partTime.setTime(PacketHelper.getTime(System.currentTimeMillis())); // 写入初始打工时间

            partTime.setJob(job);
            MapleCharacter.removePartTime(cid);
            MapleCharacter.addPartTime(partTime);
            c.getSession().write(MaplePacketCreator.updatePartTimeJob(partTime));
        } else if (mode == 2) {
            final PartTimeJob partTime = MapleCharacter.getPartTime(cid);
            if (partTime.getReward() > 0 || partTime.getJob() < 0 || partTime.getJob() > 5) {
                c.getSession().close();
                return;
            }

            long distance = (PacketHelper.getTime(System.currentTimeMillis()) - partTime.getTime()) / (60 * 60 * 10000000L);

            if (distance > 0) {
                partTime.setReward((int) (distance > 6 ? 6 : distance));
            } else {
                partTime.setJob((byte) 0);
                partTime.setReward(0);
            }
            partTime.setTime(PacketHelper.getTime(System.currentTimeMillis()));
            MapleCharacter.removePartTime(cid);
            MapleCharacter.addPartTime(partTime);
            c.getSession().write(MaplePacketCreator.updatePartTimeJob(partTime));
        }
    }
}

#########################################################


    /*
    更新打工信息
    */
    public static byte[] updatePartTimeJob(PartTimeJob partTime) {
        MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(21);
        mplew.writeShort(SendPacketOpcode.PART_TIME.getValue());

        mplew.writeInt(partTime.getCharacterId());
        /*
        1 该角色刚刚结束打工\r\n请稍后重新申请。
        2 打工系统错误,\r\n申请无法处理。
        3 打工相关请求失败。\r\n请稍后重新尝试。
        */
        mplew.write(0);
        PacketHelper.addPartTimeJob(mplew, partTime);

        return mplew.getPacket();
    }

######################################################


    /*
    清除打工数据
    */
    public static void removePartTime(int cid) {
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = DatabaseConnection.getConnection();
            ps = con.prepareStatement("DELETE FROM parttime where cid = ?");
            ps.setInt(1, cid);
            ps.executeUpdate();
        } catch (SQLException ex) {
            System.out.println("Failed to remove part time job: " + ex);
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace(System.err);
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
            }
        }
    }

    /*
    写入打工数据
    */
    public static void addPartTime(PartTimeJob partTime) {
        if (partTime.getCharacterId() < 1) {
            return;
        }
        addPartTime(partTime.getCharacterId(), partTime.getJob(), partTime.getTime(), partTime.getReward());
    }

    public static void addPartTime(int cid, byte job, long time, int reward) {
        Connection con = null;
        PreparedStatement ps = null;
        try {
            con = DatabaseConnection.getConnection();
            ps = con.prepareStatement("INSERT INTO parttime (cid, job, time, reward) VALUES (?, ?, ?, ?)");
            ps.setInt(1, cid);
            ps.setByte(2, job);
            ps.setLong(3, time);
            ps.setInt(4, reward);
            ps.execute();
        } catch (SQLException ex) {
            System.out.println("Failed to remove part time job: " + ex);
        } finally {
            try {
                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace(System.err);
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
            }
        }
    }

    /*
    查询打工数据
    */
    public static PartTimeJob getPartTime(int cid) {
        PartTimeJob partTime = new PartTimeJob(cid);

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = DatabaseConnection.getConnection();
            ps = con.prepareStatement("SELECT * FROM parttime WHERE cid = ?");
            ps.setInt(1, cid);
            rs = ps.executeQuery();
            if (rs.next()) {
                partTime.setJob(rs.getByte("job"));
                partTime.setTime(rs.getLong("time"));
                partTime.setReward(rs.getInt("reward"));
            }
        } catch (SQLException ex) {
            System.out.println("Failed to remove part time job: " + ex);
        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace(System.err);
            }
            try {
                if (ps != null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace(System.err);
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
            }
        }
        return partTime;
    }

#########################################


-- ----------------------------
-- Table structure for `parttime`
-- ----------------------------
DROP TABLE IF EXISTS `parttime`;
CREATE TABLE `parttime` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cid` int(11) NOT NULL,
  `job` tinyint(1) NOT NULL DEFAULT '0',
  `time` bigint(20) NOT NULL DEFAULT '0',
  `reward` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=euckr ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of parttime
-- ----------------------------


#######################################

PartTimeJob.rar (402 Bytes, 下載次數: 108)

会计小姐脚本.rar (6.5 KB, 下載次數: 116)














瀏覽 965 回復 1

您需要登錄後才可以回帖 登錄 | 註冊會員

返回頂部