Сборник магии

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
Виталь
Posts: 97
Joined: 2005-08-09 23:16:57
Contact:

Сборник магии

Post by Виталь »

Автолоад разросся до четырех тысяч строк и появилась идея свернуть касты в один основной скрипт и несколько определяющих - с соответствующими параметрами.

По принципу скрипта на алхимию:

Code: Select all

sub Alchemy(reagent, min_reg, choice)
   while UO.Count('0x0F0E','0x0000')>0 AND UO.Count(reagent)>=min_reg
      UO.DeleteJournal()
      UO.Exec("waitmenu 'What sort of potion do you want to' "+choice)
      UO.UseType(reagent)
      while NOT UO.InJournal("You put") AND NOT UO.InJournal("You toss the failed")
         wait(300)
      wend
   wend
   gong(2)
end sub

sub makedpoison()
   alchemy('0x0F88', 8, "'Deadly Poison'")
end sub

sub makeinvis()
   alchemy('0x0F91', 4, "'Invisibility'")
end sub

sub maketm()
   alchemy('0x0F87', 6, "'Total Mana'")
end sub


Собсна, хочу поинтересоваться, — есть ли такое уже, и, если нет, удобно ли таким будет пользоваться?
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Code: Select all

sub Cast(name, mana_scroll, mana_cast, type_scroll, id)

Думаю вот такое придётся писать, где:
name-Имя заклинания
mana_scroll-Минимальное кол-во маны для каста со свитка
mana_cast-Минимальное кол-во маны для каста с книги
type_scroll-Тип свитка
id-На кого кастуем(self/laststatus)
Если ты конечно имеешь ввиду следующий принцип построение скрипта:

Code: Select all

если есть свиток тогда
 если есть мана на свиток
  кастуй со свитка
 иначе
  сообщение
иначе
 если есть мана на каст с книги
  кастуй с книги
 иначе
  сообщение

Любителям чтото говорить после каста (*Подожди ка*,*Kal Ort Por* ...) можно ещё один параметр строковый передавать. Дальше уже воля фантазии
Виталь
Posts: 97
Joined: 2005-08-09 23:16:57
Contact:

Post by Виталь »

Какбе работает.
Надеюсь, со свитками не промахнулся.

Кому важна красивая табуляция, ссылка на текстовый документ:
http://orden-armageddon.org/files/scripts/magicbook.sc

Code: Select all

# Книга магии для Dragon World - http://drw.ru
# Сходил с ума: Vitali De Vir
# Редакция от: 2008-06-07
#
# Каст по заданному таргету. WT - With Target
# cast_wt(scrollmana, castmana, drinkmana, scroll, cast, target, msgStatScr, msgStat)
#
# Каст по ручному таргету. WO - Without Target
# cast_wo(scrollmana, castmana, drinkmana, scroll, cast, msgStatScr, msgStat)
#
# Заметки.
# Хорошо смотрится в текстовом редакторе под шрифтом Lucida Console.
# Вносите вклады: http://forum.yoko.com.ua/viewtopic.php?t=13635

# First Circle
sub mgwt_clumsy()
   cast_wt(5,  10, 1, '0x1F2D', 'Clumsy',      'lastattack',    "Clumsy by scroll!",       "Clumsy NOT by scroll!")
end sub

sub mgwo_createfood()
   cast_wo(8,  16, 1, '0x1F2E', 'Create Food',         "Create Food by scroll!",    "Create Food NOT by scroll!")
end sub

sub mgwt_feeblemind()
   cast_wt(5,  10, 1, '0x1F2F', 'Feeblemind',   'lastattack',    "Feeblemind by scroll!",    "Feeblemind NOT by scroll!")
end sub

sub mgwt_heal()
   cast_wt(5,  10, 1, '0x1F30', 'Heal',      'self',      "Heal by scroll!",       "Heal NOT by scroll!")
end sub

sub mgwt_magicarrow()
   cast_wt(6,  12, 1, '0x1F31', 'Magic Arrow',    'lastattack',    "Magic Arrow by scroll!",    "Magic Arrow NOT by scroll!")
end sub

sub mgwt_magicarrow_ls()
   cast_wt(6,  12, 1, '0x1F31', 'Magic Arrow',    'laststatus',    "Magic Arrow by scroll!",    "Magic Arrow NOT by scroll!")
end sub

sub mgwo_nightsight()
   cast_wo(8,  16, 1, '0x1F32', 'Night Sight',          "Night Sight by scroll!",    "Night Sight NOT by scroll!")
end sub

sub mgwt_reactivearmor()
   cast_wt(5,  10, 1, '0x1F33', 'Reactive Armor',   'self',      "Reactive Armor by scroll!",    "Reactive Armor NOT by scroll!")
end sub

sub mgwt_weaken()
   cast_wt(8,  16, 1, '0x1F34', 'Weaken',       'lastattack',    "Weaken by scroll!",       "Weaken NOT by scroll!")
end sub

   
# Second Circle
sub mgwt_agility()
   cast_wt(8,  16, 1, '0x1F35', 'Agility',      'self',      "Agility by scroll!",       "Agility NOT by scroll!")
end sub

sub mgwt_cunning()
   cast_wt(8,  16, 1, '0x1F36', 'Cunning',      'self',      "Cunning by scroll!",       "Cunning NOT by scroll!")
end sub

sub mgwt_cure_sf()
   cast_wt(8,  16, 1, '0x1F37', 'Cure',      'self',      "Cure by scroll!",       "Cure NOT by scroll!")
end sub

sub mgwt_cure_ls()
   cast_wt(8,  16, 1, '0x1F37', 'Cure',      'laststatus',   "Cure by scroll!",       "Cure NOT by scroll!")
end sub

sub mgwt_harm()
   cast_wt(6,  12, 1, '0x1F38', 'Harm',      'lastattack',    "Harm by scroll!",       "Harm NOT by scroll!")
end sub

sub mgwo_magictrap()
   cast_wo(6,  12, 1, '0x1F39', 'Magic Trap',         "Magic Trap by scroll!",    "Magic Trap NOT by scroll!")
end sub

sub mgwo_magicuntrap()
   cast_wo(6,  12, 1, '0x1F3A', 'Magic Untrap',         "Magic Untrap by scroll!",    "Magic Untrap NOT by scroll!")
end sub

sub mgwt_protection()
   cast_wt(8,  16, 1, '0x1F3B', 'Protection',   'self',      "Protection by scroll!",    "Protection NOT by scroll!")
end sub

sub mgwt_strength()
   cast_wt(8,  16, 1, '0x1F3C', 'Strength',   'self',      "Strength by scroll!",       "Strength NOT by scroll!")
end sub


# Third Circle
sub mgwo_bless()
   cast_wo(10, 20, 1, '0x1F3D', 'Bless',            "Bless by scroll!",       "Bless NOT by scroll!")
end sub

sub mgwt_fireball()
   cast_wt(7,  14, 1, '0x1F3E', 'Fireball',   'lastattack',    "Fireball by scroll!",       "Fireball NOT by scroll!")
end sub

sub mgwo_magiclock()
   cast_wo(10, 20, 1, '0x1F3F', 'Magic Lock',         "Magic Lock by scroll!",    "Magic Lock NOT by scroll!")
end sub

sub mgwt_poison()
   cast_wt(7,  14, 1, '0x1F40', 'Poison',      'lastattack',    "Poison by scroll!",       "Poison NOT by scroll!")
end sub

sub mgwo_telekinesis()
   cast_wo(10, 20, 1, '0x1F41', 'Telekinesis',          "Telekinesis by scroll!",    "Telekinesis NOT by scroll!")
end sub

sub mgwo_teleport()
   cast_wo(7,  14, 1, '0x1F42', 'Teleport',         "Teleport by scroll!",       "Teleport NOT by scroll!")
end sub

sub mgwo_unlock()
   cast_wo(7,  14, 1, '0x1F43', 'Unlock',            "Unlock by scroll!",       "Unlock NOT by scroll!")
end sub

sub mgwo_wallofstone()
   cast_wo(10, 20, 1, '0x1F44', 'Wall of Stone',         "Wall of Stone by scroll!",    "Wall of Stone NOT by scroll!")
end sub

sub mgwt_wallofstone()
   cast_wt(10, 20, 1, '0x1F44', 'Wall of Stone',   'backpack',   "Wall of Stone by scroll!",    "Wall of Stone NOT by scroll!")
end sub


# Fourth Circle
sub mgwt_archcure()
   cast_wt(12, 24, 1, '0x1F45', 'Arch Cure',   'self',      "Arch Cure by scroll!",      "Arch Cure NOT by scroll!")
end sub

sub mgwt_archprotection()
   cast_wt(12, 24, 1, '0x1F46', 'Arch Protection',   'self',      "Arch Protection by scroll!",    "Arch Protection NOT by scroll!")
end sub

sub mgwo_curse()
   cast_wo(8,  16, 1, '0x1F47', 'Curse',            "Curse by scroll!",      "Curse NOT by scroll!")
end sub

sub mgwt_curse()
   cast_wt(8,  16, 1, '0x1F47', 'Curse',      'lastattack',   "Curse by scroll!",      "Curse NOT by scroll!")
end sub

sub mgwo_firefield()
   cast_wo(12, 24, 1, '0x1F48', 'Fire Field',         "Fire Field by scroll!",   "Fire Field NOT by scroll!")
end sub

sub mgwt_firefield()
   cast_wt(12, 24, 1, '0x1F48', 'Fire Field',   'backpack',   "Fire Field by scroll!",   "Fire Field NOT by scroll!")
end sub

sub mgwt_greaterheal_sf()
   cast_wt(8,  16, 1, '0x1F49', 'Greater Heal',   'self',      "Greater Heal by scroll!",    "Greater Heal NOT by scroll!")
end sub

sub mgwt_greaterheal_ls()
   cast_wt(8,  16, 1, '0x1F49', 'Greater Heal',   'laststatus',   "Greater Heal by scroll!",    "Greater Heal NOT by scroll!")
end sub

sub mgwt_lightning()
   cast_wt(8,  16, 1, '0x1F4A', 'Lightning',   'lastattack',   "Lightning by scroll!",    "Lightning NOT by scroll!")
end sub

sub mgwt_manadrain()
   cast_wt(8,  16, 1, '0x1F4B', 'Mana Drain',   'lastattack',   "Mana Drain by scroll!",   "Mana Drain NOT by scroll!")
end sub

sub mgwo_recall()
   cast_wo(10, 20, 1, '0x1F4C', 'Recall',            "Recall by scroll!",       "Recall NOT by scroll!")
end sub


# Fifth Circle
sub mgwo_bladespirit()
   cast_wo(12, 24, 1, '0x1F4D', 'Blade Spirit',         "Blade Spirit by scroll!",   "Blade Spirit NOT by scroll!")
end sub

sub mgwt_bladespirit()
   cast_wt(12, 24, 1, '0x1F4D', 'Blade Spirit',   'backpack',   "Blade Spirit by scroll!",   "Blade Spirit NOT by scroll!")
end sub

sub mgwo_dispelfield()
   cast_wo(7,  14, 1, '0x1F4E', 'Dispel Field',         "Dispel Field by scroll!",   "Dispel Field NOT by scroll!")
end sub

sub mgwt_incognito()
   cast_wt(10, 20, 1, '0x1F4F', 'Incognito',   'self',      "Incognito by scroll!",      "Incognito NOT by scroll!")
end sub

sub mgwt_magicreflection()
   cast_wt(9,  18, 1, '0x1F50', 'Magic Reflection','self',      "Magic Reflection by scroll!",   "Magic Reflection NOT by scroll!")
end sub

sub mgwt_mindblast()
   cast_wt(9,  18, 1, '0x1F51', 'Mind Blast',   'lastattack',   "Mind Blast by scroll!",   "Mind Blast NOT by scroll!")
end sub

sub mgwt_paralyze()
   cast_wt(9,  18, 1, '0x1F52', 'Paralyze',   'lastattack',   "Paralyze by scroll!",      "Paralyze NOT by scroll!")
end sub

sub mgwo_poisonfield()
   cast_wo(12, 24, 1, '0x1F53', 'Poison Field',         "Poison Field by scroll!",   "Poison Field NOT by scroll!")
end sub

sub mgwt_poisonfield()
   cast_wt(12, 24, 1, '0x1F53', 'Poison Field',   'backpack',   "Poison Field by scroll!",   "Poison Field NOT by scroll!")
end sub

sub mgwo_summoncreature()
   cast_wo(12, 24, 1, '0x1F54', 'Summon creature',         "Summon creature by scroll!",   "Summon creature NOT by scroll!")
end sub


# Sixth Circle
sub mgwo_dispel()
   cast_wo(8,  16, 1, '0x1F55', 'Dispel',            "Dispel by scroll!",      "Dispel NOT by scroll!")
end sub

sub mgwt_dispel()
   cast_wt(8,  16, 1, '0x1F55', 'Dispel',      'self',      "Dispel by scroll!",      "Dispel NOT by scroll!")
end sub

sub mgwt_energybolt()
   cast_wt(10, 20, 1, '0x1F56', 'Energy Bolt',   'lastattack',   "Energy Bolt by scroll!",   "Energy Bolt NOT by scroll!")
end sub

sub mgwt_explosion()
   cast_wt(10, 20, 1, '0x1F57', 'Explosion',   'lastattack',   "Explosion by scroll!",      "Explosion NOT by scroll!")
end sub

sub mgwo_invisibility()
   cast_wo(10, 20, 1, '0x1F58', 'Invisibility',         "Invisibility by scroll!",   "Invisibility NOT by scroll!")
end sub

sub mgwo_mark()
   cast_wo(17, 33, 1, '0x1F59', 'Mark',            "Mark by scroll!",      "Mark NOT by scroll!")
end sub

sub mgwo_masscurse()
   cast_wo(12, 24, 1, '0x1F5A', 'Mass Curse',         "Mass Curse by scroll!",   "Mass Curse NOT by scroll!")
end sub

sub mgwo_paralyzefield()
   cast_wo(12, 24, 1, '0x1F5B', 'Paralyze Field',         "Paralyze Field by scroll!",   "Paralyze Field NOT by scroll!")
end sub

sub mgwt_paralyzefield()
   cast_wt(12, 24, 1, '0x1F5B', 'Paralyze Field',   'backpack',   "Paralyze Field by scroll!",   "Paralyze Field NOT by scroll!")
end sub

sub mgwo_reveal()
   cast_wo(10, 20, 1, '0x1F5C', 'Reveal',            "Reveal by scroll!",      "Reveal NOT by scroll!")
end sub


# Seventh Circle
sub mgwt_chainlightning()
   cast_wt(12, 24, 1, '0x1F5D', 'Chain Lightning',   'self',      "Chain Lightning by scroll!",   "Chain Lightning NOT by scroll!")
end sub

sub mgwo_energyfield()
   cast_wo(12, 24, 1, '0x1F5E', 'Energy Field',         "Energy Field by scroll!",   "Energy Field NOT by scroll!")
end sub

sub mgwt_energyfield()
   cast_wt(12, 24, 1, '0x1F5E', 'Energy Field',   'backpack',   "Energy Field by scroll!",   "Energy Field NOT by scroll!")
end sub

sub mgwt_flamestrike()
   cast_wt(11, 22, 1, '0x1F5F', 'Flame Strike',   'lastattack',   "Flame Strike by scroll!",   "Flame Strike NOT by scroll!")
end sub

sub mgwo_gatetravel()
   cast_wo(14, 27, 1, '0x1F60', 'Gate Travel',         "Gate Travel by scroll!",   "Gate Travel NOT by scroll!")
end sub

sub mgwt_manavampire()
   cast_wt(11, 22, 1, '0x1F61', 'Mana Vampire',   'lastattack',   "Mana Vampire by scroll!",   "Mana Vampire NOT by scroll!")
end sub

sub mgwt_massdispel()
   cast_wt(11, 22, 1, '0x1F62', 'Mass Dispel',   'self',      "Mass Dispel by scroll!",   "Mass Dispel NOT by scroll!")
end sub

sub mgwt_meteorswarm()
   cast_wt(12, 24, 1, '0x1F63', 'Meteor Swarm',   'self',      "Meteor Swarm by scroll!",   "Meteor Swarm NOT by scroll!")
end sub

sub mgwo_polymorph()
   cast_wo(12, 24, 1, '0x1F64', 'Polymorph',         "Polymorph by scroll!",      "Polymorph NOT by scroll!")
end sub


# Eighth Circle
sub mgwo_earthquake()
   cast_wo(14, 27, 1, '0x1F65', 'Earthquake',         "Earthquake by scroll!",   "Earthquake NOT by scroll!")
end sub

sub mgwo_energyvortex()
   cast_wo(14, 27, 1, '0x1F66', 'Energy Vortex',         "Energy Vortex by scroll!",   "Energy Vortex NOT by scroll!")
end sub

sub mgwt_energyvortex()
   cast_wt(14, 27, 1, '0x1F66', 'Energy Vortex',   'backpack',   "Energy Vortex by scroll!",   "Energy Vortex NOT by scroll!")
end sub

sub mgwo_resurrection()
   cast_wo(12, 24, 1, '0x1F67', 'Resurrection',         "Resurrection by scroll!",   "Resurrection NOT by scroll!")
end sub

sub mgwt_resurrection()
   cast_wt(12, 24, 1, '0x1F67', 'Resurrection',   'laststatus',   "Resurrection by scroll!",   "Resurrection NOT by scroll!")
end sub

sub mgwo_airelemental()
   cast_wo(14, 27, 1, '0x1F68', 'Air Elemental',         "Air Elemental by scroll!",   "Air Elemental NOT by scroll!")
end sub

sub mgwo_daemon()
   cast_wo(14, 27, 1, '0x1F69', 'Daemon',            "Daemon by scroll!",      "Daemon NOT by scroll!")
end sub

sub mgwo_earthelemental()
   cast_wo(14, 27, 1, '0x1F6A', 'Earth Elemental',         "Earth Elemental by scroll!",   "Earth Elemental NOT by scroll!")
end sub

sub mgwo_fireelemental()
   cast_wo(14, 27, 1, '0x1F6B', 'Fire Elemental',         "Fire Elemental by scroll!",   "Fire Elemental NOT by scroll!")
end sub

sub mgwo_waterelemental()
   cast_wo(14, 27, 1, '0x1F6C', 'Water Elemental',         "Water Elemental by scroll!",   "Water Elemental NOT by scroll!")
end sub

# Main Procedures
sub cast_wt(scrollmana, castmana, drinkmana, scroll, cast, target, msgStatScr, msgStat)
   # Vitali De Vir
   uo.findtype(scroll,'-1','my')         
   if uo.findcount() then
      uo.print('Scroll found!')
      if uo.mana>=scrollmana then
         uo.waittargetobject(target)
         uo.usetype(scroll)
         uo.print(msgStatScr)
      else
         if drinkmana==1 then
            uo.findtype('0x0F0E','0x09DF','my')
            if uo.findcount() then
               uo.usetype('0x0F0E','0x09DF')      # drink total mana
               wait(200)
               uo.waittargetobject(target)
               uo.usetype(scroll)
               uo.print(msgStatScr)
               uo.print("Total Mana drunk!")
            else
               uo.print("You have scrolls, but no mana potions left!")
            endif
         else
            uo.print("Low mana!")
         endif
      endif
   else
      if uo.mana>=castmana then
         uo.waittargetobject(target)
         uo.cast(cast)
         uo.print(msgStat)
      else
         if drinkmana==1 then
            uo.findtype('0x0F0E','0x09DF','my')
            if uo.findcount() then
               uo.usetype('0x0F0E','0x09DF')      # drink total mana
               wait(200)
               uo.waittargetobject(target)
               uo.cast(cast)
               uo.print(msgStat)
               uo.print("Total Mana drunk!")
            else
               uo.print("No Total Mana potions found!")
               uo.print("And no mana, sorry :D")
            endif
         else
            uo.print("Low mana!")
         endif
      endif
   endif
end sub

sub cast_wo(scrollmana, castmana, drinkmana, scroll, cast, msgStatScr, msgStat)
   # Vitali De Vir
   uo.findtype(scroll,'-1','my')         
   if uo.findcount() then
      uo.print('Scroll found!')
      if uo.mana>=scrollmana then
         uo.usetype(scroll)
         uo.print(msgStatScr)
      else
         if drinkmana==1 then
            uo.findtype('0x0F0E','0x09DF','my')
            if uo.findcount() then
               uo.usetype('0x0F0E','0x09DF')      # drink total mana
               wait(200)
               uo.usetype(scroll)
               uo.print(msgStatScr)
               uo.print("Total Mana drunk!")
            else
               uo.print("You have scrolls, but no mana potions left!")
            endif
         else
            uo.print("Low mana!")
         endif
      endif
   else
      if uo.mana>=castmana then
         uo.cast(cast)
         uo.print(msgStat)
      else
         if drinkmana==1 then
            uo.findtype('0x0F0E','0x09DF','my')
            if uo.findcount() then
               uo.usetype('0x0F0E','0x09DF')      # drink total mana
               wait(200)
               uo.cast(cast)
               uo.print(msgStat)
               uo.print("Total Mana drunk!")
            else
               uo.print("No Total Mana potions found!")
               uo.print("And no mana, sorry :D")
            endif
         else
            uo.print("Low mana!")
         endif
      endif
   endif
end sub
Last edited by Виталь on 2009-02-14 16:07:00, edited 4 times in total.
Виталь
Posts: 97
Joined: 2005-08-09 23:16:57
Contact:

Post by Виталь »

Наклал. -_-
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

Почему то мне кажется что ты не бегаешь на этих скриптах сам,-а значит они не могут быть полезны рядовым присутствующим, т.к. "питьё маны" в таких скриптах никогда не приветствовалось, тем более в такой реализации когда он у тебя при отсутствии маны пьёт, но не повторяет каст.
Виталь
Posts: 97
Joined: 2005-08-09 23:16:57
Contact:

Post by Виталь »

Питье маны отключается сменой единички на нолик в каждом касте.

scrollmana - мана на свиток
castmana - мана на спелбук
drinkmana 0/1 - питье манки
scroll - тип свитка
cast - название каста
target - цель
msgStatScr - сообщение при касте со свитка
msgStat - сообщение при касте из спелбука

Code: Select all

cast_wt(scrollmana, castmana, drinkmana, scroll, cast, target, msgStatScr, msgStat)

cast_wt(5,  10, 1, '0x1F2D', 'Clumsy',      'lastattack',    "Clumsy by scroll!",       "Clumsy NOT by scroll!")

cast_wt(5,  10, 0, '0x1F2D', 'Clumsy',      'lastattack',    "Clumsy by scroll!",       "Clumsy NOT by scroll!")


После питья манки повторяется попытка каста.

Code: Select all

               uo.usetype('0x0F0E','0x09DF')      # drink total mana 
               wait(200)
               uo.cast(cast)
Post Reply