Переключение оружия

Anything and all.

Moderators: Murderator+, Murderator

Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Переключение оружия

Post by Avel Mink »

В общем суть такова, есть два набора оружия, например щит с мечом и лук, нужен скриптик, по которому с помощью одной кнопки менялись бы эти два набора. То есть нажал - и если в руках первый набор то одеваеться второй и наоборот. Нашел в поиске только вот это:

Code: Select all

sub Equipt()
if uo.getlayer('_0x13B1')=="Rhand" then 
	uo.arm("1")
	else
	uo.usetype('0x13B1') 
endsub

но он работает односторонне то есть, если в руках не лук он его одевает, а вот менять его не arm("1") не хочет. Шард ДрВ. Буду оч благодарен
stickman
Posts: 139
Joined: 2005-04-05 04:13:24
Location: DRW
Contact:

Post by stickman »

а end if где?)
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Спасибо, но это все равно не помогло
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

на до не много логику скрипта переделать.
Логичней было бы сначала посмотреть что находится в правой руке.
uo.GetGraphic(uo.getObjAtLayer('RHand'))
дальше
одевать предмет лутше через equipt если надо одеть по типу.
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Avel Mink wrote:Спасибо, но это все равно не помогло
а ты сделал набор с именем "1"? если нет то сделай так, одень оружие
в клиенте напиши:

Code: Select all

,setarm 1
пробуй
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Kynep wrote:
Avel Mink wrote:Спасибо, но это все равно не помогло
а ты сделал набор с именем "1"? если нет то сделай так, одень оружие
в клиенте напиши:

Code: Select all

,setarm 1
пробуй
да не ну эт понятно, тут дело в скрипте
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Code: Select all

sub Equipt()

Var SwordType = "0x13BA"
Var SwordWrapedType = "0x13B9"

  If (UO.GetGraphic(UO.ObjAtLayer("Rhand")) == SwordType) OR (UO.GetGraphic(UO.ObjAtLayer("Rhand")) == SwordWrapedType) Then
    UO.Arm("Arbaletik")
  Else
    UO.Arm("ShitIMech")
  EndIf

endsub
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Спасибо за скрипт - работает, только можно его переделать так что б ышла проверка не на меч, а на лук, так как у лука один тип, а вот бегаю я не всегда с мечом. Буду оч благодарен
AGRS
Expert!
Posts: 1007
Joined: 2004-04-04 21:40:09
Contact:

Post by AGRS »

Как все запущено... :roll:

Переделаем так.

(какой тип у лука на ДРВ я понятия не имею, уже 2 года не играл, так что придется поработать самому и найти нужные типы)

Code: Select all

sub Equipt()
# Скрипт на цикличную смену наборов вооружения
# (C) AGRS, 2008

# Скрипт проверяет наличие в правой руке одного из типов основного оружия
# Если оно обнаружено, то экипируется набор сменного оружия
# В противном случае экипируется набор основного оружия
# Наборы оружия устанавливаются командой ,setarm
# Подробнее о команде: http://yoko.netroof.net/help/index.php?lang=rus&a=item&item=setarm

# Указать тип основного оружия (в правой руке) в нормальном состоянии
Var WeaponType = "0x13BA"

# Указать тип основного оружия (в правой руке) в перевернутом состоянии
# Если оружие уронить на пол, оно поворачивается на 90 градусов на большинстве шардов
# И его графический тип изменяется
Var WeaponWrapedType = "0x13B9" 

# Указать название набора с основным оружием
Var ArmDefault = "MainWeaponSet" 

# Указать название набора со сменным оружием
Var ArmToChange = "SecondaryWeaponSet" 

  If (UO.GetGraphic(UO.ObjAtLayer("Rhand")) == WeaponType) OR (UO.GetGraphic(UO.ObjAtLayer("Rhand")) == WeaponWrapedType) Then 
    UO.Arm(ArmToChange) 
  Else 
    UO.Arm(ArmDefault) 
  EndIf 

endsub 
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Спасибо за столь понятное обьяснение, но это можно было не писать, я сам не пойму в чем проблема, тип лука на дрв 0x13B1 и он не переворачивается на полу, то есть всего один тип

под 1 у меня допустим алеба, под 2 - лук, но он все равно не хочет переклучаться на алебу, лук берет, а второй набор ни в какую не хочет

если переделать его под лук получится

Code: Select all

sub Equipt() 
Var WeaponType = "0x13B1" 


if (UO.GetGraphic(UO.ObjAtLayer("Rhand")) == WeaponType)  Then 
    UO.Arm(1) 
  Else 
    UO.Arm(2) 
  EndIf 

endsub 
Last edited by Avel Mink on 2008-01-24 04:26:35, edited 2 times in total.
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Всеи спасибо нашел уже другой скрипт

Code: Select all

sub BowGet() 
uo.findtype ('0x13B1',-1,'backpack') 
if Uo.ContainerOf('finditem')==Uo.GetSerial('backpack') then 
UO.Setarm('BowArm') 
uo.waittargetobject('laststatus') 
uo.usetype('0x13B1') 
uo.print('Лук') 
else 
UO.Arm('BowArm') 
uo.print('Меч') 
end if 
UO.Attack('laststatus') 
end sub
Может мне терь кто-нить поможет с другим скриптиком на атаку ближайшего к тебе игрока, нашел вот такой скрипт, но в нем указан файддистанс 20 и поэтому он атакует не ближайшего, а рандомно в пределах 20

Code: Select all

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
#++++++++++++++-= Auto Attack Men\Women    =-++++++++++++++++ 
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

#+++++++++++++-= Auto Attack all players    =-+++++++++++++++ 
sub StartAttack1() ;биндим для атаки всех чаров 
StartAttack(1) 
end sub 
#++++++++++-= Auto Attack PK players only   =-+++++++++++++++ 
sub StartAttack0() ;биндим для атаки только ПК,серых и вражественной гильдии 
StartAttack(0) 
end sub 

sub StartAttack(status) 
UO.Ignore("self") 
Var FindOK=false,temp,mess,t=0,k 
DIM Friend[50] 
VAR endlist=6; последнее число в списке друзей 
Friend[0]="feduk" 
Friend[1]="SENYA" 
Friend[2]="Gurza" 
Friend[3]="ALF" 
Friend[4]="Flatra" 
Friend[5]="Antonio." 
Friend[6]="Freeman" 
uo.set('finddistance','20') 
 for t=0 to 1 
  repeat 
   uo.findtype("0x019"+str(t),"-1","ground") 
   temp=0 
   for k=0 to endlist 
    if Uo.GetName("finditem")==Friend[k] and uo.findcount()<>0 then 
     UO.Ignore("finditem") 
     k=endlist 
     temp=1 
    end if 
   next 
   if temp==0 and uo.findcount()<>0 then 
    if status==0 and uo.getnotoriety("finditem")>2 then 
     UO.addobject('Enemy',uo.getserial("finditem")) 
     Uo.print ("Curent target = "+uo.getname('Enemy')) 
     uo.ignore('Enemy') 
     return 
      else 
      if status==1 then 
       UO.addobject('Enemy',uo.getserial("finditem")) 
       Uo.print("Curent target = "+uo.getname('Enemy')) 
       uo.ignore('Enemy') 
       return 
        else 
         uo.ignore("finditem") 
      end if                         
     end if 
    end if 
  until uo.findcount()==0 
   if uo.findcount()==0 then 
    UO.IgnoreReset()       
   end if 
 next 
end sub 
Как писалось в посте где я его нашед нужно В цикле изменить файнддистанс, но как это сдеалать я не знаю
stickman
Posts: 139
Joined: 2005-04-05 04:13:24
Location: DRW
Contact:

Post by stickman »

Code: Select all

uo.set('finddistance','20')
тупо здесь меняешь число..
неужели так трудно пройтись хотябы глазами по скрипту в поисках пошожих букаф? %)
grundick
Posts: 258
Joined: 2006-11-25 17:44:44

Post by grundick »

Ты не прав ?)
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

grundick wrote:Ты не прав ?)
Интерестно в чем?
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

Если б все так было легко я б не спрашивал, мне нужен циклический файддистанс, то есть сначала ищет на растоянии 1тайл, потом 2 и т.д. до 20 пока не найдет кого-нить, а если находит то атачит
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Avel Mink wrote:Если б все так было легко я б не спрашивал, мне нужен циклический файддистанс, то есть сначала ищет на растоянии 1тайл, потом 2 и т.д. до 20 пока не найдет кого-нить, а если находит то атачит
Ипать, это 20 циклов. Зачем, када можно искать в 20 тайлах, и тупо игнорить если тебе не нужен объект.
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)
Kynep
Expert!
Posts: 1348
Joined: 2006-02-07 08:51:40
Location: г. Старый Оскол
Contact:

Post by Kynep »

Grin wrote:;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)
Помоему где то видел сриптег, который считает расстояние до обьекта, вроде в топике Полезности. Можно ешо заюзать.
Avel Mink
Posts: 48
Joined: 2007-12-30 14:23:05

Post by Avel Mink »

короч вот он, но что сним дальше делать и куда его пихать я не знаю, помогите пожалуйста знающие

Code: Select all

; Функция GetDistance возвращает расстояние до координат 
; (как UO.GetDistance - до объекта) 
; 
; Почему так - потому что учим математику :) 
; 
Sub GetDistance( X, Y ) 
   VAR A, B, C 
   A = abs( X - UO.GetX() ) 
   B = abs( Y - UO.GetY() ) 
   If A > B Then 
      C = A 
   Else 
      C = B 
   EndIf 
   Return C 
endsub
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Kynep wrote:
Grin wrote:;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)
Помоему где то видел сриптег, который считает расстояние до обьекта, вроде в топике Полезности. Можно ешо заюзать.
uo.getDistance() ?)

А ваще - циклически пробежаццо по всем найденным и выбрать ближайшего, имхо :)
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Post Reply