sahisahi
Member
Ugh, this is all messy, im trying to make a repeatingtrap execute 2 methods +internaltimer, this is what i currently have;
repeatingtrap script:
The idea is the player hidden steps into the traprange and then (If they carrying a certain item, wich i have no clue how to play with packets) they can see him even hidden.
the next methods are taken from the files i attach.
Detection(Mobile from), Detecting(Mobile from, Mobile targ), InternalTimer
Errors:
CS1501: Line 355: No overload for method 'Detecting' takes '1' arguments
CS1501: Line 374: No overload for method 'Detecting' takes '0' arguments
Obviously im getting erros
repeatingtrap script:
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Mobiles;
using Server.Spells;
using Server.Gumps;
using Server.Engines.XmlSpawner2;
using Server;
using Server.Items;
using Server.Network;
using System.Text;
using Server.Misc;
namespace Server.Items
{
public class Rtw : BaseTrap
{
private int m_TrapRange;
private int m_MinDamage;
private int m_MaxDamage;
private int m_SpellEffect;
private double m_RefireDelay;
private bool m_NoDamageHidden;
private int m_Sound;
//public virtual int DamagedItemEffectDuration { get { return 110; } }
public virtual int DamagedItemEffectDuration { get { return 220; } }
public virtual bool UseEffectsDamageIndicator { get { return true; } } // show damage using location effects
public virtual bool UseColorDamageIndicator { get { return false; } } // show damage using item rehueing
public virtual int WhenToAutoRepair { get { return 0; } } // 0=never, 1=after any damage, 2=after being destroyed
public virtual double AutoRepairFactor { get { return 0.1; } } // fraction of HitsMax to repair on each autorepair OnTick. A value of 1 will fully repair.
private int m_Hits = 1000; // current hits
private int m_HitsMax = 1000; // max hits
private int m_ResistFire = 30; // percentage resistance to fire attacks
private int m_ResistPhysical = 30; // percentage resistance to physical attacks
private int m_Stone = 1; // amount of stone required per repair
private int m_Iron = 20; // amount of iron required per repair
private int m_Wood = 20; // amount of wood required per repair
private int m_DestroyedItemID = 10984; // itemid used when hits go to zero. 2322=dirt patch, 10984 pulsing pool. Specifying a value of zero will cause the object to be permanently destroyed.
private TimeSpan m_AutoRepairTime = TimeSpan.Zero; // autorepair disabled by default
private bool m_Enabled = true; // allows enabling/disabling siege damage and its effects
private DateTime m_AutoRepairEnd;
// private AutoRepairTimer m_AutoRepairTimer;
public bool NeedsEffectsUpdate = true;
private ArrayList m_OriginalItemIDList = new ArrayList(); // original itemids of parent item
private ArrayList m_OriginalHueList = new ArrayList(); // original hues of parent item
public bool BeingRepaired;
private EffectsTimer m_EffectsTimer;
[CommandProperty(AccessLevel.GameMaster)]
public int TrapRange
{
get { return m_TrapRange; }
set { m_TrapRange = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public int MinDamage
{
get { return m_MinDamage; }
set { m_MinDamage = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public int MaxDamage
{
get { return m_MaxDamage; }
set { m_MaxDamage = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public int SpellEffect
{
get { return m_SpellEffect; }
set { m_SpellEffect = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public double RefireDelay
{
get { return m_RefireDelay; }
set { m_RefireDelay = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public bool NoDamageHidden
{
get { return m_NoDamageHidden; }
set { m_NoDamageHidden = value; }
}
[CommandProperty(AccessLevel.GameMaster)]
public int Sound
{
get { return m_Sound; }
set { m_Sound = value; }
}
private Timer m_Timer;
[Constructable]
public Rtw() : base(0x2F5A)
{
m_TrapRange = 4;
Visible = true;
m_MinDamage = 0;
this.Name = "Trw";
m_MaxDamage = 0;
m_SpellEffect = 0;
m_RefireDelay = 1;
m_Sound = 0;
m_NoDamageHidden = true;
}
public static void Detection(Mobile from)
{
Mobile src = from;
if (DateTime.Now < src.NextSkillTime)
{
// src.SendSkillMessage();
return;
}
double srcSkill = src.Skills[SkillName.DetectHidden].Value;
int range = (int)(srcSkill / 5.0);
if (!src.CheckSkill(SkillName.DetectHidden, 0.0, 100.0))
range /= 2;
bool detectedanyone = false;
if ( range > 0 )
{
ArrayList inRangeArray = new ArrayList();
foreach ( Mobile trg in src.GetMobilesInRange( range ) )
{
if( trg is PlayerMobile )
{
PlayerMobile test = trg as PlayerMobile;
if ( trg.Hidden && src != trg )
{
double ss = srcSkill + Utility.Random( 21 ) - 10;
double ts = trg.Skills[SkillName.Hiding].Value + Utility.Random( 21 ) - 10;
if ( (src.AccessLevel >= trg.AccessLevel) && (ss >= ts) )
{
detectedanyone = true;
Detecting(src, trg);
inRangeArray.Add(trg);
}
}
}
}
//if(detectedanyone)
// src.SendMessage("You detect someone nearby!");
//else
// src.SendMessage("You didn't detect anyone nearby.");
InternalTimer pause = new InternalTimer( src, inRangeArray );
pause.Start();
src.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds(6.0);
}
}
//////////////////////TIMER + ON TICK ++++ ////////<----- METHOD IM TRYING TO EXECUTE
private static void Detecting(Mobile from, Mobile targ)
{
PlayerMobile pm = (PlayerMobile)targ;
List<Mobile> list = pm.VisibilityList;
list.Add( from );
if ( Utility.InUpdateRange( from, targ ) )
{
if ( from.CanSee( targ ) )
{
from.Send( new Network.MobileIncoming( from, targ ) );
from.SendAsciiMessage(2458,"You have been detected!");
}
}
}
private class InternalTimer : Timer
{
private Mobile m_From;
private ArrayList m_InRange;
public InternalTimer(Mobile from, ArrayList inRange2)
: base(TimeSpan.FromSeconds(6.0))
{
m_From = from;
m_InRange = inRange2;
}
protected override void OnTick()
{
foreach (Mobile target in m_InRange)
{
Mobile TargetMobile = target;
PlayerMobile TargetPlayerMobile = target as PlayerMobile;
TargetPlayerMobile.VisibilityList.Remove(m_From);
if (TargetMobile.Hidden && m_From != TargetPlayerMobile)
{
if (!m_From.CanSee(TargetPlayerMobile) && Utility.InUpdateRange(m_From, TargetMobile))
m_From.Send(TargetPlayerMobile.RemovePacket);
}
}
m_InRange.Clear();
}
}
//////////////////////TIMER + ON TICK ++++ ////////<----- METHOD IM TRYING TO EXECUTE
public override bool OnEquip( Mobile from )
{
return false;
}
public override void OnDoubleClick( Mobile from )
{
base.OnDoubleClick(from);
if (from == null)
return;
// Server.SkillHandlers.DetectHiddenverocultosaram.Detection(from);
}
public override bool DropToWorld( Mobile from, Point3D p )
{
base.DropToWorld( from, p );
if ( this.Movable == true )
{
Server.SkillHandlers.DetectHiddenverocultosaram.Detection(from);
this.Movable = false;
this.Visible = false;
}
return true;
// Server.SkillHandlers.DetectHiddenverocultosaram.Detection(from);
}
public virtual void StartTimer()
{
if (m_Timer == null)
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(RefireDelay), TimeSpan.FromSeconds(RefireDelay), new TimerCallback(Refresh));
}
public virtual void StopTimer()
{
if (m_Timer != null )
m_Timer.Stop();
m_Timer = null;
}
public virtual void CheckTimer()
{
Map map = this.Map;
if (map != null && map.GetSector(GetWorldLocation()).Active)
StartTimer();
else
StopTimer();
}
public override void OnLocationChange(Point3D oldLocation)
{
base.OnLocationChange(oldLocation);
CheckTimer();
}
public override void OnMapChange()
{
base.OnMapChange();
CheckTimer();
}
public override void OnSectorActivate()
{
base.OnSectorActivate();
StartTimer();
}
public override void OnSectorDeactivate()
{
base.OnSectorDeactivate();
StopTimer();
}
public virtual void Refresh()
{
ArrayList list = new ArrayList();
foreach (Mobile mob in GetMobilesInRange(TrapRange))
{
if (!mob.Alive || mob.AccessLevel > AccessLevel.Player || (mob.Hidden && NoDamageHidden) || (mob.Player && mob.Backpack.FindItemByType(typeof(objeto1150)) != null)/* || ItemID == 0x2AE8*/ )
continue;
if (((this.Z + 8) >= mob.Z && (mob.Z + 16) > this.Z))
{
if (mob is BaseCreature && (((BaseCreature)mob).Controlled || ((BaseCreature)mob).Summoned))
list.Add(mob);
else if (mob.Player)
list.Add(mob);
foreach (Mobile mm in list)
{
Detecting(); ////////<----- METHOD IM TRYING TO EXECUTE
// Effects.SendMovingEffect(this, mm, SpellEffect, 5, 0, false, true);
// Effects.PlaySound(Location, Map, Sound);
// SpellHelper.Damage(TimeSpan.FromSeconds(0.5), mm, mm, Utility.RandomMinMax(MinDamage, MaxDamage), 100, 0, 0, 0, 0);
}
}
}
}
public override void OnMovement(Mobile m, Point3D oldLocation)
{
base.OnMovement(m, oldLocation);
if (m.Location == oldLocation || !m.Player || !m.Alive || m.AccessLevel > AccessLevel.Player || m.Hidden || (m.Player && m.Backpack.FindItemByType(typeof(objeto1150)) != null) /*|| ItemID == 0x2AE8*/)
return;
if (CheckRange(m.Location, oldLocation, TrapRange))
{
CheckTimer();
Detecting(); ////////<----- METHOD IM TRYING TO EXECUTE
// Effects.SendMovingEffect(this, m, SpellEffect, 5, 0, false, true);
// SpellHelper.Damage(TimeSpan.FromSeconds(0.5), m, m, Utility.RandomMinMax(MinDamage, MaxDamage), 100, 0, 0, 0, 0);
// Effects.PlaySound(Location, Map, Sound);
}
}
public Rtw(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(m_TrapRange);
writer.Write(m_MinDamage);
writer.Write(m_MaxDamage);
writer.Write(m_SpellEffect);
writer.Write(m_RefireDelay);
writer.Write(m_NoDamageHidden);
writer.Write(m_Sound);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_TrapRange = reader.ReadInt();
m_MinDamage = reader.ReadInt();
m_MaxDamage = reader.ReadInt();
m_SpellEffect = reader.ReadInt();
m_RefireDelay = reader.ReadDouble();
m_NoDamageHidden = reader.ReadBool();
m_Sound = reader.ReadInt();
CheckTimer();
break;
}
}
}
}
}
The idea is the player hidden steps into the traprange and then (If they carrying a certain item, wich i have no clue how to play with packets) they can see him even hidden.
the next methods are taken from the files i attach.
Detection(Mobile from), Detecting(Mobile from, Mobile targ), InternalTimer
Code:
public static void Detection(Mobile from)
{
Mobile src = from;
if (DateTime.Now < src.NextSkillTime)
{
// src.SendSkillMessage();
return;
}
double srcSkill = src.Skills[SkillName.DetectHidden].Value;
int range = (int)(srcSkill / 5.0);
if (!src.CheckSkill(SkillName.DetectHidden, 0.0, 100.0))
range /= 2;
bool detectedanyone = false;
if ( range > 0 )
{
ArrayList inRangeArray = new ArrayList();
foreach ( Mobile trg in src.GetMobilesInRange( range ) )
{
if( trg is PlayerMobile )
{
PlayerMobile test = trg as PlayerMobile;
if ( trg.Hidden && src != trg )
{
double ss = srcSkill + Utility.Random( 21 ) - 10;
double ts = trg.Skills[SkillName.Hiding].Value + Utility.Random( 21 ) - 10;
if ( (src.AccessLevel >= trg.AccessLevel) && (ss >= ts) )
{
detectedanyone = true;
Detecting(src, trg);
inRangeArray.Add(trg);
}
}
}
}
//if(detectedanyone)
// src.SendMessage("You detect someone nearby!");
//else
// src.SendMessage("You didn't detect anyone nearby.");
InternalTimer pause = new InternalTimer( src, inRangeArray );
pause.Start();
src.NextSkillTime = DateTime.Now + TimeSpan.FromSeconds(6.0);
}
}
//////////////////////TIMER + ON TICK ++++ ////////<----- METHOD IM TRYING TO EXECUTE
private static void Detecting(Mobile from, Mobile targ)
{
PlayerMobile pm = (PlayerMobile)targ;
List<Mobile> list = pm.VisibilityList;
list.Add( from );
if ( Utility.InUpdateRange( from, targ ) )
{
if ( from.CanSee( targ ) )
{
from.Send( new Network.MobileIncoming( from, targ ) );
from.SendAsciiMessage(2458,"You have been detected!");
}
}
}
private class InternalTimer : Timer
{
private Mobile m_From;
private ArrayList m_InRange;
public InternalTimer(Mobile from, ArrayList inRange2)
: base(TimeSpan.FromSeconds(6.0))
{
m_From = from;
m_InRange = inRange2;
}
protected override void OnTick()
{
foreach (Mobile target in m_InRange)
{
Mobile TargetMobile = target;
PlayerMobile TargetPlayerMobile = target as PlayerMobile;
TargetPlayerMobile.VisibilityList.Remove(m_From);
if (TargetMobile.Hidden && m_From != TargetPlayerMobile)
{
if (!m_From.CanSee(TargetPlayerMobile) && Utility.InUpdateRange(m_From, TargetMobile))
m_From.Send(TargetPlayerMobile.RemovePacket);
}
}
m_InRange.Clear();
}
}
//////////////////////TIMER + ON TICK ++++ ////////<----- METHOD IM TRYING TO EXECUTE
Errors:
CS1501: Line 355: No overload for method 'Detecting' takes '1' arguments
CS1501: Line 374: No overload for method 'Detecting' takes '0' arguments
Obviously im getting erros