📄 c_result.java
字号:
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package l1j.server.server.clientpackets;
import java.util.ArrayList;
import java.util.logging.Logger;
import l1j.server.Config;
import l1j.server.server.ClientThread;
import l1j.server.server.datatables.ShopTable;
import l1j.server.server.model.L1Clan;
import l1j.server.server.model.L1Inventory;
import l1j.server.server.model.L1Object;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.item.L1ItemId;
import l1j.server.server.model.shop.L1Shop;
import l1j.server.server.model.shop.L1ShopBuyOrderList;
import l1j.server.server.model.shop.L1ShopSellOrderList;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_SystemMessage;
import l1j.server.server.templates.L1PrivateShopBuyList;
import l1j.server.server.templates.L1PrivateShopSellList;
public class C_Result extends ClientBasePacket {
private static l1j.eric.EricLogger _log = l1j.eric.EricLogger.getLogger2(C_Result.class
.getName());
private static final String C_RESULT = "[C] C_Result";
public C_Result(byte abyte0[], ClientThread clientthread)
throws Exception {
super(abyte0);
int npcObjectId = readD();
int resultType = readC();
int size = readC();
int unknown = readC();
L1PcInstance pc = clientthread.getActiveChar();
int level = pc.getLevel();
int npcId = 0;
String npcImpl = "";
boolean isPrivateShop = false;
boolean tradable = true;
L1Object findObject = L1World.getInstance().findObject(npcObjectId);
if (findObject != null) {
int diffLocX = Math.abs(pc.getX() - findObject.getX());
int diffLocY = Math.abs(pc.getY() - findObject.getY());
// 3マス以上離れた場合アクション無效
//新增購買商店捲軸 by eric1300460
if ((diffLocX > 3 || diffLocY > 3)&& !Config.SCROLL_SHOP) {
return;
}
//~新增購買商店捲軸 by eric1300460
if (findObject instanceof L1NpcInstance) {
L1NpcInstance targetNpc = (L1NpcInstance) findObject;
npcId = targetNpc.getNpcTemplate().get_npcId();
npcImpl = targetNpc.getNpcTemplate().getImpl();
} else if (findObject instanceof L1PcInstance) {
isPrivateShop = true;
}
}
if (resultType == 0 && size != 0
&& npcImpl.equalsIgnoreCase("L1Merchant")) { // アイテム購入
L1Shop shop = ShopTable.getInstance().get(npcId);
L1ShopBuyOrderList orderList = shop.newBuyOrderList();
for (int i = 0; i < size; i++) {
orderList.add(readD(), readD());
}
shop.sellItems(pc, orderList);
} else if (resultType == 1 && size != 0
&& npcImpl.equalsIgnoreCase("L1Merchant")) { // アイテム売却
L1Shop shop = ShopTable.getInstance().get(npcId);
L1ShopSellOrderList orderList = shop.newSellOrderList(pc);
for (int i = 0; i < size; i++) {
orderList.add(readD(), readD());
}
shop.buyItems(orderList);
} else if (resultType == 2 && size != 0
&& npcImpl.equalsIgnoreCase("L1Dwarf") && level >= 5) { // 自分の倉庫に格納
int objectId, count;
for (int i = 0; i < size; i++) {
tradable = true;
objectId = readD();
count = readD();
L1Object object = pc.getInventory().getItem(objectId);
L1ItemInstance item = (L1ItemInstance) object;
if (!item.getItem().isTradable()) {
tradable = false;
pc.sendPackets(new S_ServerMessage(210, item.getItem()
.getName())); // \f1%0は捨てたりまたは他人に讓ることができません。
}
Object[] petlist = pc.getPetList().values().toArray();
for (Object petObject : petlist) {
if (petObject instanceof L1PetInstance) {
L1PetInstance pet = (L1PetInstance) petObject;
if (item.getId() == pet.getItemObjId()) {
tradable = false;
// \f1%0は捨てたりまたは他人に讓ることができません。
pc.sendPackets(new S_ServerMessage(210, item
.getItem().getName()));
break;
}
}
}
if (pc.getDwarfInventory().checkAddItemToWarehouse(item, count,
L1Inventory.WAREHOUSE_TYPE_PERSONAL) == L1Inventory
.SIZE_OVER) {
pc.sendPackets(new S_ServerMessage(75)); // \f1これ以上ものを置く場所がありません。
break;
}
if (tradable) {
pc.getInventory().tradeItem(objectId, count,
pc.getDwarfInventory());
pc.turnOnOffLight();
}
}
} else if (resultType == 3 && size != 0
&& npcImpl.equalsIgnoreCase("L1Dwarf") && level >= 5) { // 自分の倉庫から取り出し
int objectId, count;
L1ItemInstance item;
for (int i = 0; i < size; i++) {
objectId = readD();
count = readD();
item = pc.getDwarfInventory().getItem(objectId);
if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) // 容量重量確認及びメッセージ送信
{
if (pc.getInventory().consumeItem(L1ItemId.ADENA, 30)) {
pc.getDwarfInventory().tradeItem(item, count,
pc.getInventory());
} else {
pc.sendPackets(new S_ServerMessage(189)); // \f1アデナが不足しています。
break;
}
} else {
pc.sendPackets(new S_ServerMessage(270)); // \f1持っているものが重くて取引できません。
break;
}
}
} else if (resultType == 4 && size != 0
&& npcImpl.equalsIgnoreCase("L1Dwarf") && level >= 5) { // クラン倉庫に格納
int objectId, count;
if (pc.getClanid() != 0) { // クラン所属
for (int i = 0; i < size; i++) {
tradable = true;
objectId = readD();
count = readD();
L1Clan clan = L1World.getInstance().getClan(
pc.getClanname());
L1Object object = pc.getInventory().getItem(objectId);
L1ItemInstance item = (L1ItemInstance) object;
if (clan != null) {
if (!item.getItem().isTradable()) {
tradable = false;
pc.sendPackets(new S_ServerMessage(210, item
.getItem().getName())); // \f1%0は捨てたりまたは他人に讓ることができません。
}
Object[] petlist = pc.getPetList().values().toArray();
for (Object petObject : petlist) {
if (petObject instanceof L1PetInstance) {
L1PetInstance pet = (L1PetInstance) petObject;
if (item.getId() == pet.getItemObjId()) {
tradable = false;
// \f1%0は捨てたりまたは他人に讓ることができません。
pc.sendPackets(new S_ServerMessage(210,
item.getItem().getName()));
break;
}
}
}
if (clan.getDwarfForClanInventory()
.checkAddItemToWarehouse(item, count,
L1Inventory.WAREHOUSE_TYPE_CLAN)
== L1Inventory.SIZE_OVER) {
pc.sendPackets(new S_ServerMessage(75)); // \f1これ以上ものを置く場所がありません。
break;
}
if (tradable) {
pc.getInventory().tradeItem(objectId, count,
clan.getDwarfForClanInventory());
pc.turnOnOffLight();
}
}
}
} else {
pc.sendPackets(new S_ServerMessage(208)); // \f1血盟倉庫を使用するには血盟に加入していなくてはなりません。
}
} else if (resultType == 5 && size != 0
&& npcImpl.equalsIgnoreCase("L1Dwarf") && level >= 5) { // クラン倉庫から取り出し
int objectId, count;
L1ItemInstance item;
L1Clan clan = L1World.getInstance().getClan(pc.getClanname());
if (clan != null) {
for (int i = 0; i < size; i++) {
objectId = readD();
count = readD();
item = clan.getDwarfForClanInventory().getItem(objectId);
if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) { // 容量重量確認及びメッセージ送信
if (pc.getInventory().consumeItem(L1ItemId.ADENA, 30)) {
clan.getDwarfForClanInventory().tradeItem(item,
count, pc.getInventory());
} else {
pc.sendPackets(new S_ServerMessage(189)); // \f1アデナが不足しています。
break;
}
} else {
pc.sendPackets(new S_ServerMessage(270)); // \f1持っているものが重くて取引できません。
break;
}
}
clan.setWarehouseUsingChar(0); // クラン倉庫のロックを解除
}
} else if (resultType == 5 && size == 0
&& npcImpl.equalsIgnoreCase("L1Dwarf")) { // クラン倉庫から取り出し中にCancel、または、ESCキー
L1Clan clan = L1World.getInstance().getClan(pc.getClanname());
if (clan != null) {
clan.setWarehouseUsingChar(0); // クラン倉庫のロックを解除
}
} else if (resultType == 8 && size != 0
&& npcImpl.equalsIgnoreCase("L1Dwarf") && level >= 5 && pc
.isElf()) { // 自分のエルフ倉庫に格納
int objectId, count;
for (int i = 0; i < size; i++) {
tradable = true;
objectId = readD();
count = readD();
L1Object object = pc.getInventory().getItem(objectId);
L1ItemInstance item = (L1ItemInstance) object;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -