Ir para conteúdo
  • Cadastre-se

(Resolvido)Escolher magias!


Ir para solução Resolvido por Garou,

Posts Recomendados

Galera no meu server algumas magias têm de ser compradas, e eu queria um sistema que não deixasse o player ter duas magias semelhantes, exemplo : Se o player comprar Exevo Gran Mas Vis ele não pode comprar Exevo Gran Mas Flam, nem Exevo Gran Mas Tera, nem Exevo Gran Mas Frigo.

 

 

Link para o post
Compartilhar em outros sites

Olá,

 

Possível, é sim.

 

Mas seria necessário fazer um pequeno trecho de código, no script de compra de magias (seja NPC, Talkaction, etcétera), para essa verificação se o jogador já comprou magia semelhante a quer comprar.

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

Link para o post
Compartilhar em outros sites

NPC SCRIPT

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local moeda = 2157
local t = {
["rage of the skies"] = {price = 5,vocations = {1},level = 60},
["hells core"] = {price = 5,vocations = {1},level = 60},
["eternal winter"] = {price =5,vocations = {1},level = 60},
["wrath of nature"] = {price =5,vocations = {1},level = 60}
}
if (msgcontains(msg, 'SPELLS') or msgcontains(msg, 'spells'))then
local str = ""
str = str .. "Eu vendo estas Magias: "
for name, pos in pairs(t) do
str = str.." {"..name.."} = "..pos.price.." Moedas /"
end
str = str .. "."
npcHandler:say(str, cid)
elseif t[msg] then
if not getPlayerLearnedInstantSpell(cid, msg) then
if getPlayerLevel(cid) >= t[msg].level then
if isInArray(t[msg].vocations, getPlayerVocation(cid)) then
if doPlayerRemoveItem(cid,moeda,t[msg].price) then
doPlayerLearnInstantSpell(cid, msg)
npcHandler:say("Você aprendeu uma nova magia chamada ".. msg .."!", cid)
else
npcHandler:say("você não tem "..t[msg].price.." ".. getItemNameById(moeda), cid)
end
else
npcHandler:say("você não tem a vocação para comprar está spell.", cid)
end
else
npcHandler:say("você precisa ter level "..t[msg].level.." ou mais para comprar essa magia.", cid)
end
else
npcHandler:say("você já aprendeu essa magia.", cid)
end
end
return TRUE
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Spell Exemple :

 

<instant name="Rage of the Skies" words="exevo gran mas vis" lvl="55" mana="600" prem="1" selftarget="1" exhaustion="2000" groups="4,2000" icon="119" needlearn="1" event="script" value="attack/rage of the skies.lua">
<vocation id="1"/>
</instant>
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_BIGCLOUDS)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 5, 12)


local area = createCombatArea(AREA_CROSS6X6)
setCombatArea(combat, area)


function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end
 
Link para o post
Compartilhar em outros sites
  • Solução

Eu testei superficialmente, mas acho que funciona.

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

local talkState = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

local spells = {
	["rage of the skies"] = {price = 5, vocations = {1}, level = 60, storage = 17501},
	["hells core"] = {price = 5, vocations = {1}, level = 60, storage = 17501},
	["eternal winter"] = {price = 5, vocations = {1}, level = 60, storage = 17501},
	["wrath of nature"] = {price = 5, vocations = {1}, level = 60, storage = 17501},
}

function creatureSayCallback(cid, type, msg)
	if(not npcHandler:isFocused(cid)) then
		return false
	end
	
	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

	local moeda = 2157
	
	if msgcontains(msg, "spells") then
		local text = "Eu vendo essas magias: "
		
		local name, values = next(spells, nil)
		while name do
			text = text .." {".. name .."}: ".. values.price .." moedas"
			name, values = next(spells, name)
			if not name then
				text = text .."."
			else
				text = text ..","
			end
		end
		
		selfSay(text, cid)
	elseif spells[msg:lower()] then
		local spell = msg:lower()
		if not getPlayerLearnedInstantSpell(cid, spell) then
			if getPlayerLevel(cid) >= spells[spell].level then
				if isInArray(spells[spell].vocations, getPlayerVocation(cid)) then
					if doPlayerRemoveItem(cid, moeda, spells[spell].price) then
						if getCreatureStorage(cid, spells[spell].storage) == -1 then
							doPlayerLearnInstantSpell(cid, spell)
							selfSay("Você aprendeu uma nova magia chamada ".. spell .."!", cid)
							doCreatureSetStorage(cid, spells[spell].storage, 1)
						else
							selfSay("Você aprendeu uma magia desse tipo", cid)
						end
					else
						selfSay("Você não possui ".. spells[spell].price .." ".. getItemNameById(moeda) ..".", cid)
					end
				else
					selfSay("Sua vocação não pode aprender essa magia.", cid)
				end
			else
				selfSay("Você não possui o level necessário para aprender essa magia.", cid)
			end
		else
			selfSay("Você já aprendeu essa magia.", cid)
		end
	end					
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Editado por Garou (veja o histórico de edições)

Link para o post
Compartilhar em outros sites

Não deu nenhum erro no distro, mas ainda é possível comprar mais de uma dessas spells, obrigado por tentar me ajudar


Agora foi, não sei se tinha feito errado ontem ou se você editou, tá reputado.

Link para o post
Compartilhar em outros sites

Não deu nenhum erro no distro, mas ainda é possível comprar mais de uma dessas spells, obrigado por tentar me ajudar

Agora foi, não sei se tinha feito errado ontem ou se você editou, tá reputado.

 

*risos*

 

Não editei nada.

 

Obrigado, boa sorte.

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.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Kill of sumoners
      Boa noite, estou com um erro ao atacar um player em meu sv eu nao pego pk, nem sai magia, aparece a mensagem "voce so pode usar isso em criaturas"
      obs: magia em area acerta e pega pk, apenas as targets ou hits de arma nao vao 
    • Por L3K0T
      SUMMON SPELLS
       
       
      Como o nome diz é uma spell que sumona até 4 monstros ou podendo adicionar mais, legal pra naruto etc... Então para não perder ou ficar em vão, irei deixar pra vocês e já com as correções.
       
       
      DEMONSTRAÇÃO

      2022-09-01 00-08-30.mp4  
       
      INSTALANDO
      1: primeiro vá em data/spells/scripts e crie um arquivo.lua e adicione isso abaixo dentro dele e em seguida salve.
      function onCastSpell(cid, var) local from,to = {x=962, y=885, z=7},{x=973, y=892, z=7} local from2,to2 = {x=979, y=901, z=7},{x=991, y=905, z=7} local dir = getPlayerLookDir(cid) local ppos = getPlayerPosition(cid) if(dir==1)then ppos.x = ppos.x + 1 elseif(dir==2)then ppos.y = ppos.y + 1 elseif(dir==3)then ppos.x = ppos.x - 1 elseif(dir==0)then ppos.y = ppos.y - 1 end local summon = getCreatureSummons(cid) local MaximoSummon = 0 if isInRange(getCreaturePosition(cid), from, to) or isInRange(getCreaturePosition(cid), from2, to2) then doPlayerSendCancel(cid, "Você não pode usar Summons Aqui!") return false end if (table.maxn(summon) > MaximoSummon) then doPlayerSendTextMessage(cid, 22, "Voce ainda tem summons em batalha!") return false end local clone1 = doConvinceCreature(cid, doCreateMonster("Morgaroth", ppos)) local clone2 = doConvinceCreature(cid, doCreateMonster("Demon", ppos)) local clone3 = doConvinceCreature(cid, doCreateMonster("Terror Bird", ppos)) local clone4 = doConvinceCreature(cid, doCreateMonster("Giant Spider", ppos)) doPlayerSendTextMessage(cid, 22, "Voce summonou 4 criaturas!") end  
       
      2: agora vá em data/spells/ e abra o arquivo spells.xml e coloca isso dentro e salve
       
      <instant name="Sumonar" words="!help" lvl="0" mana="0" aggressive="0" params="1" exhaustion="1000" needlearn="0" event="script" value="arquivo.lua"> </instant>  

      2022-09-01 00-28-08.mp4 Pronto! agora é só usar a imaginação, pode adicionar monstro diferente ou do mesmo quantas vezes quiser.
       
      créditos fonte: @Lenilson e L3K0T
       
       
       
       
       
    • Por Thiago Virtuoso
      Preciso de ajuda com minha spell, quero que quando o player esteja com o addon do druid full ele use o combat e quando estiver com qualquer outro addon usar o combat2.
       
      Script:
       
      local combat = createCombatObject()

      local meteor = createCombatObject()
      setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
      setCombatParam(combat, COMBAT_PARAM_EFFECT, 41)
      setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -10.3, -47, -10.2, 2)

      local stun = createConditionObject(CONDITION_PARALYZE)
      setConditionParam(stun, CONDITION_PARAM_TICKS, 5000)
      setConditionFormula(stun, -0.8, 0, -0.9, 0)
      setCombatCondition(meteor, stun)

      local combat2 = createCombatObject()

      local meteor2 = createCombatObject()
      setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
      setCombatParam(combat2, COMBAT_PARAM_EFFECT, 43)
      setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -7.3, -47, -6.2, 2)






      local arr = {
      {0, 0, 0, 0, 0},
      {0, 0, 1, 0, 0},
      {0, 1, 3, 1, 0},
      {0, 0, 1, 0, 0},
      {0, 0, 0, 0, 0}
      }

      local arr2 = {
      {0, 0, 0, 0, 0},
      {0, 0, 1, 0, 0},
      {0, 1, 3, 1, 0},
      {0, 0, 1, 0, 0},
      {0, 0, 0, 0, 0}
      }



      local area = createCombatArea(arr)
      local area2 = createCombatArea(arr2)

      setCombatArea(combat, area)
      setCombatArea(combat2, area2)

      local function meteorCast(p)
          doCombat(p.cid, p.combat, positionToVariant(p.pos))
      end
      local function meteorCast2(p)
          doCombat(p.cid, p.combat2, positionToVariant(p.pos))
      end
      local function stunEffect(cid)
          doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
      end


      function onTargetTile(cid, pos)
          if (math.random(0, 0) == 0) then
              local ground = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
              if (isInArray(water, ground.itemid) == TRUE) then
                  local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
                  doSendDistanceShoot(newpos, pos, CONST_ANI_ICE)
                  addEvent(meteorCast, 200, {cid = cid, pos = pos, combat = meteor_water})
              else
                  local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
                  doSendDistanceShoot(newpos, pos, CONST_ANI_ICE)
                  addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
              end
          end
      end

      setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")


      function onTargetTile(cid, pos)
          if (math.random(0, 0) == 0) then
              local ground = getThingfromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0})
              if (isInArray(water, ground.itemid) == TRUE) then
                  local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
                  doSendDistanceShoot(newpos, pos, CONST_ANI_ICE)
                  addEvent(meteorCast2, 200, {cid = cid, pos = pos, combat2 = meteor_water2})
              else
                  local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
                  doSendDistanceShoot(newpos, pos, CONST_ANI_ICE)
                  addEvent(meteorCast2, 200, {cid = cid,pos = pos, combat2 = meteor2})
              end
          end
      end

      setCombatCallback(combat2, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

      function onCastSpell(cid, var)
      local parameters = { cid = cid, var = var, combat = combat, combat2 = combat2 }


      local sex = getPlayerSex(cid)
      localOutfit = {lookType = 144, lookAddons = 3}
      localOufit2 = {lookType = 148, lookAddons = 3}




      if sex == 0 then
      if getCreatureOutfit == localOutfit2 then
      return doCombat(cid, combat, var)
      else
      return doCombat(cid, combat2, var)
      end
      end


      if sex == 1 then
      if getCreatureOutfit == localOutfit then
      return doCombat(cid, combat, var)
      else
      return doCombat(cid, combat2, var)
      end
      end
      end
    • Por Gerson Silva
      Eae Pessoal Queria Uma Ajuda Como Eu Mudar A Cor Do Meu Correr Ele Fica Assim laranja Mais O Efeito Já Ta Fucionando.. Eu Queria Que Ele Ficasse Laranja Ou Outra Cor.. Obrigado Pela Atenção Obrigado.
       
       
      Print De Como Está Meu Correr Amarelo.. Queria Que Ficasse Laranja Quando Eu Falasse O Efeito Correr
       

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo