Проблема со спавном

Kennedy

Путник
Пользователь
Сообщения
319
Розыгрыши
0
Репутация
89
Реакции
27
Баллы
0
Хроники
  1. Chaotic Throne: High Five
Исходники
Отсутствуют
Сборка
L2jDev
Всем привет. Извините за глупый вопрос, я никак не могу придти к решению.
Как сделать так, чтобы при релоге сервера мобы, которые я заспавнил не исчезали? В конфигах функцию сохранения включил.
В data/spawn/custom создавал папку, удалял, создавал документ custom.xml. Перепробовал много вариантов, но при релоге все равно исчезают.
Есть ли способ не писать руками в xml, а заспавнить прямо в игре? Буду благодарен за помощь.
 
Всем привет. Извините за глупый вопрос, я никак не могу придти к решению.
Как сделать так, чтобы при релоге сервера мобы, которые я заспавнил не исчезали? В конфигах функцию сохранения включил.
В data/spawn/custom создавал папку, удалял, создавал документ custom.xml. Перепробовал много вариантов, но при релоге все равно исчезают.
Есть ли способ не писать руками в xml, а заспавнить прямо в игре? Буду благодарен за помощь.
А таблица в базе есть add_spawnlist
 
Всем привет. Извините за глупый вопрос, я никак не могу придти к решению.
Как сделать так, чтобы при релоге сервера мобы, которые я заспавнил не исчезали? В конфигах функцию сохранения включил.
В data/spawn/custom создавал папку, удалял, создавал документ custom.xml. Перепробовал много вариантов, но при релоге все равно исчезают.
Есть ли способ не писать руками в xml, а заспавнить прямо в игре? Буду благодарен за помощь.
у алекса я такой беды не помню. включил в конфиге функцию, заспавнил что нужно и после всех рестартов всегда работало.
проверь не включено ли
Код:
# Не загружать спавн и квесты на старте сервреа
StartWithoutSpawn = False
StartWithoutQuest = False
 
@Kennedy, не знаю реализовано у вас или нет (смотрите конфиги, должен быть конфиг )
конфиги примерно такие (у меня develop.properties)

Код:
# Загружать спавн администратора?
LoadAddGmSpawn = True

# Сохранять спавн администратора?
SaveGmSpawn = True

нужно поправить команду
admin_spawn

Код:
                if (Config.SAVE_GM_SPAWN)
                    SpawnTable.getInstance().addNewSpawn(spawn);

SpawnTable
Код:
package l2r.gameserver.tables;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import l2r.commons.database.dbutils.DbUtils;
import l2r.gameserver.Config;
import l2r.gameserver.data.xml.holder.SpawnHolder;
import l2r.gameserver.database.DatabaseFactory;
import l2r.gameserver.model.SimpleSpawner;
import l2r.gameserver.templates.StatsSet;
import l2r.gameserver.templates.spawn.PeriodOfDay;
import l2r.gameserver.templates.spawn.SpawnNpcInfo;
import l2r.gameserver.templates.spawn.SpawnTemplate;
import l2r.gameserver.utils.Location;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SpawnTable
{
    private static final Logger _log = LoggerFactory.getLogger(SpawnTable.class);
    private static SpawnTable _instance;

    public static SpawnTable getInstance()
    {
        if (_instance == null)
            new SpawnTable();
        return _instance;
    }

    private SpawnTable()
    {
        _instance = this;
        if (Config.LOAD_CUSTOM_SPAWN)
            fillCustomSpawnTable();
    }

    private void fillCustomSpawnTable()
    {
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rset = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT * FROM admin_spawnlist ORDER by npc_templateid");
            rset = statement.executeQuery();

            while (rset.next())
            {
                int count = rset.getInt("count");
                int delay = rset.getInt("respawn_delay");
                int delay_rnd = rset.getInt("respawn_delay_rnd");
                int npcId = rset.getInt("npc_templateid");
                int x = rset.getInt("locx");
                int y = rset.getInt("locy");
                int z = rset.getInt("locz");
                int h = rset.getInt("heading");

                SpawnTemplate template = new SpawnTemplate(PeriodOfDay.NONE, count, delay, delay_rnd);
                template.addNpc(new SpawnNpcInfo(npcId, 1, StatsSet.EMPTY));
                template.addSpawnRange(new Location(x, y, z, h));
                SpawnHolder.getInstance().addSpawn(PeriodOfDay.NONE.name(), template);
            }
        }
        catch (Exception e1)
        {
            _log.warn("admin_spawnlist couldnt be initialized:" + e1);
            e1.printStackTrace();
        }
        finally
        {
            DbUtils.closeQuietly(con, statement, rset);
        }
    }

    public void addNewSpawn(SimpleSpawner spawn)
    {
        Connection con = null;
        PreparedStatement statement = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("INSERT INTO `admin_spawnlist` (location,count,npc_templateid,locx,locy,locz,heading,respawn_delay) values(?,?,?,?,?,?,?,?)");
            statement.setString(1, "");
            statement.setInt(2, spawn.getAmount());
            statement.setInt(3, spawn.getCurrentNpcId());
            statement.setInt(4, spawn.getLocx());
            statement.setInt(5, spawn.getLocy());
            statement.setInt(6, spawn.getLocz());
            statement.setInt(7, spawn.getHeading());
            statement.setInt(8, spawn.getRespawnDelay());
            statement.execute();
        }
        catch (Exception e1)
        {
            _log.warn("spawn couldnt be stored in db:" + e1);
        }
        finally
        {
            DbUtils.closeQuietly(con, statement);
        }
    }

    public void deleteSpawn(Location loc, int template)
    {
        Connection con = null;
        PreparedStatement statement = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("DELETE FROM admin_spawnlist WHERE locx=? AND locy=? AND locz=? AND npc_templateid=? AND heading=?");
            statement.setInt(1, loc.x);
            statement.setInt(2, loc.y);
            statement.setInt(3, loc.z);
            statement.setInt(4, template);
            statement.setInt(5, loc.h);
            statement.execute();
        }
        catch (Exception e1)
        {
            _log.warn("spawn couldnt be deleted in db:" + e1);
        }
        finally
        {
            DbUtils.closeQuietly(con, statement);
        }
    }
}

+ добавить загрузку в геймсервер

ну и структура таблицы
Код:
DROP TABLE IF EXISTS `admin_spawnlist`;
CREATE TABLE `admin_spawnlist` (
  `location` varchar(35) NOT NULL DEFAULT '',
  `count` int(11) NOT NULL DEFAULT '0',
  `npc_templateid` int(11) NOT NULL DEFAULT '0',
  `locx` int(11) NOT NULL DEFAULT '0',
  `locy` int(11) NOT NULL DEFAULT '0',
  `locz` int(11) NOT NULL DEFAULT '0',
  `heading` int(11) NOT NULL DEFAULT '0',
  `respawn_delay` int(11) NOT NULL DEFAULT '0',
  `respawn_delay_rnd` int(11) NOT NULL DEFAULT '0',
  `loc_id` int(11) NOT NULL DEFAULT '0',
  `periodOfDay` tinyint(1) NOT NULL DEFAULT '0',
  `reflection` smallint(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`npc_templateid`,`locx`,`locy`,`locz`,`loc_id`,`reflection`),
  KEY `key_npc_templateid` (`npc_templateid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
@4ipolino, ну и зачем? И помимо этого потом нужно будет инитить при старте сервера. Есть XML в который прекрасно можно сохранять в какую нибудь папку custom. И всё...
 
@kick, разница? Типа не по феншую ? Да , можно переписать сохранение в хмл, но время тратить нет желания, а тс не хочет вручную прописывать.
 
Код:
# Если включено, позволяет сохранять спавн администратора.
# Добавляет в папку data/spawn/custom прямо в игре командой.
SaveAdmine = True

# Если включено, позволяет удалять спавн администратора.
# Удаляет из папки data/spawn/custom прямо в игре командой.
RemoveAdminSpawn = True
В server.properties

и там же:
Код:
# Не загружать спавн и квесты на старте сервреа
StartWithoutSpawn = False
StartWithoutQuest = False
 
@Kennedy, не знаю реализовано у вас или нет (смотрите конфиги, должен быть конфиг )
конфиги примерно такие (у меня develop.properties)

Код:
# Загружать спавн администратора?
LoadAddGmSpawn = True

# Сохранять спавн администратора?
SaveGmSpawn = True

нужно поправить команду
admin_spawn

Код:
                if (Config.SAVE_GM_SPAWN)
                    SpawnTable.getInstance().addNewSpawn(spawn);

SpawnTable
Код:
package l2r.gameserver.tables;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import l2r.commons.database.dbutils.DbUtils;
import l2r.gameserver.Config;
import l2r.gameserver.data.xml.holder.SpawnHolder;
import l2r.gameserver.database.DatabaseFactory;
import l2r.gameserver.model.SimpleSpawner;
import l2r.gameserver.templates.StatsSet;
import l2r.gameserver.templates.spawn.PeriodOfDay;
import l2r.gameserver.templates.spawn.SpawnNpcInfo;
import l2r.gameserver.templates.spawn.SpawnTemplate;
import l2r.gameserver.utils.Location;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SpawnTable
{
    private static final Logger _log = LoggerFactory.getLogger(SpawnTable.class);
    private static SpawnTable _instance;

    public static SpawnTable getInstance()
    {
        if (_instance == null)
            new SpawnTable();
        return _instance;
    }

    private SpawnTable()
    {
        _instance = this;
        if (Config.LOAD_CUSTOM_SPAWN)
            fillCustomSpawnTable();
    }

    private void fillCustomSpawnTable()
    {
        Connection con = null;
        PreparedStatement statement = null;
        ResultSet rset = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("SELECT * FROM admin_spawnlist ORDER by npc_templateid");
            rset = statement.executeQuery();

            while (rset.next())
            {
                int count = rset.getInt("count");
                int delay = rset.getInt("respawn_delay");
                int delay_rnd = rset.getInt("respawn_delay_rnd");
                int npcId = rset.getInt("npc_templateid");
                int x = rset.getInt("locx");
                int y = rset.getInt("locy");
                int z = rset.getInt("locz");
                int h = rset.getInt("heading");

                SpawnTemplate template = new SpawnTemplate(PeriodOfDay.NONE, count, delay, delay_rnd);
                template.addNpc(new SpawnNpcInfo(npcId, 1, StatsSet.EMPTY));
                template.addSpawnRange(new Location(x, y, z, h));
                SpawnHolder.getInstance().addSpawn(PeriodOfDay.NONE.name(), template);
            }
        }
        catch (Exception e1)
        {
            _log.warn("admin_spawnlist couldnt be initialized:" + e1);
            e1.printStackTrace();
        }
        finally
        {
            DbUtils.closeQuietly(con, statement, rset);
        }
    }

    public void addNewSpawn(SimpleSpawner spawn)
    {
        Connection con = null;
        PreparedStatement statement = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("INSERT INTO `admin_spawnlist` (location,count,npc_templateid,locx,locy,locz,heading,respawn_delay) values(?,?,?,?,?,?,?,?)");
            statement.setString(1, "");
            statement.setInt(2, spawn.getAmount());
            statement.setInt(3, spawn.getCurrentNpcId());
            statement.setInt(4, spawn.getLocx());
            statement.setInt(5, spawn.getLocy());
            statement.setInt(6, spawn.getLocz());
            statement.setInt(7, spawn.getHeading());
            statement.setInt(8, spawn.getRespawnDelay());
            statement.execute();
        }
        catch (Exception e1)
        {
            _log.warn("spawn couldnt be stored in db:" + e1);
        }
        finally
        {
            DbUtils.closeQuietly(con, statement);
        }
    }

    public void deleteSpawn(Location loc, int template)
    {
        Connection con = null;
        PreparedStatement statement = null;
        try
        {
            con = DatabaseFactory.getInstance().getConnection();
            statement = con.prepareStatement("DELETE FROM admin_spawnlist WHERE locx=? AND locy=? AND locz=? AND npc_templateid=? AND heading=?");
            statement.setInt(1, loc.x);
            statement.setInt(2, loc.y);
            statement.setInt(3, loc.z);
            statement.setInt(4, template);
            statement.setInt(5, loc.h);
            statement.execute();
        }
        catch (Exception e1)
        {
            _log.warn("spawn couldnt be deleted in db:" + e1);
        }
        finally
        {
            DbUtils.closeQuietly(con, statement);
        }
    }
}

+ добавить загрузку в геймсервер

ну и структура таблицы
Код:
DROP TABLE IF EXISTS `admin_spawnlist`;
CREATE TABLE `admin_spawnlist` (
  `location` varchar(35) NOT NULL DEFAULT '',
  `count` int(11) NOT NULL DEFAULT '0',
  `npc_templateid` int(11) NOT NULL DEFAULT '0',
  `locx` int(11) NOT NULL DEFAULT '0',
  `locy` int(11) NOT NULL DEFAULT '0',
  `locz` int(11) NOT NULL DEFAULT '0',
  `heading` int(11) NOT NULL DEFAULT '0',
  `respawn_delay` int(11) NOT NULL DEFAULT '0',
  `respawn_delay_rnd` int(11) NOT NULL DEFAULT '0',
  `loc_id` int(11) NOT NULL DEFAULT '0',
  `periodOfDay` tinyint(1) NOT NULL DEFAULT '0',
  `reflection` smallint(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`npc_templateid`,`locx`,`locy`,`locz`,`loc_id`,`reflection`),
  KEY `key_npc_templateid` (`npc_templateid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
У меня исходников нет, только компил. В этой версии в скриптах нет admin_spawn
 
@Kennedy, ну судя по вашему посту выше , в сборке реализовано через хмл, разницы никакой. Включите конфиг и все должно работать.
 
Код:
# Если включено, позволяет сохранять спавн администратора.
# Добавляет в папку data/spawn/custom прямо в игре командой.
SaveAdmine = True

# Если включено, позволяет удалять спавн администратора.
# Удаляет из папки data/spawn/custom прямо в игре командой.
RemoveAdminSpawn = True
В server.properties

и там же:
Код:
# Не загружать спавн и квесты на старте сервреа
StartWithoutSpawn = False
StartWithoutQuest = False
выключи удаление спавна админа и проверь)
 
Назад
Сверху Снизу