Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

DRW Статы [Strength, Dexterity, Intelligence]

Only working scripts
Post Reply
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Скрипты на прокачку статов.

Все скрипты построены на одном принципе. Использовании скилла необходимого для прокачки стата и надевании курсовых шмоток по мере необходимости.

Для всех скриптов вам понадобиться "мешок с курсовыми шмотками". Мне пришлось довольно долго гуглить список всех 14 вещей, и тот, что был найден - не особо корректный.
По сему выложу сюда список
1. Pickaxe или battle axe
2. Leather Gorget
3. Leather Cap
4. Leather Gloves
5. Leather Sleeves
6. Leather Leggings
7. Leather Tunic
8. Leather Skirt
9. Boots
10. Shirt
11. Robe
12. Cloak
13. Half Apron (Нужно скрафтить, 22.7% Tailoring)
14. Body Sash (Нужно скрафтить, 4.5% Tailoring)
Image
Мешок с курсой - это не бэкпак! Это отдельный bag, который нужно положить в backpack.

Собственно, сами скрипты:

:arrow: Сила на куклах
:arrow: Сила на Mining-е
:arrow: Сила на спаринге
:arrow: Ловкость на багофичах
:arrow: Интеллект на items identification
Last edited by Unholy on 01.02.2019 11:26, edited 7 times in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelegence]

Post by Unholy »

Strength, Сила на куклах
Подойдет, если у Вас не прокачан macefighting или swordsmanship выше 35.0
  • Берем в бекпак мешок с набором курсы. Снимаем ВСЕ курсовые шмотки и кладем в него.
Если не прокачан macefighting
  • Не забываем залочить macefighting
  • В наборе курсы не должно быть топора
  • В руку берем обычный, не курсовый a Smith's Hammer (обычный молоток)
  • Идем к тренировочным куклам
Если не прокачан swordsmanship
  • Не забываем залочить swordsmanship
  • В наборе курсы не должно быть кирки
  • В руку берем обычный, не курсовый Cleaver (тесак мясника)
  • Идем к тренировочным куклам
Скрипт расчитан на активное перемещение между куклами, и если Ваша ловкость опустится ниже 0 он будет стоять и тупить
для того, чтобы бить одну куклу и никуда не ходить
поменяйте конец скрипта на это:

Code: Select all

begin
	
	init;
	walkToDoll(idDoll1);
	repeat
		checkDressUpCursedItem;
		beatDoll(idDoll1);
		wait(1200);
		trueStr := Str + cursedStrength;
		AddToSystemJournal('Real Strength = ' + IntToStr(trueStr));	
	until ( trueStr >= targetStrength );
	Disconnect;
end.
в таком случае, указывать ID 2 и 3 куклы не обязательно
Скрипту нужно указать id мешочка с курсой, id-шники трех кукол стоящих рядом, и желаемое значение силы для прокачки.
Он будет по очереди подходить к каждой кукле и бить ее, при достижении strenghtToDressUp (по умолчанию 84) силы будет надевать следующую курсовую шмотку.
Для новичков
Авось и правда такие найдуться в 2019+.
Под куклами подразумевается Training Dummy скрипт писался под тех, что стоят в Britain ориентировочные координаты x:1588, y:1555
Цифра 84 взята не из потолка, а из официального описания сервера. Эмпирически было выяснено, что для macefighting написанное там вполне справедливо.

Code: Select all

program strDummy;
const 
	idBagWithCursedItems = $401AABA3; //мешочек заполненный курсовыми шмотками (и ничем другим!)

	idDoll1 = $4003B62E; // кукла раз
	idDoll2 = $4027022B; // кукла два
	idDoll3 = $4048C1AA; // кукла три

	targetStrength = 200; // Сколько силы должно в итоге получиться
	
	strenghtToDressUp = 84; //При достижении этого значения силы будет надеваться следующая курсовая вещь
	cursePower = 8; //Количество силы отнемаемой одной курсовой шмоткой
	
var 
	cursedItems: Array of Cardinal;
	cursedStrength, trueStr: Integer;
	
procedure walkToDoll(dollId: Cardinal);
begin
	NewMoveXY(getX(dollId),getY(dollId)+1,false,0,true);
	CheckLag(15000);
end;

procedure beatDoll(dollId: Cardinal);
	var ctime: TDateTime;
begin
	ctime := Now;
	repeat
		useObject(dollId);
		CheckLag(15000);
	until InJournalBetweenTimes('The item is in use', ctime, Now) <> -1;
end;
	
procedure checkDressUpCursedItem;
	var l: Cardinal;
begin
	l := Length(cursedItems);
	while (Str >= strenghtToDressUp) and (l > 0) do
	begin
		useObject(idBagWithCursedItems);
		CheckLag(15000);
		useObject(cursedItems[l - 1]);
		wait(500);
		SetLength(cursedItems, l - 1);
		l := Length(cursedItems);
		cursedStrength := cursedStrength + cursePower;
	end;
end;
	
procedure init;
begin
	cursedStrength := 0;
	useObject(idBagWithCursedItems);
	CheckLag(15000);
	if FindType(-1, idBagWithCursedItems) > 0 then
		cursedItems := GetFoundItems
	else
		cursedItems := [];
end;
	
begin
	
	init;
	
	repeat
		checkDressUpCursedItem;
		walkToDoll(idDoll1);
		beatDoll(idDoll1);
		UOSay('guards');
		walkToDoll(idDoll2);
		beatDoll(idDoll2);
		UOSay('guards');
		walkToDoll(idDoll3);
		beatDoll(idDoll3);
		UOSay('guards');
		trueStr := Str + cursedStrength;
		AddToSystemJournal('Real Strength = ' + IntToStr(trueStr));	
	until ( trueStr >= targetStrength );
	Disconnect;
end.
Last edited by Unholy on 29.01.2019 0:56, edited 5 times in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Dexterity, ловкость Musicianship, Peacemaking, Hiding

В бекпаке нам понадобится:
  • Мешок с набором курсы. Снимаем ВСЕ курсовые шмотки и кладем в него.
  • Любой музыкальный инструмент
Какой набор багофич drw использует скрипт описывать лень! Скажу две вещи.
Во-первых, он 100% работает! Не обращайте внимания на надпись "You are preoccupied with thoughts of battle.".
Во-вторых для других шардов, скорее всего будет иметь смысл не брать муз. инструмент и закомментировать\удалить следующие строки:

Code: Select all

	setWarmode(true);
и

Code: Select all

	UseSkill('Peacemaking');
Скрипту нужно указать id мешочка с курсой и желаемое значение ловкости для прокачки.
Он встанет в боевой режим будет бешено пытаться всех успокоить и спрятаться. При достижении strenghtToDressUp (по умолчанию 70) ловкости будет надевать следующую курсовую шмотку.

dexToDressUp = 70; взято из потолка. Можете поиграться с этой цифрой при желании. Но с ней до 150 докачивается спокойно и довольно быстро.

Сам код:

Code: Select all

program dexMadness;
const 
	idBagWithCursedItems = $401AABA3; //мешочек заполненный курсовыми шмотками (и ничем другим!)

	targetDex = 150; // Сколько ловкости должно в итоге получиться
	
	dexToDressUp = 70; //При достижении этого значения ловкости будет надеваться следующая курсовая вещь
	cursePower = 8; //Количество ловкости отнемаемой одной курсовой шмоткой
	
var 
	cursedItems: Array of Cardinal;
	cursedDex, trueDex, lastTrueDex: Integer;
	guardsTimer: TDateTime;
	
procedure checkDressUpCursedItem;
	var l: Cardinal;
begin
	l := Length(cursedItems);
	while (Dex >= dexToDressUp) and (l > 0) do
	begin
		useObject(idBagWithCursedItems);
		CheckLag(15000);
		useObject(cursedItems[l - 1]);
		wait(500);
		SetLength(cursedItems, l - 1);
		l := Length(cursedItems);
		cursedDex := cursedDex + cursePower;
	end;
end;
	
procedure init;
begin
	guardsTimer := IncSecond(Now, 2);
	cursedDex := 0;
	lastTrueDex := Dex;
	useObject(idBagWithCursedItems);
	CheckLag(15000);
	if FindType(-1, idBagWithCursedItems) > 0 then
		cursedItems := GetFoundItems
	else
		cursedItems := [];
end;
	
begin
	
	init;
	setWarmode(false);
	setWarmode(true);
	repeat
		if guardsTimer <= Now then
		begin
			UOSay('guards');
			guardsTimer := IncSecond(Now, 2);
			CheckLag(15000); 
		end;
		checkDressUpCursedItem;
		UseSkill('Peacemaking'); 
		UseSkill('Hiding');
		trueDex := Dex + cursedDex;	
		if (lastTrueDex <> trueDex) then
		begin
			lastTrueDex := trueDex;
			AddToSystemJournal('Real Dexterity = ' + IntToStr(trueDex));	
		end;
	until ( trueDex >= targetDex );
	Disconnect;
end.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Intelligence, интеллект Item Identification
  • Берем в бекпак мешок с набором курсы. Снимаем ВСЕ курсовые шмотки и кладем в него.
скрипт будет использовать скилл ItemId на мешок с курсой и надевать курсу по мере необходимости.

Эффективность скрипта под большим вопросом. Мне так и не удалось найти дзен в intToDressUp, если у кого-то это получилось, отпишитесь какое значение у этой константы вы выставили.

Code: Select all

program intTrainer;
const 
	idBagWithCursedItems = $401AABA3; //мешочек заполненный курсовыми шмотками (и ничем другим!)

	targetInt = 200; // Сколько интеллекта должно в итоге получиться
	
	intToDressUp = 20; //При достижении этого значения интеллекта будет надеваться следующая курсовая вещь
	cursePower = 8; //Количество интеллекта отнемаемой одной курсовой шмоткой
	
var 
	cursedItems: Array of Cardinal;
	cursedInt, trueInt, lastTrueInt: Integer;
	guardsTimer: TDateTime;
	
procedure checkDressUpCursedItem;
	var l: Cardinal;
begin
	l := Length(cursedItems);
	while (Int >= intToDressUp) and (l > 0) do
	begin
		useObject(idBagWithCursedItems);
		CheckLag(15000);
		useObject(cursedItems[l - 1]);
		wait(500);
		SetLength(cursedItems, l - 1);
		l := Length(cursedItems);
		cursedInt := cursedInt + cursePower;
	end;
end;
	
procedure init;
begin
	guardsTimer := IncSecond(Now, 2);
	cursedInt := 0;
	lastTrueInt := Dex;
	useObject(idBagWithCursedItems);
	CheckLag(15000);
	if FindType(-1, idBagWithCursedItems) > 0 then
		cursedItems := GetFoundItems
	else
		cursedItems := [];
end;
	
begin
	
	init;
	setWarmode(false);
	repeat
		if guardsTimer <= Now then
		begin
			UOSay('guards');
			guardsTimer := IncSecond(Now, 2);
			CheckLag(15000); 
			setWarmode(false);
		end;
		checkDressUpCursedItem;
		WaitTargetObject(idBagWithCursedItems);
		UseSkill('Item Identification');
		trueInt := Int + cursedInt;	
		if (lastTrueInt <> trueInt) then
		begin
			lastTrueInt := trueInt;
			AddToSystemJournal('Real Intellegence = ' + IntToStr(trueInt));	
		end;
	until ( trueInt >= targetInt );
end.
Last edited by Unholy on 29.01.2019 0:58, edited 1 time in total.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Strength, Сила на mining-е
Сразу оговорюсь, как по мне, метод - говно.
Почему?
Во-первых найти шахту, в которой вас не убьют, будет достаточно места, не придется левым чаром бежать и выпутывать основного из паутины практически не реально;
Во-вторых, лично у меня в фулле курсы получилось добить силу только до 75 (за 8 часов!). То есть, выше 187 сила таким способом не растет. Эксперименты с strenghtToDressUp успехом не увенчались;
  • Берем в бекпак мешок с набором курсы. Снимаем ВСЕ курсовые шмотки и кладем в него.
  • Также кладем в бэкпак лопату, которой чар будет копать. Даже если в вашем наборе курсы есть кирка копать он все-равно будет лопатами
    Почему?
    Потому, что мне лень отслеживать ситуации, когда эта кирка сломается и добавлять в алгоритм обязательное учитывание одной курсовой вещи.
Идем в шахту, где можно будет свободно обкапывать вокруг себя. Становимся в хайд (ручками!).
В скрипте указываем id мешка с курсой и желаемое кол-во силы.
Запускаем.
Руда, при достижении максимального веса будет падать на землю.
Менять эту механику смысле не вижу, т. к. если выбрасывать всю треш руду оставляя только выху у ПК будет больше соблазна вас убить, а так может даже пожалеют.

Code: Select all

program strDummy;
const 
	idBagWithCursedItems = $404114B5; //мешочек заполненный курсовыми шмотками (и ничем другим!)

	showelType1 = $0F39;
	showelType2 = $0F3A;
	
	targetStrength = 200; // Сколько силы должно в итоге получиться
	
	strenghtToDressUp = 74; //При достижении этого значения силы будет надеваться следующая курсовая вещь
	cursePower = 8; //Количество силы отнемаемой одной курсовой шмоткой
	
	M_nothing1 = 'There is no ore here to mine'; 
	M_nothing2 = 'That is too far'; 
	M_nothing3 = 'Try mining in rock'; 
	M_nothing4 = 'You cannot mine so close'; 
	M_nothing5 = 'You have no line'; 
	M_nothing6 = 'reach'; 
	M_fizzles1 = 'You loosen some rocks'; 
	M_needwait = 'You decide not to mine'; 
	M_success = 'You put the';

	var 
	cursedItems: Array of Cardinal;
	cursedStrength, trueStr, mineX, mineY: Integer;
		
procedure checkDressUpCursedItem;
	var l: Cardinal;
begin
	l := Length(cursedItems);
	while (Str >= strenghtToDressUp) and (l > 0) do
	begin
		useObject(idBagWithCursedItems);
		CheckLag(15000);
		useObject(cursedItems[l - 1]);
		wait(500);
		SetLength(cursedItems, l - 1);
		l := Length(cursedItems);
		cursedStrength := cursedStrength + cursePower;
	end;
end;
	
procedure init;
begin
	cursedStrength := 0;
	useObject(idBagWithCursedItems);
	CheckLag(15000);
	mineX := -4;
	mineY := -4;
	if FindType(-1, idBagWithCursedItems) > 0 then
		cursedItems := GetFoundItems
	else
		cursedItems := [];
end;
	
	
procedure mineNext;
	var x, y, k: Integer;
	var tx, ty, tz: Integer;
	var mn1, mn2, mn3, mn4, mn5, mn6, mf1, ms1 : Integer; 
	var ctime : TDateTime;
begin
	mineX := mineX + 1;
	if (mineX >= 5) then
	begin
		mineX := -4;
		mineY := mineY + 1;
		if (mineY >= 5) then mineY := -4;
	end;

	if TargetPresent then CancelTarget; 
	if WarMode = true then SetWarMode(false); 
	ctime := Now; 

	if (FindType(showelType1, backpack) > 0) then
		useObject( FindItem )
	else if (FindType(showelType2, backpack) > 0) then 
		useObject( FindItem );
		
	WaitForTarget(1000); 
	tx := GetX(self)+mineX;
	ty := GetY(self)+mineY;
	tz := GetZ(self);
	AddToSystemJournal('Mine at ' + IntToStr(tx) + ', ' + IntToStr(ty));
	If TargetPresent then TargetToTile(1342, tx, ty, tz); 
	k := 0; 
	repeat 
		wait(500); 
		k := k + 1; 
		CheckLag(150000);
		mn1 := InJournalBetweenTimes(M_nothing1, ctime, Now); 
		mn2 := InJournalBetweenTimes(M_nothing2, ctime, Now); 
		mn3 := InJournalBetweenTimes(M_nothing3, ctime, Now); 
		mn4 := InJournalBetweenTimes(M_nothing4, ctime, Now); 
		mn5 := InJournalBetweenTimes(M_nothing5, ctime, Now); 
		mn6 := InJournalBetweenTimes(M_nothing6, ctime, Now); 
		mf1 := InJournalBetweenTimes(M_fizzles1, ctime, Now); 
		ms1 := InJournalBetweenTimes(M_success, ctime, Now); 
	until (mn1<>-1) or (mn2<>-1) or (mn3<>-1) or (mn4<>-1) or (mn5<>-1) or (mn6<>-1) or (mf1<>-1) or (ms1<>-1) or Dead or (k > 60); 
	
end;	

begin
	
	init;
	
	repeat
		checkDressUpCursedItem;
		mineNext;
		trueStr := Str + cursedStrength;
		AddToSystemJournal('Real Strength = ' + IntToStr(trueStr));	
	until ( Str + cursedStrength >= targetStrength );
	Disconnect;
end.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Strength, Сила на спаринге
Идея простая, избиваем, хилим другого персонажа. Подойдет для прокачанных персонажей.

Для этого нам понадобится дополнительный персонаж-кукла на отдельном ip.
Ему можно либо дать в руки лук, либо надеть на него меч и щит и прокачать ему parrying.
Во втором случае на нем нужно запустить вот этот маленький скрипт:

Code: Select all

Program Pacifist;
begin
 repeat
    SetWarmode(false);
    wait(1000); 
 until dead;
end.
На основном персонаже понадобится:
  • Мешок с курсой, без оружия (топора, кирки и т. п.)
  • Несколько курсовых cleaver-ов в бэкпаке (не в мешке с курсой, а отдельно в бэкпаке)
  • Бинты
  • Мойка для бинтов
В скрипте нужно указать id мешка с курсой, id "куклы", и желаемое значение силы.

Подходим к "кукле" и запускаем скрипт:

Code: Select all

program strDummyFriend;
const
idBagWithCursedItems = $404114B5; //Ид мешка с курсовыми шмотками (БЕЗ ОРУЖИЯ!)
idFriend = $003CFC7B; // Ид друга для избиения
weaponType = $0EC2; //Тип курсованного оружия, по умолч. Cleaver. (Должен лежать не в мешке, а в backpack!)
targetStrength = 200; // До какого параметра необходимо прокачать силу

strenghtToDressUp = 100; //При каком значении силы будет надеваться следующая курсовая вещь
cursePower = 8; //Сколько силы отнимает одна курсовая вещь
washBasinType = $1008; // Тип мойки для бинтов.
bandageClearType = $0E21;
bandageBloodType = $0E20;

var
cursedItems: Array of Cardinal;
cursedStrength, trueStr: Integer;
firstTimeWearUp: boolean;

procedure washBandages;
begin
  if (FindType(bandageClearType, backpack) = 0) and (FindType(bandageBloodType, backpack) > 0) then
  begin
    AddToSystemJournal('Wash bandages');
    if (FindType(washBasinType, backpack) > 0) then
    begin
      WaitTargetObject(FindItem);
      UseType(bandageBloodType, $0000);
    end;
  end;
end;

procedure wearUp;
begin
  AddToSystemJournal('Wearing weapon');
  if FindType(weaponType, backpack) > 0 then
  Equip(RhandLayer, FindItem);
  if firstTimeWearUp = true then
  begin
    firstTimeWearUp := false;
  end;
  CheckLag(15000);
  Wait(500);
end;

procedure atackFriend;
begin
  AddToSystemJournal('Atack friend');
  repeat
    Attack(idFriend);
    CheckLag(15000);
    Wait(500);
  until GetHP(idFriend) < (GetMaxHP(idFriend) / 3); //minHealth = 33%
end;

procedure bandageFriend;
begin
  AddToSystemJournal('Heal friend');
  repeat
    washBandages;
    if (WarMode = true) then
    SetWarMode(false);
    WaitTargetObject(idFriend);
    UseType(bandageClearType, $0000);
    CheckLag(15000);
    Wait(500);
  until GetHP(idFriend) >= GetMaxHP(idFriend)
end;

procedure checkDressUpCursedItem;
var l: Cardinal;
begin
  l := Length(cursedItems);
  while (Str >= strenghtToDressUp) and (l > 0) do
  begin
    useObject(idBagWithCursedItems);
    CheckLag(15000);
    useObject(cursedItems[l - 1]);
    wait(500);
    SetLength(cursedItems, l - 1);
    l := Length(cursedItems);
    cursedStrength := cursedStrength + cursePower;
  end;
end;

procedure init;
begin
  cursedStrength := 0;
  firstTimeWearUp := true;
  useObject(idBagWithCursedItems);
  CheckLag(15000);
  if FindType(-1, idBagWithCursedItems) > 0 then
  cursedItems := GetFoundItems
  else
  cursedItems := [];
end;

begin
  init;
  repeat
    wearUp;
    checkDressUpCursedItem;
    atackFriend;
    bandageFriend;
    wait(1000);
    trueStr := Str + cursedStrength;
    AddToSystemJournal('Real Strength = ' + IntToStr(trueStr));
  until ( trueStr >= targetStrength );
  Disconnect;
end.
Unholy
Novice
Novice
Posts: 119
Joined: 23.06.2008 2:26
Location: DRW

Re: DRW Статы [Strength, Dexterity, Intelligence]

Post by Unholy »

Все, больше по этой теме мне сказать нечего. Комментируем, делимся опытом использования, обсуждаем.
Post Reply