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

Char nie zabija Slime "Matki" gdy ma Low Hp


ThePein

Rekomendowane odpowiedzi

Opublikowano

poprawiłem i teraz jest tak że jak ma low hp to wogóle nie bije slimów które mają poniżej 50% hp o.O

 

\/ tak mam teraz i coś nie gra :/

 

function KillSlimeMother()
    if not (KillingSlimeMother) then
        SlimeTrainer:Stop()
        Self.StopAttack()
        if (AlertOnLowHealth) then alert() end
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures:Name() == 'Slime' and creatures:HealthPercent() >= 50) then
                if (creatures:Attack()) then break end
            end
        end
    elseif (KillingSlimeMother and Self.TargetID == 0) then
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures:Name() == 'Slime' and creatures:HealthPercent() <= 50) then
                if (creatures:Attack()) then break end
            end
        end
        if (AlertOnKill) then alert() end
        KillingSlimeMother = false
    end
end
Opublikowano

GetTargets widzę zmieniłeś na 1.

 

--Slime Trainer Settings--

local CreatureName = 'Slime' -- Name of creature you want to train on.

local CreatureRange = 1 -- Distance from self to get creatures.

local CreatureDistance = 1 -- Minimum distance target creature should be from self.

 

Zbijasz najpierw matke do low health i powinno działać. Zmienia Ci nazwe w ogole matki?

 

Spróbuj zamienić ew. na

 

function KillSlimeMother()
    if not (KillingSlimeMother) then
        SlimeTrainer:Stop()
        Self.StopAttack()
        if (AlertOnLowHealth) then alert() end
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures[i]:Name() == 'Slime' and creatures[i]:HealthPercent() <= 50) then
                if (creatures[i]:Attack()) then break end
            end
        end
    elseif (KillingSlimeMother and Self.TargetID == 0) then
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures:Name() == 'Slime' and creatures[i]:HealthPercent() >= 50) then
                if (creatures[i]:Attack()) then break end
            end
        end
        if (AlertOnKill) then alert() end
        KillingSlimeMother = false
    end
end

66j32w.jpg
 
Sprawdź mój tutorial na temat demonbuddy!

Nie odpowiadam na wiadomości prywatne.

Opublikowano

GetTargets widzę zmieniłeś na 1.

 

--Slime Trainer Settings--

local CreatureName = 'Slime' -- Name of creature you want to train on.

local CreatureRange = 1 -- Distance from self to get creatures.

local CreatureDistance = 1 -- Minimum distance target creature should be from self.

 

Zbijasz najpierw matke do low health i powinno działać. Zmienia Ci nazwe w ogole matki?

 

Spróbuj zamienić ew. na

 

function KillSlimeMother()
    if not (KillingSlimeMother) then
        SlimeTrainer:Stop()
        Self.StopAttack()
        if (AlertOnLowHealth) then alert() end
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures[i]:Name() == 'Slime' and creatures[i]:HealthPercent() <= 50) then
                if (creatures[i]:Attack()) then break end
            end
        end
    elseif (KillingSlimeMother and Self.TargetID == 0) then
        local creatures = Self.GetTargets(1)
        for i = 1, #creatures do
            if (creatures:Name() == 'Slime' and creatures[i]:HealthPercent() >= 50) then
                if (creatures[i]:Attack()) then break end
            end
        end
        if (AlertOnKill) then alert() end
        KillingSlimeMother = false
    end
end

Zmieniłem na /\ i nadal to samo jak ma low hp to znowu bije dalej ale summony a nie matke :/

Opublikowano

no właśnie mi chodzi o low hp, jak mój char ma low to nadal wali tylko summony, broń zmienia ale dalej nią bije summony

Opublikowano

tak :/

Czy ten problem nadal występuje? Jeżeli tak to podeślij mi dokumentację tego bota i rozwiążemy problem. Jak na razie z tego skryptu wynika że nie sprawdza on ile postać ma życia, więc nawet nie wie czy ma zabijać oryginał czy nie.

Efekty jednego dnia wolnego od pracy :

lWxix4K.png

Chcesz wspomóc produkcję tego bota? Masz doświadczenie w programowaniu modułów, tworzeniu GUI czy skryptowaniu [C#]?

napisz na pw : http://www.mpcforum.pl/user/1285262-bleblable/

Opublikowano

Masz włączony alert przy małym hp? Jak nie to włącz i wtedy sprawdź :).

Czytając skrypt można wywnioskować iż one-liner w którym widnieje "AlertOnLowHealth" ma za zadanie wywołać metodę "alert()", która [ tak mi się wydaje ] jest odpowiedzialna za "pipczenie" bota. Interpretując dalej ten skrypt dochodzę do miejsca, które jest dla mnie kompletnym absurdem, mianowicie:

for i = 1, #creatures do
    if (creatures[i]:Name() == 'Slime' and creatures[i]:HealthPercent() <= 50) then
        if (creatures[i]:Attack()) then break end
     end
end

domyślam się że:

creatures :: jest to ilość NPC na ekranie

{x}:Name() :: jest to nazwa NPC

{x}:HealthPercent() :: jest ilością punktów życia w procentach

{x}:Attack() :: czy atakujemy tego NPC

 

a więc tłumacząc to na język polski otrzymamy coś takiego:

pętla :
    jeżeli nazwa NPC jest równa Slime i procent życia NPC jest mniejszy bądź równy 50 to
        jeżeli NPC jest atakowany to przerwij pętlę

Skoro postać ma zabijać oryginał slime'a to powino być gdzieś zapisane jego ID. Np.

// załóżmy że Target() zwraca nam dane aktualnego celu

local m_MothId;
local m_MothKillWhenHPPC = 50;

if m_MothId == NULL then
	if Target()::Id != NULL then
		m_MothId = Target()::Id
	end
else
	if Self::HealthPercent <= m_MothKillWhenHPPC then
		if Target().Id != m_MothId then
			//tutaj atakujemy oryginał
		end
	else if Target().Id == m_MothId then
		// tutaj usuwamy target z naszego oryginału
	end
end

W takim wypadku nie musimy iterować przez całą tablicę, a tylko sprawdzać nasz aktualny cel.

Mógłbym taki skrypt napisać ale bez dokumentacji nie jest to możliwe.

 

PS. Nie pamiętam jak się pisało w Lua więc na 100% nie będzie śmigało bez przeróbek.

Efekty jednego dnia wolnego od pracy :

lWxix4K.png

Chcesz wspomóc produkcję tego bota? Masz doświadczenie w programowaniu modułów, tworzeniu GUI czy skryptowaniu [C#]?

napisz na pw : http://www.mpcforum.pl/user/1285262-bleblable/

Opublikowano

Jak Wy dodajecie w takic hjakby spoilerach to dodam cały skrypt i zoabczycie co może być nie tak

W okienku dodawania posta masz pasek narzędziowy a na nim symbol "<>" klikasz to i wklejasz kod.

 

EDIT: co do błędu ze screenshota. Wiadomość świadczy o tym iż metoda {x}:Name() jest pusta.

nil w Lua to to samo co NULL w C++ a więc możesz po prostu sprawdzać czy {x}:Name() zawiera cokolwiek:

if creatures[i].Name() == nil then
    return
else
    //tutaj jakis kodzik

Efekty jednego dnia wolnego od pracy :

lWxix4K.png

Chcesz wspomóc produkcję tego bota? Masz doświadczenie w programowaniu modułów, tworzeniu GUI czy skryptowaniu [C#]?

napisz na pw : http://www.mpcforum.pl/user/1285262-bleblable/

Opublikowano

Ja osobiście powiem, że pobrałem skrypt autora postu, wystarczyło że tylko zmieniłem wartości zmiany broni do skillowania do zabijania matki, oraz ustaliłem według własnych predyspozycji od ilu hp ma zmieniać broń i od ilu ma zabijać matkę i mi wszystko śmiga

 

--Weapon Switcher Settings--
local TrainingWeaponID = 3304 -- ID of weapon you are training with. (Default: Small Stones)
local LowHealthWeaponID = 7432 -- ID of weapon you want to switch to when low on health. (Default: Spears)
local LowAmmoWeaponID = 3277 -- ID of weapon you want to switch to when low on ammo. (Default: Spears)
 
local SwitchOnLowHealth = true -- Set to false if you don't want to switch to alternate weapon on low health.
local SwitchLowHealth = math.floor(Self.MaxHealth() * .3) -- Your health at which you want to switch to alternate weapon. (Default: 50%)
local SwitchHighHealth = math.floor(Self.MaxHealth() * .5) -- Your health at which you want to switch back to training weapon. (Default: 75%)
 
local SwitchOnLowAmmo = false -- Set to true if you want to switch to alternate weapon on low ammo.
local SwitchAmmoCount = 50 -- Amount of ammo to switch to alternate weapon at.
 
--Slime Mother Killer Settings--
local KillOnLowHealth = true -- Set to false if you don't want to kill slime mother when low on health.
local KillLowHealth = math.floor(Self.MaxHealth() * .2) -- Your health at which you want to kill slime mother.
 

Wiem że jest wszystko na czarno, ale nie wiem jak skopiować aby było kolorowe

Opublikowano

Ja osobiście powiem, że pobrałem skrypt autora postu, wystarczyło że tylko zmieniłem wartości zmiany broni do skillowania do zabijania matki, oraz ustaliłem według własnych predyspozycji od ilu hp ma zmieniać broń i od ilu ma zabijać matkę i mi wszystko śmiga

 

Nie bardzo pamiętam podstawy Lua ale z tego co widzę [urywki] to ten skrypt nie powinien nawet działać. Do tej pory nie wiem jak wygląda biblioteka wewnętrzna bota i mogę tylko strzelać co jest nie tak.

Dla przykładu urywka który wstawiłeś "math.floor()" jest z tego co widzę zbędną metodą która tylko zwiększa zużycie procesora [w niewielkim stopniu ale zawsze], ponieważ można by było zrobić obliczenia w ten sposów:

local m_LowHealth = MaxHealth * 0.2
// co da nam poprostu 20% healtha
//lub zrobić to jeszcze inaczej
local m_lowHealthMultiplier = 0.2

// następnie gdzieś w kodzie
if HealthPercent() >= Maxhealth() * m_lowHealthMultiplier then

// zwracając uwagę na to iż Lua ma możliwość tworzenia i wywoływania metod można by zrobić coś takiego

function isLowHealth( lhMulti ) {
    local _lh = MaxHealth() * lhMulti
    if HealthPercent() >= _lh then
        return 0
    else
        return 1
    end
]

Oczywiście mogę się mylić ale programuję już ładnych kilka lat i [moim zdaniem] z pierwszych wycinków skryptu, można wywnioskować jedno : nie będzie działał.

Efekty jednego dnia wolnego od pracy :

lWxix4K.png

Chcesz wspomóc produkcję tego bota? Masz doświadczenie w programowaniu modułów, tworzeniu GUI czy skryptowaniu [C#]?

napisz na pw : http://www.mpcforum.pl/user/1285262-bleblable/

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...