Что я по вашему должен понимать, если тема задана в разделе для новичков? То есть на пальцах объяснить можете?автор вы понимаете разницу меду глобал АИ подконтрольным сервером и плеерами которые участвуют в статистике ?
Совет: Выкинуть этот хлам и посмотреть в сторону чистого некстгена без манипуляций рукожопа
А зачем? Если это то же самое ничем не изменившееся от шарных сурсов?Здравствуйте! Я это под чистые исходны некстов хочу взять.
Подскажите пожалуйста как в gs.java правильно прописать импорт и инстанс
Там у раста по словам гадости много в коде, я сейчас только учусь.А зачем? Если это то же самое ничем не изменившееся от шарных сурсов?
А там есть в первом архиве скрипты для ядра, и таблица для бд, я туда ид чара вписал но при загрузке эти скрипты не подгружает так как что то не так с импортами начудил.И как оно будет работать если указан только импорт?
Что за бред?
Util.printSection("Characters");
CharNameTable.getInstance();
FakePlayersTable.getInstance();
И вы добавляете тоже самое
FakePlayersTable.getInstance();
В некстгене они не реализованы, а то что там натворил личер это полный бред.
И как оно будет работать если указан только импорт?
Что за бред?
Util.printSection("Characters");
CharNameTable.getInstance();
FakePlayersTable.getInstance();
И вы добавляете тоже самое
FakePlayersTable.getInstance();
В некстгене они не реализованы, а то что там натворил личер это полный бред.
Причем тут импорты? Вы понимаете, что это не будет работать вообще.А там есть в первом архиве скрипты для ядра, и таблица для бд, я туда ид чара вписал но при загрузке эти скрипты не подгружает так как что то не так с импортами начудил.
/**
* Класс одного игрока
*/
public class FakePlayer
{
private final static Logger _log = Logger.getLogger(FakePlayer.class.getName());
private L2Player _player;
public void run()
{
_log.info("FakePlayers: Activated");
}
}
Этого нету, что вы предложили в вашем архиве.FakePlayersTable.getInstance(); вот это не могу понять куда нужно добавить что бы скрипты подгружались, без эклипса не понятно и ошибок с антом нет при билде.
package l2s.game.scripts.fakeplayers;
import l2s.commons.list.GArray;
import l2s.database.FiltredPreparedStatement;
import l2s.database.L2DatabaseFactory;
import l2s.database.ThreadConnection;
import l2s.database.utils.DbUtils;
import l2s.game.L2GameThreadPools;
import l2s.game.model.actor.L2Player;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Класс управляющий ботами
*/
public class FakePlayersManager
{
private final static Logger _log = Logger.getLogger(FakePlayersManager.class.getName());
private GArray<FakePlayer> _players = new GArray<FakePlayer>();
private static final String LOAD_OFFLINE_STATUS = "SELECT * FROM fake_players";
private static class SingletonHolder
{
private static final FakePlayersManager _instance = new FakePlayersManager();
}
public static FakePlayersManager getInstance()
{
return SingletonHolder._instance;
}
public void storeFakePlayers()
{
ThreadConnection con = null;
FiltredPreparedStatement statement = null;
ResultSet rs = null;
int nPlayers = 0;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement(LOAD_OFFLINE_STATUS);
rs = statement.executeQuery();
while(rs.next())
{
L2Player player = null;
try
{
player = L2Player.restore(rs.getInt("charId"));
if(player == null)
continue;
if(player.isDead())
{
player.logout(false, false, true, true);
continue;
}
player.restoreBonus();
player.setOnlineStatus(true);
player.setConnected(true);
player.restoreEffects();
player.restoreDisableSkills();
player.broadcastUserInfo(true);
player.setAutoLoot(true);
player.spawnMe();
player.updateTerritories();
if(player.getClan() != null && player.getClan().getClanMember(player.getObjectId()) != null)
player.getClan().getClanMember(player.getObjectId()).setPlayerInstance(player);
player.setFakePlayer(true);
player.setRunning();
player.stopUnimportantTimers();
L2GameThreadPools.getInstance().scheduleGeneral(new FakePlayerTask(player), 15000);
nPlayers++;
}
catch(Exception e)
{
_log.log(Level.WARNING, "Fake Players Engine: Error loading player: "+player,e);
}
}
rs.close();
statement.close();
}
catch(Exception e)
{
_log.log(Level.WARNING, "Fake Players Engine : Error while loading player: ",e);
}
finally
{
DbUtils.closeQuietly(con);
}
_log.info("Loaded: " +nPlayers+ " Fake Players");
}
}
Спасибо Вам большое. Все просто и понятно.Причем тут импорты? Вы понимаете, что это не будет работать вообще.
Тут ничего не происходит, тут выведет информацию вида GameServer: FakePlayers: ActivedКод:/** * Класс одного игрока */ public class FakePlayer { private final static Logger _log = Logger.getLogger(FakePlayer.class.getName()); private L2Player _player; public void run() { _log.info("FakePlayers: Activated"); } }
Этого нету, что вы предложили в вашем архиве.
Вот тут и происходит загрузка этого гавна.Код:package l2s.game.scripts.fakeplayers; import l2s.commons.list.GArray; import l2s.database.FiltredPreparedStatement; import l2s.database.L2DatabaseFactory; import l2s.database.ThreadConnection; import l2s.database.utils.DbUtils; import l2s.game.L2GameThreadPools; import l2s.game.model.actor.L2Player; import java.sql.ResultSet; import java.util.logging.Level; import java.util.logging.Logger; /** * Класс управляющий ботами */ public class FakePlayersManager { private final static Logger _log = Logger.getLogger(FakePlayersManager.class.getName()); private GArray<FakePlayer> _players = new GArray<FakePlayer>(); private static final String LOAD_OFFLINE_STATUS = "SELECT * FROM fake_players"; private static class SingletonHolder { private static final FakePlayersManager _instance = new FakePlayersManager(); } public static FakePlayersManager getInstance() { return SingletonHolder._instance; } public void storeFakePlayers() { ThreadConnection con = null; FiltredPreparedStatement statement = null; ResultSet rs = null; int nPlayers = 0; try { con = L2DatabaseFactory.getInstance().getConnection(); statement = con.prepareStatement(LOAD_OFFLINE_STATUS); rs = statement.executeQuery(); while(rs.next()) { L2Player player = null; try { player = L2Player.restore(rs.getInt("charId")); if(player == null) continue; if(player.isDead()) { player.logout(false, false, true, true); continue; } player.restoreBonus(); player.setOnlineStatus(true); player.setConnected(true); player.restoreEffects(); player.restoreDisableSkills(); player.broadcastUserInfo(true); player.setAutoLoot(true); player.spawnMe(); player.updateTerritories(); if(player.getClan() != null && player.getClan().getClanMember(player.getObjectId()) != null) player.getClan().getClanMember(player.getObjectId()).setPlayerInstance(player); player.setFakePlayer(true); player.setRunning(); player.stopUnimportantTimers(); L2GameThreadPools.getInstance().scheduleGeneral(new FakePlayerTask(player), 15000); nPlayers++; } catch(Exception e) { _log.log(Level.WARNING, "Fake Players Engine: Error loading player: "+player,e); } } rs.close(); statement.close(); } catch(Exception e) { _log.log(Level.WARNING, "Fake Players Engine : Error while loading player: ",e); } finally { DbUtils.closeQuietly(con); } _log.info("Loaded: " +nPlayers+ " Fake Players"); } }
Соответственно находите
CharNameTable.getInstance();
FakePlayersTable.getInstance();
И ниже вставьте
FakePlayersManager.getInstance().storeFakePlayers();
Всё, а тут удалите
_log.info("|=======================INFO==========================|");
_log.info("| Version: " + Config.SERVER_VERSION + ".");
_log.info("|=======================INFO==========================|");
FakePlayersTable.getInstance(); - вот это ибо это не нужно
package ru.l2gw.gameserver.tables;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import ru.l2gw.commons.math.Rnd;
import ru.l2gw.gameserver.Config;
import ru.l2gw.gameserver.controllers.ThreadPoolManager;
import ru.l2gw.gameserver.loginservercon.LSConnection;
import ru.l2gw.gameserver.loginservercon.gspackets.SendFakePlayersCount;
import ru.l2gw.gameserver.model.FakePlayer;
import ru.l2gw.gameserver.model.GameObjectsStorage;
import ru.l2gw.gameserver.model.base.ClassId;
public class FakePlayersTable
{
private static final Log log = LogFactory.getLog(FakePlayersTable.class);
private static long _nextLoginUpdate = 0;
static List<String> fakePlayerNames = new ArrayList<>();
static final Map<String, FakePlayer> fakePlayers = new ConcurrentHashMap<>();
static ScheduledFuture<?> fakePlayersDeleteTask;
public static void loadFakeNames()
{
LineNumberReader lnr = null;
try
{
File list = new File("config/fake_players.list");
if (!list.exists())
{
log.info("Config File doesn't exist: fake_player.list");
return;
}
lnr = new LineNumberReader(new BufferedReader(new FileReader(list)));
String line;
while ((line = lnr.readLine()) != null)
{
if ((line.trim().length() == 0) || line.startsWith("#"))
{
continue;
}
fakePlayerNames.add(line.trim());
}
log.info("FakePlayersTable: Loaded fake player names:" + fakePlayerNames.size());
}
catch (Exception e)
{
log.warn("FakePlayersTable: config/fake_players.list load error: " + e, e);
}
}
public static int getFakePlayersCount()
{
if (Config.FAKE_PLAYERS_FACTOR > 0)
{
int count = (int) (GameObjectsStorage.getAllPlayersCount() * Config.FAKE_PLAYERS_FACTOR * Config.FAKE_PLAYERS_FACTOR_HOUR[Calendar.getInstance().get(Calendar.HOUR_OF_DAY)]);
if (_nextLoginUpdate < System.currentTimeMillis())
{
_nextLoginUpdate = System.currentTimeMillis() + 300000;
LSConnection.getInstance().sendPacket(new SendFakePlayersCount(count));
}
return count;
}
return 0;
}
public static int getBotCount()
{
return fakePlayers.size();
}
public static FakePlayer createFakePlayer(ClassId classId, byte sex, byte hs, byte hc, byte f, int timeMin, int timeMax)
{
String name = null;
while ((fakePlayerNames.size() > 0) && (name == null))
{
name = fakePlayerNames.remove(Rnd.get(fakePlayerNames.size()));
if (CharNameTable.getInstance().doesCharNameExist(name))
{
name = null;
}
}
if (name == null)
{
return null;
}
return FakePlayer.create((short) classId.getId(), sex, "fake_player", name, hs, hc, f, Rnd.get(timeMin, timeMax));
}
public static void addFakePlayer(FakePlayer player)
{
FakePlayer fakePlayer = fakePlayers.put(player.getName().toLowerCase(), player);
if (fakePlayer != null)
{
fakePlayer.deleteMe();
}
if (fakePlayersDeleteTask == null)
{
fakePlayersDeleteTask = ThreadPoolManager.getInstance().scheduleGeneral(new FakePlayerDeleteTask(), 60000);
}
}
public static boolean isFakePlayer(String name)
{
return fakePlayers.containsKey(name.toLowerCase());
}
private static class FakePlayerDeleteTask implements Runnable
{
public FakePlayerDeleteTask()
{
}
@Override
public void run()
{
for (FakePlayer fakePlayer : fakePlayers.values())
{
if (fakePlayer.getDespawnTime() < System.currentTimeMillis())
{
fakePlayers.remove(fakePlayer.getName().toLowerCase());
if (!fakePlayerNames.contains(fakePlayer.getName()))
{
fakePlayerNames.add(fakePlayer.getName());
}
fakePlayer.deleteMe();
}
}
if (fakePlayers.size() < 1)
{
fakePlayersDeleteTask = null;
}
else
{
fakePlayersDeleteTask = ThreadPoolManager.getInstance().scheduleGeneral(this, 10000);
}
}
}
}
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?