internal void OnAvatarClicked(IntPtr sender) { if (Clicked == null) return; AvatarClick click; lock (instance) click = new AvatarClick(sender); Clicked(instance, click); }
void onClick(Instance bot, AvatarClick click) { if ( click.TargetSession == 0 ) return; var source = app.GetUser(click.SourceSession); var target = app.GetUser(click.TargetSession); // Needed as there is no intermediate click event if ( source == null ) return; // Null session suggests bot if ( target == null ) { hitBot(source); return; } if ( !source.GetSettingBool(keyMode, false) || !target.GetSettingBool(keyMode, false) ) return; var diffX = Math.Abs(source.X - target.X); var diffY = Math.Abs(source.Y - target.Y); var diffZ = Math.Abs(source.Z - target.Z); if ( diffX > .5 || diffY > .4 || diffZ > .5 ) return; if ( cannotHit(source) || cannotHit(target) ) { createHoverText(target.Position, 0, false); return; } var targetHealth = target.GetSettingInt(keyHealth, 100); var critical = VPServices.Rand.Next(100) <= 10; var damage = VPServices.Rand.Next(5, 25) * ( critical ? 3 : 1 ); createHoverText(target.Position, damage, critical); createBloodSplat(target.Position); if ( targetHealth - damage <= 0 ) { app.AlertAll(msgKill, target.Name, source.Name); target.SetSetting(keyDeath, DateTime.Now); target.SetSetting(keyHealth, 100); source.SetSetting(keyHealth, source.GetSettingInt(keyHealth) + 5); bot.Avatars.Teleport(click.TargetSession, AvatarPosition.GroundZero); } else target.SetSetting(keyHealth, targetHealth - damage); }