Histórico de Curtidas
-
koyotestark recebeu reputação de Otaldapantera em Character View com outfit e skills Modern AACOla pessoas, venho trazer algo aqui que eu armenguei para meu site e queria compartilhar, com vocês que é o CharacterView com skills e outfits.
O Script de outfit no character view eu peguei do Otland postado pelo averatec e então fiz algumas adições com o pouco que entendo.
Vamos as explicações?
Para adicionar a outfit vcs vão precisar de 2 coisas.
1 - do script que vou disponibilizar
2 - das outfits de seu ot. para isso vcs terão que exportar manualmente ou do jeito que souberem, caso seja de ot alternativo, se for de tibia ja vou disponibilizar as outfits do 8.60 que foi coclocado pra dowload junto na postagem do otland.
Instalando view_chacracter.php
- Vá até a pasta do xamp ou programa onde está seu site e abra a pasta do site, caso seja no xampp será o htdocs.
Dentro da pasta procure por "SYSTEM", depois "APPLICATION" e depois "VIEWS"
Cole o view_character.php dentro de VIEWS.
- Agora para aparecer as outfits, vá em PUBLIC e cole tudo o que estiver dentro da pasta OUTFITTER que são: o arquivo "outfitter.php" e a pasta "outfits"
- Caso adicione novas outfits siga o modelo das outfits que estão dentro. "lembrando que devem estar sempre na pasta outfit e template" caso seja outfit colorida, coloque a base na pasta template.
- Caso seu servidor seja alternativo "dragon ball, naruto etc. apague todas as outfits e insira as suas de db/nt, renomeie as suas da seguinte forma "1_2_0_0" alterando somente o primeiro numero que é referente ao ID da outfit.
Eu adicionei apenas 5 skills, pois são os que mais sao usados em meu servidor, caso queira usar mais, basta copiar esta parte
e colocar abaixo ou acima e mudar o skill ID referente ao skill, sendo?
0 fist, 1 club, 2 sword, 3 axe, 4 distance, 5 shield e 6 fishing.
E renomear como desejar
- Caso queira remover as barras horizontais do fundo, basta remover este trecho
bgcolor="#D4C0A1"
Demonstração:
Eu fiz questão de usar uma outfit 64px para mostrar o que acontece quando for assim.
Optei por upar em mais de 1 servidor.
Arquivos:
Outfitter + Character View GoogleDrive
Outfitter + Character View Mediafire
Outfitter + Character View Mega
Outfitter + Character View.zip
SCAN:
https://www.virustotal.com/gui/file/4e35ee20732efb1e7df9196416bd40b05ea92230f629f9ba427d32dfdb7b8f71/detection
Creditos:
Eu: Kira Conquest/Kira Stark - por editarr e adicionar skill bar
averatec do Otland onde eu peguei o outfitter
eu não lembro onde eu peguei o script mana e health bar
-
koyotestark deu reputação a L3K0T em Tibia Ginius Versão 1.1 by L3K0TTibia Ginius Versão 1.1 by L3K0T
O Tibia Genius, desenvolvido por L3K0T, é uma ferramenta essencial para desenvolvedores de OTServ que desejam otimizar e simplificar o processo de desenvolvimento dos seus servidores. Essa ferramenta integra diversas funcionalidades que eliminam a necessidade de utilizar múltiplos programas para tarefas distintas. Entre suas principais funcionalidades, destacam-se:
Item Editor: Permite a edição detalhada dos itens do jogo, facilitando a criação e modificação de itens conforme a necessidade do servidor. RME (Remere's Map Editor): Um editor de mapas completo que oferece uma interface intuitiva para criar e modificar mapas do jogo. Object Builder: Ferramenta para a construção e edição de objetos no jogo, essencial para personalizar a experiência do jogador. Mapa Converter: Utilitário que converte mapas entre diferentes formatos, garantindo compatibilidade e facilitando a integração de mapas em diversos servidores. Servidor Integrado: Opção para iniciar o servidor diretamente no ambiente Windows para testes, eliminando a necessidade de configurar servidores externos para verificações rápidas. Acesso Facilitado às Pastas: Botões dedicados para acessar rapidamente as pastas do servidor, aumentando a eficiência no gerenciamento dos arquivos do servidor.
Antes de utilizar o Tibia Genius, é necessário importar o servidor. Isso é feito através do botão "Selecionar Servidor", onde o usuário deve especificar a pasta do servidor para que todas as funcionalidades possam ser utilizadas de forma integrada. Da mesma forma, para utilizar o RME e o Item Editor, é preciso importar os arquivos SPR e DAT do cliente do jogo.
Com o Tibia Genius, l3k0t proporciona uma solução tudo-em-um para desenvolvedores de OTServ, tornando o processo de desenvolvimento mais ágil e centralizado, ao mesmo tempo que oferece ferramentas poderosas e de fácil acesso para a criação e manutenção de servidores personalizados.
Espero que ajude os preguiçosos risos, qualquer coisa reporte e ajude a melhorar, ideias são todas bem vindas!
Download GitHub: https://github.com/l3k0t/Tibia_Ginius
Scan Virus Total: https://www.virustotal.com/gui/file/f406f1310f8c5f403c35115eaaddc609ccdff2ff56b4a96b619ac7df914829e1?nocache=1
Discord do Projeto: https://discord.gg/MGD55hPWYf
-
koyotestark deu reputação a gabrielzika em How to fix NPC msg sending to Default chat@henkas
replaces this
-
koyotestark deu reputação a xWhiteWolf em Gran Castle Event (8.54+)Olá pessoa, hoje vim trazer pra vocês um script bem requisitado que inclusive é vendido por alguns scripters. Algumas versões "pioradas" dessse script podem ser encontradas em servidores cópias do Fox World porém nenhum desses scripts chegará aos pés desse daqui que foi arrumado por mim.
Eu não sou o criador do Script, eu peguei qualquer um na internet e só fui arrumando e adicionando coisas que as pessoas reclamavam que não tinha.
O cara que criou a versão que eu editei é esse daqui:
Não vou me prolongar e nem falar mal da versão do Roksas, apenas saibam que eu editei ela praticamente inteira e que agora está 100%.
Aqui tem um pequeno vídeo de como funciona o evento:
Explicação: Gran Castle é um evento para ser feito sozinho ou com a guild, há um limite configurável no script de membros que podem entrar da mesma guild. Em dias determinados é aberto o evento e os players podem entrar ao falar com o NPC Melkrapo. Uma vez dentro do castelo os players batalharão para subir os andares e chegar até a Gran Tower, um monstro lendário que dará glória para aqueles que o derrotarem. Será que você é capaz? Instale no seu server e descubra! Um evento para redefinir o conceito de PVP e onde o seu maior inimigo serão seus semelhantes.
Sem mais delongas vamos começar a instalar esse monstrinho.. porque ele é grande pra caralho.
Agora crie um arquivo em creaturescripts\scripts chamado Gran Tower.lua e adicione o seguinte:
em data\lib crie um arquivo chamado 046-Gran Tower.lua e adicione o seguinte dentro dele:
Agora voltando aos creaturescripts crie um arquivo em scripts chamado Gran Aura.lua e adicione:
E um arquivo chamado Barrier.lua na mesma pasta com o seguinte conteúdo:
Agora em globalevents\globalevents.xml adicione a seguinte linha:
<globalevent name="Gran Tower" interval="60" event="script" value="Gran Tower.lua"/> E adicione o script associado em globalevents\scripts com o nome de Gran Tower.lua:
Agora na pasta monster procure o seu monsters.xml e adicione essas duas linhas:
<monster name="Gran Tower" file="8.4/Gran Tower.xml"/> <monster name="Barrier" file="8.4/barrier.xml"/> Feito isso crie os monstros na pasta data\monster\8.4:
O primeiro se chama barrier.xml e deverá conter:
O segundo se chamará Gran Tower.xml e deverá conter:
Agora vamos para NPC, vá em data\npc e crie um arquivo chamado Melkrapo.xml com o seguinte conteúdo:
Agora em npc\scripts crie um arquivo chamado Melkrapo.lua e adicione o seguinte:
Agora partindo pra spells vá em data\spells e adicione no spells.xml essas linhas:
-
koyotestark deu reputação a 77mateus77 em (Resolvido)[PEDIDO] spell heal x % de vidaNão sai a palavra do mesmo geito do outro, e não cura tambe, e aparece esse erro na distro:
[27/07/2015 18:33:40] [Error - Spell Interface] [27/07/2015 18:33:41] data/spells/scripts/curavida.lua:onCastSpell [27/07/2015 18:33:41] Description: [27/07/2015 18:33:41] data/spells/scripts/curavida.lua:6: attempt to call global 'getPlayerMaxHealth' (a nil value) [27/07/2015 18:33:41] stack traceback: [27/07/2015 18:33:41] data/spells/scripts/curavida.lua:6: in function <data/spells/scripts/curavida.lua:5> voce por acaso conseguiria fazer a uh heala por % do hp total? tamben serviria no caso se não conseguisse uma spell assim ae pessoal consegui um valeu por tentarem me ajudar. function onCastSpell(cid, item, fromPosition, itemEx, toPosition) local hpmax = getCreatureMaxHealth(cid) local min = 15.0 -- this means 15% minimum healing local max = 15.0 -- this means 15% maximum healing local hp_add = math.random((hpmax * (min/100)), (hpmax * (max/100))) if(hasCondition(cid, CONDITION_EXHAUST)) then doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, "You are exhausted") return true end doCreatureAddHealth(cid, hp_add) doSendMagicEffect(getThingPos(cid), 32) doSendAnimatedText(getPlayerPosition(cid),"+"..hp_add.."", TEXTCOLOR_GREEN) return true end -
koyotestark deu reputação a Fabi Marzan em [SQLite] -=[TFS]=- 0.4 8.60 Piso solta letra |ROX|... Porem continua com efeito do pisomas você quer que ele cure enquanto o jogador ainda está no chão?
Acabei de mover o addEvent e use StopEvent.
local level = 717217 -- Até que level pode healar local delay = 4 -- de quanto em quanto tempo irá adicionar (no caso, 1 segundo) local mana = 1000000000 -- quanto de mana vai ser adicionado local vida = 1000000000 -- quanto de health vai ser adicionado local eventId function doHealPlayer(cid) if getPlayerStorageValue(cid, 98910) == 1 then doCreatureAddHealth(cid, mana) doPlayerAddMana(cid,vida) doSendAnimatedText(getCreaturePos(cid), "|ROX|...", 138) doSendMagicEffect(getCreaturePosition(cid),53) eventId = addEvent(doHealPlayer, delay*1000, cid) end return true end function onStepIn(cid, item, position, lastPosition, fromPosition) if getPlayerLevel(cid) >= level then doPlayerSendCancel(cid,"Você já é acima do level ".. level .."") else setPlayerStorageValue(cid, 98910, 1) doHealPlayer(cid) end return true end function onStepOut(cid, item, position, lastPosition, fromPosition) setPlayerStorageValue(cid, 98910, -1) stopEvent(eventId) return true end
-
koyotestark deu reputação a xWhiteWolf em [Boss Skill] Aegis of ImmortalFala galera do TK, hoje vim trazer pra vocês um script de um server bem famoso, trata-se de nada mais e nada menos doque a Aegis of Immortal do Fox World. Quase nenhum OTserver consegue me deixar com vontade de jogar, mas se tem um que chegou bem próximo foi o Fox e o motivo é a criatividade dos caras. É muito fácil aprender lua e ser um ótimo scripter mas ter criatividade pra criar esse tipo de script é bem mais raro. Sem mais delongas vou apresentar a idéia do script e logo em seguida ensinar a instalar no seu servidor.
Aegis of the Immortal
Descrição: É obtida 1 carga ao vencer o boss Aegis (aparece em invasões). Com esta técnica, o jogador ganha a aura do boss, e se morrer é teleportado para a Aegis Dimension, e após 3 segundos volta para o lugar que estava, com life e mana full como se não tivesse sido tocado. (limite de 1 carga) Tipo: (B.Skill) Vocações: All Vocations Elemento: n/a fonte: site do fox
Well, o script é bem simpleszinho mas eu apanhei pra caramba pra fazer ele funcionar certinho (acredito que nem o script dos caras do Fox funcione da maneira correta, mas esse daqui vai funcionar)
Antes de tudo você tem que criar uma área no seu map editor e colocar ela inteira como no-pvp e no-logout. Essa vai ser a área que você vai ser teleportado, será a sua "Aegis Dimension".
Feito isso você vai precisar adicionar essa linha em creaturescripts.xml:
<event type="statschange" name="reborn" script="reborn.lua"/> obs: eu levei muito tempo tentando fazer por onPrepareDeath mas aparentemente essa função não funciona tão bem quanto statschange e acabava chamando a si mesma repetidas vezes.
agora crie um arquivo chamado reborn.lua na pasta creaturescripts\scripts e coloque isso dentro dele:
Agora você só tem que adicionar essa linha no creaturescripts\scripts\login.lua (de preferencia antes do ultimo return true)
--- BOSS SKILLS ---- registerCreatureEvent(cid, "reborn") if getPlayerStorageValue(cid, 19332) == -1 then setPlayerStorageValue(cid, 19332, 0) end Agora seu server possui a Aegis of Immortal e você pode configurar essa skill passiva de diferentes maneiras:
1) Pode ser uma quest que dá como prêmio X quantidades dessa skill
2) Um npc que vende X quantidades da skill
3) Um item que ao ser equipado ativa a skill
4) Um boss que vc mata e ganha quantidades dela
5) Um bonus em algum evento
6) Um item de shop
etc.
Tudo que vc precisa fazer é criar um script que dê o storage 19332, o valor do storage é o numero de vezes que vc vai utilizar a skill.
aqui tem um exemplo de uma quest que ganha 5 charges da Aegis of Immortal:
function onUse(cid, item) local storage = 19332 if getPlayerStorageValue(cid, storage) ~= 5 then doPlayerSetStorageValue(cid, storage, 5) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have habilited your [BOSS SKILL]") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your [BOSS SKILL] is already with "..getPlayerStorageValue(cid, storage).." charges.") end return true end e aqui tem algumas fotos de como fica no seu server:
Espero que vcs tenham gostado..
Vou dar 20% de Crédito pro Kilua porque sem o tutorial dele de addEvent isso daqui não seria possível e 30% pro pessoal do Fox por terem me dado a idéia do script.
EDIT: Fiz um monstro q dá essa skill ao morrer, só que eu inovei um pouquinho e fiz ele tendo a skill, ou seja, vc tem que matar ele um numero X de vezes pra valer de verdade kkk A graça é que esse numero de X é inerente ao player (fiz por storage), então se um grupo de 10 pessoas for fazer e cada hora uma matar, serão (X+1) vezes no mínimo auhauhauh Só que como ele não dá loot e o unico premio dele é a skill pra quem matar X vezes, então o pessoal dá KS mesmo. Enfim, aproveitem:
creaturescripts\scripts\aegis.lua
local config = { storagekill = 19500, --- storage q conta a quantidade de kills storageaegis = 19332, --- storage da skill tempo = 5, -- tempo até ele renascer times = 2, --- quantidade de vezes que tenho que matar charges = 1, --- cargas da skill q ganha ao matar definitivamente effect1 = 66, -- efeito ao morrer effect2 = 10 --- efeito ao renascer } function onKill(cid, target, lastHit) local killed = getPlayerStorageValue(cid,config.storagekill) local skill = getPlayerStorageValue(cid, config.storageaegis) if isMonster(target) and getCreatureName(target):lower() == 'aegis' then if killed < config.times then doCreatureSay(target, "I'll be back mortal...", 20) doSendMagicEffect(getThingPos(target), config.effect1) setPlayerStorageValue(cid, config.storagekill, killed+1) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) addEvent(doCreateMonster, 1000*config.tempo, "Aegis", getCreaturePosition(target), true) end if killed >= config.times then setPlayerStorageValue(cid, config.storagekill, 0) if skill < config.charges then doPlayerSendTextMessage(cid,22,"Congratulations, you just killed "..getCreatureName(target).." and earned Aegis of Immortal skill!") setPlayerStorageValue(cid, config.storageaegis, config.charges) end end end return true end
creaturescripts\scripts\login.lua registerCreatureEvent(cid, "aegis") if getPlayerStorageValue(cid, 19500) == -1 then setPlayerStorageValue(cid, 19500, 0) end creaturescripts.xml
<event type="kill" name="aegis" script="aegis.lua"/> monster\aegis.xml
<?xml version="1.0" encoding="UTF-8"?> <monster name="Aegis" nameDescription="Aegis, the immortal" race="blood" experience="0" speed="605" manacost="0"> <health now="100000" max="100000"/> <look type="287" head="0" body="0" legs="0" feet="0" corpse="0"/> <targetchange interval="2000" chance="15"/> <strategy attack="60" defense="5"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="210" attack="260"/> <attack name="lifedrain" interval="1000" chance="20" range="3" min="-550" max="-1050"/> <attack name="firecondition" interval="1000" chance="7" range="2" min="-800" max="-1200"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="yellowspark"/> </attack> <attack name="physical" interval="1000" chance="7" radius="6" target="0" min="-250" max="-750"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="death" interval="1000" chance="50" radius="5" target="0" min="-200" max="-500"> <attribute key="areaEffect" value="mortarea"/> <attribute key="shootEffect" value="suddendeath"/> </attack> <attack name="firefield" interval="1000" chance="4" radius="5" target="0"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="34" range="7" radius="7" target="1" min="-350" max="-850"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="fire" interval="1000" chance="13" length="8" spread="0" min="-500" max="-1000"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="10" length="8" spread="3" min="-300" max="-1500"> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="25" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="1800" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <immunities> <immunity physical="0"/> <immunity energy="1"/> <immunity fire="1"/> <immunity poison="0"/> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="50"> <voice sentence="Poor innocent, I CAN'T DIE HAHAHAHAAHA"/> <voice sentence="Your soul will be mine!"/> <voice sentence="MUAHAHAHAAHAHA, I TOLD YOU" yell="1"/> </voices> </monster> OBS: edite ele porque eu coloquei ele muito forte, com muita vida e com muita recuperação de vida.
monster\monsters.xml
<monster name="Aegis" file="aegis.xml"/> -
koyotestark deu reputação a FeehLoveCes em [ACTION] Cassino - Roleta de itemsOlhando alguns posts vi que pediram um Cassino que já existe em um servidor ou um semelhante, porem não encontrei ninguém postando nenhum, então resolvi criar ele já que não tinha nada melhor pra fazer...
Testado: OTX mas acredito que funcione em TFS 0.3/0.4
Como funciona: Ao puxar a alavanca será roletado uma serie de itens X vezes, ao terminar o item que parar no centro é a recompensa do player.
Instalação: Crie uma sala parecida com esta pelo seu Map Editor
Depois em data/actions/scripts crie um arquivo chamado cassinoroll.lua
Agora em Actions.xml
Créditos:
Feeh - Por criar
@Storm - Me ajudar em algumas duvidas
Caso alguém conheça quem teve a ideia do evento eu coloco os créditos
-
koyotestark deu reputação a Wagner Campelo em OTC Advanced Sound SystemCTRLV + CTRLC - OTland
-
koyotestark deu reputação a Chriistian em (Resolvido)Minimap CompletoÉ facil:
1. Logue em seu server com qualquer char.
2. Coloque os arquivos abaixo:
data/items/items.otb
data/world/(all files)
na pasta data do OTClient. Vai ficar igual a imagem abaixo:
Então no terminal do OTClient (CTRL+T) e envie o codigo abaixo:
g_things.loadOtb('items.otb') então (substitua 'ots' pelo nome do seu MAPA?
g_map.loadOtbm('ots.otbm') isso ira congelar seu OTClient por alguns segundos.
PRONTO!
Você conseguiu o Minimapa completo do seu mapa para OTC. Após o registro, ele salvará esse mapa no diretório config do OTClient -
koyotestark deu reputação a Gengo em [OTClient] Sistema de Dialogo Otpokemon[OTClient] Sistema de Dialogo Otpokemon
Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,
não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.
1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client,, extraia e coloque o modulo na pasta modules.
2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:
Feito o passo 1 e 2, vamos para a parte do servidor.
1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:
2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:
Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.
1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:
2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:
O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.
Demostrativo dentro do game:
Arquivos para download e o scan:
-
koyotestark recebeu reputação de LeoTK em Client da bug ao entra no TPse tiver usando otc, vai em modules/game_features/features.lua, da um cntrol F em 860
e adiciona isso
g_game.enableFeature(GameDistanceEffectU16) g_game.enableFeature(GameMagicEffectU16)
-
koyotestark recebeu reputação de Doidodepeda em Windows vs Linux ???Bom, sendo pratico, windows facil, linux dificil vc vai precisar de muito conhecimento pra aprender mexer com linux,
Quando for compilar, muitas vezes pode dar erro de biblioteca, ai so quem manja pra saber qual falta.
Porem as bocas dizem ser mais seguro, mas ai claro, pra deixar seguro, tem que saber mecher, e se nao souber, so pagando para fazerem pra vc.
-
koyotestark recebeu reputação de L3K0T em (Resolvido)Enviar mensagem num channel que só recebe de quem estiver na tela.sim a ideia é essa mesmo, pretendo ver como tirar pra aparecer o nome laranja, por enqunto, fiz gambiarra, e onde ta name = "nome do spell" eu deixei assim "".
o interessante era fazer diretamente na source pra direcionar, pq eu tenho que botar o script em cada spell.
-
koyotestark recebeu reputação de L3K0T em (Resolvido)Enviar mensagem num channel que só recebe de quem estiver na tela.eu tinha acabado de conseguir rs, mas vou testar este seu tambem.
O meu tinha ficado assim:
local players = getSpectators(getCreaturePosition(cid), 10, 10, 7) for i, tid in ipairs(players) do if(isPlayer(tid)) then doPlayerSendChannelMessage(tid, MESSAGE_STATUS_CONSOLE_YELLOW, "Mensagem", TALKTYPE_CHANNEL_W, CHANNEL_TESTE) end end end
-
koyotestark deu reputação a L3K0T em (Resolvido)Enviar mensagem num channel que só recebe de quem estiver na tela.local playerPos = getCreaturePosition(cid) -- Obter a posição do jogador
local playersOnScreen = getSpectators(playerPos, 7, 5, false, true) -- Obter os jogadores na área de 7x5 tiles em torno do jogador
for _, player in ipairs(playersOnScreen) do
doPlayerSendChannelMessage(player, TALKTYPE_CHANNEL_O, CHANNEL_TESTE, "Teste", MESSAGE_STATUS_CONSOLE_YELLOW)
end
Esse é por distância, ele obtém a posição do jogador (getPlayerPosition(cid)) e, em seguida, busca os jogadores na área ao redor usando getPlayersInArea(playerPos, 7, 5). Em seguida, um loop é usado para enviar a mensagem para cada jogador encontrado na área.
-
koyotestark deu reputação a L3K0T em (Resolvido)Controle de kills e remoção de kills por tempo (script quase pronto)Se puder poste a solução para ajudar as outras pessoas
-
koyotestark deu reputação a Vodkart em PISO QUE REMOVE PAREDEfunction onStepIn(cid, item, position, fromPosition) local time = 30 -- em segundos local item_id, wallpos = 1543, {x=186, y=54, z=7} -- id da parede e pos dela if not isPlayer(cid) then return true end local t = getTileItemById(wallpos, item_id).uid if t > 0 then doRemoveItem(t) doSendMagicEffect(wallpos, CONST_ME_POFF) addEvent(doCreateItem, time * 1000, item_id, 1, wallpos) end return true end
-
koyotestark deu reputação a Under em alguem sabe me dizer como funciona desse script? pedra?Explicação
-
koyotestark deu reputação a Imperius em [Pedido] Spell de voltar no tempo - teleportar 5 seg no "passado"Exemplo:
data > spells > spells.xml
<instant name="NOME DA MAGIA" words="NOME DA MAGIA" lvl="100" mana="160" prem="0" selftarget="1" exhaustion="60000" needlearn="0" event="script" value="support/nomedamagia.lua"> <vocation id="1"/> <vocation id="8"/> </instant>
data > spells > scripts > support > nomedamagia.lua
function teleportPlayer(player, position) doTeleportThing(player, position) doSendMagicEffect(position, CONST_ME_TELEPORT) end function onCastSpell(cid, var) local playerPosition = getCreaturePosition(cid) addEvent(teleportPlayer, 5000, cid, playerPosition) doSendMagicEffect(playerPosition, 13) return true end
-
koyotestark deu reputação a bonvallet em [OTCV8] Aumentar altura do nome e barra de vida no OTClient V8in mehah OT client +2.8 .
the user need to modify c++
[1/3] src\client\creature.cpp
in void
void Creature::drawInformation(const MapPosInfo& mapRect, const Point& dest, bool useGray, int drawFlags)
modify
L 237
auto backgroundRect = Rect(p.x - (13.5), p.y - cropSizeBackGround, 27, 4); for
auto backgroundRect = Rect(p.x + m_informationOffset.x - (13.5), p.y + m_informationOffset.y - cropSizeBackGround, 27, 4);
--------------------
modify
L 240
auto textRect = Rect(p.x - nameSize.width() / 2.0, p.y - cropSizeText, nameSize); for
auto textRect = Rect(p.x + m_informationOffset.x - nameSize.width() / 2.0, p.y + m_informationOffset.y - cropSizeText, nameSize);
-----------------------------------------
In
L 663
void Creature::setDirection(Otc::Direction direction)
ADD
callLuaField("onDirectionChange", m_direction, direction);
under of
void Creature::setDirection(Otc::Direction direction) { assert(direction != Otc::InvalidDirection);
[2/3] src\client\creature.h
L 260
under of
Position m_lastStepFromPosition; Position m_lastStepToPosition; Position m_oldPosition; ADD
Point m_informationOffset;
[3/3] src\client\luafunctions.cpp
L 525
under of
g_lua.bindClassMemberFunction<Creature>("setDrawOutfitColor", &Creature::setDrawOutfitColor); g_lua.bindClassMemberFunction<Creature>("setDisableWalkAnimation", &Creature::setDisableWalkAnimation); g_lua.bindClassMemberFunction<Creature>("isDisabledWalkAnimation", &Creature::isDisabledWalkAnimation);
ADD
g_lua.bindClassMemberFunction<Creature>("setInformationOffset", &Creature::setInformationOffset); g_lua.bindClassMemberFunction<Creature>("getInformationOffset", &Creature::getInformationOffset);
-
koyotestark deu reputação a Dwarfer em Aumentando DamagePara evitar maiores modificações, você poderia utilizar esse aumento de dano apenas para player vs player (com monstros não funciona). Após usar a magia, o player só poderia utilizar novamente assim que o efeito do bônus no elemento (fire, ice, etc) acabasse. Então, teste assim:
Em spells/scripts crie um arquivo:
buffelemental.lua
Edite as palavras "flam", "frigo" como queira ou adicione outras.
Em spells.xml: (Edite as palavras da magia, o maglvl, mana e os outros parâmetros de acordo com o que desejar, esse aí é apenas para servir como base caso você não saiba como fazer)
Em creaturescripts/scripts crie um arquivo:
buffelementalattack.lua
No login.lua, registre o evento adicionando:
registerCreatureEvent(cid, "BuffElemental") Em creaturescripts.xml, adicione a tag:
<event type="statschange" name="BuffElemental" event="script" value="buffelementalattack.lua"/> Para utilizar a magia:
utori buff "flam -- o hit do player quando FIRE será aumentado em 10% como foi configurado lá na spell
Para os demais:
utori buff "tera
utori buff "ico
utori buff "frigo
-
koyotestark deu reputação a L3K0T em Cama recuperar 2 de Stamina por minuto.Tenta
local STAMINA_GAIN = 2 -- Quantidade de stamina recuperada por minuto
local STAMINA_INTERVAL = 60 * 1000 -- Intervalo de tempo entre cada aumento de stamina (em milissegundos)
function onLogin(cid)
checkStamina(cid) -- Verifica se o jogador já está dormindo ao entrar no jogo
end
function onLogout(cid)
stopStaminaGain(cid) -- Remove o evento de aumento de stamina ao sair do jogo
end
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
stopStaminaGain(cid) -- Remove o evento de aumento de stamina ao mudar de posição
end
function checkStamina(cid)
if getPlayerSoul(cid) == SOUL_SLEEPING then
startStaminaGain(cid)
end
end
function startStaminaGain(cid)
addEvent(function()
if getPlayerSoul(cid) ~= SOUL_SLEEPING then
stopStaminaGain(cid)
return
end
doPlayerAddStamina(cid, STAMINA_GAIN)
startStaminaGain(cid)
end, STAMINA_INTERVAL)
end
function stopStaminaGain(cid)
stopEvent("stamina_gain_" .. cid) -- Remove o evento de aumento de stamina
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.itemid == ID DA CAMA AQUI then -- ID do item que permite dormir
doChangeSoulState(cid, SOUL_SLEEPING)
checkStamina(cid)
end
return true
end
<event type="login" name="StaminaRegenLogin" script="staminaregen_login.lua"/>
<event type="logout" name="StaminaRegenLogout" script="staminaregen_logout.lua"/>
<event type="death" name="StaminaRegenDeath" script="staminaregen_death.lua"/>
<event type="advance" name="StaminaRegenAdvance" script="staminaregen_advance.lua"/>
<event type="minute" name="StaminaRegenMinute" script="staminaregen_minute.lua"/>
<event type="startup" name="StaminaRegenStartup" script="staminaregen_startup.lua"/>
-
koyotestark deu reputação a GamerGoiano em (Help) Alguem me ajuda com esse erroColoca 1 linha depois da function onuse
Vai adicionar cooldown de 3 segundos no goback
Faz o teste e me diz se deu certo @S H I O N
local cooldown = 3 -- tempo em segundos de exaustão local exhaust = exhaustion.get(cid, 6666) or 0 -- obtém a exaustão atual do jogador if exhaust + cooldown > os.time() then -- se o jogador ainda estiver exausto doPlayerSendCancel(cid, "You must wait "..cooldown.." seconds before using this item again.") -- exibe a mensagem de espera return true -- interrompe a execução da função end exhaustion.set(cid, 6666, os.time() + cooldown) -- define a nova exaustão do jogador -
koyotestark deu reputação a GBDias em Pergaminho de EXP com tempo!Olá TK,
Hoje trago para vocês um MOD bem interessante que encontrei na internet, a lógica é bem simples, você usa um item e ganha mais XP durante um tempo.
O item, a XP e o tempo são totalmente configuráveis, vocês podem mudar como quiserem.
FUNCIONA COM TFS 0.4 E DEVE FUNCIONAR COM 0.3.6 (NÃO TESTADO)
Eu vou testar com a minha versão 0.3.7 quando chegar em casa e edito o post para vocês.
Bem, então vamos ao script,
Abra a pasta "mods" do seu servidor e crie um arquivo chamado expscroll.xml, abra e coloque o seguinte código:
<?xml version="1.0" encoding="UTF-8"?> <mod name="Experience Stages Scroll" version="1.0" author="TomCrusher" contact="otland.net" enabled="yes"> <action itemid="9004" event="script" value="expstagescroll.lua"/> <creatureevent type="think" name="ExpStage" event="script" value="expstagescroll.lua"/> <creatureevent type="login" name="ExpStageLogin" event="script" value="expstagescroll.lua"/> </mod> Agora em "mods/scripts", crie um arquivo chamado expstagescroll.lua e coloque este código:
local config = { rate = 2, storage = 1000, expstorage = 1100, register = 1200, time = 14400, } function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, config.storage) <= 0 then local rates = getPlayerRates(cid) setPlayerStorageValue(cid, config.expstorage, rates[SKILL__LEVEL]) setPlayerStorageValue(cid, config.register, 1) itemEx=itemid == 9004 doCreatureSay(cid, "Your extra experience rate has been activated! It now is: " .. config.rate .. "x added to your former experience rate.", TALKTYPE_ORANGE_1, true, cid) setPlayerStorageValue(cid, config.storage, os.time()+config.time) doPlayerSetExperienceRate(cid, rates[SKILL__LEVEL]+config.rate) doRemoveItem(item.uid,1) registerCreatureEvent(cid, "ExpStage") else doCreatureSay(cid, "You must finish first exp condition to start other exp condition !", TALKTYPE_ORANGE_1, true, cid) end return true end function onThink(cid, interval) if getPlayerStorageValue(cid, config.register) == 1 then if getPlayerStorageValue(cid, config.storage) <= os.time() then doCreatureSay(cid, "Your extra experience rate has finished! It is now normaly experience rate.", TALKTYPE_ORANGE_1, true, cid) setPlayerStorageValue(cid, config.storage, 0) setPlayerStorageValue(cid, config.register, 0) local oldexp = getPlayerStorageValue(cid, config.expstorage) doPlayerSetExperienceRate(cid, oldexp) unregisterCreatureEvent(cid, "ExpStage") end end return true end function onLogin(cid) if getPlayerStorageValue(cid, config.register) == 1 then registerCreatureEvent(cid, "ExpStage") local rates = getPlayerRates(cid) doCreatureSay(cid, "Your extra experience rate is still here! It is: " .. config.rate .. "x added to your former experience rate.", TALKTYPE_ORANGE_1, true, cid) if getPlayerStorageValue(cid, config.storage) > os.time() then local oldexp = getPlayerStorageValue(cid, config.expstorage) doPlayerSetExperienceRate(cid, oldexp+config.rate) end end return true end Configurando:
rate = 2, -- número que irá ser multiplicado pela sua exp rate básica (funciona com números quebrados, tais como 1.5 ou 0.2).
storage = 1000, -- storage que irá guardar o tempo
expstorage = 1100, -- storage que irá guardar a xp
register = 1200, -- storage que indica se o player está registrado no mod
time = 14400, -- tempo que falta para o buff do scroll acabar (o tempo é calculado em segundos, ex: 14400 segundos = 24 horas)
___________________________________________________________________________________________________________________________________
Créditos :
TomCrusher (OTland) - Desenvolveu o sistema
Eu - Traduzi e postei aqui.