|
||
|
|
#1 (permalink) |
|
Join Date: Mar 2004
Posts: 42
|
Ok, I made this quest for a server but the server went down before they got it on the shard. So, the cordinates, etc. will be totally different than your shard. I have texts to tell you what to change. This is an interactive quest, and as far as I know I believe I made it unfarmable. This will take some time to change but I think your players would like it. Special thanks to Raelis who helped me a lot with this.
Update: I forgot to add in the changelog...you need to change the cordinates inside Goddess.cs to the same location you put SpringSwirl in game... |
|
|
|
|
|
#2 (permalink) |
|
Forum Novice
|
The Quest installs fine. But I did a run through of the quest and some things arent working properly.
The goddess doesnt appear when you throw the fire stone on the mist. I havent been able to get the Air stone guardian to appear at all. Nothing happens "When you feel the ground rumble beneath you" After that quest wont do anything cause you cant continue. |
|
|
|
|
|
#3 (permalink) |
|
Join Date: Mar 2004
Posts: 42
|
Well Arwen, for your first problem.
1st problem: The Goddess is spawned over the mist by using the FireStone.cs. It basically just calls her to Goddess.Spawn. If you look in Goddess.Spawn it has cordinates. You have to change those cordinates to where you put the mist and also the map which in the one you download is Malas. 2nd problem: The Air Guardian spawns using the AirPick.cs. If you look in that at line 68 you'll see the cordinates it moves the Guardian to and also the map, which in there is Ilshenar currently. |
|
|
|
|
|
#6 (permalink) |
|
Join Date: Mar 2004
Posts: 42
|
Yes it did work with Beta36...should put it on your beta36 test shard and you'll get like 12 errors. These are simple errors like instead of MoveToWorld you have to use whatever the beta36 one was...I made it work but I dont have that copy anymore. Nevermind I think I found it.
|
|
|
|
|
|
#7 (permalink) |
|
Forum Novice
|
Hmm..Not sure why this is happening, but everytime I do this quest and restart the shard it asks me to delete playermobile. I have to go back a save to get it to where it doesnt do that. I am thinking it has to do with something in the serialization not being right, But not sure what I did wrong. I am not sure what to post for you to look at.
|
|
|
|
|
|
#9 (permalink) |
|
Forum Novice
|
Code:
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 20:
{
m_SolenFriend = (SolenFriend)reader.ReadInt();
m_CurrentQuest = (BaseQuest) reader.ReadItem();
goto case 19;
}
case 19:
{
m_EvilQuest = reader.ReadEncodedInt();
goto case 18;
}
case 18:
{
m_VampType = (VampType)reader.ReadInt();
m_WereType = (WereType)reader.ReadInt();
m_RaceType = (RaceType)reader.ReadInt();
m_Vampirism = (bool)reader.ReadBool();
m_VampBurn = (bool)reader.ReadBool();
m_VampHunger = (bool)reader.ReadBool();
m_Werevirus = (bool)reader.ReadBool();
m_HearRace = (bool)reader.ReadBool();
m_LWere = (bool)reader.ReadBool();
m_LVamp = (bool)reader.ReadBool();
m_LElf = (bool)reader.ReadBool();
m_LDwarf = (bool)reader.ReadBool();
m_LDruid = (bool)reader.ReadBool();
m_LHuman = (bool)reader.ReadBool();
m_BFire = (bool)reader.ReadBool();
m_BIce = (bool)reader.ReadBool();
m_BToxic = (bool)reader.ReadBool();
m_BElect = (bool)reader.ReadBool();
m_BWater = (bool)reader.ReadBool();
m_BBMist = (bool)reader.ReadBool();
m_BExplos = (bool)reader.ReadBool();
m_BShiney = (bool)reader.ReadBool();
m_BFireFly = (bool)reader.ReadBool();
m_Blood = reader.ReadInt();
goto case 17;
}
case 17: // changed how DoneQuests is serialized
case 16:
{
m_Quest = QuestSerializer.DeserializeQuest( reader );
if ( m_Quest != null )
m_Quest.From = this;
int count = reader.ReadEncodedInt();
if ( count > 0 )
{
m_DoneQuests = new ArrayList();
for ( int i = 0; i < count; ++i )
{
Type questType = QuestSerializer.ReadType( QuestSystem.QuestTypes, reader );
DateTime restartTime;
if ( version < 17 )
restartTime = DateTime.MaxValue;
else
restartTime = reader.ReadDateTime();
m_DoneQuests.Add( new QuestRestartInfo( questType, restartTime ) );
}
}
m_Profession = reader.ReadEncodedInt();
goto case 15;
}
case 15:
{
m_LastCompassionLoss = reader.ReadDeltaTime();
goto case 14;
}
case 14:
{
m_CompassionGains = reader.ReadEncodedInt();
if ( m_CompassionGains > 0 )
m_NextCompassionDay = reader.ReadDeltaTime();
goto case 13;
}
case 13: // just removed m_PayedInsurance list
case 12:
{
m_BOBFilter = new Engines.BulkOrders.BOBFilter( reader );
goto case 11;
}
case 11:
{
if ( version < 13 )
{
ArrayList payed = reader.ReadItemList();
for ( int i = 0; i < payed.Count; ++i )
((Item)payed[i]).PayedInsurance = true;
}
goto case 10;
}
case 10:
{
if ( reader.ReadBool() )
{
m_HairModID = reader.ReadInt();
m_HairModHue = reader.ReadInt();
m_BeardModID = reader.ReadInt();
m_BeardModHue = reader.ReadInt();
// We cannot call SetHairMods( -1, -1 ) here because the items have not yet loaded
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RevertHair ) );
}
goto case 9;
}
case 9:
{
SavagePaintExpiration = reader.ReadTimeSpan();
if ( SavagePaintExpiration > TimeSpan.Zero )
{
BodyMod = ( Female ? 184 : 183 );
HueMod = 0;
}
goto case 8;
}
case 8:
{
m_NpcGuild = (NpcGuild)reader.ReadInt();
m_NpcGuildJoinTime = reader.ReadDateTime();
m_NpcGuildGameTime = reader.ReadTimeSpan();
goto case 7;
}
case 7:
{
m_PermaFlags = reader.ReadMobileList();
goto case 6;
}
case 6:
{
NextTailorBulkOrder = reader.ReadTimeSpan();
goto case 5;
}
case 5:
{
NextSmithBulkOrder = reader.ReadTimeSpan();
goto case 4;
}
case 4:
{
m_LastJusticeLoss = reader.ReadDeltaTime();
m_JusticeProtectors = reader.ReadMobileList();
goto case 3;
}
case 3:
{
m_LastSacrificeGain = reader.ReadDeltaTime();
m_LastSacrificeLoss = reader.ReadDeltaTime();
m_AvailableResurrects = reader.ReadInt();
goto case 2;
}
case 2:
{
m_Flags = (PlayerFlag)reader.ReadInt();
goto case 1;
}
case 1:
{
m_LongTermElapse = reader.ReadTimeSpan();
m_ShortTermElapse = reader.ReadTimeSpan();
m_GameTime = reader.ReadTimeSpan();
goto case 0;
}
case 0:
{
break;
}
}
if ( m_PermaFlags == null )
m_PermaFlags = new ArrayList();
if ( m_JusticeProtectors == null )
m_JusticeProtectors = new ArrayList();
if ( m_BOBFilter == null )
m_BOBFilter = new Engines.BulkOrders.BOBFilter();
ArrayList list = this.Stabled;
for ( int i = 0; i < list.Count; ++i )
{
BaseCreature bc = list[i] as BaseCreature;
if ( bc != null )
bc.IsStabled = true;
}
}
public override void Serialize( GenericWriter writer )
{
//cleanup our anti-macro table
foreach ( Hashtable t in m_AntiMacroTable.Values )
{
ArrayList remove = new ArrayList();
foreach ( CountAndTimeStamp time in t.Values )
{
if ( time.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now )
remove.Add( time );
}
for (int i=0;i<remove.Count;++i)
t.Remove( remove[i] );
}
//decay our kills
if ( m_ShortTermElapse < this.GameTime )
{
m_ShortTermElapse += TimeSpan.FromHours( 8 );
if ( ShortTermMurders > 0 )
--ShortTermMurders;
}
if ( m_LongTermElapse < this.GameTime )
{
m_LongTermElapse += TimeSpan.FromHours( 40 );
if ( Kills > 0 )
--Kills;
}
base.Serialize( writer );
writer.Write( (int) 20 ); // version
writer.Write( (int)m_VampType );
writer.Write( (int)m_WereType );
writer.Write( (int)m_RaceType );
writer.Write( (bool)m_Vampirism );
writer.Write( (bool)m_VampBurn );
writer.Write( (bool)m_VampHunger );
writer.Write( (bool)m_Werevirus );
writer.Write( (bool)m_HearRace);
writer.Write( (bool)m_LWere);
writer.Write( (bool)m_LVamp);
writer.Write( (bool)m_LElf);
writer.Write( (bool)m_LDwarf);
writer.Write( (bool)m_LDruid);
writer.Write( (bool)m_LHuman);
writer.Write( (bool)m_BFire);
writer.Write( (bool)m_BIce);
writer.Write( (bool)m_BToxic);
writer.Write( (bool)m_BElect);
writer.Write( (bool)m_BWater);
writer.Write( (bool)m_BBMist);
writer.Write( (bool)m_BExplos);
writer.Write( (bool)m_BShiney);
writer.Write( (bool)m_BFireFly);
writer.Write( (int)m_Blood );
writer.Write( (int)m_SolenFriend );
writer.Write( m_CurrentQuest );
QuestSerializer.Serialize( m_Quest, writer );
if ( m_DoneQuests == null )
{
writer.WriteEncodedInt( (int) 0 );
}
else
{
writer.WriteEncodedInt( (int) m_DoneQuests.Count );
for ( int i = 0; i < m_DoneQuests.Count; ++i )
{
QuestRestartInfo restartInfo = (QuestRestartInfo)m_DoneQuests[i];
QuestSerializer.Write( (Type) restartInfo.QuestType, QuestSystem.QuestTypes, writer );
writer.Write( (DateTime) restartInfo.RestartTime );
}
}
writer.WriteEncodedInt( (int) m_EvilQuest );
writer.WriteEncodedInt( (int) m_Profession );
writer.WriteDeltaTime( m_LastCompassionLoss );
writer.WriteEncodedInt( m_CompassionGains );
if ( m_CompassionGains > 0 )
writer.WriteDeltaTime( m_NextCompassionDay );
m_BOBFilter.Serialize( writer );
bool useMods = ( m_HairModID != -1 || m_BeardModID != -1 );
writer.Write( useMods );
if ( useMods )
{
writer.Write( (int) m_HairModID );
writer.Write( (int) m_HairModHue );
writer.Write( (int) m_BeardModID );
writer.Write( (int) m_BeardModHue );
}
writer.Write( SavagePaintExpiration );
writer.Write( (int) m_NpcGuild );
writer.Write( (DateTime) m_NpcGuildJoinTime );
writer.Write( (TimeSpan) m_NpcGuildGameTime );
writer.WriteMobileList( m_PermaFlags, true );
writer.Write( NextTailorBulkOrder );
writer.Write( NextSmithBulkOrder );
writer.WriteDeltaTime( m_LastJusticeLoss );
writer.WriteMobileList( m_JusticeProtectors, true );
writer.WriteDeltaTime( m_LastSacrificeGain );
writer.WriteDeltaTime( m_LastSacrificeLoss );
writer.Write( m_AvailableResurrects );
writer.Write( (int) m_Flags );
writer.Write( m_LongTermElapse );
writer.Write( m_ShortTermElapse );
writer.Write( this.GameTime );
}
public void ResetKillTime()
{
m_ShortTermElapse = this.GameTime + TimeSpan.FromHours( 8 );
m_LongTermElapse = this.GameTime + TimeSpan.FromHours( 40 );
}
[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan GameTime
{
get
{
if ( NetState != null )
return m_GameTime + (DateTime.Now - m_SessionStart);
else
return m_GameTime;
}
}
public override bool CanSee( Mobile m )
{
if ( m is PlayerMobile && ((PlayerMobile)m).m_VisList.Contains( this ) )
return true;
return base.CanSee( m );
}
public override bool CanSee( Item item )
{
if ( m_DesignContext != null && m_DesignContext.Foundation.IsHiddenToCustomizer( item ) )
return false;
return base.CanSee( item );
}
#region Quest stuff
private QuestSystem m_Quest;
private ArrayList m_DoneQuests;
public QuestSystem Quest
{
get{ return m_Quest; }
set{ m_Quest = value; }
}
public ArrayList DoneQuests
{
get{ return m_DoneQuests; }
set{ m_DoneQuests = value; }
}
#endregion
#region MyRunUO Invalidation
private bool m_ChangedMyRunUO;
public bool ChangedMyRunUO
{
get{ return m_ChangedMyRunUO; }
set{ m_ChangedMyRunUO = value; }
}
public void InvalidateMyRunUO()
{
if ( !Deleted && !m_ChangedMyRunUO )
{
m_ChangedMyRunUO = true;
Engines.MyRunUO.MyRunUO.QueueMobileUpdate( this );
}
}
public override void OnKillsChange( int oldValue )
{
InvalidateMyRunUO();
}
public override void OnGenderChanged( bool oldFemale )
{
InvalidateMyRunUO();
}
public override void OnGuildChange( Server.Guilds.BaseGuild oldGuild )
{
InvalidateMyRunUO();
}
public override void OnGuildTitleChange( string oldTitle )
{
InvalidateMyRunUO();
}
public override void OnKarmaChange( int oldValue )
{
InvalidateMyRunUO();
}
public override void OnFameChange( int oldValue )
{
InvalidateMyRunUO();
}
public override void OnSkillChange( SkillName skill, double oldBase )
{
InvalidateMyRunUO();
}
public override void OnAccessLevelChanged( AccessLevel oldLevel )
{
InvalidateMyRunUO();
}
public override void OnRawStatChange( StatType stat, int oldValue )
{
InvalidateMyRunUO();
}
public override void OnDelete()
{
InvalidateMyRunUO();
}
#endregion
#region Fastwalk Prevention
private static bool FastwalkPrevention = true; // Is fastwalk prevention enabled?
private static TimeSpan FastwalkThreshold = TimeSpan.FromSeconds( 0.4 ); // Fastwalk prevention will become active after 0.4 seconds
private DateTime m_NextMovementTime;
public virtual bool UsesFastwalkPrevention{ get{ return ( AccessLevel < AccessLevel.GameMaster ); } }
public virtual TimeSpan ComputeMovementSpeed( Direction dir )
{
if ( (dir & Direction.Mask) != (this.Direction & Direction.Mask) )
return TimeSpan.Zero;
bool running = ( (dir & Direction.Running) != 0 );
bool onHorse = ( this.Mount != null );
if ( onHorse )
return ( running ? TimeSpan.FromSeconds( 0.1 ) : TimeSpan.FromSeconds( 0.2 ) );
return ( running ? TimeSpan.FromSeconds( 0.2 ) : TimeSpan.FromSeconds( 0.4 ) );
}
public static bool MovementThrottle_Callback( NetState ns )
{
PlayerMobile pm = ns.Mobile as PlayerMobile;
if ( pm == null || !pm.UsesFastwalkPrevention )
return true;
if ( pm.m_NextMovementTime == DateTime.MinValue )
{
// has not yet moved
pm.m_NextMovementTime = DateTime.Now;
return true;
}
TimeSpan ts = pm.m_NextMovementTime - DateTime.Now;
if ( ts < TimeSpan.Zero )
{
// been a while since we've last moved
pm.m_NextMovementTime = DateTime.Now;
return true;
}
return ( ts < FastwalkThreshold );
}
#endregion
#region Enemy of One
private Type m_EnemyOfOneType;
private bool m_WaitingForEnemy;
public Type EnemyOfOneType
{
get{ return m_EnemyOfOneType; }
set
{
Type oldType = m_EnemyOfOneType;
Type newType = value;
if ( oldType == newType )
return;
m_EnemyOfOneType = value;
DeltaEnemies( oldType, newType );
}
}
public bool WaitingForEnemy
{
get{ return m_WaitingForEnemy; }
set{ m_WaitingForEnemy = value; }
}
private void DeltaEnemies( Type oldType, Type newType )
{
foreach ( Mobile m in this.GetMobilesInRange( 18 ) )
{
Type t = m.GetType();
if ( t == oldType || t == newType )
Send( new MobileMoving( m, Notoriety.Compute( this, m ) ) );
}
}
#endregion
#region Hair and beard mods
private int m_HairModID = -1, m_HairModHue;
private int m_BeardModID = -1, m_BeardModHue;
public void SetHairMods( int hairID, int beardID )
{
if ( hairID == -1 )
InternalRestoreHair( true, ref m_HairModID, ref m_HairModHue );
else if ( hairID != -2 )
InternalChangeHair( true, hairID, ref m_HairModID, ref m_HairModHue );
if ( beardID == -1 )
InternalRestoreHair( false, ref m_BeardModID, ref m_BeardModHue );
else if ( beardID != -2 )
InternalChangeHair( false, beardID, ref m_BeardModID, ref m_BeardModHue );
}
private Item CreateHair( bool hair, int id, int hue )
{
if ( hair )
return Server.Items.Hair.CreateByID( id, hue );
else
return Server.Items.Beard.CreateByID( id, hue );
}
private void InternalRestoreHair( bool hair, ref int id, ref int hue )
{
if ( id == -1 )
return;
Item item = FindItemOnLayer( hair ? Layer.Hair : Layer.FacialHair );
if ( item != null )
item.Delete();
if ( id != 0 )
AddItem( CreateHair( hair, id, hue ) );
id = -1;
hue = 0;
}
private void InternalChangeHair( bool hair, int id, ref int storeID, ref int storeHue )
{
Item item = FindItemOnLayer( hair ? Layer.Hair : Layer.FacialHair );
if ( item != null )
{
if ( storeID == -1 )
{
storeID = item.ItemID;
storeHue = item.Hue;
}
item.Delete();
}
else if ( storeID == -1 )
{
storeID = 0;
storeHue = 0;
}
if ( id == 0 )
return;
AddItem( CreateHair( hair, id, 0 ) );
}
#endregion
#region Virtue stuff
private DateTime m_LastSacrificeGain;
private DateTime m_LastSacrificeLoss;
private int m_AvailableResurrects;
public DateTime LastSacrificeGain{ get{ return m_LastSacrificeGain; } set{ m_LastSacrificeGain = value; } }
public DateTime LastSacrificeLoss{ get{ return m_LastSacrificeLoss; } set{ m_LastSacrificeLoss = value; } }
public int AvailableResurrects{ get{ return m_AvailableResurrects; } set{ m_AvailableResurrects = value; } }
private DateTime m_NextJustAward;
private DateTime m_LastJusticeLoss;
private ArrayList m_JusticeProtectors;
public DateTime LastJusticeLoss{ get{ return m_LastJusticeLoss; } set{ m_LastJusticeLoss = value; } }
public ArrayList JusticeProtectors{ get{ return m_JusticeProtectors; } set{ m_JusticeProtectors = value; } }
private DateTime m_LastCompassionLoss;
private DateTime m_NextCompassionDay;
private int m_CompassionGains;
public DateTime LastCompassionLoss{ get{ return m_LastCompassionLoss; } set{ m_LastCompassionLoss = value; } }
public DateTime NextCompassionDay{ get{ return m_NextCompassionDay; } set{ m_NextCompassionDay = value; } }
public int CompassionGains{ get{ return m_CompassionGains; } set{ m_CompassionGains = value; } }
#endregion
}
}
|
|
|
|
|
|
#11 (permalink) |
|
Forum Novice
|
k hun, here it is....extremely long! Code:
using System;
using System.Collections;
using Server;
using Server.Misc;
using Server.Items;
using Server.Gumps;
using Server.Multis;
using Server.Engines.Help;
using Server.ContextMenus;
using Server.Network;
using Server.Spells;
using Server.Spells.Fifth;
using Server.Spells.Seventh;
using Server.Targeting;
using Server.Engines.Quests;
using Server.Accounting;
using Server.Regions;
namespace Server.Mobiles
{
[Flags]
public enum PlayerFlag // First 16 bits are reserved for default-distro use, start custom flags at 0x00010000
{
None = 0x00000000,
Glassblowing = 0x00000001,
Masonry = 0x00000002,
SandMining = 0x00000004,
StoneMining = 0x00000008,
ToggleMiningStone = 0x00000010,
KarmaLocked = 0x00000020,
AutoRenewInsurance = 0x00000040,
UseOwnFilter = 0x00000080,
PublicMyRunUO = 0x00000100,
PagingSquelched = 0x00000200,
Sick = 0x00010000,
Sickness = 0x00020000,
SickContagious = 0x00040000,
QuestSequence = 0x00060000,
YoungPlayer = 0x00080000
}
public enum SolenFriend
{
None,
Black,
Red
}
public enum SickFlag
{
None,
TempImmunity,
PermImmunity,
Cold,
Flu,
Headache,
Virus,
VampTurn
}
public enum VampType
{
None,
Vampire,
Master,
Ancient
}
public enum WereType
{
None,
Werebear,
Wererat,
Werewolf
}
public enum RaceType
{
None,
Were,
Vamp,
Elven,
Dwarven,
Druiric,
Human
}
public enum NpcGuild
{
None,
MagesGuild,
WarriorsGuild,
ThievesGuild,
RangersGuild,
HealersGuild,
MinersGuild,
MerchantsGuild,
TinkersGuild,
TailorsGuild,
FishermensGuild,
BardsGuild,
BlacksmithsGuild
}
public class PlayerMobile : Mobile
{
private class CountAndTimeStamp
{
private int m_Count;
private DateTime m_Stamp;
public CountAndTimeStamp()
{
}
public DateTime TimeStamp { get{ return m_Stamp; } }
public int Count
{
get { return m_Count; }
set { m_Count = value; m_Stamp = DateTime.Now; }
}
}
#region Vampires
public VampType m_VampType = VampType.None;
public WereType m_WereType = WereType.None;
public RaceType m_RaceType = RaceType.None;
private bool m_Vampirism = false;
private bool m_VampBurn = false;
private bool m_VampHunger = false;
private bool m_Werevirus = false;
private bool m_HearRace = false;
private bool m_LWere = false;
private bool m_LVamp = false;
private bool m_LElf = false;
private bool m_LDwarf = false;
private bool m_LDruid = false;
private bool m_LHuman = false;
private bool m_BFire = false;
private bool m_BIce = false;
private bool m_BToxic = false;
private bool m_BElect = false;
private bool m_BWater = false;
private bool m_BBMist = false;
private bool m_BExplos = false;
private bool m_BShiney = false;
private bool m_BFireFly = false;
public int m_Blood = 100;
private PlayerFlag m_Flags;
public bool GetDFlag( PlayerFlag flag )
{
return ( (m_Flags & flag) != 0 );
}
public void SetDFlag( PlayerFlag flag, bool value )
{
if ( value )
m_Flags |= flag;
else
m_Flags &= ~flag;
}
//bard system
public bool EnergyCarolOn;
public bool IceCarolOn;
public bool FireCarolOn;
public bool PoisonCarolOn;
public bool EnergyThrenodyOn;
public bool IceThrenodyOn;
public bool FireThrenodyOn;
public bool PoisonThrenodyOn;
public bool KnightsMinneOn;
public bool ArmysPaeonOn;
public bool MagesBalladOn;
private bool m_HasArmysPaeon;
public bool HasArmysPaeon{ get{ return m_HasArmysPaeon; } set{ m_HasArmysPaeon = value; } }
private bool m_HasEnchantingEtude;
public bool HasEnchantingEtude{ get{ return m_HasEnchantingEtude; } set{ m_HasEnchantingEtude = value; } }
private bool m_HasFoeRequiem;
public bool HasFoeRequiem{ get{ return m_HasFoeRequiem; } set{ m_HasFoeRequiem = value; } }
private bool m_HasKnightsMinne;
public bool HasKnightsMinne{ get{ return m_HasKnightsMinne; } set{ m_HasKnightsMinne = value; } }
private bool m_HasMagesBallad;
public bool HasMagesBallad{ get{ return m_HasMagesBallad; } set{ m_HasMagesBallad = value; } }
private bool m_HasMagicFinale;
public bool HasMagicFinale{ get{ return m_HasMagicFinale; } set{ m_HasMagicFinale = value; } }
private bool m_HasSheepfoeMambo;
public bool HasSheepfoeMambo{ get{ return m_HasSheepfoeMambo; } set{ m_HasSheepfoeMambo = value; } }
private bool m_HasSinewyEtude;
public bool HasSinewyEtude{ get{ return m_HasSinewyEtude; } set{ m_HasSinewyEtude = value; } }
private bool m_HasFireThrenody;
public bool HasFireThrenody{ get{ return m_HasFireThrenody; } set{ m_HasFireThrenody = value; } }
private bool m_HasEnergyThrenody;
public bool HasEnergyThrenody{ get{ return m_HasEnergyThrenody; } set{ m_HasEnergyThrenody = value; } }
private bool m_HasIceThrenody;
public bool HasIceThrenody{ get{ return m_HasIceThrenody; } set{ m_HasIceThrenody = value; } }
private bool m_HasPoisonThrenody;
public bool HasPoisonThrenody{ get{ return m_HasPoisonThrenody; } set{ m_HasPoisonThrenody = value; } }
private bool m_HasFireCarol;
public bool HasFireCarol{ get{ return m_HasFireCarol; } set{ m_HasFireCarol = value; } }
private bool m_HasEnergyCarol;
public bool HasEnergyCarol{ get{ return m_HasEnergyCarol; } set{ m_HasEnergyCarol = value; } }
private bool m_HasIceCarol;
public bool HasIceCarol{ get{ return m_HasIceCarol; } set{ m_HasIceCarol = value; } }
private bool m_HasPoisonCarol;
public bool HasPoisonCarol{ get{ return m_HasPoisonCarol; } set{ m_HasPoisonCarol = value; } }
//end bard system
// Jaynigs Mod Young System //
[CommandProperty( AccessLevel.GameMaster )]
public bool YoungPlayer
{
get{ return GetFlag( PlayerFlag.YoungPlayer ); }
set{ SetFlag( PlayerFlag.YoungPlayer, value ); InvalidateProperties(); }
}
// End Young System //
[CommandProperty( AccessLevel.GameMaster )]
public VampType VampireType
{
get { return m_VampType; }
set { m_VampType = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public WereType WerebeastType
{
get { return m_WereType; }
set { m_WereType = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public RaceType BaseRace
{
get { return m_RaceType; }
set { m_RaceType = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int Blood
{
get { return m_Blood; }
set { m_Blood = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool Vampirism
{
get{ return m_Vampirism; }
set{ m_Vampirism = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool VampBurn
{
get{ return m_VampBurn; }
set{ m_VampBurn = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool VampHunger
{
get{ return m_VampHunger; }
set{ m_VampHunger = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool Werevirus
{
get{ return m_Werevirus; }
set{ m_Werevirus = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool HearRace
{
get{ return m_HearRace; }
set{ m_HearRace = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LWere
{
get{ return m_LWere; }
set{ m_LWere = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LVamp
{
get{ return m_LVamp; }
set{ m_LVamp = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LElf
{
get{ return m_LElf; }
set{ m_LElf = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LDwarf
{
get{ return m_LDwarf; }
set{ m_LDwarf = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LDruid
{
get{ return m_LDruid; }
set{ m_LDruid = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool LHuman
{
get{ return m_LHuman; }
set{ m_LHuman = value; }
}
public bool BElect
{
get{ return m_BElect; }
set{ m_BElect = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BWater
{
get{ return m_BWater; }
set{ m_BWater = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BFire
{
get{ return m_BFire; }
set{ m_BFire = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BIce
{
get{ return m_BIce; }
set{ m_BIce = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BToxic
{
get{ return m_BToxic; }
set{ m_BToxic = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BBMist
{
get{ return m_BBMist; }
set{ m_BBMist = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BExplos
{
get{ return m_BExplos; }
set{ m_BExplos = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BShiney
{
get{ return m_BShiney; }
set{ m_BShiney = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool BFireFly
{
get{ return m_BFireFly; }
set{ m_BFireFly = value; }
}
// --- Start Quest Property --- //
private BaseQuest m_CurrentQuest;
public DateTime m_QuestRestartTime;
private SolenFriend m_SolenFriend = SolenFriend.None;
// --- Stop Quest Property --- //
// --- Start Quest Property Method --- //
public BaseQuest CurrentQuest
{
get { return m_CurrentQuest; }
set { m_CurrentQuest = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool CanStartNewQuest
{
get
{
if ( DateTime.Now > m_QuestRestartTime && Quest == null )
return true;
else
return false;
}
}
[CommandProperty( AccessLevel.GameMaster )]
public SolenFriend SolenFriendship
{
get { return m_SolenFriend; }
set { m_SolenFriend = value; }
}
// --- Stop Quest Property Method --- //
public class VampBurnTimer : Timer
{
public const double SecondsPerUOMinute = 5.0;
public const double MinutesPerUODay = SecondsPerUOMinute * 24;
private static DateTime WorldStart = new DateTime( 1997, 9, 1 );
public static void Initialize()
{
new VampBurnTimer().Start();
}
public VampBurnTimer() : base( TimeSpan.FromMinutes( .10 ), TimeSpan.FromMinutes( .10 ) )
{
Priority = TimerPriority.OneSecond;
}
protected override void OnTick()
{
CheckBurn();
}
private bool GetBurning( int XPos )
{
TimeSpan timeSpan = DateTime.Now - WorldStart;
int totalMinutes = (int)( timeSpan.TotalSeconds / SecondsPerUOMinute );
totalMinutes += Map.Felucca.MapIndex * 320;
totalMinutes += XPos / 16;
int currentHour = ( totalMinutes / 60 ) % 24;
int currentMinute = totalMinutes % 60;
if ( currentHour <= 18 && currentHour >= 6)
return true;
return false;
}
private void CheckBurn( )
{
ArrayList mobs = new ArrayList( World.Mobiles.Values );
for( int i = 0; i<mobs.Count; i++)
{
Mobile m = mobs[i] as Mobile;
if (m is PlayerMobile && m.Alive && m.Map != Map.Internal)
{
PlayerMobile mplayer = m as PlayerMobile;
if (mplayer.Vampirism == true && mplayer.VampBurn == true )
{
BaseHouse house = BaseHouse.FindHouseAt( m );
if (house == null && Validate(m) == true)
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x3735, 1, 30, 9503, EffectLayer.Waist );
Effects.SendLocationEffect(m.Location, m.Map,0x371C, 20); //0x36BD,0x398C
m.PrivateOverheadMessage(0, 0, false, "You feel as if your skin is melting", m.NetState );
m.PlaySound( m.Female ? 814 : 1088 );
m.Say( "*ahhhh!*" );
m.Damage( Utility.Random( 40, 75 ) );
}
else
m.PrivateOverheadMessage(0, 0, false, " ", m.NetState );
return;
}
if (mplayer.BFire == false && m.Region.Name == "Fire" || mplayer.BFire == false && m.Region.Name == "Hythloth") //Heres a check for two different regions to have the same effect.
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x3735, 1, 30, 9503, EffectLayer.Waist );
Effects.SendLocationEffect(m.Location, m.Map,0x371C, 20); //0x36BD,0x398C
m.SendMessage("You feel as if your skin is burning!!!");
m.PlaySound( m.Female ? 814 : 1088 );
m.Say( "*ahhhh!*" );
m.Damage( Utility.Random( 5, 20 ) );
}
else
return;
}
if (mplayer.BIce == false && m.Region.Name == "Ice") //single region check
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x37CC, 1, 40, 97, 3, 9917, EffectLayer.Waist );
m.FixedParticles( 0x374A, 1, 15, 9502, 97, 3, (EffectLayer)255 );
m.SendMessage("You feel as if your skin is freezing!!!");
m.PlaySound( m.Female ? 811 : 1085 );
m.Say( "*oooh!*" );
m.Damage( Utility.Random( 5, 20 ) );
}
else
return;
}
if (mplayer.BToxic == false && m.Region.Name == "Deceit") //single region check
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x36CB, 1, 9, 9911, 67, 5, EffectLayer.Head );
m.FixedParticles( 0x374A, 1, 17, 9502, 1108, 4, (EffectLayer)255 );
m.SendMessage("You feel as if you've been poisoned!!!");
m.PlaySound( m.Female ? 785 : 1056 );
m.Say( "*cough!*" );
m.Damage( Utility.Random( 5, 20 ) );
}
else
return;
}
if (mplayer.BElect == false && m.Map.Name == "Ilshenar" && m.Region.Name != "Blood Dungeon" ) //This check would cover all of ilshenar except Blood Dungeon since futher down we see it has its own effect.
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.BoltEffect( 0 );
m.SendMessage("You feel a jolt of electricity run down your spine!!!");
m.PlaySound( m.Female ? 799 : 1071 );
m.Say( "*huh?*" );
m.Damage( Utility.Random( 5, 20 ) );
}
else
return;
}
if (mplayer.BWater == false && m.Region.Name == "Wind") //Just used wind but this effect would be great for a custom water dungeon
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
m.FixedParticles( 0x376A, 1, 30, 9502, 5, 3, EffectLayer.Waist );
m.SendMessage("You feel your lungs fill up with water, Can't Breathe!!!");
m.PlaySound( m.Female ? 793 : 1065 );
m.Say( "*gasp!*" );
m.Damage( Utility.Random( 5, 20 ) );
}
else
return;
}
if (mplayer.BBMist == false && m.Region.Name == "Doom") //single check
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x375A, 1, 17, 9919, 33, 7, EffectLayer.Waist );
m.FixedParticles( 0x3728, 1, 13, 9502, 33, 7, (EffectLayer)255 );
m.SendMessage("You feel a bloody mist fill your mouth, Your viens begin to burn!!!");
m.PlaySound( m.Female ? 813 : 1087 );
m.Say( "*pukes*" );
m.Damage( Utility.Random( 5, 20 ) );
if ( !m.Mounted )
{
m.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m.Location );
switch( m.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m.Map;
puke.Location = p;
}
else
return;
}
if (mplayer.BExplos == false && m.Region.Name == "Blood Dungeon") //single check
{
if ( GetBurning( m.X ) )
{
m.Stam -= 10;
m.FixedParticles( 0x36BD, 20, 10, 5044, EffectLayer.Head );
m.SendMessage("You feel yourself explode with intense heat!!!");
m.PlaySound( m.Female ? 814 : 1088 );
m.Say( "*aaah!*" );
m.Damage( Utility.Random( 10, 30 ) );
}
else
return;
}
if (mplayer.BShiney == false && m.Region.Name == "Magincia") //single check here but below we check for players hits and if lower then there raw str which should be the max hits, the'll be healed by the effect.
{
if ( mplayer.Hits <= mplayer.RawStr ) //check for damage.
{
if ( GetBurning( m.X ) && mplayer.Karma >= 10000 ) //check for pos karma
{
m.Stam += 5;
m.Hits += 5;
m.FixedParticles( 0x375A, 1, 30, 9966, 33, 2, EffectLayer.Head );
m.FixedParticles( 0x37B9, 1, 30, 9502, 43, 3, EffectLayer.Head );
m.SendMessage("You feel rejuvinated!!!");
m.PlaySound( m.Female ? 778 : 1049 );
m.Say( "*ah!*" );
}
else
return;
}
else
return;
}
if (mplayer.BFireFly == false && m.Region.Name == "Umbra") //single check here but below we check for players hits and if lower then there raw str which should be the max hits, the'll be healed by the effect.
{
if ( mplayer.Hits <= mplayer.RawStr ) //check for damage.
{
if ( GetBurning( m.X ) && mplayer.Karma <= -10000 ) //check for neg karma
{
m.Stam += 5;
m.Hits += 5;
m.FixedParticles(0x376A, 1, 31, 9961, 1160, 0, EffectLayer.Waist );
m.FixedParticles( 0x37C4, 1, 31, 9502, 43, 2, EffectLayer.Waist );
m.SendMessage("You feel rejuvinated!!!");
m.PlaySound( m.Female ? 778 : 1049 );
m.Say( "*ah!*" );
}
else
return;
}
else
return;
}
}
}
}
}
public bool Validate(Mobile from)
{
if(from.Map.Name != "Felucca")
{
return true;
}
else
{
return false;
}
}
}
#endregion
#region Sicknesses
private SickFlag flag;
public SickTimer m_SickTimer;
public ImmunTimer m_ImmunTimer;
[CommandProperty( AccessLevel.GameMaster )]
public bool Sick
{
get{ return GetDFlag( PlayerFlag.Sick ); }
set
{
if ( this.Sickness != SickFlag.TempImmunity && this.Sickness != SickFlag.PermImmunity && this.Sickness != SickFlag.None && this.Sickness != SickFlag.VampTurn && this.Sickness != SickFlag.Virus && !value )
this.SendMessage( "You feel better!" );
if ( this.Sickness != SickFlag.None )
SetDFlag( PlayerFlag.Sick, value );
else
{
SetDFlag( PlayerFlag.Sick, false );
this.SickContagious = false;
}
if ( !value )
{
this.Sickness = SickFlag.None;
}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public bool SickContagious
{
get{ return GetDFlag( PlayerFlag.SickContagious ); }
set
{
if ( !this.Sick || this.Sickness == SickFlag.TempImmunity || this.Sickness == SickFlag.PermImmunity || this.Sickness == SickFlag.VampTurn || this.Sickness == SickFlag.Virus)
SetDFlag( PlayerFlag.SickContagious, false );
else
SetDFlag( PlayerFlag.SickContagious, value );
}
}
[CommandProperty( AccessLevel.GameMaster )]
public SickFlag Sickness
{
get{ return flag; }
set
{
flag = value;
ChangeSickness( this, flag );
}
}
public class ImmunTimer : Timer
{
private Mobile m_defender;
private PlayerMobile m_pmdefender;
private int cnt = 0;
public ImmunTimer( Mobile defender ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 0.6 ), 480 )
{
m_defender = defender;
m_pmdefender = (PlayerMobile) defender;
}
protected override void OnTick()
{
cnt += 1;
if ( !m_pmdefender.Sick && m_pmdefender.Sickness == SickFlag.VampTurn )
Stop();
if ( !m_pmdefender.Sick && m_pmdefender.Sickness == SickFlag.Virus )
Stop();
if ( m_pmdefender.Sickness == SickFlag.TempImmunity && m_pmdefender.Sickness != SickFlag.VampTurn && cnt == 480)
m_pmdefender.Sick = false;
if ( m_pmdefender.Sickness == SickFlag.TempImmunity && m_pmdefender.Sickness != SickFlag.Virus && cnt == 480)
m_pmdefender.Sick = false;
}
}
public class SickTimer : Timer
{
private Mobile m_defender;
private int cnt = 0;
private int m_count = 0;
private int m_countmax;
private PlayerMobile m_pmdefender;
private SickFlag m_flag;
public SickTimer( Mobile defender, int count, SickFlag flag ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 10 ), count )
{
m_defender = defender;
m_countmax = count;
m_pmdefender = (PlayerMobile) defender;
m_flag = flag;
}
protected override void OnTick()
{
if ( !m_defender.Alive && m_pmdefender.Sickness != SickFlag.VampTurn)
{
m_pmdefender.Sick = false;
m_pmdefender.SickContagious = false;
Stop();
}
if ( !m_defender.Alive && m_pmdefender.Sickness != SickFlag.Virus)
{
m_pmdefender.Sick = false;
m_pmdefender.SickContagious = false;
Stop();
}
if ( ((!m_pmdefender.Sick) || (m_pmdefender.Sickness == SickFlag.None) || (m_pmdefender.Sickness == SickFlag.TempImmunity) || (m_pmdefender.Sickness == SickFlag.PermImmunity)) && (m_pmdefender.Sickness != SickFlag.VampTurn))
Stop();
if ( ((!m_pmdefender.Sick) || (m_pmdefender.Sickness == SickFlag.None) || (m_pmdefender.Sickness == SickFlag.TempImmunity) || (m_pmdefender.Sickness == SickFlag.PermImmunity)) && (m_pmdefender.Sickness != SickFlag.Virus))
Stop();
if ( m_flag == SickFlag.Cold )
{
cnt += 1;
m_count += 1;
m_defender.Damage( Utility.Random( 15, 20 ) );
//m_defender.Hits = m_defender.Hits - Utility.Random( 1, 3 );
if ( cnt > 2 )
{
m_defender.SendMessage( "You have a cold!" );
m_defender.Emote("cough*cough");
if ( !m_defender.Female )
m_defender.PlaySound( 0x420 );
else
m_defender.PlaySound( 0x311 );
cnt = 0;
}
}
if( m_flag == SickFlag.Flu )
{
cnt += 1;
m_count += 1;
m_defender.Damage( Utility.Random( 20, 25 ) );
if ( cnt > 2 )
{
m_defender.SendMessage( "You have influenza!" );
m_defender.Emote("*feels feverish*");
if ( !m_defender.Female )
m_defender.PlaySound( 0x42B );
else
m_defender.PlaySound( 0x31B );
cnt = 0;
}
}
if ( m_flag == SickFlag.Headache )
{
cnt += 1;
m_count += 1;
m_defender.Damage( Utility.Random( 10, 15 ) );
if ( cnt > 2 )
{
m_defender.SendMessage( "You have a bad headache!" );
m_defender.Emote("*head throbbing*");
if ( !m_defender.Female )
m_defender.PlaySound( 0x42B );
else
m_defender.PlaySound( 0x31B );
cnt = 0;
}
}
if ( m_flag == SickFlag.Virus )
{
cnt += 1;
m_count += 12;
if ( cnt == 2 )
{
m_defender.SendMessage( "You feel the poison rush threw your blood!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 1 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 4 )
{
m_defender.SendMessage( "You feel your body changing!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 2 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 6 )
{
m_defender.SendMessage( "You feel as if you are dying!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 3 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 8 )
{
m_defender.SendMessage( "You feel extremely dizzy and light headed!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 4 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 10 )
{
m_defender.SendMessage( "You can hardly control yourself!" );
m_defender.Emote("*stomach tightens*");
m_defender.Damage( Utility.Random( 1, 5 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 12 )
{
m_defender.SendMessage( "You begin to tear out of your old body!" );
m_defender.PlaySound( m_defender.Female ? 814 : 1088 );
m_defender.Say( "*ahhhh!*" );
m_defender.PublicOverheadMessage( MessageType.Spell, m_defender.SpeechHue, true, "*you peel out of your old skin*", false );
m_defender.Damage( Utility.Random( 150, 150 ) );
m_pmdefender.Werevirus = true;
m_pmdefender.BaseRace = RaceType.Were;
m_pmdefender.Title = "The Werebeast";
m_pmdefender.Hue = 542;
m_pmdefender.Sickness = SickFlag.PermImmunity;
m_pmdefender.Resurrect();
m_defender.Kills = 5;
m_defender.SendMessage( "You have been infected and changed to a Werewolf!" );
if ( m_pmdefender.WerebeastType == WereType.None )
{
if ( m_pmdefender.Karma >= 10000 )
{
m_pmdefender.WerebeastType = WereType.Werebear;
m_defender.AddToBackpack( new WereBearOrb() );
}
else if (( m_pmdefender.Karma >= -10000 ) && ( m_pmdefender.Karma <= 9999 ))
{
m_pmdefender.WerebeastType = WereType.Werewolf;
m_defender.AddToBackpack( new WereWolfOrb() );
}
else if ( m_pmdefender.Karma <= -10001 )
{
m_pmdefender.WerebeastType = WereType.Wererat;
m_defender.AddToBackpack( new WereRatOrb() );
}
}
Server.Skills skills = m_defender.Skills;
for ( int i = 0; i < skills.Length; ++i )
{
skills[i].Base = 0.0;
skills[i].Cap = 100.0;
skills[SkillName.Poisoning].Base = 80.0;
skills[SkillName.Anatomy].Base = 50.0;
skills[SkillName.Wrestling].Base = 50.0;
skills[SkillName.Tactics].Base = 50.0;
skills[SkillName.Focus].Base = 20.0;
}
}
}
if ( m_flag == SickFlag.VampTurn )
{
cnt += 1;
m_count += 12;
if ( cnt == 2 )
{
m_defender.SendMessage( "You feel the blood in your body changing!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 1 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 4 )
{
m_defender.SendMessage( "You feel your body drying up!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 2 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 6 )
{
m_defender.SendMessage( "You feel as if you are dying!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 3 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 8 )
{
m_defender.SendMessage( "You feel extremely dizzy and light headed!" );
m_defender.Emote("*stomach wretching*");
m_defender.Damage( Utility.Random( 1, 4 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 10 )
{
m_defender.SendMessage( "You can hardly control yourself!" );
m_defender.Emote("*stomach tightens*");
m_defender.Damage( Utility.Random( 1, 5 ) );
m_defender.PlaySound( m_defender.Female ? 813 : 1087 );
m_defender.Say( "*pukes*" );
if ( !m_defender.Mounted )
{
m_defender.Animate( 32, 5, 1, true, false, 0 );
}
Point3D p = new Point3D( m_defender.Location );
switch( m_defender.Direction )
{
case Direction.North:
p.Y--; break;
case Direction.South:
p.Y++; break;
case Direction.East:
p.X++; break;
case Direction.West:
p.X--; break;
case Direction.Right:
p.X++; p.Y--; break;
case Direction.Down:
p.X++; p.Y++; break;
case Direction.Left:
p.X--; p.Y++; break;
case Direction.Up:
p.X--; p.Y--; break;
default:
break;
}
p.Z = m_defender.Map.GetAverageZ( p.X, p.Y );
Puke puke = new Puke();
puke.Map = m_defender.Map;
puke.Location = p;
}
if ( cnt == 12 )
{
m_defender.SendMessage( "You begin to fall over and feel death upon you!" );
m_defender.PlaySound( m_defender.Female ? 814 : 1088 );
m_defender.Say( "*ahhhh!*" );
m_defender.PublicOverheadMessage( MessageType.Spell, m_defender.SpeechHue, true, "*you shuffle off your mortal coil*", false );
m_defender.Damage( Utility.Random( 150, 150 ) );
m_pmdefender.Vampirism = true;
m_pmdefender.BaseRace = RaceType.Vamp;
m_pmdefender.VampHunger = true;
m_pmdefender.VampBurn = true;
m_pmdefender.Title = "The Vampire";
m_pmdefender.Hue = 1154;
m_pmdefender.VampireType = VampType.Vampire;
m_pmdefender.Sickness = SickFlag.PermImmunity;
m_pmdefender.Resurrect();
m_defender.AddToBackpack( new VampireOrb() );
m_defender.AddToBackpack( new VampiricSpellbook( (UInt64)0xFFFF ) );
m_defender.Kills = 5;
m_defender.SendMessage( "You have been reborn as a Vampire, you'll need Blood to survive now!" );
Server.Skills skills = m_defender.Skills;
for ( int i = 0; i < skills.Length; ++i )
{
skills[i].Base = 0.0;
skills[i].Cap = 100.0;
skills[SkillName.Necromancy].Base = 50.0;
skills[SkillName.Focus].Base = 50.0;
skills[SkillName.SpiritSpeak].Base = 50.0;
skills[SkillName.Hiding].Base = 80.0;
skills[SkillName.Stealth].Base = 20.0;
}
}
}
if ( m_count == m_countmax )
{
m_pmdefender.Sickness = SickFlag.TempImmunity;
return;
}
int randominfect = Utility.Random( 1, 99 );
ArrayList li = new ArrayList();
foreach ( Mobile o in m_defender.Map.GetMobilesInRange( m_defender.Location, 5 ) )
{
li.Add(o);
}
for (int i = 0; i < li.Count; i++)
{
Mobile o = li[i] as Mobile;
if ( o is PlayerMobile && m_defender != o )
{
PlayerMobile mob = (PlayerMobile) o;
if (( mob.Sickness == SickFlag.TempImmunity || mob.Sickness == SickFlag.PermImmunity || !mob.SickContagious )|| (mob.Vampirism == true)|| (mob.Werevirus == true))
{
}
else if ( mob.Sickness == SickFlag.None )
{
if ( randominfect > 43 && randominfect < 50 )
mob.Sickness = m_flag;
}
}
}
}
}
public virtual void ChangeSickness( PlayerMobile m, SickFlag newsick )
{
int count = Utility.Random( 5, 20 );
Mobile pm = (Mobile) m;
switch ( newsick )
{
case SickFlag.None:
{
if ( m.Sick )
{
m.Sick = false;
m.SickContagious = false;
}
break;
}
case SickFlag.TempImmunity:
{
m.SendMessage( "You feel better!" );
m.Sick = true;
m.SickContagious= false;
m_ImmunTimer = new ImmunTimer ( pm );
m_ImmunTimer.Start();
break;
}
case SickFlag.PermImmunity:
{
m.SendMessage( "You feel permanently immune to sicknesses!" );
m.Sick = true;
m.SickContagious= false;
break;
}
case SickFlag.Cold:
{
m.SendMessage( "You have caught a cold!" );
m.Sick = true;
m.SickContagious= true;
m_SickTimer = new SickTimer ( pm, count, SickFlag.Cold );
m_SickTimer.Start();
break;
}
case SickFlag.Flu:
{
m.SendMessage( "You came down with influenza!" );
m.Sick = true;
m.SickContagious= true;
m_SickTimer = new SickTimer ( pm, count, SickFlag.Flu );
m_SickTimer.Start();
break;
}
case SickFlag.Headache:
{
m.SendMessage( "You feel a bad headache coming on!" );
m.Sick = true;
m.SickContagious= false;
m_SickTimer = new SickTimer ( pm, count, SickFlag.Headache );
m_SickTimer.Start();
break;
}
case SickFlag.Virus:
{
m.SendMessage( "You have been infected by a Werebeast!" );
m.Sick = true;
m.SickContagious= false;
m_SickTimer = new SickTimer ( pm, count, SickFlag.Virus );
m_SickTimer.Start();
break;
}
case SickFlag.VampTurn:
{
m.SendMessage( "You have been infected by a Vampire!" );
m.Sick = true;
m.SickContagious= false;
m_SickTimer = new SickTimer ( pm, count, SickFlag.VampTurn );
m_SickTimer.Start();
break;
}
}
}
#endregion
private DesignContext m_DesignContext;
private NpcGuild m_NpcGuild;
private DateTime m_NpcGuildJoinTime;
private TimeSpan m_NpcGuildGameTime;
private int m_StepsTaken;
private int m_Profession;
private int m_EvilQuest;
[CommandProperty(AccessLevel.GameMaster)]
public int QuestSequence
{
get{return m_EvilQuest;}
set{m_EvilQuest = value;}
}
[CommandProperty( AccessLevel.GameMaster )]
public int Profession
{
get{ return m_Profession; }
set{ m_Profession = value; }
}
public int StepsTaken
{
get{ return m_StepsTaken; }
set{ m_StepsTaken = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public NpcGuild NpcGuild
{
get{ return m_NpcGuild; }
set{ m_NpcGuild = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public DateTime NpcGuildJoinTime
{
get{ return m_NpcGuildJoinTime; }
set{ m_NpcGuildJoinTime = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan NpcGuildGameTime
{
get{ return m_NpcGuildGameTime; }
set{ m_NpcGuildGameTime = value; }
}
public PlayerFlag Flags
{
get{ return m_Flags; }
set{ m_Flags = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool PagingSquelched
{
get{ return GetFlag( PlayerFlag.PagingSquelched ); }
set{ SetFlag( PlayerFlag.PagingSquelched, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool Glassblowing
{
get{ return GetFlag( PlayerFlag.Glassblowing ); }
set{ SetFlag( PlayerFlag.Glassblowing, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool Masonry
{
get{ return GetFlag( PlayerFlag.Masonry ); }
set{ SetFlag( PlayerFlag.Masonry, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool SandMining
{
get{ return GetFlag( PlayerFlag.SandMining ); }
set{ SetFlag( PlayerFlag.SandMining, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool StoneMining
{
get{ return GetFlag( PlayerFlag.StoneMining ); }
set{ SetFlag( PlayerFlag.StoneMining, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool ToggleMiningStone
{
get{ return GetFlag( PlayerFlag.ToggleMiningStone ); }
set{ SetFlag( PlayerFlag.ToggleMiningStone, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool KarmaLocked
{
get{ return GetFlag( PlayerFlag.KarmaLocked ); }
set{ SetFlag( PlayerFlag.KarmaLocked, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool AutoRenewInsurance
{
get{ return GetFlag( PlayerFlag.AutoRenewInsurance ); }
set{ SetFlag( PlayerFlag.AutoRenewInsurance, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool UseOwnFilter
{
get{ return GetFlag( PlayerFlag.UseOwnFilter ); }
set{ SetFlag( PlayerFlag.UseOwnFilter, value ); }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool PublicMyRunUO
{
get{ return GetFlag( PlayerFlag.PublicMyRunUO ); }
set{ SetFlag( PlayerFlag.PublicMyRunUO, value ); InvalidateMyRunUO(); }
}
public static Direction GetDirection4( Point3D from, Point3D to )
{
int dx = from.X - to.X;
int dy = from.Y - to.Y;
int rx = dx - dy;
int ry = dx + dy;
Direction ret;
if ( rx >= 0 && ry >= 0 )
ret = Direction.West;
else if ( rx >= 0 && ry < 0 )
ret = Direction.South;
else if ( rx < 0 && ry < 0 )
ret = Direction.East;
else
ret = Direction.North;
return ret;
}
public override bool OnDroppedItemToWorld( Item item, Point3D location )
{
if ( !base.OnDroppedItemToWorld( item, location ) )
return false;
BounceInfo bi = item.GetBounce();
if ( bi != null )
{
Type type = item.GetType();
if ( type.IsDefined( typeof( FurnitureAttribute ), true ) || type.IsDefined( typeof( DynamicFlipingAttribute ), true ) )
{
object[] objs = type.GetCustomAttributes( typeof( FlipableAttribute ), true );
if ( objs != null && objs.Length > 0 )
{
FlipableAttribute fp = objs[0] as FlipableAttribute;
if ( fp != null )
{
int[] itemIDs = fp.ItemIDs;
Point3D oldWorldLoc = bi.m_WorldLoc;
Point3D newWorldLoc = location;
if ( oldWorldLoc.X != newWorldLoc.X || oldWorldLoc.Y != newWorldLoc.Y )
{
Direction dir = GetDirection4( oldWorldLoc, newWorldLoc );
if ( itemIDs.Length == 2 )
{
switch ( dir )
{
case Direction.North:
case Direction.South: item.ItemID = itemIDs[0]; break;
case Direction.East:
case Direction.West: item.ItemID = itemIDs[1]; break;
}
}
else if ( itemIDs.Length == 4 )
{
switch ( dir )
{
case Direction.South: item.ItemID = itemIDs[0]; break;
case Direction.East: item.ItemID = itemIDs[1]; break;
case Direction.North: item.ItemID = itemIDs[2]; break;
case Direction.West: item.ItemID = itemIDs[3]; break;
}
}
}
}
}
}
}
return true;
}
public bool GetFlag( PlayerFlag flag )
{
return ( (m_Flags & flag) != 0 );
}
public void SetFlag( PlayerFlag flag, bool value )
{
if ( value )
m_Flags |= flag;
else
m_Flags &= ~flag;
}
public DesignContext DesignContext
{
get{ return m_DesignContext; }
set{ m_DesignContext = value; }
}
public static void Initialize()
{
if ( FastwalkPrevention )
{
PacketHandler ph = PacketHandlers.GetHandler( 0x02 );
ph.ThrottleCallback = new ThrottlePacketCallback( MovementThrottle_Callback );
}
EventSink.Login += new LoginEventHandler( OnLogin );
EventSink.Logout += new LogoutEventHandler( OnLogout );
EventSink.Connected += new ConnectedEventHandler( EventSink_Connected );
EventSink.Disconnected += new DisconnectedEventHandler( EventSink_Disconnected );
}
public override void OnSkillInvalidated( Skill skill )
{
if ( Core.AOS && skill.SkillName == SkillName.MagicResist )
UpdateResistances();
}
public override int GetMaxResistance( ResistanceType type )
{
int max = base.GetMaxResistance( type );
if ( type != ResistanceType.Physical && 60 < max && Spells.Fourth.CurseSpell.UnderEffect( this ) )
max = 60;
return max;
}
private int m_LastGlobalLight = -1, m_LastPersonalLight = -1;
public override void OnNetStateChanged()
{
m_LastGlobalLight = -1;
m_LastPersonalLight = -1;
}
public override void ComputeBaseLightLevels( out int global, out int personal )
{
global = LightCycle.ComputeLevelFor( this );
personal = this.LightLevel;
}
public override void CheckLightLevels( bool forceResend )
{
NetState ns = this.NetState;
if ( ns == null )
return;
int global, personal;
ComputeLightLevels( out global, out personal );
if ( !forceResend )
forceResend = ( global != m_LastGlobalLight || personal != m_LastPersonalLight );
if ( !forceResend )
return;
m_LastGlobalLight = global;
m_LastPersonalLight = personal;
ns.Send( GlobalLightLevel.Instantiate( global ) );
ns.Send( new PersonalLightLevel( this, personal ) );
}
/////////////Jaynigs Mod Young System///////////////////
public override bool KeepsItemsOnDeath
{
get
{
if ( YoungPlayer || AccessLevel > AccessLevel.Player )
{
return true;
}
else
{
return false;
}
}
}
private DateTime m_YoungMessageExpiration;
public TimeSpan YoungMessageExpiration
{
get
{
TimeSpan ts = m_YoungMessageExpiration - DateTime.Now;
if ( ts < TimeSpan.Zero )
ts = Time |