Thread: [PI] Duel Arena

Results 1 to 5 of 5
  1. #1 [PI] Duel Arena 
    Registered Member
    Join Date
    Jan 2012
    Posts
    14
    Thanks given
    0
    Thanks received
    0
    Rep Power
    11
    Hello everyone!
    In my server then I press challenge button in duel arena area, nothing happens. Players just standing, does anyone can post a fix for that?
    Here is as video:

    Sorry for the quality and my poor english
    Reply With Quote  
     

  2. #2  
    Middle Finger is Here


    Join Date
    Feb 2012
    Age
    31
    Posts
    2,546
    Thanks given
    377
    Thanks received
    502
    Rep Power
    162
    Please give me your tradeandduel class
    Hi
    Reply With Quote  
     

  3. #3  
    Registered Member
    Join Date
    Jan 2012
    Posts
    14
    Thanks given
    0
    Thanks received
    0
    Rep Power
    11
    Quote Originally Posted by Braveyy View Post
    Please give me your tradeandduel class
    Code:
    package server.model.players;
    
    import java.util.concurrent.CopyOnWriteArrayList;
    
    import server.Config;
    import server.Server;
    import server.model.players.Player;
    import server.model.players.Client;
    import server.model.items.GameItem;
    import server.model.items.Item;
    import server.util.Misc;
    
    
    public class TradeAndDuel{
    
    	private Client c;
    	public boolean inTrade;
    	public TradeAndDuel(Client Client) {
    		this.c = Client;
    	}
    	
    	/**
    	* Trading
    	**/
    
    
    	public CopyOnWriteArrayList<GameItem> offeredItems = new CopyOnWriteArrayList<GameItem>();
    	
    	public void requestTrade(int id){
    		try {
    			Client o = (Client) Server.playerHandler.players[id];
    			if (o.isBanking)
    			{
    				c.sendMessage("Other player is busy at the moment.");
    				return;
    			}
    			if (c.isBanking)
    			{
    				c.sendMessage("Close the bank before trading someone.");
    				return;
    			}
    			if (o.isShopping)
    			{
    				c.sendMessage("Other player is busy at the moment.");
    				return;
    			}
    			if (c.isShopping)
    			{
    				c.sendMessage("Close the shop before trading someone.");
    				return;
    			}
                            if (o.inWild())
    			{
    				c.sendMessage("You cannot trade anyone in the wilderness!");
    				return;
    			}
    			if(System.currentTimeMillis() - c.logoutDelay < 10000)
    			{
    				c.sendMessage("You cannot trade anyone while incombat!");
    				return;
    			}
    			if(System.currentTimeMillis() - o.logoutDelay < 10000)
    			{
    				c.sendMessage("Other player is busy at the moment.");
    				return;
    			}
                            if (c.trade11 > 0)
    			{
    				c.sendMessage("You must wait 15 minutes before trading anyone!");
    				c.sendMessage("this is because you're a new player. (Stops transfering gold)");
    				return;
    			}
                            if (c.inWild())
    			{
    				c.sendMessage("You cannot trade anyone in the wilderness!");
    				return;
    			}
    			if (id == c.playerId)
    				return;
    			c.tradeWith = id;
    			if(!c.inTrade && o.tradeRequested && o.tradeWith == c.playerId) {
    				c.getTradeAndDuel().openTrade();
    				o.getTradeAndDuel().openTrade();			
    			} else if(!c.inTrade) {
    				
    				c.tradeRequested = true;
    				c.sendMessage("Sending trade request...");
    				o.sendMessage(Misc.optimizeText(c.playerName) + ":tradereq:");
    			}
    		} 
    		catch (Exception e) {
    			Misc.println("Error requesting trade.");
    		}
    	}
    	
    	public void displayWAndI(Client c) {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		c.playerTradeWealth = 0;
    		o.playerTradeWealth = 0;
    		for (GameItem item : c.getTradeAndDuel().offeredItems) {
    			c.playerTradeWealth += (c.getShops().getItemShopValue(item.id) * item.amount);
    		}
    
    		for (GameItem item : o.getTradeAndDuel().offeredItems) {
    			o.playerTradeWealth += (o.getShops().getItemShopValue(item.id) * item.amount);
    		}
    
    		int playerDifference1 = (c.playerTradeWealth - o.playerTradeWealth);
    		int playerDifference2 = (o.playerTradeWealth - c.playerTradeWealth);
    
    		boolean player1HasMore = (playerDifference1 > playerDifference2);
    		boolean equalsSame = (c.playerTradeWealth == o.playerTradeWealth);
    
    		if(c.playerTradeWealth < -1) {
    			c.playerTradeWealth = 2147483647;
    		}
    		if(o.playerTradeWealth < -1) {
    			o.playerTradeWealth = 2147483647;
    		}
    
    		String playerValue1 = ""+c.getPA().getTotalAmount(c, c.playerTradeWealth) +" ("+ Misc.format(c.playerTradeWealth) +")";
    		String playerValue2 = ""+c.getPA().getTotalAmount(o, o.playerTradeWealth) +" ("+ Misc.format(o.playerTradeWealth) +")";
    
    		if(c.playerTradeWealth < -1) {
    			playerValue1 = "+"+ playerValue1;
    		}
    		if(o.playerTradeWealth < -1) {
    			playerValue2 = "+"+ playerValue2;
    		}
    		if(equalsSame) {
    			c.getPA().sendFrame126("@yel@Equal Trade", 23504);
    			o.getPA().sendFrame126("@yel@Equal Trade", 23504);
    		} else if(player1HasMore) {
    			c.getPA().sendFrame126("-@red@"+c.getPA().getTotalAmount(c, playerDifference1) +" ("+ Misc.format(playerDifference1) +")", 23504);
    			o.getPA().sendFrame126("+@yel@"+o.getPA().getTotalAmount(o, playerDifference1) +" ("+ Misc.format(playerDifference1) +")", 23504);
    		} else if(!player1HasMore) {
    			c.getPA().sendFrame126("+@yel@"+c.getPA().getTotalAmount(c, playerDifference2) +" ("+ Misc.format(playerDifference2) +")", 23504);
    			o.getPA().sendFrame126("-@red@"+o.getPA().getTotalAmount(o, playerDifference2) +" ("+ Misc.format(playerDifference2) +")", 23504);
    		}
    		c.getPA().sendFrame126(playerValue1, 23506);
    		c.getPA().sendFrame126(playerValue2, 23507);
    		o.getPA().sendFrame126(playerValue2, 23506);
    		o.getPA().sendFrame126(playerValue1, 23507);
    		c.getPA().sendFrame126(Misc.formatPlayerName(o.playerName)+" has\\n "+o.getItems().freeSlots()+" free\\n inventory slots.", 23505);
    		o.getPA().sendFrame126(Misc.formatPlayerName(c.playerName)+" has\\n "+c.getItems().freeSlots()+" free\\n inventory slots.", 23505);
    	}
    
    	public void openTrade() {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		
    		if(o == null) {
    			//c.sendMessage("You must wait " +c.trade11+ " more seconds untill you can trade anyone.");
    			return;
    		}
    		if (c.isBanking || o.isBanking)
    		{
    			c.getPA().closeAllWindows();
    			o.getPA().closeAllWindows();
    			return;
    		}
    		c.inTrade = true;
    		c.canOffer = true;
    		c.tradeStatus = 1;
    			o.getPA().sendFrame126("" + Misc.formatPlayerName(c.playerName) +"" ,3451);
    		c.getPA().sendFrame126("" + Misc.formatPlayerName(o.playerName) +"" ,3451);
    		o.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(c.playerName) +"" ,3417);
    		c.getPA().sendFrame126("Trading with: " + Misc.formatPlayerName(o.playerName) +"" ,3417);
    		c.tradeRequested = false;
    		c.getItems().resetItems(3322);
    		resetTItems(3415);
    		resetOTItems(3416);
    		String out = o.playerName;
    		
    		if(o.playerRights == 1) {
    			out = "@cr1@" + out;
    		} 
    		else if(o.playerRights == 2) {
    			out = "@cr2@" + out;
    		}
    		c.getPA().sendFrame126("Trading with: " + o.playerName+"" ,3417);
    displayWAndI(c);
    		c.getPA().sendFrame126("", 3431);
    		c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
    		c.getPA().sendFrame248(3323, 3321);
    	}	
    	
    	
    	public void resetTItems(int WriteFrame) {
            synchronized(c) {
    			c.getOutStream().createFrameVarSizeWord(53);
    			c.getOutStream().writeWord(WriteFrame);
    			int len = offeredItems.toArray().length;
    			int current = 0;
    			c.getOutStream().writeWord(len);
    				for (GameItem item : offeredItems) {
    					if (item.amount > 254) {
    						c.getOutStream().writeByte(255);
    						c.getOutStream().writeDWord_v2(item.amount);
    					} else {
    						c.getOutStream().writeByte(item.amount);
    					}
    				c.getOutStream().writeWordBigEndianA(item.id + 1);
    				current++;
    				}
    				if(current < 27) {
    					for(int i = current; i < 28; i++) {
    						c.getOutStream().writeByte(1);
    						c.getOutStream().writeWordBigEndianA(-1);
    					}
    				}
    			c.getOutStream().endFrameVarSizeWord();
    			c.flushOutStream();
    		}
        }
    
    	public boolean fromTrade(int itemID, int fromSlot, int amount) {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		if(o == null) {
    			return false;
    		}
    		try {
    			if (!c.inTrade || !c.canOffer) {
    				declineTrade();
    				return false;
    			}
    		c.tradeConfirmed = false;
    		o.tradeConfirmed = false;
    			if(!Item.itemStackable[itemID]) {
    				for(int a = 0; a < amount && a < 28; a++) {
    					for (GameItem item : offeredItems) {
    						if(item.id == itemID) {	
    							if(!item.stackable) {	
    								offeredItems.remove(item);	
    								c.getItems().addItem(itemID, 1);	
    
    							} else {
    								if(item.amount > amount) {
    									item.amount -= amount;
    									c.getItems().addItem(itemID, amount);
    							
    								} else {
    									amount = item.amount;
    									offeredItems.remove(item);
    									c.getItems().addItem(itemID, amount);
    
    								}
    							}
    						break;
    						}
    
    					c.tradeConfirmed = false;
    					o.tradeConfirmed = false;
    					c.getItems().resetItems(3322);
    					resetTItems(3415);
    					o.getTradeAndDuel().resetOTItems(3416);
    displayWAndI(c);
    					c.getPA().sendFrame126("", 3431);
    					o.getPA().sendFrame126("", 3431);
    					}
    				}	
    			}
    			for (GameItem item : offeredItems) {
    				if(item.id == itemID) {
    					if(!item.stackable) {
    					} else  {
    						if(item.amount > amount) {
    							item.amount -= amount;
    							c.getItems().addItem(itemID, amount);
    
    						} else  {
    							amount = item.amount;
    							offeredItems.remove(item);
    							c.getItems().addItem(itemID, amount);
    
    						}
    					}
    					break;
    				}
    			}
    
    
    		c.tradeConfirmed = false;
    		o.tradeConfirmed = false;
    		c.getItems().resetItems(3322);
    		resetTItems(3415);
    		o.getTradeAndDuel().resetOTItems(3416);
    displayWAndI(c);
    		c.getPA().sendFrame126("", 3431);
    		o.getPA().sendFrame126("", 3431);
    		} catch(Exception e){}
            return true;
        }
    		
    	public boolean tradeItem(int itemID, int fromSlot, int amount) {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		if(o == null) {
    			return false;
    		}
    		
    		for (int i : Config.ITEM_TRADEABLE)  {
    			if(i == itemID) {
    				c.sendMessage("You can't trade this item.");
    				return false;
    			}		
    		}
    
    
    		c.tradeConfirmed = false;
    		o.tradeConfirmed = false;
    				if (itemID != 995 & c.playerItems[fromSlot] == 996){
    			return false;
    		}
    if (c.playerRights >= 2)
    			c.sendMessage("id:"+itemID+"/"+c.playerItems[fromSlot]+", itemamt: "+amount+"/"+c.playerItemsN[fromSlot]);
    		if(amount > c.playerItemsN[fromSlot])
    			return false;
    		if(!Item.itemStackable[itemID] && !Item.itemIsNote[itemID]) {
    			for(int a = 0; a < amount && a < 28; a++) {
    				if(c.getItems().playerHasItem(itemID, 1)) {
    					offeredItems.add(new GameItem(itemID, 1));	
    					c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
    
    				}
    			}
    
    			c.getItems().resetItems(3322);
    			resetTItems(3415);
    			o.getTradeAndDuel().resetOTItems(3416);
    displayWAndI(c);
    			c.getPA().sendFrame126("", 3431);
    			o.getPA().sendFrame126("", 3431);
    		}
    		if (c.getItems().getItemCount(itemID) < amount) {
    			amount = c.getItems().getItemCount(itemID);
    			if (amount == 0)
    			return false;
    		}
            if (!c.inTrade || !c.canOffer) {
    			declineTrade();
    			return false;
    		}
    		
    		if(Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
    			boolean inTrade = false;
    			for(GameItem item : offeredItems) {
    				if(item.id == itemID) {
    					inTrade = true;
    					item.amount += amount;
    					c.getItems().deleteItem2(itemID, amount);
    
    					break;	
    				}
    			}
    
    			/*if(!inTrade) {
    				offeredItems.add(new GameItem(itemID, amount));
    				c.getItems().deleteItem(itemID, fromSlot, amount);
    
    			}*/
    			if(!inTrade) {
    				offeredItems.add(new GameItem(itemID, amount));
    				c.getItems().deleteItem2(itemID, amount);
    
    			}
    		}
    
    		c.getItems().resetItems(3322);
    		resetTItems(3415);
    		o.getTradeAndDuel().resetOTItems(3416);
    displayWAndI(c);
    		c.getPA().sendFrame126("", 3431);
    		o.getPA().sendFrame126("", 3431);
    		return true;
    		}
    	
    	
    	public void resetTrade() {
    		offeredItems.clear();
    		c.inTrade = false;
    		c.tradeWith = 0;
    		c.canOffer = true;
    		c.tradeConfirmed = false;
    		c.tradeConfirmed2 = false;
    		c.acceptedTrade = false;
    		c.getPA().removeAllWindows();
    		c.tradeResetNeeded = false;
    		c.getPA().sendFrame126("Are you sure you want to make this trade?", 3535);
    	}
    	public void declineTrade() {
    		c.tradeStatus = 0;
    		declineTrade(true);
    	}
    	
    
    	public void declineTrade(boolean tellOther) {
    		c.getPA().removeAllWindows();
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		if (o == null) {
    			return;
    		}
    		
    		if(tellOther){
    			o.getTradeAndDuel().declineTrade(false);
    			o.getTradeAndDuel().c.getPA().removeAllWindows();
    		}
    			
    		for(GameItem item : offeredItems) {
    			if(item.amount < 1) {
    				continue;
    			}
    			if(item.stackable) {
    				c.getItems().addItem(item.id, item.amount);
    			} else {
    				for(int i = 0; i < item.amount; i++) {
    					c.getItems().addItem(item.id, 1);
    				}
    			}
    		}
    		c.canOffer = true;
    		c.tradeConfirmed = false;
    		c.tradeConfirmed2 = false;
    		offeredItems.clear();
    		c.inTrade = false;
    		c.tradeWith = 0;
    	}
    	
    		
    	public void resetOTItems(int WriteFrame) {
    		synchronized(c) {
    			Client o = (Client) Server.playerHandler.players[c.tradeWith];
    			if(o == null) {
    				return;
    			}	
    			c.getOutStream().createFrameVarSizeWord(53);
    			c.getOutStream().writeWord(WriteFrame);
    			int len = o.getTradeAndDuel().offeredItems.toArray().length;
    			int current = 0;
    			c.getOutStream().writeWord(len);
    				for (GameItem item : o.getTradeAndDuel().offeredItems) {
    					if (item.amount > 254) {
    						c.getOutStream().writeByte(255); // item's stack count. if over 254, write byte 255
    						c.getOutStream().writeDWord_v2(item.amount); 
    					} else {
    						c.getOutStream().writeByte(item.amount);
    					}
    					c.getOutStream().writeWordBigEndianA(item.id + 1); // item id
    					current++;
    				}
    			if(current < 27) {
    				for(int i = current; i < 28; i++) {
    					c.getOutStream().writeByte(1);
    					c.getOutStream().writeWordBigEndianA(-1);
    				}
    			}
    			c.getOutStream().endFrameVarSizeWord();
    			c.flushOutStream();
    		}
        }
    	
    	
    	public void confirmScreen() {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		if(o == null) {
    			return;
    		}
    		c.canOffer = false;
    		c.getItems().resetItems(3214);
    		String SendTrade = "Absolutely nothing!";
    		String SendAmount = "";
    		int Count = 0;
    		for (GameItem item : offeredItems) {
    		    if (item.id > 0) {
    				if (item.amount >= 1000 && item.amount < 1000000) {
    					SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@(" + Misc.format(item.amount) + ")";
    				}  else if (item.amount >= 1000000) {
    					SendAmount = "@gre@" + (item.amount / 1000000) + " million @whi@(" + Misc.format(item.amount) + ")";
    				} else {
    					SendAmount = "" + Misc.format(item.amount);
    				}
    
    					if(Count == 0) {	
    						SendTrade = c.getItems().getItemName(item.id);		
    					} else {
    						SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
    					}
    					
    						if (item.stackable) {
    							SendTrade = SendTrade + " x " + SendAmount;
    						}
    				Count++;
    		    }
    		}
    		
    		c.getPA().sendFrame126(SendTrade, 3557);
    		SendTrade = "Absolutely nothing!";
    		SendAmount = "";
    		Count = 0;
    		
    		for (GameItem item : o.getTradeAndDuel().offeredItems) {
    		    if (item.id > 0) {
    				if (item.amount >= 1000 && item.amount < 1000000) {
    					SendAmount = "@cya@" + (item.amount / 1000) + "K @whi@(" + Misc.format(item.amount) + ")";
    				}  else if (item.amount >= 1000000) {
    					SendAmount = "@gre@" + (item.amount / 1000000) + " million @whi@(" + Misc.format(item.amount) + ")";
    				} else {
    					SendAmount = "" + Misc.format(item.amount);
    				}
    				SendAmount = SendAmount;
    				
    					if (Count == 0) {
    						SendTrade = c.getItems().getItemName(item.id);		
    					} else {
    						SendTrade = SendTrade + "\\n" + c.getItems().getItemName(item.id);
    					}
    						if (item.stackable) {
    						SendTrade = SendTrade + " x " + SendAmount;
    						}
    				Count++;
    		    }
    		}
    		c.getPA().sendFrame126(SendTrade, 3558);
    		//TODO: find out what 197 does eee 3213
    		c.getPA().sendFrame248(3443, 197);
    	}
    	
    	
    	public void giveItems() {
    		Client o = (Client) Server.playerHandler.players[c.tradeWith];
    		if(o == null) {
    			return;
    		}	
    		try{	
    			for(GameItem item : o.getTradeAndDuel().offeredItems){
    				if (item.id > 0) {
    					c.getItems().addItem(item.id, item.amount);
    					c.getTradeLog().tradeReceived(c.getItems().getItemName(item.id), item.amount);
    					o.getTradeLog().tradeGive(c.getItems().getItemName(item.id), item.amount);
    			   }
    			}
    			
    			c.getPA().removeAllWindows();
    			c.tradeResetNeeded = true;
    			} catch(Exception e){
    			}
    		}
    
    		
    	/**
    	* Dueling
    	**/
    	
    	public CopyOnWriteArrayList<GameItem> otherStakedItems = new CopyOnWriteArrayList<GameItem>();
    	public CopyOnWriteArrayList<GameItem> stakedItems = new CopyOnWriteArrayList<GameItem>();
    	
    	public void requestDuel(int id) {
    		try {
    			if (id == c.playerId)
    				return;
    			resetDuel();
    			resetDuelItems();
    			c.duelingWith = id;
    			Client o = (Client) Server.playerHandler.players[id];
    			if(o == null) {
    				return;
    			}
    			c.duelRequested = true;
    			if(c.duelStatus == 0 && o.duelStatus == 0 && c.duelRequested && o.duelRequested && c.duelingWith == o.getId() && o.duelingWith == c.getId()) {
    				if(c.goodDistance(c.getX(), c.getY(), o.getX(), o.getY(), 1)) {			
    					c.getTradeAndDuel().openDuel();
    					o.getTradeAndDuel().openDuel();
    				} else {
    					c.sendMessage("You need to get closer to your opponent to start the duel.");
    				}
    
    			} else {
    				c.sendMessage("Sending duel request...");
    				o.sendMessage(c.playerName+":duelreq:");		
    			}
    		} catch (Exception e) {
    			Misc.println("Error requesting duel.");
    		}
    	}
    	
    	
    	public void openDuel() {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o == null) {
    			return;
    		}	
    		c.duelStatus = 1;
    		refreshduelRules();
    		refreshDuelScreen();
    		c.canOffer = true;
    		for (int i = 0; i < c.playerEquipment.length; i++) {
    			sendDuelEquipment(c.playerEquipment[i], c.playerEquipmentN[i], i);
    		}
    		c.getPA().sendFrame126("Dueling with: " + o.playerName + " (level-" + o.combatLevel + ")", 6671);
    		c.getPA().sendFrame126("", 6684);
    		c.getPA().sendFrame248(6575, 3321);
    		c.getItems().resetItems(3322);
    	}
    	
    	public void sendDuelEquipment(int itemId, int amount, int slot) {
    		synchronized(c) {
    			if(itemId != 0) {
    				c.getOutStream().createFrameVarSizeWord(34);
    				c.getOutStream().writeWord(13824);
    				c.getOutStream().writeByte(slot);
    				c.getOutStream().writeWord(itemId+1);
    
    				if (amount > 254) {
    					c.getOutStream().writeByte(255);
    					c.getOutStream().writeDWord(amount);
    				} else {
    					c.getOutStream().writeByte(amount);
    				}
    				c.getOutStream().endFrameVarSizeWord();
    				c.flushOutStream();
    			}
    		}
    	}
    	
    	public void refreshduelRules() {
    		for(int i = 0; i < c.duelRule.length; i++) {	
    			c.duelRule[i] = false;
    		}
    		c.getPA().sendFrame87(286, 0);
    		c.duelOption = 0;
    	}
    	
    	public void refreshDuelScreen() {
    		synchronized(c) {
    			Client o = (Client) Server.playerHandler.players[c.duelingWith];
    			if(o == null) {
    				return;
    			}
    			c.getOutStream().createFrameVarSizeWord(53);
    			c.getOutStream().writeWord(6669);
    			c.getOutStream().writeWord(stakedItems.toArray().length);
    			int current = 0;
    			for(GameItem item : stakedItems) {
    				if (item.amount > 254) {
    					c.getOutStream().writeByte(255); 
    					c.getOutStream().writeDWord_v2(item.amount);	
    				} else  {
    					c.getOutStream().writeByte(item.amount);
    				}
    				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
    					item.id = Config.ITEM_LIMIT;
    				}
    				c.getOutStream().writeWordBigEndianA(item.id + 1);
    				
    				current++;
    			}
    			
    			if(current < 27) {
    				for(int i = current; i < 28; i++) {
    					c.getOutStream().writeByte(1);
    					c.getOutStream().writeWordBigEndianA(-1);
    				}
    			}
    			c.getOutStream().endFrameVarSizeWord();
    			c.flushOutStream();
    			
    			c.getOutStream().createFrameVarSizeWord(53);
    			c.getOutStream().writeWord(6670);
    			c.getOutStream().writeWord(o.getTradeAndDuel().stakedItems.toArray().length);
    			current = 0;	
    			for (GameItem item : o.getTradeAndDuel().stakedItems) {
    				if (item.amount > 254) {
    					c.getOutStream().writeByte(255);
    					c.getOutStream().writeDWord_v2(item.amount);
    				}  else  {
    					c.getOutStream().writeByte(item.amount);
    				}
    				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
    					item.id = Config.ITEM_LIMIT;
    				}
    				c.getOutStream().writeWordBigEndianA(item.id + 1);
    				current++;
    			}
    			
    			if(current < 27) {
    				for(int i = current; i < 28; i++) {
    					c.getOutStream().writeByte(1);
    					c.getOutStream().writeWordBigEndianA(-1);
    				}
    			}
    			c.getOutStream().endFrameVarSizeWord();
    			c.flushOutStream();
    		}
    	}
    	
    	
    	public boolean stakeItem(int itemID, int fromSlot, int amount) {
    		
    		for (int i : Config.ITEM_TRADEABLE) {
    		if(i == itemID) {
    				return true;
    			}	
    		}
    		if (amount <= 0)
    			return false;
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if (o == null ) {
    			declineDuel();
    			return false;
    		}
    		if (o.duelStatus <= 0 || c.duelStatus <= 0) {
    			declineDuel();
    			o.getTradeAndDuel().declineDuel();
    			return false;
    		}
    		if (!c.canOffer) {
    			return false;
    		}
    		changeDuelStuff();
    		if(!Item.itemStackable[itemID]) {
    			for(int a = 0; a < amount; a++) {
    				if(c.getItems().playerHasItem(itemID, 1)) {
    					stakedItems.add(new GameItem(itemID, 1));	
    					c.getItems().deleteItem(itemID, c.getItems().getItemSlot(itemID), 1);
    				}
    			}		
    			c.getItems().resetItems(3214);
    			c.getItems().resetItems(3322);
    			o.getItems().resetItems(3214);
    			o.getItems().resetItems(3322);
    			refreshDuelScreen();
    			o.getTradeAndDuel().refreshDuelScreen();
    			c.getPA().sendFrame126("", 6684);
    			o.getPA().sendFrame126("", 6684);
    		}
    		
    		if(!c.getItems().playerHasItem(itemID, amount)) {
    			return false;
    		}
    		if (Item.itemStackable[itemID] || Item.itemIsNote[itemID]) {
    			boolean found = false;
    			for (GameItem item : stakedItems) {
    				if (item.id == itemID) {
    					found = true;
    					item.amount += amount;
    					c.getItems().deleteItem(itemID, fromSlot, amount);
    					break;
    				}
    			}
    			if (!found) {
    				c.getItems().deleteItem(itemID, fromSlot, amount);
    				stakedItems.add(new GameItem(itemID, amount));
    			}
    		}
    		
    		c.getItems().resetItems(3214);
    		c.getItems().resetItems(3322);
    		o.getItems().resetItems(3214);
    		o.getItems().resetItems(3322);
    		refreshDuelScreen();
    		o.getTradeAndDuel().refreshDuelScreen();
    		c.getPA().sendFrame126("", 6684);
    		o.getPA().sendFrame126("", 6684);
    		return true;
    	}
    	
    	
    	public boolean fromDuel(int itemID, int fromSlot, int amount)  {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if (o == null ) {
    			declineDuel();
    			return false;
    		}
    		if (o.duelStatus <= 0 || c.duelStatus <= 0) {
    			declineDuel();
    			o.getTradeAndDuel().declineDuel();
    			return false;
    		}
    		if(Item.itemStackable[itemID]) {
    			if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
    				c.sendMessage("You have too many rules set to remove that item.");
    				return false;
    			}
    		}
    
    		if(!c.canOffer){
    			return false;
    		}
    		
    		changeDuelStuff();
    		boolean goodSpace = true;
    		if(!Item.itemStackable[itemID]) {
    			for(int a = 0; a < amount; a++) {
    				for (GameItem item : stakedItems) {
    					if(item.id == itemID) {
    						if(!item.stackable) {
    							if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
    								goodSpace = false;
    								break;
    							}
    							stakedItems.remove(item);	
    							c.getItems().addItem(itemID, 1);				
    						}  else  {
    							if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
    								goodSpace = false;
    								break;
    							}
    							if(item.amount > amount) {
    								item.amount -= amount;
    								c.getItems().addItem(itemID, amount);						
    							} else  {
    								if(c.getItems().freeSlots() - 1 < (c.duelSpaceReq)) {
    									goodSpace = false;
    									break;
    								}
    								amount = item.amount;
    								stakedItems.remove(item);
    								c.getItems().addItem(itemID, amount);
    							}
    						}
    						break;
    					}
    					o.duelStatus = 1;
    					c.duelStatus = 1;					
    					c.getItems().resetItems(3214);
    					c.getItems().resetItems(3322);
    					o.getItems().resetItems(3214);
    					o.getItems().resetItems(3322);
    					c.getTradeAndDuel().refreshDuelScreen();
    					o.getTradeAndDuel().refreshDuelScreen();
    					o.getPA().sendFrame126("", 6684);
    				}
    			}		
    		}
    		
    		for (GameItem item : stakedItems) {
    			if(item.id == itemID) {
    				if(!item.stackable) {
    				} else {
    					if(item.amount > amount) {
    						item.amount -= amount;
    						c.getItems().addItem(itemID, amount);
    					} else {
    						amount = item.amount;
    						stakedItems.remove(item);
    						c.getItems().addItem(itemID, amount);
    					}
    				}
    				break;
    			}
    		}
    		o.duelStatus = 1;
    		c.duelStatus = 1;					
    		c.getItems().resetItems(3214);
    		c.getItems().resetItems(3322);
    		o.getItems().resetItems(3214);
    		o.getItems().resetItems(3322);
    		c.getTradeAndDuel().refreshDuelScreen();
    		o.getTradeAndDuel().refreshDuelScreen();
    		o.getPA().sendFrame126("", 6684);
    		if(!goodSpace) {
    			c.sendMessage("You have too many rules set to remove that item.");
    			return true;
    		}
            return true;
        }
    	
    	public void confirmDuel() {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o == null) {
    			declineDuel();
    			return;
    		}
    		String itemId = "";
    		for(GameItem item : stakedItems) {
    			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
    				itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
    			}  else  {
    				itemId += c.getItems().getItemName(item.id) + "\\n";
    			}
    		}
    		c.getPA().sendFrame126(itemId, 6516);
    		itemId = "";
    		for(GameItem item : o.getTradeAndDuel().stakedItems) {
    			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
    				itemId += c.getItems().getItemName(item.id) + " x " + Misc.format(item.amount) +"\\n";
    			} else {
    				itemId += c.getItems().getItemName(item.id) +"\\n";
    			}
    		}
    		c.getPA().sendFrame126(itemId, 6517);
    		c.getPA().sendFrame126("", 8242);
    		for(int i = 8238; i <= 8253; i++) {
    			c.getPA().sendFrame126("", i);
    		}
    		c.getPA().sendFrame126("Hitpoints will be restored.", 8250);
    		c.getPA().sendFrame126("Boosted stats will be restored.", 8238);
    		if(c.duelRule[8]) {
    			c.getPA().sendFrame126("There will be obstacles in the arena.", 8239);
    		} 
    		c.getPA().sendFrame126("", 8240);
    		c.getPA().sendFrame126("", 8241);
    		
    		String[] rulesOption = {"Players cannot forfeit!", "Players cannot move.", "Players cannot use range.", "Players cannot use melee.", "Players cannot use magic.",  "Players cannot drink pots.",  "Players cannot eat food.", "Players cannot use prayer."};
    		
    		int lineNumber = 8242;
    		for(int i = 0; i < 8; i++) {
    			if(c.duelRule[i]) {
    				c.getPA().sendFrame126(""+rulesOption[i], lineNumber);
    				lineNumber ++;
    			}
    		}
    		c.getPA().sendFrame126("", 6571);
    		c.getPA().sendFrame248(6412, 197);
    		//c.getPA().showInterface(6412);
    	}
    	
    	
    	public void startDuel() {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o == null) {
    			duelVictory();
    		}
    		c.headIconHints = 2;
    		
    		if(c.duelRule[7]){
    			for(int p = 0; p < c.PRAYER.length; p++) { // reset prayer glows 
    				c.prayerActive[p] = false;
    				c.getPA().sendFrame36(c.PRAYER_GLOW[p], 0);		
    			}
    			c.headIcon = -1;
    			c.getPA().requestUpdates();
    		}		
    		if(c.duelRule[11]) {
    			c.getItems().removeItem(c.playerEquipment[0], 0);
    		}
    		if(c.duelRule[12]) {
    			c.getItems().removeItem(c.playerEquipment[1], 1);
    		}
    		if(c.duelRule[13]) {
    			c.getItems().removeItem(c.playerEquipment[2], 2);
    		}
    		if(c.duelRule[14]) {
    			c.getItems().removeItem(c.playerEquipment[3], 3);
    		}
    		if(c.duelRule[15]) {
    			c.getItems().removeItem(c.playerEquipment[4], 4);
    		}
    		if(c.duelRule[16]) {
    			c.getItems().removeItem(c.playerEquipment[5], 5);
    		}
    		if(c.duelRule[17]) {
    			c.getItems().removeItem(c.playerEquipment[7], 7);
    		}
    		if(c.duelRule[18]) {
    			c.getItems().removeItem(c.playerEquipment[9], 9);
    		}
    		if(c.duelRule[19]) {
    			c.getItems().removeItem(c.playerEquipment[10], 10);
    		}
    		if(c.duelRule[20]) {
    			c.getItems().removeItem(c.playerEquipment[12], 12);
    		}
    		if(c.duelRule[21]) {
    			c.getItems().removeItem(c.playerEquipment[13], 13);
    		}		
    		c.duelStatus = 5;
    		c.getPA().removeAllWindows();
    		c.specAmount = 10;
    		c.getItems().addSpecialBar(c.playerEquipment[c.playerWeapon]);
    		
    		if(c.duelRule[8]){	
    			if(c.duelRule[1]) {
    				c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
    			} else {
    				c.getPA().movePlayer(3366 + Misc.random(12), 3246 + Misc.random(6), 0);
    			}
    		} else {
    			if(c.duelRule[1]) {
    				c.getPA().movePlayer(c.duelTeleX, c.duelTeleY, 0);
    			} else {	
    				c.getPA().movePlayer(3335 + Misc.random(12), 3246 + Misc.random(6), 0);
    			}
    		}
    
    		c.getPA().createPlayerHints(10, o.playerId);
    		c.getPA().showOption(3, 0, "Attack", 1);
    		for (int i = 0; i < 20; i++) {
    			c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
    			c.getPA().refreshSkill(i);
    		}
    		for(GameItem item : o.getTradeAndDuel().stakedItems) {
    			otherStakedItems.add(new GameItem(item.id, item.amount));
    		}
    		c.getPA().requestUpdates();			
    	}
    
    	
    	public void duelVictory() {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o != null) {
    			c.getPA().sendFrame126(""+o.combatLevel, 6839);
    			c.getPA().sendFrame126(o.playerName, 6840);
    			o.duelStatus = 0;
    		} else {
    			c.getPA().sendFrame126("", 6839);
    			c.getPA().sendFrame126("", 6840);
    		}
    		c.duelStatus = 6;
    		c.getCombat().resetPrayers();
    		for (int i = 0; i < 20; i++) {
    			c.playerLevel[i] = c.getPA().getLevelForXP(c.playerXP[i]);
    			c.getPA().refreshSkill(i);
    		}
    		c.freezeTimer = 3;
    		c.getPA().refreshSkill(3);
    		duelRewardInterface();
    		c.getPA().showInterface(6733);
    		c.getPA().movePlayer(Config.DUELING_RESPAWN_X+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), Config.DUELING_RESPAWN_Y+(Misc.random(Config.RANDOM_DUELING_RESPAWN)), 0);	
    		c.getPA().requestUpdates();
    		c.getPA().showOption(3, 0, "Challenge", 3);
    		c.getPA().createPlayerHints(10, -1);
    		c.canOffer = true;
    		c.duelSpaceReq = 0;
    		c.duelingWith = 0;
    		c.getCombat().resetPlayerAttack();
    		c.duelRequested = false;
    	}	
        
    	
    	public void duelRewardInterface() {
    		synchronized(c) {
    		c.freezeTimer = 3;
    			c.getOutStream().createFrameVarSizeWord(53);
    			c.getOutStream().writeWord(6822);
    			c.getOutStream().writeWord(otherStakedItems.toArray().length);
    			for (GameItem item : otherStakedItems) {
    				if (item.amount > 254) {
    					c.getOutStream().writeByte(255);					
    					c.getOutStream().writeDWord_v2(item.amount);
    				} else {
    					c.getOutStream().writeByte(item.amount);
    				}
    				if (item.id > Config.ITEM_LIMIT || item.id < 0) {
    					item.id = Config.ITEM_LIMIT;
    				}
    				c.getOutStream().writeWordBigEndianA(item.id + 1);
    			}
    			c.getOutStream().endFrameVarSizeWord();
    			c.flushOutStream();
    		}
    	}
    
    	public void claimStakedItems() {
    		for(GameItem item : otherStakedItems) {
    			if(item.id > 0 && item.amount > 0) {
    				if(Item.itemStackable[item.id]) {
    					if(!c.getItems().addItem(item.id, item.amount)) {
    						Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
    					}
    				} else {
    					int amount = item.amount;
    					for(int a = 1; a <= amount; a++) {
    						if(!c.getItems().addItem(item.id, 1)) {
    							Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
    						}
    					}
    				}
    			}	
    		}
    		for(GameItem item : stakedItems) {
    			if(item.id > 0 && item.amount > 0) {
    				if(Item.itemStackable[item.id]) {
    					if(!c.getItems().addItem(item.id, item.amount)) {
    						Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), item.amount, c.getId());
    					}
    				} else {
    					int amount = item.amount;
    					for(int a = 1; a <= amount; a++) {
    						if(!c.getItems().addItem(item.id, 1)) {
    							Server.itemHandler.createGroundItem(c, item.id, c.getX(), c.getY(), 1, c.getId());
    						}
    					}
    				}	
    			}
    		}	
    		c.freezeTimer = 3;
    		resetDuel();
    		resetDuelItems();
    		c.duelStatus = 0;
    	}
    	
    	public void declineDuel() {
    		c.getPA().removeAllWindows();
    		c.canOffer = true;
    		c.duelStatus = 0;
    		c.duelingWith = 0;
    		c.duelSpaceReq = 0;
    		c.duelRequested = false;
    		for(GameItem item : stakedItems) {
    			if(item.amount < 1) continue;
    			if(Item.itemStackable[item.id] || Item.itemIsNote[item.id]) {
    				c.getItems().addItem(item.id, item.amount);
    			} else  {
    				c.getItems().addItem(item.id, 1);
    			}
    		}
    		stakedItems.clear();
    		for (int i = 0; i < c.duelRule.length; i++) { 
    			c.duelRule[i] = false;
    		}
    	}
    
    	public void resetDuel() {
    		c.getPA().showOption(3, 0, "Challenge", 3);
    		c.headIconHints = 0;
    		for (int i = 0; i < c.duelRule.length; i++) { 
    			c.duelRule[i] = false;
    		}
    		c.getPA().createPlayerHints(10, -1);
    		c.duelStatus = 0;
    		c.canOffer = true;
    		c.duelSpaceReq = 0;
    		c.duelingWith = 0;
    		c.getPA().requestUpdates();
    		c.getCombat().resetPlayerAttack();
    		c.duelRequested = false;
    	}
    	
    	public void resetDuelItems() {
    		stakedItems.clear();
    		otherStakedItems.clear();
    	}
    	
    	public void changeDuelStuff() {
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o == null) {
    			return;
    		}
    		o.duelStatus = 1;
    		c.duelStatus = 1;
    		o.getPA().sendFrame126("", 6684);
    		c.getPA().sendFrame126("", 6684);
    	}
    	
    	
    	public void selectRule(int i) { // rules
    		Client o = (Client) Server.playerHandler.players[c.duelingWith];
    		if(o == null) {
    			return;
    		}
    		if (!c.canOffer)
    			return;
    		changeDuelStuff();
    		o.duelSlot = c.duelSlot;
    		if(i >= 11 && c.duelSlot > -1) {
    			if(c.playerEquipment[c.duelSlot] > 0) {
    				if(!c.duelRule[i]) {
    					c.duelSpaceReq++;	
    				} else {
    					c.duelSpaceReq--;
    				}
    			}	
    			if(o.playerEquipment[o.duelSlot] > 0) {
    				if(!o.duelRule[i]) {
    					o.duelSpaceReq++;
    				} else {
    					o.duelSpaceReq--;
    				}
    			}
    		}
    
    		if(i >= 11) {
    			if(c.getItems().freeSlots() < (c.duelSpaceReq ) || o.getItems().freeSlots() < (o.duelSpaceReq)) {
    				c.sendMessage("You or your opponent don't have the required space to set this rule.");
    				if(c.playerEquipment[c.duelSlot] > 0) {
    					c.duelSpaceReq--;
    				}
    				if(o.playerEquipment[o.duelSlot] > 0) {
    					o.duelSpaceReq--;
    				}
    				return;
    			}
    		}
    		
    		if(!c.duelRule[i]) {
    			c.duelRule[i] = true;
    			c.duelOption += c.DUEL_RULE_ID[i];
    		} else {	
    			c.duelRule[i] = false;
    			c.duelOption -= c.DUEL_RULE_ID[i];
    		}
    
    		c.getPA().sendFrame87(286, c.duelOption);
    		o.duelOption = c.duelOption;
    		o.duelRule[i] = c.duelRule[i];
    		o.getPA().sendFrame87(286, o.duelOption);
    		
    		if(c.duelRule[8]){	
    			if(c.duelRule[1]) {
    				c.duelTeleX = 3366 + Misc.random(12);
    				o.duelTeleX = c.duelTeleX-1;
    				c.duelTeleY = 3246 + Misc.random(6);
    				o.duelTeleY = c.duelTeleY;
    			}
    		} else {
    			if(c.duelRule[1]) {
    				c.duelTeleX = 3335 + Misc.random(12);
    				o.duelTeleX = c.duelTeleX-1;
    				c.duelTeleY = 3246 + Misc.random(6);
    				o.duelTeleY = c.duelTeleY;
    			}
    		}
    
    	}
    
    }
    Reply With Quote  
     

  4. #4  
    Registered Member
    Edd -'s Avatar
    Join Date
    Jul 2011
    Posts
    664
    Thanks given
    62
    Thanks received
    43
    Rep Power
    84
    if its disabled its because of the amounts of dupes related to duel arena id keep it that way if i was you and just add a fun pk area.
    Reply With Quote  
     

  5. #5  
    Registered Member
    Join Date
    Jan 2012
    Posts
    14
    Thanks given
    0
    Thanks received
    0
    Rep Power
    11
    Quote Originally Posted by Edd is pro View Post
    if its disabled its because of the amounts of dupes related to duel arena id keep it that way if i was you and just add a fun pk area.
    But how can I enable it?
    Reply With Quote  
     


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. duel arena xlogging and in duel arena :S
    By rockarocka in forum Help
    Replies: 4
    Last Post: 06-21-2012, 11:07 PM
  2. [PI] Duel Arena Tripple Duel Dupe
    By Jinx in forum Snippets
    Replies: 1
    Last Post: 04-25-2012, 11:41 AM
  3. Replies: 21
    Last Post: 03-25-2012, 12:46 AM
  4. Replies: 4
    Last Post: 11-20-2010, 10:11 PM
  5. Replies: 1
    Last Post: 10-17-2009, 08:10 AM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •