/*
* Copyright 2014 The Skfiy Open Association.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.skfiy.typhon.action;
import javax.inject.Singleton;
import org.skfiy.typhon.annotation.Action;
import org.skfiy.typhon.domain.Bag.Node;
import org.skfiy.typhon.domain.Player;
import org.skfiy.typhon.domain.item.TroopItem;
import org.skfiy.typhon.packet.ItemApplied;
import org.skfiy.typhon.packet.ItemSell;
import org.skfiy.typhon.packet.MultipleItemApplied;
import org.skfiy.typhon.packet.MultipleItemApplied.Element;
import org.skfiy.typhon.packet.MultipleValue;
import org.skfiy.typhon.packet.Namespaces;
import org.skfiy.typhon.packet.Packet;
import org.skfiy.typhon.packet.PacketError;
import org.skfiy.typhon.session.SessionUtils;
/**
*
* @author Administrator
*/
@Singleton
public class ItemAction {
@Action(Namespaces.ITEM_APPLY)
public void apply(ItemApplied packet) {
Player player = SessionUtils.getPlayer();
Node node = player.getBag().findNode(packet.getPos());
if (node == null) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Not found item[" + packet.getPos() + "]");
player.getSession().write(error);
return;
}
node.getItem().getScript().invoke(player.getSession(),
new Object[]{node.getItem(), packet.getTargetPos()});
player.getBag().decrementTotal(node, 1);
player.getSession().write(Packet.createResult(packet));
}
@Action(Namespaces.ITEM_APPLIES)
public void apply(MultipleItemApplied packet) {
Player player = SessionUtils.getPlayer();
for (Element e : packet.getElements()) {
Node node = player.getBag().findNode(e.getPos());
if (node == null || node.getTotal() < e.getCount()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Not found item[" + e.getPos() + "]/not enough count");
player.getSession().write(error);
return;
}
node.getItem().getScript().invoke(player.getSession(),
new Object[]{node.getItem(), e.getTargetPos(), e.getCount()});
player.getBag().decrementTotal(node, e.getCount());
}
player.getSession().write(Packet.createResult(packet));
}
@Action(Namespaces.ITEM_SELL)
public void sell(ItemSell packet) {
Player player = SessionUtils.getPlayer();
Node node = player.getBag().findNode(packet.getPos());
if (node == null || packet.getCount() > node.getTotal()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Not found item[" + packet.getPos() + "]/count is not enough");
player.getSession().write(error);
return;
}
if (node.getItem() instanceof TroopItem) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Not sell");
player.getSession().write(error);
return;
}
int price = node.getItem().getPrice();
int count = packet.getCount();
player.getBag().decrementTotal(node, count);
SessionUtils.incrementCopper(count * price);
player.getSession().write(Packet.createResult(packet));
}
@Action(Namespaces.ITEM_SELLS)
public void sell(MultipleValue packet) {
Player player = SessionUtils.getPlayer();
for (Object v : packet.getVals()) {
int pos = (int) v;
Node node = player.getBag().findNode(pos);
if (node.getItem() instanceof TroopItem) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Not sell");
player.getSession().write(error);
return;
}
int price = node.getItem().getPrice();
player.getBag().decrementTotal(node, node.getTotal());
SessionUtils.incrementCopper(node.getTotal() * price);
}
player.getSession().write(Packet.createResult(packet));
}
}