Stealing

  • Не в сети
  • Glavnyuk
  • Автор темы
  • Junior Member
  • Сообщений: 2
  • Thanks: 0
Не в сети

Stealing

#432
При попытке украсть персонаж выходит из хайда и при успешной краже атакует "жертву". Это вроде как не правильно.
---
Про выход из хайда прочитал, но по атаке жертвы не понятно

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Boralgin
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Re: RE: Stealing

#433

Glavnyuk написал:
При попытке украсть персонаж выходит из хайда и при успешной краже атакует "жертву". Это вроде как не правильно.
---
Про выход из хайда прочитал, но по атаке жертвы не понятно


Сейчас проверил. При успешной краже персонаж не начал атаковать свою жертву. Возможно Вы что-то делаете не так или Ваш персонаж был в боевом режиме.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Glavnyuk
  • Автор темы
  • Junior Member
  • Сообщений: 2
  • Thanks: 0
Не в сети

Re: RE: Stealing

#434
Персонаж не был в боевом режиме. при неудачном стилинге - не атакует. при удачном не переходит в режим атаки, но начинает бить :(

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Boralgin
  • Ветеран
  • Сообщений: 155
  • Thanks: 0
Не в сети

Re: RE: Stealing

#437

Glavnyuk написал:
Персонаж не был в боевом режиме. при неудачном стилинге - не атакует. при удачном не переходит в режим атаки, но начинает бить :(


Спросите у других игроков, есть ли у них такая же проблема. У меня не происходит никакой автоатаки на жертву, персонаж просто становится криминалом.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • pooding
  • Senior Member
  • Сообщений: 15
  • Thanks: 0
Не в сети

Re: RE: Stealing

#1230
Как воровать у других игроков? Пишет, что надо вступить в гильдию воров. Как в нее вступить, спс.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Посетитель

Re: RE: Stealing

#1233
Про это написано в FAQ'e у нас, по моему в разделе умений :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Datalord
  • Premium Member
  • Сообщений: 93
  • Thanks: 0
Не в сети

Re: RE: Stealing

#1318
Вот замеченные мной "косяки" воровства: Персонаж выходит из хайда при активации навыка(приготовился украсть вожу курсором по рюкзаку ни к чему не притронулся а из хайда вышел) в 100 проц случаев. При удачном воровстве у собственной лошади перс начинает ее бить не переходя в боевой режим, как и писал основатель темы, повреждения при этом небольшие 1-4 хп, что наносимые, что получаемые, но иногда, непонятно от чего лошадь начинает лягаться по 16-20 хп убивая чара с нескольких ударов, понятно что о макросе не может быть и речи. Есть сомнения что это так и было задумано разрабами, просьба исправить.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Посетитель

Re: RE: Stealing

#1320

Datalord написал:
Вот замеченные мной "косяки" воровства: Персонаж выходит из хайда при активации навыка(приготовился украсть вожу курсором по рюкзаку ни к чему не притронулся а из хайда вышел) в 100 проц случаев. При удачном воровстве у собственной лошади перс начинает ее бить не переходя в боевой режим, как и писал основатель темы, повреждения при этом небольшие 1-4 хп, что наносимые, что получаемые, но иногда, непонятно от чего лошадь начинает лягаться по 16-20 хп убивая чара с нескольких ударов, понятно что о макросе не может быть и речи. Есть сомнения что это так и было задумано разрабами, просьба исправить.

Никаких косяков в этом нет, вот пара пунктов, которые нужно знать:

1. Чтобы успешно красть у людей, нужно быть членом гильдии воров;
2. Чем меньше на вас одето брони, при краже - тем лучше. Она усложняет процесс;
3. Кол-во веса, которое вы пытаетесь украсть - влияет на конечный исход кражи. Зависит от навыка;
4. Пробуйте экспериментировать со статусами животного (охраняет, следует и т.д.);
5. При попытке украсть - всегда будет вышибать из хайда или инвиза. Чтобы постараться этого избежать - нужно использовать стелс, и использовать его заранее;
6. При краже должны быть свободны обе руки;
7. Чем больше вокруг вас NPC и других людей - тем выше шанс быть замеченным при краже;
8. Бить лошадь он начинает потому, что это агрессия в сторону животного и животное отвечает. Животное это воспринимает так, как если бы вы его атаковали. Не важно - ваше оно или нет, оно будет отвечать;
9. Некоторые артефакты могут быть получены только при использовании навыка воровства;
10. Занимаясь этим делом, есть шанс быть убитым владельцем, который вовремя заметил пропажу.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Warder
  • Elite Member
  • Evil Never Die
  • Сообщений: 164
  • Thanks: 0
Не в сети

Re: RE: Stealing

#1325

l_nigrouse написал:
5. При попытке украсть - всегда будет вышибать из хайда или инвиза. Чтобы постараться этого избежать - нужно использовать стелс, и использовать его заранее

это не помогает

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Alastar аватар
    Не в сети
  • Alastar
  • Администрация
  • Сообщений: 1041
  • Thanks: 87
Alastar аватар
Не в сети

Re: RE: Stealing

#1327
насчет выхода из хайда это правильно(просто надо уметь воровать).а вот про атаку при удачной краже это явно баг.(на каждую 10 умения 1 кг)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Allice [FreeZzy] аватар
    Не в сети
  • Allice [FreeZzy]
  • Пророк
  • United Pirates Guild
  • Сообщений: 3317
  • Thanks: 53
Allice [FreeZzy] аватар
Не в сети

Re: RE: Stealing

#3823

l_nigrouse написал:

Никаких косяков в этом нет, вот пара пунктов, которые нужно знать:

1. Чтобы успешно красть у людей, нужно быть членом гильдии воров;
2. Чем меньше на вас одето брони, при краже - тем лучше. Она усложняет процесс;
3. Кол-во веса, которое вы пытаетесь украсть - влияет на конечный исход кражи. Зависит от навыка;
4. Пробуйте экспериментировать со статусами животного (охраняет, следует и т.д.);
5. При попытке украсть - всегда будет вышибать из хайда или инвиза. Чтобы постараться этого избежать - нужно использовать стелс, и использовать его заранее;
6. При краже должны быть свободны обе руки;
7. Чем больше вокруг вас NPC и других людей - тем выше шанс быть замеченным при краже;
8. Бить лошадь он начинает потому, что это агрессия в сторону животного и животное отвечает. Животное это воспринимает так, как если бы вы его атаковали. Не важно - ваше оно или нет, оно будет отвечать;
9. Некоторые артефакты могут быть получены только при использовании навыка воровства;
10. Занимаясь этим делом, есть шанс быть убитым владельцем, который вовремя заметил пропажу.


Обясните пожалуста 5 пункт. Почему персонажа в стелсе (юз хидинг, юз стелс, ждем кулдовн, юз стилинг ) выбывает со стелса еще до появления курсора (прицела) ?

Как воровать тогда в стелсе?

110 стил, 100 снуп, 110 (с банданой ) хайд, 100 (с банданой стелс)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Allice [FreeZzy] аватар
    Не в сети
  • Allice [FreeZzy]
  • Пророк
  • United Pirates Guild
  • Сообщений: 3317
  • Thanks: 53
Allice [FreeZzy] аватар
Не в сети

Re: RE: Stealing

#4150
Тему апну.

На сервере снуп со стелса ВСЕГДА! ревилит (а не должно, должны быть 4 варианта удачи или неудачи).

В багтрекере описано здесь , но чтобы в коментах не сорить опишу здесь:
Скрипт Stealing.sc

using System;
using System.Collections;
using Server;
using Server.Mobiles;
using Server.Targeting;
using Server.Items;
using Server.Network;
using Server.Factions;
using Server.Spells.Seventh;
using Server.Spells.Fifth;
using Server.Spells.Necromancy;
using Server.Spells;
using Server.Spells.Ninjitsu;

namespace Server.SkillHandlers
{
	public class Stealing
	{
		public static void Initialize()
		{
			SkillInfo.Table[33].Callback = new SkillUseCallback( OnUse );
		}

		public static readonly bool ClassicMode = false;
		public static readonly bool SuspendOnMurder = false;

		public static bool IsInGuild( Mobile m )
		{
			return ( m is PlayerMobile && ((PlayerMobile)m).NpcGuild == NpcGuild.ThievesGuild );
		}

		public static bool IsInnocentTo( Mobile from, Mobile to )
		{
			return ( Notoriety.Compute( from, (Mobile)to ) == Notoriety.Innocent );
		}

		private class StealingTarget : Target
		{
			private Mobile m_Thief;

			public StealingTarget( Mobile thief ) : base ( 1, false, TargetFlags.None )
			{
				m_Thief = thief;

				AllowNonlocal = true;
			}

			private Item TryStealItem( Item toSteal, ref bool caught )
			{
				Item stolen = null;

				object root = toSteal.RootParent;

				StealableArtifactsSpawner.StealableInstance si = null;
				if ( toSteal.Parent == null || !toSteal.Movable )
					si = StealableArtifactsSpawner.GetStealableInstance( toSteal );

				if ( !IsEmptyHanded( m_Thief ) )
				{
					m_Thief.SendLocalizedMessage( 1005584 ); // Both hands must be free to steal.
				}
				else if ( root is Mobile && ((Mobile)root).Player && IsInnocentTo( m_Thief, (Mobile)root ) && !IsInGuild( m_Thief ) )
				{
					m_Thief.SendLocalizedMessage( 1005596 ); // You must be in the thieves guild to steal from other players.
				}
				else if ( SuspendOnMurder && root is Mobile && ((Mobile)root).Player && IsInGuild( m_Thief ) && m_Thief.Kills > 0 )
				{
					m_Thief.SendLocalizedMessage( 502706 ); // You are currently suspended from the thieves guild.
				}
				else if ( root is BaseVendor && ((BaseVendor)root).IsInvulnerable )
				{
					m_Thief.SendLocalizedMessage( 1005598 ); // You can't steal from shopkeepers.
				}
				else if ( root is PlayerVendor )
				{
					m_Thief.SendLocalizedMessage( 502709 ); // You can't steal from vendors.
				}
				else if ( !m_Thief.CanSee( toSteal ) )
				{
					m_Thief.SendLocalizedMessage( 500237 ); // Target can not be seen.
				}
				else if ( m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold( m_Thief, toSteal, false, true ) )
				{
					m_Thief.SendLocalizedMessage( 1048147 ); // Your backpack can't hold anything else.
				}
				#region Sigils
				else if ( toSteal is Sigil )
				{						
					PlayerState pl = PlayerState.Find( m_Thief );
					Faction faction = ( pl == null ? null : pl.Faction );

					Sigil sig = (Sigil) toSteal;

					if ( !m_Thief.InRange( toSteal.GetWorldLocation(), 1 ) )
					{
						m_Thief.SendLocalizedMessage( 502703 ); // You must be standing next to an item to steal it.
					}
					else if ( root != null ) // not on the ground
					{
						m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
					}
					else if ( faction != null )
					{
						if ( !m_Thief.CanBeginAction( typeof( IncognitoSpell ) ) )
						{
							m_Thief.SendLocalizedMessage( 1010581 ); //	You cannot steal the sigil when you are incognito
						}
						else if ( DisguiseTimers.IsDisguised( m_Thief ) )
						{
							m_Thief.SendLocalizedMessage( 1010583 ); //	You cannot steal the sigil while disguised
						}
						else if ( !m_Thief.CanBeginAction( typeof( PolymorphSpell ) ) )
						{
							m_Thief.SendLocalizedMessage( 1010582 ); //	You cannot steal the sigil while polymorphed				
						}
						else if( TransformationSpellHelper.UnderTransformation( m_Thief ) )
						{
							m_Thief.SendLocalizedMessage( 1061622 ); // You cannot steal the sigil while in that form.
						}
						else if ( AnimalForm.UnderTransformation( m_Thief ) )
						{
							m_Thief.SendLocalizedMessage( 1063222 ); // You cannot steal the sigil while mimicking an animal.
						}
						else if ( pl.IsLeaving )
						{
							m_Thief.SendLocalizedMessage( 1005589 ); // You are currently quitting a faction and cannot steal the town sigil
						}
						else if ( sig.IsBeingCorrupted && sig.LastMonolith.Faction == faction )
						{
							m_Thief.SendLocalizedMessage( 1005590 ); //	You cannot steal your own sigil
						}
						else if ( sig.IsPurifying )
						{
							m_Thief.SendLocalizedMessage( 1005592 ); // You cannot steal this sigil until it has been purified
						}
						else if ( m_Thief.CheckTargetSkill( SkillName.Stealing, toSteal, 80.0, 80.0 ) )
						{
							if ( Sigil.ExistsOn( m_Thief ) )
							{
								m_Thief.SendLocalizedMessage( 1010258 ); //	The sigil has gone back to its home location because you already have a sigil.
							}
							else if ( m_Thief.Backpack == null || !m_Thief.Backpack.CheckHold( m_Thief, sig, false, true ) )
							{
								m_Thief.SendLocalizedMessage( 1010259 ); //	The sigil has gone home because your backpack is full
							}
							else
							{
								if ( sig.IsBeingCorrupted )
									sig.GraceStart = DateTime.Now; // begin grace period

								m_Thief.SendLocalizedMessage( 1010586 ); // YOU STOLE THE SIGIL!!!   (woah, calm down now)

								if ( sig.LastMonolith != null && sig.LastMonolith.Sigil != null ) {
									sig.LastMonolith.Sigil = null;
									sig.LastStolen = DateTime.Now;
								}

								return sig;
							}
						}
						else
						{
							m_Thief.SendLocalizedMessage( 1005594 ); //	You do not have enough skill to steal the sigil
						}
					}
					else
					{
						m_Thief.SendLocalizedMessage( 1005588 ); //	You must join a faction to do that
					}
				}
				#endregion
				else if ( si == null && ( toSteal.Parent == null || !toSteal.Movable ) )
				{
					m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
				}
				else if ( toSteal.LootType == LootType.Newbied || toSteal.CheckBlessed( root ) )
				{
					m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
				}
				else if ( Core.AOS && si == null && toSteal is Container )
				{
					m_Thief.SendLocalizedMessage( 502710 ); // You can't steal that!
				}
				else if ( !m_Thief.InRange( toSteal.GetWorldLocation(), 1 ) )
				{
					m_Thief.SendLocalizedMessage( 502703 ); // You must be standing next to an item to steal it.
				}
				else if &#40; si != null && m_Thief.Skills&#91;SkillName.Stealing&#93;.Value < 100.0 &#41;
				&#123;
					m_Thief.SendLocalizedMessage&#40; 1060025, "", 0x66D &#41;; // You're not skilled enough to attempt the theft of this item.
				&#125;
				else if &#40; toSteal.Parent is Mobile &#41;
				&#123;
					m_Thief.SendLocalizedMessage&#40; 1005585 &#41;; // You cannot steal items which are equiped.
				&#125;
				else if &#40; root == m_Thief &#41;
				&#123;
					m_Thief.SendLocalizedMessage&#40; 502704 &#41;; // You catch yourself red-handed.
				&#125;
				else if &#40; root is Mobile && &#40;&#40;Mobile&#41;root&#41;.AccessLevel > AccessLevel.Player &#41;
				&#123;
					m_Thief.SendLocalizedMessage&#40; 502710 &#41;; // You can't steal that!
				&#125;
				else if &#40; root is Mobile && !m_Thief.CanBeHarmful&#40; &#40;Mobile&#41;root &#41; &#41;
				&#123;
				&#125;
				else if &#40; root is Corpse &#41;
				&#123;
					m_Thief.SendLocalizedMessage&#40; 502710 &#41;; // You can't steal that!
				&#125;
				else
				&#123;
					double w = toSteal.Weight + toSteal.TotalWeight;

					if &#40; w > 10 &#41;
					&#123;
						m_Thief.SendMessage&#40; "That is too heavy to steal." &#41;;
					&#125;
					else
					&#123;
						if &#40; toSteal.Stackable && toSteal.Amount > 1 &#41;
						&#123;
							int maxAmount = &#40;int&#41;&#40;&#40;m_Thief.Skills&#91;SkillName.Stealing&#93;.Value / 10.0&#41; / toSteal.Weight&#41;;

							if &#40; maxAmount < 1 &#41;
								maxAmount = 1;
							else if &#40; maxAmount > toSteal.Amount &#41;
								maxAmount = toSteal.Amount;

							int amount = Utility.RandomMinMax&#40; 1, maxAmount &#41;;

							if &#40; amount >= toSteal.Amount &#41;
							&#123;
								int pileWeight = &#40;int&#41;Math.Ceiling&#40; toSteal.Weight * toSteal.Amount &#41;;
								pileWeight *= 10;

								if &#40; m_Thief.CheckTargetSkill&#40; SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5 &#41; &#41;
									stolen = toSteal;
							&#125;
							else
							&#123;
								int pileWeight = &#40;int&#41;Math.Ceiling&#40; toSteal.Weight * amount &#41;;
								pileWeight *= 10;

								if &#40; m_Thief.CheckTargetSkill&#40; SkillName.Stealing, toSteal, pileWeight - 22.5, pileWeight + 27.5 &#41; &#41;
								&#123;
									stolen = Mobile.LiftItemDupe&#40; toSteal, toSteal.Amount - amount &#41;;

									if &#40; stolen == null &#41;
										stolen = toSteal;
								&#125;
							&#125;
						&#125;
						else
						&#123;
							int iw = &#40;int&#41;Math.Ceiling&#40; w &#41;;
							iw *= 10;

							if &#40; m_Thief.CheckTargetSkill&#40; SkillName.Stealing, toSteal, iw - 22.5, iw + 27.5 &#41; &#41;
								stolen = toSteal;
						&#125;

						if &#40; stolen != null &#41;
						&#123;
							m_Thief.SendLocalizedMessage&#40; 502724 &#41;; // You succesfully steal the item.

							if &#40; si != null &#41;
							&#123;
								toSteal.Movable = true;
								si.Item = null;
							&#125;
						&#125;
						else
						&#123;
							m_Thief.SendLocalizedMessage&#40; 502723 &#41;; // You fail to steal the item.
						&#125;

						caught = &#40; m_Thief.Skills&#91;SkillName.Stealing&#93;.Value < Utility.Random&#40; 150 &#41; &#41;;
					&#125;
				&#125;

				return stolen;
			&#125;

			protected override void OnTarget&#40; Mobile from, object target &#41;
			&#123;
//----------------------
//
// Вот как раз тут должна просчитиватся RevealingAction - возможность ревила и как видим по скрипту - после
// посылки таргета в клиент >> OnTarget&#40; Mobile from, object target &#41; но с сервера сначала приходят пакеты на
// ревил а пакеты на запрос таргета после пакетов ревила. Эт странно как-то, по дефолтному скрипту выдно что
// должно быть с точностью до наоборот, потому как по скрипту RevealingAction&#40;&#41; после OnTarget. То есть
// получили таргет - обработали данную часть скрипта.  
//
//----------------------
				from.RevealingAction&#40;&#41;;

				Item stolen = null;
				object root = null;
				bool caught = false;

				if &#40; target is Item &#41;
				&#123;
					root = &#40;&#40;Item&#41;target&#41;.RootParent;
					stolen = TryStealItem&#40; &#40;Item&#41;target, ref caught &#41;;
				&#125; 
				else if &#40; target is Mobile &#41;
				&#123;
					Container pack = &#40;&#40;Mobile&#41;target&#41;.Backpack;

					if &#40; pack != null && pack.Items.Count > 0 &#41;
					&#123;
						int randomIndex = Utility.Random&#40; pack.Items.Count &#41;;

						root = target;
						stolen = TryStealItem&#40; pack.Items&#91;randomIndex&#93;, ref caught &#41;;
					&#125;
				&#125; 
				else 
				&#123;
					m_Thief.SendLocalizedMessage&#40; 502710 &#41;; // You can't steal that!
				&#125;

				if &#40; stolen != null &#41;
				&#123;
					from.AddToBackpack&#40; stolen &#41;;

					StolenItem.Add&#40; stolen, m_Thief, root as Mobile &#41;;
				&#125;

				if &#40; caught &#41;
				&#123;
					if &#40; root == null &#41;
					&#123;
						m_Thief.CriminalAction&#40; false &#41;;
					&#125;
					else if &#40; root is Corpse && &#40;&#40;Corpse&#41;root&#41;.IsCriminalAction&#40; m_Thief &#41; &#41;
					&#123;
						m_Thief.CriminalAction&#40; false &#41;;
					&#125;
					else if &#40; root is Mobile &#41;
					&#123;
						Mobile mobRoot = &#40;Mobile&#41;root;

						if &#40; !IsInGuild&#40; mobRoot &#41; && IsInnocentTo&#40; m_Thief, mobRoot &#41; &#41;
							m_Thief.CriminalAction&#40; false &#41;;

						string message = String.Format&#40; "You notice &#123;0&#125; trying to steal from &#123;1&#125;.", m_Thief.Name, mobRoot.Name &#41;;

						foreach &#40; NetState ns in m_Thief.GetClientsInRange&#40; 8 &#41; &#41;
						&#123;
							if &#40; ns.Mobile != m_Thief &#41;
								ns.Mobile.SendMessage&#40; message &#41;;
						&#125;
					&#125;
				&#125;
				else if &#40; root is Corpse && &#40;&#40;Corpse&#41;root&#41;.IsCriminalAction&#40; m_Thief &#41; &#41;
				&#123;
					m_Thief.CriminalAction&#40; false &#41;;
				&#125;

				if &#40; root is Mobile && &#40;&#40;Mobile&#41;root&#41;.Player && m_Thief is PlayerMobile && IsInnocentTo&#40; m_Thief, &#40;Mobile&#41;root &#41; && !IsInGuild&#40; &#40;Mobile&#41;root &#41; &#41;
				&#123;
					PlayerMobile pm = &#40;PlayerMobile&#41;m_Thief;

					pm.PermaFlags.Add&#40; &#40;Mobile&#41;root &#41;;
					pm.Delta&#40; MobileDelta.Noto &#41;;
				&#125;
			&#125;
		&#125;

		public static bool IsEmptyHanded&#40; Mobile from &#41;
		&#123;
			if &#40; from.FindItemOnLayer&#40; Layer.OneHanded &#41; != null &#41;
				return false;

			if &#40; from.FindItemOnLayer&#40; Layer.TwoHanded &#41; != null &#41;
				return false;

			return true;
		&#125;

		public static TimeSpan OnUse&#40; Mobile m &#41;
		&#123;
			if &#40; !IsEmptyHanded&#40; m &#41; &#41;
			&#123;
				m.SendLocalizedMessage&#40; 1005584 &#41;; // Both hands must be free to steal.
			&#125;
			else
			&#123;
				m.Target = new Stealing.StealingTarget&#40; m &#41;;
				m.RevealingAction&#40;&#41;;

				m.SendLocalizedMessage&#40; 502698 &#41;; // Which item do you want to steal?
			&#125;

			return TimeSpan.FromSeconds&#40; 10.0 &#41;;
		&#125;
	&#125;

	public class StolenItem
	&#123;
		public static readonly TimeSpan StealTime = TimeSpan.FromMinutes&#40; 2.0 &#41;;

		private Item m_Stolen;
		private Mobile m_Thief;
		private Mobile m_Victim;
		private DateTime m_Expires;

		public Item Stolen&#123; get&#123; return m_Stolen; &#125; &#125;
		public Mobile Thief&#123; get&#123; return m_Thief; &#125; &#125;
		public Mobile Victim&#123; get&#123; return m_Victim; &#125; &#125;
		public DateTime Expires&#123; get&#123; return m_Expires; &#125; &#125;

		public bool IsExpired&#123; get&#123; return &#40; DateTime.Now >= m_Expires &#41;; &#125; &#125;

		public StolenItem&#40; Item stolen, Mobile thief, Mobile victim &#41;
		&#123;
			m_Stolen = stolen;
			m_Thief = thief;
			m_Victim = victim;

			m_Expires = DateTime.Now + StealTime;
		&#125;

		private static Queue m_Queue = new Queue&#40;&#41;;

		public static void Add&#40; Item item, Mobile thief, Mobile victim &#41;
		&#123;
			Clean&#40;&#41;;

			m_Queue.Enqueue&#40; new StolenItem&#40; item, thief, victim &#41; &#41;;
		&#125;

		public static bool IsStolen&#40; Item item &#41;
		&#123;
			Mobile victim = null;

			return IsStolen&#40; item, ref victim &#41;;
		&#125;

		public static bool IsStolen&#40; Item item, ref Mobile victim &#41;
		&#123;
			Clean&#40;&#41;;

			foreach &#40; StolenItem si in m_Queue &#41;
			&#123;
				if &#40; si.m_Stolen == item && !si.IsExpired &#41;
				&#123;
					victim = si.m_Victim;
					return true;
				&#125;
			&#125;

			return false;
		&#125;

		public static void ReturnOnDeath&#40; Mobile killed, Container corpse &#41;
		&#123;
			Clean&#40;&#41;;

			foreach &#40; StolenItem si in m_Queue &#41;
			&#123;
				if &#40; si.m_Stolen.RootParent == corpse && si.m_Victim != null && !si.IsExpired &#41;
				&#123;
					if &#40; si.m_Victim.AddToBackpack&#40; si.m_Stolen &#41; &#41;
						si.m_Victim.SendLocalizedMessage&#40; 1010464 &#41;; // the item that was stolen is returned to you.
					else
						si.m_Victim.SendLocalizedMessage&#40; 1010463 &#41;; // the item that was stolen from you falls to the ground.

					si.m_Expires = DateTime.Now; // such a hack
				&#125;
			&#125;
		&#125;

		public static void Clean&#40;&#41;
		&#123;
			while &#40; m_Queue.Count > 0 &#41;
			&#123;
				StolenItem si = &#40;StolenItem&#41; m_Queue.Peek&#40;&#41;;

				if &#40; si.IsExpired &#41;
					m_Queue.Dequeue&#40;&#41;;
				else
					break;
			&#125;
		&#125;
	&#125;
&#125;

Можно скрипт с сервера в студию, чтобы докопатся до истины? На дефолтной рануо 4 варианта с ревилом со стелса работают при снупинге. У нас почему то нет. Причем на деф ранке все как и должно быть: появляется прицел, тыкаем на вещьили персонаж и только потом нас ревилит или не ревилит со стелса при стилинге. А еа уогейймс - сначала ревилит, только потом появляется таргет для выбота того что будим стилить. И без всяких сообщений о разревиле.

Надоело переливать с пустого в порожнее. Почините ж наконец.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Посетитель

Re: RE: Stealing

#4163
Отправил скрипт в ЛС. Касаемо "на дефолтной" - их 4 версии: 1.0, 2.0, 2.1, 2.2 и все они могут различаться (лично не проверял, но на всякий случай). Буквы перепутаны в расширении, не "sc" а "cs" :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Allice [FreeZzy] аватар
    Не в сети
  • Allice [FreeZzy]
  • Пророк
  • United Pirates Guild
  • Сообщений: 3317
  • Thanks: 53
Allice [FreeZzy] аватар
Не в сети

Re: RE: Stealing

#4168
[offtopic]2.1 а насчет букв - это в силу привычки:)[/offtopic]

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Не в сети
  • Kikazaru
  • Platinum Member
  • Сообщений: 210
  • Thanks: 0
Не в сети

Re: RE: Stealing

#5202
Понимаю, что не своевременно, однако, я люблю играть за вора и имею в этом деле определенный опыт.

1. Использование стилинга ревилит сразу же еще до выбора предмета. Именно поэтому продвинутые воры делают специальные макросы на скиллы или действия, которые не ревилят, и тарегетят желаемый предмет, а уже потом используют макрос на стилинг + ласт таргет собственно для дела. Это из моего опыта игры на UOGamers: Demise. Это кстати здорово использовать в приеме воровства на бегу. К тому моменту, как цель сообразит, что случилось, вы скорее всего будете в экране от нее.

2. Снуп имеет шанс ревила и из хайда, и из стелса.

Whether you succeed or not, there is a chance you will be noticed, wherein nearby players will receive a message concerning your action, and if hidden, a chance of being revealed.


www.uoguide.com/Snooping

Note that performing any action that would cancel hidden state will also cancel stealth state, other than moving of course.


www.uoguide.com/Stealth

Скорее всего на это так же влияют факторы, о которых писал Old Man, поэтому есть существенный шанс ревила даже при ГМ снупинге.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.