Postado Fevereiro 16, 2015 10 anos 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 critico? (true / false) local critical_weapons = { -- IDs das armas com critico (só edite se o specific_weapons for true) [2400] = {30, 100}, -- [id da arma] = {chance, porcentagem_de_critico}, [2222] = {25, 200}, } local critical_ratio = 25 -- Chance geral de crÃitico se o specific_weapons for false local critical_percentage = 200 -- Porcentagem de critico 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 Fevereiro 16, 2015 10 anos por Lyon (veja o histórico de edições)
Postado Fevereiro 16, 2015 10 anos 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 Fevereiro 16, 2015 10 anos por zipter98 (veja o histórico de edições) não respondo pms solicitando suporte em programação/scripting
Postado Fevereiro 16, 2015 10 anos local config = { specific_weapons = "yes" -- Somente armas especificas poderãoo dar critico? (("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 Fevereiro 16, 2015 10 anos 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 critico? (("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 Fevereiro 16, 2015 10 anos por Lyon (veja o histórico de edições)
Postado Fevereiro 16, 2015 10 anos Esqueci das virgulas, tenta agora: local config = { specific_weapons = "yes", -- Somente armas especificas poderãoo dar critico? (("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.