#W# Initial Commit: Avatars Conquest

This commit is contained in:
WarrentyExpired 2026-07-04 10:35:30 -04:00
commit 5df497787a
7510 changed files with 416048 additions and 0 deletions

View file

@ -0,0 +1,160 @@
using System;
using Server.Targeting;
using Server.Network;
using Server.Mobiles;
using Server.Items;
namespace Server.SkillHandlers
{
public class Provocation
{
public static void Initialize()
{
SkillInfo.Table[(int)SkillName.Provocation].Callback = new SkillUseCallback( OnUse );
}
public static TimeSpan OnUse( Mobile m )
{
m.RevealingAction();
BaseInstrument.PickInstrument( m, new InstrumentPickedCallback( OnPickedInstrument ) );
return TimeSpan.FromSeconds( 1.0 ); // Cannot use another skill for 1 second
}
public static void OnPickedInstrument( Mobile from, BaseInstrument instrument )
{
from.RevealingAction();
from.SendLocalizedMessage( 501587 ); // Whom do you wish to incite?
from.Target = new InternalFirstTarget( from, instrument );
}
private class InternalFirstTarget : Target
{
private BaseInstrument m_Instrument;
public InternalFirstTarget( Mobile from, BaseInstrument instrument ) : base( BaseInstrument.GetBardRange( from, SkillName.Provocation ), false, TargetFlags.None )
{
m_Instrument = instrument;
}
protected override void OnTarget( Mobile from, object targeted )
{
from.RevealingAction();
if ( targeted is BaseCreature && from.CanBeHarmful( (Mobile)targeted, true ) )
{
BaseCreature creature = (BaseCreature)targeted;
if ( !m_Instrument.IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack!
}
else if ( creature.Controlled )
{
from.SendLocalizedMessage( 501590 ); // They are too loyal to their master to be provoked.
}
else
{
from.RevealingAction();
m_Instrument.PlayInstrumentWell( from );
from.SendLocalizedMessage( 1008085 ); // You play your music and your target becomes angered. Whom do you wish them to attack?
from.Target = new InternalSecondTarget( from, m_Instrument, creature );
}
}
else
{
from.SendLocalizedMessage( 501589 ); // You can't incite that!
}
}
}
private class InternalSecondTarget : Target
{
private BaseCreature m_Creature;
private BaseInstrument m_Instrument;
public InternalSecondTarget( Mobile from, BaseInstrument instrument, BaseCreature creature ) : base( BaseInstrument.GetBardRange( from, SkillName.Provocation ), false, TargetFlags.None )
{
m_Instrument = instrument;
m_Creature = creature;
}
protected override void OnTarget( Mobile from, object targeted )
{
from.RevealingAction();
if ( targeted is BaseCreature )
{
BaseCreature creature = (BaseCreature)targeted;
if ( !m_Instrument.IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack!
}
else if ( m_Creature.Unprovokable )
{
from.SendLocalizedMessage( 1049446 ); // You have no chance of provoking those creatures.
}
else if ( creature.Unprovokable )
{
from.SendLocalizedMessage( 1049446 ); // You have no chance of provoking those creatures.
}
else if ( m_Creature.Map != creature.Map || !m_Creature.InRange( creature, BaseInstrument.GetBardRange( from, SkillName.Provocation ) ) )
{
from.SendLocalizedMessage( 1049450 ); // The creatures you are trying to provoke are too far away from each other for your music to have an effect.
}
else if ( m_Creature != creature )
{
from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 10.0 );
double diff = ((m_Instrument.GetDifficultyFor( m_Creature ) + m_Instrument.GetDifficultyFor( creature )) * 0.5) - 5.0;
double music = from.Skills[SkillName.Musicianship].Value;
if ( music > 100.0 )
diff -= (music - 100.0) * 0.5;
if ( from.CanBeHarmful( m_Creature, true ) && from.CanBeHarmful( creature, true ) )
{
if ( !BaseInstrument.CheckMusicianship( from ) )
{
from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 );
from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect.
m_Instrument.PlayInstrumentBadly( from );
m_Instrument.ConsumeUse( from );
}
else
{
//from.DoHarmful( m_Creature );
//from.DoHarmful( creature );
if ( !from.CheckTargetSkill( SkillName.Provocation, creature, diff-25.0, diff+25.0 ) )
{
from.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds( 5.0 );
from.SendLocalizedMessage( 501599 ); // Your music fails to incite enough anger.
m_Instrument.PlayInstrumentBadly( from );
m_Instrument.ConsumeUse( from );
}
else
{
from.SendLocalizedMessage( 501602 ); // Your music succeeds, as you start a fight.
m_Instrument.PlayInstrumentWell( from );
m_Instrument.ConsumeUse( from );
m_Creature.Provoke( from, creature, true );
}
}
}
}
else
{
from.SendLocalizedMessage( 501593 ); // You can't tell someone to attack themselves!
}
}
else
{
from.SendLocalizedMessage( 501589 ); // You can't incite that!
}
}
}
}
}