Caronte 444 Postado Dezembro 2, 2015 Share Postado Dezembro 2, 2015 (editado) 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, 2015 por Caronte Link para o comentário Compartilhar em outros sites More sharing options...
Luga03 331 Postado Dezembro 2, 2015 Share Postado Dezembro 2, 2015 Boa man! Rep++ pra oce! Link para o comentário Compartilhar em outros sites More sharing options...
SamueLGuedes 333 Postado Dezembro 2, 2015 Share Postado Dezembro 2, 2015 Muito legal cara, parabéns, da para ser usado como armadilhas kk. Link para o comentário Compartilhar em outros sites More sharing options...
baratask 3 Postado Dezembro 2, 2015 Share Postado Dezembro 2, 2015 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/ Link para o comentário Compartilhar em outros sites More sharing options...
Administrador Administrador 1435 Postado Dezembro 2, 2015 Administrador Share Postado Dezembro 2, 2015 Cara isso é muito criativo, curti! haha Link para o comentário Compartilhar em outros sites More sharing options...
Caronte 444 Postado Dezembro 2, 2015 Autor Share Postado Dezembro 2, 2015 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 @SamueLGuedes, Boa ideia!, quando chegar em casa vou fazer versões para armadilha, para funcionar ao player pisar , e fazer o monstro atacar o player que pisar. Link para o comentário Compartilhar em outros sites More sharing options...
MatheusGlad 424 Postado Dezembro 2, 2015 Share Postado Dezembro 2, 2015 (editado) 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 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, 2015 por MatheusMkalo Link para o comentário Compartilhar em outros sites More sharing options...
Caronte 444 Postado Dezembro 3, 2015 Autor Share Postado Dezembro 3, 2015 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 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 More sharing options...
baratask 3 Postado Dezembro 3, 2015 Share Postado Dezembro 3, 2015 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 More sharing options...
Caronte 444 Postado Dezembro 3, 2015 Autor Share Postado Dezembro 3, 2015 @@baratask, esqueci de você 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. Link para o comentário Compartilhar em outros sites More sharing options...
Flaah 18 Postado Dezembro 7, 2015 Share Postado Dezembro 7, 2015 Mano que foda! Da até pra fazer um tipo de pergaminho de invocação ou algo de tipo! *o* Maravilhosa script! Parabéns *-* Link para o comentário Compartilhar em outros sites More sharing options...
Caronte 444 Postado Dezembro 7, 2015 Autor Share Postado Dezembro 7, 2015 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 pra trollar. Link para o comentário Compartilhar em outros sites More sharing options...
chateadoagr 12 Postado Dezembro 7, 2015 Share Postado Dezembro 7, 2015 tem como arrumar pro bixo ser do jogador q fazer este comando? Link para o comentário Compartilhar em outros sites More sharing options...
Caronte 444 Postado Dezembro 8, 2015 Autor Share Postado Dezembro 8, 2015 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 More sharing options...
chateadoagr 12 Postado Dezembro 8, 2015 Share Postado Dezembro 8, 2015 Tem sim, depois eu faço isso, se eu esquecer, pode me mandar msg pedindo que eu posto aqui... blz agradeço desde ja! Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados