Thread: [PI] Multi barrage on NPCs and Players

Page 1 of 4 123 ... LastLast
Results 1 to 10 of 33
  1. #1 [PI] Multi barrage on NPCs and Players 
    Registered Member

    Join Date
    Aug 2008
    Posts
    2,823
    Thanks given
    362
    Thanks received
    447
    Rep Power
    965
    Code:
    	public void multiSpellOnNPC(int originalNpc) {
    		c.PlayerAttType = 2;
    		if (!multis() || !c.inMulti())
    			return;
    		NPC o2 = (NPC) NPCHandler.npcs[originalNpc];
    		int origX = o2.absX;
    		int origY = o2.absY;
    		for (int indx = 0; indx < NPCHandler.maxNPCs; indx++) {
    			if (NPCHandler.npcs[indx] != null) {
    				NPC o = (NPC) NPCHandler.npcs[indx];
    				if (!(o.absX >= origX - 2 && o.absX <= origX + 2
    						&& o.absY >= origY - 2 && o.absY <= origY + 2)
    						|| !o.inMulti())
    					continue;
    				if (!checkNpcReq(indx) || indx == originalNpc)
    					continue;
    				int bonusAttack = getBonusAttack(indx);
    				if (Misc.random(NPCHandler.npcs[indx].defence) > 10
    						+ Misc.random(mageAtk()) + bonusAttack) {
    					if (getEndGfxHeight() == 100) { // end GFX
    						o.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
    					} else {
    						o.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
    					}
    					int damage = Misc.random(c.MAGIC_SPELLS[c.oldSpellId][6]);
    					c.getPA().addSkillXP(
    							(c.MAGIC_SPELLS[c.oldSpellId][7] + damage
    									* Config.MAGIC_EXP_RATE), 6);
    					c.getPA().addSkillXP(
    							(c.MAGIC_SPELLS[c.oldSpellId][7] + damage
    									* Config.MAGIC_EXP_RATE / 3), 3);
    					spellEffects(damage, indx);
    					if (damage > -1) {
    						NPCHandler.npcs[indx].hitDiff = damage;
    						NPCHandler.npcs[indx].HP -= damage;
    						NPCHandler.npcs[indx].hitUpdateRequired = true;
    						c.totalDamageDealt += damage;
    					}
    				} else {
    					int damage = 0;
    					o.gfx100(85);
    					NPCHandler.npcs[indx].hitDiff = damage;
    					NPCHandler.npcs[indx].hitUpdateRequired = true;
    					c.totalDamageDealt += damage;
    				}
    			}
    		}
    	}
    
    	public void multiSpellOnPlayer(int originalPlayer) {
    		if (!multis() || !c.inMulti())
    			return;
    		c.PlayerAttType = 2;
    		Client o2 = (Client) PlayerHandler.players[originalPlayer];
    		int origX = o2.absX;
    		int origY = o2.absY;
    		for (int indx = 0; indx < Config.MAX_PLAYERS; indx++) {
    			if (PlayerHandler.players[indx] != null) {
    				Client o = (Client) PlayerHandler.players[indx];
    				if (!(o.absX >= origX - 2 && o.absX <= origX + 2
    						&& o.absY >= origY - 2 && o.absY <= origY + 2)
    						|| !o.inMulti())
    					continue;
    				if (!checkPlayerReq(indx) || indx == originalPlayer
    						|| indx == c.playerId)
    					continue;
    				if (Misc.random(o.getCombat().mageDef()) > Misc
    						.random(mageAtk())) {
    					if (getEndGfxHeight() == 100) { // end GFX
    						o.gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
    					} else {
    						o.gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
    					}
    					int damage = Misc.random(c.MAGIC_SPELLS[c.oldSpellId][6]);
    					c.getPA().addSkillXP(
    							(c.MAGIC_SPELLS[c.oldSpellId][7] + damage
    									* Config.MAGIC_EXP_RATE), 6);
    					c.getPA().addSkillXP(
    							(c.MAGIC_SPELLS[c.oldSpellId][7] + damage
    									* Config.MAGIC_EXP_RATE / 3), 3);
    					spellEffects(damage, indx);
    					hitPlayer(indx, damage);
    				} else {
    					o.gfx100(85);
    					hitPlayer(indx, 0);
    				}
    			}
    		}
    	}
    	
    	public void spellEffects(int damage, int indx) {
    		switch (c.MAGIC_SPELLS[c.oldSpellId][0]) {
    		case 12901:
    		case 12919:
    		case 12911:
    		case 12929:
    			int heal = Misc.random(damage / 2);
    			if (c.playerLevel[3] + heal >= c.getPA().getLevelForXP(
    					c.playerXP[3])) {
    				c.playerLevel[3] = c.getPA().getLevelForXP(c.playerXP[3]);
    			} else {
    				c.playerLevel[3] += heal;
    			}
    			c.getPA().refreshSkill(3);
    			break;
    		}
    		int freezeDelay = getFreezeTime();
    		if (c.playerIndex > 0) {
    			if(freezeDelay > 0 && PlayerHandler.players[indx].freezeTimer == 0)
    				PlayerHandler.players[indx].freezeTimer = freezeDelay;
    		} else if (c.npcIndex > 0) {
    			if(freezeDelay > 0 && NPCHandler.npcs[indx].freezeTimer == 0)
    				NPCHandler.npcs[indx].freezeTimer = freezeDelay;
    		}
    	}
    	
    	public void hitPlayer(int damage, int i) {
    		Client o = (Client) PlayerHandler.players[i];
    		if(o == null)
    			return;
    		o.setHitDiff(damage);
    		o.setHitUpdateRequired(true);
    		o.dealDamage(damage);
    		o.updateRequired = true;
    		o.underAttackBy = c.playerId;
    		o.logoutDelay = System.currentTimeMillis();
    		o.singleCombatDelay = System.currentTimeMillis();
    	}
    
    	public boolean checkNpcReq(int i) {
    		if (NPCHandler.npcs[i].isDead || NPCHandler.npcs[i].MaxHP <= 0) {
    			c.usingMagic = false;
    			c.faceUpdate(0);
    			c.npcIndex = 0;
    			return false;
    		}			
    		if(c.respawnTimer > 0) {
    			c.npcIndex = 0;
    			return false;
    		}
    		if (NPCHandler.npcs[i].underAttackBy > 0 && NPCHandler.npcs[i].underAttackBy != c.playerId && !NPCHandler.npcs[i].inMulti() && c.inGodwars() == false) {
    			c.npcIndex = 0;
    			c.sendMessage("This monster is already in combat.");
    			return false;
    		}
    		if ((c.underAttackBy > 0 || c.underAttackBy2 > 0) && c.underAttackBy2 != i && !c.inMulti() && c.inGodwars() == false) {
    			resetPlayerAttack();
    			c.sendMessage("I am already under attack.");
    			return false;
    		}
    		if (!goodSlayer(i)) {
    			resetPlayerAttack();
    			return false;
    		}
    
    		if (NPCHandler.npcs[i].npcType == 6258) {
    			if (92 > c.getLevelForXP(c.playerXP[c.playerPrayer])) {
    				c.sendMessage("You need a prayer level of 92 to harm this NPC.");
    				resetPlayerAttack();
    				return false;
    			}
    		}
    		if (NPCHandler.npcs[i].spawnedBy != c.playerId && NPCHandler.npcs[i].spawnedBy > 0) {
    			resetPlayerAttack();
    			c.sendMessage("This monster was not spawned for you.");
    			return false;
    		}
    		return true;
    	}
    
    	public boolean checkPlayerReq(int i) {
    		if (PlayerHandler.players[i].isDead) {
    			resetPlayerAttack();
    			return false;
    		}
    		
    		if(c.respawnTimer > 0 || PlayerHandler.players[i].respawnTimer > 0) {
    			resetPlayerAttack();
    			return false;
    		}
    		
    		/*if (c.teleTimer > 0 || Server.playerHandler.players[i].teleTimer > 0) {
    			resetPlayerAttack();
    			return;
    		}*/
    		
    		if(!c.getCombat().checkReqs()) {
    			return false;
    		}
    		
    		if(c.playerRights == 1 && c.playerRights ==2){
    			c.sendMessage("Staff are not allowed to pk");
    			c.sendMessage("Your account has been blacklisted for an owner to see");
    			return false;
    		}
    		
    		if (c.getPA().getWearingAmount() < 4 && c.duelStatus < 1 && !c.inWeaponGame()) {
    			c.sendMessage("You must be wearing at least 4 items to attack someone.");
    			resetPlayerAttack();
    			return false;
    		}
    		boolean sameSpot = c.absX == PlayerHandler.players[i].getX() && c.absY == PlayerHandler.players[i].getY();
    		if(!c.goodDistance(PlayerHandler.players[i].getX(), PlayerHandler.players[i].getY(), c.getX(), c.getY(), 25) && !sameSpot) {
    			resetPlayerAttack();
    			return false;
    		}
    		if(PlayerHandler.players[i].respawnTimer > 0) {
    			PlayerHandler.players[i].playerIndex = 0;
    			resetPlayerAttack();
    			return false;
    		}
    		
    		if (PlayerHandler.players[i].heightLevel != c.heightLevel) {
    			resetPlayerAttack();
    			return false;
    		}
    		return true;
    	}
    Code:
    ...
    if(getEndGfxHeight() == 100 && !magicFailed){ // end GFX
    					NPCHandler.npcs[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
    				} else if (!magicFailed){
    					NPCHandler.npcs[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
    				}
    				multiSpellOnNPC(i);	
    ...
    Code:
    ...
    if(getEndGfxHeight() == 100 && !c.magicFailed){ // end GFX
    					PlayerHandler.players[i].gfx100(c.MAGIC_SPELLS[c.oldSpellId][5]);
    				} else if (!c.magicFailed){
    					PlayerHandler.players[i].gfx0(c.MAGIC_SPELLS[c.oldSpellId][5]);
    				} else if(c.magicFailed) {	
    					PlayerHandler.players[i].gfx100(85);
    				}
    				multiSpellOnPlayer(i);
    ...
    Reply With Quote  
     

  2. #2  
    Community Veteran

    Dexter Morgan's Avatar
    Join Date
    Nov 2008
    Age
    16
    Posts
    4,364
    Thanks given
    1,027
    Thanks received
    703
    Discord
    View profile
    Rep Power
    2991
    Why you doing it so complicated...
    [Only registered and activated users can see links. ]
    Quote Originally Posted by UberNation View Post
    Did you update the quantum network sockets to match the polarity of the wilderness counter levels in the Boolean that divides the wilderness level by zero?
    Reply With Quote  
     

  3. Thankful user:


  4. #3  
    Registered Member

    Join Date
    Aug 2008
    Posts
    2,823
    Thanks given
    362
    Thanks received
    447
    Rep Power
    965
    It's not complicated.
    Reply With Quote  
     

  5. #4  
    Super Donator

    Benji's Avatar
    Join Date
    Feb 2010
    Age
    26
    Posts
    1,526
    Thanks given
    920
    Thanks received
    501
    Discord
    View profile
    Rep Power
    555
    You don't have support for the different graphic for barrage damage as opposed to the first freeze graphic
    If you freeze someone, then ice barrage again, it will appear as a small sphere with light blue stars falling from it. In the past, the animation of ice barrage would continuously be shown as a big block of ice on the opponent.
    You also need a 4000 ms delay between when freezetimer hits 0 to the time where you can freeze the other player again

    After someone has broken out of the freezing effect of Ice Barrage, they will be immune from being frozen for up to 4 seconds.
    You have to have a separate boolean that is called when freezetimer hits 0 and returns true after 4000 ms and then do
    Code:
    if(freezeDelay > 0 && PlayerHandler.players[indx].freezeTimer == 0 && shouldFreeze)
    something like this

    Code:
    public boolean shouldFreeze(int freezeTimer) {
    	if(freezeTimer == 0) {
    		EventManager.getSingleton().addEvent(new Event() {
                    @Override
    			public void execute(EventContainer Container) {
    				int wait = 0;
    				wait++;
    				return (wait == 0 ? true : false);
    			} 
    		}, 4000);
    	}
    	return false;
    }
    This

    Code:
    for (int indx = 0; indx < NPCHandler.maxNPCs; indx++) {
    could be

    Code:
    for (int indx : NPCHandler.NPCs) {
    Overall, good job

    Reply With Quote  
     

  6. #5  
    Registered Member Arcadia's Avatar
    Join Date
    Jan 2011
    Posts
    416
    Thanks given
    84
    Thanks received
    32
    Rep Power
    7
    Make this into a full-blown spoonfeed, there's tons of new owners out there who want this.
    Bryce:
    [Only registered and activated users can see links. ]
    -Removed, image to big
    Reply With Quote  
     

  7. #6  
    Banned
    Join Date
    Mar 2008
    Posts
    1,937
    Thanks given
    131
    Thanks received
    61
    Rep Power
    0
    Quote Originally Posted by Walsh Hero View Post
    Make this into a full-blown spoonfeed, there's tons of new owners out there who want this.
    like you
    Reply With Quote  
     

  8. Thankful users:


  9. #7  
    Registered Member Arcadia's Avatar
    Join Date
    Jan 2011
    Posts
    416
    Thanks given
    84
    Thanks received
    32
    Rep Power
    7
    Quote Originally Posted by ilike to own View Post
    like you
    Considering I already have this, I was refering to people like you, when it looks like a different language to you
    Bryce:
    [Only registered and activated users can see links. ]
    -Removed, image to big
    Reply With Quote  
     

  10. #8  
    Registered Member
    Underoath's Avatar
    Join Date
    Sep 2008
    Posts
    2,943
    Thanks given
    826
    Thanks received
    582
    Rep Power
    853
    I alrdy released this


    Special thanks to Payton :trollface:
    Spoiler for People I respect:

    Definitely not you, faggot.

    Reply With Quote  
     

  11. #9  
    Registered Member

    Join Date
    Aug 2008
    Posts
    2,823
    Thanks given
    362
    Thanks received
    447
    Rep Power
    965
    Quote Originally Posted by Dixi Normous View Post
    I alrdy released this
    And I released my version.

    Kthxbai
    Reply With Quote  
     

  12. #10  
    Super Donator

    Benji's Avatar
    Join Date
    Feb 2010
    Age
    26
    Posts
    1,526
    Thanks given
    920
    Thanks received
    501
    Discord
    View profile
    Rep Power
    555
    Quote Originally Posted by Kataang View Post
    And I released my version.

    Kthxbai

    Aren't you both from Misthalin?

    or do you just bitch at each other all the time

    Reply With Quote  
     

  13. Thankful users:


Page 1 of 4 123 ... 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. Replies: 4
    Last Post: 06-14-2011, 06:07 PM
  2. Replies: 10
    Last Post: 10-03-2010, 07:50 AM
  3. Multi barrage on npcs?
    By Ryan™ in forum Help
    Replies: 4
    Last Post: 09-09-2009, 10:29 PM
  4. multi barrage
    By Austin_ in forum Tutorials
    Replies: 52
    Last Post: 07-14-2009, 06:39 PM
  5. Making NPCs not walk throught Players & NPCs
    By Nemmyz in forum Configuration
    Replies: 10
    Last Post: 03-11-2009, 12:20 PM
Posting Permissions
  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •