reward.java

来自「网络游戏天堂1的java源代码。。。。。」· Java 代码 · 共 466 行

JAVA
466
字号
package l1j.william;

import java.util.ArrayList;
import java.util.StringTokenizer;
import java.sql.*;

import l1j.server.L1DatabaseFactory;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.model.L1Inventory;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_SystemMessage;

public class Reward {

	private static ArrayList array = new ArrayList();
	private static boolean GET_ITEM = false;
	public static final String TOKEN = ",";

	private Reward() {
	}

	public static void getItem(L1PcInstance pc) {
		ArrayList data = null;
		if (!GET_ITEM) {
			GET_ITEM = true;
			getItemData();
		}

		for (int i = 0; i < array.size(); i++) {
			data = (ArrayList) array.get(i);

			if (pc.getLevel() >= ((Integer) data.get(0)).intValue()
					&& (int[]) data.get(8) != null
					&& (int[]) data.get(9) != null
					&& (int[]) data.get(10) != null
					&& pc.getQuest().get_step(
							((Integer) data.get(11)).intValue()) != ((Integer) data
							.get(12)).intValue()) { // 等級符合

				if (((Integer) data.get(1)).intValue() != 0 && pc.isCrown()) {// 王族
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 強化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない場合は地面に落とす 處理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(2)).intValue() != 0 && pc.isKnight()) {// 騎士
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 強化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない場合は地面に落とす 處理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(3)).intValue() != 0 && pc.isWizard()) {// 法師
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 強化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない場合は地面に落とす 處理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(4)).intValue() != 0 && pc.isElf()) {// 妖精
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 強化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない場合は地面に落とす 處理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(5)).intValue() != 0 && pc.isDarkelf()) {// 黑妖
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 強化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない場合は地面に落とす 處理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(6)).intValue() != 0
						&& pc.isDragonKnight()) {// 龍騎士
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 强化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない场合は地面に落とす 处理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}

				if (((Integer) data.get(7)).intValue() != 0
						&& pc.isIllusionist()) {// 幻術師
					boolean isGet = false;
					int[] materials = (int[]) data.get(8);
					int[] counts = (int[]) data.get(9);
					int[] enchantLevel = (int[]) data.get(10);

					for (int j = 0; j < materials.length; j++) {
						L1ItemInstance item = ItemTable.getInstance()
								.createItem(materials[j]);

						if (item.isStackable()) {// 可重疊
							item.setCount(counts[j]);// 數量
						} else {
							item.setCount(1);
						}

						if (item.getItem().getType2() == 1 || // 武器類
								item.getItem().getType2() == 2) { // 防具類
							item.setEnchantLevel(enchantLevel[j]);// 强化數
						} else {
							item.setEnchantLevel(0);
						}

						if (item != null) {
							if ((String) data.get(13) != null && isGet == false) {
								pc.sendPackets(new S_SystemMessage(
										(String) data.get(13)));// 訊息
								isGet = true;
							}

							if (pc.getInventory().checkAddItem(item,
									(counts[j])) == L1Inventory.OK) {
								pc.getInventory().storeItem(item);
							} else { // 持てない场合は地面に落とす 处理のキャンセルはしない(不正防止)
								L1World.getInstance().getInventory(pc.getX(),
										pc.getY(), pc.getMapId()).storeItem(
										item);
							}

							pc.sendPackets(new S_ServerMessage(403, item
									.getLogName()));

							// 紀錄
							pc.getQuest().set_step(
									((Integer) data.get(11)).intValue(),
									((Integer) data.get(12)).intValue());
						}
					}
				}
			}
		}
	}

	private static void getItemData() {
		java.sql.Connection con = null;
		try {
			con = L1DatabaseFactory.getInstance().getConnection();
			Statement stat = con.createStatement();
			ResultSet rset = stat.executeQuery("SELECT * FROM william_reward");
			ArrayList arraylist = null;
			if (rset != null)
				while (rset.next()) {
					arraylist = new ArrayList();
					arraylist.add(0, new Integer(rset.getInt("level")));
					arraylist.add(1, new Integer(rset.getInt("give_royal")));// 王族
					arraylist.add(2, new Integer(rset.getInt("give_knight")));// 騎士
					arraylist.add(3, new Integer(rset.getInt("give_mage")));// 法師
					arraylist.add(4, new Integer(rset.getInt("give_elf")));// 妖精
					arraylist.add(5, new Integer(rset.getInt("give_darkelf")));// 黑妖
					arraylist.add(6, new Integer(rset
							.getInt("give_dragonKnight")));// 龍騎士
					arraylist.add(7, new Integer(rset
							.getInt("give_illusionist")));// 幻術師
					arraylist.add(8, getArray(rset.getString("getItem"), TOKEN,
							1));// 獎勵道具
					arraylist.add(9,
							getArray(rset.getString("count"), TOKEN, 1));// 獎勵道具(數量)
					arraylist.add(10, getArray(rset.getString("enchantlvl"),
							TOKEN, 1));// 獎勵道具(強化值、次數)
					arraylist.add(11, new Integer(rset.getInt("quest_id")));// 紀錄
					arraylist.add(12, new Integer(rset.getInt("quest_step")));// 紀錄
					arraylist.add(13, rset.getString("message"));// 訊息
					array.add(arraylist);
				}
			if (con != null && !con.isClosed())
				con.close();
		} catch (Exception ex) {
		}
	}

	private static Object getArray(String s, String sToken, int iType) {
		StringTokenizer st = new StringTokenizer(s, sToken);
		int iSize = st.countTokens();
		String sTemp = null;
		if (iType == 1) { // int
			int[] iReturn = new int[iSize];
			for (int i = 0; i < iSize; i++) {
				sTemp = st.nextToken();
				iReturn[i] = Integer.parseInt(sTemp);
			}
			return iReturn;
		}
		if (iType == 2) { // String
			String[] sReturn = new String[iSize];
			for (int i = 0; i < iSize; i++) {
				sTemp = st.nextToken();
				sReturn[i] = sTemp;
			}
			return sReturn;
		}
		if (iType == 3) { // String
			String sReturn = null;
			for (int i = 0; i < iSize; i++) {
				sTemp = st.nextToken();
				sReturn = sTemp;
			}
			return sReturn;
		}
		return null;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?