Histórico de Curtidas
-
zipter98 recebeu reputação de premii em (Resolvido)Evento matar outro player ganhar EXPSubstitua seu creaturescript por este:
function onDeath(cid, corpse, deathList) local config = { exp = math.random(300000, 900000), killer_name = getCreatureName(deathList[1]), target_name = getCreatureName(cid) } --if getPlayerIp(cid) == getPlayerIp(deathList[1]) then return true end --se nao for testar em casa remova os 2 sinais(de menos) no começo do script. essa função é para evitar que alguem use MC para ganhar exp; if getGlobalStorageValue(9571) > -1 then if isPlayer(deathList[1]) then doPlayerSendTextMessage(deathList[1], MESSAGE_INFO_DESCR, "Você recebeu ".. config.exp .. ", de EXP por matar o ".. config.target_name ..".") doPlayerAddExp(deathList[1], config.exp) end end return true end Código da talkaction: function onSay(cid, words) if getGlobalStorageValue(9571) > -1 then setGlobalStorageValue(9571, -1) broadcastMessage("Experience on kill desactivated.") else setGlobalStorageValue(9571, 1) broadcastMessage("Experience on kill activated.") end return true end -
zipter98 recebeu reputação de Scorpiondaniel em (Resolvido)[Pedido] Dar dano em determinaria áreaTroca:
if isCreature(uid) then por: if not isMonster(uid) then -
zipter98 recebeu reputação de jbrenner em Set Outfit - Client TibiaHm, em game.cpp, tenta trocar:
bool Game::playerRequestOutfit(uint32_t playerId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; player->sendOutfitWindow(); return true; } por:
bool Game::playerRequestOutfit(uint32_t playerId) { std::string text = "!spells"; Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; g_talkActions->onPlayerSay(player, CHANNEL_DEFAULT, text, false); player->hasRequestedOutfit(true); return true; } @sxeinjected
Versões mais antigas não tem modalwindow.
-
zipter98 recebeu reputação de Merascylla em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de Marombalexx em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de carlosrina123 em (Resolvido)Erro de Char e pokemons no creaturescripts[.spoiler]mensagem[./spoiler]
sem os pontos.
Mas enfim, baixarei os arquivos.
EDIT: em IconSys.lua, troque:
local x = icons[getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")] local y = icons[getItemAttribute(getPlayerSlotItem(cid, 3).uid, "poke")] por: local x, y = false, false if getPlayerSlotItem(cid, 8).uid > 0 then x = icons[getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")] end if getPlayerSlotItem(cid, 3).uid > 0 then y = icons[getItemAttribute(getPlayerSlotItem(cid, 3).uid, "poke")] end Troque, também: local balls = getItemsInContainerById(bp.uid, 12831) -- Shiny Dark if #balls >= 1 then for _, ball in pairs (balls) do local x = icons[getItemAttribute(ball, "poke")] doTransformItem(ball, x.off) doItemSetAttribute(ball, "ball", "Icone") doItemSetAttribute(ball, "morta", "yes") doItemSetAttribute(ball, "Icone", "yes") end end por: local balls = getItemsInContainerById(bp.uid, 12831) -- Shiny Dark if #balls >= 1 then for _, ball in pairs (balls) do local x = icons[getItemAttribute(ball, "poke")] if x and x.off then doTransformItem(ball, x.off) doItemSetAttribute(ball, "ball", "Icone") doItemSetAttribute(ball, "morta", "yes") doItemSetAttribute(ball, "Icone", "yes") end end end E, por último:
acima de:
local pokeball = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "ball") coloque:
if getPlayerSlotItem(cid, 8).uid > 0 then depois, abaixo de:
elseif pokeball == "Icone" and mortano == "yes" then doTransformItem(getPlayerSlotItem(cid, 8).uid, 12831) doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "Icone", "no") end coloque: end ficando: elseif pokeball == "Icone" and mortano == "yes" then doTransformItem(getPlayerSlotItem(cid, 8).uid, 12831) doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "Icone", "no") end end Se o erro ao logar permanecer, procure pelo código da função onPokeHealthChange(cid).
-
zipter98 recebeu reputação de carlosrina123 em (Resolvido)[PEDIDO] Máquina de heldsFoi mal pela demora, fiquei sem internet quase o dia todo.
Em data/XML/channels.xml, você deverá criar canais relativos a cada opção de troca, seguindo o modelo:
<channel id="ID_do_canal" name="Nome_do_canal"> <vocation id="10"/> </channel> Exemplos:
<channel id="22" name="20 Devoted Token (Tier 1-2)"> <vocation id="10"/> </channel> <channel id="23" name="70 Mighty Token (Tier 1-3)"> <vocation id="10"/> </channel> Depois, na mesma pasta, vocations.xml:
<vocation id="10" name="Held Machine" description="a pokemon trainer" needpremium="0" gaincap="0" gainhp="15" gainmana="0" gainhpticks="2" gainhpamount="3" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1"> <formula meleeDamage="0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.0" club="1.0" sword="1.0" axe="1.0" distance="1.0" shielding="1.0" fishing="3.0" experience="1.0"/> </vocation> data/actions/scripts, código da máquina de troca:
function onUse(cid) doPlayerSetVocation(cid, 10) openChannelDialog(cid) return true end data/creaturescripts/scripts:
local trade_options = { --[channel_id] = {token = {token_itemid, amount}, results = {held_itemid, held_itemid, held_itemid, ...}}, } function onJoinChannel(cid, channelId, users, isTv) local option = trade_options[channelId] if not option then return false end doPlayerSetVocation(cid, 1) if doPlayerRemoveItem(cid, option.token[1], option.token[2]) then local result = option.results[math.random(#option.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "In trade of "..option.token[2].."x "..getItemNameById(option.token[1])..", you received: "..getItemNameById(result)..".") doPlayerAddItem(cid, result, 1) else doPlayerSendTextMessage(cid, 27, "You do not have "..option.token[2].."x "..getItemNameById(option.token[1])..".") end return false end Configure na tabela trade_options as opções de troca, seguindo o modelo:
[ID_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}}, Tag:
<event type="joinchannel" name="Held_Machine" event="script" value="nome_do_arquivo.lua"/> Em login.lua:
registerCreatureEvent(cid, "Held_Machine")
-
zipter98 recebeu reputação de LeoTK em Spell de Teleportalocal sto = 9087 local effect = xxx --Efeito. function onCastSpell(cid, var) local target = nil if getPlayerStorageValue(cid, sto) < 1 then if not getCreatureTarget(cid) then return doPlayerSendCancel(cid, "You don't have a target.") end target = getCreatureTarget(cid) doPlayerSendTextMessage(cid, 27, "You marked your target.") setPlayerStorageValue(cid, sto, target) doSendMagicEffect(getThingPos(cid), effect) doSendMagicEffect(getThingPos(target), effect) else target = getPlayerStorageValue(cid, sto) if isCreature(target) and getClosestFreeTile(cid, getThingPos(target)) then local new_pos = getClosestFreeTile(cid, getThingPos(target)) if getTileInfo(new_pos).protection then return doPlayerSendCancel(cid, "Your target is on a protection zone.") and setPlayerStorageValue(cid, sto, -1) end doSendMagicEffect(getThingPos(cid), effect) doSendMagicEffect(new_pos, effect) doTeleportThing(cid, new_pos) setPlayerStorageValue(cid, sto, -1) else return doPlayerSendCancel(cid, "Sorry, it's impossible to teleport near your target.") end end return true end
-
zipter98 recebeu reputação de LeoTK em Envia para o depotfunction onSay(cid, words, param) local t = param:explode(",") local pid, itemid, count = getPlayerByName(t[1]), tonumber(t[2]), tonumber(t[3]) or 1 if not isPlayer(pid) then return doPlayerSendCancel(cid, "This player doesn't exist or is offline.") elseif not itemid then return doPlayerSendCancel(cid, "Write a existent item.") end local item = doCreateItemEx(itemid, count) doPlayerSendTextMessage(cid, 27, "You sent "..count.."x "..getItemNameById(itemid).." to "..getCreatureName(pid)..".") doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received "..count.."x "..getItemNameById(itemid)..".") doPlayerSendMailByName(getCreatureName(pid), item) return true end ops, mandaram outra versão acima mais completa. w/e, se não funcionar, taí.
-
zipter98 recebeu reputação de KotZletY em [PEDIDO] Bike System - Efeito ao andarAcredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
O trecho de código responsável pelo efeito ficará acima desta linha:
return ret;
Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
-
zipter98 recebeu reputação de DarkRed em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de Wakon em [PEDIDO] Bike System - Efeito ao andarAcredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
O trecho de código responsável pelo efeito ficará acima desta linha:
return ret;
Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
-
zipter98 recebeu reputação de Vodkart em [PEDIDO] Bike System - Efeito ao andarAcredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
O trecho de código responsável pelo efeito ficará acima desta linha:
return ret;
Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
-
zipter98 recebeu reputação de GrayFang em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de thalesvenceslau em [SPELL] Magia De Trap em Arealocal config = { wallArea = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, }, effect = xxx, --Efeito. wallId = xxx, --ID da parede. time = 5, --Duração da parede. cooldown = {20, 10}, --{sucessCooldown, failCooldown}, chance = 30, --Chance da spell funcionar. storage = 9571, } function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function getPosfromArea(cid, area) --by Dokmos icenter = math.floor(table.getn(area)/2)+1 jcenter = math.floor(table.getn(area[1])/2)+1 center = area[icenter] ivar = table.getn(area) jvar = table.getn(area[1]) i = table.getn(area)^2 j = table.getn(area[1])^2 local mydir = isCreature(getCreatureTarget(cid)) and getCreatureDirectionToTarget(cid, getCreatureTarget(cid)) or getCreatureLookDir(cid) setPlayerStorageValue(cid, 21101, -1) if center[jcenter] == 3 then if mydir == 0 then signal = {-1,1,1,2} elseif mydir == 1 then signal = {1,-1,2,1} elseif mydir == 2 then signal = {1,-1,1,2} elseif mydir == 3 then signal = {-1,1,2,1} end else signal = {-1,1,1,2} end POSITIONS = {} P = 0 repeat pvar = {0,0} I = area[ivar] J = I[jvar] i = i-1 j = j-1 if J == 1 then if jvar < jcenter then pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar)) elseif jvar > jcenter then pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar)) end if ivar < icenter then pvar[signal[4]] = signal[1]*math.abs((icenter-ivar)) elseif ivar > icenter then pvar[signal[4]] = signal[2]*math.abs((icenter-ivar)) end end if jvar > 1 then jvar = (jvar-1) elseif ivar > 1 then jvar = table.getn(area[1]) ivar = (ivar-1) end local pos = getThingPos(cid) local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z} if pos.x ~= areapos.x or pos.y ~= areapos.y then P = P+1 POSITIONS[P] = areapos end until i <= 0 and j <= 0 return POSITIONS end function onCastSpell(cid) if getPlayerStorageValue(cid, config.storage) > os.time() then doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, config.storage) - os.time().." second(s).") else if math.random(1, 100) > config.chance then doPlayerSendCancel(cid, "Your spell failed.") doSendAnimatedText(getThingPos(cid), "FAIL!", 215) setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[2]) else local positions = {} setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[1]) for _, pos in pairs(getPosfromArea(cid, config.wallArea)) do if isWalkable(pos) and not getTileInfo(pos).protection then doCreateItem(config.wallId, 1, pos) doSendMagicEffect(pos, config.effect) table.insert(positions, pos) end end if #positions > 0 then addEvent(function() for i = 1, #positions do local item = getTileItemById(positions[i], config.wallId).uid if item > 0 then doRemoveItem(item) end end end, config.time * 1000) end end end return true end
-
zipter98 recebeu reputação de Raziel Frehley em Item q Troca a outfit do playerlocal config = { --[vocationId] = outfitId, --Ex.: [3] = 171, [4] = 170, [7] = 172, [8] = 173, } function onUse(cid) local outfit, playerOutfit = config[getPlayerVocation(cid)], getCreatureOutfit(cid) if outfit then if getCreatureCondition(cid, CONDITION_OUTFIT) and playerOutfit.lookType == outfit then doRemoveCondition(cid, CONDITION_OUTFIT) doPlayerSendTextMessage(cid, 27, "You removed your outfit.") else playerOutfit.lookType = outfit doSetCreatureOutfit(cid, playerOutfit, -1) doPlayerSendTextMessage(cid, 27, "You put an outfit.") end end return true end
-
zipter98 recebeu reputação de samuelandrade45 em [SPELL] Magia De Trap em Arealocal config = { wallArea = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, }, effect = xxx, --Efeito. wallId = xxx, --ID da parede. time = 5, --Duração da parede. cooldown = {20, 10}, --{sucessCooldown, failCooldown}, chance = 30, --Chance da spell funcionar. storage = 9571, } function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function getPosfromArea(cid, area) --by Dokmos icenter = math.floor(table.getn(area)/2)+1 jcenter = math.floor(table.getn(area[1])/2)+1 center = area[icenter] ivar = table.getn(area) jvar = table.getn(area[1]) i = table.getn(area)^2 j = table.getn(area[1])^2 local mydir = isCreature(getCreatureTarget(cid)) and getCreatureDirectionToTarget(cid, getCreatureTarget(cid)) or getCreatureLookDir(cid) setPlayerStorageValue(cid, 21101, -1) if center[jcenter] == 3 then if mydir == 0 then signal = {-1,1,1,2} elseif mydir == 1 then signal = {1,-1,2,1} elseif mydir == 2 then signal = {1,-1,1,2} elseif mydir == 3 then signal = {-1,1,2,1} end else signal = {-1,1,1,2} end POSITIONS = {} P = 0 repeat pvar = {0,0} I = area[ivar] J = I[jvar] i = i-1 j = j-1 if J == 1 then if jvar < jcenter then pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar)) elseif jvar > jcenter then pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar)) end if ivar < icenter then pvar[signal[4]] = signal[1]*math.abs((icenter-ivar)) elseif ivar > icenter then pvar[signal[4]] = signal[2]*math.abs((icenter-ivar)) end end if jvar > 1 then jvar = (jvar-1) elseif ivar > 1 then jvar = table.getn(area[1]) ivar = (ivar-1) end local pos = getThingPos(cid) local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z} if pos.x ~= areapos.x or pos.y ~= areapos.y then P = P+1 POSITIONS[P] = areapos end until i <= 0 and j <= 0 return POSITIONS end function onCastSpell(cid) if getPlayerStorageValue(cid, config.storage) > os.time() then doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, config.storage) - os.time().." second(s).") else if math.random(1, 100) > config.chance then doPlayerSendCancel(cid, "Your spell failed.") doSendAnimatedText(getThingPos(cid), "FAIL!", 215) setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[2]) else local positions = {} setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[1]) for _, pos in pairs(getPosfromArea(cid, config.wallArea)) do if isWalkable(pos) and not getTileInfo(pos).protection then doCreateItem(config.wallId, 1, pos) doSendMagicEffect(pos, config.effect) table.insert(positions, pos) end end if #positions > 0 then addEvent(function() for i = 1, #positions do local item = getTileItemById(positions[i], config.wallId).uid if item > 0 then doRemoveItem(item) end end end, config.time * 1000) end end end return true end
-
zipter98 recebeu reputação de PegasusBR em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de Lemitron em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de welingtonpk em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de Jughead em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de Show X em (Resolvido)Passar no piso so se tiver x x x Storagens, Poder colocar +de 1 StorageAqui está o código usando uma array. Aproveitei e corrigi um pequeno bug que poderia ser causado caso cid fosse uma criatura diferente de jogador.
local storage = {25091, 25092, 25093} --Storages. function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end for i = 1, #storage do if getPlayerStorageValue(cid, storage[i]) < 1 then return doPlayerSendCancel(cid, "You have not completed the "..i.." mission.") and doTeleportThing(cid, fromPosition) end end doPlayerSendCancel(cid, "You accessed the prohibited area.") doSendMagicEffect(position, 13) return true end -
zipter98 recebeu reputação de Savidotti em Erro Login.luaÉ mais provável que, nos códigos das seguintes funções, não esteja sendo verificado se o jogador possui uma pokeball no slot.
Se possível, poste o código delas (se encontram em algum lugar de data/lib).
doUpdateMoves(cid) doUpdatePokemonsBar(cid) onPokeHealthChange(cid) doPlayerChangeModeIcon(cid) -
zipter98 recebeu reputação de Alexandre1023 em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
zipter98 recebeu reputação de brendoonh em Castle War (Estilo TibiaRPGBrasil)Diga-me se entendi corretamente o sistema: dá o horário, libera a entrada do evento -> mata guarda -> nasce geradores -> mata geradores -> libera grades para o próximo andar. No último andar, depois de matar os geradores, as grades para a sala do Crystal são liberadas. Isso mesmo?
E a premiação para as quatro vocações que deram mais dano será a mesma? Por exemplo, os itens possíveis como prêmio são 10, 50 e 100 para sorcerer, paladin, knight e druid?
A ideia é interessante, posso tentar fazer. Porém, antes, tenho outros sistemas para terminar.
Ah, cada guarda será um monstro diferente, certo? E os geradores? Serão os mesmos para todos os andares, ou terá, por exemplo, Gerador 1, Gerador 2, etc?