Сообщений: 982 
	Тем: 73 
	Зарегистрирован: Jan 2009
	
 Репутация: 
 2,862
	 
 
	
	
		Хочу сделать подбор дропа не только с мобов но и нпц , может кто нашел где сделать )) подскажите
	 
	
	
MiR @ Aion Emu 
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу  скрипты и квесты на заказ , правки ядра  , правки даты , писать в ПМ
 
	
	
 
 
	
	
	
		
	Сообщений: 1,832 
	Тем: 26 
	Зарегистрирован: Jan 2010
	
 Репутация: 
 3,766
	 
 
	
	
		А разве его нет? Оо  
Прикольнись с Tribe, должно помочь.
	 
	
	
Мы всё сделаем металлом! Чернее чернейшей черноты бесконечности! © Nathan Explotion 
Работаю с Aion Java-emu, любой версии. skype: alexsiuss1
 
	
	
 
 
	
	
	
		
	Сообщений: 982 
	Тем: 73 
	Зарегистрирован: Jan 2009
	
 Репутация: 
 2,862
	 
 
	
	
		Цитата:А разве его нет? Оо 
 нет если ставиш NON_ATTACKABLE , хочу сделать Геру и Теграка  , что бы их не возможно было атаковать своей расе
 Цитата:Прикольнись с Tribe, должно помочь. 
а поподробней
	  
	
	
MiR @ Aion Emu 
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу  скрипты и квесты на заказ , правки ядра  , правки даты , писать в ПМ
 
	
	
 
 
	
	
	
		
	Сообщений: 202 
	Тем: 7 
	Зарегистрирован: Dec 2010
	
 Репутация: 
 54
	 
 
	
	
		Можно сделать, только NON_ATTACKABLE тут часть общего плана. И кстати для теграка и геры будет достаточно прописать именно NON_ATTACKABLE, я так и сделал у ся на серве, и всё прекрасно работает. Для остальных нпс чуть повозится надо будет.  
Вобщем вся фишка в  MonsterController и  NpcController , а именно в методе  doReward, в контролере для нпс он небыл переопределён, а значит остался таким же как и для обшего класса  CreatureController, а вот в монстер контролере он был переопределён, посему все объекты которые спавнятся как монстры и наследуют монстер контролер могут выдавать ревард(дроп). 
Собсно тут есть два пути: 
1) глобальный    , поскольку  MonsterController extends NpcController тобиш расширяет класс нпсконтролера, можно перенести метод  doReward из монстерконтролера в нпсконтролер, далее придётся править нюансы во всей иерархии использования монстерконтролера.  
В результате получим возможность сбора дропа с любого нпс. 
2) локальный    , больше подходит для обработки отдельных нпс, например боссов, порталов и других специфичных объектов. Т.е. просто в при спавне указать какие npcid мы хочем сделать монстрами, и тогда только с них можно будет собрать дроп. 
Это уже делается в  SpawnEngine в методе  SpawnObject .
	  
	
	
Дверь запили!
 
	
	
 
 
	
	
	
		
	Сообщений: 982 
	Тем: 73 
	Зарегистрирован: Jan 2009
	
 Репутация: 
 2,862
	 
 
	
	
		Цитата:А разве его нет? Оо  
Прикольнись с Tribe, должно помочь. 
 или обоснуй , или не пиши если незнаеш! писец все перерыл неработает нех
	  
	
	
MiR @ Aion Emu 
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу  скрипты и квесты на заказ , правки ядра  , правки даты , писать в ПМ
 
	
	
 
 
	
	
	
		
	Сообщений: 1,832 
	Тем: 26 
	Зарегистрирован: Jan 2010
	
 Репутация: 
 3,766
	 
 
	
	
		Можно полегче, я тебе не друг.  А "рыл" ты плохо. 
 
			Статы 
			Код: <npc_template npc_id="258205" level="60" name="enraged mastarius" name_id="320040" npc_type="ATTACKABLE" height="0.7" rank="LEGENDARY" race="GCHIEF_DARK" tribe="GUARD_DARK" srange="20" arange="37" arank="1000" hpgauge="27"> 
  <stats maxMp="185843" maxHp="153746955" maxXp="27567000" block="145" parry="144" mdef="146" pdef="148" crit="148" power="142" evasion="143" accuracy="148" magic_accuracy="148" walk_speed="6.75" run_speed="6.75" run_speed_fight="11.0" fly_speed="0.0"/> 
  <equipment> 
   <item>100100726</item> 
  </equipment> 
 </npc_template>
  
		 
Ещё для полного феншуя нужно будет редактировать сами трайбы, на agro и friend
	  
	
	
Мы всё сделаем металлом! Чернее чернейшей черноты бесконечности! © Nathan Explotion 
Работаю с Aion Java-emu, любой версии. skype: alexsiuss1
 
	
	
 
 
	
	
	
		
	Сообщений: 982 
	Тем: 73 
	Зарегистрирован: Jan 2009
	
 Репутация: 
 2,862
	 
 
	
		
		
		04-14-2011, 10:35 AM 
(Сообщение последний раз редактировалось: 04-14-2011, 12:03 PM   Romanz.)
		
	 
	
		Цитата:npc_type="ATTACKABLE" 
 
ну так напиши как ты сделал если я такой нуб ) , что бы своя раса не могла атаковать , а вторая могла дроп поднять
	  
	
	
MiR @ Aion Emu 
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу  скрипты и квесты на заказ , правки ядра  , правки даты , писать в ПМ
 
	
	
 
 
	
	
	
		
	Сообщений: 215 
	Тем: 4 
	Зарегистрирован: Mar 2010
	
 Репутация: 
 28
	 
 
	
	
		Romanz Написал:ну так напиши как ты сделал если я такой нуб ) , что бы своя раса не могла атаковать , а вторая могла дроп поднять 
Слова flashman-a 
 
И кстати для теграка и геры будет достаточно прописать именно NON_ATTACKABLE, я так и сделал у ся на серве, и всё прекрасно работает
	  
	
	
	
	
 
 
	
	
	
		
	Сообщений: 202 
	Тем: 7 
	Зарегистрирован: Dec 2010
	
 Репутация: 
 54
	 
 
	
		
		
		04-14-2011, 08:59 PM 
(Сообщение последний раз редактировалось: 04-14-2011, 09:25 PM   flashman.)
		
	 
	
		Цитата:кстати для теграка и геры будет достаточно прописать именно NON_ATTACKABLE, я так и сделал у ся на серве, и всё прекрасно работает 
Вынужден признать, что не совсем достаточно    . 
В этом случае придётся внести изменение в метод  spawnObject в  SpawnEngine . Если у вас в ядре есть класс  Monster и  MonsterContoller. 
 PHP код: <?php  
switch(objectId) 
            { 
                // Gera, Tegrak 
                case 258200: 
                case 258205: 
                    npc = new Monster(iDFactory.nextId(), new MonsterController(), spawn, template); 
                    npc.setKnownlist(new StaticObjectKnownList(npc)); 
                    break; 
}  
  Вот весь код метода спавна с месторасположением примера описанного выше.
 
			Весь код метода 
			PHP код: <?php  
/** 
     * Creates VisibleObject instance and spawns it using given {@link SpawnTemplate} instance. 
     * 
     * @param spawn 
     * @return created and spawned VisibleObject 
     */ 
    public VisibleObject spawnObject(SpawnTemplate spawn, int instanceIndex) { 
 
        VisibleObjectTemplate template = null; 
        if (spawn == null) { 
            return null; 
        } 
 
        int objectId = spawn.getSpawnGroup().getNpcid(); 
 
        NpcData npcData = DataManager.NPC_DATA; 
        if (objectId > 400000 && objectId < 499999)// gatherable 
        { 
            template = DataManager.GATHERABLE_DATA.getGatherableTemplate(objectId); 
            if (template == null) 
                return null; 
            gatherableCounter++; 
        } else 
        // npc 
        { 
            template = npcData.getNpcTemplate(objectId); 
            if (template == null) { 
                log.error("No template for NPC " + String.valueOf(objectId)); 
                return null; 
            } 
            npcCounter++; 
        } 
        IDFactory iDFactory = IDFactory.getInstance(); 
        if (template instanceof NpcTemplate) { 
            NpcType npcType = ((NpcTemplate) template).getNpcType(); 
            Npc npc = null; 
 
            if (npcType != null) { 
                switch (npcType) { 
                    case AGGRESSIVE: 
                    case ATTACKABLE: 
                        npc = new Monster(iDFactory.nextId(), new MonsterController(), 
                                spawn, template); 
                        npc.setKnownlist(new NpcKnownList(npc)); 
                        break; 
                    case POSTBOX: 
                        npc = new Npc(iDFactory.nextId(), new PostboxController(), spawn, 
                                template); 
                        npc.setKnownlist(new StaticObjectKnownList(npc)); 
                        break; 
                    case RESURRECT: 
                        BindpointController bindPointController = new BindpointController(); 
                        bindPointController.setBindPointTemplate(DataManager.BIND_POINT_DATA.getBindPointTemplate(objectId)); 
                        npc = new Npc(iDFactory.nextId(), bindPointController, spawn, template); 
                        npc.setKnownlist(new StaticObjectKnownList(npc)); 
                        break; 
                    case USEITEM: 
                        npc = new Npc(iDFactory.nextId(), new ActionitemController(), 
                                spawn, template); 
                        npc.setKnownlist(new StaticObjectKnownList(npc)); 
                        break; 
                    case PORTAL: 
                        npc = new Npc(iDFactory.nextId(), new PortalController(), spawn, 
                                template); 
                        npc.setKnownlist(new StaticObjectKnownList(npc)); 
                        break; 
                    default: // NON_ATTACKABLE 
                        npc = new Npc(iDFactory.nextId(), new NpcController(), spawn, 
                                template); 
                        npc.setKnownlist(new NpcKnownList(npc)); 
                        break; 
                } 
            } else { 
                npc = new Npc(iDFactory.nextId(), new NpcController(), spawn, 
                        template); 
                npc.setKnownlist(new NpcKnownList(npc)); 
            } 
 
            // special exception 
            switch(objectId) 
            { 
                // Gera, Tegrak 
                case 258200: 
                case 258205: 
                    npc = new Monster(iDFactory.nextId(), new MonsterController(), spawn, template); 
                    npc.setKnownlist(new StaticObjectKnownList(npc)); 
                    break; 
                // Nightmare Support Npcs 
                case 730336:  
                case 730337: 
                case 730338: 
                case 730339: 
                case 700924: 
                // Nightmare bosses 
                case 217000: 
                case 217002: 
                case 216982: 
                    npc = new Monster(iDFactory.nextId(), new NightmareController(), spawn, 
                        template); 
                    npc.setKnownlist(new StaticObjectKnownList(npc)); 
                    break; 
                // Labdakus, Ramilion 
                case 278593: 
                case 212649:  
                    npc = new Monster(iDFactory.nextId(), new MonsterController(), spawn, template); 
                    npc.setKnownlist(new StaticObjectKnownList(npc)); 
                    break; 
                // Silentera Entrance Portals 
                case 730256:  
                case 730260: 
                    npc = new Npc(iDFactory.nextId(), new SilenteraCanyonEntranceController(), spawn, 
                        template); 
                    npc.setKnownlist(new StaticObjectKnownList(npc)); 
                    break; 
            } 
 
            //steel rake exception 
            if (objectId == 215402 || objectId == 215403 || objectId == 215404 || objectId == 215405 || objectId == 798378 || objectId == 798379) { 
                npc = new Npc(iDFactory.nextId(), new SteelRakeController(), 
                        spawn, template); 
                npc.setKnownlist(new NpcKnownList(npc)); 
            } else if (objectId == 700548 || objectId == 730207) { 
                npc = new Npc(iDFactory.nextId(), new SteelRakeController(), 
                        spawn, template); 
                npc.setKnownlist(new StaticObjectKnownList(npc)); 
            } 
 
            npc.setNpcSkillList(DataManager.NPC_SKILL_DATA.getNpcSkillList(template.getTemplateId())); 
            npc.setEffectController(new EffectController(npc)); 
            npc.getController().onRespawn(); 
            bringIntoWorld(npc, spawn, instanceIndex); 
 
            return npc; 
        } else if (template instanceof GatherableTemplate) { 
            Gatherable gatherable = new Gatherable(spawn, template, iDFactory.nextId(), new GatherableController()); 
            gatherable.setKnownlist(new StaticObjectKnownList(gatherable)); 
            bringIntoWorld(gatherable, spawn, instanceIndex); 
            return gatherable; 
        } 
        return null; 
    }  
  
		 
Сдесь делается исключение для указанных нпс, посему этот метод не универсален. В моём посте выше, первый способ решения данной проблемы будет универсальным и позволит собирать дроп с любого враждебного неатакуемого нпс (NON_ATTACKABLE) или с любого атакуемого нпс даже если его trible является дружественным или не агро, при этом не надо будет вносить изменения в  SpawnEngine.
 
			Статы боссов 
			
PHP код: <?php  
<npc_template npc_id="258200" level="57" name="enraged veille" name_id="320035" npc_type="NON_ATTACKABLE" height="0.7" rank="LEGENDARY" race="GCHIEF_LIGHT" tribe="GUARD" srange="20" arange="37" arank="1000" hpgauge="27"> 
    <stats maxHp="120000000" maxXp="25000000" maxMp="2000000" block="200" parry="200" mdef="200" pdef="200" crit="150" power="260" evasion="200" accuracy="200" magic_accuracy="250" walk_speed="1.0" run_speed="8.0" run_speed_fight="8.0" fly_speed="0.0" /> 
    <equipment> 
      <item>100500746</item> 
    </equipment> 
  </npc_template> 
  <npc_template npc_id="258205" level="57" name="enraged mastarius" name_id="320040" npc_type="NON_ATTACKABLE" height="0.7" rank="LEGENDARY" race="GCHIEF_DARK" tribe="GUARD_DARK" srange="20" arange="37" arank="1000" hpgauge="27"> 
    <stats maxHp="120000000" maxXp="25000000" maxMp="2000000" block="200" parry="200" mdef="200" pdef="200" crit="150" power="260" evasion="200" accuracy="200" magic_accuracy="250" walk_speed="1.0" run_speed="8.0" run_speed_fight="8.0" fly_speed="0.0" /> 
    <equipment> 
      <item>100100726</item> 
    </equipment> 
  </npc_template>  
   
		 
Либо можно в метод  attackTarget который находится в  PlayerController добавить сделующее :
 PHP код: <?php  
if (target instanceof Npc) 
        { 
            if (getOwner().getCommonData().getRace() == Race.ASMODIANS && ((Npc)target).getNpcId() == 258205) 
                return; 
            if (getOwner().getCommonData().getRace() == Race.ELYOS && ((Npc)target).getNpcId() == 258200) 
                return; 
        }  
  Используя такой способ этих двух боссов нельзя будет атаковать даже если они ATTACKABLE (если ничего не напутал) . 
			Весь код 
			
PHP код: <?php  
@Override 
    public void attackTarget(Creature target) { 
        Player player = getOwner(); 
 
        /** 
         * Check all prerequisites 
         */ 
        if (target == null || !player.canAttack()) 
            return; 
 
        if (target instanceof Npc) 
        { 
            if (getOwner().getCommonData().getRace() == Race.ASMODIANS && ((Npc)target).getNpcId() == 258205) 
                return; 
            if (getOwner().getCommonData().getRace() == Race.ELYOS && ((Npc)target).getNpcId() == 258200) 
                return; 
        } 
         
        PlayerGameStats gameStats = player.getGameStats(); 
 
        // check player attack Z distance 
        if (Math.abs(player.getZ() - target.getZ()) > 6) 
            return; 
 
        if (!RestrictionsManager.canAttack(player, target)) 
            return; 
 
        int attackSpeed = gameStats.getCurrentStat(StatEnum.ATTACK_SPEED); 
        long milis = System.currentTimeMillis(); 
        if (milis - lastAttackMilis < attackSpeed) { 
            /** 
             * Hack! 
             */ 
            //return; 
        } 
        lastAttackMilis = milis; 
 
        /** 
         * notify attack observers 
         */ 
        super.attackTarget(target); 
 
        /** 
         * Calculate and apply damage 
         */ 
        List<AttackResult> attackResult = AttackUtil.calculateAttackResult(player, target); 
 
        int damage = 0; 
        for (AttackResult result : attackResult) { 
            damage += result.getDamage(); 
        } 
 
        long time = System.currentTimeMillis(); 
        int attackType = 0; // TODO investigate attack types 
        PacketSendUtility.broadcastPacket(player, new SM_ATTACK(player, target, gameStats.getAttackCounter(), 
                (int) time, attackType, attackResult), true); 
 
        target.getController().onAttack(player, damage, true); 
 
        gameStats.increaseAttackCounter(); 
    }  
   
		
	
	
	
Дверь запили!
 
	
	
	
	
	
		
	Сообщений: 982 
	Тем: 73 
	Зарегистрирован: Jan 2009
	
 Репутация: 
 2,862
	 
 
	
	
		спасибо все работает)
	 
	
	
MiR @ Aion Emu 
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу  скрипты и квесты на заказ , правки ядра  , правки даты , писать в ПМ
 
	
	
 
 
	
 |