Líderes
-
xWhiteWolf
HéroiPontos3605Total de itens -
luanluciano93
HéroiPontos5981Total de itens -
-
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 05/27/14 em todas áreas
-
[Boss Skill] Aegis of Immortal
[Boss Skill] Aegis of Immortal
bagulhoescroto e um outro reagiu a xWhiteWolf por uma resposta no tópico
2 pontosFala galera do TK, hoje vim trazer pra vocês um script de um server bem famoso, trata-se de nada mais e nada menos doque a Aegis of Immortal do Fox World. Quase nenhum OTserver consegue me deixar com vontade de jogar, mas se tem um que chegou bem próximo foi o Fox e o motivo é a criatividade dos caras. É muito fácil aprender lua e ser um ótimo scripter mas ter criatividade pra criar esse tipo de script é bem mais raro. Sem mais delongas vou apresentar a idéia do script e logo em seguida ensinar a instalar no seu servidor. Aegis of the Immortal Descrição: É obtida 1 carga ao vencer o boss Aegis (aparece em invasões). Com esta técnica, o jogador ganha a aura do boss, e se morrer é teleportado para a Aegis Dimension, e após 3 segundos volta para o lugar que estava, com life e mana full como se não tivesse sido tocado. (limite de 1 carga) Tipo: (B.Skill) Vocações: All Vocations Elemento: n/a fonte: site do fox Well, o script é bem simpleszinho mas eu apanhei pra caramba pra fazer ele funcionar certinho (acredito que nem o script dos caras do Fox funcione da maneira correta, mas esse daqui vai funcionar) Antes de tudo você tem que criar uma área no seu map editor e colocar ela inteira como no-pvp e no-logout. Essa vai ser a área que você vai ser teleportado, será a sua "Aegis Dimension". Feito isso você vai precisar adicionar essa linha em creaturescripts.xml: <event type="statschange" name="reborn" script="reborn.lua"/> obs: eu levei muito tempo tentando fazer por onPrepareDeath mas aparentemente essa função não funciona tão bem quanto statschange e acabava chamando a si mesma repetidas vezes. agora crie um arquivo chamado reborn.lua na pasta creaturescripts\scripts e coloque isso dentro dele: Agora você só tem que adicionar essa linha no creaturescripts\scripts\login.lua (de preferencia antes do ultimo return true) --- BOSS SKILLS ---- registerCreatureEvent(cid, "reborn") if getPlayerStorageValue(cid, 19332) == -1 then setPlayerStorageValue(cid, 19332, 0) end Agora seu server possui a Aegis of Immortal e você pode configurar essa skill passiva de diferentes maneiras: 1) Pode ser uma quest que dá como prêmio X quantidades dessa skill 2) Um npc que vende X quantidades da skill 3) Um item que ao ser equipado ativa a skill 4) Um boss que vc mata e ganha quantidades dela 5) Um bonus em algum evento 6) Um item de shop etc. Tudo que vc precisa fazer é criar um script que dê o storage 19332, o valor do storage é o numero de vezes que vc vai utilizar a skill. aqui tem um exemplo de uma quest que ganha 5 charges da Aegis of Immortal: function onUse(cid, item) local storage = 19332 if getPlayerStorageValue(cid, storage) ~= 5 then doPlayerSetStorageValue(cid, storage, 5) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have habilited your [BOSS SKILL]") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your [BOSS SKILL] is already with "..getPlayerStorageValue(cid, storage).." charges.") end return true end e aqui tem algumas fotos de como fica no seu server: Espero que vcs tenham gostado.. Vou dar 20% de Crédito pro Kilua porque sem o tutorial dele de addEvent isso daqui não seria possível e 30% pro pessoal do Fox por terem me dado a idéia do script. EDIT: Fiz um monstro q dá essa skill ao morrer, só que eu inovei um pouquinho e fiz ele tendo a skill, ou seja, vc tem que matar ele um numero X de vezes pra valer de verdade kkk A graça é que esse numero de X é inerente ao player (fiz por storage), então se um grupo de 10 pessoas for fazer e cada hora uma matar, serão (X+1) vezes no mínimo auhauhauh Só que como ele não dá loot e o unico premio dele é a skill pra quem matar X vezes, então o pessoal dá KS mesmo. Enfim, aproveitem: creaturescripts\scripts\aegis.lua local config = { storagekill = 19500, --- storage q conta a quantidade de kills storageaegis = 19332, --- storage da skill tempo = 5, -- tempo até ele renascer times = 2, --- quantidade de vezes que tenho que matar charges = 1, --- cargas da skill q ganha ao matar definitivamente effect1 = 66, -- efeito ao morrer effect2 = 10 --- efeito ao renascer } function onKill(cid, target, lastHit) local killed = getPlayerStorageValue(cid,config.storagekill) local skill = getPlayerStorageValue(cid, config.storageaegis) if isMonster(target) and getCreatureName(target):lower() == 'aegis' then if killed < config.times then doCreatureSay(target, "I'll be back mortal...", 20) doSendMagicEffect(getThingPos(target), config.effect1) setPlayerStorageValue(cid, config.storagekill, killed+1) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) addEvent(doCreateMonster, 1000*config.tempo, "Aegis", getCreaturePosition(target), true) end if killed >= config.times then setPlayerStorageValue(cid, config.storagekill, 0) if skill < config.charges then doPlayerSendTextMessage(cid,22,"Congratulations, you just killed "..getCreatureName(target).." and earned Aegis of Immortal skill!") setPlayerStorageValue(cid, config.storageaegis, config.charges) end end end return true end creaturescripts\scripts\login.lua registerCreatureEvent(cid, "aegis") if getPlayerStorageValue(cid, 19500) == -1 then setPlayerStorageValue(cid, 19500, 0) end creaturescripts.xml <event type="kill" name="aegis" script="aegis.lua"/> monster\aegis.xml <?xml version="1.0" encoding="UTF-8"?> <monster name="Aegis" nameDescription="Aegis, the immortal" race="blood" experience="0" speed="605" manacost="0"> <health now="100000" max="100000"/> <look type="287" head="0" body="0" legs="0" feet="0" corpse="0"/> <targetchange interval="2000" chance="15"/> <strategy attack="60" defense="5"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="210" attack="260"/> <attack name="lifedrain" interval="1000" chance="20" range="3" min="-550" max="-1050"/> <attack name="firecondition" interval="1000" chance="7" range="2" min="-800" max="-1200"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="yellowspark"/> </attack> <attack name="physical" interval="1000" chance="7" radius="6" target="0" min="-250" max="-750"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="death" interval="1000" chance="50" radius="5" target="0" min="-200" max="-500"> <attribute key="areaEffect" value="mortarea"/> <attribute key="shootEffect" value="suddendeath"/> </attack> <attack name="firefield" interval="1000" chance="4" radius="5" target="0"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="34" range="7" radius="7" target="1" min="-350" max="-850"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="fire" interval="1000" chance="13" length="8" spread="0" min="-500" max="-1000"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="10" length="8" spread="3" min="-300" max="-1500"> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="25" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="1800" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <immunities> <immunity physical="0"/> <immunity energy="1"/> <immunity fire="1"/> <immunity poison="0"/> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="50"> <voice sentence="Poor innocent, I CAN'T DIE HAHAHAHAAHA"/> <voice sentence="Your soul will be mine!"/> <voice sentence="MUAHAHAHAAHAHA, I TOLD YOU" yell="1"/> </voices> </monster> OBS: edite ele porque eu coloquei ele muito forte, com muita vida e com muita recuperação de vida. monster\monsters.xml <monster name="Aegis" file="aegis.xml"/>2 pontos -
Elime's NPC Editor
Elime's NPC Editor
Zedgast reagiu a luanluciano93 por uma resposta no tópico
1 pontoEai pessoal? Hoje trouxe para vocÊs o Elime's NPC maker, feito por Elime, ele é um software que consiste em criar um NPC conforme você edita-lo no programa. Ele é bem simples e muito completo, veja as imagens abaixo .... Requisitos: Você precisa de Java 7 ou superior instalado no seu computador. • https://www.java.com/en/download/ Baixar: • http://elime.url.ph/npc_windows/npc_editor_windows.php Anexei o programa ao tópico para download. É isso pessoal, espero que gostem, abraços! npc_editor_windows.zip1 ponto -
DEV C++ Compilando TFS no Windows
DEV C++ Compilando TFS no Windows
Gabriel485 reagiu a Natanael Beckman por uma resposta no tópico
1 pontoDEV C++, aprenda a compila uma source TFS! Downloads(Baixe de acordo as configurações do seu windows): DEV C++ CONFIGURADO PARA 32BITS DEV C++ CONFIGURADO PARA 64BITS REV 3884 TFS 0.4 Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos. ====================================== Abra o DEV C++: ====================================== ====================================== Abra a Source: ====================================== ====================================== Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev: ====================================== ============================================================= ====================================== Aguarde carregar todos os arquivos: ====================================== ====================================== Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK: ====================================== ====================================== Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo: ====================================== ====================================== Se der tudo certo em Log vai estar como mostra a imagem abaixo: ====================================== ====================================== Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou! ====================================== =========================================== Só isso galera tutorial rápido resumido e útil! Créditos Natanael Beckman! =========================================== Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar: Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone. Abra o DEV-C++, clique em File> New> Project: Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos: Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp. No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros: -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs: -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK. Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project: Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9: OpenSSL 0.9.8 1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa! Clica aqui \/1 ponto -
Dodge System 8.54+
Dodge System 8.54+
Leo Zanin reagiu a xWhiteWolf por uma resposta no tópico
1 pontoAe galera do TK, uns caras ficaram me mandando PM pedindo esse sistema aqui.. aparentemente tem em algum server e eles queriam replicar o sistema no OT deles. Não sei como funciona no outro server mas no script que eu fiz vai funcionar assim: Serão 100 livros que você poderá comprar de um npc específico, cada livro te dá 1 ponto a mais na skill Dodge e isso acarreta em 0.3% de chance a mais de desviar de um golpe e tomar só 50% de dano. Infelizmente eu nunca joguei no servidor que foi o pioneiro desse sistema (na vdd eu nem sei qual é) então eu não fiz igual o deles, na realidade o meu só funciona ao perder vida então se o mago usar utamo vita acabou os dodge's dele. Outra coisa importante é que o player tem uma chance rara de dar Dodge no Dodge, ou seja, levando 1/4 do dano. Só vai funcionar para ataques de criaturas, tanto melee quanto spells, ou seja, se o cara passar no fogo não tem chance dele desviar do dano Sem mais delongas, vamos ao script: Crie um arquivo chamado dodge.lua na pasta creaturescripts\scripts e coloque isso dentro dele: agora adicione essa linha no creaturescripts.xml: <event type="statschange" name="dodge" event="script" value="dodge.lua"/> em creaturescripts\scripts\login.lua adicione isso antes do ultimo return true: registerCreatureEvent(cid, "dodge") if getPlayerStorageValue(cid, 48902) == -1 then setPlayerStorageValue(cid, 48902, 0) end agora vá em actions.xml e adicione essa linha aqui: <action itemid="1950" script="dodgebook.lua"/> note que vc pode mudar o ID do livro a hora que vc quiser. em items.xml, procure o item com o ID que vc irá utilizar e deixe ele assim: <item id="1950" article="a" name="Skill Book [DODGE]"> <attribute key="weight" value="1300" /> </item> agora crie um arquivo chamado dodgebook em actions\scripts e coloque isso dentro dele: local config = { minlevel = 150, --- level que precisa pra comprar o livro price = 10000, --- preço do livro itemid = 1950 --- ID DO LIVRO } --- end config function getDodgeSkill(cid) dodgeskill = getPlayerStorageValue(cid, 48902) return dodgeskill end local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} -- OTServ event handling functions start 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 -- OTServ event handling functions end function creatureSayCallback(cid, type, msg) -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself. if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'skill book') then if getDodgeSkill(cid) == dodgeskill then selfSay('You want to buy Skill Book [DODGE]? It will cost '..config.price..' gp\'s!', cid) talkState[talkUser] = 1 else selfSay('I couldnt acess your data bank!', cid) end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if getPlayerMoney(cid) < config.price then selfSay('Its necessary to have at least '..config.price..' gp\'s in order to buy the Skill Book!', cid) elseif getPlayerLevel(cid) < config.minlevel then selfSay('The minimum level for buying this skill book is '..config.minlevel..'!', cid) else doPlayerRemoveMoney(cid,config.price) doPlayerAddItem(cid, config.itemid, 1, TRUE) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no')) and isInArray({1}, talkState[talkUser]) == TRUE then talkState[talkUser] = 0 selfSay('Ok.', cid) elseif msgcontains(msg, 'level') then selfSay('You have Leveled your Dodge Skill to ['..getDodgeSkill(cid)..'/100].', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) lembrando que no começo vc pode editar o preço, o level que precisa pra comprar a skill e o ID do livro que será usado (USE O MESMO ID NO ITEMS.XML E NO ACTIONS.) agora crie o npc dodgeseller.xml e coloque isso nele: <npc name="Dodge Skill Seller" script="data/npc/scripts/bookseller.lua" access="5" lookdir="1"> <health now="1000" max="1000"/> <look type="133" head="95" body="86" legs="86" feet="38" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. I've been waiting for you to come.. Say 'skill book' or 'level'" /> <parameter key="message_farewell" value="Cya folk." /> <parameter key="message_walkaway" value="How Rude!" /> </parameters> </npc> Explanações gerais: O sistema é bem simples (muito simples mesmo), ele pega o valor do storage do cara e multiplica por 3.. se isso for maior que um numero aleatório criado entre 0 e 1000 ele dá dodge e solta os efeitinhos lá do creaturescripts. Note que no nivel máximo o cara vai ter 100 de storagevalue e isso será multiplicado por 3 resultando em 300. Se 300 for maior que um valor aleatorio entre 0 e 1000 (30% de chance) você vai tomar apenas metade do dano. Vc pode editar a vontade e melhorar ele da forma que quiser, se vc quiser que todos os danos do player sejam passíveis de serem esquivados mude aqui: if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then apenas retirando esse and isCreature(attacker), daí até dano de firefield vai dar pra dar dodge. Se você quiser adicionar classes que poderão usar (só knights e paladins por exemplo) só colocar isInArray({3,4,7,8}, getPlayerVocation(cid)) como condição na action. E se vc quiser que mago possa dar dodge mesmo com utamo vita (OQUE NÃO FAZ MUITO SENTIDO JÁ QUE O ESCUDO DE MANA FICA EM VOLTA DO PLAYER TEORICAMENTE, MAS TUDO BEM) é só colocar if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then Se você quiser que só ataques de Players sejam desviados ou só ataques de monstros é só trocar isCreature(attacker) por isMonster(attacker) ou isPlayer(attacker). Bom, isso é tudo, espero que vcs tenham curtido e qualquer coisa é só comentar ou me dar um Rep que ajuda pra caralho. Um abraço pra vocês. EDIT: Arrumei o problema de o npc não dar bye automáticamente qnd o player se afasta, bugando em algumas versões e impedindo de conversar com outros npcs. Apenas substituam o arquivo em scripts pela versão atualizada, grato.1 ponto -
[Sistema] Battlefield Event! V.1
1 pontoMapa BattleField Feito Por AnneMotta : Mapa Battlefield.rar Scan: https://www.virustot...sis/1346548669/ Imagens do mapa Descrição: - O evento é automático e acontece em determinado dia e hora da semana - Logo após é aberto um teleport então apenar um número limitado de players entra no evento - São formados por dois times, os "Black Assassins" e os "Red Barbarians" - Os times são balanceados automaticamente, quando o último jogador entra, esse teleport é fechado e depois de 5 minutos o evento começa, os 5 minutos são para os players ter tempo de planejar um ataque. - O sistema tem por finalidade matar todos do time inimigo, e os players que sobreviverem recebem um prêmio. Bônus: - Durante o evento é mostrado na tela somente dos jogadores que estão no evento um placar de times. - Até o último player entrar no evento, ficam mandando broadcast dizendo quanto players faltam para dar inicio ao jogo. - Se o evento abrir e não atingir a meta de players colocada, o evento é finalizado e os players voltam para o templo. Lembre-se: - De colocar Pvp Tool na área - De colocar área NoLogout Imagens: Instalação: Data > Lib Data > CreatureScript > Script Data > GlobalEvents > Scripts Data > Movements > Script Configurações do evento1 ponto
-
[MOD] CandyBot
[MOD] CandyBot
Yazka reagiu a Will Oliveira por uma resposta no tópico
1 pontoO que faz? O CandyBot é um mod do otclient que funciona como um bot comum. Instalação: Você deve ir a página do github do candybot e clicar no botão ZIP, você estará baixando o mod compactado, descompacte e transfira a pasta do CandyBot para a pasta mods do seu otclient. ScreenShots: Créditos: BeniS (Ben Dol) - [email protected] Alexandre do Amaral Severino - [email protected] Evesys1 ponto -
Magia que Empurra
Magia que Empurra
peterson18 reagiu a xWhiteWolf por uma resposta no tópico
1 pontoBom galera, a um tempo atrás um amigo pediu uma magia que empurrasse e minha primeira iniciativa foi dar uma procura por aí. A maioria dos scripts que eu achei não funcionava, o resto funcionava cheio dos mais variados bugs então eu decidi pegar um desses scripts como base e fazer a magia que empurra. Testado e funcionando em TFS 0.3.6 (Crying Damson). Não lembro de onde eu peguei e nem quem fez porque o autor não colocou créditos no script mas quero deixar bem claro de que 80% dos créditos vão pra esse pessoa, visto que eu apenas me baseei na metodologia dele pra fazer o script funcionar sem bugs Sem mais delongas, vamos ao script: OBS: Ele está 200% funcional, não empurra pra dentro de pz e nem buga de nenhuma forma. Agora no spells.xml adicione: <instant name="Get off here" words="exani grav" lvl="160" mana="500" prem="1" direction="1" exhaustion="2000" needlearn="0" event="script" value="empurrar.lua"> <vocation id="6"/> <vocation id="7"/> <vocation id="5"/> </instant> Faça bom proveito!! EDIT: Algumas imagens pra vocês PS: Dano adicionado pelo membro @Emersonssss ;]1 ponto -
Trade OFF - Shop Offline
Trade OFF - Shop Offline
Trunksontibia reagiu a Natanael Beckman por uma resposta no tópico
1 pontoEsse sistema disponibiliza uma negociação offline, onde você oferta um item e esse item é divulgado no site do server e qualquer player pode comprar o item utilizando um comando especificado. Crie uma arquivo .lua dentro da pasta data/talkactions/scripts com o nome auctionsystem.lua, dentro do mesmo adicione o code: local config = { levelRequiredToAdd = 20, maxOffersPerPlayer = 5, SendOffersOnlyInPZ = true, blocked_items = {2165, 2152, 2148, 2160, 2166, 2167, 2168, 2169, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2343, 2433, 2640, 6132, 6300, 6301, 9932, 9933} } function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end local t = string.explode(param, ",") if(t[1] == "add") then if((not t[2]) or (not t[3]) or (not t[4])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") return true end if(not tonumber(t[3]) or (not tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't set valid price or items count.") return true end if(string.len(t[3]) > 7 or (string.len(t[4]) > 3)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This price or item count is too high.") return true end local item = getItemIdByName(t[2]) if(not item) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item wich such name does not exists.") return true end if(getPlayerLevel(cid) < config.levelRequiredToAdd) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have required (" .. config.levelRequiredToAdd .. ") level.") return true end if(isInArray(config.blocked_items, item)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is blocked.") return true end if(getPlayerItemCount(cid, item) < (tonumber(t[4]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you don't have this item(s).") return true end local check = db.getResult("SELECT `id` FROM `auction_system` WHERE `player` = " .. getPlayerGUID(cid) .. ";") if(check:getID() == -1) then elseif(check:getRows(true) >= config.maxOffersPerPlayer) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry you can't add more offers (max. " .. config.maxOffersPerPlayer .. ")") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you add offert to database.") return true end end if(tonumber(t[4]) < 1 or (tonumber(t[3]) < 1)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have to type a number higher than 0.") return true end local itemcount, costgp = math.floor(t[4]), math.floor(t[3]) doPlayerRemoveItem(cid, item, itemcount) db.executeQuery("INSERT INTO `auction_system` (`player`, `item_name`, `item_id`, `count`, `cost`, `date`) VALUES (" .. getPlayerGUID(cid) .. ", \"" .. t[2] .. "\", " .. getItemIdByName(t[2]) .. ", " .. itemcount .. ", " .. costgp ..", " .. os.time() .. ")") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You successfully add " .. itemcount .." " .. t[2] .." for " .. costgp .. " gps to offerts database.") end if(t[1] == "buy") then if(not tonumber(t[2])) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end local buy = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(buy:getID() ~= -1) then if(getPlayerMoney(cid) < buy:getDataInt("cost")) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You don't have enoguh GP.") buy:free() return true end if(getPlayerName(cid) == getPlayerNameByGUID(buy:getDataInt("player"))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, you can't buy your own items.") buy:free() return true end if(getPlayerFreeCap(cid) < getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")))then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You try to buy a " .. buy:getDataString("item_name") .. ". It weight " .. getItemWeightById(buy:getDataInt("item_id"), buy:getDataInt("count")) .. " cap oz. and you have only " .. getPlayerFreeCap(cid) .. " oz. free capacity. Put some items to depot and try again.") buy:free() return true end if(isItemStackable((buy:getDataString("item_id")))) then doPlayerAddItem(cid, buy:getDataString("item_id"), buy:getDataInt("count")) else for i = 1, buy:getDataInt("count") do doPlayerAddItem(cid, buy:getDataString("item_id"), 1) end end doPlayerRemoveMoney(cid, buy:getDataInt("cost")) db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You bought " .. buy:getDataInt("count") .. " ".. buy:getDataString("item_name") .. " for " .. buy:getDataInt("cost") .. " gps!") db.executeQuery("UPDATE `players` SET `auction_balance` = `auction_balance` + " .. buy:getDataInt("cost") .. " WHERE `id` = " .. buy:getDataInt("player") .. ";") buy:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "remove") then if((not tonumber(t[2]))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") return true end if(config.SendOffersOnlyInPZ) then if(not getTilePzInfo(getPlayerPosition(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You must be in PZ area when you remove offerts from database.") return true end end local delete = db.getResult("SELECT * FROM `auction_system` WHERE `id` = " .. (tonumber(t[2])) .. ";") if(delete:getID() ~= -1) then if(getPlayerGUID(cid) == delete:getDataInt("player")) then db.executeQuery("DELETE FROM `auction_system` WHERE `id` = " .. t[2] .. ";") if(isItemStackable(delete:getDataString("item_id"))) then doPlayerAddItem(cid, delete:getDataString("item_id"), delete:getDataInt("count")) else for i = 1, delete:getDataInt("count") do doPlayerAddItem(cid, delete:getDataString("item_id"), 1) end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your offert has been deleted from offerts database.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This is not your offert!") end delete:free() else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wrong ID.") end end if(t[1] == "withdraw") then local balance = db.getResult("SELECT `auction_balance` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. ";") if(balance:getDataInt("auction_balance") < 1) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You don't have money on your auction balance.") balance:free() return true end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You got " .. balance:getDataInt("auction_balance") .. " gps from auction system!") doPlayerAddMoney(cid, balance:getDataInt("auction_balance")) db.executeQuery("UPDATE `players` SET `auction_balance` = '0' WHERE `id` = " .. getPlayerGUID(cid) .. ";") balance:free() end return true end Em seguida em talkactions.xml adicione a tag: <talkaction words="!offer" event="script" value="auctionsystem.lua"/> No banco de dados execute as querys: CREATE TABLE `auction_system` ( `id` int(11) NOT NULL auto_increment, `player` int(11), `item_id` int(11), `item_name` varchar(255), `count` int(11), `cost` int(11), `date` int(11), PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ALTER TABLE `players` ADD `auction_balance` INT( 11 ) NOT NULL DEFAULT '0'; Na pasta do seu site crie um arquivo chamado tradeoff.php, em seguida adicione o code: <?PHP $auctions = $SQL->query('SELECT `auction_system`.`player`, `auction_system`.`id`, `auction_system`.`item_name`, `auction_system`.`item_id`, `auction_system`.`count`, `auction_system`.`cost`, `auction_system`.`date`, `players`.`name` FROM `auction_system`, `players` WHERE `players`.`id` = `auction_system`.`player` ORDER BY `auction_system`.`id` DESC')->fetchAll(); $players = 0; $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Instruction<b></TD></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD><center><h2>Commands</h2><b>!offer add, itemName, itemPrice, itemCount</b><br /><small>example: !offer add, plate armor, 500, 1</small><br /><br /><B>!offer buy, AuctionID</b><br /><small>example: !offer buy, 1943</small><br /><br /><b>!offer remove, AuctionID</b><br /><small>example: !offer remove, 1943</small><br /><br /><b>!offer withdraw</b><br /><small>Use this command to get money for sold items.</small></center></TR></TD></TABLE><br />'; if(empty($auctions)) { $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b>Auctions</b></td></TR><TR BGCOLOR='.$config['site']['darkborder'].'><TD>Currently is no one active Auction.</TD></TR></TABLE>'; $main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vDk/">vDk</a>.</small></p>'; } else { foreach($auctions as $auction) { $players++; if(is_int($players / 2)) $bgcolor = $config['site']['lightborder']; else $bgcolor = $config['site']['darkborder']; $cost = round($auction['cost']/1000, 2); $content .= '<TR BGCOLOR='.$bgcolor.'><TD><center>'.$auction['id'].'</center></TD><TD><center><img src="/item_images/'.$auction['item_id'].'.gif"/></center></TD><TD><center>'.$auction['item_name'].'</center></TD><TD><center><a href="?subtopic=characters&name='.urlencode($auction['name']).'">'.$auction['name'].'</a></center></TD><TD><center>'.$auction['count'].'</center></TD><TD><center>'.$cost.'k<br /><small>'.$auction['cost'].'gp</small></center></TD><TD><center>!offer buy, '.$auction['id'].'</center></TR>'; } $main_content .= '<TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD CLASS=white><b><center>ID</center></b></TD><TD class="white"><b><center>#</center></b></TD><TD class="white"><b><center>Item Name</center></b></TD><TD class="white"><b><center>Player</center></b></TD><TD class="white"><b><center>Count</center></b></TD><TD class="white"><b><center>Cost</center></b></td><TD class="white"><b><center>Buy</center></b></td></TR>'.$content.'</TABLE>'; $main_content .= '<br /><p align="right"><small>System created by <a href="http://otland.net/members/vdk.1553/">vDk</a>.</small></p>'; } ?> Em layouts.php adcione o code: <a href="?subtopic=tradeoff"> <div id="submenu_tradeoff" class="Submenuitem" onmouseover="MouseOverSubmenuItem(this)" onmouseout="MouseOutSubmenuItem(this)"> <div class="LeftChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> <div id="ActiveSubmenuItemIcon_tradeoff" class="ActiveSubmenuItemIcon" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);"></div> <div id="ActiveSubmenuItemLabel_tradeoff" class="SubmenuitemLabel">Trade Off</div> <div class="RightChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> </div> </a> Pra finalizar em index.php adicione esse code: case "tradeoff"; $topic = "Trade Off"; $subtopic = "tradeoff"; include("tradeoff.php"); break; - E pronto galera clica em GOSTEI e comenta no tópico.1 ponto -
Global Map Full - By NvSo
Global Map Full - By NvSo
edilmodotibia reagiu a .HuRRiKaNe por uma resposta no tópico
1 pontoInformações: » Map RL 8.60, Com Novas Áreas; » Distro 100% - Sem Erros; » Magias Novas; » Monstros 100% RL; » Addons 100% RL; » NPC's 98% RL; » Addon Bonus 100%; » Items 95%; » War System 100%; » Quests RL 90%; » Servidor 100% Estável; Screen's: Download Server / Scan: » Download Server: http://www.mediafire.com/?9dw90td7e8bp955 » Scan Server: OBS: Não realizei o scan porque o arquivo ultrapassa o limite de 32MB no virustotal! Account GOD: tibia / tibia Créditos: NvSo Kaiser e The OTX Team TheForgotten Server Cipsoft Animal Pak1 ponto -
Pokémon [Titanium]
Pokémon [Titanium]
xDark199 reagiu a ClaudioMarcio por uma resposta no tópico
1 pontoFala ai galera tudo bem com vocês? então venho aqui mais uma vez trazer um servidor para download , agora o do Pokémon Titanium , lembrando que não fiz nada nesse servidor estou apenas postando para download Informações Básicas do Servidor - Servidor Com Sistema de level nos Pokémons - Servidor com Pokémons da 1° até a 6° Geração ( Incompleta ) ( 1° e 2° gera com suas respectivas formas Shinys) - Novas Pokebolas , umas 5 por ai - Mapa original do servidor - Sistema de Bike - Sistema de ovos Pokémon - Sistema de clan - Pokémons Selvagens tem o nome "Wild" na frente - Golden Arena - Sistema de Duelo entre outros Sistemas ..... Algumas Print sobre o Servidor : Spoiler Link para download do Servidor: Servidor https://mega.co.nz/#!KYJTFDrT!THO6iGH4Leg-xnB0Qt1XWSQzGZzBbxvl6QDrtPNGvYE Client(Mega)http://www.4shared.com/rar/JCJcuV5Uba/Zombi_TRs_PGalaxy_Client.html Créditos : Aline PGalaxy Team Gabrieltxu Slicer Caso Gostou do servidor deixe seu curtir ai para ajudar :3 , Irei atualizar mais tarde o topico deixar ele com uma aparencia mais agradavel , obrigado a todos1 ponto -
Run Event
Run Event
Linkz reagiu a Faelzdanil por uma resposta no tópico
1 pontoOlá galera do TK, Provavelmente maioria aqui não me conhece, meu nome é Raphael ( Fael ), e minha área preferida é o mapa porém estou com um conteúdo aqui que muitos buscam separado mas não encontram. O bom evento Run Event. É um evento de corrida em um mapa com muitos obstáculos. Todos os players possuem a mesma velocidade. Objetivo muito simples, o primeiro que chegar no final vence Para entrar no evento é preciso dizer "!run" a mensagem será anunciada na hora que preciso. Tem que estar em área pz pra executa-lo. Bom vamos ao MOD: OTserver/Mod/... Adiciona um RunEvent.xml Script: <?xml version="1.0" encoding="UTF-8"?> <mod name="Run_Event" version="3.0" author="CollocorpuseK" contact="otland.net" enabled="yes"> <config name="config_run_event"> <![CDATA[ configRunEvent = { storages = { player = 'runEventPlayer', -- set free storage joining = 'runEventJoining', -- set free storage group = 'runEventGroup', -- set free storage exhaust = 'runEventExhaust', -- set free storage countEvent = 'runEventCountEvent' -- set free storage }, position = {x=885, y=1002, z=7}, -- Posicao que vai ser teleportado os players rewards = {9931, 7697, 2346, 8880}, -- Itens pro vencedor ( Sera sortido) players = { max = 45, -- Maximo de player min = 5, -- Minimo de player minLevel = 100, -- Level minimo pra entrar no evento speed = 200 -- Velocidade que todos ficaram }, days = { ['Monday'] = {'16:00:20'}, ['Tuesday'] = {'16:00:20'}, ['Wednesday'] = {'16:00:20'}, ['Thursday'] = {'16:00:20'}, ['Friday'] = {'16:00:20'}, ['Saturday'] = {'16:00:20'}, ['Sunday'] = {'16:00:20'} }, delayTime = 5.0, -- Tempo pros players dizer o comando [minutos] startEvent = 2, -- Tempo pra começar o evento quando todos players tiverem no local [ segundos ] text = 'Vai comecar o Run Evento, se preparem' } ]]> </config> <lib name="lib_run_event"> <![CDATA[ function doStartEventRun() if configRunEvent.players.min <= doCountPlayersRunEvent() then for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then doRemoveCondition(cid, CONDITION_INFIGHT) -- fight doTeleportThing(cid, configRunEvent.position) -- teleport pos doChangeSpeed(cid, configRunEvent.players.speed - getCreatureBaseSpeed(cid)) -- predkosc doCreatureSetStorage(cid, configRunEvent.storages.group, getPlayerGroupId(cid)) -- storage doPlayerSetGroupId(cid, 7) -- grupa addEvent(doCreatureSetNoMove, configRunEvent.startEvent * 1000, cid, false) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Get ready. Run Event start in '..configRunEvent.startEvent..' seconds.') end end addEvent(doCheckSpeedRunEvent, configRunEvent.startEvent * 1000) doBroadcastMessage('Run Event has started. LET\'S GO!') else for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then doCreatureSetStorage(cid, configRunEvent.storages.player, -1) doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) end end doBroadcastMessage('Run Event hasn\'t started beacuse there were not enough players.') end doSetStorage(configRunEvent.storages.joining, -1) end function doCountPlayersRunEvent() local x = 0 for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then x = x + 1 end end return x end function doStartCountingRunEvent(x) if configRunEvent.delayTime-x > 0 then doBroadcastMessage('Run Event is going to start in '..configRunEvent.delayTime-x..' minutes. You can join to the event by saying "!run join".') addEvent(doStartCountingRunEvent, 60*1000, x+1) end end function doCheckSpeedRunEvent() if doCountPlayersRunEvent() > 0 then addEvent(doCheckSpeedRunEvent, 1000) end for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then if getCreatureSpeed(cid) ~= configRunEvent.players.speed then doChangeSpeed(cid, (getCreatureSpeed(cid) < configRunEvent.players.speed and configRunEvent.players.speed - getCreatureSpeed(cid) or getCreatureSpeed(cid) > configRunEvent.players.speed and - (getCreatureSpeed(cid) - configRunEvent.players.speed))) end end end end ]]> </lib> <talkaction words="!run" event="script"> <![CDATA[ domodlib("config_run_event") function onSay(cid, words, param) if getStorage(configRunEvent.storages.joining) ~= 1 then return doPlayerSendCancel(cid, 'The Run Event hasn\'t started yet.') elseif param == '' then return doPlayerSendCancel(cid, 'Command param required (say: "!run join" or "!run leave.").') elseif getPlayerLevel(cid) < configRunEvent.players.minLevel then return doPlayerSendCancel(cid, 'You can\'t join to the event if you don\'t have a require '..configRunEvent.players.minLevel..' level.') elseif getTileInfo(getThingPos(cid)).protection ~= true then return doPlayerSendCancel(cid, 'You can\'t join to the event if you aren\'t in protection zone.') elseif exhaustion.check(cid, configRunEvent.storages.exhaust) ~= false then return doPlayerSendCancel(cid, 'You must wait '..exhaustion.get(cid, configRunEvent.storages.exhaust)..' seconds to use this command again.') end if param == 'join' then if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then return doPlayerSendCancel(cid, 'You have arleady joined to event. Wait patiently for start.') elseif doCountPlayersRunEvent() == configRunEvent.players.max then return doPlayerSendCancel(cid, 'Max players in the event have been reached.') end doCreatureSetNoMove(cid, true) doPlayerPopupFYI(cid, configRunEvent.text) doCreatureSetStorage(cid, configRunEvent.storages.player, 1) doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1)) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have joined to Run Event. You can\'t move until event don\'t start. Wait patiently for the event start.') doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have joined to Run Event.') elseif param == 'leave' then if getCreatureStorage(cid, configRunEvent.storages.player) <= 0 then return doPlayerSendCancel(cid, 'You can\'t leave from the event if you don\'t join.') end doCreatureSetNoMove(cid, false) doCreatureSetStorage(cid, configRunEvent.storages.player, -1) doRemoveCondition(cid, CONDITION_INFIGHT) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have left from the Run Event.') end exhaustion.set(cid, configRunEvent.storages.exhaust, 5) return true end ]]> </talkaction> <talkaction words="!startrun" access="5" event="script"> <![CDATA[ domodlib("config_run_event") domodlib("lib_run_event") function onSay(cid, words, param) doSetStorage(configRunEvent.storages.joining, 1) addEvent(doStartEventRun, configRunEvent.delayTime * 60 * 1000) doStartCountingRunEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then doCreatureSetStorage(pid, configRunEvent.storages.player, -1) doPlayerSetGroupId(pid, getCreatureStorage(pid, configRunEvent.storages.group)) doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end return true end ]]> </talkaction> <movement type="StepIn" actionid="5467" event="script"> <![CDATA[ domodlib("config_run_event") function onStepIn(cid, item, position) if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then local prize = math.random(#configRunEvent.rewards) doCreatureSetStorage(cid, configRunEvent.storages.player, -1) doPlayerAddItem(cid, configRunEvent.rewards[prize], 1) doChangeSpeed(cid, getCreatureBaseSpeed(cid) - configRunEvent.players.speed) doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group))) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true) doBroadcastMessage('Run Event has finished. The winner is '..getCreatureName(cid)..'.') doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You are winner. You have won '..getItemNameById(configRunEvent.rewards[prize])..'.') db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Run\", \"" .. getCreatureName(cid) .. "\", \"" .. getItemNameById(configRunEvent.rewards[prize]) .. "\", " .. getStorage(configRunEvent.storages.countEvent) ..");") doSetStorage(configRunEvent.storages.countEvent, getStorage(configRunEvent.storages.countEvent) + 1) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then doCreatureSetStorage(pid, configRunEvent.storages.player, -1) doPlayerSetGroupId(pid, math.max(1, getCreatureStorage(pid, configRunEvent.storages.group))) doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) doPlayerSendTextMessage(pid, MESSAGE_EVENT_ADVANCE, 'You loss.') end end end return true end ]]> </movement> <globalevent name="Run_Event_Days" interval="1000" event="script"> <![CDATA[ domodlib("config_run_event") domodlib("lib_run_event") local daysOpen = {} for k, v in pairs(configRunEvent.days) do table.insert(daysOpen, k) end function onThink(interval) if isInArray(daysOpen, os.date("%A")) then if isInArray(configRunEvent.days[os.date("%A")], os.date("%X", os.time())) then if getStorage(configRunEvent.storages.joining) ~= 1 then doSetStorage(configRunEvent.storages.joining, 1) addEvent(doStartEventRun, configRunEvent.delayTime * 60 * 1000) doStartCountingRunEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configRunEvent.storages.player) > 0 then doCreatureSetStorage(pid, configRunEvent.storages.player, -1) doPlayerSetGroupId(pid, math.max(1, getCreatureStorage(pid, configRunEvent.storages.group))) doChangeSpeed(pid, getCreatureBaseSpeed(pid) - configRunEvent.players.speed) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end end end end return true end ]]> </globalevent> <event type="login" name="Run_Event_Login" event="script"> <![CDATA[ domodlib("config_run_event") function onLogin(cid) if getCreatureStorage(cid, configRunEvent.storages.player) > 0 then doCreatureSetStorage(cid, configRunEvent.storages.player, -1) doPlayerSetGroupId(cid, math.max(1, getCreatureStorage(cid, configRunEvent.storages.group))) doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true) end return true end ]]> </event> <globalevent name="Run_Event_Start" type="startup" event="script"> <![CDATA[ domodlib("config_run_event") function onStartup() doSetStorage(configRunEvent.storages.joining, -1) return true end ]]> </globalevent> </mod> Executem essa QUERY na sua DataBase CREATE TABLE `events` ( `event_name` varchar(255) NOT NULL, `winner_name` varchar(255) NOT NULL, `won_item` varchar(255) NOT NULL, `time_win` varchar(256) NOT NULL, PRIMARY KEY (`event_name`) ); No final do mapa para marcar o vencedor você marque um ActionID - 5467 no piso final. Não dou suporte ! Mapa Link1 ponto -
Object Builder
1 pontoObject Builder é o programa usado para editar itens, outfits, efeitos e mísseis no cliente. Ele edita e compila os arquivos dat e spr. (Object Builder) Versões suportadas:7.10 - 10.41 Download: Adobe AIR Object Builder 0.3.4 Scan ___________________________ Sources GitHub1 ponto
-
[GlobalEvents] ServeSave - Shutdown/Automático
[GlobalEvents] ServeSave - Shutdown/Automático
premii reagiu a Natanael Beckman por uma resposta no tópico
1 pontoGalera é um script muito simples, porém pra mim é muito ÚTIL. Abra a pasta data/globalevents/scripts crie um arquivo .lua com o nome GlobalSave.lua, em seguida adicone o code: function prepareShutdown(minutes) if(minutes <= 0) then doSetGameState(GAMESTATE_SHUTDOWN) return false end if(minutes == 1) then doBroadcastMessage("Server is going down in " .. minutes .. " minute for global save, please log out now!") elseif(minutes <= 3) then doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save, please log out.") else doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save.") end shutdownEvent = addEvent(prepareShutdown, 60000, minutes - 1) return true end function onTime() return prepareShutdown(5) -- Quantos minutos pra executar o ServeSave. end Ajustes: Quando quiser modificar os minutos altere: -return prepareShutdown(5) - (5) = 5 minutos, eu recomendo no mínimo 5 minutos, em outras palavras não mexa. Em globalevents.xml adicione a tag seguinte: <globalevent name="GlobalSave" time="05:30" event="script" value="GlobalSave.lua"/> No meu ServeSave é feito as 05:30 da manhã, modifique pro horário desejado! Em config.lua verifique essa regra: Se tiver TRUE deixa, assim ele fecha o .exe se não tiver no seu config.lua não tem problema closeInstanceOnShutdown = true - - - Esse tutorial é só isso, clique em GOSTEI, e comente no tópico, muito obrigado! -------------------------------------------------------------------------------------------------------------------------------------------------------- AUTO RESTART -------------------------------------------------------------------------------------------------------------------------------------------------------- Pra você que utiliza Windows esse é perfeito: Dezon OT Admin [restarter] Pra você que utiliza Linux: Baixe esse arquivo, TFS.SH, bote dentro da pasta do seu OT. Esse arquivo está configurado pra abrir outro arquivo chamado tfs caso o seu seja outro nome mude pra esse, tfs. Sempre que for abrir seu OT execute esse comando ./tfs.sh& e assim toda vez que o OT cair ele renicia automaticamente.1 ponto -
Agarre sua vida | OTC
1 pontoCria 3 barras de Hp, Mp e Xp, onde você pode mover e deixar elas onde quiser. Nome: Health Bar Descrição: Nova health bar Autor: Eduardo Vicente (Banana Fight) Versão 1.0 Features: Cria 3 barras de Hp, Mp e Xp, onde você pode mover e deixar elas onde quiser. Download https://mega.co.nz/#...IhBiUK8VkYxEip0 Instalação Extraia a pasta dentro de otclient-master\Modules1 ponto
-
[9.44] Global Compacto EddyHavoc
[9.44] Global Compacto EddyHavoc
eliasferro reagiu a EddyHavoc por uma resposta no tópico
1 pontoGlobal Compacto EddyHavoc Olá galerinha do TibiaKing to trazendo um 9.44 Global Compacto, por favor se alguem for postar em outro fórum quero os meus créditos. Servidor: Mapa Global Compacto versão 9.44 cidades: Carlin Thais Port Hope Ankrahmarum Svargrond Edron Npc's da cidade igual global e alguns editados. Sistema de Addon igual a do Global Teleportes para hunt's + de 60 no total Sistema [VIP] Distro editado por mim: EddyHavoc E tem muitooo mais coisa se tem que baixa isso é um espetaculo. Uma imagem para curiosidade: Download: http://www.4shared.com/rar/4BW-fVRC/Global_Compacto_944_by_EddyHav.html Scan: Créditos: EddyHavoc (Atualizações e versão 9.44) Soldoran (Servidor 8.60) Gostou ? Ajudei ? +REP1 ponto -
[8.60] Distro 0.4 LINUX [CAST]
1 pontoOlá galera, vou postar a source compilada desse tópico: AQUI Alguns amigos meus de skype estão pedindo e não conseguem compilar, então vou postar já compilada. Adicione enableCast = "true" (no seu config.lua) Obs: só estou postando a DISTRO para LINUX (talkactions, pagina de cast, pegue aqui: AQUI) DOWNLOAD : Link Download. SCAN: VirusTotal Créditos: EU por compilar xD Summ Jamilson Collins Joadson (modificou algo).1 ponto
-
[Spell] Berserker Frenesi
1 pontoOlá pessoal! Pra quem não me conhecia, eu me chamo Aricles. Hoje estarei mostrando uma magia bem legal que fiz a muito tempo atrás! Chamei ela de Frenesi. Vocês podem usar ela no seu OTserver, ou podem usar esse script para criar outra spell parecida! Como funciona: O player dirá as palavras mágicas, e se ele estiver com menos de 60% de sua life, sua velocidade de movimento é aumentada, e seus skills são aumentados em 30%. O jogador gastará 100% de sua mana total, e também gastará 100 de Soul. De onde surgiu a idéia: Eu tenho um servidor em que existem muitas vocações diferenciadas, e uma delas é o Barbarian. Um knight com menos defesa e muito mais ataque. Suas habilidades são muito mais ofensivas e menos defensivas. Como instalar em seu OTSERV!! Ok! Vamos lá? 1- Abra a sua pasta SPELLS, que fica dentro da pasta DATA do seu servidor. 2- Abre o arquivo chamado spells.xml (Aconselho que use o Notepad++ para isto, ou então o bloco de notas. 3- Adicione esta tag abaixo! (ATENÇÃO, NÃO INTERROMPA O SCRIPT DE OUTRA SPELL. (DEPOIS DE ESTAR ESCRITO </instant> PULE UMA LINHA E ADICIONE A TAG) 4- Editar a spell, de acordo com seu gosto, e de acordo com seu server. Como? Vou explicar para quem não sabe. <instant -- Inicio da TAG! name="Frenesi" -- Entre aspas está, qual será o nome da sua spell. words="Utito mas tempo" -- Palavras mágicas que serão ditas para ativa-la! lvl="80" -- Level para usá-la (DÃÃÃÃÃ Não me diga...) manapercent="100" -- Porcentagem da mana que será gasta. ( Se quiser número fixo, deixe apenas mana="quanto de mana vc quer que gaste") soul="100" -- Quanto de Soul será gasto prem="0" -- Precisa ser premium? (1= sim 0=não) aggressive="0" --A magia vai ser agressiva? (Se vc colocar que sim, o player não poderá usar em PZ por exemplo. selftarget="1" --Significa que o alvo será ele mesmo! exhaustion="2000" -- Quanto tempo o player ficará exausted depois de usar a magia? (1000 = 1 segundo) needlearn="0" --Precisa aprender com algum npc ou item? Se vc colocar 0, o player só pega o level necessário e usa a spell event="script" value="support/frenesi.lua"> --event é para dizer que vc vai tipo "falar algo", e logo em seguida aonde está o script da spell (Vide abaixo) <vocation id="8"/> -- Qual o ID da vocação que poderá usar a spell? No meu caso, o Barbarian é 8, mas o padrão é: 1-Sorc 2-Druid 3-Pala 4-Kina 5- Master Sorcerer 6- Elder Druid 7- Royal Pala 8- Elite Knight </instant> -- Término da TAG. 5 - Muito bem pessoal! Agora estamos na PENúltima parte! Você precisa adicionar o SCRIPT naquele local que a TAG que vc fez pediu! No nosso caso ali em cima, coloquei que está em "support/frenesi.lua" Então abra um arquivo chamado frenesi.lua. dentro da pasta support, que fica dentro da pasta spells/scripts 6- Dentro do arquivo frenesi.lua deverá estar escrito o seguinte: 7- No lugar de time, e skills, lá em cima, você escolherá o seguinte: time = tempo em segundos de quanto tempo o player ficará neste estado de frenesi. ( 60*1000 significa 60 vezes 1000 que é um minuto!) skills = Quantos porcento de skills ele vai ficar. OBS: Recomendo que iniciantes não mecham em mais nada, e os mais experientes com certeza vão entender meu script. Então nada mais será necessário ser falado aqui. Galera do TIBIA KING, muito obrigado por estarem online, espero que vocês possam também me receber nesta família que está a cada dia mais crescendo mais e mais. Dúvidas ou sugestões de melhora do script, favor postar abaixo! EDIT: Desculpem qualquer coisa, este é meu primeiro post aqui...1 ponto
-
Baiak By Jobson v3
1 ponto• Baiak By Jobson V3 - Tibiaking.com • Bom é meu primeiro post, Então Desculpa Qualquer coisa • Cidades: ├ City do Baiak (Totalmente Reformulada.) ├ Desert City ├ Hydraland ├ Yahalar (Cidade VIP) └ Thais ------------------------------------------------------------------------------------------------------------------------------------------------- • O Que Contêm no Servidor: ├ Player Online Spoof(CONFIGURE NO CONFIG.LUA!!) ├ Eventos Exclusivos ├DotA ├ WoE ├Fast Attack Por Fist Skill ├ Vende Char ├ Novos Eventos ├ Coliseum ├ Zombie Event ├ Iridian Totalmente editada ( Mais de 60 Tps Vip, Quests Vips Exclusivas e mais..) ├ City do Baiak Totalmente Reformulada. ├ Novos Teleports e Quests ├ Novos NPC'S ├ War System (Funcinal 100%) ├Evento Double Exp (Automatico) ├ War Castle ├Sistema Clone ├Sistema De Vende Character No Jogo ├Sistema De Mensagens Offline ├Sistema De Leilão(Com GOD) ├Sistema Recompense Kill(Ganha Dinheiro Ao Mata Pk) └ TFS 0.4 Com Varias Funções(EDITADO E COMPILADO POR MIM) • Imagens : • Lista Das Principais Quests (Todas Funcionando 100%): ├ The Annihilator Quest ├ Demon Helmet Quest ├ Firewalker Boots Quest ├ The Inquisition Quest ├ The Pits of Inferno Quest ├ The Demon Oak Quest └ In Service of Yalahar Quest • Modificações Adicionadas: ├ Reformulado todos eventos agora sem Bugs ├ Adicionado novos Teleportes + de 60 ├ Adicionado novas quests todas funcionando 100% ├ Mais de 10 Items Vips Configurados ├ Website completo + Database que sera postado nesse tópico ├ muito mais só você baixando para ver!!! └ Entre muitas outras coisas, Abaixe e confira ! • Obs¹: Para Abrir Evento War: Comandos: /start-war /end-war •Obs²:Sistema De Leilão Usando o comando /leilao id do item, quantidade , Dinheiro Inicial ex: /leilao 2494 , 1, 30000 •Creditos:• Download Server: Database: Scan:1 ponto
-
nenhum ot nao abre no vps
nenhum ot nao abre no vps
danielvilhena reagiu a Alidev por uma resposta no tópico
1 pontoHm, como não apresenta nenhum erro, acho que possivelmente deve ser problema do windows, use linux, bem mais estável e mais seguro ! se precisar de ajuda me manda pm que te ajudo a passar pra linux o seu servidor.1 ponto -
Lista de Sprites úteis
Lista de Sprites úteis
batatinhalol reagiu a Cat por uma resposta no tópico
1 ponto1 ponto- (Resolvido)Onde encontro as quest's do meu servidor?
Script pra pisar no piso só se tiver tal level: local levelMin = 150 --LEVEL NECESSÁRIO function onStepIn(cid, pos) if(getPlayerLevel(cid)) <= levelMin then doPlayerSendCancel(cid,"Para acessar essa área é necessário ter level "..levelMin..".") end end Sobre os baús, coloca essa tag no actions.xml: <action actionid="37001" event="script" value="questbaus.lua"/> <action actionid="37002" event="script" value="questbaus.lua"/> <action actionid="37003" event="script" value="questbaus.lua"/> Agora cria um arquivo chamado questbaus.lua dentro da pasta scripts: --Script by Danihcv to TibiaKing.com local item1 = 2148 --ID DO ITEM QUE GANHA NO BAÚ 1 local item2 = 2164 --ID DO ITEM QUE GANHA NO BAÚ 2 local item3 = 9693 --ID DO ITEM QUE GANHA NO BAÚ 3 function onUse(cid, item, fromPosition, itemEx, toPosition) if item.uid == 37001 then queststatus = getPlayerStorageValue(cid, 37004) if queststatus < 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found "..getItemNameById(item1)..".") doPlayerAddItem(cid, item1, 1) doPlayerSetStorageValue(cid, 37004, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end elseif item.uid == 37002 then queststatus = getPlayerStorageValue(cid, 37004) if queststatus < 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found "..getItemNameById(item2)..".") doPlayerAddItem(cid, item2, 1) doPlayerSetStorageValue(cid, 37004, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end elseif item.uid == 37003 then queststatus = getPlayerStorageValue(cid, 37004) if queststatus < 1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have found "..getItemNameById(item3)..".") doPlayerAddItem(cid, item3, 1) doPlayerSetStorageValue(cid, 37004, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "It is empty.") end end return TRUE end Agora crie três baús pelo editor de mapa, e no baú 1 vc coloca o action ID 37001, no baú 2 vc coloca o action ID 37002, no baú 3 vc coloca o action ID 37003.1 ponto- Dúvidas no config.LUA
1 pontoAqui estão os significados de algumas que eu sei :1 ponto- Dúvidas no config.LUA
Dúvidas no config.LUA
Sematico reagiu a Zanicatsky por uma resposta no tópico
1 pontoOlá, boa tarde.. cara.. nao entendi, qual é sua duvida??? autoBanishUnknownBytes = false (auto ban por quantidade de kills) huntingDuration = 60 * 1000 (tempo de pz apos matar X bicho) noShareExpSummonMonster = false (divisao de xp com seu summon) formulaLevel = 5.0 (formula do gain lvl) formulaMagic = 1.0 (formula do gain mp) rateStaminaThresholdGain = 12 (ganho te stamina) generateAccountSalt = false (gerar acc automaticamente) (me descupe se postei algo errado, mais é o'q a logica diz..)1 ponto- Otserver Criação
1 pontohttp://www.tibiaking.com/forum/topic/28482-860-tfs-04-rev-3777-sem-bugs/ Esse ae!1 ponto- (Resolvido)retirar account manager
(Resolvido)retirar account manager
danielvilhena reagiu a eunaosei123 por uma resposta no tópico
1 pontoNão é preciso isso ,só abri a pasta do teu ot tem la no config lua nessa parte accountManager = true namelockManager = true newPlayerChooseVoc = true newPlayerSpawnPosX = 1095 newPlayerSpawnPosY = 1061 newPlayerSpawnPosZ = 8 newPlayerTownId = 1 newPlayerLevel = 120 newPlayerMagicLevel = 0 generateAccountNumber = false ai vc deixa desse jeito accountManager = false namelockManager = true newPlayerChooseVoc = true newPlayerSpawnPosX = 0 newPlayerSpawnPosY = 0 newPlayerSpawnPosZ = 0 newPlayerTownId = 1 newPlayerLevel = 120 newPlayerMagicLevel = 0 generateAccountNumber = true Muda só isso .Ajudei REP+1 ponto- Bug na importação do mapa
Bug na importação do mapa
popoff reagiu a luanluciano93 por uma resposta no tópico
1 pontoO 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: "OTServ → Mapping → Concursos e Eventos de Mapping" Para: "OTServ → Suporte OTServ → Suporte de Mapping"1 ponto- (Resolvido)Upar tibia direto no webhost
(Resolvido)Upar tibia direto no webhost
danielvilhena reagiu a luanluciano93 por uma resposta no tópico
1 pontoUsa o acesso remoto, tem opção de transferência de arquivo!1 ponto- Bug na importação do mapa
1 pontoEu tive um problema smelhante no RME, a solução foi sair procurando versões do RME que suportassem a versão do meu mapa, demorou mas achei um que funcionou perfeito. http://www.tibiaking.com/forum/topic/22469-remeres-map-editor/1 ponto- Outfits
Outfits
Schiffert reagiu a xWhiteWolf por uma resposta no tópico
1 pontodesculpa a demora pra responder amigo: Se você quiser que a nobleman seja por quest, faça assim: <outfit id="5" premium="yes"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> /\ nobleman normal (igual ao seu script) <outfit id="5" premium="yes" storageId="1415" storageValue="1"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> nobleman editada.. somente players que tenham o storage 1415 com valor 1 conseguirão utilizar essa outfit1 ponto- Magia que Empurra
Magia que Empurra
samlecter reagiu a xWhiteWolf por uma resposta no tópico
1 pontoremove isso do script setCombatParam(combat, COMBAT_PARAM_EFFECT, 2) agora procura essa parte: if getPlayerLookDir(cid) == 0 then signal = {-1,1,1,2} elseif getPlayerLookDir(cid) == 1 then signal = {1,-1,2,1} elseif getPlayerLookDir(cid) == 2 then signal = {1,-1,1,2} else signal = {-1,1,2,1} end else signal = {-1,1,1,2} end aqui ele tá pegando a direção do player... como vc quer que a magia solte um efeito na frente dele é só adicionar posições de acordo com a direção que ele tá olhando, sendo que NORTH = 0 EAST = 1 SOUTH = 2 WEST = 3 local pos = getThingPos(uid) então se a direção que ele ta olhando for 0, o SQM na frente dele vai ser effectpos = {x=pos.x+1,y=pos.y,z=pos.z} se for 1 a posição será effectpos = {x=pos.x,y=pos.y+1,z=pos.z} se for 2 a posição será effectpos = {x=pos.x-1,y=pos.y,z=pos.z} se for 3, a posição será effectpos = {x=pos.x,y=pos.y-1,z=pos.z} daí é só colocar pra mandar o magic effect que vc quiser na posição effectpos.1 ponto- (Resolvido){Pedido} Modificações em Scripts
(Resolvido){Pedido} Modificações em Scripts
NathanAmaro reagiu a xWhiteWolf por uma resposta no tópico
1 ponto1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não possui dardos.") return false end muda o return false pra return true. 2) -- CONFIGURAÇÕESporcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura a vida e solta os efeitos 30 a 33 -- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantmana = 10 -- porcentagem da mana máxima que cada cura irá curar. (No caso, irá curar 10% da mana máxima cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(30,33) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureMana(cid)<getCreatureMaxMana(cid)) then doCreatureAddMana(cid, getCreatureMaxMana(cid)/quantmana) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ cura mana e solta os efeitos 30 a 33 (se quiser muda no math.random -- CONFIGURAÇÕES porcentagem = 40 -- chance de dar haste em cada volta da aura, em porcentagem tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) efeitocura = 49 -- número do efeito quando der haste (efeito de posição fixa, pode ser identificado com /z no jogo) duration = 10 -- segundos que vai durar o haste da aura. (coloque um tempo baixo porque ela vai ficar se repetindo. local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, duration*1000) setConditionFormula(condition, 1.7, -36, 1.7, -36) -- Função que chama a aura function efeitosAura(i,tm,cid) tipoaura = math.random(12,14) -- número do efeito da aura (efeito normal, /z do jogo) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureCondition(cid, condition) == false) then doAddCondition(cid, condition) if(i<=8 and i>1) then doSendMagicEffect(atual, tipoaura) else doSendMagicEffect(atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendMagicEffect(atual, tipoaura) elseif(i<8) then doSendMagicEffect(atual, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end /\ da velocidade a cada rodada de aura por 10 segundos.. os efeitos são um math.random de 12 até 14 (12, 13, 14)1 ponto- #15 - Evento: Qual sua história mais engraçada no Tibia? - Resultado
parabens mano, ve se aproveita :v1 ponto- (Resolvido)problemas com runas (item)
(Resolvido)problemas com runas (item)
Drafenous reagiu a xWhiteWolf por uma resposta no tópico
1 pontoaparentemente você migrou de server e os items.xml estavam configurados para a versão antiga. [25/05/2014 18:54:28] [Warning - Items::loadFromXml] Unknown type rune [25/05/2014 18:54:29] [Warning - Items::loadFromXml] Unknown key value fieldAbsorbPercentFire dá CTRL+F no items.xml e muda todos os items que tiverem type = rune e procura fieldAbsorbPercentFire << isso tá errado, dá ctlr F em PercentFire e você vai achar qual é o jeito certo de se colocar e muda nesse daí q tá errado.1 ponto- Erro OnAttack
Erro OnAttack
Nextbr reagiu a xWhiteWolf por uma resposta no tópico
1 pontofunction onAttack(cid, target) if(not isCreature(cid)) then return false end if not isSummon(target) and not isMonster (target) and (isPlayer (target)) then if getCreatureSummons(target) ~= 0 then doMonsterSetTarget(cid, getCreatureSummons(target)[1]) end end return true end PS: use onCombat ao invés de onAttack porque daí se o monstro usar uma magia em área vai te acertar.1 ponto- (Resolvido)sprites pokemon
1 pontoVc tem que baixar o object builder + atualizado e abrir com o mode Transparency1 ponto- corpo do pokemon morto n aparece
1 pontoOlhe esse ID do Object Builder não é ID do Corpse correto vc vai ter que pega esse ID do object builder e criar um ID no Itemeditor ai depois disso que vc vai no items.xml como o novo ID e adiciona Lá veja esse video aii:: https://www.youtube.com/watch?v=4duTACgj28k1 ponto- cliente sprites de corpo
1 pontoMim mande uma printe de vc fazendo o ID do corpse? acho que vc não está Botando o Locktype certo1 ponto- Lista de Sprites úteis
1 ponto1 ponto- Lista de Sprites úteis
1 ponto1 ponto- NPC Dicer
NPC Dicer
Ariius reagiu a xWhiteWolf por uma resposta no tópico
1 pontogostei, agora entendi oque ele quis dizer mas acho q vc deveria colocar um if pra verificar uma quantidade máxima e após ganhar, a quantidade máxima (para aquele player) se tornasse igual ao maior valor já ganho. Podia começar com 10k e a cada vez que ganhasse ele retornasse o valor do premio e salvasse num storage, daí se o valor do storage fosse maior que 10k, o máximo que ele poderia apostar é igual ao valor do storage.1 ponto- SELLING 2 CHAR DICE SOFTWARE ONLY FOR 1 PLAYER
SELLING 2 CHAR DICE SOFTWARE ONLY FOR 1 PLAYER
EdsonJunior reagiu a Lordofmage por uma resposta no tópico
-1 pontosHELLO, I'm SELLING 2 CHAR DICE SCRIPT ( REAL DICE ) 2 chars for 60$ or 6kk in aurora ONLY FOR 1 PLAYER Skype:Mohamedlordy PRICE 6kk IN aurora or 60$ paypal Best Regards.-1 pontosLíderes está configurado para São Paulo/GMT-03:00 - (Resolvido)Onde encontro as quest's do meu servidor?
Informação Importante
Confirmação de Termo