Jump to content

Recommended Posts

Posted

Description:

A simple Event which sort all players and give to the 3 Top by a count of Item (eg. 666666) a reward. It runs automaticaly every Sunday at 12:00 (24h)!.As reward it gives adena,though its easy to change it by yourself,also after that all items with id (eg. 666666) get destroyed.

MiniEvent.java

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.entity;

import java.util.Calendar;

import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

/**
* @author Ventic & Hades
* @version 2.0
*
*/
public class MiniEvent
{
static int[] players = new int[L2World.getInstance().getAllPlayersArray().length];
static long[] itemCount = new long[L2World.getInstance().getAllPlayersArray().length];

public static void runEvent()
{
	getPlayers();
	getWinners();
	giveReward();
	removeSpecificItem();
}

public static void getInstance()
{
	ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
	{
		@Override
		public void run()
		{
			runEvent();
		}
	}, getRunTime());
}

public static long getRunTime()
{
	Calendar c = Calendar.getInstance();
	c.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
	c.set(Calendar.HOUR, 12);
	c.set(Calendar.MINUTE, 01);

	long time = c.getTimeInMillis();
	if (System.currentTimeMillis()- time < 0)
	{
		long delay = c.getTimeInMillis() - System.currentTimeMillis();
		return delay;
	}

	return 0;
}

public static void getPlayers()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		for (int i = 0; i <= players[L2World.getInstance().getAllPlayersArray().length]; i++)
		{
			players[i] = p.getObjectId();
			itemCount[i] = p.getInventory().getItemByItemId(666666).getCount();
		}
	}
}

public static void getWinners()
{
	for (int pass = 1; pass <= players.length; pass++) // count how many times..This next loop becomes shorter and shorter
	{
		for (int i=0; i < players.length-pass; i++) 
		{
			if (itemCount[i] > itemCount[i+1]) 
			{
                // exchange elements
                long temp = itemCount[i];  
                itemCount[i] = itemCount[i+1]; 
                itemCount[i+1] = temp;
                int ids = players[i];
                players[i] = players[i+1];
                players[i+1] = ids;
            }
		}
	}		
}

public static void giveReward()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		L2World.getInstance().getPlayer(getFirst()).addItem("Server", 57, 5000, p, true);
		L2World.getInstance().getPlayer(getSecond()).addItem("Server", 57, 2500, p, true);
		L2World.getInstance().getPlayer(getThird()).addItem("Server", 57, 1000, p, true);
	}
}

public static void removeSpecificItem()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		p.destroyItem("Server", 666666, p.getInventory().getItemByItemId(66666).getCount(), p, true);
	}
}

public static int getFirst()
{
	return players[1];
}

public static int getSecond()
{
	return players[2];
}

public static int getThird()
{
	return players[3];
}
}

 

GameServer.java

MiniEvent.getInstance();

 

Coded on H5 by Ventic and Hades.

 

Code isnt tested,any feedback is welcome.

Posted

"players" table isnt needed at all, its better to create long[][] playerItems = new long[allPlayersSize][2];//[x][0] - player id, [x][1] - player Items Count.

 

Why are u sorting whole table when u just need top 3? Its better to just make loop run 3 times and catch best score.

Posted

Description:

A simple Event which sort all players and give to the 3 Top by a count of Item (eg. 666666) a reward. It runs automaticaly every Sunday at 12:00 (24h)!.As reward it gives adena,though its easy to change it by yourself,also after that all items with id (eg. 666666) get destroyed.

MiniEvent.java

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.model.entity;

import java.util.Calendar;

import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

/**
* @author Ventic & Hades
* @version 2.0
*
*/
public class MiniEvent
{
static int[] players = new int[L2World.getInstance().getAllPlayersArray().length];
static long[] itemCount = new long[L2World.getInstance().getAllPlayersArray().length];

public static void runEvent()
{
	getPlayers();
	getWinners();
	giveReward();
	removeSpecificItem();
}

public static void getInstance()
{
	ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
	{
		@Override
		public void run()
		{
			runEvent();
		}
	}, getRunTime());
}

public static long getRunTime()
{
	Calendar c = Calendar.getInstance();
	c.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
	c.set(Calendar.HOUR, 12);
	c.set(Calendar.MINUTE, 01);

	long time = c.getTimeInMillis();
	if (System.currentTimeMillis()- time < 0)
	{
		long delay = c.getTimeInMillis() - System.currentTimeMillis();
		return delay;
	}

	return 0;
}

public static void getPlayers()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		for (int i = 0; i <= players[L2World.getInstance().getAllPlayersArray().length]; i++)
		{
			players[i] = p.getObjectId();
			itemCount[i] = p.getInventory().getItemByItemId(666666).getCount();
		}
	}
}

public static void getWinners()
{
	for (int pass = 1; pass <= players.length; pass++) // count how many times..This next loop becomes shorter and shorter
	{
		for (int i=0; i < players.length-pass; i++) 
		{
			if (itemCount[i] > itemCount[i+1]) 
			{
                // exchange elements
                long temp = itemCount[i];  
                itemCount[i] = itemCount[i+1]; 
                itemCount[i+1] = temp;
                int ids = players[i];
                players[i] = players[i+1];
                players[i+1] = ids;
            }
		}
	}		
}

public static void giveReward()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		L2World.getInstance().getPlayer(getFirst()).addItem("Server", 57, 5000, p, true);
		L2World.getInstance().getPlayer(getSecond()).addItem("Server", 57, 2500, p, true);
		L2World.getInstance().getPlayer(getThird()).addItem("Server", 57, 1000, p, true);
	}
}

public static void removeSpecificItem()
{
	for (L2PcInstance p : L2World.getInstance().getAllPlayersArray())
	{
		p.destroyItem("Server", 666666, p.getInventory().getItemByItemId(66666).getCount(), p, true);
	}
}

public static int getFirst()
{
	return players[1];
}

public static int getSecond()
{
	return players[2];
}

public static int getThird()
{
	return players[3];
}
}

 

GameServer.java

MiniEvent.getInstance();

 

Coded on H5 by Ventic and Hades.

 

Code isnt tested,any feedback is welcome.

 

 

So how exactly this event work? For what I understood it will sort all players and find who have more of one item, the reward then with another item, Am I right.

 

Lets say the item is Gold Bar (3470), it will sort all players by how many gold bars they have and then it will reward the 3 players that have more of it. right? Just to clear because the way you explain was a little confused.

Thank you for share

Posted

 

So how exactly this event work? For what I understood it will sort all players and find who have more of one item, the reward then with another item, Am I right.

 

Lets say the item is Gold Bar (3470), it will sort all players by how many gold bars they have and then it will reward the 3 players that have more of it. right? Just to clear because the way you explain was a little confused.

Thank you for share

yes right :)

 

also please delete the code from your quote

Guest Elfocrash
Posted

nice event!  I have a question.

 

where should I put the java file in the project?

package com.l2jserver.gameserver.model.entity;

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...