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

Ошибка ГС

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

Привет. Прошу помощи, ГС выдаёт ошибку, не могу понять в чем проблема.  
 

INFO parser.InstantZoneParser: InstantZoneParser: Exception: java.lang.IllegalArgumentException: Invalid type?: Seed of Destruction in file: [110] Seed of Destruction.xml
java.lang.IllegalArgumentException: Invalid type?: Seed of Destruction
	at l2p.gameserver.templates.InstantZone.<init>(InstantZone.java:217)
	at l2p.gameserver.data.xml.parser.InstantZoneParser.readData(InstantZoneParser.java:270)
	at l2p.commons.data.xml.AbstractParser.parseDocument(AbstractParser.java:37)
	at l2p.commons.data.xml.AbstractDirParser.parse(AbstractDirParser.java:50)
	at l2p.commons.data.xml.AbstractParser.load(AbstractParser.java:53)
	at l2p.gameserver.data.xml.Parsers.parseAll(Parsers.java:70)
	at l2p.gameserver.GameServer.<init>(GameServer.java:186)
	at l2p.gameserver.GameServer.main(GameServer.java:379)

 

Спойлер

package l2p.gameserver.templates;

import java.util.List;
import java.util.Map;

import l2p.commons.time.cron.SchedulingPattern;
import l2p.commons.util.Rnd;
import l2p.gameserver.Config;
import l2p.gameserver.instancemanager.ReflectionManager;
import l2p.gameserver.model.Territory;
import l2p.gameserver.templates.spawn.SpawnTemplate;
import l2p.gameserver.serverpackets.components.IStaticPacket;
import l2p.gameserver.serverpackets.components.SystemMsg;
import l2p.gameserver.utils.Location;
import org.napile.primitive.maps.IntObjectMap;

public class InstantZone {

    public static class DoorInfo {

        private final DoorTemplate _template;
        private final boolean _opened;
        private final boolean _invul;

        public DoorInfo(DoorTemplate template, boolean opened, boolean invul) {
            _template = template;
            _opened = opened;
            _invul = invul;
        }

        public DoorTemplate getTemplate() {
            return _template;
        }

        public boolean isOpened() {
            return _opened;
        }

        public boolean isInvul() {
            return _invul;
        }
    }

    public static class ZoneInfo {

        private final ZoneTemplate _template;
        private final boolean _active;

        public ZoneInfo(ZoneTemplate template, boolean opened) {
            _template = template;
            _active = opened;
        }

        public ZoneTemplate getTemplate() {
            return _template;
        }

        public boolean isActive() {
            return _active;
        }
    }

    public static class SpawnInfo2 {

        private List<SpawnTemplate> _template;
        private boolean _spawned;

        public SpawnInfo2(List<SpawnTemplate> template, boolean spawned) {
            _template = template;
            _spawned = spawned;
        }

        public List<SpawnTemplate> getTemplates() {
            return _template;
        }

        public boolean isSpawned() {
            return _spawned;
        }
    }

    // @Deprecated
    public static class SpawnInfo {

        private final int _spawnType;
        private final int _npcId;
        private final int _count;
        private final int _respawn;
        private final int _respawnRnd;
        private final List<Location> _coords;
        private final Territory _territory;

        public SpawnInfo(int spawnType, int npcId, int count, int respawn, int respawnRnd, Territory territory) {
            this(spawnType, npcId, count, respawn, respawnRnd, null, territory);
        }

        public SpawnInfo(int spawnType, int npcId, int count, int respawn, int respawnRnd, List<Location> coords) {
            this(spawnType, npcId, count, respawn, respawnRnd, coords, null);
        }

        public SpawnInfo(int spawnType, int npcId, int count, int respawn, int respawnRnd, List<Location> coords,
                Territory territory) {
            _spawnType = spawnType;
            _npcId = npcId;
            _count = count;
            _respawn = respawn;
            _respawnRnd = respawnRnd;
            _coords = coords;
            _territory = territory;
        }

        public int getSpawnType() {
            return _spawnType;
        }

        public int getNpcId() {
            return _npcId;
        }

        public int getCount() {
            return _count;
        }

        public int getRespawnDelay() {
            return _respawn;
        }

        public int getRespawnRnd() {
            return _respawnRnd;
        }

        public List<Location> getCoords() {
            return _coords;
        }

        public Territory getLoc() {
            return _territory;
        }
    }

    private final int _id;
    private final String _name;
    private final SchedulingPattern _resetReuse;
    private final int _sharedReuseGroup;
    private final int _timelimit;
    private boolean _dispelBuffs;
    private final int _minLevel;
    private final int _maxLevel;
    private final int _minParty;
    private final int _maxParty;
    private final boolean _onPartyDismiss;
    private final int _timer;
    private final List<Location> _teleportCoords;
    private final Location _returnCoords;
    private final int _mapx;
    private final int _mapy;
    private final IntObjectMap<DoorInfo> _doors;
    private final Map<String, ZoneInfo> _zones;
    private final Map<String, SpawnInfo2> _spawns;
    private final List<SpawnInfo> _spawnsInfo;
    private final int _collapseIfEmpty;
    private final int _maxChannels;
    private final int _removedItemId;
    private final int _removedItemCount;
    private final boolean _removedItemNecessity;
    private final int _giveItemId;
    private final int _givedItemCount;
    private final int _requiredQuestId;
    private final boolean _setReuseUponEntry;
    private final StatsSet _addParams;
    private final InstantZoneEntryType _entryType;

    public InstantZone(int id, String name, SchedulingPattern resetReuse, int sharedReuseGroup, int timelimit,
            boolean dispelBuffs, int minLevel, int maxLevel, int minParty, int maxParty, int timer,
            boolean onPartyDismiss, List<Location> tele, Location ret, int mapx, int mapy, IntObjectMap<DoorInfo> doors,
            Map<String, ZoneInfo> zones, Map<String, SpawnInfo2> spawns, List<SpawnInfo> spawnsInfo,
            int collapseIfEmpty, int maxChannels, int removedItemId, int removedItemCount, boolean removedItemNecessity,
            int giveItemId, int givedItemCount, int requiredQuestId, boolean setReuseUponEntry, StatsSet params) {
        _id = id;
        _name = name;
        _resetReuse = resetReuse;
        _sharedReuseGroup = sharedReuseGroup;
        _timelimit = timelimit;
        _dispelBuffs = dispelBuffs;
        _minLevel = minLevel;
        _maxLevel = maxLevel;
        _teleportCoords = tele;
        _returnCoords = ret;
        _minParty = minParty;
        _maxParty = maxParty;
        _onPartyDismiss = onPartyDismiss;
        _timer = timer;
        _mapx = mapx;
        _mapy = mapy;
        _doors = doors;
        _zones = zones;
        _spawnsInfo = spawnsInfo;
        _spawns = spawns;
        _collapseIfEmpty = collapseIfEmpty;
        _maxChannels = maxChannels;
        _removedItemId = removedItemId;
        _removedItemCount = removedItemCount;
        _removedItemNecessity = removedItemNecessity;
        _giveItemId = giveItemId;
        _givedItemCount = givedItemCount;
        _requiredQuestId = requiredQuestId;
        _setReuseUponEntry = setReuseUponEntry;
        _addParams = params;

        if (getMinParty() == 1 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.SOLO;
        } else if (getMinParty() >= 2 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.PARTY;
        } else if (getMinParty() >= 9 && getMaxParty() > 9) {
            _entryType = InstantZoneEntryType.COMMAND_CHANNEL;
        } else {
            throw new IllegalArgumentException("Invalid type?: " + _name);
        }
    }

    public int getId() {
        return _id;
    }

    public String getName() {
        return _name;
    }

    public SchedulingPattern getResetReuse() {
        return _resetReuse;
    }

    public boolean isDispelBuffs() {
        return _dispelBuffs;
    }

    public int getTimelimit() {
        return _timelimit;
    }

    public int getMinLevel() {
        return _minLevel;
    }

    public int getMaxLevel() {
        return _maxLevel;
    }

    public int getMinParty() {
        return _minParty;
    }

    public int getMaxParty() {
        return _maxParty;
    }

    public int getTimerOnCollapse() {
        return _timer;
    }

    public boolean isCollapseOnPartyDismiss() {
        return _onPartyDismiss;
    }

    public Location getTeleportCoord() {
        if (_teleportCoords.size() == 1) // fast hack?
        {
            return _teleportCoords.get(0);
        }
        return _teleportCoords.get(Rnd.get(_teleportCoords.size()));
    }

    public Location getReturnCoords() {
        return _returnCoords;
    }

    public int getMapX() {
        return _mapx;
    }

    public int getMapY() {
        return _mapy;
    }

    public List<SpawnInfo> getSpawnsInfo() {
        return _spawnsInfo;
    }

    public int getSharedReuseGroup() {
        return _sharedReuseGroup;
    }

    public int getCollapseIfEmpty() {
        return _collapseIfEmpty;
    }

    public int getRemovedItemId() {
        return _removedItemId;
    }

    public int getRemovedItemCount() {
        return _removedItemCount;
    }

    public boolean getRemovedItemNecessity() {
        return _removedItemNecessity;
    }

    public int getGiveItemId() {
        return _giveItemId;
    }

    public int getGiveItemCount() {
        return _givedItemCount;
    }

    public int getRequiredQuestId() {
        return _requiredQuestId;
    }

    public boolean getSetReuseUponEntry() {
        return _setReuseUponEntry;
    }

    public int getMaxChannels() {
        return _maxChannels;
    }

    public InstantZoneEntryType getEntryType() {
        return _entryType;
    }

    public IntObjectMap<DoorInfo> getDoors() {
        return _doors;
    }

    public Map<String, ZoneInfo> getZones() {
        return _zones;
    }

    public List<Location> getTeleportCoords() {
        return _teleportCoords;
    }

    public Map<String, SpawnInfo2> getSpawns() {
        return _spawns;
    }

    public StatsSet getAddParams() {
        return _addParams;
    }

    public IStaticPacket canCreate() {
        if (ReflectionManager.getInstance().size() > Config.MAX_REFLECTIONS_COUNT) {
            return SystemMsg.THE_MAXIMUM_NUMBER_OF_INSTANCE_ZONES_HAS_BEEN_EXCEEDED;
        }
        if (ReflectionManager.getInstance().getCountByIzId(_id) >= _maxChannels) {
            return SystemMsg.THE_MAXIMUM_NUMBER_OF_INSTANCE_ZONES_HAS_BEEN_EXCEEDED;
        }
        return null;
    }
}
 

Поменял только это (хотел от 1 до 45)

Спойлер

    <instance id="110" name="Seed of Destruction" maxChannels="3" collapseIfEmpty="20" timelimit="130" dispelBuffs="false">
        <collapse on-party-dismiss="true" timer="60"/>
        <level min="75" max="85"/>
        <party min="36" max="45"/>
        <return loc="-248376 250440 4344"/>
        <teleport loc="-242738 219995 -9984"/>
        <remove itemId="0" count="0" necessary="false"/>
        <give itemId="0" count="0"/>
        <quest id="0"/>

 

Изменено пользователем Oliveshka
Добавил

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


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

Будет ли правильным если поменять эти значения?
 

Спойлер

        if (getMinParty() == 1 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.SOLO;
        } else if (getMinParty() >= 2 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.PARTY;
        } else if (getMinParty() >= 9 && getMaxParty() > 9) {
            _entryType = InstantZoneEntryType.COMMAND_CHANNEL;
        } else {
            throw new IllegalArgumentException("Invalid type?: " + _name);
        }

 

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Oliveshka сказал:

Будет ли правильным если поменять эти значения?
 

  InstantZone.java (Скрыть контент)

        if (getMinParty() == 1 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.SOLO;
        } else if (getMinParty() >= 2 && getMaxParty() <= 9) {
            _entryType = InstantZoneEntryType.PARTY;
        } else if (getMinParty() >= 9 && getMaxParty() > 9) {
            _entryType = InstantZoneEntryType.COMMAND_CHANNEL;
        } else {
            throw new IllegalArgumentException("Invalid type?: " + _name);
        }

 

ты уже сам нашел проверки на определение типа инсты, соответственно если ты делаешь

<party min="1" max="45"/>

сервер не может определить тип так как ни один способ не соответствует твоему требованию

Вывод:

или допиши проверку на минималку 1 до 45 с указанием к какому типу будет определена инста либо меняй по стандарту

1-9 соло

2-9 пати

9-45+ командный канал

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

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


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

Спасибо, понял! Не знаю как тут + ставить. тему можно закрыть. 

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


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

Или сделай как я к примеру сделал когда мне потребовалось что-то подобное - дай возможность задавать несколько типов для инстанса

т.е. к примеру возможность зайти в соло или в пати

вот к примеру так задается и разбирается параметр типа входа

		String[] entryType = params.getString("entryType", "AUTO").toUpperCase().split(";");

		if (entryType[0].equalsIgnoreCase("AUTO"))
		{
			if (getMinPlayers() == 1)
				_entryType = new InstantZoneEntryType[] { InstantZoneEntryType.SOLO };
			else if (getMinPlayers() > 1 && getMaxPlayers() <= OtherConfig.PARTY_MAX_SIZE)
				_entryType = new InstantZoneEntryType[] { InstantZoneEntryType.PARTY };
			else if (getMaxPlayers() > OtherConfig.PARTY_MAX_SIZE)
				_entryType = new InstantZoneEntryType[] { InstantZoneEntryType.COMMAND_CHANNEL };
			else
				throw new IllegalArgumentException("Invalid type?: " + _name);
		}
		else
		{
			_entryType = new InstantZoneEntryType[entryType.length];

			for (int i = 0; i < entryType.length; i++)
				_entryType[i] = InstantZoneEntryType.valueOf(InstantZoneEntryType.class, entryType[i]);
		}

ну и само собой в проверке canReenterInstance и в enterReflection идет перебор всех разрешенных вариантов входа

т.е. к примеру указано "PARTY;SOLO" - сначала проверит, в пати ли игрок и если да, то вернет что инстанс для пати и надо сделать проверки входа как для пати, а если игрок не в пати - сделать проверки как для соло.

тогда в итоге к примеру количество игроков 5-9 будет означать что вход для одного игрока без пати или же в пати 5-9 человек

Изменено пользователем Gaikotsu
  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Gaikotsu сказал:

Или сделай как я к примеру сделал когда мне потребовалось что-то подобное

Интересное решение, спасибо. Возьму на заметку

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


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

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

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

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

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

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

Войти

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

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

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

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

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