Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Pisanie skryptów, cz. 6


Rekomendowane odpowiedzi

Opublikowano

http://www.mpcforum.pl/topic/1274238-pisanie-skryptow-cz-8/ - Część 8
http://www.mpcforum.pl/topic/1273792-pisanie-skryptow-cz-7/ - Część 7
http://www.mpcforum.pl/topic/1273566-pisanie-skryptow-cz-6/ - Część 6
http://www.mpcforum.pl/topic/1232331-pisanie-skryptow-cz-5/ - Część 5
http://www.mpcforum.pl/topic/1231168-pisanie-skryptow-cz-4/ - Część 4
http://www.mpcforum.pl/topic/1230769-pisanie-skryptow-cz-3/ - Część 3
http://www.mpcforum.pl/topic/1230734-pisanie-skryptow-cz-2/ - Część 2
http://www.mpcforum.pl/topic/1230572-pisanie-skryptow-cz-1/ - Część 1

Czołem!

Nie pisałem poradników, bo i tak prawie nikt ich nie czytał. Ale nie mam co robić, także napiszę, tym razem nie przetłumaczone z forum BoLa. Będzie krótko i zwięźle. A dzisiejszy temat: itemy w BoLu.

1. ID itemów.

Oczywiście w BoLu nic nie jest proste. Nie posługujemy się nazwami, a numerami itemów. Jak sprawdzić ID przedmiotu? Jest to bardzo proste!

1. Wchodzimy w http://www.lolking.net/items/

2. Klikamy w item, którego ID chcemy znać (np. DFG)

3. Sprawdzamy jego ID, które znajduje się w pasku adresu przeglądarki. Dla DFG będzie to 3128, gdyż adres wskazuje http://www.lolking.net/items/3128.

2. Użycie itemów w skrypcie

Itemów używamy za pomocą CastSpell. Zamiast spella wstawiamy slot w ekwipunku, w którym znajduje się żądany item.

Czyli zamiast

CastSpell(_Q, ts.target)

mamy np.

CastSpell(ITEM_1, ts.target)

lub jak chcemy wycastować item bez podawania celu, to piszemy

CastSpell(ITEM_1)

Oczywiście nie zapominamy o rutynowym sprawdzeniu, czy możemy wycastować spell.

if (myHero:CanUseSpell(ITEM_1) == READY)

Jednak nie wiemy, w którym slocie będzie przechowywany item. BoL wtedy daje nam funkcję:

GetInventorySlotItem(item.id)

Czyli jak chcemy otrzymać slot DFG oraz Zhonyi, to piszemy odpowiednio:

DFGslot = GetInventorySlotItem(3128)
ZHGslot = GetInventorySlotItem(3157)

3. Wykorzystanie w skrypcie

Użyjemy skryptu z części 5. Lekko go zmodyfikowałem.

 

 

 

function OnLoad()
        ts = TargetSelector(TARGET_LOW_HP_PRIORITY,625)
        Config = scriptConfig("Ryze Combo", "ryzecombo77")
        Config:addParam("combo", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
        Config:addParam("usespellr", "Uzyj R", SCRIPT_PARAM_ONOFF, true)
        Config:addParam("circle", "Rysuj zasieg Q", SCRIPT_PARAM_ONKEYTOGGLE, true, string.byte("m"))
end

function OnTick()
    ts:update()
    if (ts.target ~= nil) then
        if (Config.combo) then
            if (myHero:CanUseSpell(_R) == READY) then
                if (Config.usespellr) then
                    CastSpell(_R, ts.target)
                end
            end
            if (myHero:CanUseSpell(_Q) == READY) then
                CastSpell(_Q, ts.target)
            end
            if (myHero:CanUseSpell(_E) == READY) then
                CastSpell(_E, ts.target)
            end
            if (myHero:CanUseSpell(_W) == READY) then
                CastSpell(_W, ts.target)
            end
        end
    end
end

function OnDraw()
    if (Config.circle) then
        DrawCircle(myHero.x, myHero.y, myHero.z, 625, 0xFF00FF)
    end
end

 

 

Teraz wstawmy do niego użycie DFG na starcie combo. Piszemy po użyciu R, ale przed Q:

if (myHero:CanUseSpell(DFGslot) == READY) then
     CastSpell(DFGslot, ts.target)
end

A teraz coś bezużytecznego - Zhonya po wykonaniu R -> DFG -> Q -> E -> W. Robimy tak, jak w przypadku powyżej, tylko bez.

 

Jeszcze jedna rzecz - jeżeli nie mamy przedmiotu w ekwipunku, funkcja zwróci nam "nil". CanUseSpell(iSpell) jak otrzyma "nil", zacznie nam pluć błędami. Także musimy zrobić sprawdzenie:

if (DFGslot ~= nil) then
     if (myHero:CanUseSpell(DFGslot) == READY) then
          CastSpell(DFGslot, ts.target)
     end
end

oraz

if (ZHGslot ~= nil) then
     if (myHero:CanUseSpell(ZHGslot) == READY) then
          CastSpell(ZHGslot)
     end
end

Dodajmy jeszcze sprawdzenie, aby Zhonya została wycastowana, jak wszystkie spelle będą na cooldownie:

if (ZHGslot ~= nil) then
     if (myHero:CanUseSpell(ZHGslot) == READY and myHero:myHero:CanUseSpell(_Q) ~= READY and myHero:CanUseSpell(_W) ~= READY and myHero:CanUseSpell(_E) ~= READY and myHero:CanUseSpell(_R) ~= READY) then
          CastSpell(ZHGslot)
     end
end

"and" oznacza "oraz", czyli jeżeli te wszystkie warunki będą spełnione, wycastuj Zhonyę.

~= oznacza "nie równe" czyli warunek będzie spełniony, gdy spell NIE będzie gotowy.

 

Nasz końcowy kod powinien wyglądać następująco:

 

 

 

function OnLoad()
     ts = TargetSelector(TARGET_LOW_HP_PRIORITY,625)
     Config = scriptConfig("Ryze Combo", "ryzecombo77")
     Config:addParam("combo", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
     Config:addParam("usespellr", "Uzyj R", SCRIPT_PARAM_ONOFF, true)
     Config:addParam("circle", "Rysuj zasieg Q", SCRIPT_PARAM_ONKEYTOGGLE, true, string.byte("M"))
end

function OnTick()
     DFGslot = GetInventorySlotItem(3128)
     ZHGslot = GetInventorySlotItem(3157)
     ts:update()
     if (ts.target ~= nil) then
          if (Config.combo) then
               if (myHero:CanUseSpell(_R) == READY) then
                    if (Config.usespellr) then
                         CastSpell(_R, ts.target)
                    end
               end
               if (DFGslot ~= nil) then
                    if (myHero:CanUseSpell(DFGslot) == READY) then
                         CastSpell(DFGslot, ts.target)
                    end
               end
               if (myHero:CanUseSpell(_Q) == READY) then
                    CastSpell(_Q, ts.target)
               end
               if (myHero:CanUseSpell(_E) == READY) then
                    CastSpell(_E, ts.target)
               end
               if (myHero:CanUseSpell(_W) == READY) then
                    CastSpell(_W, ts.target)
               end
               if (ZHGslot ~= nil) then
                    if (myHero:CanUseSpell(ZHGslot) == READY and myHero:CanUseSpell(_Q) ~= READY and myHero:CanUseSpell(_W) ~= READY and myHero:CanUseSpell(_E) ~= READY and myHero:CanUseSpell(_R)~= READY) then
                         CastSpell(ZHGslot)
                    end
               end
          end
     end
end

function OnDraw()
     if (Config.circle) then
          DrawCircle(myHero.x, myHero.y, myHero.z, 625, 0xFF00FF)
     end
end

 

 

 

To wszystko, dzisiaj postaram się dodać jeszcze jedną część o praktycznym wykorzystaniu funkcji przy castowaniu spelli i itemów.

Polecam też bardziej zaawansowane poradniki Marcoly'ego:

http://www.mpcforum.pl/topic/1226948-api-sidas-auto-carry/

http://www.mpcforum.pl/topic/1157768-zastosowanie-lag-free-circles-we-wlasnym-skrypcie/

http://www.mpcforum.pl/topic/1229945-buffy-advanced-callbacks-vip/

Credits:

Marcoly

Skończ proszę się kompromitować. Jesteś nikim.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...