Histórico de Curtidas
-
Marvok deu reputação a marcoshps11 em Bot Discord - Merlin* Áudio de saudação *
O intuito deste bot é auxiliar jogadores de RPG interpretativo, porém podendo ser utilizado como um atrativo dentro do discord do seu projeto
Possui algumas funções como:
Criação de ficha do personagem Combate contra monstros Level UP Inventário do personagem Set para o personagem entre outras funções
É possível sincronizar com seu otserver e implementar ainda mais funções e atrativos para o chat
* Este projeto ainda não está na sua versão final, é apenas um molde para desenvolvimento *
Para o tópico não ficar muito longo, você pode conferir ele no link:
https://github.com/marcoshps/Merlin-Bot
algumas prints:
-
Marvok recebeu reputação de russo000 em Duvida script Texto animado - REVSCRIPTEstá no caminho certo porém na tfs1.3 não possui doSendAnimatedText, você vai precisar usar parecido a isso aqui:
function onThink(interval)
local effects = {
--[[
Exemplos:
{position = Position(986, 1216, 7), effect = 29}, **Somente Effect**
{position = Position(1622, 1458, 7), text = "[Teste]", effect = 40, say = true, color = math.random(1,255)}, **say ativo é fala estilo monstro**
{position = Position(1622, 1458, 7), text = "[1SET]", say = false, color = math.random(1,255)}, **say desativado, é levado color em consideração**
]]
}
for i = 1, #effects do
local settings = effects[i]
local spectators = Game.getSpectators(settings.position, false, true, 7, 7, 5, 5)
if #spectators > 0 then
if settings.text then
for i = 1, #spectators do
if settings.say then
spectators[i]:say(settings.text, TALKTYPE_MONSTER_SAY, false, spectators[i], settings.position)
else
Game.sendAnimatedText(settings.text, settings.position, settings.color)
end
end
end
if settings.effect then
settings.position:sendMagicEffect(settings.effect)
end
end
end
return true
end
-
Marvok recebeu reputação de Lobodu em Slot ammo não adiciona atributos.Colocou em movements?
-
Marvok recebeu reputação de thunmin em Stamina potion refilIsso aí coloca o id do item, e coloca o nome que quiser no script.
-
Marvok recebeu reputação de thunmin em Stamina potion refillocal stamina = 42
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if player:getStamina() >= (stamina * 60) then
player:sendCancelMessage("Sua stamina já está cheia.")
else
player:setStamina(stamina * 60)
player:sendCancelMessage("Sua stamina foi recarregada.")
player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
item:remove(1)
end
return true
end
-
Marvok recebeu reputação de stauro em Castle + Server Save (Guild dominante perde o dominio no server save)em globalevents.xml <globalevent name="nomedoscript" type="shutdown" event="script" value="nomedoscript.lua"/>
Cria um scipt com nome que você quiser: function onShutdown() setGlobalStorageValue(COH_STATUS, 0) return true end
-
Marvok recebeu reputação de manojl em Teleport por Talkaction@manojl
Acredito que você está dificultando muito o trabalho teste isso aqui.
function onSay(cid, words, param, channel)
if(param == '') then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
return true
end
local target = getPlayerByNameWildcard(param)
if(not target) then
target = getCreatureByName(param)
if(not target) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creature not found.")
return true
end
end
if(isPlayerGhost(target) and getPlayerGhostAccess(target) > getPlayerGhostAccess(cid)) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Creature not found.")
return true
end
local pos = getClosestFreeTile(target, getCreaturePosition(cid), false, false)
if(not pos or isInArray({pos.x, pos.y}, 0)) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Cannot perform action.")
return true
end
local tmp = getCreaturePosition(target)
if(doTeleportThing(target, pos, true) and not isPlayerGhost(target)) then
doSendMagicEffect(tmp, CONST_ME_POFF)
doSendMagicEffect(pos, CONST_ME_TELEPORT)
end
return true
end
para você usar faça: /comando (nome do jogador).
acredito que isso já esteja até inserido no seu ot maaaas, tá aí.
-
Marvok recebeu reputação de BangxD em Anti-ExivaNão irá ter problema nenhum, foi um pequeno engano no code que fez gerar o erro, mais já modifiquei..
dessa forma que você fez está correto tb.
-
Marvok recebeu reputação de BangxD em Anti-ExivaSim amigo é 0.4, se você observar o code é o mesmo mudando somente a variável..
se você trocar playerExiva (do meu code) para targetPlayer (do seu code), irá funcionar.
teste e me avise se der algum problema.
-
Marvok recebeu reputação de BangxD em Anti-Exivaem spells.cpp logo dps de:
Player* playerExiva = g_game.getPlayerByName(param); if (!playerExiva) { return false; } coloca isso
std::string stoNamequequiser; playerExiva->getStorage("141414", stoNamequequiser); if(atoi(stoNamequequiser.c_str()) > 0){ std::stringstream ss; ss << playerExiva->getName() << " blablabla."; player->sendTextMessage(MSG_INFO_DESCR, ss.str().c_str()); return true; } e dps faz uma talk simples para dar essa storage que esta no script.
-
Marvok recebeu reputação de miguelprojac em Duvida script Texto animado - REVSCRIPTEstá no caminho certo porém na tfs1.3 não possui doSendAnimatedText, você vai precisar usar parecido a isso aqui:
function onThink(interval)
local effects = {
--[[
Exemplos:
{position = Position(986, 1216, 7), effect = 29}, **Somente Effect**
{position = Position(1622, 1458, 7), text = "[Teste]", effect = 40, say = true, color = math.random(1,255)}, **say ativo é fala estilo monstro**
{position = Position(1622, 1458, 7), text = "[1SET]", say = false, color = math.random(1,255)}, **say desativado, é levado color em consideração**
]]
}
for i = 1, #effects do
local settings = effects[i]
local spectators = Game.getSpectators(settings.position, false, true, 7, 7, 5, 5)
if #spectators > 0 then
if settings.text then
for i = 1, #spectators do
if settings.say then
spectators[i]:say(settings.text, TALKTYPE_MONSTER_SAY, false, spectators[i], settings.position)
else
Game.sendAnimatedText(settings.text, settings.position, settings.color)
end
end
end
if settings.effect then
settings.position:sendMagicEffect(settings.effect)
end
end
end
return true
end
-
Marvok recebeu reputação de KR33 em Tile Bugando Player [AJUDA]Cara no seu item.otb você deve repetir as informações as quais você colocou no cliente, veja em vermelho ali na imagem que você mandou.
Coloque as informações necessárias e corretas que irá funcionar normalmente.
-
Marvok deu reputação a Rogex Joyz em Script exori hur imitando o martelo de ThorFala galeritcha, este script imita o ''martelo de Thor'', ele funciona da seguinte forma: Após o knight falar a magia (no meu caso exori hur), um martelo vai girando em linha reta de acordo com o lado em que o player estiver virado. O martelo vai em efeito de boomerang, ele vai e volta para o dono da magia dando ataque em todos que estão no caminho, o dano é duplicado (são 2 danos), uma vez que 1 dano corresponde à ida e outro corresponde ao do martelo voltando. 0.x -
unknown credits, enjoy. Praticamente as principais coisas são editáveis dentro do script logo no começo, deixarei escrito dentro dele para ficar mais fácil. Let's go ?
Em spells/scripts/attack coloque:
local config = { distance = 6, -- distância em que o martelo irá chegar (no caso ele está configurado para percorrer 6 sqm's e depois voltar) distEffect = 25, -- efeito que irá causar. Fale /x ingame junto com um número e veja os efeitos que mais te agrada, depois só substituir o 25 pelo número do efeito escolhido. No caso o efeito que eu escolhi é justamente de um martelo. minDamage = 200, --Qual o dano mínimo que você deseja que esta magia tire ? maxDamage = 500, -- Qual o dano máximo que você deseja que esta magia tire ? - Lembrando que são dois danos distintos de ida e outro de volta interval = 750 -- Após soltar a magia, quanto tempo levará para o martelo retornar para você ? - Coloque o tempo em milésimos de segundos } function getPosisBetween(fromPos, toPos) local posis = {} for i = 1, getDistanceBetween(fromPos, toPos) do local choices = {fromPos.x, fromPos.x + 1, fromPos.x - 1} if fromPos.x ~= toPos.x then table.sort(choices, function(a, b) if fromPos.x - toPos.x < 0 then return a > b else return a < b end end) fromPos.x = choices[1] end if fromPos.y ~= toPos.y then choices = {fromPos.y, fromPos.y + 1, fromPos.y - 1} table.sort(choices, function(a, b) if fromPos.y - toPos.y < 0 then return a > b else return a < b end end) fromPos.y = choices[1] end table.insert(posis, {x = fromPos.x, y = fromPos.y, z = fromPos.z}) end return posis end function onCastSpell(cid) local playerPos = getThingPos(cid) local toPos = { [0] = {x = playerPos.x, y = playerPos.y - config.distance, z = playerPos.z}, [1] = {x = playerPos.x + config.distance, y = playerPos.y, z = playerPos.z}, [2] = {x = playerPos.x, y = playerPos.y + config.distance, z = playerPos.z}, [3] = {x = playerPos.x - config.distance, y = playerPos.y, z = playerPos.z} } local spellToPos = toPos[getCreatureLookDirection(cid)] local posis = getPosisBetween(getThingPos(cid), spellToPos) doSendDistanceShoot(getThingPos(cid), spellToPos, config.distEffect) for i = 1, #posis do if not getTileInfo(posis[i]).protection then local pid = getTopCreature(posis[i]).uid if isMonster(pid) or isPlayer(pid) then doTargetCombatHealth(cid, pid, COMBAT_PHYSICALDAMAGE, -config.minDamage, -config.maxDamage, -1) end end end addEvent(function() if not isPlayer(cid) then return true end doSendDistanceShoot(spellToPos, getThingPos(cid), config.distEffect) posis = getPosisBetween(spellToPos, getThingPos(cid)) for i = 1, #posis do if not getTileInfo(posis[i]).protection then local pid = getTopCreature(posis[i]).uid if isMonster(pid) or isPlayer(pid) then doTargetCombatHealth(cid, pid, COMBAT_PHYSICALDAMAGE, -config.minDamage, -config.maxDamage, -1) end end end end, config.interval) return true end Em spells.xml coloque:
<instant name="Whirlwind Throw" words="exori hur" lvl="200" mana="500" prem="1" needweapon="1" range="5" needtarget="1" blockwalls="1" exhaustion="1800" maglv="7" needlearn="0" script="attack/Whirlwind Throw.lua">
<vocation id="4"/>
<vocation id="8"/>
-- em words = o nome que deverá ser dito para soltar a spell
mana = quanto de mana gastará ?
needweapon = precisa estar equipado com uma arma para soltá-la ?
range = configurável dentro do script
needtarget = Precisa estar targetando alguém para soltar esta magia ? - Lembrando que caso coloque ''1'', precisará targetar um alvo para soltar a spell, porém isso não influencia na direção da magia. Ela soltará para onde o personagem estiver virado, como um exevo gran vis lux por exemplo.
maglv = Qual o magic level necessário para conjurar esta magia ?
Espero que divirta bastante gente, eu dei uns berro aqui quando vi ela em pratica haha. See you !
-
Marvok deu reputação a xWhiteWolf em Volatile SpiderlingFala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.
• Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando
obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
• Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
<instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
Em newspider.lua coloque o seguinte:
agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
local damageTable = { {4, -3}, {9, -2}, {20, -1} } aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:
Dano:
doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
Em verde é possível editar o efeito da explosão
Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes. Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
local maxsummon = 2 (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
O efeito que sai quando ela explode por morte ou pela spell:
doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir:
<attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
range = distancia em sqm que o alvo deve estar pra que ela execute a spell
chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
Você ainda pode editar aqui em vermelho:
o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.
• Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
-
Marvok recebeu reputação de B4nShee em [TFS 0.4] AOE Spell Non PVPBoa noite, posso estar um pouco enganado mais acredito que essa modificação seja possível somente via source.
-
Marvok deu reputação a Naze em Ajuda, to com ideia preciso de ajuda!Olha é sempre bom posta qual servidor usa para ter mais precisão na resposta, no caso vou tenta passar como seria nas duas forma 0.4/otx e tfs 1.x/otx3, orienta e não orientada a objetos.
Você teria q fazer uma action dessa forma para cada pedra.
onUse(cid/player, item, fromPos, itemEx/target, toPos)
Esse são um exemplo dos parâmetros usado em action.
Então basicamente terá que adicionar um customAttribute no itemEx/Target, e mudar sua descrição para o efeito ganho.
Na action referente a pedra você coloca verificação do tipo do item que ela foi usada (itemEx/Target) pra confirma se é sword:
getItemInfo(itemEx.itemid).weaponType ou
itemType(target:getID()):getType()
as funções pra mudar descrição do item para os efeitos que quiser.
doItemSetAttribute(itemEx.uid, "description", "TODO TEXTO AQUI") ou
target:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, "TODO TEXTO AQUI")
e adicionar um customAttribute com valor para nos conseguir identificar e fazer o efeito, assim:
doItemSetAttribute(itemEx.uid, "buff", "attack") ou
target:setCustomAttribute("buff", "attack") Aqui você terá q altera os valor dependendo da pedra, "attack" por "defence" ou "life" e etc.
e por ultimo remova a pedra usada:
doRemoveItem(item.uid) ou
item:remove()
Para elaborar isso deve entender logica de programação e sua funções basica, if, and, or, the, else, end, se não souber melhor começa por isso.
Agr que o item ja tem oq nos precisa, tem q fazer o efeito acontecer, será lá em creaturescript, já que estamos lidando com creature (player), primeiro o attack e defense:
Você terá q criar um script onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin), dessa forma:
0.4/otx
em tfs 0.4/otx é onStatusChange, vou confirma uma coisa pois a maioria utiliza de forma errada essa função e ja edito.
tfs 1.3/otx3
function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) -- Aqui dentro colocara as verificações que irei descrever abaixo. -- return primaryDamage, primaryType, secondaryDamage, secondaryType end
Primeiro precisara verificar se o item equipado do attacker é uma sword e tem attributo buff
pega o item,
item = getPlayerWeapon(cid) ou
item = attacker:getSlotItem(CONST_SLOT_RIGHT) ou CONST_SLOT_LEFT
e pega o atributo a partir do "item":
getItemAttribute(item.uid, "buff") ou
item:getCustomAttribute("buff")
Faça uma verificação se o atributo pego for igual "attack":
Então ira pegar o parametro primaryDamage e fazer +30% algo desse tipo:
primaryDamage = primaryDamage * (1.0 + 0.3)
Agora podera verificar se a creature esta com attribute "defence" na sword, usando a mesma forma de verificar "attack" apenas mudando o attacker por creature
E devera novamente altera o dano, agora em -30% :
primaryDamage = primaryDamage * (1.0 - 0.3)
terminando essa duas verificações ele retorna o valor do dano corretamente.
Lembre de colocar verificações de segurança como se o player existe, e se existe o attribute "buff".
Agora o novo script para modificar a life, sera em movement com as funções onEquip e onDeEquip.
Se chegar até esse momento acredito q entendeu a logica de como as coisa funciona, então talvez consiga elaborar sozinho se nao eu detalho para você depois.
Aqui vou deixa 1 exemplo de onEquip e onDeEquip de cada src, vc tera q aplica a mesma logica para verificar o item e buff, e compara com "life":
tfs 0.4/otx
tfs 1.3/otx3
Usando essas funções como base você altera o conteudo dela conforme fez no creaturescript.
E poderá aumenta a vida máxima do player quando ele equipar (onEquip) e diminuir quando ele desequipar (onDeEquip), usando
setCreatureMaxHealth(cid, health) ou
creature:setMaxHealth(health)
Talvez não seja isso que queria, mas se conseguir entender e montar vai ter um avanço que precisa. Não tenha pressa, entende a logica da programação e lua, e depois olhe outros script mais simples para tenta entender como tudo é montado.
Qualquer duvida manda q demoro mas respondo, e se realmente tenta e não conseguir futuramente faço e posto.
Agora se oq queria era um pedido pronto, pode colar isso no tópico e alguém faz pra você talvez.
-
Marvok recebeu reputação de Rogex Joyz em Adventurer's stone script@Rogex Joyz
-
Marvok recebeu reputação de Cat em (Resolvido)Random box send!Me manda o erro vamos corrigir agora!
-
Marvok recebeu reputação de Cat em (Resolvido)Random box send!@XGaduX
function onUse(cid, item, fromPosition, itemEx, toPosition) local premio = { -- modificar id dos itens e quantidades ganhas [0] = {id = 1, quant = 1}, [1] = {id = 2, quant = 1}, [2] = {id = 3, quant = 1}, [3] = {id = 4, quant = 1}, [4] = {id = 5, quant = 1}, } local contador = math.random(0,5) for i,v in ipairs(premio) do if i == contador then doPlayerAddItem(cid, premio[i].id, premio[i].quant) doPlayerRemoveItem(cid, itemEx.itemid, 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou "..premio[i].quant.." "..getItemNameById(premio[i].id)..".") doSendMagicEffect(fromPosition, CONST_ME_MAGIC_BLUE) end end end Teste pf
-
Marvok recebeu reputação de Cat em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior kkk que bom que entendeu e deu certo. ??
-
Marvok recebeu reputação de Cat em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior ok, faz o seguinte!
abre o corpo de qualquer bicho, pega o id do corpse, procura no itens.xml e me manda por aqui
-
Marvok recebeu reputação de Cat em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior
normalmente vc irá conseguir arrumar isso em itens.xml, vc verifica o id que o bicho que morreu está endereçado, dessa forma você consegue modificar esse bloqueio.
-
Marvok recebeu reputação de Thensus Warrior em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior kkk que bom que entendeu e deu certo. ??
-
Marvok recebeu reputação de Thensus Warrior em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior ok, faz o seguinte!
abre o corpo de qualquer bicho, pega o id do corpse, procura no itens.xml e me manda por aqui
-
Marvok recebeu reputação de Thensus Warrior em (Resolvido)Retirar proteção de loot dos corpses@Thensus Warrior
normalmente vc irá conseguir arrumar isso em itens.xml, vc verifica o id que o bicho que morreu está endereçado, dessa forma você consegue modificar esse bloqueio.