Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/07/15 em todas áreas

  1. Frozen Orb

    Yan Liima e 3 outros reagiu a xWhiteWolf por uma resposta no tópico

    4 pontos
    Eai meus queridos colegas do Tibia King, hoje vim trazer uma spell que um amigo egípcio (sim, você leu certo) pediu pra mim fazer pra ele. Sei que eu ando meio ausente mas é que a faculdade está realmente complicada e to entrando em semana de provas mas tirei esse fds pra tentar trazer algo legal pra vocês A spell cria uma orb congelada embaixo de você que vai ficar dando dano em area enquanto roda uns efeitos de gelo, ela é bem bonita e foi um dos motivos que eu decidi fazer Aqui tem um pequeno GIF dela funcionando: em spells.xml coloque: <instant name="Frozen Orb" words="exori grav frigo" lvl="80" manapercent="3" prem="1" maglv="50" exhaustion="1000" needlearn="0" event="script" value="attack/frozenorb.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Note que ela remove % da mana, se quiser mudar isso troque manapercent ="3" por mana = "quantidade que vai gastar". Agora vamos ao script: Crie um arquivo chamado frozenorb.lua e coloque na pasta spells/scripts/attack e coloque o segundo conteúdo dentro dele: Todas as explicações estão dentro do script, qualquer dúvida venham falar cmg. A versão testada foi TFS 0.3.6, tibia 8.54 mas deve funcionar em 8.6 sem problema. Qualquer erro escrevam aí que eu tento ajudar. Agradecimentos: Primeiramente à equipe do DeathZot por ter criado à spell, eu retirei a idéia de uma magia que eles fizeram pro servidor deles. Segundamente Em segundo lugar, pro meu querido amigo, Ahmed, por ter me mostrado o vídeo e confiado em minhas habilidades de roubar idéias scripting
  2. 2 pontos
    FALA GALERA, HJ VOU DISPONIBILIZAR MEU OTSERV DE POKEMON, ESSE É MEU PRIMEIRO OTSERV DE POKEMON QUE EU EDITEI, ERA UM PROJETO AI COMO DEU UM ERRO CHATO, E EU TO SEM TEMPO PRA ARRUMAR VOU DISPONIBILIZAR PRA VOCÊS. • Menu: ├ Informações; ├ Ediçoes; ├ Prints; ├ Oque falta fazer; ├ Erros; ├ Download; └ Creditos. • Informações Basicas • •Senha do god: god/god. •Mapa com hunts kanto. •Server Sem System de level !. •Clan System (PDA Slicer). •Alguns bugs corrigidos. •Pokemons da 1° até a 2° geração. •Taunt System, para todos os clan rank 5, e algumas outfits. •novas paredes, pisos, e itens PxG. •Npc De itens de task de clãns. •Shinys Espalhado pelo mapa. •novos outfits, que nao tem a ver com Pokemon, mas há um bom divertimento com elas. •Duel System. •Golden arena. •Moves system (m1 a m12). •Maximo 6 pokemonsna bag. •Order 100%. • Edições / Ajustes Por Min • •Primeiramente eu nao editei o Mapa, Apenas o Templo. •Adicionado 32 Novos Lendarios (contendo normais e shinys) •Adicionado 2 Novas Stones (Green Stone e Rare Stone) •Adicionado Nova Box (Lendario Box +1) •Todos Os Lendarios tem suas respectivas Corpses e Portrait •Adicionado Black Articuno e Black Celebi •Reformulada a Quest Dos Lendarios (Moltres,Celebi e Suicune) •Segundo Andar Do Templo Expandido. •Adicionado Respawn De Alguns Shiny's. • PrintScreen • •Novos Lendarios • •Novos Lendarios Shiny • • Green Stone • • Rare Stone • • Oque falta fazer • • Falta Arrumar os moves e balanciar os novos lendarios. • Erros Do Servidor • O Unico erro que eu nao consigo arrumar é o que os novos lendarios nao estao atakando. (os lendarios que voce sumona pelo /m , da pokebola ataka normal) Pela minha falta de conhecimento pois este é meu 1 server de poketibia. Entao se voce achar a soluçao me fale que assim na V2.0. ja esta arrumado. • Download's • Server. PokéHouse v1.0 Client. PokéHouse Client v1.0 • Scan • Se Alguem Fizer Agradeço. • Creditos • Eu (Por Adicionar os lendarios e editar) Slicer (pelo servidor) Brun123 (por alguns scripts, e por criar o pda) Stylo Maldoso (pelo mapa) Bolz (por editar) Xtibia (por alguns scripts) • Oque vem pra V2.0 • Quando eu tiver tempo, vou terminar de adicionars os pokemon porque ainda falta • Deoxys,Speed Deoxys,Attack Deoxys e Defense Deoxys (normais e shinys). • Shiny Zekrom e Shiny Renshinran • Novos Respawn's • Pokemons Ancient. Entre Outras Coisas.
  3. PVP System

    bielzk01 e um outro reagiu a Garou por uma resposta no tópico

    2 pontos
    Introdução Estava eu jogando um bom Counter Strike 1.6 em um servidor 4Fun, quando vi um dos mais conhecidos plugins desse jogo - amxx plugin - que consiste em contar quantos frags seguidos um jogador fez e interpretar isso com um som. Resolvi então fazer algo parecido no Tibia, e como ele não possui som, me utilizei de mensagens broadcast. Enfim, para instalar o sistema no seu servidor, siga os passos abaixo. Instalação Em /data/creaturescripts/scripts/, crie o arquivo pvpsystem.lua e cole este conteúdo: [paste]NgAuw1nU[/paste] Em /data/creaturescripts/, abra o arquivo creaturescripts.xml e cole essa tag nele: <event type="kill" name="pvpsystem" event="script" value="pvpsystem.lua"/> Em /data/creaturescripts/scripts, abra o arquivo login.lua e cole essa linha antes do return true: registerCreatureEvent(cid, "pvpsystem") E você também pode adicionar um channel custom, onde serão enviadas mensagens das mortes no PVP pelo sistema. Em /data/XML/, abra o arquivo channels.xml e adicione essa linha: <channel id="10" name="PVP" logged="yes" active="0"/> Em breve adiciono screenshots do funcionamento ou até um vídeo.
  4. [8.54] Servidor + Client Naruto B&W [EXCLUSIVO]

    LoLos reagiu a Eytor por uma resposta no tópico

    1 ponto
    OLÁ USUARIOS DO TIBIA KING .. HOJE ESTAREI TRAZENDO UMA NOVIDADE .. O SERVIDOR DE NTO EXCLUSIVO DO NTO BLACK & WHITE(AKELE OT NOVO QUE FOI CRIADO A 1 MES POR E MIN E POR O [ADM] Johnatan). VALE LEMBRAR QUE O NTO BLACK WHITE FOI UM DOS SERVIDORES DE NARUTIBIA QUE MAIS CRESCEU NOS ULTIMOS TEMPOS .. EM APENAS 1 SEMANA DE NTO JÁ ATINGIMOS A META DE 70 ~ 80 USUARIOS ONLINE FIXOS DIARIOS, E ESSE É O SERVIDOR MAIS RECENTE DO NTO BLACK WHITE BASEADO NO DO SERVIDOR MADARA RINNEGAN EDITADO POR MIN E POR O JOHNATA. ANTES DE MAIS NADA GOSTARIA DE EXPLICAR O MOTIVO DE TAR POSTANDO O SERVER .. BEM O JOHNATAN ERA QUEM FAZIA PRATICAMENTE TUDO NAS ATUALIZAÇÕES E TAALS .. POREM ELE PAROU COM NTO AI TIVE QUE DESMONTAR O NTO B&W PORQUE EU NÃO TINHA CONDIÇÕES PRA DAR CONTA DO NTO SOZINHO. CHEGA DE BLABLA E VAMOS LÁ!! [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] DOWNLOAD [+] CREDITOS [+] NOVIDADES & CARACTERISTICAS [+] ERROS E BUGS [+] PRINTS DO SERVER [+] Downloads Servidor Naruto B&W: Clique Aqui Client(descompilado): Clique Aqui [+] Creditos - Madara Rinnegan (servidor base) - [ADM] Johnata Editar Praticamente Todo o Servidor - Eu Por umas Besteiras q eu Coloquei e Por Postar GOSTOU DO SERVIDOR? DA UM REP++
  5. Gran Castle Event (8.54+)

    koyotestark reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    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: local function atk(cid) doSendDistanceShoot(pos5, pos6, 3) doSendDistanceShoot(pos7, pos8, 3) end local function atkself(cid) doSendDistanceShoot(pos9, selfpos, 3) doSendDistanceShoot(pos10, selfpos, 3) doSendDistanceShoot(pos11, selfpos, 3) doSendDistanceShoot(pos12, selfpos, 3) doSendDistanceShoot(pos13, selfpos, 3) doSendDistanceShoot(pos14, selfpos, 3) doSendDistanceShoot(pos15, selfpos, 3) doSendDistanceShoot(pos16, selfpos, 3) end local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_DAMAGE, -500, -7000, -300, -9000, 200, 200, 100, 400) --- formula de dano que tira o ataque da gran tower local area = createCombatArea(AREA_TOWER) setCombatArea(combat, area) function onCastSpell(cid, var) selfpos = getCreaturePosition(cid) pos1 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos2 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos3 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos4 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos5 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos6 = {x=getCreaturePosition(cid).x - 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos7 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y - 2, z=getCreaturePosition(cid).z} pos8 = {x=getCreaturePosition(cid).x + 2, y=getCreaturePosition(cid).y + 2, z=getCreaturePosition(cid).z} pos9 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos10 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos11 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y + 1, z=getCreaturePosition(cid).z} pos12 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos13 = {x=getCreaturePosition(cid).x+ 1, y=getCreaturePosition(cid).y, z=getCreaturePosition(cid).z} pos14 = {x=getCreaturePosition(cid).x - 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos15 = {x=getCreaturePosition(cid).x, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} pos16 = {x=getCreaturePosition(cid).x + 1, y=getCreaturePosition(cid).y - 1, z=getCreaturePosition(cid).z} doSendDistanceShoot(pos1, pos2, 3) doSendDistanceShoot(pos3, pos4, 3) addEvent(atkself, 350) addEvent(atk, 350) return doCombat(cid, combat, var) end Feito isso vá em spells\lib e no seu arquivo spells.lua adicione a seguinte area: AREA_TOWER = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1} } Agora nós vamos criar a talkaction que vai te permitir ligar o evento a hora que vc quiser. Vá em data\talkactions\talkactions.xml e adicione a seguinte linha: <talkaction hide="yes" words="/grantower" access="5" event="script" value="cleargrantower.lua"/> e em talkactions\scripts adicione o arquivo cleargrantower.lua com o seguinte conteúdo dentro: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local t = string.explode(param, " ") if (tonumber(t[1]) == 1) then doPrepareGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 0) then doCloseGranTower() doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 2) then print(getGlobalStorageValue(GRANTOWER.SAVELASTWINNER)) doSendMagicEffect(getCreaturePosition(cid), 14) elseif (tonumber(t[1]) == 3) then print(getGlobalStorageValue(GRANTOWER.SAVEWINNERGUILDID)) doSendMagicEffect(getCreaturePosition(cid), 14) end return true end Agora vá em data\creaturescripts\scripts\login.lua e adicione essas linhas antes do ultimo return true: -----------GRAN CASTLE ----------- registerCreatureEvent(cid, "Gran Tower") registerCreatureEvent(cid, "Gran Aura") registerCreatureEvent(cid, "Gran Aura Stats") registerCreatureEvent(cid, "Gran Aura Logout") registerCreatureEvent(cid, "Gran Tower Target") Por último eu acho que eu usei uma das funções da minha lib nesse script, então se der qualquer erro eu recomendo que vcs instalem ela antes de me mandar o print do erro do servidor haha. (Pra instalar é só criar um arquivo em data.lib e coloca aquilo dentro, veja o tópico no meu perfil) Eu testei o script e tá funcionando perfeitamente, a única coisa que não consegui testar foi as guilds e como fica a aura qnd alguém da guild ganha mas acho que vcs podem fazer esse trabalhinho de testar pra mim... Pra finalizar gostaria de dizer que um membro do fórum pagou por esse script e ele não estava funcionando, não comprem scripts, venham ao fórum e peçam por eles. Que fique de lição. Todas as configurações são feitas pelo arquivo 046- Gran Aura que está na LIB (exceto as coisas relacionadas aos monstros/spells que eles tiram) mas está tudo bem explicadinho nos scripts e acho que vocês já sabem editar um monstro, não é mesmo? haha Espero que façam bom proveito, pretendo lançar uma versão 1.0 em breve juntamente com a versão 1.0 do Magnus Challenger. Fiquem ligados! e claro, se você gostou não faz mal clicar em "Gostei". Abraços do lobo. NOTA FINAL: Sei que a maioria dos caras que queriam esse script queriam pra servers 8.4 porém a forma de fazer a barreira ter essa modificação na outfit qnd estiver quebrando é só por statschange. É só modificar a source e adicionar a function onStatsChange do creaturescripts que vai pegar no seu server 8.4. Já vi server 7.6 com statschange então não creio que seja algo dificil.
  6. [C++] Attack Speed

    koyotestark reagiu a Emersonssss por uma resposta no tópico

    1 ponto
    Salve Galera, olhando em minhas libs achei um script muito bom !! Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então .... Segue a Formula na source que faz essa magica : Em Player.cpp Procure : uint32_t Player::getAttackSpeed() const Mude Atualize para esse função : uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; } } Explicando : Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros. Simples e Facil ! Creditos ? Emerson Henrique
  7. 1 ponto
    Boa Noite , Boa Tarde ou Bom Dia TK's não sei a hora que vocês vão ver o Tópico Estava com meu Projeto do "Pokemon H" Fiz várias Ediçoes no Servidor Que Baixei aqui no Tibia King Mesmo e vim disponibilizá-los para vocês. Então bora ao que interessa né? • Menu: ├ Informações; ├ Edições; ├ Erros; ├ Prints; ├ Mapa ├ Download; ├ Atualização; ├ Utilitários; └ Créditos. • Informações Básicas • • Edições / Ajustes • • Erros do Servidor • • Prints• • MAPA • • Downloads • Cliente * MediaFire e Scan Servidor * MediaFire e Scan • Download Atualização 2.0 • Download: https://www.mediafire.com/?ik211gku2hdqz2t Scan : • Download Atualização 3.0 • 2016 OBS: NÃO TERÁ MAIS EDIÇÕES. • Utilitários • Remeres que usei pra editar: AQUI • Créditos • Brun Por Criar o Servidor Slicer Por Editar o Servidor Mulurka (pelas out) Stylo pelo tuto do ícone system noninhu por ajudar em alguns spells tem 2 caras tbm eu eskeci o nome deles agora que ajudaram 1 com as insignias na barra de skill e o outrio pelas scripts da liga pokemon dandanrvb pelas scripts do icone system erondino por algumas caves ih é só bjundão a all Vudi (Eu) Por editar o resto do servidor e trazer as novidades Tioj Pelas edições e Por fazer eu copiar a organização do tópico dele kk obg Kuuhaku pela cave dos geot . Held Itens By Gabriel Sales Gabriel Sales AnnaFeeh pelo script do ditto system pxg Obs: Se Está faltando algum crédito me avise pra mim colocar ( Não sei se está faltando algum) Obs: Qualquer Outra Duvida Estarei de Suporte no Tópico Obs: SENHA GOD/GOD OBS : Se Pegar o Servidor e Postar em Outro Fórum sem as minhas permissão vou pedir para o dono do forum ou site retirar o conteúdo . (Esse Conteúdo é exclusivo do TibiaKing obrigado) Se ajudei Já sabe né
  8. Anel de Sauron

    Jeff Delay reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    Fala galera do TK, criei esse anelzinho pra servers que procuram inovar.. bom, oque ele faz?? Simples, ele torna o usuário invisível. aff, mas já existe o stealth ring que faz isso! Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver. que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk Vou chamar aqui de versão 1 e 2 respectivamente. OBS: ISSO É EM MOVEMENTS! 1ª versão (sem sangue mas que tira 3% de vida por segundo): local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end 2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel): local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito: <item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas: <movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando: Na primeira versão vc pode alterar as seguintes coisas que estão em colorido: local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos em vermelho é o tempo que dura a invisibilidade... -1 é infinito em azul é a porcentagem de vida que perde por tempo em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3% Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition: local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel) em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida) em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha
  9. New Library v. 1.2

    Underewar reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal) Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro: Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório. Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20) Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros. Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir) Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu. Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira. Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS. EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida. EDIT 2: Duas novas funções adicionas, espero que gostem! EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
  10. Taunt + Channelling

    Hazardx reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    Fala galera, vou mostrar agora como usar o novo sistema de cast imbutido na New Lib, é bem simples: Pegarei como exemplo a spell Taunt, aqui está o código dela: 1- Pra adicionar o sistema de channelling nessa spell eu preciso inicialmente passar todas as funções dela pra um addEvent, ficando assim: 2- Agora pro segundo evento acontecer eu preciso de um time, que se encontra ali antes do return true e que em nenhum momento eu disse oque era. Agora que entra a função onCastChannel(uid, target, delay, effect, key) mas note que essa função requer um delay próprio, um efeito e uma id de storage então vou precisar alterar o config, ficando + ou - assim: 3- Agora note que temos uma key onde ficará salvo se o channelling foi realizado com sucesso, mas como saber? Simples, o valor dessa storage ficará 11 caso ele tenha sido realizado completamente com sucesso, então o passo final é colocar um checador no addEvent para o valor do Storage antes de soltar a spell, afinal, a spell só deverá sair se o channelling foi feito com sucesso. 4- A spell está perfeita e funcional agora, só q se vc for soltar vc vai perceber que o exhaust dela é bem menor que o tempo de channelling então o cara pode soltar ela diversas vezes só carregando e soltando. Pra controlar melhor isso já que se trata de uma spell praticamente mortal num x1 contra um knight nós usaremos um sistema de cooldown por storage, ficando assim: Espero que vocês tenham aprendido como usar o cast System, agora um pequeno gif do funcionamento dele:
  11. 1 ponto
    Fala galera, tava navegando aqui no meu PC e encontrei um Arquivo .txt, com links para downloads de alguns servidores. E no mesmo achei o DarkXPoke. A DxP(DarkXPoke) era um Projeto que o Smix e sua Equipe vinha desenvolvendo. O Servidor contem sistemas variados da PxG. Um Cliente excepcional e muitas outras coisas. (Não sei se já possui esse servidor no TK, mas..) Bom, sobre o servidor, contem esses sistemas que eu saiba. TV Cam System Duel System Icon System igual a PxG. Sistema de Shinys (se não me engano, possui level system, não lembro). AutoLoot Igual PxG Poke Flutes Nick System Addon System Novos Remakes Shiny Ditto Smeagle System Clan System Golden Arena Cla's Cyber Wolrd Quest Rocket and Police Atualizações postadas por Smix: Por enquanto, só me lembro disso, qualquer coisa, se eu me lembrar, edito o tópico. UHEUEH Como qualquer outro Servidor, o DxP também tem seus "bug's". Eu baixei ele aqui pra ver como tava e tal, dai o Servidor tava todo lagado, até o cliente passava em media 7 segundos para executar meu comando. Vídeo demonstrando o servidor feito por Smix e Team. https://www.youtube.com/watch?v=LRZFUFCwIMA Download: DarkXPoke Serve. Créditos: Todos ao Smix e Team. OBG: vá em data/wolrd tem uma parta la com o nome, mapa antigo, ou backup, basta copiar e jogar na world, e mudar no config.lua.
  12. Lib 000-Const

    Maniaco reagiu a Caronte por uma resposta no tópico

    1 ponto
    Olá pessoal, venho mais uma vez trazer um tutorial simples, e tentar explicar tudo claramente, esse tutorial pode ficar grande dependendo do desenrolar dele, pois é um pack de tutoriais, então vou usar spoilers para ajudar na formatação do tópico. Nota: as informações usadas abaixo, podem ser tanto usadas com o nome, quanto com o número, e podem ser encontradas na pasta lib no arquivo 000-const https://pastebin.com/0FfPcg7y line4 Coordenadas: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Explicando: doMoveCreature(cid, direction): Serve para mover tanto o player quanto o monstro. Combate: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Parâmetros de condição: Condições: Slots: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Participação: xWhiteWolf Bom, é só isso o tutorial pessoal, espero que tenham gostado, e o que prego nesses tutoriais é a essência da simplicidade, às vezes, uma coisa que parece ser boba para você, pode atormentar uma outra pessoa. Const_ani e Const_me: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Talktypes and message types: [title][/title] Tutoriais concluídos por ordem de formatação (podem ser alterados assim mesmo): Coordenadas, e suas direções. Combat (ainda há coisas a serem adicionadas). Slots. CONST_ME and CONST_ANI Os assuntos do tópico poderão se diminuídos ou aumentados de acordo com o desenrolar do tempo, gostaria de apoio, e não me incomodaria se alguém se propusesse fazer algum tutorial, eles serão supervisionados por mim e formatados por mim, para serem postados neste tópico. Esse tópico demorou e vai demorar muito para fazer cada tutorial, então eu não me importo com um obrigado e REP+, OBS.: Um obrigado vale bem mais do que um REP+
  13. Dat Editor [8.54~8.60]

    Allone reagiu a 3visan por uma resposta no tópico

    1 ponto
    Dat Editor (Tutorial Outfits) Olá galera vim hoje disponibilizar para você um dat editor que funciona nas seguintes versões, 8.54 e 8.60, algums não sabem para que serve ele de certo, o dat editor é uma forma rapida, de trocar suas sprites, e editar as funções dos items. Download Anexado: Link Direto Scan: aqui
  14. [UPDATE] NOVO BAIAK LERO! Bye Rogerio

    zero390 reagiu a RogerioOwns por uma resposta no tópico

    1 ponto
    - Baiak Lero tem a base do baiak ice, todos os bugs retirados. - Contem 4 novas quests (Lero Quest) cada item da 3% def de todos os danos. - Cidade free, Vip1, vip2, Reformulada. - Adicionado VIP 3. - Adicionado VIP Donate.Poder ser comprada pelo Lero Seller por [ 50kk ] - Adicionado Itens (LERO) no templo npc (Lero Seller) 2º melhores armas do jogo. - Acidionados Novos Scripts, calculo de kills, ant-magebomb etc. - Adicionado npc Ring Seller. - Adicionado Recarregar Soft/Firewalker apenas Clicando nelas. - Buero inicial Reformulado. - Não contem exit trainer. -2 Systema novos Task System e Guild frags onde a guild que tiver 100 kills ganha 5 honor points para comprar acesso a uma area so da guild - Novos Monsters Donates na cidade vip donate. -Algumas hunts sem teleports espalhadas no mapa tmb de Warlock Demon Medusa -Implementado 2 boss portas lvl 400 e 500 no templo -Nova Quest Boots Donate -Nova Quest Helmet of the Ancients -Boss Ghazbaram, Morgaroth, Ferumbras dao loot igual do global e tem alguns escondidos no mapa obs: nao dropa itens da quest lero nem donate -14 teleports free adicionados -8 teleports na city vip Free adicionados -City Donate -Tps Donate -Templo Free 4 Novas Quest -entre outras coisas Scan: https://www.virustotal.com/pt/file/07407095c5fd03da83e8d4fa0a32cdecb371b0878ad0d7ac9586bb254a1bb0f9/analysis/1399930023/ Dowload: http://www.4shared.com/rar/wcyOFbpqce/Baiak_Lero_2014.html? http://depositfiles.org/files/ghw7jmuyc
  15. (NEW) PH IP Changer [7.1~9.51]

    brenoesteves reagiu a Puncker por uma resposta no tópico

    1 ponto
    PH IP Changer [7.1 ~ 9.61] (Projeto descontinuado) O PH IP Changer é a mais nova ferramenta para você se conectar ao mundo dos OTServers, com ferramentas adicionais e um visual limpo, essa ferramenta é usada facilmente no seu dia-a-dia. Suporte Atualmente o PH IP Changer possui o suporte para multiplas versões, da versão 7.1 até a versão 9.61. Ferramentas Main - Simplesmente possui a função que todos os IP Changers tem (ou deveriam ter), permite a você informar os dados do servidor para poder se conectar em um Open Tibia server. Server List - Permite que você grave seus servidores favoritos em uma lista que você sempre terá acesso, e poderá utilizar outras funções em relação ao servidores salvos. Client Download - Permite ao usuário baixar diversas versões do tibia diretamente do PH IP Changer sem muito trabalho, os clients são baixados do site www.tibiaclient.com, por isso podem haver clients na lista que não estão no site ocasionando na falha do download. Configuration - Fornece algumas opções a mais para você poder melhorar o uso do aplicativo à sua escolha (ainda em desenvolvimento). Updater - Verifica toda vez que o aplicativo é aberto se há uma nova versão. Screenshoots Download SCAN PHIPChanger.zip
  16. Anti Divulgacao

    Placido reagiu a Gaonner por uma resposta no tópico

    1 ponto
    Bem,não vou dar explicações, esse código é da otland,e eu coloquei aqui no Tibiaking pra disposição. Pois to vendo sites vendendo esse code. Esse code impede que qualquer jogador fale uma frase com .servegame / .no-ip Vá em game.cpp e procure por: Em baixo você adiciona: Se você quiser adicionar mais de 2 tipos de servidores (.servegame;no-ip) Adicione(exemplo) : int(text.find("otglobal.com")) > 0) Ficando assim : -------------- Salve,Compile,e pronto,seu console anti divulgação está pronto. Créditos : - Summ - Criador - Gaonner - Trazer o Conteúdo
  17. [8.60] Veneris Server - War System

    Fabricio Soares reagiu a .HuRRiKaNe por uma resposta no tópico

    1 ponto
    Informações: Mapa 100% próprio Vip System com donates Teleports free / vip Tasks free / vip War system Site com shop vip / guild shop E mais! Imagens Servidor: Site: Download Server + Site: http://www.mediafire.com/download/p7052grn54vprvb/VENERIS.tar.gz Scan Server + Site: https://www.virustotal.com/pt/file/08d0278f73e9baf7d24a296ee13caa7589abbc9f6a83935c6ba6f0cd9b656163/analysis/1425447699/ Créditos: Veneris Team
  18. Capítulo 1 - Introdução ao C# e Visual Studio Vou começar a escrever e gravar tutoriais sobre C# para incentivar pessoas que tenham interesse em começar a programar, e esta foi a linguagem escolhida devido à facilidade principalmente da ferramenta que é utilizada para trabalharmos. Apenas para ressaltar que estes tutoriais começaram com teoria (escrito) e em seguida com a prática (vídeo aulas). Aos finais de semana, sempre que estiver disponível estarei ajudando com dúvidas pelo Skype (o que já faço com algumas pessoas). Antes de começarmos, peço que ao lerem os tutoriais e encher-me de perguntas, lembre-se que eu trabalho durante a semana e quando não puder responder, não é capricho e sim indisponibilidade. Então quando possíveis erros surgirem usem outros meios de conseguirem respostas, com isso você aprende a lidar com as situações do dia-a-dia. 1.1 – Introdução O C# é uma das linguagens disponíveis na Plataforma .NET que em conjunto com o Visual Studio que será nossa ferramenta de desenvolvimento, podemos criar várias aplicações do gênero, sejam elas para ambiente Windows ou para ambiente Web, como: biblioteca de classes (as famosas DLLs), páginas Web, aplicações para Desktop, Web Services, entre outros. Ao fim deste capítulo você terá o fundamento básico para começar a trabalhar com a linguagem C#: a Plataforma .NET, o Visual Studio, a introdução a uma programação elementar e os conceitos básico de como compilar e executar o seu programa. 1.2 – A Linguagem C# Com o C# podemos desenvolver diversos tipos de aplicativos, tais como: banco de dados, cliente-servidor, aplicativos tradicionais do Windows, além de componentes distribuídos, Web Services, Web Sites, entre outros. O C# é uma linguagem orientada a objetos, fortemente tipada¹, estável e versátil. Em conjunto com o Visual Studio, permite ao desenvolvedor um ganho de produtividade característico das ferramentas Microsoft. O Visual Studio conta com um depurador integrado, um editor de códigos avançado, designers de interface de usuários altamente funcionais, entre outras ferramentas que auxiliam na criação de aplicativos que serão executados no .NET Framework. Embora seja uma linguagem fácil de trabalhar, o C# é muito sofisticado. Pessoas que tenham conceitos básicos de C, C++ ou Java reconhecerão rapidamente detalhes de sua sintaxe e funcionamento. ¹ O termo "fortemente tipada" significa que todos os dados utilizados na programação precisam ter um tipo definido. 1.3 – Plataforma .NET A Plataforma .NET visa unificar o desenvolvimento e a execução de diferentes aplicativos e sistemas em uma única Plataforma, sejam eles para Windows, Web, Windows Store, Windows Phone, Windows Azure, etc. Qualquer código gerado por essa plataforma poderá ser interpretado em qualquer dispositivo ou equipamento que possua o Framework compatível. Por meio das soluções oferecidas por esta Plataforma, torna-se possível, acima de tudo, a integração de diferentes sistemas de forma fácil e ágil, gerando uma interoperabilidade entre as tecnologias existentes. As diferentes tecnologias que compõem a Plataforma .NET são chamadas, em conjunto, de .NET Framework. Ela é composta basicamente com as linguagens C# e Visual Basic, e dois componentes fundamentais, o Common Language Runtime (CLR) e o Framework Class Library (FCL). De forma simplificada, a plataforma .NET é composta pelos seguintes elementos: Visual Studio: Ferramenta para desenvolvimento de aplicações. Ele contém o compilador primário que gera o executável; Compilador primário: Transforma o programa que fizemos em linguagem de alto nível (C#, C++, VB.Net) em uma linguagem intermediária (MSIL); Bibliotecas de classes: Conjunto de DLLs contendo milhares de recursos disponíveis para utilizarmos nas nossas aplicações; Compilador secundário: Lê as instruções contidas no arquivo MSIL e as traduz para a linguagem do microprocessador (Assembly). A ideia é que o desenvolvedor escreva o código uma vez, independente do sistema ou dispositivo que irá utilizá-lo. O programa é escrito em qualquer uma das mais de trinta linguagens .NET disponíveis para a plataforma, o código fonte gerado é então compilado para um código intermediário, em uma linguagem chamada MSIL (Microsoft Intermediate Language), gerando um arquivo de extensão DLL ou EXE (outra extensão .NET), conforme o template de projeto escolhido. Esse arquivo então, quando executado, deverá ser interpretado pela CLR compatível com o sistema operacional utilizado. Os itens 1.4 e 1.5 seriam a introdução à Interface do Visual Studio, então decidi deixar para o Capítulo 2, pois vou fazer em vídeo aula, para facilitar o entendimento da ferramenta. Espero que gostem deste primeiro capítulo, embora seja apenas a teoria irá ajudar em possíveis dúvidas que surgirão ou até pessoas que já conhecem a linguagem e tem dúvidas em certos detalhes. Tomei-me como base uma apostila que tenho, porém foi tudo escrito por mim, nada copiado, apenas interpretado. Estou aberto à dicas, sugestões e críticas.
  19. 1 ponto
    Saudações queridos amigos do TK! Hoje venho trazer um tutorial mais básico porém muito útil. Vejo que algumas pessoas tem vontade de começar a vida em sprites, porém, ficam meio perdidos a como começar, veem em alguns tópicos agente falar sobre Hue, Dithering, AA e pensam "WTF?!". Então venho aqui hoje tentar explicar um pouco melhor sobre alguns conceitos e programas utilizados para tal ação. Vamos lá!: Quero fazer sprites, por onde eu começo?!?! Pixel art é sobre os pixels – simples assim. Esses tipos compartilham um ponto comum: Ter certeza que o seu foco está nos pixels. Comece devagar – Quanto mais larga a imagem que você está tentando fazer, mais tempo e trabalho levará pra completá-la. Não faça isso, use um canvas size (largura x altura) pequeno. Um pixel art pode transmitir uma série de informações pelo seu tamanho, você ficará surpreso com o pouco espaço que você precisa se você controlar os pixels corretamente. Use uma paleta limitada - Se você não pode fazer um bom sprite com 4 cores, usar 40 não vai ajudar. Usar uma paleta pequena é especialmente bom para iniciantes porque te força a ter foco na posição dos pixels e da relação entre grupos de pixels. A paleta original de 4 cores do GameBoy é uma boa escolha para iniciantes, porque você só precisa se preocupar com o valor, e não tons ou saturação. Programas Existe uma gama de bons programas por aí para pixel art, muitos desses são gratuitos. Eu uso Grafx2 porque é gratis, mas GraphicsGale, Pro Motion, Photoshop, Pixen e MS Paint são todos boas escolhas. Alguns são mais amigáveis que outros, por isso que eu escolhi algo com atalhos de teclado como grafx2, o que me salvou de muitas viagens para a barra de ferramentas (e fez muito fácil o manuseio de paletas) Tipo de arquivo Um erro comum que os novos pixel artistas cometem é salvar suas artes como JPEG/JPG. Esse tipo de arquivo pode ser legal para outros tipos de imagem, ele causa compressão, o que destrói a qualidade de uma peça de pixel art. Nunca salve como JPG. Salve como PNG ou GIF. Seja cuidadoso assim mesmo, pois alguns programas (como MS Paint) não suportam propriamente o formato GIF, e vão arruinar sua imagem. Nessas instâncias, você vai precisar de um conversor de arquivo (Como o Giffy) se você quiser salvar sua imagem como GIF. Mas como eu começo a imagem? É completamente pessoal. Alguns artistas preferem criar o lineart primeiro, e depois vão adicionando cores: Outros artistas preferem a definição das formas principais com um pincel grosso, e então continuam refinando a imagem até que ela chegue a um nível certo nível: Ambos os métodos são legais, todos dependem de como você está confortável, ou as especificidades do projeto. O Linework é um bom método se você está traçando uma imagem digitalizada (como foi o caso do exemplo do monstro do mar acima). Se você está começando a imagem no seu programa, e não é um sprite pequeno, definir as formas com um pincel grosso pode ser mais útil. Ok, mas o que diabos significa AA, Hue (br?) e os outros termos que são usados? Ok, acomodem-se em suas cadeiras (ou sofás, para aqueles que gostam de utilizar o computador na sala) e vamos nessa: Termos que devemos, ou melhor, precisamos saber! Anti-aliasing (AA): Anti-aliasing é o método de fazer bordas acentuadas parecerem suaves. Você deve estar familiarizado com anti-aliasing, porque um monte de programas e ferramentas faz isso automaticamente. Quando estamos falando sobre pixel art, de qualquer maneira, anti-aliasing significa anti-aliasing MANUAL. Manual AA significa suavizar as áreas acentuadas por posicionamento manual de pixels de uma diferente cor para facilitar a transição. Aqui vai um exemplo: Acima você vê a mesma imagem sem AA na esquerda e com AA, na direita. Há várias armadilhas frequentemente encontradas ao aplicar anti-aliasing, que são discutidas na seção "Coisas para evitar”. Dithering: O Dithering consiste de diferentes padrões de pixels. É tipicamente usado para facilitar a transição entre duas cores, sem adição de uma nova cor à paleta. É também usado para criação de textura. Nos dias de monitores CRT, o dithering foi particularmente útil porque a tela borrava a área pontilhada e obscurecia o padrão. Agora que monitores LC nítidos é a norma, os padrões não são mais fáceis de esconder, o que significa que o dithering não é tão versátil como era antes. Mesmo assim, o dithering ainda é usado. A forma mais comum de dithering que você vê é o 50/50 pontilhado, conhecido como 50% de dithering ou o padrão pontilhado. Como mostrado no exemplo acima, você pode criar vários outros padrões para amortecer ainda mais entre uma cor e um padrão 50% pontilhado. Esses padrões são mais fáceis de detectar do que um 50% pontilhado, por isso tenha cuidado! O Dithering estilizado é outra técnica, e é caracterizada pela adição de pequenos formatos no padrão. O Dithering interlaçado permite que duas regiões pontilhadas se interlacem. É chamado de dithering interlaçado, pois as duas regiões pontilhadas se interlaçam nas bordas. Esse tipo de dithering permite a você misturar dois pontilhados para formar uma gradiente. O Dithering aleatório é uma versão menos comum do dithering, e não é geralmente recomendado, pois adiciona ruídos de pixel à imagem. Embora tenha algum uso em doses muito pequenas, o dithering aleatório é algo que muitas vezes você vai querer evitar. Tão útil como o dithering é, muitas vezes é mal utilizado por artistas inexperientes. O Dithering ruim será discutido mais adiante na seção “Coisas para evitar.” Grupos de pixels: O conjunto de pixels é feito a partir de pixels individuais. No entanto, um único pixel é na maioria das vezes quase inútil e sem sentido se não tocar em pixels da mesma cor. O pixel artista está preocupado com as formas que ocorrem quando pixels de cores similares tocam a si mesmos e convém uma forma opaca, plana. A maioria dos triunfos e derrotas possíveis no pixel art ocorrem naquele momento exato em que o artista faz um aglomerado de pixels. -Helm Nós falamos muito sobre pixels individuais, mais estes são raramente pixels independentes. Um pixel sozinho, isolado, é um pontinho numa tela – é um ruído. Mas pixels não são normalmente encontrados sozinhos, ao invés disso, eles são encontrados fazendo parte de grupos de pixels – grupos de pixels da mesma cor que juntos formam um campo de cor sólida. Enquanto o pixel isolado é nosso bloco básico de construção e a menor unidade, os grupos de pixels são a unidade a qual muitas de nossas decisões sobre posicionamento de pixels se basearão. E enquanto é importante perceber que pixels individuais não são independentes, também é importante perceber que grupos de pixels não são independentes. Como peças de um quebra-cabeça, as bordas de um grupo de pixels determinam o formato do grupo de pixels que ele faz fronteira. Aqui vai um exemplo de como interferir no formato de um grupo de pixels pode causar efeitos drásticos nos seus grupos vizinhos: Enquanto pixels solitários são vistos como ruídos, um pixel solitário de uma cor diferente do campo que toca, se usado como AA, pode ser visto como parte do grupo, e é, portanto, a solução dos problemas: Bom, vou finalizar o tutorial aqui, já ficou bem grande haha Espero que eu tenho ajudado vocês a enter um pouco mais sobre Sprites, e ter dado a alguns, um norte para começar Vamos juntos mobilizar esta seção que ta meio down ultimamente haha Até a próxima pessoal! Créditos: Pixelaria (Tutorial) Thayam (Trazê-lo ao TK) Way20 (por indica-lo quando comecei minha jornada)
  20. [CreatureScrips] Pvp Channel, simples

    bielzk01 reagiu a Skyforever por uma resposta no tópico

    1 ponto
    Créditos Lpz e Skyforever Primeiramente vá em /data/creaturescripts/scripts cria um arquivo pvp channel e adiciona isso dentro: depois em creaturescripts.xml adicione essa tag: <event type="kill" name="PvpChannel" event="script" value="pvp channel.lua"/> em login.lua essa linha: registerCreatureEvent(cid, "PvpChannel") em data/xml/channels adicione essa tag: <channel id="10" name="PVP" logged="yes" active="0"/>
  21. (Resolvido)[AJUDA]Script npc Arnold

    maleskinho reagiu a Wakon por uma resposta no tópico

    1 ponto
    Tenta esse, se tiver algo errado me fala que eu tento modificar aqui! local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end if isInArray({"fuck", "idiot", "asshole", "ass", "fag", "stupid", "tyrant", "shit", "lunatic"}, msg) then npcHandler:say("Take this!", cid) doAddCondition(cid, 3) npcHandler:releaseFocus(cid) npcHandler:resetNpc(cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  22. Alguem Poderia me ajudar? Ficar Online

    Mirtin La reagiu a Wakon por uma resposta no tópico

    1 ponto
    Se você alterou o IP do client não é necessario o uso de ip changer, mais você tem que passar seu client modificado para quem for jogar! Sobre as portas, como o brunds disse você precisa abrir as portas do firewall e do modem, caso tenha roteador e modem, abra as portas do roteador!
  23. Alguem Poderia me ajudar? Ficar Online

    Mirtin La reagiu a LeoTK por uma resposta no tópico

    1 ponto
    bom eu também tenho internet compartilhada e mesmo assim consegui deixar online normalmente pelo que entendi você abriu as portas 7171-7172 mais pelo visto só abriu no firewall do windows você abriu essas portas no moldem também se não vai ter que abrir pra deixar online. Na parte do client o vapus as veses da uma bugada dependendo da configuração que você usar poriso recomendo hex editor para mudar o ip do client se não sabe mecher ou nem oque é procure no google ... hex editor tibiaking < que você acha tutoriais para mecher nele e mudar o ip usando ele. Bom é isso se tiver dúvidas ou problemas comenta que eu vejo no que posso ajudar
  24. 1 ponto
    Bom dia. Bom, criei um script onde você configura os itens que serão vendidos no início e o preço será sempre por diamantes (configura o item que será usado como moeda). Porém, não é OpenTrade e sim dinâmico... pois para ser opentrade creio que será preciso editar algo nas sources do servidor. Enfim... Crie o seu npc com o nome desejado e a extensão (XML) na pasta npcs, como por exemplo: "Jack Stone.xml" e adicione o código dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="Jack Stone" script="jack_stone.lua" walkinterval="0" floorchange="0"> <health now="0" max="0"/> <look type="274" corpse="2212"/> <parameters> <parameter key="message_greet" value=" Seja bem-vindo{ |PLAYERNAME|}!"/> </parameters> </npc> Agora abra a pasta scripts e crie um arquivo com o nome "jack_stone.lua" e adicione o código abaixo dentro: Configure à gosto e diga se é isto mesmo que precisas. Boa sorte.
  25. 1 ponto
    qual o erro ? tenta assim vai em data/actions/scripts/quest e copia um arquivo.lua renomeia pra teste.lua e add isso. add isso actions.xml add isso em vermelho foi o atalho diferente pode ser que tem um arquivo chamado boost stone ai vc se confundiu
  26. 1 ponto
    vc colocou os scripts ao clicar no bau em actions ? vai no seu RME EDITOR coloca um baú e em propiedade nele você coloca Unique ID 1721 fecha e salva. Agora vai em data/actions/scripts e copia um arquivo.lua renomeia pra boost stone.lua e add isso. em actions.xml coloca isso se possível pode me marca como Melhor resposta vlw lembrando em doPlayerAddItem(cid,12415,1) 12415 é ID do seu item no caso a stone sua. 1 é a quatidade de stone ele vai pegar, no caso 1 3026 é a storage pra ele não clicar novamente no bau doPlayerSendTextMessage(cid,22,"Voce ja pegou a Boost Stone") CASO ELE TIVER PEGO A STONE JÁ AI VC COLOCA OUTRA MSG SE QUISER.
  27. O tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "Tibia King → Atendimento Geral" Para: "OTServ → Suporte OTServ → Suporte de Scripts"
  28. 1 ponto
    a v2 ja saiu a muito tempo so que no falecido tibiaking, nao sei oque aconteceu com ele, vou tenta procurar em alguma conta minha de hospedagem pra ver se consigo recuperar até.
  29. 1 ponto
    Tutorial básico sobre cores. Vejo no fórum e em outros locais, está dúvida sobre, como e que cores devo utilizar, tais motivos me levaram a passar o que aprendi sobre as cores ultimamente Neste tutorial, vou explicar como funcionam as cores análogas, a monocromia, como usar ambas para nos spriters, e algumas técnicas de montagem de paleta. Este também, irá nos ajudar na Pintura Básica e Antialiasing (AA). Então vamos lá ; Cores Análogas e complementares: Cores análogas são cores que ficam lado a lado no disco de cores, e são tidas como análogas por dividirem a mesma cor base. Por exemplo, na imagem a baixo podemos ver o azul do meio ao seu lado duas cores análogas: Para que essa ideia serve no spriting? As cores análogas irão dar uniformidade e equilíbrio no sprite e também irá recheá-lo com uma elegância, será agradável ao nossos olhos de ver, cores desse tipo são muito usadas no nosso cotidiano, tornando o olhar mais agradável devido a calma que a uniformidade causa, não sendo nada diferente nos sprites. Podemos também utilizar as cores complementares para equilibrar o sprite, ou na montagem de paleta para obter uma nova pigmentação que pode atingir aquela tonalidade que você quer! Já as cores complementares são as cores opostas no diâmetro do circulo cromático, são sempre duas cores que se contrastam muito. Em uma escala monocromática para que as cores fiquem tanto análogas como complementares precisam estar sempre no mesmo nível saturação. Monocromia: A monocromia é bem simples de entender, é simplesmente a adição de preto ou branco em uma única tonalidade de cor sem alterar a cor base. Um bom exemplo é um degrade de escala de cinza. Segue exemplo a imagem a baixo: Na primeira da esquerda para direita uma escala de cinza simples feitas apenas reduzindo o valor luminoso dela (adição de preto/branco) Já na segunda a mesma escala com a cor primária vermelho, terceira imagem apenas com adição de branco, e na quarta apenas adição de preto. A grande maioria de nós spriters começou sombreando os sprites assim, fazendo com que o sprite fique morto e frio. Ao decorrer de treinos, novos trabalhos e muita prática, a percepção para adicionar novos pigmentos para dar o volume, sombra, contraste e os reflexos, desejados, irão aos poucos evoluindo de forma natural. Adivinha como é feito é na teoria? Aha! Ai estão as cores análogas! Mas como assim, as cores análogas não funcionam só com cores da mesma saturação? Sim realmente, mas duas escalas monocromáticas, uma para cada cor, teremos 2 pigmentações que se uniformizarão na imagem. É ai que está o segredo dos sprites com as cores análogas, não, logicamente, esta teoria é para ser seguida a, mas seu conceito é sim importante na criação da paleta, podendo ser complementada com cores terciárias em outra escala monocromática. Como por exemplo esse círculo cromático a baixo. Técnicas simples para extração de cor para montagem de paleta. De fato algo muito simples que muito provavelmente todos sabem, mas para esclarecer, e simplificar, vou mostrar métodos simples, fáceis e eficazes para mesclar cores. Vou utilizar o programa básico que todos nós usamos, é uma técnica muito fácil e funciona com qualquer programa que tenha pincéis com AA automático; Inicialmente separe as cores bases que deseja usar, e selecione o pincel, faça uma mancha com a cor desejada, um circulo um quadrado de um tamanho razoável. Agora seleciona uma nova cor, a qual você deseja misturar, e simplesmente passe o pincel por cima da cor base. Feito isso, aproxime a imagem e note que o AA automático do programa mesclou as cores, gerando um meio termo entre as duas, você pode utilizar esse meio termo em uma nova mistura para pegar um pigmento ainda mais parecido com a cor caso não esteja o suficiente. Pronto, você já sabe como fazer para mesclar agora só utilizar sua criatividade para aperfeiçoar sua paleta, buscando cada vez mais cores que irão harmonizar ou contrastar causando um efeito lindo no sprite É isso ai meus amigos, chegamos ao fim de mais um tutorial simples, porém de extrema importância para aqueles que queiram se aventurar conosco haha Espero ter ajudado alguém com este tutorial, e espero ver os resultados deste tuto aplicados nos show off's da vida por aqui haha Grande abraço e até o próximo tutorial! Créditos: Weto (tutorial) Thayam (compartilhamento no fórum)
  30. Multi Elemental Arrow e Shield

    dymck reagiu a Sekk por uma resposta no tópico

    1 ponto
    Olá galera, esses dias ciriei um tópico pedindo um script para mudar o elemento das armas, no caso, o arrow fazia parte. Bom, não achei aqui no fórum um tópico sobre isso, e ninguém postou algum script para que eu pudesse testar. Sendo assim, eu procurei mais na Internet, e achei um tutorial Bom, vamos ao que interessa: Multi Elemental Arrow Vá em data/actions/actions.xml e adicione as seguintes tags: Ainda em actions, abra a pasta scripts e crie um arquivo chamado transformarrow.lua e adicione o seguinte código: Pronto, agora você só precisa tirar os seguintes items do loot dos monsters, e mudar seus nomes no items.xml. ID dos arrow fire, energy, ice e earth: Multi Elemental Shield: Vá em data/actions/actions.xml e adicione as seguintes tags: Pronto, agora você só precisa tirar os seguintes items do loot dos monsters, e mudar seus nomes no items.xml. ID dos shields normal, fire, energy, earth e ice: Créditos Rozinx Team -- Por criar o script e usá-lo em seus servidores [T][R][O][N] -- De outro fórum, por postar o script para quem quer o mesmo jvcasarin(EU) -- Por compartilhar com vocês do TK o script
  31. [APOSTILAS] Cores e sua parte Teórica - Spriting

    nerdz reagiu a Thayam por uma resposta no tópico

    1 ponto
    Bom dia amigos do TK! Estava estudando um pouco na internet, quando me deparei com duas apostilas muito interessantes, e como estou a mil por hora em relação ao aprendizado e ao compartilhamento do conhecimento, resolvi trazê-las para cá, para que aqueles que realmente gostem de mexer com sprites possam entender um pouco mais da parte teórica sobre as cores. A Primeira é a respeito das cores em logomarcas e afins: Apostila sobre Cores E a outra é sobre a tão famosa Teoria das Cores: Teoria das Cores As apostilas não são minhas, como disse aqui, estava estudando e acabei achando interessante compartilhá-las com vocês Acredito que elas também tenham muita utilidade para os Designers do fórum haha Deixo aqui também três frases que gosto muito, apenas para reflexão: "Sem a teoria, a prática nada mais é que a rotina dada pelo hábito" - Louis Pasteur "A teoria sem a prática vira 'verbalismo', assim como a prática sem a teoria vira ativismo. No entanto, quando se une a prática a teoria cria-se a práxis, a ação criado e modificadora da realidade" - Paulo Freire "Se os fatos não se encaixam na teoria, modifique os fatos " - Albert Einstein É isso ai, espero que usufruam deste conteúdo e se aprimorem em seus trabalhos Até a próxima pessoal!
  32. Lista completa de Magic Effects e Shoot Type

    ericles reagiu a Caronte por uma resposta no tópico

    1 ponto
    Fonte: http://www.tibiaking.com/forum/topic/49095-lib-000-const/ Eu mesmo... CONST_ME: CONST_ME_DRAWBLOOD = 0 CONST_ME_LOSEENERGY = 1 CONST_ME_POFF = 2 CONST_ME_BLOCKHIT = 3 CONST_ME_EXPLOSIONAREA = 4 CONST_ME_EXPLOSIONHIT = 5 CONST_ME_FIREAREA = 6 CONST_ME_YELLOW_RINGS = 7 CONST_ME_GREEN_RINGS = 8 CONST_ME_HITAREA = 9 CONST_ME_TELEPORT = 10 CONST_ME_ENERGYHIT = 11 CONST_ME_MAGIC_BLUE = 12 CONST_ME_MAGIC_RED = 13 CONST_ME_MAGIC_GREEN = 14 CONST_ME_HITBYFIRE = 15 CONST_ME_HITBYPOISON = 16 CONST_ME_MORTAREA = 17 CONST_ME_SOUND_GREEN = 18 CONST_ME_SOUND_RED = 19 CONST_ME_POISONAREA = 20 CONST_ME_SOUND_YELLOW = 21 CONST_ME_SOUND_PURPLE = 22 CONST_ME_SOUND_BLUE = 23 CONST_ME_SOUND_WHITE = 24 CONST_ME_BUBBLES = 25 CONST_ME_CRAPS = 26 CONST_ME_GIFT_WRAPS = 27 CONST_ME_FIREWORK_YELLOW = 28 CONST_ME_FIREWORK_RED = 29 CONST_ME_FIREWORK_BLUE = 30 CONST_ME_STUN = 31 CONST_ME_SLEEP = 32 CONST_ME_WATERCREATURE = 33 CONST_ME_GROUNDSHAKER = 34 CONST_ME_HEARTS = 35 CONST_ME_FIREATTACK = 36 CONST_ME_ENERGYAREA = 37 CONST_ME_SMALLCLOUDS = 38 CONST_ME_HOLYDAMAGE = 39 CONST_ME_BIGCLOUDS = 40 (OBS: são as nuvens do exevo gran mas vis) CONST_ME_ICEAREA = 41 CONST_ME_ICETORNADO = 42 CONST_ME_ICEATTACK = 43 CONST_ME_STONES = 44 CONST_ME_SMALLPLANTS = 45 CONST_ME_CARNIPHILA = 46 CONST_ME_PURPLEENERGY = 47 CONST_ME_YELLOWENERGY = 48 CONST_ME_HOLYAREA = 49 CONST_ME_BIGPLANTS = 50 (é quase igual, só que cresce mais, não consegui gif) CONST_ME_CAKE = 51 CONST_ME_GIANTICE = 52 CONST_ME_WATERSPLASH = 53 CONST_ME_PLANTATTACK = 54 CONST_ME_TUTORIALARROW = 55 CONST_ME_TUTORIALSQUARE = 56 CONST_ME_MIRRORHORIZONTAL = 57 CONST_ME_MIRRORVERTICAL = 58 CONST_ME_SKULLHORIZONTAL = 59 CONST_ME_SKULLVERTICAL = 60 CONST_ME_ASSASSIN = 61 CONST_ME_STEPSHORIZONTAL = 62 (Ignorado) CONST_ME_BLOODYSTEPS = 63 (Ignorado) CONST_ME_STEPSVERTICAL = 64 (Ignorado) CONST_ME_YALAHARIGHOST = 65 CONST_ME_BATS = 66 CONST_ME_SMOKE = 67 CONST_ME_INSECTS = 68 CONST_ME_NONE = 255 CONST_ME_LAST = CONST_ME_INSECTS Depois eu posto o CONST_ANI
  33. 1 ponto
    Serv lixo os atake dos poke as velosidade n esta arumada isso n deve ser chamado de servido
  34. [TUTO] Configurando config.lua

    gloster122 reagiu a Huziwara por uma resposta no tópico

    1 ponto
    Olá galerinha TKbianos, Eu postei aqui, a tradução (as funções) que estão no config.lua, vejo muita pessoa com dúvidas que acha que precisa fazer script, mas naverdade essas dúvidas estão na cara de vocês, bem no config.lua! (Botei os necessários) Config.lua : accountManager = "no" (Utilização de account manager.) newPlayerChooseVoc = "yes" (Se o player pode escolher a vocação, caso esteja em "no" ele vai começar como "no vocation".) {newPlayerSpawnPosX = 155} {newPlayerSpawnPosY = 39} (Posição do player criado pelo account manager.) {newPlayerSpawnPosZ = 7} newPlayerTownId = 1 (ID da cidade [configurado no map editor].) newPlayerLevel = 8 ( Level do novo player criado pelo account manager.) newPlayerMagicLevel = 0 (Magic level do novo player criado pelo account manager.) generateAccountNumber = "no" (Se o player escolhe ou não o account, caso esteje "no" o account manager vai solicitar um Account Number sozinho.) ----------------------------------------------------------------------------------------------------- redSkullLength = 15 * 24 * 60 * 60 (Tempo para sair o Red Skull nesse caso aqui está como 15 dias.) blackSkullLength = 30 * 24 * 60 * 60 (Tempo para sair o Black Skull nesse caso aqui está como 15 dias.) dailyFragsToRedSkull = 10 ( Quantos frags necessários em dia pra pegar Red Skull.) weeklyFragsToRedSkull = 40 ( Quantos frags necessários em semana pra pegar Red Skull.) monthlyFragsToRedSkull = 90 ( Quantos frags necessários em mês pra pegar Red Skull.) dailyFragsToBlackSkull = dailyFragsToRedSkull ( Quantos frags necessários em dia pra pegar Black Skull (Sendo que você precisa pegar a mesma quantidade de frags de Red Skull, estando Red Skull).) weeklyFragsToBlackSkull = weeklyFragsToRedSkull ( Quantos frags necessários em semana pra pegar Black Skull (Sendo que você precisa pegar a mesma quantidade de frags de Red Skull, estando Red Skull).) monthlyFragsToBlackSkull = monthlyFragsToRedSkull ( Quantos frags necessários em mês pra pegar Black Skull (Sendo que você precisa pegar a mesma quantidade de frags de Red Skull, estando Red Skull).) blackSkulledDeathHealth = 40 ( A quantidade de vida que você fica após morrer de Black Skull.) blackSkulledDeathMana = 0 ( A quantidade de mana que você fica após morrer de Black Skull.) useBlackSkull = true (Se vai ter Black Skull no seu server, true ou false.) worldType = "open" ( Open = PVP / Optional = Non-PVP / Hardscore (Acho que é assim) = Enforced) protectionLevel = 80 (Level para que os players possam cair na porrada se se matarem.) pzLocked = 30 * 1000 ( Quanto tempo demora pra sair o battle "Espadinhas" , aqui no caso está 30 segundos.) huntingDuration = 30 * 1000 ( Quanto tempo demora pra sair o hunting "Espadinhas Vermelhas", aqui no caso está 30 segundos.) criticalHitChance = 7 (Chance de attack critico, em %) criticalHitMultiplier = 1 (Quando o player da critico o attack dele vai multiplicar em : no caso "1") displayCriticalHitNotify = true (Aparece quando o player da um attack critico?) removeWeaponAmmunition = false (Remover munição) removeWeaponCharges = false (Remover carga) removeRuneCharges = "no" (Remover carga) whiteSkullTime = 5 * 60 * 1000 (Tempo para sair o White Skull, nesse caso 5 minutos.) showHealingDamage = true (Aparece a quantidade de health que recupera) showHealingDamageForMonsters = false (Aparece a quantidade de health que recupera (Nos Monstros)) stopAttackingAtExit = false (Se vai parar de atacar quando o player der exit) deathLostPercent = 10 (Quantidade em % de exp que o player vai perder ao morrer) onePlayerOnlinePerAccount = true (Se só pode entrar 1 player por account, caso bote false, e tiver 3 chars, vai ser possivel jogar com esses 3 chars) premiumPlayerSkipWaitList = false (Se o player for premium ele, nesse caso não pularia a fila de espera) ingameGuildManagement = true (Usar os comandos do tipo : !createguild/!joinguild.) cleanProtectedZones = true (Quando der clean, vai dar clean em todas as areas protection Zone, de DP até Templo.) allowChangeOutfit = true (Permitir se o player pode trocar o Outfit.) allowChangeColors = true (Permitir se o player pode trocar a Cor do Outfit.) allowChangeAddons = true (Permitir se o player pode trocar os Addons.) spellNameInsteadOfWords = true (Nesse caso a spell exura, quando usada sai a mensagem "exura", mas se tivesse false, ao usar exura, vai aparecer a mensagem "Light Healing".) emoteSpells = true (Mensagem laranja.) idleWarningTime = 239 * 60 * 1000 ( O tempo para dar o aviso de Idle (Quando o PLAYER fica muito tempo parada)) idleKickTime = 240 * 60 * 1000 (O tempo para o player se automaticamente kickado.) Bem, eu botei esses porque são esses que os caras tem mais dúvidas. Espero ter ajudado ! Att. Huziwara no Mokou
  35. 1 ponto
    Vlw ae Gabriel Rep+
  36. 1 ponto
    saiba mais:www.facebook.com/pokexmex saiba mais:www.facebook.com/pokexmex
  37. É importante ressaltar que quase nunca o Script vem nomeado como msg.lua O nome pode muito bem ser outro, para ficar mais fácil identificar dependendo da distro, pode ser verificado o intervalo entre as mensagens.
  38. [Dúvida] Como criar nova stone?

    tataboy67 reagiu a Hadagalberto Jr. por uma resposta no tópico

    1 ponto
    Para criar uma nova stone você precisa adicionar a sprite da stone no client com o ObjectBuilder. Depois duplique uma stone no itemEditor e colocar a imagem do seu item no dat. No /data/items/items.xml clone a tag de uma stone e em 'id' coloque o id do Server ID Depois no /data/lib/configuration.lua crie uma tag para sua nova stone com o Server ID Agora é só adicionar seu pokemon para evoluir com ela!!
  39. (Resolvido)Spells diferentes

    r0bert0lol reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    1- creaturescripts.xml <event type="statschange" name="defensive1" event="script" value="defensive1.lua"/> login.lua ---------- Defensive 1 ---------------- registerCreatureEvent(cid, "defensive1") if getPlayerStorageValue(cid, 3482101) < 0 then setPlayerStorageValue(cid, 3482101, 0) end creaturescripts\scripts\defensive1.lua local config = { storage = 3482101, effect1 = 2, --- efeito ao ser atacado estando invulnerável percent = 30 -- porcentagem de esquivar } function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS)) then if getPlayerStorageValue(cid,config.storage) > 0 and isCreature(attacker) and math.random(1,100) <= config.percent then doSendMagicEffect(getCreaturePosition(cid), config.effect1) doSendAnimatedText(getCreaturePosition(cid), "-kawarimi-", 215) setPlayerStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) - 1) doPlayerSendTextMessage(cid, 20, "You have now ".. getPlayerStorageValue(cid, config.storage) .." charge(s).") return false end end return true end 2- creaturescripts\scripts\defensive2.lua local config = { storage = 3482101, effect1 = 2, --- efeito ao ser atacado e teleportar percent = 30 -- porcentagem de esquivar } function onStatsChange(cid, attacker, type, combat, value) if value >= 1 and (type == STATSCHANGE_HEALTHLOSS or (getCreatureCondition(cid, CONDITION_MANASHIELD) and type == STATSCHANGE_MANALOSS)) then if getPlayerStorageValue(cid,config.storage) > 0 and isCreature(attacker) and math.random(1,100) <= config.percent then doSendMagicEffect(getCreaturePosition(cid), config.effect1) doTeleportThing(cid, getCreaturePosition(attacker), false) doTargetCombatHealth(cid, attacker, 1, -50, -100, 255) setPlayerStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) - 1) doPlayerSendTextMessage(cid, 20, "You have now ".. getPlayerStorageValue(cid, config.storage) .." charge(s).") return true end end return true end (o resto é a mesma coisa, só muda os storages e os nomes né) Agora pra ambos vc vai fazer essa mesma spell: spells.xml <instant name="kawarimi no jutsu defensive" words="kawarimi no jutsu defensive" lvl="16" mana="500" prem="1" aggressive="0" exhaustion="1000" needlearn="0" event="script" value="especiais/kawarimi.lua"> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> data\spells\scripts\especiais\kawarimi.lua local config = { storage = 3482101, cooldown = 3, --- tempo entre um uso e outro maxcharge = 20, --- máximo de cargas que dá pra acumular effect1 = 29 -- efeito que sai ao falar a spell } function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage) >= 20 then doPlayerSendCancel(cid, "You already reached the max of charges for this skill.") return false end if os.time() - getPlayerStorageValue(cid, 55697) >= config.cooldown then setPlayerStorageValue(cid, 55697, os.time()) doSendMagicEffect(getCreaturePosition(cid), config.effect1) setPlayerStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage) + 1) doPlayerSendTextMessage(cid, 27, "You have now ".. getPlayerStorageValue(cid, config.storage) .." charge(s).") else doPlayerSendCancel(cid, "Your skill is in cooldown, you must wait "..(config.cooldown - (os.time() - getPlayerStorageValue(cid, 55697))).." seconds.") return false end return true end Lembrando que se vc quiser ter ambas as spells vc precisa duplicar os scripts e mudar os storages/nomes
  40. (Resolvido)Spells diferentes

    r0bert0lol reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    vou fazer e colocar um máximo que o player pode stackar pra evitar que o cara deixe no bot stackando infinitos dodges hahaha.. vou colocar 20 por padrão
  41. (Resolvido)Spells diferentes

    r0bert0lol reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    oque eu perguntei é oque vc quis dizer com essa %... é tipo 30% de chance de esquivar (não tomar dano) e remover 1 carga da spell ou seria algo como esquivar apenas 30% do dano?
  42. Olá Pessoal, Vou fazer uma série sobre (C Sharp) C# para iniciantes. Atendendo à diversos pedidos vou procurar abordar de uma forma diferente a transferência de conhecimentos nessa linguagem, apostila e tutorial tem de monte na internet, a intenção não é essa, vamos abordar necessidades reais de quem quer dar os primeiros passos em C# e agora quer aprender mais. Só para começar, um pouquinho de história: O C# é uma linguagem derivada do C++, mas também tem base em Java e Object Pascal. Criada em meados de 1999 por Anders Hejlsberg (pai do Turbo Pascal e Delphi) vem desde 2001 ganhando espaço e se tornou uma das linguagens mais populares da atualidade. Vamos dar o primeiro passo: Variáveis Toda variável é uma alocação de uma quantidade de memória, é nesse espaço de memória que está armazenado o conteúdo da variável, internamente uma variável possui um ponteiro, o ponteiro para o sistema operacional é um endereçamento físico de memória, serve para localizar onde está armazenado tal dado. A declaração de variável em C#: Tipo NomeDaVariavel; 1 int MeuInteiro; Deve-se sempre inicializar uma variável: 1 int MeuInteiro = 0; Stack e Heap O gerenciamento da memória no C# é feito em duas áreas de memória, o Stack e o Heap. O Stack é uma área bem pequena de memória (alguns KB) e funciona no formato de pilha. “Pilha é uma estrutura de dados em que a inserção e a remoção de elementos de uma sequência se faz pela mesma extremidade, geralmente designada por topo da pilha” Ou seja, o último que entra na pilha é o primeiro que sai (LIFO – Last-In-First-Out) Qualquer dado inserido na Stack é automaticamente retirado automaticamente após a conclusão do processo que a alocou, isso livra o programador de se preocupar com isso. Quando a Stack atinge seu tamanho máximo temos um problema muito conhecido como “stack overflow”. Os dados armazenados na Stack são chamados de “Value Types”. A Heap é uma área de memória bem grande, diferente da Stack que é pequena, seu tamanho muda dinamicamente conforme o uso, a Heap é acessada indiretamente, por meio de referência, por isso chamamos os dados da Heap de “Reference Type”. Existe um processo chamado Garbage Collector (GC) que é responsável pela limpeza desta área de memória. O custo de se criar um objeto na Heap é muito maior do que na Stack, sendo assim na área de memória Stack nós temos os Value Types a seguir: Tipos numéricos (int, long, short etc), ponto flutuante (float, double), decimal, booleanos (true e false) e estruturas definidas pelo usuário (struct). Na Heap nós temos os Reference Types do tipo: Classes, Interfaces e Delegates. As características dos tipos alocados em cada uma dessas áreas são as seguintes: Value Types: Uma variável deste tipo contém o valor, e não um endereço de referência para o valor; Derivam de System.ValueTypes; Variáveis de escopo local precisam ser inicializadas antes de serem utilizadas; Atribuir o valor de variável a outra, implicitamente, é feita uma cópia do conteúdo da variável. Sendo assim, qualquer alteração no conteúdo de uma delas, não afetará a outra. Quanto maior for um objeto deste tipo mais custosa será sua cópia. Reference Types: Uma variável contém a referência (ou endereço) para o objeto que está na Heap; Atribuir o valor de uma variável para outra faz uma cópia da referência, e não do próprio objeto. Ou seja, não é feita a cópia do objeto, e sim do endereço de memória do objeto, o que não gera muito custo para objetos grandes; São alocados na Heap e seus objetos são coletados pelo Garbage Collector; São passados por referência, enquanto que Value Types são passados por valor. Ou seja, a alteração de um objeto afetará todas as instâncias que apontam para ele. Boxing e Unboxing Boxing é o processo de converter um “Value Type” para o tipo de object ou a qualquer tipo de interface implementada por este tipo de valor “Reference Type”. Unboxing extrai o “Value Type” do objeto. Transforma um objeto em um tipo simples. 1 // Vamos fazer um Boxing 2 int i = 123; 3 object obj = i; 4 5 // Agora vamos fazer Unboxing 6 obj = 123; 7 i = (int)obj; Simples né? O Garbage Collector (GC) Como na Heap todos objetos são referenciados, o GC verifica se existe alguma variável fazendo referência a determinado objeto, caso não encontre ele desaloca “Coleta” aquela área de memória. Um fato interessante, por mais que se chame o Garbage Collector a sensação que temos é de que ele irá entrar em ação no mesmo instante, mas não, estamos apenas sinalizando a ele. “Passe por aqui GC”. Não é recomendado chamar manualmente o GC, deixe com que ele trabalhe de sua forma. Abaixo estamos chamando o GC, porém sinalizando para que ele aguarde o trabalho em memória terminar: 1 GC.Collect(); 2 GC.WaitForPendingFinalizers(); Passagem de Valor ou por Referência Dada as funções: 1 public void FuncaoPorValor(int numero) 2 { 3 numero = 10; 4 } 5 6 public void FuncaoPorReferencia(ref int numero) 7 { 8 numero = 10; 9 } A única diferença entre as duas é que uma trata a variável “numero” passada por valor e a outra trata a variável “numero” por referência. Observemos os resultados: 1 int variavel = 0; 2 FuncaoPorValor(variavel); 3 4 MessageBox.Show("Resultado = " + variavel.ToString()); 5 // Resultado = 0 Foi passada uma cópia da variável pro método. 6 7 int variavel2 = 0; 8 FuncaoPorReferencia(variavel2); 9 10 MessageBox.Show("Resultado = " + variavel2.ToString()); 11 // Resultado = 10 Foi passada a referência da variável pro método. Normalmente quando passamos uma variável para uma função, estamos passando uma cópia dela para a função trabalhar. Caso essa cópia seja modificada a original permanece igual. Quando passamos a variável por referência, um ponteiro de memória está sendo passado, ou seja, caso seja modificada a própria variável está sendo alterada, pois o ponteiro de memória aponta para a alocação original. E por hoje ficamos por aqui. Espero que aproveitem e em caso de dúvidas podem postá-las nos comentários. CRÉDITOS 100% Eduardo Pires e a mim por compartilhar no tk :3
  43. Script Upgrade

    Raziel Frehley reagiu a xWhiteWolf por uma resposta no tópico

    1 ponto
    só trocar isso daqui na lib e deve resolver: --[[ PERFECT UPGRADE SYSTEM 2.0 Criado por Oneshot É proibido a venda ou a cópia sem os devidos créditos desse script. ]]-- UpgradeHandler = { levels = { [1] = {100, false, true}, [2] = {90, false, true}, [3] = {80, false, true}, [4] = {70, false, true}, [5] = {60, false, true}, [6] = {50, false, true}, [7] = {40, false, true}, [8] = {30, false, true}, [9] = {20, false, true}, [10] = {10, false, true} }, broadcast = 9, attributes = { ["attack"] = 2, ["defense"] = 1, ["armor"] = 1 }, message = { console = "Trying to refine %s to level +%s with %s%% success rate.", success = "You have upgraded %s to level +%s", fail = "You have failed in upgrade of %s to level +%s", downgrade = "The upgrade level of %s has downgraded to +%s", erase = "The upgrade level of %s has been erased.", maxlevel = "The targeted %s is already on max upgrade level.", notupgradeable = "This item is not upgradeable.", broadcast = "The player %s was successful in upgrading %s to level +%s.\nCongratulations!!", invalidtool = "This is not a valid upgrade tool.", toolrange = "This upgrade tool can only be used in items with level between +%s and +%s" }, tools = { [8306] = {range = {0, 10}, info = {chance = 0, removeable = true}}, }, isEquipment = function(self) local weaponType = self:getItemWeaponType() return ((weaponType > 0 and weaponType < 7) or self.item.armor ~= 0) end, setItemName = function(self, name) return doItemSetAttribute(self.item.uid, "name", name) end, chance = function(self) local chances = {} chances.upgrade = (self.levels[self.item.level + 1][1] or 100) chances.downgrade = (self.item.level * 5) chances.erase = (self.item.level * 11) return chances end } function UpgradeHandler:new(item) local obj, ret = {} obj.item = {} obj.item.level = 0 obj.item.uid = item.uid for key, value in pairs(getItemInfo(item.itemid)) do obj.item[key] = value end ret = setmetatable(obj, {__index = function(self, index) if _G[index] then return (setmetatable({callback = _G[index]}, {__call = function(self, ...) return self.callback(item.uid, ...) end})) else return UpgradeHandler[index] end end}) if ret:isEquipment() then ret:update() return ret end return false end function UpgradeHandler:update() self.item.level = (tonumber(self:getItemName():match("%+(%d+)")) or 0) end function UpgradeHandler:refine(uid, item) if not self.item then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.notupgradeable) return "miss" end local tool = self.tools[item.itemid] if(tool == nil) then doPlayerSendTextMessage(uid, MESSAGE_EVENT_DEFAULT, self.message.invalidtool) return "miss" end if(self.item.level > #self.levels) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.maxlevel:format(self.item.name)) return "miss" end if(self.item.level < tool.range[1] or self.item.level >= tool.range[2]) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.toolrange:format(unpack(tool.range))) return "miss" end local chance = (self:chance().upgrade + tool.info.chance) doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_BLUE, self.message.console:format(self.item.name, (self.item.level + 1), math.min(100, chance))) if(tool.info.removeable == true) then doRemoveItem(item.uid, 1) end if chance * 100 > math.random(1, 10000) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_ORANGE, self.message.success:format(self.item.name, (self.item.level + 1))) if (self.item.level + 1) >= self.broadcast then end self:setItemName((self.item.level > 0 and self:getItemName():gsub("%+(%d+)", "+".. (self.item.level + 1)) or (self:getItemName() .." +1"))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item.level > 0 and getItemAttribute(self.item.uid, key) or self.item[key]) + value) end end return "success" else if(self.levels[self.item.level][11] == true and (self:chance().erase * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.erase:format(self.item.name)) self:setItemName(self.item.name) for key, value in pairs(self.attributes) do if self.item[key] > 0 then doItemSetAttribute(self.item.uid, key, self.item[key]) end end elseif(self.levels[self.item.level][2] == true and (self:chance().downgrade * 100) > math.random(1, 10000)) then doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.downgrade:format(self.item.name, (self.item.level - 1))) self:setItemName((self.item.level == 1 and self.item.name or self:getItemName():gsub("%+(%d+)", "+".. (self.item.level - 1)))) for key, value in pairs(self.attributes) do if getItemAttribute(self.item.uid, key) ~= nil or self.item[key] ~= 0 then doItemSetAttribute(self.item.uid, key, (self.item[key] + value * (self.item.level - 1))) end end else doPlayerSendTextMessage(uid, MESSAGE_STATUS_CONSOLE_RED, self.message.fail:format(self.item.name, (self.item.level + 1))) doRemoveItem(self.item.uid, 1) end return "fail" end end
  44. [RESOLVIDO] Remover Item Premium

    elite1992 reagiu a joadson por uma resposta no tópico

    1 ponto
    Eu coloquei a storage para não acontecer isso kkk o player normal, ao logar no server vai ganhar storage 2025(0), assim que ele se tornar premium e logar, o server vai fazer uma checagem, se ele for premium e tiver a storage(0), vai mudar pra storage(2), se ele for free com storage(2), vai mudar pra storage(1) e remover o item, e só irá receber novamente quando for premium com storage(2) kkk é algo doido de entender, mas funciona(ou não) kkk
  45. [RESOLVIDO] Remover Item Premium

    elite1992 reagiu a joadson por uma resposta no tópico

    1 ponto
    Okay, irei providenciar o script. Edit. Aqui o script, não sei se é isso, mas deve ser kkk vá em data/creaturescripts/script e crie um arquvio chamado item.lua e coloque isso dentro function onLogin(cid) if getPlayerStorageValue(cid, 2025) == 0 and not isPremium(cid)then doPlayerRemoveItem(cid, 105, 1) -- Mude o 105 pelo ID do seu item setPlayerStorageValue(cid, 2025, 2) doPlayerSendTextMessage(cid, 22, "Ohhh, você perdeu o item") return TRUE end if getPlayerStorageValue(cid, 2025) == 2 and isPremium(cid) then doPlayerAddItem(cid, 105, 1) doPlayerSendTextMessage(cid, 22, "Você recuperou o item") end return TRUE end e adicione isso no creature.xml <event type="login" name="item" event="script" value="item.lua"/> depois vá em data/creaturescripts/script e abra o login.lua e adicione isso registerCreatureEvent(cid, "item") e isso aqui if getPlayerStorageValue(cid, 2025) < 0 then setPlayerStorageValue(cid,2025, 0) end Agora é só testar e ser feliz
  46. Baiak 8.60 Muito Editado !

    zero390 reagiu a dila por uma resposta no tópico

    1 ponto
    Novo Servidor Baiak EDITADO para todos ! 100% bom,eu peguei a base do Baiak Titanica e Esta complemente 100%, Com Tps Novos,Uma area Esclusiva para lvl 999 ,essa Porta pra lvl 999 não deu tempo de colocar mais hunts ! ele é livre dos bug de ml,e das armas vip droparem de mostro ! e tudo mais ! blablabla,vou colocar algumas fotos,só que estou sem tempo para arumar tudo ! O que eu fiz ? Mapa esta completamente 100% , sem o bug da baiak quest ! 100% agora ! Armas vip,Editadas ! 100% Coloquei 2 salas de Tp novos 100% Coloquei mais casa pra baixo do templo ,e não há house bugadas,! Fiz um deserto,caso tenha war, da pra fazer uma (open battle) Arrumado o bug dos orcs ! Modifiquei o templo,e a cidade principal, está mais limpo,e da pra tirar um pvp melhor ! Arrumado o bug Das armas vip que caiam dos bixos ! Fiz Outro andar no dp, ( os npcs de promotion e de vender armas estava tudo junto) coloquei separados ! e outras coisinhas ! Vou colocar algumas fotos abaixo ! TEMPLO MODIFICADO! TPS NOVOS ! Creditos : Gustavo Ferreira pela base ! EU por Editar e fazer outras coisinhas ! Servidor esta complemente 100% ! É BOM PRA EXP STAGE ! Download : http://www.4shared.com/rar/qeRLctch/Baiak_edited_By_Guh.html Scan : https://www.virustot...sis/1351963775/
  47. C# -Utlizando threads(TH)

    xWhiteWolf reagiu a Drusk por uma resposta no tópico

    1 ponto
    Galera uma coisa que notei em qualquer bot aqui no forum é a utilização de varios timers para verificação de life, mana e etc Aqui vo postar um exemplo de como fazer um healer com threads Mas o que são threads? Thereads são como se fosse separar uma parte do codigo do seu sistema principal fazendo como se fosse outro "programa"(processo no computador). Assim caso você tenha 2 timers por exemplo, existe um "delay" ou executa o timer 1 ou executa o timer 2, nunca os dois iram executar simultaneamente e isso talvez seja desagradevel pois imagine, o programa está executando o timer 2 que é só para verificar alguma "bobeira" do char enquanto o timer 1 é para healer e precisa ser executado e esteja precisando healar o char.. Entao ao seria um caso bom para por uma threads. Mais lembrando, utilização de muitas threads pode sobrecarregar o processador e deixalo um pouco mais lento, dependendo de quanto nucleos a CPU tenha. Bom começando... Não irei mostrar passo a passo da criação de um formaulario, pois se está aqui sabe no minimo abrir um novo projeto rsrs. Coloque um CheckBox no seu novo form que tenha criado e no evento CheckedChange dele vc irá inserir um seguinte comando.. Primeiramente coloque na Uses, estas 4 para a utilização dos comandos // Para Utilização dos comandos da TH using System.Threading; using System.Reflection; //Para poder importar uma DLL using System.Runtime.InteropServices; //Para utilizar o comando Process using System.Diagnostics; Continuando o codigo, no evento CheckedChange do CheckBox coloque as seguintes linhas de codigos.. private void checkBox1_CheckedChanged(object sender, EventArgs e) { // Instancia a variavel do tipo Thread e vincula um procedimento a TH Thread trd = new Thread(new ThreadStart(this.ThereadLoHealth)); //Inicia a TH trd.Start(); } Após isto importe a DLL user32 [DllImport("user32.dll")] //Procedimento para poder enviar a Tecla para um determinado processo, no caso o Tibia public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); // Pega a Process do tibia para achalo na hora de enviar o comando de Key public static Process Tibia = Process.GetProcessesByName("Tibia")[0]; private void ThereadLoHealth() { // Enquanto o CheckBox estiver como True executa a verificação do Life do char while (checkBox1.Checked) { //Pega a life atual do char uint atualLife = 210;//= Health.GetHealth(); //Comparação de lifes definidas(no caso dos numeros poderia ser TextBoxs que o usuario definiria a quantidade if (atualLife >= 150 && atualLife <= 380) {//Envia uma hotkey no caso o F1 no Tibia SendMessage(Tibia.MainWindowHandle, 0x100, (int)Keys.F1, 0); } //Adormece a Th para desocupar espaço no CPU por 500Milis, seria como se fosse o interval do timer Thread.Sleep(500); } } O codigo final fica assim>>>> using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; using System.Reflection; using System.Runtime.InteropServices; using System.Diagnostics; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private Thread trd; private void checkBox1_CheckedChanged(object sender, EventArgs e) { Thread trd = new Thread(new ThreadStart(this.ThereadLoHealth)); trd.Start(); } [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); public static Process Tibia = Process.GetProcessesByName("Tibia")[0]; private void ThereadLoHealth() { while (checkBox1.Checked) { //Pega a life atual do char uint atualLife = 210;//= Health.GetHealth(); //Comparação de lifes defini if (atualLife >= 150 && atualLife <= 380) { SendMessage(Tibia.MainWindowHandle, 0x100, (int)Keys.F1, 0); } Thread.Sleep(500); } } } } Este é meu primeiro tutorial e espero que tenha dado uma ajuda ou idéia para programar outros tipos de coisas... E caso tenham idéias para melhor efeito do healer, por favor indiquem!! Projeto de exemplo adicionado> Utilização de TH.rar
  48. Baiak 8.60 Muito Editado !

    zero390 reagiu a dila por uma resposta no tópico

    1 ponto
    tinha esquecido o nome seu,haha, já vou colocar, Obrigado !
  49. [Tutorial] IF, Else, Then, Elseif, And e Or

    Mazarati reagiu a Kimoszin por uma resposta no tópico

    1 ponto
    Ola galerinha, hoje vou ensinar a vc's como usar if, else, elseif, and e or em lua If, Else, ElseIF, Then Agora vamos ver oque é oque: Entendo o Script function onSay(cid, words) -- Função aoFalar if getPlayerVocation(cid) == 4 then -- Se a vocação do player for igual a 4 entao doPlayerSendTextMessage(cid, 22, "Eu sou um Knight") -- Mandar uma mensagem com o texto, dizendo sua vocação elseif getPlayerVocation(cid) == 3 then -- Se nao, se a vocação do player for igual a 3 entao doPlayerSendTextMessage(cid, 22, "Eu sou um Paladin") -- Mandar uma mensagem com o texto, dizendo sua vocação else -- Se nao doPlayerSendTextMessage(cid, 22, "Eu nao estou na lista") -- Mandar uma mensagem com o texto, dizendo um que nao esta na lista end -- Fecha o IF end -- Fecha o Script Regras Entendo o Script And: function onSay(cid, words) -- Função aoFalar if getCreatureHealth(cid) > 500 and getCreatureMana(cid) > 100 then -- Se a vida da criatura for maior que 500 E se a mana da criatura for maior que 100 entao doPlayerSendCancel(cid, "Eu tenho 500 de health e 100 de mana, ") -- Manda uma mensagem end -- Fecha o if end -- Fecha o Script[/code] [b]Or:[/b] [code]function onSay(cid, words) -- Função aoFalar if getCreatureHealth(cid) > 500 or getCreatureMana(cid) > 100 then -- Se a vida da criatura for maior que 500 ou se a mana da criatura for maior que 100 entao doPlayerSendCancel(cid, "Eu tenho 500 de health e 100 de mana, ") -- Manda uma mensagem end -- Fecha o if end -- Fecha o Script Regras É isso pessoal, Abraços And e Or Agora vamos ver oque é oque:
  50. !leavehouse

    Yago Blind. reagiu a EddyHavoc por uma resposta no tópico

    1 ponto
    Entre em Data > Talkactions > Scripts Copie e cole um arquivo , depois renome-e para leavehouse Abra-o e cole o seguinte script. function onSay(cid, words, param) if getTileHouseInfo(getPlayerPosition(cid)) ~= FALSE then if getHouseOwner(getTileHouseInfo(getPlayerPosition(cid))) == getPlayerGUID(cid) then setHouseOwner(getTileHouseInfo(getPlayerPosition(cid)), 0) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have successfully left your house.") else doPlayerSendCancel(cid, "You are not the owner of this house.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end else doPlayerSendCancel(cid, "You are not inside a house.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) end end Depois salve e feche. Depois abra o Talkactions.xml e cole a seguinte TAG. <talkaction words="!leavehouse" script="leavehouse.lua"/> Ajudei ? da um gostei ali >>
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo