package org.skfiy.typhon.spi.activity;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.skfiy.typhon.AbstractComponent;
import org.skfiy.typhon.ComponentException;
import org.skfiy.typhon.Typhons;
import org.skfiy.typhon.domain.Bag;
import org.skfiy.typhon.domain.CDKeyObject;
import org.skfiy.typhon.domain.Invisible;
import org.skfiy.typhon.domain.InviteUsers;
import org.skfiy.typhon.domain.Normal;
import org.skfiy.typhon.domain.Player;
import org.skfiy.typhon.domain.Role;
import org.skfiy.typhon.domain.User;
import org.skfiy.typhon.domain.VacantData;
import org.skfiy.typhon.domain.item.HeroItem;
import org.skfiy.typhon.domain.item.MonthCardObject;
import org.skfiy.typhon.domain.item.RecordObject;
import org.skfiy.typhon.packet.Packet;
import org.skfiy.typhon.packet.PacketError;
import org.skfiy.typhon.packet.PacketNotice;
import org.skfiy.typhon.packet.Platform;
import org.skfiy.typhon.packet.SingleValue;
import org.skfiy.typhon.repository.RoleRepository;
import org.skfiy.typhon.repository.UserRepository;
import org.skfiy.typhon.session.BagUtils;
import org.skfiy.typhon.session.Session;
import org.skfiy.typhon.session.SessionConstants;
import org.skfiy.typhon.session.SessionManager;
import org.skfiy.typhon.session.SessionUtils;
import org.skfiy.typhon.spi.ItemProvider;
import org.skfiy.typhon.spi.NoticeBoardProvider;
import org.skfiy.typhon.spi.RoleProvider;
import org.skfiy.typhon.spi.Vip;
import org.skfiy.typhon.spi.activity.AtlasHeros.Type;
import org.skfiy.typhon.spi.hero.ExclusiveBuildInformation;
import org.skfiy.typhon.util.ComponentUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@Singleton
public class ActivityProvider extends AbstractComponent {
protected static final Random RANDOM = new Random();
// 摇钱树表
private final List<CashCow> cashCowlists = new ArrayList<>();
// 摇钱树暴击表
private final List<CashCowCrit> cashCowCrits = new ArrayList<>();
// 图鉴
private final List<AtlasHeros> atlasHeros = new ArrayList<>();
// 七天登录礼包.
private final List<LoginGift> loginGift = new ArrayList<>();
// 开服三天冲级礼包.
private final List<UpgradeGift> upgradeGifts = new ArrayList<>();
// 首充礼包.
private final List<ItemsObject> firstRecharg = new ArrayList<>();
// 成长基金
private final List<GrowthFund> growthFunds = new ArrayList<>();
// 摇钱树表
private final List<LuckeyDraw> luckeyDraws = new ArrayList<>();
// 成长基金消费
private int growthFundMoney;
private final List<InviteReward> inviteRewards = new ArrayList<>();
// Vip购买礼包
private final List<VipExclusiveGift> vipExclusiveGifts = new ArrayList<>();
// Vip免费礼包
private final List<VipExclusiveGift> vipFreeGifts = new ArrayList<>();
// Vip活动期间的礼包
private final List<VipGift> vipActivityGifts = new ArrayList<>();
// Vip活动期间内每天的礼包
private final List<VipGift> vipDayGifts = new ArrayList<>();
// 随机Box
private final Map<String, List<RandomBoxItem>> randomBoxs = new HashMap<>();
// 印花兑换
private final List<StampItems> stamps = new ArrayList<>();
// 邀请码兑换
private String inviteReward;
private int inviteLevelLimit;
private int inital;
private int levelInital;
private int monthCardDiamond;
private long vipActivityStar;
private long vipActivityEnd;
private long vipDayStar;
private long vipDayEnd;
// 印花开始/结束时间/每天购买限制/价格
private long stampStar;
private long stampEnd;
private int stampLimit;
private int stampCost;
@Inject
private RoleProvider roleProvider;
@Inject
private ItemProvider itemProvider;
@Inject
private UserRepository userRepository;
@Inject
private RoleRepository roleRepository;
@Inject
private SessionManager sessionManager;
@Inject
private NoticeBoardProvider noticeBoardProvider;
@Override
protected void doDestroy() {}
@Override
protected void doInit() {
JSONArray array;
inital = Typhons.getInteger("typhon.spi.cashCow.initial");
levelInital = Typhons.getInteger("typhon.spi.cashCow.level.initial");
monthCardDiamond = Typhons.getInteger("typhon.spi.draw.monthCard");
atlasHeros.addAll(JSONArray.parseArray(ComponentUtils.readDataFile("atlas_heros.json"),
AtlasHeros.class));
array = JSONArray.parseArray(ComponentUtils.readDataFile("diamond_exchange_gold.json"));
int count = 0;
for (int i = 0; i < array.size(); i++) {
CashCow obj = array.getObject(i, CashCow.class);
obj.setRandBegin(count);
count += obj.getProb();
obj.setRandEnd(count);
cashCowlists.add(obj);
}
// 暴击倍率表
cashCowCrits.addAll(JSONArray.parseArray(
ComponentUtils.readDataFile("diamond_exchange_gold_crit.json"), CashCowCrit.class));
array = JSONArray.parseArray(ComponentUtils.readDataFile("login_gift.json"));
for (int i = 0; i < array.size(); i++) {
LoginGift login = new LoginGift();
login.setId(array.getJSONObject(i).getString("lid"));
JSONArray jsonArray = array.getJSONObject(i).getJSONArray("item");
List<ItemsObject> list = new ArrayList<>();
for (int j = 0; j < jsonArray.size(); j++) {
ItemsObject item = new ItemsObject();
item.setItemDobj(itemProvider.getItem(jsonArray.getJSONObject(j).getString(
"#item.id")));
item.setCount(jsonArray.getJSONObject(j).getInteger("count"));
list.add(item);
}
login.setGiftList(list);
loginGift.add(login);
}
array = JSONArray.parseArray(ComponentUtils.readDataFile("upgrade_gift.json"));
for (int i = 0; i < array.size(); i++) {
UpgradeGift upgrade = array.getObject(i, UpgradeGift.class);
JSONArray jsonArray = array.getJSONObject(i).getJSONArray("items");
List<ItemsObject> list = new ArrayList<>();
for (int j = 0; j < jsonArray.size(); j++) {
ItemsObject item = new ItemsObject();
item.setItemDobj(itemProvider.getItem(jsonArray.getJSONObject(j).getString(
"#item.id")));
item.setCount(jsonArray.getJSONObject(j).getInteger("count"));
list.add(item);
}
upgrade.setItems(list);
upgradeGifts.add(upgrade);
}
array =
JSONArray.parseArray(ComponentUtils
.readDataFile("first_recharging_diamond_gift.json"));
for (int j = 0; j < array.size(); j++) {
ItemsObject item = new ItemsObject();
item.setItemDobj(itemProvider.getItem(array.getJSONObject(j).getString("#item.id")));
item.setCount(array.getJSONObject(j).getInteger("count"));
firstRecharg.add(item);
}
growthFunds.addAll(JSONArray.parseArray(ComponentUtils.readDataFile("growth_fund.json"),
GrowthFund.class));
growthFundMoney = Typhons.getInteger("typhon.spi.roleProvider.growthFund");
array = JSONArray.parseArray(ComponentUtils.readDataFile("invite_reward.json"));
for (int i = 0; i < array.size(); i++) {
InviteReward inviteReward = array.getObject(i, InviteReward.class);
inviteReward.setItemId(itemProvider.getItem(array.getJSONObject(i)
.getString("#item.id")));
inviteRewards.add(inviteReward);
}
array = JSONArray.parseArray(ComponentUtils.readDataFile("topup_luckeydraw.json"));
int number = 0;
LuckeyDraw lucketyDraw = null;
for (int i = 0; i < array.size(); i++) {
lucketyDraw = array.getObject(i, LuckeyDraw.class);
lucketyDraw.setItem(itemProvider.getItem(array.getJSONObject(i).getString("#item.id")));
lucketyDraw.setRandBegin(number);
number += lucketyDraw.getProb();
lucketyDraw.setRandEnd(number);
luckeyDraws.add(lucketyDraw);
}
inviteReward = Typhons.getProperty("typhon.spi.invite.reward");
inviteLevelLimit = Typhons.getInteger("typhon.spi.invite.levelLimit");
stampLimit = Typhons.getInteger("typhon.spi.BuyStempMaxCounts");
stampCost = Typhons.getInteger("typhon.spi.stemp.cost");
vipExclusiveGifts.addAll(JSONArray.parseArray(
ComponentUtils.readDataFile("vip_exclusive_gift.json"), VipExclusiveGift.class));
vipFreeGifts.addAll(JSONArray.parseArray(ComponentUtils.readDataFile("vip_free_gift.json"),
VipExclusiveGift.class));
vipActivityGifts.addAll(JSONArray.parseArray(
ComponentUtils.readDataFile("vip_activity_gift.json"), VipGift.class));
vipDayGifts.addAll(JSONArray.parseArray(ComponentUtils.readDataFile("vip_day_gift.json"),
VipGift.class));
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.vip.receiveActivity.star")));
vipActivityStar = calendar.getTimeInMillis();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.vip.receiveActivity.end")));
vipActivityEnd = calendar.getTimeInMillis();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.vip.receiveDay.star")));
vipDayStar = calendar.getTimeInMillis();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.vip.receiveDay.end")));
vipDayEnd = calendar.getTimeInMillis();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.stemp.start")));
stampStar = calendar.getTimeInMillis();
calendar.setTime(sdf.parse(Typhons.getProperty("typhon.spi.stemp.end")));
stampEnd = calendar.getTimeInMillis();
} catch (ParseException e) {
throw new ComponentException("VIP: ReceiveActivityStarTime["
+ Typhons.getProperty("typhon.spi.vip.receiveActivity.star") + "]", e);
}
array = JSONArray.parseArray(ComponentUtils.readDataFile("random_boxs.json"));
JSONArray arrayNew;
for (int i = 0; i < array.size(); i++) {
arrayNew = array.getJSONObject(i).getJSONArray("items");
int index = 0;
List<RandomBoxItem> items = new ArrayList<>();
for (int j = 0; j < arrayNew.size(); j++) {
RandomBoxItem item = arrayNew.getObject(j, RandomBoxItem.class);
item.setId(itemProvider.getItem(arrayNew.getJSONObject(j).getString("#item.id")));
item.setRandBegain(index);
index += item.getPro();
item.setRandEnd(index);
items.add(item);
}
randomBoxs.put(array.getJSONObject(i).getString("id"), items);
}
stamps.addAll(JSONArray.parseArray(ComponentUtils.readDataFile("stamp.json"),
StampItems.class));
}
@Override
protected void doReload() {
}
public void cashCow(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
Vip vip = roleProvider.getVip(normal.getVipLevel());
// 摇钱树次数
if (normal.getCashCowCounts() >= vip.privileged.diamond_exchange_gold_counts) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("VipLevel is not enough");
return;
}
int counts = normal.getCashCowCounts();
if (normal.getCashCowCounts() >= cashCowCrits.size()) {
counts = cashCowCrits.size() - 1;
}
CashCowCrit object = cashCowCrits.get(counts);
int extGold = 0;
for (int i = 0; i < counts; i++) {
extGold += object.getGold();
}
// 暴击倍数
int factor = 0;
// 判断是不是暴击
int criteRandom = RANDOM.nextInt(100);
int copper = inital + normal.getLevel() * levelInital + extGold;
if (criteRandom < object.getCritprob()) {
int randomEnd = cashCowlists.get(cashCowlists.size() - 1).getRandEnd();
int random = RANDOM.nextInt(randomEnd);
for (CashCow cashCow : cashCowlists) {
if (random >= cashCow.getRandBegin() && random < cashCow.getRandEnd()) {
factor = cashCow.getFactor();
copper = factor * copper;
break;
}
}
}
// 摇一摇每日任务
counts = normal.getDailyTask().getTaskTree();
if (counts >= 0) {
normal.getDailyTask().setTaskTree(counts + 1);
}
// 扣钻石
JSONObject obj = new JSONObject();
obj.put("place", "CashCowTree");
obj.put("buyCounts", counts);
SessionUtils.decrementDiamond(object.getCost(), obj.toString());
SessionUtils.incrementCopper(copper);
normal.setCashCowCounts(normal.getCashCowCounts() + 1);
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(factor);
player.getSession().write(result);
}
/**
* 新手登录七日礼包
*/
public void accessLoginGift(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = normal.getLoginGift().size();
String id = null;
boolean bool = (index == 0);
if (!bool) {
Calendar nowCurcal = Calendar.getInstance();
Calendar curCal = Calendar.getInstance();
curCal.setTimeInMillis(normal.getLoginGift().get(index - 1));
if (curCal.get(Calendar.DAY_OF_YEAR) != nowCurcal.get(Calendar.DAY_OF_YEAR)) {
bool = true;
}
}
if (bool) {
LoginGift login = loginGift.get(index);
for (ItemsObject object : login.getGiftList()) {
if ("w036".equals(object.getItemDobj().getId())) {
JSONObject obj = new JSONObject();
obj.put("place", "SevenDaysLoginGift");
obj.put("loginDays", index);
SessionUtils.incrementDiamond(object.getCount(), object.toString());
} else {
BagUtils.intoItem(object.getItemDobj(), object.getCount());
}
}
id = login.getId();
normal.addLoginGift(System.currentTimeMillis());
}
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(id);
player.getSession().write(result);
}
/**
*
* @param packet
*/
public void drawCDKEY(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Session session = player.getSession();
User user = (User) session.getAttribute(SessionConstants.ATTR_USER);
String cdk = String.valueOf(packet.getVal());
CDKeyObject object = userRepository.findByCDKEY(cdk);
Invisible invisible = player.getInvisible();
if (invisible.getDrawCDKEYs().containsKey(object.getBatch())) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.batch_error);
error.setText("CDKEY batch is used");
session.write(error);
return;
}
if (object == null || object.getState() == 1) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.cdkey_error);
error.setText("CDKEY not found/used");
session.write(error);
return;
}
long time = System.currentTimeMillis() / 1000;
if (object.getBeginTime() > time || object.getEndTime() < time) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.time_platform_over);
error.setText("CDKEY expired");
session.write(error);
return;
}
if (object.getPlatform() != Platform.none && object.getPlatform() != user.getPlatform()) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.time_platform_over);
error.setText("platform not matching");
session.write(error);
return;
}
BagUtils.intoItem(itemProvider.getItem(object.getItemId()));
invisible.addDrawCDKEYs(object.getBatch(), cdk);
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(object.getItemId());
session.write(result);
userRepository.updateCDKey(cdk);
}
public void atlasHeros(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
Session session = player.getSession();
boolean bool = false;
int id = (int) packet.getVal() - 1;
if (normal.getAtlasHeros().contains(id)) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("atlasHeros is receive ");
session.write(error);
return;
}
AtlasHeros atlas = atlasHeros.get(id);
Bag bag = player.getHeroBag();
int count = 0;
if (atlas.getType() == Type.a) {
for (int i = 0; i < atlas.getRequirements().length; i++) {
for (int j = 0; j < bag.getNodes().size(); j++) {
if (bag.getNodes().get(j).getItem().getId().equals(atlas.getRequirements()[i])) {
count++;
break;
}
}
}
bool = count < atlas.getRequirements().length;
} else {
for (int i = 0; i < bag.getNodes().size(); i++) {
HeroItem heroitem = bag.getNodes().get(i).getItem();
if (atlas.getHeroArea() != null && heroitem.getArea().equals(atlas.getHeroArea())) {
count++;
} else if (atlas.getHeroRace() != null
&& heroitem.getRace().equals(atlas.getHeroRace())) {
count++;
} else if (atlas.getGender() != null
&& heroitem.getGender().equals(atlas.getGender())) {
count++;
}
}
bool = count < atlas.getHeroCount();
}
if (bool) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("atlasHeros is not complete ");
session.write(error);
return;
}
normal.addAtlasHeros(id);
SessionUtils.incrementCopper(atlas.getCopper());
BagUtils.intoItem(itemProvider.getItem(atlas.getWid()), atlas.getCount());
session.write(packet);
}
public void receiveMonthCard(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
Session session = player.getSession();
MonthCardObject monthCardObject = normal.getMonthCardObject();
Calendar expiredCal = Calendar.getInstance();
expiredCal.setTimeInMillis(monthCardObject.getExpiredTime());
roleProvider.clearCalendar(expiredCal);
// 当前服务器时间
Calendar currentCal = Calendar.getInstance();
roleProvider.clearCalendar(currentCal);
if (monthCardObject.getExpiredTime() == 0
|| currentCal.getTimeInMillis() >= expiredCal.getTimeInMillis()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("MonthCard is expired");
session.write(error);
return;
}
Calendar receiveCal = Calendar.getInstance();
receiveCal.setTimeInMillis(monthCardObject.getReceiveTime());
roleProvider.clearCalendar(currentCal);
// 领取时间
if (currentCal.getTimeInMillis() == receiveCal.getTimeInMillis()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("Today's receive complete");
session.write(error);
return;
}
normal.getMonthCardObject().setReceiveTime(currentCal.getTimeInMillis());
JSONObject result = new JSONObject();
result.put("place", "MonthCard");
SessionUtils.incrementDiamond(monthCardDiamond, result.toString());
session.write(packet);
}
public void upgradeGift(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal() - 1;
UpgradeGift upgradeGift = upgradeGifts.get(index);
// 等级不够
if (normal.getUpgradeGifts() == null || upgradeGift.getLevelLimit() > normal.getLevel()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.level_limit);
error.setText("The levelLimit");
player.getSession().write(error);
return;
}
// 已经领取
if (normal.getUpgradeGifts().get(index).getState() != 0) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("The upgradeGift is already receiving");
player.getSession().write(error);
return;
}
// 冲级奖励活动时间
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(normal.player().getRole().getCreationTime());
roleProvider.clearCalendar(cal);
cal.add(Calendar.DATE, 7);
if (cal.getTimeInMillis() < System.currentTimeMillis()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.time_over);
error.setText("The upgradeGift timeout");
player.getSession().write(error);
return;
}
for (ItemsObject object : upgradeGift.getItems()) {
BagUtils.intoItem(object.getItemDobj(), object.getCount());
}
normal.getUpgradeGifts().get(index).setState(1);
player.getSession().write(Packet.createResult(packet));
}
public void firstVipRecharge(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
// 是否首充
if (normal.getVipRechargingFlags().size() == 0) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.not_allowed);
error.setText("Not recharge");
player.getSession().write(error);
return;
}
// 是否已领取
if (normal.isFirstRecharge()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("The FristvipChargetGift is already receiving");
player.getSession().write(error);
return;
}
for (ItemsObject object : firstRecharg) {
BagUtils.intoItem(object.getItemDobj(), object.getCount());
}
normal.setFirstRecharge(true);
player.getSession().write(Packet.createResult(packet));
}
public void buyGrowthFund(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
Vip vip = roleProvider.getVip(normal.getVipLevel());
if (!vip.privileged.buy_growth_fun) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.size_limit);
error.setText("GrowthFund VipLevel limit");
player.getSession().write(error);
return;
}
if (normal.getGrowthFund().size() != 0) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("GrowthFund is already buy");
player.getSession().write(error);
return;
}
JSONObject obj = new JSONObject();
obj.put("place", "BuyGrowthFund");
SessionUtils.decrementDiamond(growthFundMoney, obj.toString());
List<RecordObject> growthes = new ArrayList<>();
for (int i = 0; i < growthFunds.size(); i++) {
growthes.add(new RecordObject(growthFunds.get(i).getLevel(), 0));
}
normal.setGrowthFund(growthes);
player.getSession().write(Packet.createResult(packet));
}
public void growthFound(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal() - 1;
List<RecordObject> growthFund = normal.getGrowthFund();
if (growthFund.size() == 0) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("GrowthFund is not have");
player.getSession().write(error);
return;
}
if (growthFund.get(index).getState() != 0
|| growthFunds.get(index).getLevel() > normal.getLevel()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
error.setText("The GrowthFund is already receiving/levelLimit");
player.getSession().write(error);
return;
}
growthFund.get(index).setState(1);
JSONObject obj = new JSONObject();
obj.put("place", "GrowthFund");
SessionUtils.incrementDiamond(growthFunds.get(index).getReward(), obj.toString());
player.getSession().write(Packet.createResult(packet));
}
public void exchangeInvite(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
String str = (String) packet.getVal();
int uid = Integer.valueOf(str.substring(1, (str.length() - 2)));
Role role = roleRepository.get(uid);
if (role == null) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.no_exist);
error.setText("The Invite is not exist");
player.getSession().write(error);
return;
}
if (player.getRole().getRid() == uid) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("Can't invite yourself");
player.getSession().write(error);
return;
}
if (normal.isInvite()) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("The Invite is already receiving");
player.getSession().write(error);
return;
}
if (normal.getLevel() > inviteLevelLimit) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.size_limit);
error.setText("The Invite RoleLevel is limit");
player.getSession().write(error);
return;
}
player.getInvisible().setInviteUid(uid);
normal.setInvite(true);
BagUtils.intoItem(itemProvider.getItem(inviteReward));
player.getSession().write(Packet.createResult(packet));
}
public void receiveInviteReward(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal() - 1;
int limit = inviteRewards.get(index).getLimit();
if (player.getInvisible().getInvite().size() < limit) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.size_limit);
error.setText("The Invite is Limit");
player.getSession().write(error);
return;
}
for (RecordObject reward : normal.getInviteRewards()) {
if (reward.getCount() == limit) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("The Invite is already receiving");
player.getSession().write(error);
return;
}
}
BagUtils.intoItem(inviteRewards.get(index).getItemId());
normal.addInviteReward(new RecordObject(limit, 1));
player.getSession().write(Packet.createResult(packet));
}
public void receiveInviteUsers(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
if (normal.getInviteNumber() == 0) {
StringBuffer sb = new StringBuffer("1");
sb = sb.append(player.getRole().getRid());
sb = sb.append("23");
normal.setInviteNumber(Integer.valueOf(sb.toString()));
}
List<Integer> uids = player.getInvisible().getInvite();
List<InviteUsers> inviteUsers = new ArrayList<>();
Session otherSession = null;
for (Integer uid : uids) {
otherSession = sessionManager.getSession(uid);
InviteUsers inviteUser = new InviteUsers();
inviteUser.setUid(uid);
if (otherSession != null) {
Player bePlayer = SessionUtils.getPlayer(otherSession);
Normal beNormal = bePlayer.getNormal();
inviteUser.setUserName(bePlayer.getRole().getName());
inviteUser.setAvatar(beNormal.getAvatar());
inviteUser.setAvatarBorder(beNormal.getAvatarBorder());
inviteUser.setLevel(beNormal.getLevel());
} else {
VacantData vacantData = roleProvider.loadVacantData(uid);
inviteUser.setUserName(vacantData.getName());
inviteUser.setAvatar(vacantData.getAvatar());
inviteUser.setAvatarBorder(vacantData.getAvatarBorder());
inviteUser.setLevel(vacantData.getLevel());
}
inviteUsers.add(inviteUser);
}
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(inviteUsers);
player.getSession().write(result);
}
public int inviteLevelLimit() {
return inviteLevelLimit;
}
public void luckeyDraw(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
LuckeyDraw luckeyDraw = null;
if (!normal.isLuckeyDrawFree()) {
normal.setLuckeyDrawFree(true);
} else if (normal.getLuckeyDrawCounts() > 0) {
normal.setLuckeyDrawCounts(normal.getLuckeyDrawCounts() - 1);
} else {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("LuckeyDraw isn't have count");
player.getSession().write(error);
return;
}
String id = null;
int random = RANDOM.nextInt(luckeyDraws.get(luckeyDraws.size() - 1).getRandEnd());
for (int i = 0; i < luckeyDraws.size(); i++) {
luckeyDraw = luckeyDraws.get(i);
if (random >= luckeyDraw.getRandBegin() && random < luckeyDraw.getRandEnd()) {
BagUtils.intoItem(luckeyDraw.getItem(), luckeyDraw.getCount());
id = luckeyDraw.getId();
break;
}
}
if (id.equals("t01") || id.equals("t02") || id.equals("t03")) {
PacketNotice notice = new PacketNotice();
notice.setNtype(PacketNotice.TOP_UP_LUCKEY_DRAW);
notice.setName(player.getRole().getName());
notice.setAnnex1(id);
noticeBoardProvider.announce(notice);
}
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(id);
player.getSession().write(result);
}
public void vipReceive(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal();
VipExclusiveGift gift = vipExclusiveGifts.get(index);
if (normal.getVipReceive().contains(index)) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("The VipExclusiveGift is already receiving");
player.getSession().write(error);
return;
}
if (player.getNormal().getVipLevel() < gift.getVip()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.level_limit);
error.setText("The VipLevelLimit");
player.getSession().write(error);
return;
} else {
JSONObject obj = new JSONObject();
obj.put("place", "VipExclusiveGift");
SessionUtils.decrementDiamond(gift.getNowPrice(), obj.toString());
normal.addVipReceive(index);
BagUtils.intoItem(itemProvider.getItem(gift.getItem()), gift.getCount());
}
player.getSession().write(Packet.createResult(packet));
}
public void vipFreeGift(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal();
VipExclusiveGift gift = vipFreeGifts.get(index);
if (normal.getVipFreeGift() >= 0) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("The VipExclusiveGift is already receiving");
player.getSession().write(error);
return;
}
if (player.getNormal().getVipLevel() != gift.getVip()) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.level_limit);
error.setText("The VipLevelLimit");
player.getSession().write(error);
return;
} else {
normal.setVipFreeGift(index);
BagUtils.intoItem(itemProvider.getItem(gift.getItem()), gift.getCount());
}
player.getSession().write(Packet.createResult(packet));
}
public void vipReceiveDay(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
if (System.currentTimeMillis() < vipDayStar || System.currentTimeMillis() > vipDayEnd) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.time_over);
error.setText("The VipDayGift time is over");
player.getSession().write(error);
}
vipReceive1(normal.getVipReceiveDay(), packet, player, vipDayGifts);
normal.addVipReceiveDay((int) packet.getVal());
player.getSession().write(Packet.createResult(packet));
}
public void vipReceiveActivity(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
if (System.currentTimeMillis() < vipActivityStar
|| System.currentTimeMillis() > vipActivityEnd) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.time_over);
error.setText("The VipActivityGift time is over");
player.getSession().write(error);
}
vipReceive1(normal.getVipReceiveActivity(), packet, player, vipActivityGifts);
normal.addVipReceiveActivity((int) packet.getVal());
player.getSession().write(Packet.createResult(packet));
}
private void vipReceive1(List<Integer> receives, SingleValue packet, Player player,
List<VipGift> receiveGifts) {
int index = (int) packet.getVal();
if (receives.contains(index)) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.receive_over);
error.setText("The VipExclusiveGift is already receiving");
player.getSession().write(error);
return;
}
for (ExclusiveBuildInformation information : receiveGifts.get(index).getItems()) {
BagUtils.intoItem(itemProvider.getItem(information.getName()), information.getNumber());
}
}
public void openBox(SingleValue packet) {
Player player = SessionUtils.getPlayer();
String id = (String) packet.getVal();
List<RandomBoxItem> items = randomBoxs.get(id);
if (!player.getBag().decrementTotal(id, 1)) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.item_not_found);
error.setText("The Box's id is Error");
player.getSession().write(error);
return;
}
if (items.isEmpty()) {
PacketError error =
PacketError.createResult(packet, PacketError.Condition.item_not_found);
error.setText("The Box's id is Error");
player.getSession().write(error);
return;
}
int random = RANDOM.nextInt(items.get(items.size() - 1).getRandEnd());
JSONObject obj = new JSONObject();
for (RandomBoxItem item : items) {
if (random >= item.getRandBegain() && random < item.getRandEnd()) {
BagUtils.intoItem(item.getId(), item.getCount());
obj.put("id", item.getId().getId());
obj.put("count", item.getCount());
break;
}
}
SingleValue result = new SingleValue();
Packet.assignResult(packet, result);
result.setVal(obj);
player.getSession().write(result);
}
public void stampExchange(SingleValue packet) {
Player player = SessionUtils.getPlayer();
int index = (int) packet.getVal();
StampItems stamp = stamps.get(index);
if (System.currentTimeMillis() < stampStar || System.currentTimeMillis() > stampEnd) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.time_over);
error.setText("The VipActivityGift time is over");
player.getSession().write(error);
}
if (!player.getBag().decrementTotal(stamp.getCostId(), stamp.getCostCounts())) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.no_exist);
error.setText("The Stamp time is over");
player.getSession().write(error);
return;
} else {
BagUtils.intoItem(itemProvider.getItem(stamp.getItemId()), stamp.getItemCounts());
}
player.getSession().write(Packet.createResult(packet));
}
public void stampBuy(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int index = (int) packet.getVal();
if (System.currentTimeMillis() < stampStar || System.currentTimeMillis() > stampEnd) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.time_over);
error.setText("The Stamp time is over");
player.getSession().write(error);
}
if (index + normal.getStampBuyLimit() > stampLimit) {
PacketError error = PacketError.createResult(packet, PacketError.Condition.level_limit);
error.setText("The StampBuy Limit");
player.getSession().write(error);
return;
} else {
JSONObject obj = new JSONObject();
obj.put("place", "StampCost");
SessionUtils.decrementDiamond((stampCost * index), obj.toString());
player.getBag().intoItem(itemProvider.getItem(stamps.get(0).getCostId()), index);
normal.setStampBuyLimit(normal.getStampBuyLimit() + index);
}
player.getSession().write(Packet.createResult(packet));
}
public long getVipActivityStar() {
return vipActivityStar;
}
public long getVipActivityEnd() {
return vipActivityEnd;
}
public long getVipDayStar() {
return vipDayStar;
}
public long getVipDayEnd() {
return vipDayEnd;
}
}