sweeper

QQRa1nQQ

Путник
Пользователь
Сообщения
11
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
1
Хроники
  1. Interlude
Исходники
Присутствуют
Сборка
Lucera
Всем добрый день!
Подскажите, пожалуйста, может, есть готовый вариант или как можно сделать.
Сборка Lucera. Есть исходники.
Есть скил Масс Свип. Он работает, но только когда будет в таргете хотя бы 1 мертвый моб.
Как сделать его Так, что бы работал без таргета?
 
Посмотри как реализован таргет в скиле, где не обязательно выбирать чель, чтобы дамажить скилом, масуху какую-нибудь.
 
собственно выделил синим и красным тот параметр которым они кардинально отличаются и который надо прописать отдельно

так же видел реализацию - он быстро прощупывает все трупы в радиусе - но это костыль.

код скила масс свип
Код:
<skill id="444" levels="1" name="Festive Sweeper">
  <set name="mpConsume" val="12"/>
  <set name="skillRadius" val="85"/>
  <set name="target" val="TARGET_AREA_CORPSE_MOB"/>
  <set name="skillType" val="SWEEP"/>
  <set name="operateType" val="OP_ACTIVE"/>
  <set name="castRange" val="-1"/>
  <set name="reuseDelay" val="23000"/>
  <set name="hitTime" val="5000"/>
  <for>
  </for>
 </skill>

код свипа по цели
Код:
<skill id="42" levels="1" name="Sweeper" enchantLevels1="30" enchantLevels2="30" >
  <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
  <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
  <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
  <!-- i_mp_by_level_self & i_hp_by_level_self -->
  <table name="#ench1drain">
   3  6  9 12 15 18 21 24 27 30
  33 36 39 42 45 48 51 54 57 60
  63 66 69 72 75 78 81 84 87 90
  </table>
  <table name="#ench2drain">
   1  2  3  4  5  6  7  8  9 10
  11 12 13 14 15 16 17 18 19 20
  21 22 23 24 25 26 27 29 29 30
  </table>
  <set name="mpConsume" val="3"/>
  <set name="power" val="0.0"/>
  <set name="target" val="TARGET_CORPSE_MOB"/>
  <set name="reuseDelay" val="450"/>
  <set name="hitTime" val="500"/>
  <set name="skillType" val="SWEEP"/>
  <set name="operateType" val="OP_ACTIVE"/>
  <set name="castRange" val="100"/>
  <set name="effectRange" val="400"/>
  <enchant1 name="absorbPart" val="0"/> <!-- no damage, it's dead -->
  <enchant1 name="absorbAbs"  val="#ench1drain"/> <!-- absorbs absolute value -->
  <for>
  </for>
</skill>
 
Maiden7, надо смотреть исходники в сторону TARGET_AREA_CORPSE_MOB (поискать где и как обрабатывается) собственно как оно там реализовано внутри и уже от этого плясать в Sweeper. Надо посмотреть в исходниках где там есть проверка таргета, а где её нет и при каких условиях. Возможно, достаточно поменять TARGET_CORPSE_MOB на TARGET_AREA_CORPSE_MOB и надо наверное глянуть за что там отвечает skillRadius (оно то понятно за что, но глянуть на реализацию)
 
К сожалению работает как и работал только с таргетом.
 
Вечером дома изучу вопрос. Спасибо.
 
Хотя TARGET_AREA_AIM_CORPSE просто костыль на костыле, перебирает мобов по списку мертвый?-заспойленый?-есть некст?
Если как говорите есть исходники Дизера - уберите в исходах проверку на таргет при юзе скила
 
Отредактируй сообщение свой под тег кода, это ж вырвиглаз прям
И это судя по импортам не люцера Дизера, а 1.7 фрозены или чёт такое
 
Реакции: raz
это всё что там было в поиске?

ну я думаю надо искать что то такое

Код:
public class Sweep implements ISkillHandler
{
    //private static Logger _log = Logger.getLogger(Sweep.class.getName());
    protected SkillType[] _skillIds = {SkillType.SWEEP};
    
    public void useSkill(L2Character activeChar, @SuppressWarnings("unused") L2Skill skill, L2Object[] targets)
    {
        if (!(activeChar instanceof L2PcInstance))
        {
            return;
        }
        
        L2PcInstance player = (L2PcInstance)activeChar;
        InventoryUpdate iu = new InventoryUpdate();
        boolean send = false;
        
        for(int index = 0;index < targets.length;index++)
        {
            if (!(targets[index] instanceof L2Attackable))
                continue;
            
            L2Attackable target = (L2Attackable)targets[index];
            
            if (target.isSweepActive())
            {
                L2ItemInstance[] items = target.takeSweep();
                if (items == null || items.length == 0)
                    continue;
                for (L2ItemInstance item : items)
                {
                    if (player.isInParty() && player.getParty().isDistributeSpoilLoot())
                    {
                        player.getParty().distributeItem(player, item);
                    }
                    else
                    {
                        int itemCount = item.getCount();
                        item = player.getInventory().addItem(item);
                        if (item.getLastChange() == L2ItemInstance.ADDED) {
                            iu.addNewItem(item);
                        } else {
                            iu.addModifiedItem(item);
                        }
                        send = true;
                        SystemMessage smsg = new SystemMessage(SystemMessage.YOU_PICKED_UP_S1_S2); // you picked up $s1$s2
                        smsg.addNumber(itemCount);
                        smsg.addItemName(item.getItemId());
                        player.sendPacket(smsg);
                        if (player.isInParty())
                        {
                            smsg = new SystemMessage(SystemMessage.S1_SWEEPED_UP_S2_S3); // $1 obtained $s2 $s3(s) by using Sweeper.
                            smsg.addString(player.getName());
                            smsg.addNumber(itemCount);
                            smsg.addItemName(item.getItemId());
                            player.getParty().broadcastToPartyMembers(player, smsg);
                        }
                    }
                }
            }
            target.endDecayTask();
        }
        
        if (send)
            player.sendPacket(iu);
    }
    
    public SkillType[] getSkillIds()
    {
        return _skillIds;
    }
}
 
package ru.catssoftware.gameserver.handler.skillhandlers;

import ru.catssoftware.gameserver.handler.ISkillHandler;
import ru.catssoftware.gameserver.model.L2Attackable;
import ru.catssoftware.gameserver.model.L2Character;
import ru.catssoftware.gameserver.model.L2ItemInstance;
import ru.catssoftware.gameserver.model.L2Skill;
import ru.catssoftware.gameserver.model.actor.instance.L2PcInstance;
import ru.catssoftware.gameserver.network.SystemMessageId;
import ru.catssoftware.gameserver.network.serverpackets.InventoryUpdate;
import ru.catssoftware.gameserver.network.serverpackets.ItemList;
import ru.catssoftware.gameserver.network.serverpackets.SystemMessage;
import ru.catssoftware.gameserver.templates.skills.L2SkillType;

public class Sweep implements ISkillHandler {

private static final L2SkillType[] SKILL_IDS = {L2SkillType.SWEEP};

public void useSkill(L2Character activeChar, L2Skill skill, L2Character... targets) {
if (!(activeChar instanceof L2PcInstance)) {
return;
}

L2PcInstance player = (L2PcInstance) activeChar;
InventoryUpdate iu = new InventoryUpdate();
boolean send = false;

for (L2Character element : targets) {
if (!(element instanceof L2Attackable)) {
continue;
}

L2Attackable target = (L2Attackable) element;

L2Attackable.RewardItem[] items = null;
boolean isSweeping = false;
synchronized (target) {
if (target.isSweepActive()) {
items = target.takeSweep();
isSweeping = true;
}
}
if (isSweeping) {
if (items == null || items.length == 0) {
continue;
}

for (L2Attackable.RewardItem ritem : items) {
if (player.isInParty()) {
player.getParty().distributeItem(player, ritem, true, target);
} else {
if (player.getInventory().validateCapacityByItemId(ritem.getItemId())) {
L2ItemInstance item = player.getInventory().addItem("Sweep", ritem.getItemId(), ritem.getCount(), player, target);
if (iu != null) {
iu.addItem(item);
}
send = true;

SystemMessage smsg = new SystemMessage(SystemMessageId.YOU_PICKED_UP_S1_S2);
smsg.addNumber(ritem.getCount());
smsg.addItemName(item);
player.sendPacket(smsg);
}
}
}
}
target.endDecayTask();
if (send) {
if (iu != null) {
player.sendPacket(iu);
} else {
player.sendPacket(new ItemList(player, false));
}
}
}
}

public L2SkillType[] getSkillIds() {
return SKILL_IDS;
}
}
 
автосвип это как очищенные семечки, а как же процесс "ам - тфу"?


вот, теперь бы ещё найти без таргетные скилы и глянуть на их юз
 
Реакции: raz
Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше…