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


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!

Przed nami 4 część poradnika o pisaniu skryptów do BoLa! Tutaj nauczymy się castować spelle (nie pakietami) i rysować kółka zasięgu spelli.

1. Castowanie spelli

W BoLu istnieje funkcja do castowania spelli, zwie się CastSpell i jest bardzo łatwa do użycia. Możemy jej użyć na 2 sposoby

-- Jeżeli spell jest castowany na wroga
CastSpell (spell, target)

-- Jeśli spell jest castowany na obszar (AoE)
CastSpell (spell, x, z)

Parametry: spell oznacza umiejętność, którą chcemy użyć. Dla Q, W, E, R jest to odpowiednio _Q, _W, _E, _R.
Parametr wrog, x lub z jest już inną bajką, by go uzyskać będziemy potrzebowali Target Selectora.

Jeżeli umiejętność, którą chcemy wycastować nie wymaga podawania celu (np tarcza Sivir) piszemy po prostu:

CastSpell (_E)

2. Target Selector

W BoLu istnieje Target Selector, który pozwala nam wybrać cel (a raczej sam go wybiera za nas). Tak wygląda w praktyce:

function OnLoad()
	-- Tworzymy Target Selectora o nazwie ts z zasięgiem 625 i wybierającą cele o jak najniższym poziomem HP.
	ts = TargetSelector(TARGET_LOW_HP_PRIORITY,625)
end

function OnTick()
	-- Robimy, by Target Selector szukał nowych celi co milisekundę
	ts:update() -- funkcja, która aktualizuje cel wybrany przez Target Selectora
end

Target Selector zwraca wroga zapisanego w wartości ts.target. Jeżeli ktoś jest w zasięgu 625 (Q Ryza), Target Selector zwróci nam wroga i będziemy mogli wycastować spelle.

3. Castowanie spelli, cz. 2

Mamy spelle, mamy cel, czas wycastować spelle we wroga! Piszemy w OnTick():

function OnTick()
	ts:update()
	CastSpell(_Q, ts.target) -- wycastuj spella Q we wroga wskazanego przez Target Selector
end

I mamy nasze castowanie Q! Ale zaraz... zaczynamy grę. I jaki wróg jest obok nas w zasięgu 625? Żaden! Wartość ts.target będzie wynosiła nil - oznacza on nic. A ponieważ nie ma celu, spell nie może zostać wycastowany. Naprawmy to:

function OnTick()
	ts:update()
	if (ts.target ~= nil) then -- jeżeli wróg jest w pobliżu 
		CastSpell(_Q, ts.target) -- castujemy spella we wroga
	end
end

Teraz zadziała. Testujemy i okazuje się, że wycastowało spella! I co? Spell jest na cooldownie, a skrypt i tak chce go wycastować. To też musimy naprawić:

function OnTick()
	ts:update()
	if (ts.target ~= nil) then
		if (myHero:CanUseSpell(_Q) == READY) -- funkcja CanUseSpell(spell) pozwala sprawdzić, czy spell jest gotowy do użycia - w takim wypadku zwraca READY.
			CastSpell(_Q, ts.target)
		end
	end
end

I teraz już zadziała. Teraz wykonajmy auto combo dla Ryza - bardzo proste: jak podejdziesz do wroga, samo wywali combo.

function OnLoad()
    ts = TargetSelector(TARGET_LOW_HP_PRIORITY,625)
end

function OnTick()
    ts:update()
    if (ts.target ~= nil) then
        if (myHero:CanUseSpell(_Q) == READY) then
            CastSpell(_Q, ts.target)
        end
        if (myHero:CanUseSpell(_R) == READY) then
            CastSpell(_R, 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

4. Kółeczka :3

Aby narysować zasięg danego spella, używamy funkcji DrawCircle i callbacka OnDraw.

Jak to wygląda:

function OnDraw()
	DrawCircle(myHero.x, myHero.y, myHero.z, 625, 0x00FFFF)
end

Parametry:

myHero.x, myHero.y i myHero.z - koordynaty środka kółka.

625 - promień kółka

0x00FFFF - kolor w formacie szesnastkowym

To wszystko, jutro postaram się napisać kolejną część.

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:

shagratt z forum botoflegends - jego poradnik spolszczyłem

Marcoly
Radi

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

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...