Author Topic: Schedule Problem  (Read 566 times)

Can anyone see why this isn't working right? I can't.
Code: [Select]
function player::ghostAttack(%player)
{
if(%player.getDatablock().getName() !$= "playerGhost" && %player.getDatablock().getName() !$= "playerGhostNoMove")
{
return;
}

messageAll('', "\c3" @ %player.client.name SPC "\c5is firing his ghost attack!");

for(%i = 0; %i < clientGroup.getCount(); %i++)
{
%c = clientGroup.getObject(%i);

if(isObject(%c.player) && %c != %player.client)
{
%c.player.spawnExplosion(ghostAttackProjectile, 1);
}
}
}

function ghostAttackLoop(%player)
{
if(!isObject(%player) || !isObject(%player.client))
{
return;
}

cancel(%player.ghostAttackSchedule);

if(%player.getEnergyLevel() >= 1)
{
%player.setEnergyLevel(%player.getEnergyLevel() - 1);
}

%player.ghostAttackSchedule = schedule($Pref::GhostHunt::GhostAttackChargeTime, 0, ghostAttackLoop, %player);
}

package playerGhost
{
function armor::onTrigger(%this, %player, %trigger, %val)
{
//%val Key
//=================
//true = Pushed
//false = Released
//=================

//%trigger Key
//=============
//0 = Activate
//2 = Jump
//3 = Crouch
//4 = Jet
//=============

parent::onTrigger(%this, %player, %trigger, %val);

%client = %player.client;

if(%this.getID() != playerGhost.getID() && %this.getID() != playerGhostNoMove.getID())
{
return;
}

if(%trigger != 4)
{
return;
}

if(%val && %player.getEnergyLevel() == %player.getDatablock().maxEnergy)
{
%prevHP = %player.getDatablock().maxDamage - %player.getDamageLevel();
%prevEnergy = %player.getEnergyLevel();
%player.setDatablock("playerGhostNoMove");
%player.setHealth(%prevHP);
%player.setEnergyLevel(%prevEnergy);

ghostAttackLoop(%player);

}

else if(!%val)
{
cancel(%player.ghostAttackSchedule);
%prevHP = %player.getDatablock().maxDamage - %player.getDamageLevel();
%prevEnergy = %player.getEnergyLevel();
%player.setDatablock("playerGhost");
%player.setHealth(%prevHP);

if(%player.getEnergyLevel() < 1)
{
%player.ghostAttack();
%player.setEnergyLevel(%prevEnergy);
}

else
{
%player.setEnergyLevel(%player.getDatablock().maxEnergy);
}
}
}
};
activatePackage(playerGhost);
« Last Edit: January 27, 2013, 09:15:14 PM by jes00 »

Code: [Select]
%player.ghostAttackSchedule = schedule(1000, 0, ghostAttackLoop, %player);

You did not explain what is not working. Handing us a piece of code is good, but telling us your issue would help us in further investigation.

The problem is that your schedule is calling Player::ghostAttackLoop, while your function is just ghostAttackLoop.

Look at the code Zeblote posted above.

More or less:
Code: [Select]
%player.ghostAttackSchedule = schedule(1000, ghostAttackLoop, %player);

More or less:
Code: [Select]
%player.ghostAttackSchedule = schedule(1000, ghostAttackLoop, %player);
no
that doesn't work at all
Maybe you meant
Code: [Select]
%player.ghostAttackSchedule = %player.schedule(1000, ghostAttackLoop, %player);But then look at greek2me's post

I changed %player.ghostAttackSchedule = schedule(1000, %player, ghostAttackLoop, %player); to %player.ghostAttackSchedule = schedule(1000, 0, ghostAttackLoop, %player); but it's still having the same problem. Whenever I push right click it my energy instantly goes to zero. I want it to gradually go to zero.

      %player.setEnergyLevel(%player.getEnergyLevel() - 1);

      %player.setEnergyLevel(%player.getEnergyLevel() - 1);
Oh! I didn't see that mistake. Thanks Zeblote.

Now how would I get it so that after you launch the attack you can't just right click and release to fully charge your energy?