Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Подскажите плиз, как правильно сделать процедурку смены шмота

Рег
6 Ноя 2016
Сообщения
89
Реакции
0
Не пойму как правильно реализовать процедуру переодевания,
можно ли просто так:


Код:
Puha:=xxx; //ID оружия
if Inventory.user.byid(Puha, item) and (not item.Equipped) do 
begin 
   Engine.UseItem(Puha,1);
   Delay(1000);
end;


Или же нужно в цикле делать по списку инвентаря, типа:


Код:
Puha:=xxx; //ID оружия
for i:=0 to Inventory.User.Count-1 do 
begin
  Item := Inventory.User.Items(i);
  if (Item.ID = Puha) and (not Item.Equipped) then 
  Engine.UseItem(Item); 
  Delay(200);
end;
 
Код:
Puha:=xxx; //ID оружия
while not Engine.Equipped('Название пухи') do 
begin 
   if (Inventory.user.byid(Puha, item)) then Engine.UseItem(Puha);
   Delay(1000);
end;
 
А ещё такой вопрос, если например мне нужно сменить 2 кольца или обе серьги, то для этого нужно будет сначала снять, потом по очереди надевать (использовать), или есть специальные команды, в какую конкретно дырку засунуть кольцо?
 
Надежнее пробежать по инвентарю, найти серьги по ИД отвечающие Equipped=true, получив их ОИД - снять обе, затем одеть нужные.
Код:
function UseItem(Obj: TL2Item; Pet: Boolean = false): Boolean; overload;
Снимать-одевать можешь и по очереди, но по инвентарю пробегать надо в любом случае, во избежание накладок.
 
вообщем, вот что у меня получилось, возможно коряво конечно, т.к. далеко не программист я, но работает чётко:

uses Classes, SysUtils;
var EquippedBool_0_39, EquippedBool_40_51: boolean;
Equipped_0_39,Equipped_40_51: array [0..20] of Cardinal;

procedure ChangeEquipped_0_39;
var i,j:integer;
begin
Engine.FaceControl(0,false);
for j:=0 to 20 do
if (Equipped_0_39[j]>0) or (Equipped_40_51[j]>0) then
for i:=0 to Inventory.User.Count-1 do
if ((Inventory.User.Items(i).ID=Equipped_0_39[j]) or (Inventory.User.Items(i).ID=Equipped_40_51[j])) and (ItemList.Items(i).Equipped) then
begin
Engine.UseItem(Inventory.User.Items(i).ID);
delay(200);
print('Снимаем вещь с ID='+IntToStr(Inventory.User.Items(i).ID));
end;

for j:=0 to 20 do
if Equipped_0_39[j]>0 then
for i:=0 to Inventory.User.Count-1 do
if ((Inventory.User.Items(i).ID=Equipped_0_39[j]) and (not ItemList.Items(i).Equipped)) then
begin
Engine.UseItem(Inventory.User.Items(i).ID);
delay(200);
print('Одеваем вещь с ID='+IntToStr(Inventory.User.Items(i).ID));
end;
Engine.FaceControl(0,true);
end;

procedure ChangeEquipped_40_51;
var i,j:integer;
begin
Engine.FaceControl(0,false);
for j:=0 to 20 do
if (Equipped_0_39[j]>0) or (Equipped_40_51[j]>0) then
for i:=0 to Inventory.User.Count-1 do
if ((Inventory.User.Items(i).ID=Equipped_0_39[j]) or (Inventory.User.Items(i).ID=Equipped_40_51[j])) and (ItemList.Items(i).Equipped) then
begin
Engine.UseItem(Inventory.User.Items(i).ID);
delay(200);
print('Снимаем вещь с ID='+IntToStr(Inventory.User.Items(i).ID));
end;
for j:=0 to 20 do
if Equipped_40_51[j]>0 then
for i:=0 to Inventory.User.Count-1 do
if (Inventory.User.Items(i).ID=Equipped_40_51[j]) and (not ItemList.Items(i).Equipped) then
begin
Engine.UseItem(Inventory.User.Items(i).ID);
delay(200);
print('Одеваем вещь с ID='+IntToStr(Inventory.User.Items(i).ID));
end;
Engine.FaceControl(0,true);
end;
begin
//Перечисляем вещи по уровням, что будем снимать/одевать
Equipped_0_39[0]:=xxxx1; //ID шмотки
Equipped_0_39[1]:=xxxx2; //ID шмотки
Equipped_0_39[2]:=xxxx3; //ID шмотки
Equipped_0_39[3]:=xxxx4; //ID шмотки
Equipped_0_39[4]:=xxxx5; //ID шмотки
Equipped_0_39[5]:=xxxx6; //ID шмотки

Equipped_40_51[0]:=xxxx1; //ID шмотки
Equipped_40_51[1]:=xxxx2; //ID шмотки
Equipped_40_51[2]:=xxxx3; //ID шмотки
Equipped_40_51[3]:=xxxx7; //ID шмотки
Equipped_40_51[4]:=xxxx8; //ID шмотки
Equipped_40_51[5]:=xxxx9; //ID шмотки

EquippedBool_0_39:=false;
EquippedBool_40_51:=false;
while 1=1 do
begin
if (user.level>0) and (user.level<40) and (EquippedBool_0_39=false) then
begin
ChangeEquipped_0_39;
EquippedBool_0_39:=true;
end;
if (user.level>39) and (user.level<52) and (EquippedBool_40_51=false) then
begin
ChangeEquipped_40_51;
EquippedBool_40_51:=true;
end;
end;
end.

Скрипт сначала снимает тот шмот, ID которого задали в начале (пробегает по всем массивам), затем одевает в соответствии с заданными ID. Процедурки на следующие грейды по аналогии
 
да по OID будет проще.
 
@Bingo7696, по OID у меня скрипт упорно отказывался юзать шмотку. Поэтому сделал по ID.
 
Назад
Сверху