Перейти к содержанию
Авторизация  
Jigsaw

Соло камалока без премиума и вход в Delusion Chamber

Рекомендуемые сообщения

 

Привет. Сборка First-Team H5 ( https://yadi.sk/d/4mPjaUKlFtCPk ).

Куда ковырять, что бы зайти в соло камалоку без премиума любому игроку?

Это не помогает:

# Solo kamaloka only for premium
KamalokaNightmaresPremiumOnly = False 

Скрипт инста:

Спойлер

package instances;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;

import l2ft.commons.threading.RunnableImpl;
import l2ft.gameserver.ThreadPoolManager;
import l2ft.gameserver.data.xml.holder.NpcHolder;
import l2ft.gameserver.idfactory.IdFactory;
import l2ft.gameserver.model.GameObject;
import l2ft.gameserver.model.GameObjectsStorage;
import l2ft.gameserver.model.Player;
import l2ft.gameserver.model.Spawner;
import l2ft.gameserver.model.entity.Reflection;
import l2ft.gameserver.network.l2.s2c.SystemMessage;
import l2ft.gameserver.templates.InstantZone;
import l2ft.gameserver.templates.StatsSet;
import l2ft.gameserver.utils.Location;
import npc.model.PathfinderInstance;

public class KamalokaNightmare extends Reflection
{
    private static final int PATHFINDER = 32485;

    private static final int RANK_1_MIN_POINTS = 500;
    private static final int RANK_2_MIN_POINTS = 2500;
    private static final int RANK_3_MIN_POINTS = 4500;
    private static final int RANK_4_MIN_POINTS = 5500;
    private static final int RANK_5_MIN_POINTS = 7000;
    private static final int RANK_6_MIN_POINTS = 9000;

    private final int _playerId;
    private Future<?> _expireTask;

    private int killedKanabions = 0;
    private int killedDoplers = 0;
    private int killedVoiders = 0;

    private int delay_after_spawn = 0;
    private boolean is_spawn_possible = true;

    public KamalokaNightmare(Player player)
    {
        _playerId = player.getObjectId();
    }

    @Override
    protected void onCreate()
    {
        super.onCreate();

        InstantZone iz = getInstancedZone();
        if(iz != null)
        {
            int time_limit = iz.getTimelimit() * 1000 * 60;
            delay_after_spawn = time_limit / 3;
            startPathfinderTimer(time_limit - delay_after_spawn); // спавн патчфиндера происходит через 2\3 прошедшего времени.
        }
    }
    
    @Override
    protected void onCollapse()
    {
        super.onCollapse();
        
        stopPathfinderTimer();
    }

    public void addKilledKanabion(int type)
    {
        switch(type)
        {
            case 1:
                killedKanabions++;
                break;
            case 2:
                killedDoplers++;
                break;
            case 3:
                killedVoiders++;
                break;
        }
    }

    public int getRank()
    {
        int total = killedKanabions * 10 + killedDoplers * 20 + killedVoiders * 50;
        if(total >= RANK_6_MIN_POINTS)
            return 6;
        else if(total >= RANK_5_MIN_POINTS)
            return 5;
        else if(total >= RANK_4_MIN_POINTS)
            return 4;
        else if(total >= RANK_3_MIN_POINTS)
            return 3;
        else if(total >= RANK_2_MIN_POINTS)
            return 2;
        else if(total >= RANK_1_MIN_POINTS)
            return 1;
        else
            return 0;
    }

    public void startPathfinderTimer(long timeInMillis)
    {
        if(_expireTask != null)
        {
            _expireTask.cancel(false);
            _expireTask = null;
        }

        _expireTask = ThreadPoolManager.getInstance().schedule(new RunnableImpl()
        {
            @Override
            public void runImpl()
            {
                try
                {
                    is_spawn_possible = false;
                    for(Spawner s : KamalokaNightmare.this.getSpawns().toArray(new Spawner[KamalokaNightmare.this.getSpawns().size()]))
                        s.deleteAll();

                    KamalokaNightmare.this.getSpawns().clear();

                    List<GameObject> delete = new ArrayList<GameObject>();
                    lock.lock();
                    try
                    {
                        for(GameObject o : _objects)
                            if(!o.isPlayable())
                                delete.add(o);
                    }
                    finally
                    {
                        lock.unlock();
                    }

                    for(GameObject o : delete)
                        o.deleteMe();

                    Player p = (Player) GameObjectsStorage.findObject(getPlayerId());
                    if(p != null)
                    {
                        p.getPlayer().sendPacket(new SystemMessage(SystemMessage.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTES).addNumber(delay_after_spawn / 60000));

                        InstantZone iz = KamalokaNightmare.this.getInstancedZone();
                        if(iz != null)
                        {
                            String loc = iz.getAddParams().getString("pathfinder_loc", null);
                            if(loc != null)
                            {
                                PathfinderInstance npc = new PathfinderInstance(IdFactory.getInstance().getNextId(), NpcHolder.getInstance().getTemplate(PATHFINDER));
                                npc.setSpawnedLoc(Location.parseLoc(loc));
                                npc.setReflection(KamalokaNightmare.this);
                                npc.spawnMe(npc.getSpawnedLoc());
                            }
                        }
                    }
                    else
                        collapse();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        }, timeInMillis);
    }

    public void stopPathfinderTimer()
    {
        if(_expireTask != null)
        {
            _expireTask.cancel(false);
            _expireTask = null;
        }
    }

    public int getPlayerId()
    {
        return _playerId;
    }

    @Override
    public boolean canChampions()
    {
        return false;
    }

    public boolean isSpawnPossible()
    {
        return is_spawn_possible;
    }
}

Xml инста:

Спойлер

<!DOCTYPE list SYSTEM "instances.dtd">
<list>
    <!-- Town of Schuttgart: NPC Pathfinder (Level 75) -->
    <instance id="56" name="Kamaloka, Hall of the Nightmares" maxChannels="10" collapseIfEmpty="10" timelimit="30" dispelBuffs="false">
        <collapse on-party-dismiss="true" timer="60"/>
        <level min="70" max="85"/>
        <party min="1" max="1"/>
        <return loc="42767 -48016 -800"/>
        <teleport loc="48137 -219716 -8752"/>
        <remove itemId="0" count="0" necessary="false"/>
        <give itemId="0" count="0"/>
        <quest id="0"/>
        <reuse resetReuse="30 6 * * *" setUponEntry="true" sharedReuseGroup="2"/>
        <add_parameters>
            <param name="pathfinder_loc" value="49052 -219762 -8752"/>
            <param name="reward_lvl_0" value="13002-8"/>
            <param name="reward_lvl_1" value="13002-8;10860-1"/>
            <param name="reward_lvl_2" value="13002-8;10861-1"/>
            <param name="reward_lvl_3" value="13002-8;10862-1"/>
            <param name="reward_lvl_4" value="13002-8;10863-1"/>
            <param name="reward_lvl_5" value="13002-8;10864-1"/>
            <param name="reward_lvl_6" value="13002-10;10865-1"/>
        </add_parameters>
        <spawns>
            <!-- Sword Kanabion -->
            <spawn mobId="22482" count="6" respawn="30" type="loc">
                <coords loc="48152 -218792 -8752 -8752"/>
                <coords loc="49896 -218792 -8752 -8752"/>
                <coords loc="49896 -220696 -8752 -8752"/>
                <coords loc="48152 -220696 -8752 -8752"/>
            </spawn>
        </spawns>
    </instance>
</list>

И еще херня. Есть конфиг:

# Включить альтернативное ограничение по количеству чаров в группе для входа в инстанс
# работает только на тех зонах где есть ограничения
AllowInstancesPartyManual = true
# Минимальное количество
InstancesPartyMin = 2
# Максимальное количество
InstancesPartyMax = 9

Так вот при попытке входа в инст в Delusion Chamber за минимальное количество игроков береться значение максимального. Как исправить? (Кроме  InstancesPartyMax = 2).

Изменено пользователем Jigsaw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну в исходном коде наверное ошибка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверку на премиум не в классе инстанса смотреть надо, а в классе нпс, который туда перемещает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...