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

Proverka predmeta na chare

тут можно задать вопрос по скриптингу
Post Reply
Ardno
Neophyte
Neophyte
Posts: 24
Joined: 15.08.2009 20:06

Proverka predmeta na chare

Post by Ardno »

Zdrasvujte,

Kak proverit' esli predmet "A" nahodetca v rukah ?
Macks
Apprentice
Apprentice
Posts: 250
Joined: 27.02.2006 22:23
Location: АоП - Age Of Power

Re: Proverka predmeta na chare

Post by Macks »

Ardno wrote:Zdrasvujte,

Kak proverit' esli predmet "A" nahodetca v rukah ?

Code: Select all


function GetLayer(Obj : Cardinal) : Byte

Возвращает слой (layer), в котором находится обьект

User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Proverka predmeta na chare

Post by Vizit0r »

Macks wrote:
Ardno wrote:Zdrasvujte,

Kak proverit' esli predmet "A" nahodetca v rukah ?

Code: Select all


function GetLayer(Obj : Cardinal) : Byte

Возвращает слой (layer), в котором находится обьект

и для верности можно еще проверить Parent - должен быть равен Self, чтобы случайно не зацепить айтемы на слоях чужих чаров
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Ardno
Neophyte
Neophyte
Posts: 24
Joined: 15.08.2009 20:06

Re: Proverka predmeta na chare

Post by Ardno »

Vizit0r wrote:
Macks wrote:
Ardno wrote:Zdrasvujte,

Kak proverit' esli predmet "A" nahodetca v rukah ?

Code: Select all


function GetLayer(Obj : Cardinal) : Byte

Возвращает слой (layer), в котором находится обьект

и для верности можно еще проверить Parent - должен быть равен Self, чтобы случайно не зацепить айтемы на слоях чужих чаров
Sposibo vam oboim za vashi otveti i pomosh, no esli vam neslozhno nemoglibi prevesti mne ekzemplar po ispolzovaniju etih funkcij ?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Code: Select all

if GetLayer(ID) <> 0 then
  begin
     IF GetParent(ID) <> Self then
        AddToSystemJournal('Айтем одет на чаре или в руках, но это не наш чар :)')
     else 
        AddToSystemJournal('Айтем одет на чаре или в руках');
  end
else
  AddToSystemJournal('Айтем не одет на чаре и не в руках');
писал тут, поэтому могут быть ошибки
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Ardno
Neophyte
Neophyte
Posts: 24
Joined: 15.08.2009 20:06

Post by Ardno »

Vizit0r wrote:

Code: Select all

if GetLayer(ID) <> 0 then
  begin
     IF GetParent(ID) <> Self then
        AddToSystemJournal('Айтем одет на чаре или в руках, но это не наш чар :)')
     else 
        AddToSystemJournal('Айтем одет на чаре или в руках');
  end
else
  AddToSystemJournal('Айтем не одет на чаре и не в руках');
писал тут, поэтому могут быть ошибки
Sposibo Vizit0r za premer :), u menja esho vopros, v 4em razdnitca tem ekzemplarom i ?

Code: Select all

FindType(ID, Self);
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

правильный вопрос. это и есть второй вариант :)
поискать, а потом взять слой найденного и сравнитьс нужным
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Ardno
Neophyte
Neophyte
Posts: 24
Joined: 15.08.2009 20:06

Post by Ardno »

Vizit0r wrote:правильный вопрос. это и есть второй вариант :)
поискать, а потом взять слой найденного и сравнитьс нужным
U menja esho 1 vopros, nadejus' vi ne ustali otve4at' na moi tupie voprosi :)

Kak ja ponimaju GetLayer ishet objekt v vseh Layers kotorij vklu4aet v sebja

Code: Select all

function BpackLayer: Byte; // 0x15 - Сумка персонажа - Backpack 
no v mojom slu4ie po4emuta v backpacke UOSC ne smog najti tam predmet
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

В паке искать надо через FindType, но он не ищет в подсумках, для поиска в подсумках надо юзать FindTypeEx, перед этим на подсумок(мешок,ящик,и.т.п) нужно обязательно сделать UseObject(ObjID) - тоесть открыть( если он еще никогда не открывался), иначе Стелс незнает что в нем есть.

Code: Select all

если предмет в подсумке то

UseObject(ID_OF_SUMKA)

ID:=FindType(Item,LastContainer);
либо
ID:=FindTypeEx(item,ItemColor,Backpack,true);
если у тебя есть ID предмета, дальше с ним можно сваять такое:

Code: Select all

if WearItem(RhandLayer, ID) then > предмет в правой руке
if ObjAtLayer(RhandLayer)=ID then  > предмет в правой руке
if GetLayer(ID)=RhandLayer then  > предмет в правой руке
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Ardno wrote: Kak ja ponimaju GetLayer ishet objekt v vseh Layers kotorij vklu4aet v sebja

Code: Select all

function BpackLayer: Byte; // 0x15 - Сумка персонажа - Backpack 
no v mojom slu4ie po4emuta v backpacke UOSC ne smog najti tam predmet
неправильно понимаешь. он возвращает слой вещи, а не ищет ее.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Ardno
Neophyte
Neophyte
Posts: 24
Joined: 15.08.2009 20:06

Post by Ardno »

Sposibo Vizit0r i WladL za vashu pomosh i vashi otveti :),

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.
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*

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
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

канеша неправильно.
if GetLayer(FindItem) <> 0 then
Begin
Addtosystemjournal('Found on Layer, UnEquipting.....');
UnEquip(GetLayer(FindItem));
End
else
Addtosystemjournal('Found in container, using.....');
UseObject(FindItem);
в случае else выполняется только одна строка
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

так правильнее будет
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
WladL
Apprentice
Apprentice
Posts: 240
Joined: 27.07.2009 17:21
Location: DRW
Contact:

Post by WladL »

так наверное лучше будет

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.
Post Reply