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

[халява] Воплощение Ваших Идей

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

P.S. забыл, сори за срач в ГСе, для себя делал и забыл убрать :lol:

В нормальной версии уберу.

 

Вроде в ГСе чистенько пока что :) А время выдачи призов какое? И когда начинается заново набор очков?

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


Ссылка на сообщение
Поделиться на другие сайты
Вроде в ГСе чистенько пока что :lol: А время выдачи призов какое? И когда начинается заново набор очков?

00 выдается приз. 01 начинается новый набор.

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


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

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

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


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

В ГСе должно выводить время поминутно.

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


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

Прямо каждую минуту? Хм, не выводит почему то.

Тьфу ты, я дуралей, не добавил в геймсервер. Сейчас добавлю потестю и отпишусь.

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

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


Ссылка на сообщение
Поделиться на другие сайты
Прямо каждую минуту? Хм, не выводит почему то.

Тьфу ты, я дуралей, не добавил в геймсервер. Сейчас добавлю потестю и отпишусь.

 

в gameserver.java добавить:

Код

L2PursuitInstance.StartEventOfBonusItem();

 

?

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


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

Да да, я вот сейчас только про него вспомнил и добавил, сейчас посмотрю как будет себя вести и скажу.

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


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

Все работает, вот только хиро выдает персонажам которые онлайн. Но это уже косяк моей функции выдачи хиро, а так же нужно будет отнимать хиро.

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


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

мой вариант, делал сам полностью

 

Скрытый текст
38449448.png

 

работает по принципу банка - Набирается определенное количество, как только набралось лидеру выдает хиро

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

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


Ссылка на сообщение
Поделиться на другие сайты
Все работает, вот только хиро выдает персонажам которые онлайн. Но это уже косяк моей функции выдачи хиро, а так же нужно будет отнимать хиро.

 

Про хиро знаю, скорее всего всё таки сделаю отдельную таблицу. В неё будут записываться герои и также удаляться.

Только со временем удаления надо что-то решить.

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


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

Пожалуйста реализуй такую фричу, под фрозенов

 

Нужно сделать камни, которые можно было бы бить определенным оружием(кирка или что то типа этого)

При ударе камень ломается(респаун 6-8мин) и с шансом 50-70% дроп айтема

Нужно 5 структур(Руда, золото, титан, слюна ядовитого паука, кожа Етти)

 

Это похоже на л2ворлд(ит) там тоже были камни которые нужно было бить выставленным оружием

 

Если сделаешь благодарность безграничная будет.

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


Ссылка на сообщение
Поделиться на другие сайты
Пожалуйста реализуй такую фричу, под фрозенов

 

Нужно сделать камни, которые можно было бы бить определенным оружием(кирка или что то типа этого)

При ударе камень ломается(респаун 6-8мин) и с шансом 50-70% дроп айтема

Нужно 5 структур(Руда, золото, титан, слюна ядовитого паука, кожа Етти)

 

Это похоже на л2ворлд(ит) там тоже были камни которые нужно было бить выставленным оружием

 

Если сделаешь благодарность безграничная будет.

 

Уже выкладывал, но тема вроде была удалена.

Поищу ещё.

 

http://forummaxi.ru/index.php?showtopic=6513&hl=

К сожалению ссылка уже битая. Мб KFan поделится :)

Изменено пользователем †DeMoN†™

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


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

ну который ты последний сделал

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


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

 

Скрытый текст
38449448.png

 

работает по принципу банка - Набирается определенное количество, как только набралось лидеру выдает хиро

это совсем не то ,если я правельно конечно понял)

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


Ссылка на сообщение
Поделиться на другие сайты
это совсем не то ,если я правельно конечно понял)

Что совсем не то? Это тот же "Сборщик"

 

Тут даже оффлайн игроки уже реализованы)

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

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


Ссылка на сообщение
Поделиться на другие сайты
Уже выкладывал, но тема вроде была удалена.

Поищу ещё.

 

http://forummaxi.ru/index.php?showtopic=6513&hl=

К сожалению ссылка уже битая. Мб KFan поделится :)

 

Пожалуйста если найдете, скиньте эту реализацию

 

\Буду очень при очень благодарен

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


Ссылка на сообщение
Поделиться на другие сайты
Пожалуйста если найдете, скиньте эту реализацию

 

\Буду очень при очень благодарен

 

ссылка

 

вот, я делал, но по моему это не под интерлюд...

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


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

Так что это за ивент который последний скинули )?

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


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

 

вот, я делал, но по моему это не под интерлюд...

 

Скорее всего не под ит, не как вбить не могу

Блин где же достать эту крафт систему(

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


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

Блин где же достать эту крафт систему(

Перепешите, там спокойно под ил подойдет

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


Ссылка на сообщение
Поделиться на другие сайты
Так что это за ивент который последний скинули )?

Тот же, что и у меня, только вместо времени установлен банк. (при опр. сумме игрокам, вложившим больше всего, выдается приз)

Изменено пользователем †DeMoN†™

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


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

Update. Выдача и запоминание хиро статуса для победителей (+ оффлайн).

Хиро удаляется за 1 минуту, до конца события. Т.е. старым победителям удаляют и новым дают.

Не тестировал.

 

L2PursuitInstance.java

Скрытый текст

package net.sf.l2j.gameserver.model.actor.instance;

import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.StringTokenizer;

import javolution.text.TextBuilder;
import net.sf.l2j.database.DatabaseUtils;
import net.sf.l2j.database.FiltredPreparedStatement;
import net.sf.l2j.database.L2DatabaseFactory;
import net.sf.l2j.database.ThreadConnection;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;

public class L2PursuitInstance extends L2FolkInstance
{
/** Config begin */
private static final int ITEM_ID = 4037; // ID предмета, который нужно сдавать NPC
private static final String ITEM_NAME = "Coin of Luck"; //Название предмета, для вывода сообщений
private static final int topCount = 10; // Количество игроков в топе
private static final int winnerCount = 3; // Количество игроков, которые получат приз
private static final String annons1 = "Хотите получить интерессный приз? Учавствуйте в евенте \"Сборщик\"!"; // Аннонс о прохождении евента
private static final String annons2 = "До конца евента \"Сборщик\" осталось 5 минут"; // Аннонс об окончании евента
private static final String annons3 = " выйграл евент \"Сборщик\" и получает статус героя!"; // Аннонс о выйгрые, вид: (имя_игрока, выйграл евент и т.д.)
/** Config end */

static Thread thr;

public L2PursuitInstance (int objectId, L2NpcTemplate template)
{
	super(objectId, template);
}

@ Override
public void onAction(L2PcInstance player)
{
	player.setLastFolkNPC(this);
	super.onAction(player);
}

@ Override
public void onBypassFeedback(L2PcInstance player, String command)
{
	if (command.startsWith("put"))
	{
		StringTokenizer st = new StringTokenizer(command.substring(3).trim());

		if (st.countTokens() != 1)
			return;

		String token = st.nextToken();
		int putCount = 0;

		if (token.matches("[0-9]*"))
			putCount = Integer.parseInt(token);
		else
		{
			player.sendMessage("Неправильный ввод");
			return;
		}

		if (putCount <= 0 || player.getInventory().getInventoryItemCount(ITEM_ID, 0) < putCount)
		{
			player.sendMessage("У вас не хватает предметов");
			return;
		}

		InventoryUpdate ui = new InventoryUpdate();

		if (player.getInventory().destroyItemByItemId("Pursuit", ITEM_ID, putCount, player, player) != null)
		{
			player.sendMessage("Вы вложили " + putCount + " " + ITEM_NAME);
			updateBonusItem(player, charInBonusBD(player) + putCount);
			ui.addModifiedItem(player.getInventory().getItemByItemId(ITEM_ID));
			player.sendPacket(ui);
		}
		ui = null;
	}
	else if (command.startsWith("getInfo"))
	{
		int i = 1;
		NpcHtmlMessage html = new NpcHtmlMessage(1);
		TextBuilder tb = new TextBuilder("<html><title>Сборщик</title><body>");
		tb.append("<table align=\"center\" border=\"1\"><tr><td width=\"20\">#</td><td width=\"150\">Имя персонажа</td><td width=\"150\">Количество</td></tr>");

		ThreadConnection con = null;
		FiltredPreparedStatement st = null;

		try
		{
			con = L2DatabaseFactory.getInstance().getConnection();
			st = con.prepareStatement("SELECT obj_Id, count FROM pursuit order by count desc limit " + topCount);
			ResultSet result = st.executeQuery();

			while (result.next())
			{
				int obj_Id = result.getInt("obj_Id");
				int count = result.getInt("count");

				tb.append("<tr><td width=\"10\">" + i + "</td><td width=\"200\">" + getNameForObjectId(obj_Id) + "</td><td width=\"200\">" + count + "</td></tr>");
				i++;
			}

			tb.append("</body></html>");
			html.setHtml(tb.toString());
			player.sendPacket(html);

			result.close();
		}
		catch (Exception e)
		{
			_log.warning("" + e);
		}
		finally
		{
			DatabaseUtils.closeDatabaseCS(con, st);
		}
	}
	else
		super.onBypassFeedback(player, command);
}

private static String getNameForObjectId(int objId)
{
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;
	String name = "error";

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("SELECT char_name FROM characters WHERE obj_Id=" + objId);
		ResultSet rs = st.executeQuery();

		while (rs.next())
			name = rs.getString("char_name");
		rs.close();
	}
	catch (Exception e)
	{
		_log.warning("" + e);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}
	return name;
}

private static int charInBonusBD(L2PcInstance player)
{
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;
	int count = 0;

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("SELECT count from pursuit WHERE obj_Id=?");
		st.setInt(1, player.getObjectId());
		ResultSet rs = st.executeQuery();

		while (rs.next())
			count = Integer.parseInt(rs.getString("count"));

		rs.close();
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}

	return count;
}

private static void updateBonusItem(L2PcInstance player, int count)
{
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;

	if (player == null)
		return;

	if (charInBonusBD(player) != 0)
	{
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection();
			st = con.prepareStatement("UPDATE pursuit SET count=" + count + " WHERE obj_Id=" + player.getObjectId());
			st.executeUpdate();
		}
		catch (Exception ex)
		{
			_log.warning("" + ex);
		}
		finally
		{
			DatabaseUtils.closeDatabaseCS(con, st);
		}
	}
	else
	{
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection();
			st = con.prepareStatement("INSERT INTO pursuit (obj_Id, count) VALUES(?,?)");
			st.setInt(1, player.getObjectId());
			st.setInt(2, count);
			st.execute();
		}
		catch (Exception ex)
		{
			_log.warning("" + ex);
		}
		finally
		{
			DatabaseUtils.closeDatabaseCS(con, st);
		}
	}
}

private static void toReward()
{
	_log.info("toReward");
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("SELECT obj_Id FROM pursuit order by count desc limit " + winnerCount);
		ResultSet result = st.executeQuery();

		while (result.next())
		{
			L2PcInstance player = L2World.getInstance().getPlayer(result.getInt("obj_Id"));

			if (player == null)
				setEnterHero(getNameForObjectId(result.getInt("obj_Id")));
			else
			{
				setEnterHero(getNameForObjectId(result.getInt("obj_Id")));
				player.setHero(true);
			}
			Announcements.getInstance().announceToAll(player.getName() + annons3);

			player = null;
		}

		refreshEvent();
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}
}

private static void refreshEvent()
{
	_log.info("refreshEvent");
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("DELETE FROM pursuit");
		st.execute();
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}
}

private static void deleteEnterHero(String name)
{
	_log.info("deleteEnterHero");
	if (!isEnterHero(name))
		return;

	L2PcInstance player = L2World.getInstance().getPlayer(name);

	if (player != null)
		player.setHero(false);

	ThreadConnection con = null;
	FiltredPreparedStatement st = null;

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("DELETE FROM enterhero WHERE char_name=?");
		st.setString(1, name);
		st.execute();
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}
}

private static void setEnterHero(String name)
{
	_log.info("setEnterHero");
	if (isEnterHero(name))
		return;

	ThreadConnection con = null;
	FiltredPreparedStatement st = null;

	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("INSERT INTO enterhero (char_name) values(?)");
		st.setString(1, name);
		st.execute();
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}
}

public static boolean isEnterHero(String name)
{
	_log.info("isEnterHero");
	ThreadConnection con = null;
	FiltredPreparedStatement st = null;
	int cnt = 0;
	try
	{
		con = L2DatabaseFactory.getInstance().getConnection();
		st = con.prepareStatement("SELECT COUNT(*) FROM enterhero WHERE char_name=?");
		st.setString(1, name);
		ResultSet rs = st.executeQuery();

		if (rs.next())
			cnt = 1;
	}
	catch (Exception ex)
	{
		_log.warning("" + ex);
	}
	finally
	{
		DatabaseUtils.closeDatabaseCS(con, st);
	}

	if (cnt == 0)
		return false;
	else
		return true;
}

public static void StartEventOfBonusItem()
{
	thr = new Thread() {
		@ Override
		public void run()
		{
			while (true)
			{
				int minutes = Integer.parseInt(new SimpleDateFormat("mm").format(Calendar.getInstance().getTime()));

				if (minutes == 5 || minutes == 15 || minutes == 25 || minutes == 35 || minutes == 45)
				{
					_log.info("5,15,25,35,45 min");
					Announcements.getInstance().announceToAll(annons1);
				}
				else if (minutes == 55)
				{
					_log.info("55 min");
					Announcements.getInstance().announceToAll(annons2);
				}
				else if (minutes == 59)
				{
					ThreadConnection con = null;
					FiltredPreparedStatement st = null;

					try
					{
						con = L2DatabaseFactory.getInstance().getConnection();
						st = con.prepareStatement("SELECT * FROM enterhero");
						ResultSet rs = st.executeQuery();

						while (rs.next())
						{
							String name = rs.getString("char_name");
							L2PcInstance player = L2World.getInstance().getPlayer(name);

							if (player != null)
								player.setHero(false);

							deleteEnterHero(name);

							Announcements.getInstance().announceToAll("Геройство с победителя евента \"Сборкищ\": + " + name + " снято!");
						}
						rs.close();
					}
					catch (Exception ex)
					{
						_log.warning("" + ex);
					}
					finally
					{
						DatabaseUtils.closeDatabaseCS(con, st);
					}
				}
				else if (minutes == 0)
				{
					_log.info("reward");
					toReward();
				}

				try
				{
					_log.info("sleep " + minutes);
					Thread.sleep(60000);
				}
				catch (Exception ex)
				{
					_log.warning("" + ex);
				}
			}
		}
	};
	thr.start();
}
}

 

В EnterWorld добавить:

Скрытый текст
if (L2PursuitInstance.isEnterHero(activeChar.getName()))
		activeChar.setHero(true);

 

Сделать запрос в БД:

Скрытый текст
CREATE TABLE enterhero (
char_name varchar(35) NOT NULL,
PRIMARY KEY  (char_name)
);

Изменено пользователем †DeMoN†™

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


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

Демон , мог бы попробовать реализовать , заточка у нпс ?) Что бы заточка выводилась как бы через базу , например вписал туда айди нпс и там мин заточка и макс заточка ) .

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

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

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

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