[B]Hello, i am trying to get the kills/deaths system to work on my server, can u please help me - ill post code of my playermobile below (IN RED IS WHAT I ADDED!)
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.Factions; using Server.Regions; using Server.Accounting;
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, Young = 0x00000400 }
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; } } }
private DesignContext m_DesignContext;
private NpcGuild m_NpcGuild; private DateTime m_NpcGuildJoinTime; private TimeSpan m_NpcGuildGameTime; private PlayerFlag m_Flags; private int m_StepsTaken; private int m_Profession;
[COLOR=red]private int m_Deaths = 0; private int m_Kills = 0;
[CommandProperty( AccessLevel.GameMaster )] public int Deaths { get{ return m_Deaths; } set{ m_Deaths = value; } } [CommandProperty( AccessLevel.GameMaster )] public int Kills { get{ return m_Kills; } set{ m_Kills = value; } }[/COLOR]
//Start Pvp Point System
private int m_TotalPoints; private int m_TotalWins; private int m_TotalLoses; private int m_TotalResKills; private int m_TotalResKilled; private Mobile m_LastPwner; private Mobile m_LastPwned; private DateTime m_ResKillTime; private int m_TotalPointsLost; private int m_TotalPointsSpent; private string m_PvpRank = "Newbie";
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;
ns.Send( GlobalLightLevel.Instantiate( global ) ); ns.Send( new PersonalLightLevel( this, personal ) ); }
public override int GetMinResistance( ResistanceType type ) { int magicResist = (int)(Skills[SkillName.MagicResist].Value * 10); int min = int.MinValue;
if ( magicResist >= 1000 ) min = 40 + ((magicResist - 1000) / 50); else if ( magicResist >= 400 ) min = (magicResist - 400) / 15;
if ( min > MaxPlayerResistance ) min = MaxPlayerResistance;
int baseMin = base.GetMinResistance( type );
if ( min < baseMin ) min = baseMin;
return min; }
private static void OnLogin( LoginEventArgs e ) { Mobile from = e.Mobile;
SacrificeVirtue.CheckAtrophy( from ); JusticeVirtue.CheckAtrophy( from ); CompassionVirtue.CheckAtrophy( from );
if ( AccountHandler.LockdownLevel > AccessLevel.Player ) { string notice;
Accounting.Account acct = from.Account as Accounting.Account;
if ( acct == null || !acct.HasAccess( from.NetState ) ) { if ( from.AccessLevel == AccessLevel.Player ) notice = "The server is currently under lockdown. No players are allowed to log in at this time."; else notice = "The server is currently under lockdown. You do not have sufficient access level to connect.";
Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( Disconnect ), from ); } else if ( from.AccessLevel == AccessLevel.Administrator ) { notice = "The server is currently under lockdown. As you are an administrator, you may change this from the [Admin gump."; } else { notice = "The server is currently under lockdown. You have sufficient access level to connect."; }
int str = this.Str; int dex = this.Dex; int intel = this.Int;
#region Factions int factionItemCount = 0; #endregion
Mobile from = this;
for ( int i = items.Count - 1; i >= 0; --i ) { if ( i >= items.Count ) continue;
Item item = (Item)items[i];
if ( item is BaseWeapon ) { BaseWeapon weapon = (BaseWeapon)item;
bool drop = false;
if ( dex < weapon.DexRequirement ) drop = true; else if ( str < AOS.Scale( weapon.StrRequirement, 100 - weapon.GetLowerStatReq() ) ) drop = true; else if ( intel < weapon.IntRequirement ) drop = true;
if ( drop ) { string name = weapon.Name;
if ( name == null ) name = String.Format( "#{0}", weapon.LabelNumber );
from.SendLocalizedMessage( 1062001, name ); // You can no longer wield your ~1_WEAPON~ from.AddToBackpack( weapon ); moved = true; } } else if ( item is BaseArmor ) { BaseArmor armor = (BaseArmor)item;
bool drop = false;
if ( !armor.AllowMaleWearer && from.Body.IsMale && from.AccessLevel < AccessLevel.GameMaster ) { drop = true; } else if ( !armor.AllowFemaleWearer && from.Body.IsFemale && from.AccessLevel < AccessLevel.GameMaster ) { drop = true; } else { int strBonus = armor.ComputeStatBonus( StatType.Str ), strReq = armor.ComputeStatReq( StatType.Str ); int dexBonus = armor.ComputeStatBonus( StatType.Dex ), dexReq = armor.ComputeStatReq( StatType.Dex ); int intBonus = armor.ComputeStatBonus( StatType.Int ), intReq = armor.ComputeStatReq( StatType.Int );
if ( dex < dexReq || (dex + dexBonus) < 1 ) drop = true; else if ( str < strReq || (str + strBonus) < 1 ) drop = true; else if ( intel < intReq || (intel + intBonus) < 1 ) drop = true; }
if ( drop ) { string name = armor.Name;
if ( name == null ) name = String.Format( "#{0}", armor.LabelNumber );
if ( armor is BaseShield ) from.SendLocalizedMessage( 1062003, name ); // You can no longer equip your ~1_SHIELD~ else from.SendLocalizedMessage( 1062002, name ); // You can no longer wear your ~1_ARMOR~
if ( ourFaction == null || ourFaction != factionItem.Faction ) drop = true; else if ( ++factionItemCount > FactionItem.GetMaxWearables( this ) ) drop = true;
if ( drop ) { from.AddToBackpack( item ); moved = true; } } }
if ( moved ) from.SendLocalizedMessage( 500647 ); // Some equipment has been moved to your backpack. } catch ( Exception e ) { Console.WriteLine( e ); } finally { m_NoDeltaRecursion = false; } }
public override void Delta( MobileDelta flag ) { base.Delta( flag );
if ( (flag & MobileDelta.Stat) != 0 ) ValidateEquipment();
for ( int i = 0; i < gumps.Count; ++i ) { if ( gumps[i] is ResurrectGump ) { if ( Alive ) { CloseGump( typeof( ResurrectGump ) ); } else { SendLocalizedMessage( 500111 ); // You are frozen and cannot move. return false; } } } }
TimeSpan speed = ComputeMovementSpeed( d );
if ( !base.Move( d ) ) return false;
m_NextMovementTime += speed;
return true; }
public override bool CheckMovement( Direction d, out int newZ ) { DesignContext context = m_DesignContext;
if ( context == null ) return base.CheckMovement( d, out newZ );
if ( isProtected != m_LastProtectedMessage ) { if ( isProtected ) SendLocalizedMessage( 500112 ); // You are now under the protection of the town guards. else SendLocalizedMessage( 500113 ); // You have left the protection of the town guards.
public override void SetLocation( Point3D loc, bool isTeleport ) { if ( !isTeleport && AccessLevel == AccessLevel.Player ) { // moving, not teleporting int zDrop = ( this.Location.Z - loc.Z );
if ( zDrop > 20 ) // we fell more than one story Hits -= ((zDrop / 20) * 10) - 5; // deal some damage; does not kill, disrupt, etc }
base.SetLocation( loc, isTeleport );
if ( isTeleport || --m_NextProtectionCheck == 0 ) RecheckTownProtection(); }
public override void GetContextMenuEntries( Mobile from, ArrayList list ) { base.GetContextMenuEntries( from, list );
if ( from == this ) { if ( m_Quest != null ) m_Quest.GetContextMenuEntries( list );
if ( Alive && InsuranceEnabled ) { list.Add( new CallbackEntry( 6201, new ContextCallback( ToggleItemInsurance ) ) );
if ( AutoRenewInsurance ) list.Add( new CallbackEntry( 6202, new ContextCallback( CancelRenewInventoryInsurance ) ) ); else list.Add( new CallbackEntry( 6200, new ContextCallback( AutoRenewInventoryInsurance ) ) ); }
// TODO: Toggle champ titles
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null ) { if ( Alive && house.InternalizedVendors.Count > 0 && house.IsOwner( this ) ) list.Add( new CallbackEntry( 6204, new ContextCallback( GetVendor ) ) );
if ( house.IsAosRules ) list.Add( new CallbackEntry( 6207, new ContextCallback( LeaveHouse ) ) ); }
if ( m_JusticeProtectors.Count > 0 ) list.Add( new CallbackEntry( 6157, new ContextCallback( CancelProtection ) ) ); } }
private void CancelProtection() { for ( int i = 0; i < m_JusticeProtectors.Count; ++i ) { Mobile prot = (Mobile)m_JusticeProtectors[i];
prot.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended. this.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended. }
m_JusticeProtectors.Clear(); }
private void ToggleItemInsurance() { if ( !CheckAlive() ) return;
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868 ); // Target the item you wish to toggle insurance status on <ESC> to cancel }
private bool CanInsure( Item item ) { if ( item is Container || item is BagOfSending ) return false;
if ( item is Spellbook || item is Runebook || item is PotionKeg || item is Sigil ) return false;
if ( item.Stackable ) return false;
if ( item.LootType == LootType.Cursed ) return false;
if ( item.ItemID == 0x204E ) // death shroud return false;
return true; }
private void ToggleItemInsurance_Callback( Mobile from, object obj ) { if ( !CheckAlive() ) return;
Item item = obj as Item;
if ( item == null || !item.IsChildOf( this ) ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060871, "", 0x23 ); // You can only insure items that you have equipped or that are in your backpack } else if ( item.Insured ) { item.Insured = false;
SendLocalizedMessage( 1060874, "", 0x35 ); // You cancel the insurance on the item
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel } else if ( !CanInsure( item ) ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that } else if ( item.LootType == LootType.Blessed || item.LootType == LootType.Newbied || item.BlessedFor == from ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060870, "", 0x23 ); // That item is blessed and does not need to be insured SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that } else { if ( !item.PayedInsurance ) { if ( Banker.Withdraw( from, 600 ) ) { SendLocalizedMessage( 1060398, "600" ); // ~1_AMOUNT~ gold has been withdrawn from your bank box. item.PayedInsurance = true; } else { SendLocalizedMessage( 1061079, "", 0x23 ); // You lack the funds to purchase the insurance return; } }
item.Insured = true;
SendLocalizedMessage( 1060873, "", 0x23 ); // You have insured the item
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel } }
private void AutoRenewInventoryInsurance() { if ( !CheckAlive() ) return;
SendLocalizedMessage( 1060881, "", 0x23 ); // You have selected to automatically reinsure all insured items upon death AutoRenewInsurance = true; }
private void CancelRenewInventoryInsurance() { if ( !CheckAlive() ) return;
SendLocalizedMessage( 1061075, "", 0x23 ); // You have cancelled automatically reinsuring all insured items upon death AutoRenewInsurance = false; }
// TODO: Champ titles, toggle
private void GetVendor() { BaseHouse house = BaseHouse.FindHouseAt( this );
if ( CheckAlive() && house != null && house.IsOwner( this ) && house.InternalizedVendors.Count > 0 ) { CloseGump( typeof( ReclaimVendorGump ) ); SendGump( new ReclaimVendorGump( house ) ); } }
private void LeaveHouse() { BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null ) this.Location = house.BanLocation; }
private delegate void ContextCallback();
private class CallbackEntry : ContextMenuEntry { private ContextCallback m_Callback;
public CallbackEntry( int number, ContextCallback callback ) : this( number, -1, callback ) { }
public CallbackEntry( int number, int range, ContextCallback callback ) : base( number, range ) { m_Callback = callback; }
public override void OnClick() { if ( m_Callback != null ) m_Callback(); } }
public override void OnDoubleClick( Mobile from ) { if ( this == from && !Warmode ) { IMount mount = Mount;
if ( mount != null && !DesignContext.Check( this ) ) return; }
base.OnDoubleClick( from ); }
public override void DisplayPaperdollTo( Mobile to ) { if ( DesignContext.Check( this ) ) base.DisplayPaperdollTo( to ); }
private static bool m_NoRecursion;
public override bool CheckEquip( Item item ) { if ( !base.CheckEquip( item ) ) return false;
if ( bounce != null ) { if ( bounce.m_Parent is Item ) { Item parent = (Item) bounce.m_Parent;
if ( parent == this.Backpack || parent.IsChildOf( this.Backpack ) ) return true; } else if ( bounce.m_Parent == this ) { return true; } }
SendLocalizedMessage( 1004042 ); // You can only equip what you are already carrying while you have a trade pending. return false; }
return true; }
public override bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight ) { int msgNum = 0;
if ( cont == null ) { if ( to.Holding != null ) msgNum = 1062727; // You cannot trade with someone who is dragging something. else if ( this.HasTrade ) msgNum = 1062781; // You are already trading with someone else! else if ( to.HasTrade ) msgNum = 1062779; // That person is already involved in a trade }
if ( this.Backpack == null || !this.Backpack.CheckHold( this, item, false, checkItems, plusItems, plusWeight ) ) msgNum = 1004040; // You would not be able to hold this if the trade failed. else if ( to.Backpack == null || !to.Backpack.CheckHold( to, item, false, checkItems, plusItems, plusWeight ) ) msgNum = 1004039; // The recipient of this trade would not be able to carry this. else msgNum = CheckContentForTrade( item ); }
if ( msgNum != 0 ) { if ( message ) this.SendLocalizedMessage( msgNum );
return false; }
return true; }
private static int CheckContentForTrade( Item item ) { if ( item is TrapableContainer && ((TrapableContainer)item).TrapType != TrapType.None ) return 1004044; // You may not trade trapped items.
if ( SkillHandlers.StolenItem.IsStolen( item ) ) return 1004043; // You may not trade recently stolen items.
if ( item is Container ) { foreach ( Item subItem in item.Items ) { int msg = CheckContentForTrade( subItem );
if ( msg != 0 ) return msg; } }
return 0; }
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) { if ( !base.CheckNonlocalDrop( from, item, target ) ) return false;
if ( from.AccessLevel >= AccessLevel.GameMaster ) return true;
Container pack = this.Backpack; if ( from == this && this.HasTrade && ( target == pack || target.IsChildOf( pack ) ) ) { BounceInfo bounce = item.GetBounce();
if ( bounce != null && bounce.m_Parent is Item ) { Item parent = (Item) bounce.m_Parent;
if ( SkillHandlers.Stealing.ClassicMode ) Criminal = true; }
if ( this.Kills >= 5 && DateTime.Now >= m_NextJustAward ) { Mobile m = FindMostRecentDamager( false );
if( m is BaseCreature ) m = ((BaseCreature)m).GetMaster();
if ( m != null && m.Player && m != this ) { bool gainedPath = false;
int theirTotal = ComputeSkillTotal( m ); int ourTotal = ComputeSkillTotal( this );
int pointsToGain = 1 + ((theirTotal - ourTotal) / 50);
if ( pointsToGain < 1 ) pointsToGain = 1; else if ( pointsToGain > 4 ) pointsToGain = 4;
if ( VirtueHelper.Award( m, VirtueName.Justice, pointsToGain, ref gainedPath ) ) { if ( gainedPath ) m.SendLocalizedMessage( 1049367 ); // You have gained a path in Justice! else m.SendLocalizedMessage( 1049363 ); // You have gained in Justice.
if ( m_InsuranceCost > 0 ) SendLocalizedMessage( 1060398, m_InsuranceCost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
if ( m_InsuranceAward is PlayerMobile ) { PlayerMobile pm = (PlayerMobile)m_InsuranceAward;
if ( pm.m_InsuranceBonus > 0 ) pm.SendLocalizedMessage( 1060397, pm.m_InsuranceBonus.ToString() )
ArteGordon- 04-26-2006
killer.Deaths+1;
killer.Kills+1;
these lines just take the value of Deaths and Kills and add one to them, but they dont assign that new incremented value back to Deaths and Kills. In other words, they dont actually change the value of anything. You want to use something like
killer.Deaths += 1;
killer.Kills += 1;
which does the same thing as
killer.Deaths = killer.Deaths + 1;
killer.Kills = killer.Kills + 1;
(edit)
you also appear to have a number of problems this code
You cant cast Kills to the type PlayerMobile. Kills is just an integer.
if( kill is PlayerMobile )
You cant refer to the 'kill' variable since it is not defined anywhere.
You also have too many closing brackets '}', and you have a semicolon at the end of your if statement which shouldnt be there
if( kill is PlayerMobile );
and this line
killer.Deaths+1;
is outside of your {} code block that follows the if statement.
That code just isnt going to work there. It appears that you have a significantly modified PlayerMobile.cs OnDeath method so the installation instructions for whatever system you are trying to install are probably not going to match your PlayerMobile.cs
You might try the following code instead
CODE
Mobile killer = this.FindMostRecentDamager( true );
if ( killer is PlayerMobile) { Deaths++; ((PlayerMobile )killer).Kills++; }
Mobile killer = this.FindMostRecentDamager( true );
if ( killer is PlayerMobile) { Deaths++; ((PlayerMobile )killer).Kills++; }
here is my updated playermobile
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.Factions; using Server.Regions; using Server.Accounting;
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, Young = 0x00000400 }
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; } } }
private DesignContext m_DesignContext;
private NpcGuild m_NpcGuild; private DateTime m_NpcGuildJoinTime; private TimeSpan m_NpcGuildGameTime; private PlayerFlag m_Flags; private int m_StepsTaken; private int m_Profession;
private int m_Deaths = 0; private int m_Kills = 0;
[CommandProperty( AccessLevel.GameMaster )] public int Deaths { get{ return m_Deaths; } set{ m_Deaths = value; } }
[CommandProperty( AccessLevel.GameMaster )] public int Kills { get{ return m_Kills; } set{ m_Kills = value; } }
//Start Pvp Point System
private int m_TotalPoints; private int m_TotalWins; private int m_TotalLoses; private int m_TotalResKills; private int m_TotalResKilled; private Mobile m_LastPwner; private Mobile m_LastPwned; private DateTime m_ResKillTime; private int m_TotalPointsLost; private int m_TotalPointsSpent; private string m_PvpRank = "Newbie";
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;
ns.Send( GlobalLightLevel.Instantiate( global ) ); ns.Send( new PersonalLightLevel( this, personal ) ); }
public override int GetMinResistance( ResistanceType type ) { int magicResist = (int)(Skills[SkillName.MagicResist].Value * 10); int min = int.MinValue;
if ( magicResist >= 1000 ) min = 40 + ((magicResist - 1000) / 50); else if ( magicResist >= 400 ) min = (magicResist - 400) / 15;
if ( min > MaxPlayerResistance ) min = MaxPlayerResistance;
int baseMin = base.GetMinResistance( type );
if ( min < baseMin ) min = baseMin;
return min; }
private static void OnLogin( LoginEventArgs e ) { Mobile from = e.Mobile;
SacrificeVirtue.CheckAtrophy( from ); JusticeVirtue.CheckAtrophy( from ); CompassionVirtue.CheckAtrophy( from );
if ( AccountHandler.LockdownLevel > AccessLevel.Player ) { string notice;
Accounting.Account acct = from.Account as Accounting.Account;
if ( acct == null || !acct.HasAccess( from.NetState ) ) { if ( from.AccessLevel == AccessLevel.Player ) notice = "The server is currently under lockdown. No players are allowed to log in at this time."; else notice = "The server is currently under lockdown. You do not have sufficient access level to connect.";
Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( Disconnect ), from ); } else if ( from.AccessLevel == AccessLevel.Administrator ) { notice = "The server is currently under lockdown. As you are an administrator, you may change this from the [Admin gump."; } else { notice = "The server is currently under lockdown. You have sufficient access level to connect."; }
int str = this.Str; int dex = this.Dex; int intel = this.Int;
#region Factions int factionItemCount = 0; #endregion
Mobile from = this;
for ( int i = items.Count - 1; i >= 0; --i ) { if ( i >= items.Count ) continue;
Item item = (Item)items[i];
if ( item is BaseWeapon ) { BaseWeapon weapon = (BaseWeapon)item;
bool drop = false;
if ( dex < weapon.DexRequirement ) drop = true; else if ( str < AOS.Scale( weapon.StrRequirement, 100 - weapon.GetLowerStatReq() ) ) drop = true; else if ( intel < weapon.IntRequirement ) drop = true;
if ( drop ) { string name = weapon.Name;
if ( name == null ) name = String.Format( "#{0}", weapon.LabelNumber );
from.SendLocalizedMessage( 1062001, name ); // You can no longer wield your ~1_WEAPON~ from.AddToBackpack( weapon ); moved = true; } } else if ( item is BaseArmor ) { BaseArmor armor = (BaseArmor)item;
bool drop = false;
if ( !armor.AllowMaleWearer && from.Body.IsMale && from.AccessLevel < AccessLevel.GameMaster ) { drop = true; } else if ( !armor.AllowFemaleWearer && from.Body.IsFemale && from.AccessLevel < AccessLevel.GameMaster ) { drop = true; } else { int strBonus = armor.ComputeStatBonus( StatType.Str ), strReq = armor.ComputeStatReq( StatType.Str ); int dexBonus = armor.ComputeStatBonus( StatType.Dex ), dexReq = armor.ComputeStatReq( StatType.Dex ); int intBonus = armor.ComputeStatBonus( StatType.Int ), intReq = armor.ComputeStatReq( StatType.Int );
if ( dex < dexReq || (dex + dexBonus) < 1 ) drop = true; else if ( str < strReq || (str + strBonus) < 1 ) drop = true; else if ( intel < intReq || (intel + intBonus) < 1 ) drop = true; }
if ( drop ) { string name = armor.Name;
if ( name == null ) name = String.Format( "#{0}", armor.LabelNumber );
if ( armor is BaseShield ) from.SendLocalizedMessage( 1062003, name ); // You can no longer equip your ~1_SHIELD~ else from.SendLocalizedMessage( 1062002, name ); // You can no longer wear your ~1_ARMOR~
if ( ourFaction == null || ourFaction != factionItem.Faction ) drop = true; else if ( ++factionItemCount > FactionItem.GetMaxWearables( this ) ) drop = true;
if ( drop ) { from.AddToBackpack( item ); moved = true; } } }
if ( moved ) from.SendLocalizedMessage( 500647 ); // Some equipment has been moved to your backpack. } catch ( Exception e ) { Console.WriteLine( e ); } finally { m_NoDeltaRecursion = false; } }
public override void Delta( MobileDelta flag ) { base.Delta( flag );
if ( (flag & MobileDelta.Stat) != 0 ) ValidateEquipment();
for ( int i = 0; i < gumps.Count; ++i ) { if ( gumps[i] is ResurrectGump ) { if ( Alive ) { CloseGump( typeof( ResurrectGump ) ); } else { SendLocalizedMessage( 500111 ); // You are frozen and cannot move. return false; } } } }
TimeSpan speed = ComputeMovementSpeed( d );
if ( !base.Move( d ) ) return false;
m_NextMovementTime += speed;
return true; }
public override bool CheckMovement( Direction d, out int newZ ) { DesignContext context = m_DesignContext;
if ( context == null ) return base.CheckMovement( d, out newZ );
if ( isProtected != m_LastProtectedMessage ) { if ( isProtected ) SendLocalizedMessage( 500112 ); // You are now under the protection of the town guards. else SendLocalizedMessage( 500113 ); // You have left the protection of the town guards.
public override void SetLocation( Point3D loc, bool isTeleport ) { if ( !isTeleport && AccessLevel == AccessLevel.Player ) { // moving, not teleporting int zDrop = ( this.Location.Z - loc.Z );
if ( zDrop > 20 ) // we fell more than one story Hits -= ((zDrop / 20) * 10) - 5; // deal some damage; does not kill, disrupt, etc }
base.SetLocation( loc, isTeleport );
if ( isTeleport || --m_NextProtectionCheck == 0 ) RecheckTownProtection(); }
public override void GetContextMenuEntries( Mobile from, ArrayList list ) { base.GetContextMenuEntries( from, list );
if ( from == this ) { if ( m_Quest != null ) m_Quest.GetContextMenuEntries( list );
if ( Alive && InsuranceEnabled ) { list.Add( new CallbackEntry( 6201, new ContextCallback( ToggleItemInsurance ) ) );
if ( AutoRenewInsurance ) list.Add( new CallbackEntry( 6202, new ContextCallback( CancelRenewInventoryInsurance ) ) ); else list.Add( new CallbackEntry( 6200, new ContextCallback( AutoRenewInventoryInsurance ) ) ); }
// TODO: Toggle champ titles
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null ) { if ( Alive && house.InternalizedVendors.Count > 0 && house.IsOwner( this ) ) list.Add( new CallbackEntry( 6204, new ContextCallback( GetVendor ) ) );
if ( house.IsAosRules ) list.Add( new CallbackEntry( 6207, new ContextCallback( LeaveHouse ) ) ); }
if ( m_JusticeProtectors.Count > 0 ) list.Add( new CallbackEntry( 6157, new ContextCallback( CancelProtection ) ) ); } }
private void CancelProtection() { for ( int i = 0; i < m_JusticeProtectors.Count; ++i ) { Mobile prot = (Mobile)m_JusticeProtectors[i];
prot.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended. this.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended. }
m_JusticeProtectors.Clear(); }
private void ToggleItemInsurance() { if ( !CheckAlive() ) return;
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868 ); // Target the item you wish to toggle insurance status on <ESC> to cancel }
private bool CanInsure( Item item ) { if ( item is Container || item is BagOfSending ) return false;
if ( item is Spellbook || item is Runebook || item is PotionKeg || item is Sigil ) return false;
if ( item.Stackable ) return false;
if ( item.LootType == LootType.Cursed ) return false;
if ( item.ItemID == 0x204E ) // death shroud return false;
return true; }
private void ToggleItemInsurance_Callback( Mobile from, object obj ) { if ( !CheckAlive() ) return;
Item item = obj as Item;
if ( item == null || !item.IsChildOf( this ) ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060871, "", 0x23 ); // You can only insure items that you have equipped or that are in your backpack } else if ( item.Insured ) { item.Insured = false;
SendLocalizedMessage( 1060874, "", 0x35 ); // You cancel the insurance on the item
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel } else if ( !CanInsure( item ) ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that } else if ( item.LootType == LootType.Blessed || item.LootType == LootType.Newbied || item.BlessedFor == from ) { BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060870, "", 0x23 ); // That item is blessed and does not need to be insured SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that } else { if ( !item.PayedInsurance ) { if ( Banker.Withdraw( from, 600 ) ) { SendLocalizedMessage( 1060398, "600" ); // ~1_AMOUNT~ gold has been withdrawn from your bank box. item.PayedInsurance = true; } else { SendLocalizedMessage( 1061079, "", 0x23 ); // You lack the funds to purchase the insurance return; } }
item.Insured = true;
SendLocalizedMessage( 1060873, "", 0x23 ); // You have insured the item
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) ); SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel } }
private void AutoRenewInventoryInsurance() { if ( !CheckAlive() ) return;
SendLocalizedMessage( 1060881, "", 0x23 ); // You have selected to automatically reinsure all insured items upon death AutoRenewInsurance = true; }
private void CancelRenewInventoryInsurance() { if ( !CheckAlive() ) return;
SendLocalizedMessage( 1061075, "", 0x23 ); // You have cancelled automatically reinsuring all insured items upon death AutoRenewInsurance = false; }
// TODO: Champ titles, toggle
private void GetVendor() { BaseHouse house = BaseHouse.FindHouseAt( this );
if ( CheckAlive() && house != null && house.IsOwner( this ) && house.InternalizedVendors.Count > 0 ) { CloseGump( typeof( ReclaimVendorGump ) ); SendGump( new ReclaimVendorGump( house ) ); } }
private void LeaveHouse() { BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null ) this.Location = house.BanLocation; }
private delegate void ContextCallback();
private class CallbackEntry : ContextMenuEntry { private ContextCallback m_Callback;
public CallbackEntry( int number, ContextCallback callback ) : this( number, -1, callback ) { }
public CallbackEntry( int number, int range, ContextCallback callback ) : base( number, range ) { m_Callback = callback; }
public override void OnClick() { if ( m_Callback != null ) m_Callback(); } }
public override void OnDoubleClick( Mobile from ) { if ( this == from && !Warmode ) { IMount mount = Mount;
if ( mount != null && !DesignContext.Check( this ) ) return; }
base.OnDoubleClick( from ); }
public override void DisplayPaperdollTo( Mobile to ) { if ( DesignContext.Check( this ) ) base.DisplayPaperdollTo( to ); }
private static bool m_NoRecursion;
public override bool CheckEquip( Item item ) { if ( !base.CheckEquip( item ) ) return false;
if ( bounce != null ) { if ( bounce.m_Parent is Item ) { Item parent = (Item) bounce.m_Parent;
if ( parent == this.Backpack || parent.IsChildOf( this.Backpack ) ) return true; } else if ( bounce.m_Parent == this ) { return true; } }
SendLocalizedMessage( 1004042 ); // You can only equip what you are already carrying while you have a trade pending. return false; }
return true; }
public override bool CheckTrade( Mobile to, Item item, SecureTradeContainer cont, bool message, bool checkItems, int plusItems, int plusWeight ) { int msgNum = 0;
if ( cont == null ) { if ( to.Holding != null ) msgNum = 1062727; // You cannot trade with someone who is dragging something. else if ( this.HasTrade ) msgNum = 1062781; // You are already trading with someone else! else if ( to.HasTrade ) msgNum = 1062779; // That person is already involved in a trade }
if ( this.Backpack == null || !this.Backpack.CheckHold( this, item, false, checkItems, plusItems, plusWeight ) ) msgNum = 1004040; // You would not be able to hold this if the trade failed. else if ( to.Backpack == null || !to.Backpack.CheckHold( to, item, false, checkItems, plusItems, plusWeight ) ) msgNum = 1004039; // The recipient of this trade would not be able to carry this. else msgNum = CheckContentForTrade( item ); }
if ( msgNum != 0 ) { if ( message ) this.SendLocalizedMessage( msgNum );
return false; }
return true; }
private static int CheckContentForTrade( Item item ) { if ( item is TrapableContainer && ((TrapableContainer)item).TrapType != TrapType.None ) return 1004044; // You may not trade trapped items.
if ( SkillHandlers.StolenItem.IsStolen( item ) ) return 1004043; // You may not trade recently stolen items.
if ( item is Container ) { foreach ( Item subItem in item.Items ) { int msg = CheckContentForTrade( subItem );
if ( msg != 0 ) return msg; } }
return 0; }
public override bool CheckNonlocalDrop( Mobile from, Item item, Item target ) { if ( !base.CheckNonlocalDrop( from, item, target ) ) return false;
if ( from.AccessLevel >= AccessLevel.GameMaster ) return true;
Container pack = this.Backpack; if ( from == this && this.HasTrade && ( target == pack || target.IsChildOf( pack ) ) ) { BounceInfo bounce = item.GetBounce();
if ( bounce != null && bounce.m_Parent is Item ) { Item parent = (Item) bounce.m_Parent;
SkillHandlers.StolenItem.ReturnOnDeath( this, c );
Mobile killer = this.FindMostRecentDamager( true );
if ( killer is PlayerMobile) { Deaths++; ((PlayerMobile )killer).Kills++; }
if ( m_PermaFlags.Count > 0 ) { m_PermaFlags.Clear();
if ( c is Corpse ) ((Corpse)c).Criminal = true;
if ( SkillHandlers.Stealing.ClassicMode ) Criminal = true; }
if ( this.Kills >= 5 && DateTime.Now >= m_NextJustAward ) { Mobile m = FindMostRecentDamager( false );
if( m is BaseCreature ) m = ((BaseCreature)m).GetMaster();
if ( m != null && m.Player && m != this ) { bool gainedPath = false;
int theirTotal = ComputeSkillTotal( m ); int ourTotal = ComputeSkillTotal( this );
int pointsToGain = 1 + ((theirTotal - ourTotal) / 50);
if ( pointsToGain < 1 ) pointsToGain = 1; else if ( pointsToGain > 4 ) pointsToGain = 4;
if ( VirtueHelper.Award( m, VirtueName.Justice, pointsToGain, ref gainedPath ) ) { if ( gainedPath ) m.SendLocalizedMessage( 1049367 ); // You have gained a path in Justice! else m.SendLocalizedMessage( 1049363 ); // You have gained in Justice.
read the end of my last post. Your code just isnt going to work. Try replacing it with the code that I suggested instead.
kobra- 04-26-2006
and here is the new errors
CODE
RunUO - [www.runuo.com] Version 1.0.0, Build 36918 Scripts: Compiling C# scripts...failed (1 errors, 2 warnings) - Warning: Scripts\Mobiles\PlayerMobile.cs: CS0108: (line 103, column 14) The k eyword new is required on 'Server.Mobiles.PlayerMobile.Kills' because it hides i nherited member 'Server.Mobile.Kills' - Warning: Scripts\Spells\Base\Spell.cs: CS0162: (line 170, column 4) Unreachab le code detected - Error: Scripts\Mobiles\PlayerMobile.cs: CS0128: (line 1740, column 11) A loca l variable named 'killer' is already defined in this scope Scripts: One or more scripts failed to compile or no script files were found. - Press return to exit, or R to try again.
ArteGordon- 04-26-2006
QUOTE (kobra @ April 26, 2006 04:02 pm)
and here is the new errors
CODE
RunUO - [www.runuo.com] Version 1.0.0, Build 36918 Scripts: Compiling C# scripts...failed (1 errors, 2 warnings) - Warning: Scripts\Mobiles\PlayerMobile.cs: CS0108: (line 103, column 14) The k eyword new is required on 'Server.Mobiles.PlayerMobile.Kills' because it hides i nherited member 'Server.Mobile.Kills' - Warning: Scripts\Spells\Base\Spell.cs: CS0162: (line 170, column 4) Unreachab le code detected - Error: Scripts\Mobiles\PlayerMobile.cs: CS0128: (line 1740, column 11) A loca l variable named 'killer' is already defined in this scope Scripts: One or more scripts failed to compile or no script files were found. - Press return to exit, or R to try again.
the first two errors are due to code earlier in the script.
QUOTE
- Warning: Scripts\Mobiles\PlayerMobile.cs: CS0108: (line 103, column 14) The k eyword new is required on 'Server.Mobiles.PlayerMobile.Kills' because it hides i nherited member 'Server.Mobile.Kills'
CODE
[CommandProperty( AccessLevel.GameMaster )] public int Kills { get{ return m_Kills; } set{ m_Kills = value; } }
there is already a property called Kills on all mobiles so you dont need to define another one.
QUOTE
- Error: Scripts\Mobiles\PlayerMobile.cs: CS0128: (line 1740, column 11) A loca l variable named 'killer' is already defined in this scope Scripts: One or more scripts failed to compile or no script files were found.
that means that somewhere else in the OnDeath method a variable named 'killer' is defined, so just use a different variable name in the code I posted.
kobra- 04-26-2006
I use Mobile so here is the code
CODE
if ( Mobile is PlayerMobile) { Deaths++; ((PlayerMobile )Mobile).Kills++; }
And here is the errors...
CODE
- Error: Scripts\Mobiles\PlayerMobile.cs: CS0118: (line 1674, column 8) 'Server .Mobile' denotes a 'class' where a 'variable' was expected - Error: Scripts\Mobiles\PlayerMobile.cs: CS0118: (line 1677, column 20) 'Serve r.Mobile' denotes a 'class' where a 'variable' was expected - Error: Scripts\Mobiles\PlayerMobile.cs: CS0128: (line 1740, column 11) A loca l variable named 'killer' is already defined in this scope Scripts: One or more scripts failed to compile or no script files were found. - Press return to exit, or R to try again.
Dont know what i did wrong, i ddi what u said just make a different variable name so i chose Mobile
ArteGordon- 04-26-2006
you cannot use 'Mobile' as a variable name since it is already being used as the name of a class. Use something safe and unique like 'mykiller'
kobra- 04-27-2006
Ok i cahnged the entire code to this
CODE
Mobile whokilled = this.FindMostRecentDamager( true );
if ( whokilled is PlayerMobile) { Deaths++; ((PlayerMobile )whokilled).Kills++; }
Now i have NO ERRORS and server starts up perfect!! But kills/deaths do not show up under name and the kills does not show up when i do [props on a player on deaths do, but i tink its cause it has samename as the 'kills' refering to the LongTerm and ShortTerm, i am just concerned to get kills/deaths to show up i tried to make a player and it didnt show up on player - any help is well appriciated and thanks for everything so far!!!!!
I also attached my full playermobile.cs cause it never fully fits in the code so..thanks again!!!
ArteGordon- 04-27-2006
just because you add those properties does not mean that they will appear as part of the name. You would have to add that explicitly to the name string in the GetNameProperties override.
The Kills property that you are using is the same as that normally used to keep track of murders. If you want to have a separate property like that, then you would need to give it a different name.
(edit)
I looked at your playermobile and you are adding them, but you are using the same cliloc number 1060660 for them all. You cannot do that. You have to use a different cliloc number for each string.
QUOTE
list.Add( 1060660, "Deaths\t{0}", m_Deaths );
kobra- 04-27-2006
So if i leave the cliloc number for deaths the same, what do i put it for kills to make them show under name?
kobra- 04-27-2006
here is code - changed the clilic number and it still dont show kills/deaths
CODE
public override void AddNameProperties( ObjectPropertyList list ) { if ( m_Deaths > 0 ) { if ( AccessLevel == AccessLevel.Player ) { list.Add( 1060662, "Deaths\t{0}", m_Deaths ); } else if ( AccessLevel == AccessLevel.Player ) { list.Add( 1060662, "Deaths\t0" ); } } if ( m_Kills > 0 ) { if ( AccessLevel == AccessLevel.Player ) list.Add( 1060663, "Kills\t{0}", m_Kills ); }
base.AddNameProperties( list );
ArteGordon- 04-27-2006
that is not the entire method. What is the rest of it?
kobra- 04-27-2006
I dont know. Thats all i ever had - i attached my full playermobile.cs again if ya needa look there - unsure
kobra- 04-27-2006
i also was looking threw the script support and saw asmir had the same prob. I copied one of the codes u told him to use i tried this on my server
CODE
if (AccessLevel == AccessLevel.Player) { if (m_Kills > 0) list.Add(1060660, "Kills\t{0}", m_Kills); else list.Add(1060660, "Deaths\t0");
I got no errors and it ran fine but download the attachment picture, the kills and deaths and the name is all messed up. Kills do not show. Deaths are where the name is and the Name is where Deaths are supposed to be LOL!! i dunno what to edit to get thsi working fine but this code seems pretty rite - it was the one u suggested Asmir to use in the kills/deaths system post he did a while back