Перейти к содержанию
Авторизация  
РукьЖопь

Предмет За Каждый Час Непрерывного Времени В Игре.

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

Подскажите пожалуйста как можно реализовать выдачу предмета игроку если он находиться в игре больше определенного времени.

Допустим за каждый час непрерывного времени в игре.

Исходники L2jserver.

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


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

По принципу PC Bang можно сделать

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


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

При входе в игру запускай Пул с интервалом 1 час и всё.

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


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

При входе в игру запускай Пул с интервалом 1 час и всё.

Спасибо за ответ, но к сожалению я не очень понимаю о чем речь.

Не могли бы Вы растолковать немного... привести пример может...

Изменено пользователем РукьЖопь

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


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

Спасибо за ответ, но к сожалению я не очень понимаю о чем речь.

Не могли бы Вы растолковать немного... привести пример может...

Что такое пул - в гугл.

Однако товарищ iceman сказал лишь начало вашего пути.

 

Где нибудь в загрузке ГС запускаете пул с интервалом и указываете имя класса (который будет выполняться).

ThreadPoolManager.getInstance().scheduleGeneral(new имя_класса(), время_в_миллисекундах);

 

Дальше создаёте класс или описываете его где нибудь (указываете интерфейс от Runnable.

static class имя_класса() implements Runnable
{
}

 

Внутри организовываете цикл на прокрутку всех игроков в онлайне.

for (L2PcInstance plr :  L2World.getInstance().getAllPlayers())
{
}

 

Там у каждого игрока смотрите время онлайна от захода.

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

 

Т.е. делаете проверку типо...

if (plr.getOnlineTime() >= время)

 

И выдаете награду.

plr.getInventory().addItem("reward", итем_ид, количество, plr, plr);

 

 

P.S. код может отличаться от вашего. Пытался объяснить как можно проще.

P.S.S. полезли в ядро - учите яву. Никто за вас ничего делать не будет (по крайней мере бесплатно).

Да как сказал Николай (вроде бы): назвался гинекологом - полезай в ******.

 

P.S.S.S. лень исправлять, цикл и проверку уже делаем в интерфейсе класса:

@Override
public void run()
{
   тут_цикл
    тут_проверка
	    тут_выдача_если_проверка_успешна
}

  • Upvote 1

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


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

Что такое пул - в гугл.

Однако товарищ iceman сказал лишь начало вашего пути.

 

Где нибудь в загрузке ГС запускаете пул с интервалом и указываете имя класса (который будет выполняться).

ThreadPoolManager.getInstance().scheduleGeneral(new имя_класса(), время_в_миллисекундах);

 

Дальше создаёте класс или описываете его где нибудь (указываете интерфейс от Runnable.

static class имя_класса() implements Runnable
{
}

 

Внутри организовываете цикл на прокрутку всех игроков в онлайне.

for (L2PcInstance plr : L2World.getInstance().getAllPlayers())
{
}

 

Там у каждого игрока смотрите время онлайна от захода.

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

 

Т.е. делаете проверку типо...

if (plr.getOnlineTime() >= время)

 

И выдаете награду.

plr.getInventory().addItem("reward", итем_ид, количество, plr, plr);

 

 

P.S. код может отличаться от вашего. Пытался объяснить как можно проще.

P.S.S. полезли в ядро - учите яву. Никто за вас ничего делать не будет (по крайней мере бесплатно).

Да как сказал Николай (вроде бы): назвался гинекологом - полезай в ******.

 

P.S.S.S. лень исправлять, цикл и проверку уже делаем в интерфейсе класса:

@Override
public void run()
{
тут_цикл
 тут_проверка
	 тут_выдача_если_проверка_успешна
}

Большое спасибо! :)

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


Ссылка на сообщение
Поделиться на другие сайты
В 18.03.2013 в 05:40, РукьЖопь сказал:

Подскажите пожалуйста как можно реализовать выдачу предмета игроку если он находиться в игре больше определенного времени.

Допустим за каждый час непрерывного времени в игре.

Исходники L2jserver.

package custom.TimeRewards;

import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Map;
import java.util.HashMap;

import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.commons.util.Rnd;

/**
 * TomAlko
 */

public class TimeRewards
{
	private static Logger LOGGER = Logger.getLogger(TimeRewards.class.getName());
	private static boolean RewardEnable = true; // true - включен, false - выключен
	private static int RewardTime = 60;			// время (в минутах), через которое будет выдан итем 
	private static int RewardId = 4037;			// ID итема
	private static int MinLvl = 1;				// минимальный левел, с которого можно получать итем
	private static int MaxLvl = 85;				// максимальный левел, до которого можно получать итем
	private static int MinCount = 1;			// минимальное кол-во итемов
	private static int MaxCount = 2;			// максимальное кол-во итемов

	public TimeRewards() {
		LOGGER.info("=================================================");
		LOGGER.info("========= Time Rewards by Seidhe LOADED =========");
		LOGGER.info("=================================================");
		ThreadPool.schedule(new RunnableTimeRewards(), RewardTime * 60000);
	}

	private class RunnableTimeRewards implements Runnable
	{
		private Map<Integer,Location> _lastLoc = new HashMap<Integer, Location>();
		public void run()
		{
			for(Player player : World.getInstance().getPlayers()) {
				if(player == null || player.isInOfflineMode() || player.isAlikeDead() || player.getLevel() < MinLvl || player.getLevel() > MaxLvl) 
					continue;
				if(_lastLoc.containsKey(player.getObjectId())) try {
					Location l = _lastLoc.get(player.getObjectId());
					Location l2 = player.getLocation();
					if(Math.abs((l.getX()*l.getX() + l.getY()*l.getY())-(l2.getX()*l2.getX()+l2.getY()+l2.getY())) < 200)
						continue;
				} finally {
					_lastLoc.put(player.getObjectId(), player.getLocation());
				}
				int score = MinCount+Rnd.get(MaxCount-MinCount);
				if(score <= 0)
					continue;
				player.addItem("TimeReward", RewardId, score, player, true);
			}
			ThreadPool.schedule(new RunnableTimeRewards(), RewardTime * 60000);
		}
	}
	
	public static void main(String[] args)
	{
		if (RewardEnable) {
			new TimeRewards();
		}
	}
}

 

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


Ссылка на сообщение
Поделиться на другие сайты
В 07.02.2023 в 15:38, tomalko сказал:

обновление

package custom.TimeRewards;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import org.l2jmobius.Config;
import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.commons.util.Rnd;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Player;

/**
 * TomAlko
 */

public class TimeRewards
{
	private static Logger LOGGER = Logger.getLogger(TimeRewards.class.getName());
	private static boolean RewardEnable = true; // true - включен, false - выключен
	private static int RewardTime = 60; // время (в минутах), через которое будет выдан итем
	private static int RewardId = 4037; // ID итема
	private static int MinLvl = 1; // минимальный левел, с которого можно получать итем
	private static int MaxLvl = 85; // максимальный левел, до которого можно получать итем
	private static int MinCount = 1; // минимальное кол-во итемов
	private static int MaxCount = 2; // максимальное кол-во итемов
	private static int MinCountPremium = 3;
	private static int MaxCountPremium = 4;
	
	public TimeRewards()
	{
		LOGGER.info("=================================================");
		LOGGER.info("========= Time Rewards by Seidhe LOADED =========");
		LOGGER.info("=================================================");
		ThreadPool.schedule(new RunnableTimeRewards(), RewardTime * 60000);
	}
	
	private class RunnableTimeRewards implements Runnable
	{
		private final Map<Integer, Location> _lastLoc = new HashMap<Integer, Location>();
		
		@Override
		public void run()
		{
			for (Player player : World.getInstance().getPlayers())
			{
				if ((player == null) || player.isInOfflineMode() || player.isAlikeDead() || (player.getLevel() < MinLvl) || (player.getLevel() > MaxLvl))
				{
					continue;
				}
				if (_lastLoc.containsKey(player.getObjectId()))
				{
					try
					{
						Location l = _lastLoc.get(player.getObjectId());
						Location l2 = player.getLocation();
						if (Math.abs(((l.getX() * l.getX()) + (l.getY() * l.getY())) - ((l2.getX() * l2.getX()) + l2.getY() + l2.getY())) < 200)
						{
							continue;
						}
					}
					finally
					{
						_lastLoc.put(player.getObjectId(), player.getLocation());
					}
				}
				int score = 0;
				if (Config.PREMIUM_SYSTEM_ENABLED && player.hasPremiumStatus())
				{
					score = MinCountPremium + Rnd.get(MaxCountPremium - MinCountPremium);
				}
				else
				{
					score = MinCount + Rnd.get(MaxCount - MinCount);
				}
				if (score <= 0)
				{
					continue;
				}
				player.addItem("TimeReward", RewardId, score, player, true);
			}
			ThreadPool.schedule(new RunnableTimeRewards(), RewardTime * 60000);
		}
	}
	
	public static void main(String[] args)
	{
		if (RewardEnable)
		{
			new TimeRewards();
		}
	}
}

 

 

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


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

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

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

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

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

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

Войти

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

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

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

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

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