Diego
Member
Hi you all,
there is a command to refresh the Character Status Panel after a double click on an item (i.e. a Four-Leaf)?
I've added a BaseLuck property to Mobile.cs and it works, but the Character Status LUCK changes only if I move the Four-Leaf inside the backpack after the double click.
When the internal timer ends (25 seconds), I've to move the Four-Leaf again to refresh the LUCK inside the Character Status.
Here is my Four-Leaf code:
there is a command to refresh the Character Status Panel after a double click on an item (i.e. a Four-Leaf)?
I've added a BaseLuck property to Mobile.cs and it works, but the Character Status LUCK changes only if I move the Four-Leaf inside the backpack after the double click.
When the internal timer ends (25 seconds), I've to move the Four-Leaf again to refresh the LUCK inside the Character Status.
Here is my Four-Leaf code:
Code:
using System;
using System.Collections.Generic;
using Server;
using Server.Misc;
using Server.Network;
using Server.Mobiles;
using Server.Targeting;
using Server.Commands;
namespace Server.Items
{
public class FourLeaf : BaseReagent
{
private bool m_Herb;
private int m_Luck;
public int DefaultLuck
{
get { return m_Luck; }
set { m_Luck = value;}
}
[Constructable]
public FourLeaf() : this( 1, 0 )
{
}
[Constructable]
public FourLeaf( int amount ) : this( amount, 0 )
{
}
[Constructable]
public FourLeaf( int amount, int type ) : base( 0x0D3E, amount )
{
Name = "Quadrifoglio";
Weight = 0.1;
Stackable = true;
m_Herb = false;
m_Luck = 0;
}
public override void OnDoubleClick( Mobile from )
{
if ( !from.Alive )
{
from.SendMessage( "Non puoi farlo adesso." );
return;
}
if ( !this.IsChildOf(from.Backpack) )
{
from.SendMessage( "Deve essere in borsa per poterlo usare." );
return;
}
if ( PerformingAction() )
{
from.SendMessage( "Non puoi ancora rifarlo." );
return;
}
if ( IsChildOf( from.Backpack ) || from.InRange( this, 2 ) && from.CanSee( this ) )
{
this.BeginAction();
from.Emote( "*strofina un quadrifoglio*" );
from.SendMessage( "Ti senti positivo." );
m_Luck = 75;
from.BaseLuck += 75;
/* REFRESH THE CHAR STATUS */
// HOW...
new InternalLeafTimer( this, from, TimeSpan.FromSeconds( 25.0 ) ).Start();
}
else
{
from.SendMessage( "E' troppo lontano." );
return;
}
}
public FourLeaf( Serial serial ) : base( serial )
{
m_Herb = false;
m_Luck = 0;
}
public void BeginAction()
{
m_Herb = true;
}
public void EndAction()
{
m_Herb = false;
}
public bool PerformingAction()
{
if ( m_Herb )
return true;
return false;
}
private class InternalLeafTimer : Timer
{
private FourLeaf m_4leaf;
private Mobile m_From;
public InternalLeafTimer ( FourLeaf fourleaf, Mobile from, TimeSpan duration ) : base( duration )
{
Priority = TimerPriority.OneSecond;
m_4leaf = fourleaf;
m_From = from;
}
protected override void OnTick()
{
if ( m_From == null || m_4leaf == null )
Stop();
else
{
m_4leaf.DefaultLuck = 0;
m_From.BaseLuck -= 75;
/* REFRESH THE CHAR STATUS */
// HOW...
m_4leaf.EndAction();
}
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}