ПОМОГИТЕ

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: ПОМОГИТЕ

Стосовно затримки при використанні зброї. Тут скорочено, без зайвого, що не діє і без того що поки що не впроваджено і стосується класової системи ( ClassBonuses.WeaponTimeSpanDelay )
Код:
		public virtual TimeSpan GetDelay( Mobile m )
		{
			int speed = this.Speed;

			if ( speed == 0 )
				return TimeSpan.FromHours( 1.0 );

			double delayInSeconds;

			if ( Core.SE )
			{
				/*
				 * This is likely true for Core.AOS as well... both guides report the same
				 * formula, and both are wrong.
				 * The old formula left in for AOS for legacy & because we aren't quite 100%
				 * Sure that AOS has THIS formula
				 */
				int bonus = AosAttributes.GetValue( m, AosAttribute.WeaponSpeed );

				if ( Spells.Chivalry.DivineFurySpell.UnderEffect( m ) )
					bonus += 10;

				// Bonus granted by successful use of Honorable Execution.
				bonus += HonorableExecution.GetSwingBonus( m );

				if( DualWield.Registry.Contains( m ) )
					bonus += ((DualWield.DualWieldTimer)DualWield.Registry[m]).BonusSwingSpeed;

				if( Feint.Registry.Contains( m ) )
					bonus -= ((Feint.FeintTimer)Feint.Registry[m]).SwingSpeedReduction;

				int discordanceEffect = 0;

				// Discordance gives a malus of -0/-28% to swing speed.
				if ( SkillHandlers.Discordance.GetEffect( m, ref discordanceEffect ) )
					bonus -= discordanceEffect;

//	Mod	KOCTa 17.12.2008	ClassSystem v.1.0
//				if ( m is PlayerMobile && ClassSpecification.Enabled )
//				{
//					return ClassBonuses.WeaponTimeSpanDelay( (PlayerMobile) m, this, bonus );
//				}

				if ( bonus > 60 )
					bonus = 60;

				speed = (int)Math.Floor( speed * (bonus + 100.0) / 100.0 );

				if ( speed <= 0 )
					speed = 1;

				int ticks = (int)Math.Floor( (80000.0 / ((m.Stam + 100) * speed)) - 2 );

				// Swing speed currently capped at one swing every 1.25 seconds (5 ticks).
				if ( ticks < 5 )
					ticks = 5;

				delayInSeconds = ticks * 0.25;
//	Elf Ranged bonus - буде у класових бонусах
				if ( atkWeapon.Type == WeaponType.Ranged && Core.ML && pmAttacker.Race == Race.Elf )
					delayInSeconds = delayInSeconds * 0.8;

//	end	Mod	KOCTa 17.12.2008	ClassSystem v.1.0
			}
			else
....
			return TimeSpan.FromSeconds( delayInSeconds );
		}
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: ПОМОГИТЕ

Тейлор:
Код:
		public static double[] m_TailoringRewardScore = new double[]
		{
			31743.0,		// 0	new RewardGroup( 700, new RewardItem( 1, RunicKit, 3 ) )
			25016.0,		// 1	new RewardGroup( 650, new RewardItem( 1, PowerScroll, 20 ) ),
			21720.0,		// 2	new RewardGroup( 600, new RewardItem( 1, RunicKit, 2 ) ),
			20764.5,		// 3	new RewardGroup( 575, new RewardItem( 1, PowerScroll, 15 ) ),
			19620.5,		// 4	new RewardGroup( 550, new RewardItem( 1, ClothingBlessDeed ) ),
			18762.0,		// 5	new RewardGroup( 500, new RewardItem( 1, PowerScroll, 10 ) ),
			17508.7,		// 6	new RewardGroup( 450, new RewardItem( 1, BearRug ) ),
			16853.5,		// 7	new RewardGroup( 400, new RewardItem( 2, PowerScroll, 5 ), new RewardItem( 3, Tapestry ) ),
			14613.5,		// 8	new RewardGroup( 350, new RewardItem( 1, RunicKit, 1 ) ),
			8247.1,		// 9	new RewardGroup( 300, new RewardItem( 1, StretchedHide ) ),
			4399.0,		// 10	new RewardGroup( 200, new RewardItem( 4, Cloth, 4 ), new RewardItem( 1, Sandals ) ),
			2654.0,		// 11	new RewardGroup( 150, new RewardItem( 9, Cloth, 3 ), new RewardItem( 1, Sandals ) ),
			1234.4,		// 12	new RewardGroup( 100, new RewardItem( 1, Cloth, 2 ) ),
			580.0,		// 13	new RewardGroup(  50, new RewardItem( 1, Cloth, 1 ) ),
			317.0,		// 14	new RewardGroup(   0, new RewardItem( 1, Cloth, 0 ) ),
		};
Таблиця нагород стандартна:
Код:
		public TailorRewardCalculator()
		{
			Groups = new RewardGroup[]
				{
					new RewardGroup(   0, new RewardItem( 1, Cloth, 0 ) ),
					new RewardGroup(  50, new RewardItem( 1, Cloth, 1 ) ),
					new RewardGroup( 100, new RewardItem( 1, Cloth, 2 ) ),
					new RewardGroup( 150, new RewardItem( 9, Cloth, 3 ), new RewardItem( 1, Sandals ) ),
					new RewardGroup( 200, new RewardItem( 4, Cloth, 4 ), new RewardItem( 1, Sandals ) ),
					new RewardGroup( 300, new RewardItem( 1, StretchedHide ) ),
					new RewardGroup( 350, new RewardItem( 1, RunicKit, 1 ) ),
					new RewardGroup( 400, new RewardItem( 2, PowerScroll, 5 ), new RewardItem( 3, Tapestry ) ),
					new RewardGroup( 450, new RewardItem( 1, BearRug ) ),
					new RewardGroup( 500, new RewardItem( 1, PowerScroll, 10 ) ),
					new RewardGroup( 550, new RewardItem( 1, ClothingBlessDeed ) ),
					new RewardGroup( 575, new RewardItem( 1, PowerScroll, 15 ) ),
					new RewardGroup( 600, new RewardItem( 1, RunicKit, 2 ) ),
					new RewardGroup( 650, new RewardItem( 1, PowerScroll, 20 ) ),
					new RewardGroup( 700, new RewardItem( 1, RunicKit, 3 ) )
				};
		}
Як воно видає важко пояснити словами, тому ось як у скріпті, спочатку створює, потім зайве видаляє, систему брав таку яка вона була, як зроблена мені самому не подобається, але по часу було скоріше робити під неї, ніж як для коваля писати окрему:
Код:
				rewscor = GetTailoringReward(m_RewardPoints);
				if ( rewscor < m_TailoringRewardScore.Length )
				{
					ArrayList rewards = new ArrayList();
					int grl = TailorRewardCalculator.Instance.Groups.Length;
					if ( rewscor < grl )
					{
						RewardGroup rewardGroup = TailorRewardCalculator.Instance.Groups[grl-rewscor-1];
						for ( int i = 0; i < rewardGroup.Items.Length; ++i )
						{	
							Item item = rewardGroup.Items[ i ].Construct();

							if ( item != null )
							{
								rewards.Add( item );
							}
						}

						if ( rewards.Count > 0 )
						{
							reward = (Item) rewards[ Utility.Random( rewards.Count ) ];

							for ( int i = 0; i < rewards.Count; ++i )
							{
								if ( rewards[ i ] != reward )
								{
									((Item) rewards[ i ]).Delete();
								}
							}
						}
					}
				}
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: ПОМОГИТЕ

Стосовно АІ вендорів. Я якраз займаюсь переробкою, там дуже багато всього задіяно, але якщо коротко, то там рандомно він рухається, як і всі інши боти у всіх напрямках, якщо в межах свого "дому". Якщо ні, то прямує до нього.
Стосовно скріптів, якось буде більш вільного часу поспілкуємось у мірці. Десь у другий половині цієї неділі.
 

omen

не тот, кем кажусь
такими скрипткодами, в большинстве своем даже мне понятными, снова меня заинтерисовали. апять захотелось в УО побегать. как-нибудь загляну. (надеюсь мой акк есче не удален, а дома быстрей всего точно исчезли)
и сфера у меня гдето валяется, наверно и сам чего-нибудь со скриптами поразбираю. (блин а я же реально по 8 часов вдень на работе сижу - у же б скриптинг уошный разобрал)
эх может и от меня когда-то польза будет (раньше меня хватило только на создание бронированного коня, не наносящего повреждений и воскрешающего своего хазяина).
 

Silence

Member
Re: Відповідь: ПОМОГИТЕ

Зранку виправлення вже буде працювати.
Проверил) Работает) Из трёх заказов на 115 выпало 2 скролла, 1 молот)) 2й скролл скушал твинк) Большое спасибо!)
Код:
				rewscor = GetTailoringReward(m_RewardPoints);
				if ( rewscor < m_TailoringRewardScore.Length )
				{
					ArrayList rewards = new ArrayList();
					int grl = TailorRewardCalculator.Instance.Groups.Length;
					if ( rewscor < grl )
					{
						RewardGroup rewardGroup = TailorRewardCalculator.Instance.Groups[grl-rewscor-1];
						for ( int i = 0; i < rewardGroup.Items.Length; ++i )
						{	
							Item item = rewardGroup.Items[ i ].Construct();

							if ( item != null )
							{
								rewards.Add( item );
							}
						}

						if ( rewards.Count > 0 )
						{
							reward = (Item) rewards[ Utility.Random( rewards.Count ) ];

							for ( int i = 0; i < rewards.Count; ++i )
							{
								if ( rewards[ i ] != reward )
								{
									((Item) rewards[ i ]).Delete();
								}
							}
						}
					}
				}
Какой ужас...Думаю проще и эффективней было бы так:
Код:
				rewscor = GetTailoringReward(m_RewardPoints);
				if ( rewscor < m_TailoringRewardScore.Length )
				{
					ArrayList rewards = new ArrayList();
					int grl = TailorRewardCalculator.Instance.Groups.Length;
					if ( rewscor < grl )
					{
						RewardGroup rewardGroup = TailorRewardCalculator.Instance.Groups[grl-rewscor-1];
						rewards.Add( rewardGroup.Items[Utility.Random(rewardGroup.Items.Length)].Construct());
					}
				}
К сожалению в вышеприведенном коде не видно что там дальше происходит с листом rewards, думаю что какой-нибудь перебор по его элементам... Тогда можно было бы еще больше упростить если подредактировать его обработку. Например использовать вместо ArrayList rewards переменную Item reward чтото типа такого Item reward = rewardGroup.Items[Utility.Random(rewardGroup.Items.Length)].Construct()
и дальше делать с ней все, что нам нужно.
Никогда не любил динамические массивы и т.п. ... от них много мороки, мусор надо потом убирать.. хотя может С# сам за собой чистит.. я с ним толком не знаком) поэтому такие штуки только сбивают с толку и стараюсь при необходимости обходиться без них... Как видим в данном случае код уменьшается, памяти должно кушать чуток меньше и ошибок выделять тоже).

По поводу лечения там есть упоминание про beneficialActs
Код:
healer.CanBeBeneficial( patient, true, true )
с чем я недавно столкнулся в игре дважды: не мог воскресить одного человека, и полечить другого... хотелось бы увидеть даный метод)

По поводу скорости ударов - очень полезная информация однако) Я и раньше замечал, что когда стамина падает, то скорость ударов тоже, но теперь понимаю как сильно... И ещё полезная ифнормация про то, что DivineFury увеличивает скорость так же как и опция на предмете Увеличение скорости ударов +10% ... Большое спасибо)

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

Возвращаясь к заказам... очень маленькая вероятность выпадения заказа с большой сложностью (> 36000 у кузнеца). вообще не видел ниразу. смотрел только в списках заранее сгенерированных заказов (те, которых по 3 штуки у каждого кузнеца). Спец. заказы вообще не смотрю так как он там только 1 и потом час вообще никакой заказ не посмотреть... А учитывая обстановку с валоритовым рунником и ситуацией с добычей кристаллита - смысл кристаллитового рунника пропадает вовсе... Предлагаю увеличить шанс выпадения заказа на кристаллитовый рунник и его бонусы: шанс заказа для скила 120 - 0,5%, от рунника 6 бонусов строго силой 90-100%.
Еще одна идея: насколько я знаю список заранее сгенерированных заказов состоит из 3 заказов для скила 60, 80 и 100 если не ошибаюсь. Предлагаю добавить еще один для скила 120, чтобы было четыре, и скрывать те, для которых у кузнеца не хватает скила. Пример кузнец со скилом 55 смотрит боды, видит 1, со скилом 78 тоже видит 1, с 90 - видит 2, 100 - видит 3, 120 - 4.
Введение даннных изменений вызовет интерес к получению кристаллитовых рунников) Но особо ничего не изменит, потому что накопать кристаллитовой руды для большого заказа можно наверное только за неделю копания...Соответственно свои награды получат только самые усердные в своём деле:)

P.S.: не против пообщаться в мирке , но не сидел там очень давно... а какой адрес сервера, порт и название канала?..
 
Последнее редактирование:

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: Відповідь: ПОМОГИТЕ

По поводу лечения там есть упоминание про beneficialActs
Код:
healer.CanBeBeneficial( patient, true, true )
с чем я недавно столкнулся в игре дважды: не мог воскресить одного человека, и полечить другого... хотелось бы увидеть даный метод)
Неможна лікувати чи оживляти тих, хто у інший фракції чи гільдії з якою війна.
Код такий:
Код:
		public virtual bool CanBeBeneficial( Mobile target, bool message, bool allowDead )
		{
			if ( target == null )
				return false;

			if ( m_Deleted || target.m_Deleted || !Alive || IsDeadBondedPet || ( !allowDead && ( !target.Alive || IsDeadBondedPet ) ) )
			{
				if ( message )
					SendLocalizedMessage( 1001017 ); // You can not perform beneficial acts on your target.

				return false;
			}

			if ( target == this )
				return true;

			if ( /*m_Player &&*/ !Region.AllowBeneficial( this, target ) )
			{
				// TODO: Pets
				//if ( !(target.m_Player || target.Body.IsHuman || target.Body.IsAnimal) )
				//{
				if ( message )
					SendLocalizedMessage( 1001017 ); // You can not perform beneficial acts on your target.

				return false;
				//}
			}

			return true;
		}
IsDeadBondedPet - це прив'язани тварини, яких можно оживляти.
Region.AllowBeneficial( this, target ) це ось що:
Код:
		public static bool Mobile_AllowBeneficial( Mobile from, Mobile target )
		{
			if( from == null || target == null || from.AccessLevel > AccessLevel.Player || target.AccessLevel > AccessLevel.Player )
				return true;

			#region Factions
			Faction targetFaction = Faction.Find( target, true );

			if( targetFaction != null )
			{
				if( Faction.Find( from, true ) != targetFaction )
					return false;
			}
			#endregion

			Map map = from.Map;

			if( map != null && (map.Rules & MapRules.BeneficialRestrictions) == 0 )
				return true; // In felucca, anything goes

			if( !from.Player )
				return true; // NPCs have no restrictions

			if( target is BaseCreature && !((BaseCreature)target).Controlled )
				return false; // Players cannot heal uncontrolled mobiles

			if( from is PlayerMobile && ((PlayerMobile)from).Young && (!(target is PlayerMobile) || !((PlayerMobile)target).Young) )
				return false; // Young players cannot perform beneficial actions towards older players

			Guild fromGuild = from.Guild as Guild;
			Guild targetGuild = target.Guild as Guild;

			if( fromGuild != null && targetGuild != null && (targetGuild == fromGuild || fromGuild.IsAlly( targetGuild )) )
				return true; // Guild members can be beneficial

			return CheckBeneficialStatus( GetGuildStatus( from ), GetGuildStatus( target ) );
		}
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: Відповідь: ПОМОГИТЕ

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

Возвращаясь к заказам... очень маленькая вероятность выпадения заказа с большой сложностью (> 36000 у кузнеца). вообще не видел ниразу. смотрел только в списках заранее сгенерированных заказов (те, которых по 3 штуки у каждого кузнеца). Спец. заказы вообще не смотрю так как он там только 1 и потом час вообще никакой заказ не посмотреть... А учитывая обстановку с валоритовым рунником и ситуацией с добычей кристаллита - смысл кристаллитового рунника пропадает вовсе... Предлагаю увеличить шанс выпадения заказа на кристаллитовый рунник и его бонусы: шанс заказа для скила 120 - 0,5%, от рунника 6 бонусов строго силой 90-100%.
Еще одна идея: насколько я знаю список заранее сгенерированных заказов состоит из 3 заказов для скила 60, 80 и 100 если не ошибаюсь. Предлагаю добавить еще один для скила 120, чтобы было четыре, и скрывать те, для которых у кузнеца не хватает скила. Пример кузнец со скилом 55 смотрит боды, видит 1, со скилом 78 тоже видит 1, с 90 - видит 2, 100 - видит 3, 120 - 4.
Введение даннных изменений вызовет интерес к получению кристаллитовых рунников) Но особо ничего не изменит, потому что накопать кристаллитовой руды для большого заказа можно наверное только за неделю копания...Соответственно свои награды получат только самые усердные в своём деле:)

P.S.: не против пообщаться в мирке , но не сидел там очень давно... а какой адрес сервера, порт и название канала?..
Я там у АІ буду зміни робити, можу зробити їм, щоб вони були меньш "рухливими", взагалі вони там рухаються лише задля створення ілюзії життя :).
Стосовно випадіння замовлень з великою кількістю балів, то так навмисно і зроблено. Крісталіт взагалі я додавав, а на стандарті зі стандартними замовленнями валорітовий щоб отримати люді місяцями бігають, та ще й купою персів. Спочатку потрібно отримати велике замовлення, а потім, що взагалі майже нереально, набрати для нього відповідної кількості малих. Саме тому я таки умови і робив. Набагато легше валорітовий молот отримати, ніж на стандарті, але не халява. Ну а крісталітовий повинен взагалі бути ексклюзивом, саме для самих старанних :).
А от спецзамовлення даремно не дивитесь. Бо я так робив, що замовлення, коли прораховуються, лічаться саме по скілу. Тому у вендорів, у яких максімальний третій рахується для 100 того складного замовлення, за яке буде велика нагорода ніколи не буде. На крісталітовий, якщо не помиляюсь, взагалі шанс з"являється лише при скілі більш ніж 115.
А 3 "вендоровських" замовлень я робив, щоб можна було ковалям якось "на життя" заробляти. Саме тому їх 3 різної вартості і саме тому на 120 там не буде. Задля складного коштовного замовлення потрібно дійсно бути фахівцем :).
PS: знаючи місця і маючи необхідне знаряддя ( кірку гаргуль і проспект тул ) достатньо крісталіта можна і за годин 20 накопати. Але це знаряддя щоб отримати, саме дрібні замовлення і потрібні.
 

Silence

Member
Re: Відповідь: Re: Відповідь: ПОМОГИТЕ

Я там у АІ буду зміни робити, можу зробити їм, щоб вони були меньш "рухливими"...
Было бы неплохо)
Неможна лікувати чи оживляти тих, хто у інший фракції чи гільдії з якою війна.
Я пытался воскресить безгильдийного, и помоему ни он ни я в фракциях не состояли.
Кстати про фракции... так и не понял как они работают... Хотел вступить в тру бритиш, подхожу к столбу, а мне пишет, что я не могу вступить в фракцию, так как я в гильдии и не являюсь гильдмастером (я состою только в обычной гильдии, не проф). Это получается, что если я вступаю в гильдию, про фракции можно забыть?...
И еще вопрос... Квесты на вступление в библиотеку тоже отсутствуют?..
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: Відповідь: Re: Відповідь: ПОМОГИТЕ

Было бы неплохо)

Я пытался воскресить безгильдийного, и помоему ни он ни я в фракциях не состояли.
Кстати про фракции... так и не понял как они работают... Хотел вступить в тру бритиш, подхожу к столбу, а мне пишет, что я не могу вступить в фракцию, так как я в гильдии и не являюсь гильдмастером (я состою только в обычной гильдии, не проф). Это получается, что если я вступаю в гильдию, про фракции можно забыть?...
И еще вопрос... Квесты на вступление в библиотеку тоже отсутствуют?..
У фракцію вступає уся гільдія, і "заяву про вступ" пише гільдмайстер. Якщо хтось окремо хоче - треба створити власну гільдію з одного члена.
Квест на вступ до бібліотеки десь я зустрічав, якщо він стандартний, то повинен бути. Якщо не помиляюсь там треба було шукати якогось майстра-музику і якогось маляра, а у Бріті у бібліотеці ходе якийсь бібліотекар. Якщо знаєте з чого там починається, скажить, може допоможу.
 

Silence

Member

The Britain Library Community Collection is located inside the Britain Public Library. ...
You must complete the Friends of the Library Quest before you can begin donating. Visit Verity Librarian to take on the quest.
(Еси вкратце, то смысл в том, что жертвуя вещи и деньги в это общество зарабатываются очки. Чтоб имеь возможность жертвовать, надо выполнить квест the Friends of the Library, который дает библиотекарь Verity).

По описанию он находится в здании Britain Public Library, которое стоит напротив замка Лорда Бритиша. Я был в Фелюке и Треммеле, и кроме двух писарей в здании сидит ещё человек, который даёт квест натуралиста на исследование Solen Hive (квест кстати рабочий:)). Verity не нашел нигде...

В идеале квест должен выглядеть так:


Найдите Verity в библиотеке Британии напротив Castle British. Она отправит вас к Sarakki the Notary (Саккари Писарь) возле входа в замок. Sarakki the Notary отправит вас к Petrus the Beekeeper за sealing wax (сургуч) для документа. Найдите Petrus the Beekeeper. Попав в Илшенар Сострадание (compassion ilshenar) двигайтесь нна северо-восток к циганскому лагерю. От лагеря двигайтесь на север и восток. Petrus the Beekeeper находится за гребнем горы. Он попросит собрать мешочки яда (poison sacs) , которые можно найти в speckled scorpions для того, чтобы сделать sealing wax (сургуч).

Найдите Speckled Scorpions идя на юг мимо первого циганского лагеря и затем минуя второй пока вы не прийдёте к реке с мостом. Перейдите через 2 мостаи ищите speckled scorpions в пустыне. Ищите poison sacs в их трупах. Возможно понадобится убить несколько speckled scorpions, так как poison sacs можно найти не в каждом трупе. Заметьте, что на каждом мешочке есть таймер (до 3600 секунд) который может отличаться в разных мешках.

Важное замечание : эта область наполнена efreets, wyverns, imps и т.д. и не предназначена для новичков или персонажей с низкими боевыми скилами. Она может быть пройдена магом с использованием множества Blade Spirits, но твари будут роиться вокруг вас. Лучший вариант - взять с собой друга который будет вас прикрывать или собирать мешки другим персонажем, который лучше сражается. Мешки могут быть брошены на землю или положены в другой контейнер несмотря на то, что это квестовые вещи.

Когда соберёте 5, пометьте их как квестовые вещи (quest items) и возвращайтесь к Petrus the Beekeeper. Он даст вам Official Sealing Wax.

Вернитесь к Sarakki the Notary за нотариально засвидетельствованным заявлением ( Notarized Application ).

Вернитесь к Verity Librarian за "Friend Of The Library Token", который позволит жертвовать в коллекцию библиотеки. Этот токен не может быть использован другим персонажем и должен быть экипирован (или хотя бы сохранён) для жертвования.


П.с. я не нашел ни одного из трёх персонажей этого квеста.
 

Вложения

Последнее редактирование:

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: ПОМОГИТЕ


...
Це вже, здається МЛовський квест. Поки що я скріптів на нього не зустрічав. Тому і на сервері його нема. Може згодом буде, а поки що...
ЗІ: Стосовно CanBeBeneficial я там код додав.
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: ПОМОГИТЕ

Тут Дефф питає, чому не може локпікінг качати. Маючи 33.0 на усі його потуги пише що навички недостатнього. Тож, може ще комусь буде корисне, тут підповідаю.

По скриптам при відмиканні таке:
Код:
					if ( !m_From.InRange( item.GetWorldLocation(), 1 ) )
						return;

					if ( m_Item.LockLevel == 0 || m_Item.LockLevel == -255 )
					{
						// LockLevel of 0 means that the door can't be picklocked
						// LockLevel of -255 means it's magic locked
						item.SendLocalizedMessageTo( m_From, 502073 ); // This lock cannot be picked by normal means
						return;
					}
					if ( m_From.Skills[SkillName.Lockpicking].Value < m_Item.RequiredSkill )
					{
						// The LockLevel is higher thant the LockPicking of the player
						item.SendLocalizedMessageTo( m_From, 502072 ); // You don't see how that lock can be manipulated.
						return;
					}

					if ( m_From.CheckTargetSkill( SkillName.Lockpicking, m_Item, m_Item.LockLevel, m_Item.MaxLockLevel ) )
					{
						// Success! Pick the lock!
						item.SendLocalizedMessageTo( m_From, 502076 ); // The lock quickly yields to your skill.
						m_From.PlaySound( 0x4A );
						m_Item.LockPick( m_From );
					}
					else
					{
						// The player failed to pick the lock
						BrokeLockPickTest();
						item.SendLocalizedMessageTo( m_From, 502075 ); // You are unable to pick the lock.
					}

				protected void BrokeLockPickTest()
				{
					// When failed, a 25% chance to break the lockpick
					if ( Utility.Random( 4 ) == 0 )
					{
						Item item = (Item)m_Item;

						// You broke the lockpick.
						item.SendLocalizedMessageTo( m_From, 502074 );

						m_From.PlaySound( 0x3A4 );
						m_Lockpick.Consume();
					}
				}
По змісту виходе: m_From.Skills[SkillName.Lockpicking].Value < m_Item.RequiredSkill
Рівень "зачиненості" при виробленні контейнера визначається так:
Код:
			if ( from.CheckSkill( SkillName.Tinkering, -5.0, 15.0 ) )
			{
				from.SendLocalizedMessage( 500636 ); // Your tinker skill was sufficient to make the item lockable.

				Key key = new Key( KeyType.Copper, Key.RandomValue() );

				KeyValue = key.KeyValue;
				DropItem( key );

				double tinkering = from.Skills[SkillName.Tinkering].Value;
				int level = (int)(tinkering * 0.8);

				RequiredSkill = level - 4;
				LockLevel = level - 14;
				MaxLockLevel = level + 35;

				if ( LockLevel == 0 )
					LockLevel = -1;
				else if ( LockLevel > 95 )
					LockLevel = 95;

				if ( RequiredSkill > 95 )
					RequiredSkill = 95;

				if ( MaxLockLevel > 95 )
					MaxLockLevel = 95;
			}
			else
			{
				from.SendLocalizedMessage( 500637 ); // Your tinker skill was insufficient to make the item lockable.
			}
Тож від типу контейнера тут ничого не залежить, а вот от тінкерінга - напряму. Якщо ти ГМ в тінкерінге, то і рівень замків у тих контейнерів, что ти робиш, буде такий, що маючи локпік 33, ти їх ніколи не відчинеш. Можу порадити, у твому випадку знайти когось, хто тінкерінг ще тільки почав підіймати, і використовувати його контейнери, а усім іншим - прокачувати ці навички разом одну з одною.
ЗИ: відразу на супутне запитання відповім, яке виникне. При застосуванні магічного замка ( MagicLock ) буде таке:
Код:
				targ.LockLevel = -255; // signal magic lock
				targ.Locked = true;
тож відчинити його відмичкою теж не вдасться.
Ну і відразу про TreasureChest, які інколи зустрічаються по данжам. В залежності від їх рівня у них буде таке:
Код:
			switch ( m_Level )
			{
				case LevelType.First:
				{
					RequiredSkill = LockLevel = 52 - Utility.Random( 0, 12 );
					TrapPower = Utility.RandomMinMax( 0, 25 );
					break;
				}
				case LevelType.Hybrid:
				{
					RequiredSkill = LockLevel = 60 - Utility.Random( 0, 12 );
					TrapPower = Utility.RandomMinMax( 0, 35 );
					break;
				}
				case LevelType.Second:
				{
					RequiredSkill = LockLevel = 72 - Utility.Random( 0, 12 );
					TrapPower = Utility.RandomMinMax( 0, 45 );
					break;
				}
				case LevelType.Third:
				{
					RequiredSkill = LockLevel = 84 - Utility.Random( 0, 12 );
					TrapPower = Utility.RandomMinMax( 0, 35 );
					;
					break;
				}
				case LevelType.Fourth:
				{
					RequiredSkill = LockLevel = 96 - Utility.Random( 0, 12 );
					TrapPower = Utility.RandomMinMax( 0, 45 );
					;
					break;
				}
			}
Тож відімкнути, якщо скіла вистачить Ви може і зможете, але навичка на них не зросте, бо MaxLockLevel там не прописане і буде 0.
Навичка росте при звертанні: m_From.CheckTargetSkill( SkillName.Lockpicking, m_Item, m_Item.LockLevel, m_Item.MaxLockLevel ), де в залежності від того, на скільки необхідний мін ( m_Item.LockLevel ) і макс ( m_Item.MaxLockLevel ) відрізняюсть від того що є ( SkillName.Lockpicking ) залежить шанс що навичка підійметься.
 

Silence

Member
В методе CanBeBeneficial так и не нашел причину того, почему не мог воскресить..
Дальше следующие вопросы:
1. возможно обнаружил баг на кап переносимого веса... не смотря на цифру в 600 максимального веса, больше 470 мне при себе иметь не удавалось... дальше вещи в рюкзак не ложаться, а при крафте падают на землю... раса человек, сила 143 (с бонусами от вещей).
2. на сервере есть талисманы? вообще вроде бы предусмотрен слот для них, но ни одного не встречал ниразу..
3. портал в хартвуд heartwood (город эльфов) на том метсе, где он должен быть, тоже отсутствует... или он отсутствует только для расы людей... но такого быть по идее не должно)
4. Если все-таки хартвуд существует, то в нём работают МЛовские квесты? например на получение скила Spellweaving?
( )
5. покажите пожалуйста метод, в котором определяется повышение скила Animal Taming. Искал в инете, но так и не понял как он растёт (с какой вероятностью на животных)...


и насчет локпикинга спасибо) тоже постоянно мучался этим вопросом...очень полезная инфа)
 
Последнее редактирование:
В методе CanBeBeneficial так и не нашел причину того, почему не мог воскресить..
Дальше следующие вопросы:
1. возможно обнаружил баг на кап переносимого веса... не смотря на цифру в 600 максимального веса, больше 470 мне при себе иметь не удавалось... дальше вещи в рюкзак не ложаться, а при крафте падают на землю... раса человек, сила 143 (с бонусами от вещей).
2. на сервере есть талисманы? вообще вроде бы предусмотрен слот для них, но ни одного не встречал ниразу..
3. портал в хартвуд heartwood (город эльфов) на том метсе, где он должен быть, тоже отсутствует... или он отсутствует только для расы людей... но такого быть по идее не должно)
4. Если все-таки хартвуд существует, то в нём работают МЛовские квесты? например на получение скила Spellweaving?
( )
5. покажите пожалуйста метод, в котором определяется повышение скила Animal Taming. Искал в инете, но так и не понял как он растёт (с какой вероятностью на животных)...


и насчет локпикинга спасибо) тоже постоянно мучался этим вопросом...очень полезная инфа)
1е бага быть не должно , сними вещи что на тебе они тоже имеют вес
2е не встречал талисманы
3е портала вродебы нету
5е уже рассказывали много раз полистай тему...(стр 5-6)
 

Silence

Member
1е бага быть не должно , сними вещи что на тебе они тоже имеют вес
Каким образом вещи на мне относятся к сути вопроса? Вес вещей учитывается хоть они на мне, хоть они в рюкзаке... Я говорю что общий вес далеко не доходит до предела, который мне показывает, что я могу носить. Вот сейчас например снял все вещи вообще, кап стал 523, текущий вес 409 и при этом 1 (!) кусок руды уже не ложится. Сообщение That container cannot hold more weight. Про ограничение в 125 предметов я в курсе, проблема не изза этого..их намного меньше. Так что прошу разобраться с весом.
уже рассказывали много раз полистай тему...(стр 5-6)
Читал все темы, когда не нашел ответ на свой вопрос, искал в инете. Задал вопрос конкретно тому человеку, кто может не просто рассказать словами, а показать конкретный код где, почему и с какой вероятностью будет подыматься скилл, а где - нет, и почему нет (как это было сделано со скилом lock picking). Если Костя даст скачать скрипты - сам буду рыться и выкладывать сюда всякие полезные интересности:) может даже сам чего-нибудь интересного придумаю и предложу ввести:)
 
Читал все темы, когда не нашел ответ на свой вопрос, искал в инете. Задал вопрос конкретно тому человеку, кто может не просто рассказать словами, а показать конкретный код где, почему и с какой вероятностью будет подыматься скилл, а где - нет, и почему нет (как это было сделано со скилом lock picking). Если Костя даст скачать скрипты - сам буду рыться и выкладывать сюда всякие полезные интересности:) может даже сам чего-нибудь интересного придумаю и предложу ввести:)
- форум разрабов

тут можно скачать сервер
 

Silence

Member
Скорее всего за эти годы использования наш сервер и сервер разрабов стали практически разными вещами... Поэтому хотелось бы увидеть тот, что работает у нас.
В любом случае спасибо за ссылочку..
 

Silence

Member
Почти разобрался... поднятие скила корнями лезет в базовые модули Mobile и Skill . И имеет одинаковую структуру для всех скиллов... Шанс зависит от минимального скила, при котором возможно удачное его применение, максимального скила для 100% успеха и еще от текущего значения, базового значения, а также сумы всех скилов, капа всех скилов и модификаторов сервера (для каждого скила можно отдельно выставить). Но не меньше 1% если он может расти... А у петов шанс по той же формуле только в 2 раза выше.А до значения 10.0 скилл растёт 100% при каждом использовании..
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: ПОМОГИТЕ

В методе CanBeBeneficial так и не нашел причину того, почему не мог воскресить..
Дальше следующие вопросы:
1. возможно обнаружил баг на кап переносимого веса... не смотря на цифру в 600 максимального веса, больше 470 мне при себе иметь не удавалось... дальше вещи в рюкзак не ложаться, а при крафте падают на землю... раса человек, сила 143 (с бонусами от вещей).
2. на сервере есть талисманы? вообще вроде бы предусмотрен слот для них, но ни одного не встречал ниразу..
3. портал в хартвуд heartwood (город эльфов) на том метсе, где он должен быть, тоже отсутствует... или он отсутствует только для расы людей... но такого быть по идее не должно)
4. Если все-таки хартвуд существует, то в нём работают МЛовские квесты? например на получение скила Spellweaving?
( )
5. покажите пожалуйста метод, в котором определяется повышение скила Animal Taming. Искал в инете, но так и не понял как он растёт (с какой вероятностью на животных)...


и насчет локпикинга спасибо) тоже постоянно мучался этим вопросом...очень полезная инфа)
1. :) Вся справа у тому, що більш у сумку не лізе - там обмежання, вага 400 і 125 ітемов. Решту можна вдякати на себе чи нести у руках.
2. Талісманів поки що нема. Як ітеми я їх можу зробити, але не зовсім зрозумів як вони повинні даватись, які там обмежання і інше. З неба брати не хочу. Взагалі, у тому вигляді, як вони описані для стандарту вони у нас не підійдуть. Там головний зміст тимчасово підвищувати якийсь скіл. Коли скіли обмежані сумскілом у 700 це має суттеве значення. Але не у нас. Тому, у планах я їх хочу до чогось особливого іншого плану використать. Ще там є колчани для стріл, но з тими все зрозуміло. З часом будуть стріли з різними додадковими бонусами, використовувати які можна буде з колчанів.
3, 4. Портал не встановлен, бо heartwood не заселен. Нема поки що і МЛовських квестів. Тому нема поки що багато чого. Теж поки що. Незабаром буде. Скріпти вже бачив, але їх потрібно ще пристасовувати до сервака.
5. У тварючек є таке значення, як мінімальний тамінг, який потрібен щоб її приручити. Доки навичка таймера меньш нього - шансів 0 і зростання буде 0. Як тільки він трішки перевищив цей минімум - шанс на приручення буде малим, але шанс зростання навички буде великим. А далі, чим більш твій таймінг від мінімуму, потрібного на тварюку, тим меньш шанс на зростання. Потрібно шукати більш складну. Я свого часу докачував на наймарах. Ну і на таймінгу встановлен антімакрос. На однієй тварюці неможливо більш ніж на 0,3 навичку підняти. Ну і неможливо хочь на скільки підійняти, якщо тварюка вже була цім персом приручена, чи якось іншим чином від побував її господарем. Буде писати, що вона вас згадала. Ще трішечки від того скільки вже господарей було у цій тварюці залежить.
Код:
						double minSkill = m_Creature.MinTameSkill + (m_Creature.Owners.Count * 6.0);

						if ( minSkill > -24.9 && CheckMastery( m_Tamer, m_Creature ) )
							minSkill = -24.9; // 50% at 0.0?

						minSkill += 24.9;

						if ( alreadyOwned || m_Tamer.CheckTargetSkill( SkillName.AnimalTaming, m_Creature, minSkill - 25.0, minSkill + 25.0 ) )
						{
							if ( m_Creature.Owners.Count == 0 ) // First tame
							{
								if ( m_Paralyzed )
									ScaleSkills( m_Creature, 0.86 ); // 86% of original skills if they were paralyzed during the taming
								else
									ScaleSkills( m_Creature, 0.90 ); // 90% of original skills

								if ( m_Creature.StatLossAfterTame )
									ScaleStats( m_Creature, 0.50 );
								
								if( Core.SE )
									AdjustSkillCaps( m_Creature );
							}

							if ( alreadyOwned )
							{
								m_Tamer.SendLocalizedMessage( 502797 ); // That wasn't even challenging.
							}
							else
							{
								m_Creature.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 502799, m_Tamer.NetState ); // It seems to accept you as master.
								m_Creature.Owners.Add( m_Tamer );
							}

							m_Creature.SetControlMaster( m_Tamer );
							m_Creature.IsBonded = false;
//	+	KOCTa. New Quests system
							m_Creature.SpawnerCreature = false;
//	end	KOCTa. New Quests system
						}
						else
						{
							m_Creature.PrivateOverheadMessage( MessageType.Regular, 0x3B2, 502798, m_Tamer.NetState ); // You fail to tame the creature.
						}
Ну і взагалі по зростанню скіла. На прикладі перевірки антімакроса по локації. Для інших антімакросів ( по ітему, мобу ) теж саме:
Код:
		public static bool Mobile_SkillCheckLocation( Mobile from, SkillName skillName, double minSkill, double maxSkill )
		{
			Skill skill = from.Skills[skillName];

			if ( skill == null )
				return false;

			double value = skill.Value;

			if ( value < minSkill )
				return false; // Too difficult
			else if ( value >= maxSkill )
				return true; // No challenge

			double chance = (value - minSkill) / (maxSkill - minSkill);

			Point2D loc = new Point2D( from.Location.X / LocationSize, from.Location.Y / LocationSize );
			return CheckSkill( from, skill, loc, chance );
		}
І місце куди все потрапляє:
Код:
		public static bool CheckSkill( Mobile from, Skill skill, object amObj, double chance )
		{
			if ( from.Skills.Cap == 0 )
				return false;

			bool success = ( chance >= Utility.RandomDouble() );
			double gc = (double)(from.Skills.Cap - from.Skills.Total) / from.Skills.Cap;
			gc += ( skill.Cap - skill.Base ) / skill.Cap;
			gc /= 2;

			gc += ( 1.0 - chance ) * ( success ? 0.5 : (Core.AOS ? 0.0 : 0.2) );
			gc /= 2;

			gc *= skill.Info.GainFactor;

			if ( gc < 0.01 )
				gc = 0.01;

			if ( from is BaseCreature && ((BaseCreature)from).Controlled )
				gc *= 2;

			if ( from.Alive && ( ( gc >= Utility.RandomDouble() && AllowGain( from, skill, amObj ) ) || skill.Base < 10.0 ) )
				Gain( from, skill );

			return success;
		}
і далі:
Код:
		public static void Gain( Mobile from, Skill skill )
		{
			if ( from.Region.IsPartOf( typeof( Regions.Jail ) ) )
				return;

			if ( from is BaseCreature && ((BaseCreature)from).IsDeadPet )
				return;

			if ( skill.SkillName == SkillName.Focus && from is BaseCreature )
				return;

			if ( skill.Base < skill.Cap && skill.Lock == SkillLock.Up )
			{
				int toGain = 1;

				if ( skill.Base <= 10.0 )
					toGain = Utility.Random( 4 ) + 1;

				Skills skills = from.Skills;

				if ( ( skills.Total / skills.Cap ) >= Utility.RandomDouble() )//( skills.Total >= skills.Cap )
				{
					for ( int i = 0; i < skills.Length; ++i )
					{
						Skill toLower = skills[i];

						if ( toLower != skill && toLower.Lock == SkillLock.Down && toLower.BaseFixedPoint >= toGain )
						{
							toLower.BaseFixedPoint -= toGain;
							break;
						}
					}
				}

				if ( (skills.Total + toGain) <= skills.Cap )
				{
					skill.BaseFixedPoint += toGain;
				}
			}

			if ( skill.Lock == SkillLock.Up )
			{
				SkillInfo info = skill.Info;

				if ( from.StrLock == StatLockType.Up && (info.StrGain / 33.3) > Utility.RandomDouble() )
					GainStat( from, Stat.Str );
				else if ( from.DexLock == StatLockType.Up && (info.DexGain / 33.3) > Utility.RandomDouble() )
					GainStat( from, Stat.Dex );
				else if ( from.IntLock == StatLockType.Up && (info.IntGain / 33.3) > Utility.RandomDouble() )
					GainStat( from, Stat.Int );
			}
		}
Там ще є частини вирішення коли навичка чи стат зростає за рахунок тих, що на зниження стоять, ну там нічого цікавого, тому щоб зайвого тут не було не буду викладати.
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: Re: ПОМОГИТЕ

Скорее всего за эти годы использования наш сервер и сервер разрабов стали практически разными вещами... Поэтому хотелось бы увидеть тот, что работает у нас.
В любом случае спасибо за ссылочку..
Я намагався корінним образом не втручатися там, де в цьому не було потреби. Але якщо так вже дивитись, то дійсно, у мене зараз є вже майже МЛовський серв, але простіше буде з нього на мій щось переносити, ніж навпаки. І то це безліч часу займе. Саме тому деяки новинки, і не потрапляють.
Стосовно бажання розібратися зі скриптінгом - дуже вітаю. Справ багато, а на все часу, нажаль, не висточає.
Як завдання можу запропонувати розібратися з алхімією. Спробувати створити зілля яке частково відновлює ману, додати його до меню алхіміка. А далі поступово можу долучити до роботи на робочих скріптах.
Ну і щоб було більш інфи ось скріпти ядра, маже 100% такого яке стоїть на сервері.
 

Вложения

Silence

Member
Re: Відповідь: Re: ПОМОГИТЕ

Доки навичка таймера меньш нього - шансів 0 і зростання буде 0. Як тільки він трішки перевищив цей минімум - шанс на приручення буде малим, але шанс зростання навички буде великим. А далі, чим більш твій таймінг від мінімуму, потрібного на тварюку, тим меньш шанс на зростання. Потрібно шукати більш складну. Я свого часу докачував на наймарах.
Я эти скрипт-коды как раз вчера и нашел в архивах с runuo.com ) Правда потребовался часик-другой, чтоб понять где они находятся... немного помучался, но в итоге нашел именно эти части, которые ты выложил) Только c методом Gain не ковырялся... там уже не столько важно, он только за повышение отвечает когда оно есть... зато нашел кучу других поправочек... например что можно отдельно выставить на каждый скилл коэффициент роста, а так же коэффициенты роста на статы при повышении скилла...
Но больше всего меня заинтересовал метод CheckSkill. Как видим в нём, помимо факторов на которые игрок повлиять не может, есть фактор повышения скила в зависимости от шанса на успешное применение. Так вот я вывел небольшую диаграмму показателя этого фактора, от шанса успешного применения. В зависимости от параметра Core.AOS выходит 2 линии.
Для просмотра изображения необходима регистрация

Ось Х - шанс на удачное применение скила, ось У - значение коэффициента... чем больше - тем больше шанс на повышение скила)
Выяснить что такое Core.AOS у меня не хватило терпения, скорее всего одна из серверных настроек, которая определяет будет ли даваться бонус к вероятности повышения скилла при его неудачном применении...

Вывод: лучше всего повышать на том, в чем шанс успеха будет примерно 20% в первом случае, и 50% во втором)

Для найтмаров вероятность успеха при скиле 120 составляет 50%, при скилле 105 - 20%. (начиная с 95.0 растет на 0,2% при увеличении скила на 0,1).
А еще можно было бы использовать более слабых существ, но у которых уже был чужой владелец) Надеюсь логика понятна;)
 

Silence

Member
Re: Відповідь: Re: ПОМОГИТЕ

Стосовно бажання розібратися зі скриптінгом - дуже вітаю. Справ багато, а на все часу, нажаль, не висточає.
Як завдання можу запропонувати розібратися з алхімією. Спробувати створити зілля яке частково відновлює ману, додати його до меню алхіміка. А далі поступово можу долучити до роботи на робочих скріптах.
Ну і щоб було більш інфи ось скріпти ядра, маже 100% такого яке стоїть на сервері.
Спасибо большое) Приступлю через три дня) А то изза Ультимы у меня защита бакалавра накроется медным тазом))
 

KOCTa

Dedywkо |Co100
Команда форума
Супер Модератор
Відповідь: ПОМОГИТЕ

Core.AOS, Core.SE вказують, чи підтримує серв відповідні аддони Ультіми. У нас підтримує, тому true. Core.ML поки що false.
В залежності вд того підримує чи ні будуть і відповідні налаштування і формули, які були введені у відповідних аддонах. Хоча там все так заплутано, що якщо Core.AOS і Core.SE відмініти, буде каша.
PS: Core.ML, після перегляду виявилось true. Але саме наповнювання змістом поки що мінімальне.
 
Последнее редактирование:

robinson

RPBBI corp. (Подпись)
!HELP! !ХЕЛП!

скажите пожалуйста, я пол года не играл в УО (я играл по инету на другом шарде) а теперь кода скачал 5 клиент мне пишет "какие-то проблемы с подключением" всё пробовал а оно не заходит... так вот, мне интересно это мой акк удалили или другая проблема? если другая то какая? спасибо за внимание! :arrow2: :cool:
 
Верх