Ir para conteúdo

Featured Replies

Postado
Galera utilizo um sistema de critical ultrapassado em meu servidor 8.6 DEV 0.4,que preciso criar um script para cada arma e registrar todas nos moviments,esse sistema é apenas para armas com atack 45 ou superior funcionar,um amigo meu começou a fazer um script para registrar todas as arma em apenas um script facilitando muito a configuração e não funcionou(nenhum erro no console),eu vou postar ele para poder ver qual o problema,ou se optar em fazer outro script funcional ou se for possivel um script que dispensa registrar os IDs e apenas se basear no atack 45+ das arma ficaria grato de verdade! =]
 
 
 
Segue o script:
 
local specific_weapons = true -- Somente armas especificas poderãoo dar cri­tico? (true / false)
local critical_weapons = { -- IDs das armas com cri­tico (só edite se o specific_weapons for true)
	[2400] = {30, 100}, -- [id da arma] = {chance, porcentagem_de_cri­tico},
	[2222] = {25, 200},
}
local critical_ratio = 25 -- Chance geral de crÃitico se o specific_weapons for false
local critical_percentage = 200 -- Porcentagem de cri­tico se o specific_weapons for false

function onStatsChange(cid, attacker, type, combat, value)
	if type == STATSCHANGE_HEALTHLOSS and value >= 1 then
		if specific_weapons then
			for weapon_ids, arrays in pairs(critical_weapons) do
				if getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid == weapon_ids or getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid == weapon_ids then
					if math.random(1, 100) <= arrays[1] then
						doTargetCombatHealth(attacker, cid, combat, -value*arrays[2], -value*arrays[2], CONST_ME_NONE)
						doSendAnimatedText(getCreaturePosition(cid), "CRITICAL "..tostring(arrays[2]).."%!", TEXTCOLOR_DARKRED)
					end
				end
			end
		else
			if math.random(1, 100) <= critical_ratio then
				doTargetCombatHealth(attacker, cid, combat, -value*critical_percentage, -value*critical_percentage, CONST_ME_NONE)
				doSendAnimatedText(getCreaturePosition(cid), "CRITICAL "..tostring(critical_percentage).."%!", TEXTCOLOR_DARKRED)
			end
		end
	end
	return true
end

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

  • Respostas 6
  • Visualizações 1.1k
  • Created
  • Última resposta

Top Posters In This Topic

Postado

Não testei.

local config = {
    attack = 45,                  --Ataque mínimo da arma.
    chance = 25,                  --Chance de dar crítico.
    multiplier = 1.5,             --Multiplicador de crítico.
}
function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) then
        for i = 5, 6 do
            local item = getPlayerSlotItem(attacker, i)
            if item then
                if getItemAttack(item) >= config.attack then
                    if math.random(1, 100) <= config.chance then
                        value = math.floor(value * config.multiplier)
                        doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED)
                        break
                    end
                end
            end
        end
    end
    return true
end

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

não respondo pms solicitando suporte em programação/scripting

Postado
local config = {
	specific_weapons = "yes" -- Somente armas especificas poderãoo dar cri­tico? (("yes" / true) / ("no" / false))
	critical_chance = 25 -- 1 a 100
	critical_damage = 200 -- damage + critical_damage%
	critical_weapons = {
		[2400] = {30, 100},
		[2222] = {25, 200}
	}
}

config.specific_weapons = getBooleanFromString(config.specific_weapons)
function onStatsChange(cid, attacker, type, combat, value)
	if(type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then
		if(specific_weapons) then
			for weapon_ids, arrays in pairs(config.critical_weapons) do
				if(getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid == weapon_ids or getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid == weapon_ids) then
					if(math.random(1,100) <= arrays[1]) then
						doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(arrays[2]/100))), -math.floor(value+(value*(arrays[2]/100))), CONST_ME_NONE)
						doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED) -- Só é permitido 9 caracteres
						return false
					end
				end
			end
		else
			if(math.random(1,100) <= config.critical_chance) then
				doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(config.critical_damage/100))), -math.floor(value+(value*(config.critical_damage/100))), CONST_ME_NONE)
				doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED)
				return false
			end
		end
	end
	return true
end

Não testei.

 

 

OBS: Magias também poderão dar critical.

Postado
  • Autor

Não testei.

local config = {
    attack = 45,                  --Ataque mínimo da arma.
    chance = 25,                  --Chance de dar crítico.
    multiplier = 1.5,             --Multiplicador de crítico.
}
function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS and isPlayer(attacker) then
        for i = 5, 6 do
            local item = getPlayerSlotItem(attacker, i)
            if item then
                if getItemAttack(item) >= config.attack then
                    if math.random(1, 100) <= config.chance then
                        value = math.floor(value * config.multiplier)
                        doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED)
                        break
                    end
                end
            end
        end
    end
    return true
end

 

 zipter98@Testei aqui e não acontece nada,aumentei a chance de critico usando uma arma de atack 48 e nada acontece,nenhum erro no console.

 

 

local config = {
	specific_weapons = "yes" -- Somente armas especificas poderãoo dar cri­tico? (("yes" / true) / ("no" / false))
	critical_chance = 25 -- 1 a 100
	critical_damage = 200 -- damage + critical_damage%
	critical_weapons = {
		[2400] = {30, 100},
		[2222] = {25, 200}
	}
}

config.specific_weapons = getBooleanFromString(config.specific_weapons)
function onStatsChange(cid, attacker, type, combat, value)
	if(type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then
		if(specific_weapons) then
			for weapon_ids, arrays in pairs(config.critical_weapons) do
				if(getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid == weapon_ids or getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid == weapon_ids) then
					if(math.random(1,100) <= arrays[1]) then
						doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(arrays[2]/100))), -math.floor(value+(value*(arrays[2]/100))), CONST_ME_NONE)
						doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED) -- Só é permitido 9 caracteres
						return false
					end
				end
			end
		else
			if(math.random(1,100) <= config.critical_chance) then
				doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(config.critical_damage/100))), -math.floor(value+(value*(config.critical_damage/100))), CONST_ME_NONE)
				doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED)
				return false
			end
		end
	end
	return true
end

Não testei.

 

 

OBS: Magias também poderão dar critical.

 

 

 

MaTTch@ Cara ao carregar o script retornou erro no console abaixo:(esse negocio de magia dar critical é possivel mudar deixar se basear apenas no Attack da arma empunhada nas mãos?)

[14:11:34.484] [Error - LuaInterface::loadFile] data/creaturescripts/scripts/cr
tical.lua:3: '}' expected (to close '{' at line 1) near 'critical_chance'
[14:11:34.484] [Warning - Event::loadScript] Cannot load script (data/creatures
ripts/scripts/critical.lua)
[14:11:34.484] data/creaturescripts/scripts/critical.lua:3: '}' expected (to cl
se '{' at line 1) near 'critical_chance'

Ambos foram testados com :

 

Essa tag registrada em login.lua

 registerCreatureEvent(cid, 'CriticalHit')

E essa em creaturescripts.xml:

 <event type="statschange" name="CriticalHit" event="script" value="critical.lua"/>

Obrigado a todos que se empenham em me ajudar.

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

Postado

Esqueci das virgulas, tenta agora:

local config = {
    specific_weapons = "yes", -- Somente armas especificas poderãoo dar cri­tico? (("yes" / true) / ("no" / false))
    critical_chance = 25, -- 1 a 100
    critical_damage = 200, -- damage + critical_damage%
    critical_weapons = {
        [2400] = {30, 100},
        [2222] = {25, 200}
    }
}

config.specific_weapons = getBooleanFromString(config.specific_weapons)
function onStatsChange(cid, attacker, type, combat, value)
    if(type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then
        if(specific_weapons) then
            for weapon_ids, arrays in pairs(config.critical_weapons) do
                if(getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid == weapon_ids or getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid == weapon_ids) then
                    if(math.random(1,100) <= arrays[1]) then
                        doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(arrays[2]/100))), -math.floor(value+(value*(arrays[2]/100))), CONST_ME_NONE)
                        doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED) -- Só é permitido 9 caracteres
                        return false
                    end
                end
            end
        else
            if(math.random(1,100) <= config.critical_chance) then
                doTargetCombatHealth(attacker, cid, combat, -math.floor(value+(value*(config.critical_damage/100))), -math.floor(value+(value*(config.critical_damage/100))), CONST_ME_NONE)
                doSendAnimatedText(getThingPos(cid), "CRITICAL!", TEXTCOLOR_DARKRED)
                return false
            end
        end
    end
    return true
end

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo