Jump to content

Recommended Posts

Posted (edited)

Hello, since i'm disappointed with the forum and i'm bored i made a code. I haven't test it but if there is any problem you can write bellow.

What it does it basically you set how many hours you want your player to be hero and you set him hero. He can log out and login he is still hero

until time is over and hero removed automatically. It use database to store.

 

Index: com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
======================================================================

	private long _heroTime;
	
	public void setHeroTime(int hour) //Add hero time here
	{
		_heroTime = System.currentTimeMillis() + hour * 1000 * 3600;
		HeroTask.updateHero(this, _heroTime);
                scheduleHeroTime();
	}
	
	private ScheduledFuture<?> _heroTask;
	
	public void scheduleHeroTime()
	{
		setHero(true);
		broadcastUserInfo();
		
		for (L2Skill sk : HeroSkillTable.getHeroSkills())
			addSkill(sk, false);
		
		_heroTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
		{
			@Override
			public void run()
			{
				if (L2PcInstance.this !=null)
				{
					setHero(false);
					broadcastUserInfo();
					
					for (L2Skill sk : HeroSkillTable.getHeroSkills())
						removeSkill(sk);
				}
			}
			
		}, HeroTask.getRemainedHero(this) - System.currentTimeMillis());
	}
	
	public boolean isHeroTimeTask()
	{
		if (System.currentTimeMillis() > HeroTask.getRemainedHero(this) + 5000)
			return false;
		return true;
	}
	
Index: com/l2jserver/gameserver/GameServer.java
======================================================================
HeroTask.loadData();

Index: com/l2jserver/gameserver/datatables/HeroTask.java
======================================================================

package com.l2jserver.gameserver.custom;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

/**
 * @author AccessDenied
 */
public class HeroTask
{
	private static Connection _con;
	private static final String SELECT_HERO = "SELECT * FROM heroTask";
	private static final String INSERT_HERO = "INSERT INTO heroTask(charId, heroTime) values (?,?)";
	private static final Map<Integer, Long> _hero = new HashMap<Integer, Long>();
	
	public static void storeHeroTime()
	{
		try
		{
			final PreparedStatement st = getConnection().prepareStatement(INSERT_HERO);

			for (Entry<Integer, Long> next : _hero.entrySet())
			{
				int objectId = next.getKey();
				Long time = next.getValue();

				st.setInt(1, objectId);
				st.setLong(2, time);
			}

			st.execute();
			st.close();

		} 
		catch (final Exception e)
		{
			e.printStackTrace();
		} 
		finally
		{
			L2DatabaseFactory.close(_con);
		}
	}

	public static void loadData()
	{
		try
		{
			final PreparedStatement st = getConnection().prepareStatement(SELECT_HERO);
			final ResultSet rset = st.executeQuery();

			while (rset.next())
			{
				final int playerId = rset.getInt(1);
				final long heroTime = rset.getLong(2);

				_hero.put(playerId, heroTime);
			}

			st.close();
		} 
		catch (final Exception e)
		{
			e.printStackTrace();
		} 
		finally
		{
			L2DatabaseFactory.close(_con);
		}
	}
	
	public static void updateHero(L2PcInstance p, long time)
	{
		_hero.put(p.getObjectId(), time);
	}
	
	public static long getRemainedHero(L2PcInstance p)
	{
		if (_hero.containsKey(p))
			return _hero.get(p);
		return 0;
	}

	private static Connection getConnection()
	{
		try
		{
			if (_con == null || _con.isClosed())
				_con = L2DatabaseFactory.getInstance().getConnection();
		} catch (final Exception e)
		{
			e.printStackTrace();
		}
		return _con;
	}
}

Index: com/l2jserver/gameserverg/gameserver/network/clientpackets/RequestRestart.java
======================================================================

if (player._heroTask !=null)
	_heroTask.cancel(true);
	
Index: com/l2jserver/gameserverg/gameserver/network/clientpackets/RequestLogout.java
======================================================================

if (player._heroTask !=null)
	_heroTask.cancel(true);


Index: com/l2jserver/gameserver/Shutdown.java
======================================================================

HeroTask.storeHeroTime();


Index: com/l2jserver/gameserver/network/clientpackets/Enterworld.java
======================================================================

	if (activeChar.isHeroTimeTask())
		activeChar.scheduleHeroTime();

 

Sql file:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: none
Target Host: localhost
Target Database: L2j
Date: 6/1/2017 5:52:35 μμ
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for herotask
-- ----------------------------
DROP TABLE IF EXISTS `herotask`;
CREATE TABLE `herotask` (
  `charId` int(15),
  `heroTime` bigint(15) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records 
-- ----------------------------

Edited by AccessDenied

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock