Ir para conteúdo
  • 0

Script Pra Uma Sword


Mattziin

Pergunta

Posts Recomendados

  • 0

function onStatsChange(cid, attacker, type, combat, value)
local weapons = {123, 321, 231}
local slots = {CONST_SLOT_LEFT, CONST_SLOT_RIGHT}
for i = 1, #slots do
if isInArray(slots[i], weapons) and isPlayer(attacker) then
doPlayerAddMana(cid, -value)
doPlayerAddMana(attacker, value)
doSendAnimatedText(getPlayerPosition(attacker), "+"..mana.."", math.random(1, 255))
elseif isInArray(slots[i], weapons) and isMonster(cid) then
doPlayerAddMana(attacker, value)
doSendAnimatedText(getPlayerPosition(attacker), "+"..mana.."", math.random(1, 255))
end
end
return true
end

 

tag

<event type="statschange" name="Sugar" event="script" value="nome.lua"/>

login.lua

registerCreatureEvent(cid, "Sugar")

Editado por Skymagnum
Link para o comentário
Compartilhar em outros sites

  • 0

function onStatsChange(cid, attacker, type, combat, value)
local weapons = {123, 321, 231}
local slots = {CONST_SLOT_LEFT, CONST_SLOT_RIGHT}
for i = 1, #slots do
if isInArray(slots[i], weapons) and isPlayer(attacker) then
doPlayerAddMana(cid, -value)
doPlayerAddMana(attacker, value)
doSendAnimatedText(getPlayerPosition(attacker), "+"..mana.."", math.random(1, 255))
elseif isInArray(slots[i], weapons) and isMonster(cid) then
doPlayerAddMana(attacker, value)
doSendAnimatedText(getPlayerPosition(attacker), "+"..mana.."", math.random(1, 255))
end
end
return true
end

 

tag

<eventtype="statschange"name="Sugar"event="script"value="nome.lua"/>

login.lua

registerCreatureEvent(cid, "Sugar")

 

Nao funfo e nao aparece erro nenhum :S

Link para o comentário
Compartilhar em outros sites

  • 0

O método do LuckOake (por statschange) é melhor de se trabalhar nesse caso...

Só faltou especificar no script que o type do stats change é STATSCHANGE_HEALTHLOSS, pois o onStatsChange é executado também quando alguém ganha/perde vida/mana.

É sempre bom verificar se o monstro que está tendo os stats alterados está vivo e existe, usando essas linhas:

 

if not isCreature(cid) or getCreatureHealth(cid) <= 0 then
return true
end

 

Isso evita erros indesejáveis no console.

No caso especificamente eu usaria a função getPlayerWeapon e declararia as suas locais em cima do function onStatsChange já que elas sempre assumirão o mesmo valor... Questão de estética.

 

Skymagnum, você tá usando a função isInArray muito errado...

ela funciona assim:

isInArray(array, valor), vai procurar dentro do array pra ver se existe algum elemento com o certo valor especificado, e você inverteu a ordem dos parâmetros:

 

isInArray(slots[i], weapons)
é igual a
isInArray(CONST_SLOT_LEFT, {123, 321, 231})
A função vai checar se {123, 321, 231} existe dentro de CONST_SLOT_LEFT, que é uma constante de valor 5 se não me engano...
O certo seria:
isInArray(weapons, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid)
Dessa forma vai checar se o itemid do item equipado no certo slot está dentro do array

Link para o comentário
Compartilhar em outros sites

  • 0

O método do LuckOake (por statschange) é melhor de se trabalhar nesse caso...

Só faltou especificar no script que o type do stats change é STATSCHANGE_HEALTHLOSS, pois o onStatsChange é executado também quando alguém ganha/perde vida/mana.

É sempre bom verificar se o monstro que está tendo os stats alterados está vivo e existe, usando essas linhas:

 

if not isCreature(cid) or getCreatureHealth(cid) <= 0 then
return true
end

 

Isso evita erros indesejáveis no console.

No caso especificamente eu usaria a função getPlayerWeapon e declararia as suas locais em cima do function onStatsChange já que elas sempre assumirão o mesmo valor... Questão de estética.

 

Skymagnum, você tá usando a função isInArray muito errado...

ela funciona assim:

isInArray(array, valor), vai procurar dentro do array pra ver se existe algum elemento com o certo valor especificado, e você inverteu a ordem dos parâmetros:

 

isInArray(slots[i], weapons)
é igual a
isInArray(CONST_SLOT_LEFT, {123, 321, 231})
A função vai checar se {123, 321, 231} existe dentro de CONST_SLOT_LEFT, que é uma constante de valor 5 se não me engano...
O certo seria:
isInArray(weapons, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid)
Dessa forma vai checar se o itemid do item equipado no certo slot está dentro do array

Poderia me ajudar entao ?

Link para o comentário
Compartilhar em outros sites

  • 0

Poderia, mas prefiro que quem está se esforçando há mais tempo nessa dúvida sane ela pra você, aí você dá seu rep pra essa pessoa e ela aprende mais.

 

 

 

-- Script by LuckOake com ajuda de Vodkart
local weaponsID = {1234, 4321} -- IDs das armas
local mana = 100 -- Mana Obtida

function onStatsChange(cid, attacker, type, combat, value)

  if not isCreature(cid) or not isCreature(attacker) or getCreatureHealth(cid) <= 0 then
  return true
  end
  if (isInArray(weaponsID, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid) or
      isInArray(weaponsID, getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid)) and
      type == STATSCHANGE_HEALTHLOSS then
  doPlayerAddMana(attacker, mana)
  doSendAnimatedText(getCreaturePos(attacker), "+"..mana.."", TEXTCOLOR_LIGHTBLUE)
  if isPlayer(cid) then
	 doPlayerAddMana(cid, -mana)
	 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
  elseif isMonster(cid) then
	 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
  end
  end

return true
end

 

 

Editado por brun123
Link para o comentário
Compartilhar em outros sites

  • 0

Poderia, mas prefiro que quem está se esforçando há mais tempo nessa dúvida sane ela pra você, aí você dá seu rep pra essa pessoa e ela aprende mais.

 

 

 

-- Script by LuckOake com ajuda de Vodkart
local weaponsID = {1234, 4321} -- IDs das armas
local mana = 100 -- Mana Obtida

function onStatsChange(cid, attacker, type, combat, value)

  if not isCreature(cid) or not isCreature(attacker) or getCreatureHealth(cid) <= 0 then
  return true
  end
  if (isInArray(weaponsID, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid) or
   isInArray(weaponsID, getPlayerSlotItem(cid, CONST_SLOT_RIGHT).itemid)) and
   type == STATSCHANGE_HEALTHLOSS then
  doPlayerAddMana(attacker, mana)
  doSendAnimatedText(getCreaturePos(attacker), "+"..mana.."", TEXTCOLOR_LIGHTBLUE)
  if isPlayer(cid) then
	 doPlayerAddMana(cid, -mana)
	 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
  elseif isMonster(cid) then
	 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
  end
  end

return true
end

 

 

 

Blz lek mais isso daqui é pedido e nao dúvida , Nao funfou nao !

tipo eu testei aqui e um player tira a mana do player q tá com a sword, o certo deveria o player com a sword tira a mana dos outros.

Editado por Mattziin
Link para o comentário
Compartilhar em outros sites

  • 0

Ah sim, é que eu tinha dado ctrl c/v no script do LuckOake, ele usou cid em vez de attacker na função getPlayerSlotItem.

 

 

-- Script by LuckOake com ajuda de Vodkart
local weaponsID = {1234, 4321} -- IDs das armas
local mana = 100 -- Mana Obtida

function onStatsChange(cid, attacker, type, combat, value)

  if not isCreature(cid) or not isCreature(attacker) or getCreatureHealth(cid) <= 0 then
  return true
  end

  if isPlayer(attacker) and type == STATSCHANGE_HEALTHLOSS and combat == COMBAT_PHYSICALDAMAGE and
 (isInArray(weaponsID, getPlayerSlotItem(attacker, CONST_SLOT_LEFT).itemid) or
  isInArray(weaponsID, getPlayerSlotItem(attacker, CONST_SLOT_RIGHT).itemid)) then
	  doPlayerAddMana(attacker, mana)
	  doSendAnimatedText(getCreaturePos(attacker), "+"..mana.."", TEXTCOLOR_LIGHTBLUE)
	  if isPlayer(cid) then
			 doPlayerAddMana(cid, -mana)
			 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
	  elseif isMonster(cid) then
			 doSendAnimatedText(getCreaturePos(cid), "-"..mana.."", TEXTCOLOR_PURPLE)
	  end
  end

return true
end

 

 

Sim, é um pedido que está sendo atendido e eu interrompi. Quero ver os outros aprendendo lua também amigo, assim como você deveria fazer em vez de simplesmente ficar fazendo pedidos e achar que os outros tem obrigação de te ajudar.

Editado por brun123
Link para o comentário
Compartilhar em outros sites

  • 0

Vlw lek funfou :D

Alerta:

Você já atingiu seu limite de reputações positivas para hoje

 

Amanha eu te dou seu rep merecido :D

 

Me diz uma coisa , tem como bota pra ele ganhar mana atacando monstro tambem ?

Editado por Mattziin
Link para o comentário
Compartilhar em outros sites

  • 0

Crie um arquivo chamado target.lua em data/creaturescripts/scripts e coloque isso dentro:

 

function onTarget(cid, target)
   if isMonster(target) then registerCreatureEvent(target, "ManaDrain") end
return true
end

 

Adicione essa tag no creaturescripts.xml:

 

<event type="target" name="RegisterManaDrainOnMonsters" event="script" value="target.lua"/>

 

e agora essa linha em login.lua:

 

registerCreatureEvent(cid, "RegisterManaDrainOnMonsters")

Link para o comentário
Compartilhar em outros sites

  • 0

Abra a pasta "data/creaturescripts/scripts" duplique um arquivo qualquer e renomeie para "weaponMana" sem as aspas e nele cole:

-- <Script by jhon992> --
local weaponMana = {2377, 2378, 2379, 2380}  -- id dos items que sugarão nama.
local chanceMana = 5 -- chance de sugar (10 = 10%, 20 = 20%, 30 = 30%, 1 = 1%, 5 = 5%) e assim por diante.
local manaPorcent = 10 -- vai sugar 10% de mana do player se acertar.

function onAttack(cid, target)
if getDistanceBetween(getCreaturePosition(cid), getCreaturePosition(target)) < 2 then
if isInArray(weaponMana, getPlayerSlotItem(cid, 5).itemid) or isInArray(weaponMana, getPlayerSlotItem(cid, 6).itemid) then
	if (math.random(1,100) > (100 - chanceMana)) then
		local mana = (getCreatureMana(target)*(manaPorcent/100))
		doPlayerSendTextMessage(cid, 23, "Você sugou "..mana.." de mana do "..getCreatureName(target)..".")
		doSendMagicEffect(getCreaturePosition(target), 1) -- 1 é o efeito que aparecera no target.
		doCreatureAddMana(target, -mana)
		doCreatureAddMana(cid, mana)
	end
end
return true
end

 

Agora no arquivo, "data/creaturescripts/creaturescripts.xml" cole a tag:

<event type="attack" name="WeaponMana" event="script" value="weaponMana.lua"/>

 

E por último, abra o arquivo login.lua que esta localizado em "data/creaturescripts/scripts" e cole a tag:

registerCreatureEvent(cid, "WeaponMana")

Editado por Jhon992
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...