Ir para conteúdo
  • Cadastre-se

(Resolvido)Stamina regen no Training Monk


Ir para solução Resolvido por amora murder,

Posts Recomendados

Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website).

OTX 3.0

 

Qual erro está surgindo/O que você procura?

Quando entra no training monk, diz que regenera 1 de stamina a cada 2 minutos, porém, está regenerando 1 de stamina por minuto!

 

Você tem o código disponível? Se tiver publique-o aqui:

Esta é a parte do scrip a respeito da stamina no Training Monk, está em data > events > scripts > creature.lua

-- AQUI TREINER ONLINE
 
 local staminaBonus = {
    target = 'Training Monk',
    period = 180000, -- período em milisegundos
    bonus = 1, -- stamina que ganha
    events = {}
}
 
local function addStamina(name)
    local player = Player(name)
    if not player then
        staminaBonus.events[name] = nil
    else
        local target = player:getTarget()
        if not target or target:getName() ~= staminaBonus.target then
            staminaBonus.events[name] = nil
        else
            player:setStamina(player:getStamina() + staminaBonus.bonus)
            staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name)
        end
    end
end


function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if not __picif[target.uid] then
        if target:isMonster() then
            if (target:getType():isRewardBoss()) then
                target:registerEvent("RewardSystemSlogan")
                __picif[target.uid] = {}
            end
        end
    end

 

 

Editado por amora murder (veja o histórico de edições)

Otserver Global - Open Tibia

angera.servegame.com

Link para o post
Compartilhar em outros sites
Em 11/07/2018 em 17:29, amora murder disse:

period = 180000, -- período em milisegundos

Duplique a quantia de 180000, para 360000

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites

Teria como liberar o script todo para eu adicionar ao meu servidor?

Teria como liberar o script todo para eu adicionar ao meu servidor?

Link para o post
Compartilhar em outros sites
  • Solução
Em 12/07/2018 em 22:30, King Laker disse:

Duplique a quantia de 180000, para 360000

Cara, valeu! Mas descobri onde estava o erro. Havia um outro script em conflito. Este que postei, ao bater no treiner regenera a stamina a cada 3 minutos como programei, porém, havia esse outro script que AO FICAR NO SQM DE TREINAR regenerava 1 de stamina por minuto. Aí apaguei esse segundo script e passou a funcionar 100%

Otserver Global - Open Tibia

angera.servegame.com

Link para o post
Compartilhar em outros sites
1 minuto atrás, amora murder disse:

Cara, valeu! Mas descobri onde estava o erro. Havia um outro script em conflito. Este que postei, ao bater no treiner regenera a stamina a cada 3 minutos como programei, porém, havia esse outro script que AO FICAR NO SQM DE TREINAR regenerava 1 de stamina por minuto. Aí apaguei esse segundo script e passou a funcionar 100%

Td bem :)

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites
Em 14/07/2018 em 12:59, DaPYuumii disse:

Teria como liberar o script todo para eu adicionar ao meu servidor?

Teria como liberar o script todo para eu adicionar ao meu servidor?

este é meu events.xml

<?xml version="1.0" encoding="UTF-8"?>
<events>

	<!-- Creature methods -->
	<event class="Creature" method="onChangeOutfit" enabled="1" />
	<event class="Creature" method="onAreaCombat" enabled="0" />
	<event class="Creature" method="onTargetCombat" enabled="1" />

	<!-- Party methods -->
	<event class="Party" method="onJoin" enabled="0" />
	<event class="Party" method="onLeave" enabled="0" />
	<event class="Party" method="onDisband" enabled="0" />

	<!-- Player methods -->
	<event class="Player" method="onBrowseField" enabled="0" />
	<event class="Player" method="onLook" enabled="1" />
	<event class="Player" method="onLookInBattleList" enabled="1" />
	<event class="Player" method="onLookInTrade" enabled="1" />
	<event class="Player" method="onLookInShop" enabled="0" />
	<event class="Player" method="onMoveItem" enabled="1" />
	<event class="Player" method="onMoveCreature" enabled="0" />
	<event class="Player" method="onReport" enabled="0" />
	<event class="Player" method="onWrapItem" enabled="0" />
	<event class="Player" method="onTurn" enabled="0" />
	<event class="Player" method="onTradeRequest" enabled="1" />
	<event class="Player" method="onTradeAccept" enabled="0" />
	<event class="Player" method="onGainExperience" enabled="1" />
	<event class="Player" method="onLoseExperience" enabled="0" />
	<event class="Player" method="onGainSkillTries" enabled="1" />
	<event class="Player" method="onUseWeapon" enabled="0" />
	<event class="Player" method="onCombatSpell" enabled="1" />
	<!-- Custom methods -->
	<event class="Monster" method="onSpawn" enabled="0" />
</events>

E esse é meu events > scripts > creatures
 

__picif = {}
function Creature:onChangeOutfit(outfit)
	return true
end
function Creature:onAreaCombat(tile, isAggressive)
    return true
end
 
local function removeCombatProtection(cid)
    local player = Player(cid)
    if not player then
        return true
    end
 
    local time = 0
    if player:isMage() then
        time = 10
    elseif player:isPaladin() then
        time = 20
    else
        time = 30
    end
 
    player:setStorageValue(Storage.combatProtectionStorage, 2)
    addEvent(function(cid)
        local player = Player(cid)
        if not player then
            return
        end
 
        player:setStorageValue(Storage.combatProtectionStorage, 0)
        player:remove()
    end, time * 1000, cid)
end
 
 
 -- HERE TRAINER ONLINE
local staminaBonus = {
    target ='Training Monk',
    period = 180000, -- Period in milliseconds
    bonus = 1, -- gain stamina
    events = {}
}
 
local function addStamina(name)
    local player = Player(name)
    if not player then
        staminaBonus.events[name] = nil
    else
        local target = player:getTarget()
        if not target or target:getName() ~= staminaBonus.target then
            staminaBonus.events[name] = nil
        else
            player:setStamina(player:getStamina() + staminaBonus.bonus)
            staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name)
        end
    end
end


function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if not __picif[target.uid] then
        if target:isMonster() then
            if (target:getType():isRewardBoss()) then
                target:registerEvent("RewardSystemSlogan")
                __picif[target.uid] = {}
            end
        end
    end
	
	--- BATTLEFIELD
    if self:isPlayer() and target:isPlayer() then
        if self:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or self:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then
            return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
        end
		if self:getStorageValue(_Lib_Battle_Info1.TeamOne1.storage1) >= 1 and target:getStorageValue(_Lib_Battle_Info1.TeamOne1.storage1) >= 1 or self:getStorageValue(_Lib_Battle_Info1.TeamTwo1.storage1) >= 1 and target:getStorageValue(_Lib_Battle_Info1.TeamTwo1.storage1) >= 1 then
            return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
        end
		--party protect
		local party = self:getParty()
		if party then
			local targetParty = target:getParty()
			if targetParty and targetParty == party then
				return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
			end
		end
    end
		
	--- BATTLEFIELD
   
    if target:isPlayer() then
        if self:isMonster() then
            local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage)
 
            if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player
                if protectionStorage <= 0 then
                    addEvent(removeCombatProtection, 30 * 1000, target.uid)
                    target:setStorageValue(Storage.combatProtectionStorage, 1)
                elseif protectionStorage == 1 then
                    self:searchTarget()
                    return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
                end
 
                return true
            end
 
            if protectionStorage >= os.time() then
                return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
            end
        end
    end
 
 -- AQUI TREINER ONLINE 
 
 if self:isPlayer() then
        if target and target:getName() == staminaBonus.target then
            local name = self:getName()
            if not staminaBonus.events[name] then
                staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name)
            end
        end
    end
	
	-- FIM TREINER ONLINE
    return true
end

function Creature:onDrainHealth(attacker, typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary)
    if (not self) then
        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
    end

    if (not attacker) then
        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
    end

    if (attacker:isPlayer()) then
        if (self:isMonster() and not self:getMaster()) then
            for i = 1, 3 do
                if (attacker:isActive(i-1)) then
                    local bonusInfo = attacker:getBonusInfo(i-1)
                    if (bonusInfo.Type == 0 and bonusInfo.Name == self:getName()) then
                        damagePrimary = damagePrimary + math.floor(damagePrimary * (bonusInfo.Value/100))
                        break
                    end
                end
            end
        end
    elseif (attacker:isMonster()) then
        if (self:isPlayer()) then
            for i = 1, 3 do
                if (self:isActive(i-1)) then
                    local bonusInfo = self:getBonusInfo(i-1)
                    if (bonusInfo.Type == 1 and bonusInfo.Name == attacker:getName()) then
                        damagePrimary = damagePrimary - math.floor(damagePrimary * (bonusInfo.Value/100))
                        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
                    end
                end
            end
        end
    end

    return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
end

 

Otserver Global - Open Tibia

angera.servegame.com

Link para o post
Compartilhar em outros sites
  • 2 years later...

e como adiciono a tag no creaturescript.xml ?
<event type="kill" name="trainer" script="trainer.lua"/>

 

 

Em 16/07/2018 em 22:34, amora murder disse:

este é meu events.xml


<?xml version="1.0" encoding="UTF-8"?>
<events>

	<!-- Creature methods -->
	<event class="Creature" method="onChangeOutfit" enabled="1" />
	<event class="Creature" method="onAreaCombat" enabled="0" />
	<event class="Creature" method="onTargetCombat" enabled="1" />

	<!-- Party methods -->
	<event class="Party" method="onJoin" enabled="0" />
	<event class="Party" method="onLeave" enabled="0" />
	<event class="Party" method="onDisband" enabled="0" />

	<!-- Player methods -->
	<event class="Player" method="onBrowseField" enabled="0" />
	<event class="Player" method="onLook" enabled="1" />
	<event class="Player" method="onLookInBattleList" enabled="1" />
	<event class="Player" method="onLookInTrade" enabled="1" />
	<event class="Player" method="onLookInShop" enabled="0" />
	<event class="Player" method="onMoveItem" enabled="1" />
	<event class="Player" method="onMoveCreature" enabled="0" />
	<event class="Player" method="onReport" enabled="0" />
	<event class="Player" method="onWrapItem" enabled="0" />
	<event class="Player" method="onTurn" enabled="0" />
	<event class="Player" method="onTradeRequest" enabled="1" />
	<event class="Player" method="onTradeAccept" enabled="0" />
	<event class="Player" method="onGainExperience" enabled="1" />
	<event class="Player" method="onLoseExperience" enabled="0" />
	<event class="Player" method="onGainSkillTries" enabled="1" />
	<event class="Player" method="onUseWeapon" enabled="0" />
	<event class="Player" method="onCombatSpell" enabled="1" />
	<!-- Custom methods -->
	<event class="Monster" method="onSpawn" enabled="0" />
</events>

E esse é meu events > scripts > creatures
 


__picif = {}
function Creature:onChangeOutfit(outfit)
	return true
end
function Creature:onAreaCombat(tile, isAggressive)
    return true
end
 
local function removeCombatProtection(cid)
    local player = Player(cid)
    if not player then
        return true
    end
 
    local time = 0
    if player:isMage() then
        time = 10
    elseif player:isPaladin() then
        time = 20
    else
        time = 30
    end
 
    player:setStorageValue(Storage.combatProtectionStorage, 2)
    addEvent(function(cid)
        local player = Player(cid)
        if not player then
            return
        end
 
        player:setStorageValue(Storage.combatProtectionStorage, 0)
        player:remove()
    end, time * 1000, cid)
end
 
 
 -- HERE TRAINER ONLINE
local staminaBonus = {
    target ='Training Monk',
    period = 180000, -- Period in milliseconds
    bonus = 1, -- gain stamina
    events = {}
}
 
local function addStamina(name)
    local player = Player(name)
    if not player then
        staminaBonus.events[name] = nil
    else
        local target = player:getTarget()
        if not target or target:getName() ~= staminaBonus.target then
            staminaBonus.events[name] = nil
        else
            player:setStamina(player:getStamina() + staminaBonus.bonus)
            staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name)
        end
    end
end


function Creature:onTargetCombat(target)
    if not self then
        return true
    end
    if not __picif[target.uid] then
        if target:isMonster() then
            if (target:getType():isRewardBoss()) then
                target:registerEvent("RewardSystemSlogan")
                __picif[target.uid] = {}
            end
        end
    end
	
	--- BATTLEFIELD
    if self:isPlayer() and target:isPlayer() then
        if self:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or self:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then
            return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
        end
		if self:getStorageValue(_Lib_Battle_Info1.TeamOne1.storage1) >= 1 and target:getStorageValue(_Lib_Battle_Info1.TeamOne1.storage1) >= 1 or self:getStorageValue(_Lib_Battle_Info1.TeamTwo1.storage1) >= 1 and target:getStorageValue(_Lib_Battle_Info1.TeamTwo1.storage1) >= 1 then
            return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
        end
		--party protect
		local party = self:getParty()
		if party then
			local targetParty = target:getParty()
			if targetParty and targetParty == party then
				return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
			end
		end
    end
		
	--- BATTLEFIELD
   
    if target:isPlayer() then
        if self:isMonster() then
            local protectionStorage = target:getStorageValue(Storage.combatProtectionStorage)
 
            if target:getIp() == 0 then -- If player is disconnected, monster shall ignore to attack the player
                if protectionStorage <= 0 then
                    addEvent(removeCombatProtection, 30 * 1000, target.uid)
                    target:setStorageValue(Storage.combatProtectionStorage, 1)
                elseif protectionStorage == 1 then
                    self:searchTarget()
                    return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
                end
 
                return true
            end
 
            if protectionStorage >= os.time() then
                return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER
            end
        end
    end
 
 -- AQUI TREINER ONLINE 
 
 if self:isPlayer() then
        if target and target:getName() == staminaBonus.target then
            local name = self:getName()
            if not staminaBonus.events[name] then
                staminaBonus.events[name] = addEvent(addStamina, staminaBonus.period, name)
            end
        end
    end
	
	-- FIM TREINER ONLINE
    return true
end

function Creature:onDrainHealth(attacker, typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary)
    if (not self) then
        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
    end

    if (not attacker) then
        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
    end

    if (attacker:isPlayer()) then
        if (self:isMonster() and not self:getMaster()) then
            for i = 1, 3 do
                if (attacker:isActive(i-1)) then
                    local bonusInfo = attacker:getBonusInfo(i-1)
                    if (bonusInfo.Type == 0 and bonusInfo.Name == self:getName()) then
                        damagePrimary = damagePrimary + math.floor(damagePrimary * (bonusInfo.Value/100))
                        break
                    end
                end
            end
        end
    elseif (attacker:isMonster()) then
        if (self:isPlayer()) then
            for i = 1, 3 do
                if (self:isActive(i-1)) then
                    local bonusInfo = self:getBonusInfo(i-1)
                    if (bonusInfo.Type == 1 and bonusInfo.Name == attacker:getName()) then
                        damagePrimary = damagePrimary - math.floor(damagePrimary * (bonusInfo.Value/100))
                        return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
                    end
                end
            end
        end
    end

    return typePrimary, damagePrimary, typeSecondary, damageSecondary, colorPrimary, colorSecondary
end

 

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo