Ir para conteúdo
  • Cadastre-se

(Resolvido)[TFS1.2] Exercise Weapons


Ir para solução Resolvido por penisagudo,

Posts Recomendados

Estou usando esse script para os exercise weapons, porém, você pode usá-lo quantas vezes quiser após esperar o delay.

Queria algo para bloquear de usar novamente se já estiver usando.

 

Citar

local skills = {
    [32384] = {id=SKILL_SWORD,voc=4},
    [32385] = {id=SKILL_AXE,voc=4},
    [32386] = {id=SKILL_CLUB,voc=4},
    [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW},
    [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY},
    [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE},
    [33524] = {id=SKILL_SWORD,voc=4},
    [33525] = {id=SKILL_AXE,voc=4},
    [33526] = {id=SKILL_CLUB,voc=4},
    [33527] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW},
    [33528] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY},
    [33529] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE},
}

------- CONFIG -----//
local dummies = {36304, 32142,32147,32148,32143,32144,32145,32146,32149,36299,36300,36301,36302,36303}
--local skill_gain = 1 -- per hit

function start_train(pid, start_pos, itemid, fpos)
    local player = Player(pid)
    if player ~= nil then
        local pos_n = player:getPosition()
        
        if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then
            if player:getItemCount(itemid) >= 1 then
                local exercise = player:getItemById(itemid,true)

                if exercise:isItem() then
                    if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then
                        local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES)

                        if charges_n >= 1 then
                            exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES, (charges_n-1))

                            local required = 0
                            local toadd = 0
                            local currently = 0
                            local voc = player:getVocation()
                                if skills[itemid].id == SKILL_MAGLEVEL then
                                    if(isInArray({1,2,5,6}, voc:getId())) then
                                            if player:getBaseMagicLevel() < 30 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0633*required)
                                            elseif player:getBaseMagicLevel() >= 30 and player:getBaseMagicLevel() < 40 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0633*required)
                                            elseif player:getBaseMagicLevel() >= 40 and player:getBaseMagicLevel() < 50 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0633*required)
                                            elseif player:getBaseMagicLevel() >= 50 and player:getBaseMagicLevel() < 60 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0633*required)
                                            elseif player:getBaseMagicLevel() >= 60 and player:getBaseMagicLevel() < 70 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.00633*required)
                                            elseif player:getBaseMagicLevel() >= 70 and player:getBaseMagicLevel() < 80 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.00633*required)
                                            elseif player:getBaseMagicLevel() >= 80 and player:getBaseMagicLevel() < 90 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.00633*required)
                                            elseif player:getBaseMagicLevel() >= 90 and player:getBaseMagicLevel() < 100 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.00633*required)
                                            elseif player:getBaseMagicLevel() >= 100 and player:getBaseMagicLevel() < 110 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.000633*required)
                                            elseif player:getBaseMagicLevel() >= 110 and player:getBaseMagicLevel() < 120 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.000633*required)
                                            elseif player:getBaseMagicLevel() >= 120 and player:getBaseMagicLevel() < 130 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.000633*required)
                                            elseif player:getBaseMagicLevel() >= 130 and player:getBaseMagicLevel() < 140 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0000633*required)
                                            elseif player:getBaseMagicLevel() >= 140 and player:getBaseMagicLevel() < 150 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0000633*required)
                                            elseif player:getBaseMagicLevel() >= 150 then
                                                required = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)
                                                player:addManaSpent(0.0000633*required)
                                            end
                                    else

                                    end
                                else
                                    if(isInArray({3,4,7,8}, voc:getId())) then
                                        if player:getSkillLevel(skills[itemid].id) < 30 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 30 and player:getSkillLevel(skills[itemid].id) < 40 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 40 and player:getSkillLevel(skills[itemid].id) < 50 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 50 and player:getSkillLevel(skills[itemid].id) < 60 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 60 and player:getSkillLevel(skills[itemid].id) < 70 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.00633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 70 and player:getSkillLevel(skills[itemid].id) < 80 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.00633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 80 and player:getSkillLevel(skills[itemid].id) < 90 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.00633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 90 and player:getSkillLevel(skills[itemid].id) < 100 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.00633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 100 and player:getSkillLevel(skills[itemid].id) < 110 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.000633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 110 and player:getSkillLevel(skills[itemid].id) < 120 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.000633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 120 and player:getSkillLevel(skills[itemid].id) < 130 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.000633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 130 and player:getSkillLevel(skills[itemid].id) < 140 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0000633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 140 and player:getSkillLevel(skills[itemid].id) < 150 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0000633*required))
                                        elseif player:getSkillLevel(skills[itemid].id) >= 150 then
                                        required = voc:getRequiredSkillTries(skills[itemid].id, player:getSkillLevel(skills[itemid].id)+1)
                                        player:addSkillTries(skills[itemid].id, (0.0000633*required))
                                    end
                                end
                            end

                            fpos:sendMagicEffect(CONST_ME_HITAREA)
                            if skills[itemid].range then
                                pos_n:sendDistanceEffect(fpos, skills[itemid].range)
                            end

                            if charges_n == 1 then 
                                exercise:remove(1)
                                return true
                            end
                            local training = addEvent(start_train, voc:getAttackSpeed(), pid, start_pos, itemid, fpos)
                        else
                            exercise:remove(1)
                            stopEvent(training)
                        end
                    end
                end
            end
        end
        return true
    end
end
    
function onUse(player, item, fromPosition, target, toPosition, isHotkey)

    local training = addEvent(start_train, pid, start_pos, itemid, fpos)

    if player:getExhaustion(Storage.Exercisedummy.exaust) > 0 then
    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are already used this item (Wait 5 minutes).")
        stopEvent(training)
    return true
    end

    local start_pos = player:getPosition()
    stopEvent(training) -- to prevent from multiple uses
    
    if target:isItem() then
    stopEvent(training)
    
        if isInArray(dummies,target:getId()) then
            if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then
                stopEvent(training)
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You need to be closer to dummy to use this item.")
                return false
            end
            
--            if (skills[item.itemid].voc ~= player:getVocation():getId()) or ((skills[item.itemid].voc + 4) ~= player:getVocation():getId()) then
            if(isInArray({1,2,5,6}, player:getVocation():getId())) and skills[item.itemid].id ~= SKILL_MAGLEVEL then            
                stopEvent(training)
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.")
                return false
            elseif(isInArray({3,7}, player:getVocation():getId())) and skills[item.itemid].id ~= SKILL_DISTANCE then            
                stopEvent(training)
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.")
                return false
            elseif(isInArray({4,8}, player:getVocation():getId())) and ((skills[item.itemid].id ~= SKILL_SWORD) and (skills[item.itemid].id ~= SKILL_CLUB) and (skills[item.itemid].id ~= SKILL_AXE)) then            
                stopEvent(training)
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation can't use this exercise item.")
                return false
            end
             
        player:setExhaustion(Storage.Exercisedummy.exaust, 5 * 60)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You started training.")
        start_train(player:getId(),start_pos,item.itemid,target:getPosition())
        stopEvent(training)
        end
    end

    return true
end

 

Link para o post
Compartilhar em outros sites
  • Solução

@Enforc 

Teste esse e veja se resolve.

local skills = {
	[32384] = {id=SKILL_SWORD,voc=4}, -- KNIGHT
	[32385] = {id=SKILL_AXE,voc=4}, -- KNIGHT
	[32386] = {id=SKILL_CLUB,voc=4}, -- KNIGHT
	[32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN
	[32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID
	[32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, -- SORCERER
	[32124] = {id=SKILL_SWORD,voc=4}, -- KNIGHT
	[32125] = {id=SKILL_AXE,voc=4}, -- KNIGHT
	[32126] = {id=SKILL_CLUB,voc=4}, -- KNIGHT
	[32127] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN
	[32128] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_SMALLICE}, -- DRUID
	[32129] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE} -- SORCERER
}

local houseDummies = {32143, 32144, 32145, 32146, 32147, 32148}
local freeDummies = {32142, 32149}
local skillRate = configManager.getNumber(configKeys.RATE_SKILL)
local magicRate = configManager.getNumber(configKeys.RATE_MAGIC)

local function start_train(pid,start_pos,itemid,fpos, bonusDummy)
	local player = Player(pid)
	if player ~= nil then
		local pos_n = player:getPosition()
		if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then
			if player:getItemCount(itemid) >= 1 then
				local exercise = player:getItemById(itemid,true)
				if exercise:isItem() then
					if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then
						local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES)
						if charges_n >= 1 then
							exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES,(charges_n-1))

							local voc = player:getVocation()

							if skills[itemid].id == SKILL_MAGLEVEL then
								if not bonusDummy then
									player:addManaSpent(math.ceil(500*magicRate))
								else
									player:addManaSpent(math.ceil(500*magicRate)*1.1) -- 10%
								end
							else
								if not bonusDummy then
									player:addSkillTries(skills[itemid].id, 1*skillRate)
								else
									player:addSkillTries(skills[itemid].id, (1*skillRate)*1.1) -- 10%
								end
							end
								fpos:sendMagicEffect(CONST_ME_HITAREA)
							if skills[itemid].range then
								pos_n:sendDistanceEffect(fpos, skills[itemid].range)
							end
							local training = addEvent(start_train, voc:getAttackSpeed(), pid,start_pos,itemid,fpos)
							player:setStorageValue(Storage.isTraining,1)
						else
							exercise:remove(1)
							player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training weapon vanished.")
							stopEvent(training)
							player:setStorageValue(Storage.isTraining,0)
						end
					end
				end
			end
		else
			player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.")
			stopEvent(training)
			player:setStorageValue(Storage.isTraining,0)
		end
	else
		stopEvent(training)
		if player then -- verificar se o player ainda existe (logado), caso esteja, enviar mensagem de erro e parar treino. isso evita erros no console
			player:sendTextMessage(MESSAGE_INFO_DESCR, "Your training has stopped.")
			player:setStorageValue(Storage.isTraining,0)
		end
	end
	return true
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
	local start_pos = player:getPosition()
	if player:getStorageValue(Storage.isTraining) == 1 then
		player:sendTextMessage(MESSAGE_INFO_DESCR, "You are already training.")
		return false
	end
	if target:isItem() then
		if isInArray(houseDummies,target:getId()) then
			if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then
				player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.")
				stopEvent(training)
				return true
			end
			player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.")
			start_train(player:getId(),start_pos,item.itemid,target:getPosition(), true)
		elseif isInArray(freeDummies, target:getId()) then
			if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then
				player:sendTextMessage(MESSAGE_INFO_DESCR, "Get closer to the dummy.")
				stopEvent(training)
				return true
			end
			player:sendTextMessage(MESSAGE_INFO_DESCR, "You started training.")
			start_train(player:getId(),start_pos,item.itemid,target:getPosition(), false)
		end
	end
	return true
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