Thread: Matrix Base Trade Dupe Help

Page 1 of 2 12 LastLast
Results 1 to 10 of 13
  1. #1 Matrix Base Trade Dupe Help 
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    I need help with trade dupe
    I have no idea how I can solve
    Reply With Quote  
     

  2. #2  
    Registered Member
    Join Date
    Nov 2012
    Posts
    599
    Thanks given
    14
    Thanks received
    54
    Rep Power
    26
    pls expand? show a video of how the dupe is done? or explain what happens for the dupe to occur
    Reply With Quote  
     

  3. #3  
    A RSPS Aristocrat

    BooZee's Avatar
    Join Date
    Jul 2014
    Posts
    144
    Thanks given
    222
    Thanks received
    88
    Rep Power
    300
    Alright boys, who is going to tackle this behemoth?
    Spoiler for GUESS WHO?:

    Attached image
    Users with a big brain: Totty (RuneHD), Graham (Apollo), Tomm0017 (RSMod), ghost (DragonFire), Leanbow ("a lot" - 21 savage), 3lou 55 ("grind hard, I done grind hard" - 21 savage), Corey (idr), patrity (Kronos), Jet Kai (Spawnscape/Security Threads)
    Reply With Quote  
     

  4. #4  
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    Quote Originally Posted by khayam View Post
    pls expand? show a video of how the dupe is done? or explain what happens for the dupe to occur
    when the person tries to negotiate with another player he goes to the confirmation stage and disconnects one of the accounts and duplicates the items
    Reply With Quote  
     

  5. #5  
    Registered Member

    Join Date
    Sep 2020
    Posts
    21
    Thanks given
    34
    Thanks received
    27
    Rep Power
    237
    Quote Originally Posted by Falling Sky View Post
    when the person tries to negotiate with another player he goes to the confirmation stage and disconnects one of the accounts and duplicates the items
    I'm assuming you mean in trading? When a player disconnects you must ensure you cancel the trade and only after cancelling the trade, save the player who is disconnecting.
    Reply With Quote  
     

  6. #6  
    Registered Member
    Join Date
    Nov 2012
    Posts
    599
    Thanks given
    14
    Thanks received
    54
    Rep Power
    26
    maybe show us your trade.java?
    Reply With Quote  
     

  7. #7  
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    Quote Originally Posted by parabellum View Post
    I'm assuming you mean in trading? When a player disconnects you must ensure you cancel the trade and only after cancelling the trade, save the player who is disconnecting.
    Yes that's right

    Quote Originally Posted by khayam View Post
    maybe show us your trade.java?


    Spoiler for trade.java:
    package com.rs.game.player;

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;

    import com.rs.game.item.Item;
    import com.rs.game.item.ItemsContainer;
    import com.rs.game.player.content.ItemConstants;
    import com.rs.utils.EconomyPrices;
    import com.rs.utils.ItemExamines;

    public class Trade {

    private Player player, target;
    private ItemsContainer<Item> items;
    private boolean tradeModified;
    private boolean accepted;

    public Trade(Player player) {
    this.player = player; //player reference
    items = new ItemsContainer<Item>(28, false);
    }

    /*
    * called to both players
    */
    public void openTrade(Player target) {
    synchronized (this) {
    synchronized (target.getTrade()) {
    this.target = target;
    player.getPackets().sendIComponentText(335, 17, "Trading With: "+target.getDisplayName());
    player.getPackets().sendGlobalString(203, target.getDisplayName());
    sendInterItems();
    sendOptions();
    sendTradeModified();
    refreshFreeInventorySlots();
    refreshTradeWealth();
    refreshStageMessage(true);
    player.getInterfaceManager().sendInterface(335);
    player.getInterfaceManager().sendInventoryInterfac e(336);
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE OPENED] "+ player.getDisplayName()+" between "+target.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    player.setCloseInterfacesEvent(new Runnable() {
    @Override
    public void run() {
    closeTrade(CloseTradeStage.CANCEL);
    }
    });
    }
    }
    }


    public void removeItem(final int slot, int amount) {
    synchronized (this) {
    if(!isTrading())
    return;
    synchronized (target.getTrade()) {
    Item item = items.get(slot);
    if (item == null)
    return;
    Item[] itemsBefore = items.getItemsCopy();
    int maxAmount = items.getNumberOf(item);
    if (amount < maxAmount)
    item = new Item(item.getId(), amount);
    else
    item = new Item(item.getId(), maxAmount);
    items.remove(slot, item);
    player.getInventory().addItem(item);
    refreshItems(itemsBefore);
    cancelAccepted();
    setTradeModified(true);
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE REMOVE ITEM] "+ player.getDisplayName()+" removed "+item.getName()+" X "+ amount+" to "+target.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }

    public void sendFlash(int slot) {
    player.getPackets().sendInterFlashScript(335, 33, 4, 7, slot);
    target.getPackets().sendInterFlashScript(335, 36, 4, 7, slot);
    }

    public void cancelAccepted() {
    boolean canceled = false;
    if(accepted) {
    accepted = false;
    canceled = true;
    }
    if(target.getTrade().accepted) {
    target.getTrade().accepted = false;
    canceled = true;
    }
    if(canceled)
    refreshBothStageMessage(canceled);
    }

    public void addItem(int slot, int amount) {
    synchronized (this) {
    if(!isTrading())
    return;
    synchronized (target.getTrade()) {
    Item item = player.getInventory().getItem(slot);
    if (item == null)
    return;
    if (!ItemConstants.isTradeable(item)) {
    player.getPackets().sendGameMessage("That item isn't tradeable.");
    return;
    }
    Item[] itemsBefore = items.getItemsCopy();
    int maxAmount = player.getInventory().getItems().getNumberOf(item) ;
    if (amount < maxAmount)
    item = new Item(item.getId(), amount);
    else
    item = new Item(item.getId(), maxAmount);
    items.add(item);
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE ADD ITEM] "+ player.getDisplayName()+" given "+item.getName()+" X "+ amount+" to "+target.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    player.getInventory().deleteItem(slot, item);
    refreshItems(itemsBefore);
    cancelAccepted();
    }
    }
    }

    public void refreshItems(Item[] itemsBefore) {
    int[] changedSlots = new int[itemsBefore.length];
    int count = 0;
    for (int index = 0; index < itemsBefore.length; index++) {
    Item item = items.getItems()[index];
    if (itemsBefore[index] != item) {
    if(itemsBefore[index] != null && (item == null || item.getId() != itemsBefore[index].getId() || item.getAmount() < itemsBefore[index].getAmount()))
    sendFlash(index);
    changedSlots[count++] = index;
    }
    }
    int[] finalChangedSlots = new int[count];
    System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
    refresh(finalChangedSlots);
    refreshFreeInventorySlots();
    refreshTradeWealth();
    }

    public void sendOptions() {
    player.getPackets().sendInterSetItemsOptionsScript (336, 0, 93, 4, 7,
    "Offer", "Offer-5", "Offer-10", "Offer-All", "Offer-X",
    "Value<col=FF9040>", "Lend");
    player.getPackets().sendIComponentSettings(336, 0, 0, 27, 1278);
    player.getPackets().sendInterSetItemsOptionsScript (335, 32, 90, 4, 7,
    "Remove", "Remove-5", "Remove-10", "Remove-All", "Remove-X", "Value");
    player.getPackets().sendIComponentSettings(335, 32, 0, 27, 1150);
    player.getPackets().sendInterSetItemsOptionsScript (335, 35, 90, true, 4, 7,
    "Value");
    player.getPackets().sendIComponentSettings(335, 35, 0, 27, 1026);

    }

    public boolean isTrading() {
    return target != null;
    }

    public void setTradeModified(boolean modified) {
    if(modified == tradeModified)
    return;
    tradeModified = modified;
    sendTradeModified();
    }

    public void sendInterItems() {
    player.getPackets().sendItems(90, items);
    target.getPackets().sendItems(90, true, items);
    }

    public void refresh(int... slots) {
    player.getPackets().sendUpdateItems(90, items, slots);
    target.getPackets().sendUpdateItems(90, true, items.getItems(), slots);
    }

    public void accept(boolean firstStage) {
    synchronized (this) {
    if(!isTrading())
    return;
    synchronized (target.getTrade()) {
    if(target.getTrade().accepted) {
    if(firstStage) {
    if(nextStage())
    target.getTrade().nextStage();
    }else{
    player.setCloseInterfacesEvent(null);
    player.closeInterfaces();
    closeTrade(CloseTradeStage.DONE);
    }
    return;
    }
    accepted = true;
    refreshBothStageMessage(firstStage);
    }
    }
    }

    public void sendValue(int slot, boolean traders) {
    if(!isTrading())
    return;
    Item item = traders ? target.getTrade().items.get(slot) : items.get(slot);
    if (item == null)
    return;
    if (!ItemConstants.isTradeable(item)) {
    player.getPackets().sendGameMessage("That item isn't tradeable.");
    return;
    }
    int price = EconomyPrices.getPrice(item.getId());
    player.getPackets().sendGameMessage(item.getDefini tions().getName()+": market price is "+price+" coins.");
    }

    public void sendValue(int slot) {
    Item item = player.getInventory().getItem(slot);
    if (item == null)
    return;
    if (!ItemConstants.isTradeable(item)) {
    player.getPackets().sendGameMessage("That item isn't tradeable.");
    return;
    }
    int price = EconomyPrices.getPrice(item.getId());
    player.getPackets().sendGameMessage(item.getDefini tions().getName()+": market price is "+price+" coins.");
    }

    public void sendExamine(int slot, boolean traders) {
    if(!isTrading())
    return;
    Item item = traders ? target.getTrade().items.get(slot) : items.get(slot);
    if (item == null)
    return;
    player.getPackets().sendGameMessage(ItemExamines.g etExamine(item));
    }

    /*public boolean isOverMax(int slot, boolean traders) {//TODO
    Item item = traders ? target.getTrade().items.get(slot) : items.get(slot);
    int inv = player.getInventory().getItems().getNumberOf(item) ;
    int trade = target.getTrade().items.getNumberOf(item);
    if (item == null)
    return true;

    return true;
    }*/

    public boolean nextStage() {
    if(!isTrading())
    return false;
    if(player.getInventory().getItems().getUsedSlots() + target.getTrade().items.getUsedSlots() > 28) {
    player.setCloseInterfacesEvent(null);
    player.closeInterfaces();
    closeTrade(CloseTradeStage.NO_SPACE);
    return false;
    }
    accepted = false;
    player.getInterfaceManager().sendInterface(334);
    player.getInterfaceManager().closeInventoryInterfa ce();
    player.getPackets().sendHideIComponent(334, 55, !(tradeModified || target.getTrade().tradeModified));
    refreshBothStageMessage(false);
    return true;
    }

    public void refreshBothStageMessage(boolean firstStage) {
    refreshStageMessage(firstStage);
    target.getTrade().refreshStageMessage(firstStage);
    }

    public void refreshStageMessage(boolean firstStage) {
    player.getPackets().sendIComponentText(firstStage ? 335 : 334, firstStage ? 39 : 34, getAcceptMessage(firstStage));
    }

    public String getAcceptMessage(boolean firstStage) {
    if(accepted)
    return "Waiting for other player...";
    if(target.getTrade().accepted)
    return "Other player has accepted.";
    return firstStage ? "" : "Are you sure you want to make this trade?";
    }

    public void sendTradeModified() {
    player.getPackets().sendConfig(1042, tradeModified ? 1 : 0);
    target.getPackets().sendConfig(1043, tradeModified ? 1 : 0);
    }

    public void refreshTradeWealth() {
    int wealth = getTradeWealth();
    player.getPackets().sendGlobalConfig(729, wealth);
    target.getPackets().sendGlobalConfig(697, wealth);
    }

    public void refreshFreeInventorySlots() {
    int freeSlots = player.getInventory().getFreeSlots();
    target.getPackets().sendIComponentText(335, 23, "has "+(freeSlots == 0 ? "no" : freeSlots)+" free"
    +"<br>inventory slots");
    }

    public int getTradeWealth() {
    int wealth = 0;
    for(Item item : items.getItems()) {
    if(item == null)
    continue;
    wealth += EconomyPrices.getPrice(item.getId()) * item.getAmount();
    }
    return wealth;
    }

    private static enum CloseTradeStage {
    CANCEL, NO_SPACE, DONE, MAX_CASH
    }

    public void closeTrade(CloseTradeStage stage) {
    synchronized (this) {
    synchronized (target.getTrade()) {
    Player oldTarget = target;
    target = null;
    tradeModified = false;
    accepted = false;
    if(CloseTradeStage.DONE != stage) {
    player.getInventory().getItems().addAll(items);
    player.getInventory().init();
    items.clear();
    String location = "";
    location = "data/tradelogs/" + player.getUsername() + ".txt";
    try {
    BufferedWriter writer = new BufferedWriter(new FileWriter(location,
    true));
    writer.write("[TRADE DECLINED] "+ player.getDisplayName()+" between "+oldTarget.getDisplayName()+" .");
    writer.newLine();
    writer.flush();
    writer.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    } else {
    player.getPackets().sendGameMessage("Accepted trade.");
    player.getInventory().getItems().addAll(oldTarget. getTrade().items);
    player.getInventory().init();
    oldTarget.getTrade().items.clear();

    }
    if(oldTarget.getTrade().isTrading()) {
    oldTarget.setCloseInterfacesEvent(null);
    oldTarget.closeInterfaces();
    oldTarget.getTrade().closeTrade(stage);
    if(CloseTradeStage.CANCEL == stage)
    oldTarget.getPackets().sendGameMessage("<col=ff000 0>Other player declined trade!");
    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.");
    } else if (CloseTradeStage.MAX_CASH == stage) {
    player.getPackets().sendGameMessage("You cannot hold more coins in your inventory.");
    oldTarget.getPackets().sendGameMessage("Other player doesn't have enough space for more coins in their inventory for this trade.");
    }
    }
    }
    }
    }

    }
    Reply With Quote  
     

  8. #8  
    Registered Member

    Join Date
    Sep 2020
    Posts
    21
    Thanks given
    34
    Thanks received
    27
    Rep Power
    237
    Where your player is removed from the world and unregistered, show me that bit of code. You need to call something like

    Code:
    player.getTrade().cancelAccepted()
    I'm not familiar with Matrix but it could be

    Code:
    player.getTradeSession()
    or something, look inside player class for something like

    Code:
    new Trade(this)
    See what the variable is and check what the getter is called then

    Code:
    player.whateeverthegetteris().cancelAccepted()
    Make sure this goes inside where you unregister the player but before the account is saved.
    Reply With Quote  
     

  9. #9  
    Registered Member Arcadia RSPS's Avatar
    Join Date
    Aug 2017
    Posts
    63
    Thanks given
    6
    Thanks received
    1
    Rep Power
    14
    I have this problem and I can’t solve it in any way and I can’t, I need an urgent correction if it is the case I can even pay for it
    Reply With Quote  
     

  10. #10  
    Registered Member
    Join Date
    Nov 2012
    Posts
    599
    Thanks given
    14
    Thanks received
    54
    Rep Power
    26
    also check worldpacketsencoder and worldspacketdecoder
    Reply With Quote  
     

Page 1 of 2 12 LastLast

Thread Information
Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)


User Tag List

Similar Threads

  1. [718]Trade Dupe Help?
    By Liam_ in forum Help
    Replies: 4
    Last Post: 12-14-2013, 06:09 PM
  2. [Dementhium 637] Trade Dupe Help
    By Crucify in forum Help
    Replies: 2
    Last Post: 02-14-2012, 02:04 AM
  3. [PI] Noted Item Trade dupe help [PI]
    By Integer in forum Help
    Replies: 6
    Last Post: 08-07-2010, 04:19 AM
  4. Delta Trade Dupe Fix? ++Rep For Help!
    By Affliction in forum Help
    Replies: 0
    Last Post: 02-09-2010, 05:53 PM
  5. Trade dupe..? Help me fix please?
    By Origin's Bitch in forum Help
    Replies: 0
    Last Post: 01-23-2010, 05:13 PM
Tags for this Thread

View Tag Cloud

Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •