Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Proverka predmeta na chare
Proverka predmeta na chare
Zdrasvujte,
Kak proverit' esli predmet "A" nahodetca v rukah ?
Kak proverit' esli predmet "A" nahodetca v rukah ?
Re: Proverka predmeta na chare
Ardno wrote:Zdrasvujte,
Kak proverit' esli predmet "A" nahodetca v rukah ?
Code: Select all
function GetLayer(Obj : Cardinal) : Byte
Возвращает слой (layer), в котором находится обьект
Re: Proverka predmeta na chare
и для верности можно еще проверить Parent - должен быть равен Self, чтобы случайно не зацепить айтемы на слоях чужих чаровMacks wrote:Ardno wrote:Zdrasvujte,
Kak proverit' esli predmet "A" nahodetca v rukah ?Code: Select all
function GetLayer(Obj : Cardinal) : Byte Возвращает слой (layer), в котором находится обьект
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Proverka predmeta na chare
Sposibo vam oboim za vashi otveti i pomosh, no esli vam neslozhno nemoglibi prevesti mne ekzemplar po ispolzovaniju etih funkcij ?Vizit0r wrote:и для верности можно еще проверить Parent - должен быть равен Self, чтобы случайно не зацепить айтемы на слоях чужих чаровMacks wrote:Ardno wrote:Zdrasvujte,
Kak proverit' esli predmet "A" nahodetca v rukah ?Code: Select all
function GetLayer(Obj : Cardinal) : Byte Возвращает слой (layer), в котором находится обьект
Code: Select all
if GetLayer(ID) <> 0 then
begin
IF GetParent(ID) <> Self then
AddToSystemJournal('Айтем одет на чаре или в руках, но это не наш чар :)')
else
AddToSystemJournal('Айтем одет на чаре или в руках');
end
else
AddToSystemJournal('Айтем не одет на чаре и не в руках');
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Sposibo Vizit0r za premerVizit0r wrote:писал тут, поэтому могут быть ошибкиCode: Select all
if GetLayer(ID) <> 0 then begin IF GetParent(ID) <> Self then AddToSystemJournal('Айтем одет на чаре или в руках, но это не наш чар :)') else AddToSystemJournal('Айтем одет на чаре или в руках'); end else AddToSystemJournal('Айтем не одет на чаре и не в руках');

Code: Select all
FindType(ID, Self);
U menja esho 1 vopros, nadejus' vi ne ustali otve4at' na moi tupie voprosiVizit0r wrote:правильный вопрос. это и есть второй вариант
поискать, а потом взять слой найденного и сравнитьс нужным

Kak ja ponimaju GetLayer ishet objekt v vseh Layers kotorij vklu4aet v sebja
Code: Select all
function BpackLayer: Byte; // 0x15 - Сумка персонажа - Backpack
В паке искать надо через FindType, но он не ищет в подсумках, для поиска в подсумках надо юзать FindTypeEx, перед этим на подсумок(мешок,ящик,и.т.п) нужно обязательно сделать UseObject(ObjID) - тоесть открыть( если он еще никогда не открывался), иначе Стелс незнает что в нем есть.
если у тебя есть ID предмета, дальше с ним можно сваять такое:
Code: Select all
если предмет в подсумке то
UseObject(ID_OF_SUMKA)
ID:=FindType(Item,LastContainer);
либо
ID:=FindTypeEx(item,ItemColor,Backpack,true);
Code: Select all
if WearItem(RhandLayer, ID) then > предмет в правой руке
if ObjAtLayer(RhandLayer)=ID then > предмет в правой руке
if GetLayer(ID)=RhandLayer then > предмет в правой руке
неправильно понимаешь. он возвращает слой вещи, а не ищет ее.Ardno wrote: Kak ja ponimaju GetLayer ishet objekt v vseh Layers kotorij vklu4aet v sebja
no v mojom slu4ie po4emuta v backpacke UOSC ne smog najti tam predmetCode: Select all
function BpackLayer: Byte; // 0x15 - Сумка персонажа - Backpack
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Sposibo Vizit0r i WladL za vashu pomosh i vashi otveti
,
Ja na4erikal podobnij script kotorij v polne podhodet mne
On rabotaet kak nado no vidajet 1 oshibku kotoroju ja nemogu ponat' otkuda ona berjotca i tam esho 4 gramati4eskih oshibki kazis' ,
"Compiled succesfully" -> *Compiled successfully*
"finded" -> *found*
"Succesfully executed" -> *Successfully executed*
"successfuly" -> *successfully*

Ja na4erikal podobnij script kotorij v polne podhodet mne

Code: Select all
Program OnChar;
Const
ObjType = $1716; // Straw Tall Hat
Begin
FindTypeEx(ObjType,$FFFF,Self,true);
IF FindItem <> 0 then
Begin
if GetLayer(FindItem) <> 0 then
Begin
Addtosystemjournal('Found on Layer, UnEquipting.....');
UnEquip(GetLayer(FindItem));
End
else
Addtosystemjournal('Found in container, using.....');
UseObject(FindItem);
End
else
Addtosystemjournal('Nothing Found');
End.
"Compiled succesfully" -> *Compiled successfully*
"finded" -> *found*
"Succesfully executed" -> *Successfully executed*
"successfuly" -> *successfully*
Code: Select all
23:54:01 [UOSCT]: Compiling
23:54:01 [UOSCT]: Compiled succesfully
23:54:01 [UOSCT]: Found on Layer, UnEquipting.....
23:54:02 [UOSCT]: UseObject error: Object not finded.
23:54:02 [UOSCT]: Succesfully executed
23:54:02 [UOSCT]: Script tests.sc stopped successfuly
канеша неправильно.
так правильнее будет
в случае else выполняется только одна строкаif GetLayer(FindItem) <> 0 then
Begin
Addtosystemjournal('Found on Layer, UnEquipting.....');
UnEquip(GetLayer(FindItem));
End
else
Addtosystemjournal('Found in container, using.....');
UseObject(FindItem);
if GetLayer(FindItem) <> 0 then
Begin
Addtosystemjournal('Found on Layer, UnEquipting.....');
UnEquip(GetLayer(FindItem));
End
else
Begin
Addtosystemjournal('Found in container, using.....');
UseObject(FindItem);
End
так правильнее будет
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
так наверное лучше будет
Code: Select all
Program OnChar;
Const
ObjType = $1716; // Straw Tall Hat
Begin
if GetType(ObjAtLayer(RhandLayer))=ObjType then Begin
Addtosystemjournal('Found on Layer, UnEquipting.....');
UnEquip(RhandLayer);
end
else if FindTypeEx(ObjType,$FFFF,backpack,true)>0 then begin
Addtosystemjournal('Found in container, using.....');
UseObject(FindItem);
end
else Addtosystemjournal('Nothing Found');
End.