CA
action

[ACTION] Summon Scroll

Por Caronte, 02 de dez. de 2015 em Actions e Talkactions

19
3.9k
CaronteC
02 de dezembro de 2015 às 14:40

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 Dezembro 3 por Caronte

Luga03L
02 de dezembro de 2015 às 15:01

Boa man! Rep++ pra oce!

SamueLGuedesS
02 de dezembro de 2015 às 15:13

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

barataskB
02 de dezembro de 2015 às 15:31

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/

AdministradorA
02 de dezembro de 2015 às 16:12

Cara isso é muito criativo, curti! haha

CaronteC
02 de dezembro de 2015 às 20:08

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.

MatheusGladM
02 de dezembro de 2015 às 21:13

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 Dezembro 2 por MatheusMkalo

CaronteC
03 de dezembro de 2015 às 15:10

 

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 
barataskB
03 de dezembro de 2015 às 19:47

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.

CaronteC
03 de dezembro de 2015 às 20:55

@@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

FlaahF
07 de dezembro de 2015 às 04:02

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

Maravilhosa script! Parabéns *-*

CaronteC
07 de dezembro de 2015 às 12:23

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.

chateadoagrC
07 de dezembro de 2015 às 12:55

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

CaronteC
08 de dezembro de 2015 às 03:11

 

 

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...

 

chateadoagrC
08 de dezembro de 2015 às 15:36

 

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

 

blz agradeço desde ja!