Jump to content

Question

Posted

Hello,

 

how can i check if the player make, for example, 2 kills in 5 seconds.

 

[Algorithmic]

private date&hour time; (IDK actually the real name of this type)
private date&hour timelast;
private int cumulkill = 0; // 3 global variables in L2PcInstance

in setPvpKills() method // method that add a pvp point

setCumulKill(CumulKill()+1);
if ( cumulkill() == 1)
{
     time = current time;
     timelast = time +5 sec;
}

doublekill();


public void doublekill ()
if ( time =< timelast)
{
     if (CumulKill() >=2)
     {
     reward doublekill;
     }
}
else
{
     SetCumulKill (0);
}

public void SetCumulKill (int x)
{
     cumulkill = x;
}

public int CumulKill ()
{
     return cumulkill;
}

[/algorithmic]

 

This algo can works?

 

Cordially,

Bleadd

 

10 answers to this question

Recommended Posts

  • 0
Posted

setCumulKill(CumulKill()+1);
if ( cumulkill() == 1)
{
     time = current time;
     timelast = time +5 sec;
}

doublekill();


public void doublekill ()
if ( time =< timelast)
{
     if (CumulKill() >=2)
     {
     reward doublekill;
     }
}
else
{
     SetCumulKill (0);
}

you modify time and timelast only once, so time < timelast every moment

i will edit this post to try to write something that will work, dont have time atm

 

Edit:

long _savedTime = 0;
int _pvpStreak = 0; // not needed for only double kills
...


if (System.currentTimeMillis() - 5 sec <= _savedTime){
          _pvpStreak++;
          switch ( _pvpStreak){
                 case 2: ...
                           break;
                 case ...
          }
}
else{
           _savedTime = System.currentTimeMillis();
           _pvpStreak = 0;
}

more or less

  • 0
Posted

You verify the current time compared to registered time (which was current time when you LAUNCHED the task, if you followed... but registered in a variable, so it is fixed now and can be used to compared elapsed time) in a task launched repetitively every sec for 5sec.

 

How to stop the task ? It can be either a counter which counts until 5 and drop current task, or a check made on registered time in ms + 5000 > current time in ms.

 

Thing to use : System.currentTimeMillis(), ThreadPoolManager

  • 0
Posted

tasks for this? no for a server with a lot of ppl.

 

edit: you can update the saved time in the succeed case of if if you want to

It can be a general task, as it already exists for knownlist updates, decay task and so on.

  • 0
Posted

public void CumulKills ()
{
	this.setKillStreak(this.getKillStreak() +1);

	if (this.getKillStreak() == 1)
	{ 
		streaktime = System.currentTimeMillis();
	}

	if ((streaktime + 5000) > System.currentTimeMillis())
	{
		switch (this.getKillStreak())
		{
			case 2:
                                          break;

	                default:
		}
	}
	else
	{
		this.setKillStreak(1);
		streaktime = System.currentTimeMillis();
	}
}

 

Finally, this code works.

  • 0
Posted

couldn't you just schedule a task that will execute in 5 seconds when a player takes 1 pvp kill. and just check the other variable? ex:

 

private int k;

class check implements Runnable{
L2PcInstance p;
public check(L2PcInstance p){
if(p.k == 2){
p.k = 0;
//DONE
}
}
   public void run(){ 
   check(p);
}
}

 

and in the increasepvpkills method after setpvpkills + 1,

ThreadpoolManager.scheduleGeneral(new check(this),50000); /50000 = the time in 

milliseconds , its random

  • 0
Posted

What's different from my code?

 

 

Better to use task? I don't get the difference between tasks like your code and adenaman/mine

isn't it a faster way? but i don't know i just noticed it :P maybe its better but maybe and worse who knows .
  • 0
Posted

task should be used only when the problem can only be resolved with them, are much more expensive than sequential code. But it your decision, for example, Java is a lot more slower than c/c++ but its easier to use.

 

Tasks are great for synchronized events but this one is more asyncr (you get a kill when you get a kill) than syncr (the 5 sec time)

 

And i find the sequential easier

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
Answer this question...

×   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...