Hello,
When I lend someone an item, if I set it to come back after logout it works perfectly, but it its for 1 hour or more, after the time passes, the item will stay with the player.
How I can fix?
Printable View
Hello,
When I lend someone an item, if I set it to come back after logout it works perfectly, but it its for 1 hour or more, after the time passes, the item will stay with the player.
How I can fix?
Gonna need to see some code for this.
Post the method or part where it checks the time before sending it back to the original player
Code:public void closeTrade(CloseTradeStage stage) {
synchronized (this) {
if (target == null)
return;
synchronized (target.getTrade()) {
Player oldTarget = target;
target = null;
Item lendItem = getLendedItem();
int time = getLendedTime();
tradeModified = false;
accepted = false;
if (CloseTradeStage.DONE != stage) {
for (Item item : player.getTrade().items.getItems()) {
if (item == null)
continue;
if (player.getInventory().getNumerOf(item.getId())
+ item.getAmount() < 0
|| player.getInventory().getFreeSlots() == 0) {
if (item.getId() == 995) {
player.getMoneyPouch().addMoneyMisc(
item.getAmount());
}
continue;
}
player.getInventory().addItem(item);
}
if (lendItem != null) {
Lend lend = new Lend(player.getUsername(),
oldTarget.getUsername(), lendItem,
getLendedTime() < 1 ? 1337
: Utils.currentTimeMillis()
+ (time * 60 * 60 * 1000));
LendingManager.lend(lend);
oldTarget.getInventory().addItem(
lendItem.getDefinitions().getLendId(), 1);
if (hours1 == 0) {
oldTarget.setUntillLogout(true);
player.setUntillLogout(true);
}
}
player.getInventory().init();
items.clear();
} else {
CopyOnWriteArrayList<Item> containedItems = new CopyOnWriteArrayList<Item>();
for (Item item : oldTarget.getTrade().items.getItems()) {
if (item == null)
continue;
containedItems.add(item);
}
LoggingSystem.logTrade(player, oldTarget, containedItems);
player.getPackets().sendGameMessage("Accepted trade.");
for (Item item : oldTarget.getTrade().items.getItems()) {
if (item == null)
continue;
if (player.getInventory().getNumerOf(item.getId())
+ item.getAmount() < 0) {
if (item.getId() == 995)
player.getMoneyPouch().addMoneyMisc(
item.getAmount());
continue;
}
player.getInventory().addItem(item);
}
if (lendItem != null) {
Lend lend = new Lend(player.getUsername(),
oldTarget.getUsername(), lendItem,
getLendedTime() < 1 ? 1337
: Utils.currentTimeMillis()
+ (time * 60 * 60 * 1000));
LendingManager.lend(lend);
oldTarget.getInventory().addItem(
lendItem.getDefinitions().getLendId(), 1);
}
player.getTrade().setLendedItem(null);
player.getInventory().init();
SerializableFilesManager.savePlayer(player);
oldTarget.getTrade().items.clear();
}
if (oldTarget.getTrade().isTrading()
|| oldTarget.getTrade().noSpace) {
oldTarget.setCloseInterfacesEvent(null);
oldTarget.closeInterfaces();
oldTarget.getTrade().closeTrade(stage);
if (CloseTradeStage.CANCEL == stage) {
oldTarget.getPackets().sendGameMessage(
"<col=ff0000>Other player declined trade!");
oldTarget.getTrade().setLendedItem(null);
player.getTrade().setLendedItem(null);
} else if (CloseTradeStage.NO_SPACE == stage) {
player.getPackets()
.sendGameMessage(
"You don't have enough space in your inventory for this trade.");
oldTarget
.getPackets()
.sendGameMessage(
"Other player doesn't have enough space in their inventory for this trade.");
}
}
}
}
}
If any other methods needed I'll be glad to postCode:public void updateHours(int hours) {
if (hours > 24 || hours < 1) {
hours = hours > 24 ? 24 : 0;
}
String h = (hours == 1) ? " Hour" : " Hours";
if (hours != 0) {
player.getPackets().sendIComponentText(335, 62, hours + h);
target.getPackets().sendIComponentText(335, 58, hours + h);
} else {
player.getPackets().sendIComponentText(335, 62,
"<col=ff0000>Until</col><br><col=ff0000>logout");
target.getPackets().sendIComponentText(335, 58,
"<col=ff0000>Until</col><br><col=ff0000>logout");
}
target.getPackets().sendGameMessage(
"Lent time has been set to " + hours + " hours.");
setLendedTime(hours);
hours1 = hours;
}
Where is the method that checks the elapsed time. You'd probably want to run a Task that checks every 10 game ticks the remaining time for lent item.Quote:
Originally Posted by Al4n [Only registered and activated users can see links. Click Here To Register...]