Ir para conteúdo

[ACTION] Summon Scroll


Caronte

Posts Recomendados

Olá pessoal, venho lhes trazer hoje um script simples de manipulação de string.

O Script: Trata-se de como o título já diz, de uma Summon Scroll, que ao digitar o nome do monstro nela e clicar em Ok, ela fica preparada para sumonar um monstro.

ela pode ser usada tanto no inventário quanto no chão, e também tem uma lista de monstros que podem ser sumonados por ela.

 

 

 

Crie um arquivo chamado summonscroll.lua em actions/scripts

function onUse(cid, item, fromPos)
    
    local cont = getItemAttribute(item.uid, "text") -- nao precisa mexer
    local summons = {"demon", "dragon", "dog", "cat", "rotworm", "morgaroth", "cyclops", "dragon lord", "son of verminor", "wolf"} -- monstros disponiveis
    
    function Summon(entity)
        if fromPos.x == 65535 and fromPos.y == 64 then 
            doCreateMonster(entity, getThingPos(cid))
            doRemoveItem(item.uid)
            doSendMagicEffect(getThingPos(cid), CONST_ME_FIREWORK_YELLOW)
            return true 
        else
            doCreateMonster(entity, fromPos)	
            doRemoveItem(item.uid)
            doSendMagicEffect(fromPos, CONST_ME_FIREWORK_YELLOW)
            return true
        end
        return true
    end
    
    if cont ~= nil then 
        local monster = table.concat(cont:exp("%s"), " ")
        if isInArray(summons, monster) then
            Summon(monster)
            return true
        else 
            doPlayerSendCancel(cid, "You can't summon this monster!")
            doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
        end
    end
end

function string.exp(e, sep)
    local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
    return result
end
<!-- TAG XML em actions.xml -->
<action itemid="1949" event="script" value="summonscroll.lua"/> 

 

 

Vídeo demonstrativo:

quaisquer dúvidas ou sugestões, só postar.

 

Créditos:

@Caronte

-- Excelente manipulação de string, optimizou o script.

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

Cara isso é muito criativo, curti! haha

Muito bom esse script, vou tentar adaptar pra apenas 1 vocação usar essa ferramenta.

 

Poderia analisar este meu pedido?

http://www.xtibia.com/forum/topic/238113-pedido-sistema-de-profissao-860/

Muito legal cara, parabéns, da para ser usado como armadilhas kk.

Boa man! Rep++ pra oce!

Muito obrigado pelos elogios, vou atender sugestões para melhorar o script.

 

Assim que eu tiver acesso ao PC, eu adapto @baratask, se você não já tiver feito.

 

Obrigado @Daniel, também achei quando pensei na ideia, por isso coloquei em prática :D

 

@SamueLGuedes, Boa ideia!, quando chegar em casa vou fazer versões para armadilha, para funcionar ao player pisar :D, e fazer o monstro atacar o player que pisar.

Link para o comentário
Compartilhar em outros sites

Muito bom o code, na parte de tirar os espaços eu nao usaria o %a, pq nomes de monstros não consistem exclusivamente de letras (os normais sim) e poderia bugar se eu tivesse um monstro com o nome "Mkalo'Boss" e usaria table.concat :p

 

Eu faria assim:

local name = "           Mkalo's        baby   "
function string.exp(e, sep)
        local result = {}       e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
        return result
end

name = table.concat(name:exp("%s"), " ")
Editado por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

 

Muito bom o code, na parte de tirar os espaços eu nao usaria o %a, pq nomes de monstros não consistem exclusivamente de letras (os normais sim) e poderia bugar se eu tivesse um monstro com o nome "Mkalo'Boss" e usaria table.concat :p

 

Eu faria assim:

local name = "           Mkalo's        baby   "function string.exp(e, sep)        local result = {}       e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)        return resultendname = table.concat(name:exp("%s"), " ")

Boa mano, eu ia fazer assim, só que me esqueci do Table concat, tava tentando o string.explode kkkk....

 

Vou dar uma revisada depois...

@, Atualizei...

 

 

Versão stepIn:

function onStepIn(cid, item, position)

    
    local cont = getItemAttribute(item.uid, "text") -- nao precisa mexer
    local summons = {"demon", "dragon", "dog", "cat", "rotworm", "morgaroth", "cyclops", "dragon lord", "son of verminor", "wolf"} -- monstros disponiveis
    
    function Summon(entity)
        if position.x == 65535 and position.y == 64 then 
            doCreateMonster(entity, getThingPos(cid))
            doRemoveItem(item.uid)
            doSendMagicEffect(getThingPos(cid), CONST_ME_FIREWORK_YELLOW)
            return true 
        else
            doCreateMonster(entity, position)	
            doRemoveItem(item.uid)
            doSendMagicEffect(position, CONST_ME_FIREWORK_YELLOW)
            return true
        end
        return true
    end
    
    if cont ~= nil then 
        local monster = table.concat(cont:exp("%s"), " ")
        if isInArray(summons, monster) then
            Summon(monster)
            return true
        else 
            doPlayerSendCancel(cid, "You can't summon this monster!")
            doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
        end
    end
end

function string.exp(e, sep)
    local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
    return result
end 
Link para o comentário
Compartilhar em outros sites

Ok, eu vou esperar. Bom, em relação tb a esse post aqui.. Téria como vc adaptar para apenas 1 vocação fazer o uso desse summon scroll ? e que esse player com essa tal vocação pode-se usar o scroll apenas a cada 3 minutos por exemplo. ficaria mais rpg.

Link para o comentário
Compartilhar em outros sites

@@baratask, esqueci de você icon_lolsuper.gif

function onStepIn(cid, item, position)

    
    local cont = getItemAttribute(item.uid, "text") -- nao precisa mexer
    local summons = {"demon", "dragon", "dog", "cat", "rotworm", "morgaroth", "cyclops", "dragon lord", "son of verminor", "wolf"} -- monstros disponiveis
    local timeToWait = 10 -- tempo em segundos
	local vocId = 3
	
    function Summon(entity)
        if position.x == 65535 and position.y == 64 then 
            doCreateMonster(entity, getThingPos(cid))
            doRemoveItem(item.uid)
            doSendMagicEffect(getThingPos(cid), CONST_ME_FIREWORK_YELLOW)
            return true 
        else
            doCreateMonster(entity, position)	
            doRemoveItem(item.uid)
            doSendMagicEffect(position, CONST_ME_FIREWORK_YELLOW)
            return true
        end
        return true
    end
    
	
    if cont ~= nil then 
		if getPlayerStorageValue(cid, 2843) <= os.time() then
			if getPlayerVocation(cid) == vocId then
				local monster = table.concat(cont:exp("%s"), " ")
				if isInArray(summons, monster) then
					Summon(monster)
					doPlayerSetStorageValue(cid, 2843, os.time() + timeToWait)
					return true
				else 
					doPlayerSendCancel(cid, "You can't summon this monster!")
					doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
				end
			else 
				doPlayerSendCancel(cid, "This is not for your vocation")
				doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
			end
		else
			doPlayerSendCancel(cid, "You have to wait".. (getPlayerStorageValue(cid, 2843) - os.time()) .." seconds to use again!")
			doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
		end
	end
end

function string.exp(e, sep)
    local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end)
    return result
end 

Tenta aí, qualquer erro eu resolvo. 49_49.gif

Link para o comentário
Compartilhar em outros sites

Mano que foda! Da até pra fazer um tipo de pergaminho de invocação ou algo de tipo! *o*

Maravilhosa script! Parabéns *-*

Hehe, eu gostei dessa sugestão do @baratask, colocar para uma vocação fazer isso.

 

E funcionar ao pisar, acho que dá pra esconder em baixo de alguma coisa, e ferrar alguém kkkk

 

 

 

Colocar em uma hunt de rotworm uma scroll escrita demon dentro kkkkk

 

 

Quero jogar um otserver com essa scroll :p pra trollar.

Link para o comentário
Compartilhar em outros sites

 

 

tem como arrumar pro bixo ser do jogador q fazer este comando?

 

Tem sim, depois eu faço isso, se eu esquecer, pode me mandar msg pedindo que eu posto aqui...

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...