Yoko
http://forum.yoko.com.ua/

Переключение оружия
http://forum.yoko.com.ua/viewtopic.php?f=20&t=13100
Page 1 of 2

Author:  Avel Mink [ 2008-01-21 06:44:33 ]
Post subject:  Переключение оружия

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

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

но он работает односторонне то есть, если в руках не лук он его одевает, а вот менять его не arm("1") не хочет. Шард ДрВ. Буду оч благодарен

Author:  stickman [ 2008-01-21 10:50:56 ]
Post subject: 

а end if где?)

Author:  Avel Mink [ 2008-01-21 14:01:24 ]
Post subject: 

Спасибо, но это все равно не помогло

Author:  Grin [ 2008-01-21 14:05:27 ]
Post subject: 

на до не много логику скрипта переделать.
Логичней было бы сначала посмотреть что находится в правой руке.
uo.GetGraphic(uo.getObjAtLayer('RHand'))
дальше
одевать предмет лутше через equipt если надо одеть по типу.

Author:  Kynep [ 2008-01-21 14:05:48 ]
Post subject: 

Avel Mink wrote:
Спасибо, но это все равно не помогло


а ты сделал набор с именем "1"? если нет то сделай так, одень оружие
в клиенте напиши:
Code:
,setarm 1


пробуй

Author:  Avel Mink [ 2008-01-22 05:51:15 ]
Post subject: 

Kynep wrote:
Avel Mink wrote:
Спасибо, но это все равно не помогло


а ты сделал набор с именем "1"? если нет то сделай так, одень оружие
в клиенте напиши:
Code:
,setarm 1


пробуй


да не ну эт понятно, тут дело в скрипте

Author:  AGRS [ 2008-01-22 11:03:15 ]
Post subject: 

Code:
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

Author:  Avel Mink [ 2008-01-23 03:54:48 ]
Post subject: 

Спасибо за скрипт - работает, только можно его переделать так что б ышла проверка не на меч, а на лук, так как у лука один тип, а вот бегаю я не всегда с мечом. Буду оч благодарен

Author:  AGRS [ 2008-01-23 10:56:51 ]
Post subject: 

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

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

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

Code:
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

Author:  Avel Mink [ 2008-01-24 03:55:00 ]
Post subject: 

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

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

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

Code:
sub Equipt() 
Var WeaponType = "0x13B1"


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

endsub

Author:  Avel Mink [ 2008-01-24 04:23:12 ]
Post subject: 

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

Code:
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:
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
#++++++++++++++-= 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


Как писалось в посте где я его нашед нужно В цикле изменить файнддистанс, но как это сдеалать я не знаю

Author:  stickman [ 2008-01-24 04:39:02 ]
Post subject: 

Code:
uo.set('finddistance','20')

тупо здесь меняешь число..
неужели так трудно пройтись хотябы глазами по скрипту в поисках пошожих букаф? %)

Author:  grundick [ 2008-01-24 06:26:08 ]
Post subject: 

Ты не прав ?)

Author:  Kynep [ 2008-01-24 13:56:51 ]
Post subject: 

grundick wrote:
Ты не прав ?)


Интерестно в чем?

Author:  Avel Mink [ 2008-01-26 16:55:40 ]
Post subject: 

Если б все так было легко я б не спрашивал, мне нужен циклический файддистанс, то есть сначала ищет на растоянии 1тайл, потом 2 и т.д. до 20 пока не найдет кого-нить, а если находит то атачит

Author:  Kynep [ 2008-01-26 16:58:53 ]
Post subject: 

Avel Mink wrote:
Если б все так было легко я б не спрашивал, мне нужен циклический файддистанс, то есть сначала ищет на растоянии 1тайл, потом 2 и т.д. до 20 пока не найдет кого-нить, а если находит то атачит


Ипать, это 20 циклов. Зачем, када можно искать в 20 тайлах, и тупо игнорить если тебе не нужен объект.

Author:  Grin [ 2008-01-26 19:22:04 ]
Post subject: 

;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)

Author:  Kynep [ 2008-01-26 19:32:49 ]
Post subject: 

Grin wrote:
;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)


Помоему где то видел сриптег, который считает расстояние до обьекта, вроде в топике Полезности. Можно ешо заюзать.

Author:  Avel Mink [ 2008-01-26 20:12:56 ]
Post subject: 

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

Code:
; Функция 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

Author:  Destruction [ 2008-01-26 20:32:31 ]
Post subject: 

Kynep wrote:
Grin wrote:
;) ему надо найти ближайшего;)
а что бы это сделать надо перебрать все объекты, циклов может быть куда больше;)


Помоему где то видел сриптег, который считает расстояние до обьекта, вроде в топике Полезности. Можно ешо заюзать.

uo.getDistance() ?)

А ваще - циклически пробежаццо по всем найденным и выбрать ближайшего, имхо :)

Page 1 of 2 All times are UTC+02:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/