GO
pedido

Alavanca De Sumonar Monstro Com Custo

Por godpank, 24 de set. de 2012 em Scripts

servidor 7.6
script
34
16.7k
godpankG
24 de setembro de 2012 às 12:33

Olá! Gostaria de um script onde o player puxasse uma alavanca e pudesse sumonar 02 monstros. Cada monstro sumonado teria que descontar do player algum valor. Quando o espaço dos monstros sumonados forem ocupados, o player não poderia perder dinheiro quando continuasse puxando. Obrigado.

brun123B
24 de setembro de 2012 às 12:55

Vê se esse serve pra você:

 

 

-- configurações:
local NOME_MONSTRO = "Cooperative Mode" -- nome do monstro
local LIMITE_MONSTROS = 6 -- max de monstros sumonados pelo player de uma só vez
local CUSTO_PRA_SUMONAR = 0 -- preço a pagar em gold (para cada monstro sumonado, se sumonar 2 de uma vez, vai pagar 2x o preço)
local QUANTIDADE_CRIADA_POR_VEZ = 2 -- quantos monstros vão ser criados a cada puxada
local EFEITO_AO_CRIAR_MONSTRO = CONST_ME_TELEPORT -- efeito que aparece quando o monstro é criado

local playerMonsterCount = {}

function onUse(cid, item, frompos, item2, topos)

   local summonedCount = 0

   if not playerMonsterCount[getPlayerGUID(cid)] then
    playerMonsterCount[getPlayerGUID(cid)] = {}
   else
    for _, mid in pairs (playerMonsterCount[getPlayerGUID(cid)]) do
	    if not isCreature(mid) then
		    playerMonsterCount[getPlayerGUID(cid)][_] = nil
	    else
		    summonedCount = summonedCount + 1
	    end
    end
   end

   if summonedCount >= LIMITE_MONSTROS then
   return doPlayerSendCancel(cid, "Você não pode sumonar mais monstros.")
   end

   local removeMoney, newMonsters = false, {}

   for sCount = 1, QUANTIDADE_CRIADA_POR_VEZ do
    local newMonster = doCreateMonster(NOME_MONSTRO, getThingPos(cid), false)
    if not newMonster then break end
    table.insert(newMonsters, newMonster)
    removeMoney = true
    if #newMonsters + summonedCount >= LIMITE_MONSTROS then break end
   end

   if removeMoney and doPlayerRemoveMoney(cid, CUSTO_PRA_SUMONAR * #newMonsters) then
    for _, mid in pairs (newMonsters) do
	    doSendMagicEffect(getThingPos(mid), EFEITO_AO_CRIAR_MONSTRO)
	    table.insert(playerMonsterCount[getPlayerGUID(cid)], mid)
    end
   else
    for _, mid in pairs (newMonsters) do
	    doRemoveCreature(mid)
    end
    return doPlayerSendCancel(cid, "Você não tem dinheiro suficiente para sumonar monstros.")
   end

return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
end

 

Editado Setembro 24 por brun123

godpankG
24 de setembro de 2012 às 17:10

Olá brun123!

 

Retornou com o seguinte erro:

 

data/actions/scripts/monstro alavanca.lua:37 unexpected symbol near "#".

 

Obrigado.

SkyLighS
24 de setembro de 2012 às 18:07

editei o dele

-- configurações:
local NOME_MONSTRO = "Cooperative Mode" -- nome do monstro
local LIMITE_MONSTROS = 6 -- max de monstros sumonados pelo player de uma só vez
local CUSTO_PRA_SUMONAR = 0 -- preço a pagar em gold (para cada monstro sumonado, se sumonar 2 de uma vez, vai pagar 2x o preço)
local QUANTIDADE_CRIADA_POR_VEZ = 2 -- quantos monstros vão ser criados a cada puxada
local EFEITO_AO_CRIAR_MONSTRO = CONST_ME_TELEPORT -- efeito que aparece quando o monstro é criado
local playerMonsterCount = {}
function onUse(cid, item, frompos, item2, topos)
   local summonedCount = 0
   if not playerMonsterCount[getPlayerGUID(cid)] then
	    playerMonsterCount[getPlayerGUID(cid)] = {}
   else
	    for _, mid in pairs (playerMonsterCount[getPlayerGUID(cid)]) do
			    if not isCreature(mid) then
					    playerMonsterCount[getPlayerGUID(cid)][_] = nil
			    else
					    summonedCount = summonedCount + 1
			    end
	    end
   end

   if summonedCount >= LIMITE_MONSTROS then
   return doPlayerSendCancel(cid, "Você não pode sumonar mais monstros.")
   end
   local removeMoney, newMonsters = false, {}
   for sCount = 1, QUANTIDADE_CRIADA_POR_VEZ do
	    local newMonster = doCreateMonster(NOME_MONSTRO, getThingPos(cid), false)
	    if not newMonster then break end
	    table.insert(newMonsters, newMonster)
	    removeMoney = true
	    if newMonsters + summonedCount >= LIMITE_MONSTROS then break end
   end

   if removeMoney and doPlayerRemoveMoney(cid, CUSTO_PRA_SUMONAR * #newMonsters) then
	    for _, mid in pairs (newMonsters) do
			    doSendMagicEffect(getThingPos(mid), EFEITO_AO_CRIAR_MONSTRO)
			    table.insert(playerMonsterCount[getPlayerGUID(cid)], mid)
	    end
   else
	    for _, mid in pairs (newMonsters) do
			    doRemoveCreature(mid)
	    end
	    return doPlayerSendCancel(cid, "Você não tem dinheiro suficiente para sumonar monstros.")
   end

return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
end

godpankG
24 de setembro de 2012 às 18:19

Olá SkyLigh!

 

Agora deu o mesmo erro, em outra linha:

 

data/actions/scripts/monstro alavanca.lua:34 unexpected symbol near "#".

 

Obrigado.

SkyLighS
24 de setembro de 2012 às 18:27

hm veja agora

 

-- configurações:
local NOME_MONSTRO = "Cooperative Mode" -- nome do monstro
local LIMITE_MONSTROS = 6 -- max de monstros sumonados pelo player de uma só vez
local CUSTO_PRA_SUMONAR = 0 -- preço a pagar em gold (para cada monstro sumonado, se sumonar 2 de uma vez, vai pagar 2x o preço)
local QUANTIDADE_CRIADA_POR_VEZ = 2 -- quantos monstros vão ser criados a cada puxada
local EFEITO_AO_CRIAR_MONSTRO = CONST_ME_TELEPORT -- efeito que aparece quando o monstro é criado
local playerMonsterCount = {}
function onUse(cid, item, frompos, item2, topos)
   local summonedCount = 0
   if not playerMonsterCount[getPlayerGUID(cid)] then
			    playerMonsterCount[getPlayerGUID(cid)] = {}
   else
			    for _, mid in pairs (playerMonsterCount[getPlayerGUID(cid)]) do
							    if not isCreature(mid) then
											    playerMonsterCount[getPlayerGUID(cid)][_] = nil
							    else
											    summonedCount = summonedCount + 1
							    end
			    end
   end

   if summonedCount >= LIMITE_MONSTROS then
   return doPlayerSendCancel(cid, "Você não pode sumonar mais monstros.")
   end
   local removeMoney, newMonsters = false, {}
   for sCount = 1, QUANTIDADE_CRIADA_POR_VEZ do
			    local newMonster = doCreateMonster(NOME_MONSTRO, getThingPos(cid), false)
			    if not newMonster then break end
			    table.insert(newMonsters, newMonster)
			    removeMoney = true
			    if newMonsters + summonedCount >= LIMITE_MONSTROS then break end
   end

   if removeMoney and doPlayerRemoveMoney(cid, CUSTO_PRA_SUMONAR * newMonsters) then
			    for _, mid in pairs (newMonsters) do
							    doSendMagicEffect(getThingPos(mid), EFEITO_AO_CRIAR_MONSTRO)
							    table.insert(playerMonsterCount[getPlayerGUID(cid)], mid)
			    end
   else
			    for _, mid in pairs (newMonsters) do
							    doRemoveCreature(mid)
			    end
			    return doPlayerSendCancel(cid, "Você não tem dinheiro suficiente para sumonar monstros.")
   end

return doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
end

godpankG
24 de setembro de 2012 às 18:46

SkyLigh,

 

Quando ligo o servidor não acusa mais o erro, mas no jogo não acontece nada, e vem a mensagem "you can not use this object".

 

Obg.

brun123B
24 de setembro de 2012 às 19:49

Desculpa amigo, eu tinha colocado um # onde não deiva, mas logo depois eu editei o meu post, acredito que você pegou o código antes de dar tempo de editá-lo

 

é só pegar meu script de novo, você coloca essa tag no actions.xml:

 

<action actionid="8000" event="script" value="NOME_DO_SCRIPT.lua"/>

 

e coloca na alavanca o action id 8000, ou então se você modificar esse número, coloque o mesmo n º no action id da alavanca que você escolher para a tag

godpankG
24 de setembro de 2012 às 20:00

Brun123, não funcionou. Eu gostaria de ressaltar que essa action seria para servidor 7.6. Estou torcendo para que vocês consigam fazer funcionar. Obrigado novamente.

brun123B
25 de setembro de 2012 às 10:28

ah servidor 7.6 é muito diferente, mas não funcionou por quê?

deu algum erro ou simplesmente não aconteceu nada?

configurou a tag no actions.xml certinho e o action ou unique id na alavanca no mapa?

godpankG
25 de setembro de 2012 às 11:39

Olá Brun123!

 

Coloquei tudo certinho, desculpe não ter postado o erro.

 

O que acontece agora é o seguinte, quando vou carregar o server, dá a seguinte mensagem em "actions": Missing Script Tag", mas não impede de ligar o servidor.

Quando vou na alavanca, no jogo, a mensagem continua "you can not use this object".

 

Não tenho conhecimento em scripts, mas fiz uma mudança em um que tinha, ficando assim:


  • function onUse(cid, item, frompos, item2, topos)

  • if item.uid == 3334 and doPlayerRemoveMoney(cid,500) == 1 then

  • doPlayerSendTextMessage(cid,22,"teste.")

  • doSummonCreature("demon",topos)

  • doSendMagicEffect(topos,13)

  • else

  • doPlayerSendCancel(cid,"Você está sem gps.")

  • end

  • return 1

  • end

Mas se o player ficar clicando na alavanca e não tiver mais espaço para sumonar monstro, fica descontando o valor dele sempre, sem sumonar mais por falta de espaço.

 

Link do script pelo pastebin: http://pastebin.com/2GtvHCLJ

 

Obs. O script que coloquei no link acima é básico demais, e como informei antes, não tenho conhecimento nenhum em Lua.

 

Obrigado.

Editado Setembro 25 por GodPank

brun123B
25 de setembro de 2012 às 11:51

eu testei meu script e funcionou tranquilo...

que tag você colocou no actions.xml?

godpankG
25 de setembro de 2012 às 12:03

Tag: <action actionid="3334" event="script" value="monstro alavanca.lua"/>

brun123B
25 de setembro de 2012 às 12:31

e configurou certinho o action id na alavanca?

é ACTION ID e não unique id...

godpankG
25 de setembro de 2012 às 12:34

Sim, ACTION ID: 3334.