Changeset 2256

Show
Ignore:
Timestamp:
07/10/08 12:58:48 (3 months ago)
Author:
DrHouse
Message:

Fix in cubic targeting by Gigii-kun.

Quoting Gigii-kun:

  • Fixes:
    ** problems in pvp targeting
    ** fix some issues about life cubics
  • New features (PvP targeting):
    ** cubics wont attack from peace zone
    ** wont attack targets in peace zone
    ** if owner is in a party which is in a command channel then wont attack members of the command channel

Please read this thread for further information: http://www.l2jserver.com/forum/thread.php?threadid=29781

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2CubicInstance.java

    r2168 r2256  
    433433                                enemy = null; 
    434434 
    435                                 if (_owner.getPvpFlag() > 0 || _owner.isInsideZone(L2Character.ZONE_SIEGE) || _owner.isInsideZone(L2Character.ZONE_PVP)) 
     435                                if ((_owner.getPvpFlag() > 0 && !_owner.isInsideZone(L2Character.ZONE_PEACE)) || _owner.isInsideZone(L2Character.ZONE_SIEGE) || _owner.isInsideZone(L2Character.ZONE_PVP)) 
    436436                                { 
    437437                                        if (_owner.getTarget() instanceof L2Summon) 
     
    453453                                        if (enemy != null) 
    454454                                        { 
    455                                                 boolean TargetIt = true; 
     455                                                boolean targetIt = true; 
     456                                                 
    456457                                                if (_owner.getParty() != null) 
    457458                                                { 
    458459                                                        if (_owner.getParty().getPartyMembers().contains(enemy)) 
    459                                                                 TargetIt = false; 
     460                                                                targetIt = false; 
     461                                                        else if (_owner.getParty().getCommandChannel() != null) 
     462                                                        { 
     463                                                                if (_owner.getParty().getCommandChannel().getMembers().contains(enemy)) 
     464                                                                        targetIt = false; 
     465                                                        } 
    460466                                                } 
    461                                                 else if (_owner.getClan() != null && !_owner.isInsideZone(L2Character.ZONE_PVP)) 
    462                                                 { 
     467                                                if (_owner.getClan() != null && !_owner.isInsideZone(L2Character.ZONE_PVP)) 
    463468                                                        if (_owner.getClan().isMember(enemy.getCharId())) 
    464                                                                 TargetIt = false; 
    465                                                 } 
    466                                                 else if (enemy.getPvpFlag() == 0 && !enemy.isInsideZone(L2Character.ZONE_SIEGE) && !enemy.isInsideZone(L2Character.ZONE_PVP)) 
    467                                                         TargetIt = false; 
    468                                                 else if (_owner.getSiegeState() == enemy.getSiegeState() && _owner.getSiegeState() > 0) 
    469                                                         TargetIt = false; 
    470  
    471                                                 if (TargetIt)                                            
     469                                                                targetIt = false; 
     470                                                if (enemy.getPvpFlag() == 0 && !enemy.isInsideZone(L2Character.ZONE_SIEGE) && !enemy.isInsideZone(L2Character.ZONE_PVP)) 
     471                                                        targetIt = false; 
     472                                                if (enemy.isInsideZone(L2Character.ZONE_PEACE)) 
     473                                                        targetIt = false; 
     474                                                if (_owner.getSiegeState() == enemy.getSiegeState() && _owner.getSiegeState() > 0) 
     475                                                        targetIt = false; 
     476 
     477                                                if (targetIt)                                            
    472478                                                        { 
    473479                                                                _target = (L2Character) _owner.getTarget(); 
     
    480486                List<L2Character> potentialTarget = new FastList<L2Character>(); 
    481487                List<L2Character> potentialPvPTarget = new FastList<L2Character>(); 
    482                 Collection<L2Character> KnownTarget = _owner.getKnownList().getKnownCharactersInRadius(MAX_MAGIC_RANGE); 
     488                Collection<L2Character> knownTarget = _owner.getKnownList().getKnownCharactersInRadius(MAX_MAGIC_RANGE); 
    483489                 
    484                         for (L2Character TgMob : KnownTarget) 
     490                        for (L2Character tgMob : knownTarget) 
    485491                        { 
    486492                                // get the mobs which have aggro on the owner or his/her summon 
    487                         if (TgMob instanceof L2Attackable) 
     493                        if (tgMob instanceof L2Attackable) 
    488494                                { 
    489                                 if (((L2Attackable)TgMob).isDead()) continue; 
    490                                 if (((L2Attackable)TgMob).getAggroListRP().get(_owner) != null) 
    491                                         potentialTarget.add(TgMob); 
     495                                if (((L2Attackable)tgMob).isDead()) continue; 
     496                                if (((L2Attackable)tgMob).getAggroListRP().get(_owner) != null) 
     497                                        potentialTarget.add(tgMob); 
    492498                                if (_owner.getPet() != null) 
    493                                         if (((L2Attackable)TgMob).getAggroListRP().get(_owner.getPet()) != null) 
    494                                                 potentialTarget.add(TgMob); 
     499                                        if (((L2Attackable)tgMob).getAggroListRP().get(_owner.getPet()) != null) 
     500                                                potentialTarget.add(tgMob); 
    495501                                } 
    496502                        // get enemy pvp targets 
    497                         else if (_owner.getPvpFlag() > 0 || _owner.isInsideZone(L2Character.ZONE_SIEGE) || _owner.isInsideZone(L2Character.ZONE_PVP)) 
     503                        else if ((_owner.getPvpFlag() > 0 && !_owner.isInsideZone(L2Character.ZONE_PEACE)) || _owner.isInsideZone(L2Character.ZONE_SIEGE) || _owner.isInsideZone(L2Character.ZONE_PVP)) 
    498504                                { 
    499505                                enemy = null; 
    500                                         if (TgMob instanceof L2Summon) 
     506                                        if (tgMob instanceof L2Summon) 
    501507                                        { 
    502                                                 if (!((L2Summon)TgMob).isDead()) 
    503                                                         enemy = ((L2Summon)TgMob).getOwner(); 
     508                                                if (!((L2Summon)tgMob).isDead()) 
     509                                                        enemy = ((L2Summon)tgMob).getOwner(); 
    504510                                        } 
    505                                         else if (TgMob instanceof L2Trap) 
     511                                        else if (tgMob instanceof L2Trap) 
    506512                                        { 
    507                                                 if (!((L2Trap)TgMob).isDead()) 
    508                                                         enemy = ((L2Trap)TgMob).getOwner(); 
     513                                                if (!((L2Trap)tgMob).isDead()) 
     514                                                        enemy = ((L2Trap)tgMob).getOwner(); 
    509515                                        } 
    510                                         else if (TgMob instanceof L2PcInstance) 
     516                                        else if (tgMob instanceof L2PcInstance) 
    511517                                        { 
    512                                                 if (!((L2PcInstance)TgMob).isDead()) 
    513                                                         enemy = (L2PcInstance) TgMob; 
     518                                                if (!((L2PcInstance)tgMob).isDead()) 
     519                                                        enemy = (L2PcInstance) tgMob; 
    514520                                        } 
    515521                         
    516522                                        if (enemy != null) 
    517523                                        { 
    518                                                 boolean TargetIt = true; 
     524                                                boolean targetIt = true; 
    519525                                                if (_owner.getParty() != null) 
    520526                                                { 
    521527                                                        if (_owner.getParty().getPartyMembers().contains(enemy)) 
    522                                                                 TargetIt = false; 
     528                                                                targetIt = false;                                                        
     529                                                        else if (_owner.getParty().getCommandChannel() != null) 
     530                                                        { 
     531                                                                if (_owner.getParty().getCommandChannel().getMembers().contains(enemy)) 
     532                                                                        targetIt = false; 
     533                                                        }                                                        
    523534                                                } 
    524                                                 else if (_owner.getClan() != null && !_owner.isInsideZone(L2Character.ZONE_PVP)) 
    525                                                 { 
     535                                                 
     536                                                if (_owner.getClan() != null && !_owner.isInsideZone(L2Character.ZONE_PVP)) 
    526537                                                        if (_owner.getClan().isMember(enemy.getCharId())) 
    527                                                                 TargetIt = false; 
    528                                                 } 
    529                                                 else if (enemy.getPvpFlag() == 0 && !enemy.isInsideZone(L2Character.ZONE_SIEGE) && !enemy.isInsideZone(L2Character.ZONE_PVP)) 
    530                                                         TargetIt = false; 
    531                                                 else if (_owner.getSiegeState() == enemy.getSiegeState() && _owner.getSiegeState() > 0) 
    532                                                         TargetIt = false; 
    533  
    534                                                 if (TargetIt)                                            
    535                                                         potentialPvPTarget.add(TgMob); 
     538                                                                targetIt = false; 
     539                                                if (enemy.getPvpFlag() == 0 && !enemy.isInsideZone(L2Character.ZONE_SIEGE) && !enemy.isInsideZone(L2Character.ZONE_PVP)) 
     540                                                        targetIt = false; 
     541                                                if (enemy.isInsideZone(L2Character.ZONE_PEACE)) 
     542                                                        targetIt = false; 
     543                                                if (_owner.getSiegeState() == enemy.getSiegeState() && _owner.getSiegeState() > 0) 
     544                                                        targetIt = false; 
     545 
     546                                                if (targetIt)                                            
     547                                                        potentialPvPTarget.add(tgMob); 
    536548                                        } 
    537549                                } 
     
    754766                if (partyMember.getPet() != null) 
    755767                { 
    756                         if (!partyMember.getPet().isDead()) continue; 
     768                        if (partyMember.getPet().isDead()) continue; 
    757769                         
    758770                    //if party member's pet not dead, check if it is in castrange of heal cubic 
    759                     if (isInCubicRange(_owner,partyMember.getPet())) continue; 
     771                    if (!isInCubicRange(_owner,partyMember.getPet())) continue; 
    760772 
    761773                    // member's pet is in cubic casting range, check if he need heal and if he have the lowest HP                                
     
    779791            } 
    780792            if (_owner.getPet() != null) 
    781                 if ((percentleft > (_owner.getPet().getCurrentHp() / _owner.getPet().getMaxHp())) 
    782                                 && !(_owner.getPet().isDead()) && isInCubicRange(_owner,_owner.getPet())) 
     793                if (!_owner.getPet().isDead() && _owner.getPet().getCurrentHp() < _owner.getPet().getMaxHp()  
     794                                && percentleft > (_owner.getPet().getCurrentHp() / _owner.getPet().getMaxHp()) 
     795                                && isInCubicRange(_owner,_owner.getPet())) 
    783796                { 
    784797                        target = _owner.getPet(); 
     
    786799                } 
    787800        } 
    788         if (percentleft == 100.0) 
    789                 _target = null; 
    790         else 
    791                 _target = target; 
    792         return; 
     801 
     802        _target = target; 
    793803    } 
    794804 
     
    833843                { 
    834844                    CubicTargetForHeal(); 
    835                     if (_target != null && !_target.isDead()) 
     845                    L2Character target = _target; 
     846                    if (target != null && !target.isDead()) 
    836847                    { 
    837                         double percentleft = _target.getCurrentHp() / _target.getMaxHp()
     848                        double percentleft = (target.getCurrentHp() / target.getMaxHp())* 100.0
    838849                     
    839850                        int typeHeal = 1; //1 = 60%+; 2= 30-60%; 3=30%- 
     
    855866                        } 
    856867                     
    857                         if (Rnd.get(1,100) < chance){ 
    858                                         L2Character[] targets = {_target}; 
     868                        if (Rnd.get(1,100) < chance) 
     869                        { 
     870                                        L2Character[] targets = {target}; 
    859871                                        ISkillHandler handler = SkillHandler.getInstance().getSkillHandler(skill.getSkillType()); 
    860872                                        if (handler != null) 
     
    866878                                                skill.useSkill(_owner, targets); 
    867879                                        } 
    868                                         MagicSkillUse msu = new MagicSkillUse(_owner, _target, skill.getId(), 
    869                                                                                                                                         skill.getLevel(), 0, 0); 
     880                                         
     881                                        MagicSkillUse msu = new MagicSkillUse(_owner, target, skill.getId(), 
     882                                                        skill.getLevel(), 0, 0); 
    870883                                        _owner.broadcastPacket(msu); 
    871884                                }