Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 09/23/13 em todas áreas
-
Bom, apenas mais um sistema pra ajuda o povo que esta criando um ot Pokemon e usando o OTC GOSTARIA DE FALAR QUE TESTEI NO SERVER PDA BY SLICER primeiro vamos as edições no SERVER: Pronto, no server é isso... Agora no seu OTC, na pasta modules/game_skills: OBS: É APENAS A PARTE QUE ESTA EM VERMELHO NA IMAGEM ACIMA2 pontos
-
OUTLANDS compativeis PDA propias.
SkyDarkyes e um outro reagiu a Mykez por um tópico no fórum
Olá pessoal estava fazendo um back up pra formatar meu computador e achei essas outlands que eu fiz pra uma antiga equipe que eu estava que veio a falir. estou com preguiça de postar prints mais estão boas e grandes. Info- Elas já estão ligadas e contem 7 Outlands nelas dos elementos Fantasmas,Psychicos,Agua,Voadores,Lutadores,Eletricos,Normal,é pokémons do tipo Planta. Atenção se quiser critica critica se quiser elogiar elogia,mais não vem cobrar Prints pois estou com preguiça de abrir o Rme e pegar umas prints estão muito boas e algumas estão ligadas umas com as outras o CP Delas já esta feito tbm e Duas delas estão base PXG so que com algumas edições. Download- http://www.4shared.com/rar/5sgbgfbB/outlands.html? Bom proveito delas XD.2 pontos -
DarkXPoke (DXP)
ShinySprite e um outro reagiu a StyloMaldoso por um tópico no fórum
fico legal, parabéns OBS: gostei dos abra matando o buzz ;32 pontos -
Houses commands (buy e tal)
Roksas e um outro reagiu a KuchikiKenpachi por uma questão
Talkactions.xml cola essas tags:2 pontos -
Magia Mystic Defense
Alexclusive e um outro reagiu a Snowsz por uma questão
@ikaroangelo não use letras muito grandes, podem ser consideradas spam. @arthurabreu57 <instant name="Mystic Defense" words="Mystic Defense" lvl="15" mana="100" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="mystic defense.lua"> </instant> copie e cole qualquer arquivo lua em data/spells/scripts e renomeie para mystic defense ficando assim: mystic defense.lua remova tudo que tem dentro e cole isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_MANASHIELD) setConditionParam(condition, CONDITION_PARAM_TICKS, 500000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end2 pontos -
Pedido atendido: Sistema de Quartel General2 pontos
-
Últimas atualizações: 16/12/2013: [ATUALIZADO 12/04/2014] Introdução: Eai gente, vcs conhecem o evento Blood Castle que tem no jogo MU? Então, eu resolvi criar esse evento para OpenTibia e ficou bem legal Informações: OBS: NÃO é obrigatório o uso do mapa que vou por aqui, ele serve somente para exemplo. #Dica: Acho que fica legal o premio do evento ser um item que da double exp por um tempo. Atualização: Resolvi refazer o código, para facilitar a instalação e melhorar o funcionamento do evento. O que mudou? Instalando o evento: Lib: Movements: Creaturescripts: Monsters: O evento pode acontecer de duas maneiras: automática ou manualmente. Vou por as duas possibilidades: Automático: Manual: Como Configurar: * Se você for colocar, dentro do evento, um teleporte para as pessoas que não quiserem mais participar, coloque o Action ID 9371 nele. * Lembre-se de por NO-LOGOUT tool e NO-PVP tool em toda área do evento!! Todas as demais explicações estão na lib, mas vou demonstrar como configurar os mais "confusos". No modo automático, você configura de quanto em quanto o tempo o evento vai acontecer. Nessa tag: <globalevent name="Blood Castle" interval="3600" event="script" value="BloodGlobalEvent.lua"/> Aqui está 3600 segundos, ou seja, 1 hora. * Se seu servidor for em milisegundos, multiplique o número por 1000, assim: 3600 segundos * 1000 = 3600000 milisegundos = 1 hora. No modo manual, para iniciar o evento, basta usar a talkaction /blood-start com seu god. Em posGuarda, vc deve colocar a posicao do Guarda do Portao, como mostrado abaixo: As posPedras são onde ficam as pedras que tampam a passagem enquanto o evento não esta aberto, conforme na imagem abaixo: Em estátua, vc deve colocar a posição em que o arcanjo vai ser criado, conforme na imagem abaixo: Nas posParedes, vc deve por a posição das paredes que bloqueiam a entrada do castelo e que são removidas quando o guarda morre, conforme abaixo: Em fromPos e toPos, você vai por o canto superior esquerdo e o canto inferior direito do mapa do seu evento, respectivamente. Dessa maneira: As outras configurações eu acredito que já estejam bem explicadas. Espero que gostem dessa nova versão. Recomendo a todos que já usam o evento, reinstalar com essa nova versão. Qualquer dúvida ou bug, postem que irei responder. Download do mapa exemplo: Blood Castle.rar1 ponto
-
Spell's bar por voc
PostadorHunter reagiu a garep por um tópico no fórum
Muita gente falando e pedindo spell's bar por voc e n tem opcode instalado e não sabe como instala ai vai um script, com ele da pra fazer vários.... Script: Client > local spelllist = { ['Death Strike'] = {id = 87, words = 'exori mort', exhaustion = 2000, premium = true, type = 'Instant', icon = 'deathstrike', mana = 20, level = 16, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Flame Strike'] = {id = 89, words = 'exori flam', exhaustion = 2000, premium = true, type = 'Instant', icon = 'flamestrike', mana = 20, level = 14, soul = 0, group = {[1] = 2000}, vocations = {1, 2, 5, 6}}, ['Strong Flame Strike'] = {id = 150, words = 'exori gran flam', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongflamestrike', mana = 60, level = 70, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {1, 5}}, } local VOCID = 1 local spells = {} local lado = 'vertical' local sbw -- window widget local sbb -- button ./\ widget local spellBarWindow -- UIWindow local exhsaustionTotal = 1100 local hideLevel = false -- os que nao tem level, vai mostrar? true = nao, false = sim function init() sbb = modules.client_topmenu.addRightGameToggleButton('sbb', 'Spell Bar' , 'SpellBar.png', toggle) sbb:setWidth(16) sbw = g_ui.displayUI('SpellBar') sbw:move(10,50) g_mouse.bindPress(sbw, function() createMenu() end, MouseRightButton) sbw:hide() connect(g_game, 'onTalk', mensagemEnviada) connect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end }) connect(LocalPlayer, { onLevelChange = onLevelChange }) connect(g_game, 'onTextMessage', getVocation) for inst,values in pairs(spelllist) do if values.type == 'Instant' then -- depois vou fazer mais tipos.. if g_game.getProtocolVersion() >= 950 then -- Vocation is only send in newer clients if table.find(values.vocations, g_game.getLocalPlayer():getVocation()) then local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion} table.insert(spells,inside) end else local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion} table.insert(spells,inside) end end end table.sort(spells, function(a, b) return (a.lvl < b.lvl) end) end function onLevelChange(localPlayer, value, percent) getSpells(spells) end function mensagemEnviada(name, level, mode, text, channelId, pos) if not g_game.isOnline() then return end if g_game.getLocalPlayer():getName() ~= name then return end for i = 1,#spells do if spells[i].words:lower() == text:lower() then startDownDelay(i) break end end end function terminate() sbw:destroy() sbb:destroy() disconnect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end }) disconnect(g_game, 'onTalk', mensagemEnviada) disconnect(LocalPlayer, { onLevelChange = onLevelChange }) disconnect(g_game, 'onTextMessage', getVocation) end function getVocation(mode, text) local t = string.explode(text, " ") if not g_game.isOnline() then return end if mode == MessageModes.Failure then if text:find("#getVoc#") then if tonumber(t[2]) == VOCID then sbb:setOn(true) sbb:show() sbw:show() getSpells(spells) level = g_game.getLocalPlayer():getLevel() else sbb:setOn(false) sbb:hide() sbw:hide() end end end end function toggle() if sbb:isOn() then sbw:hide() sbb:setOn(false) else sbw:show() getSpells(spells) sbb:setOn(true) level = g_game.getLocalPlayer():getLevel() end end function createMenu() local menu = g_ui.createWidget('PopupMenu') if lado == 'horizontal' then menu:addOption('Set Vertical', function() lado = 'vertical' getSpells(spells) end) else menu:addOption('Set Horizontal',function() lado = 'horizontal' getSpells(spells) end) end if hideLevel == false then menu:addOption('No Level Hide',function() hideLevel = true getSpells(spells) end) else menu:addOption('No Level Show',function() hideLevel = false getSpells(spells) end) end menu:display() end function destruirSpells() for i = 1,100 do if sbw:recursiveGetChildById('spell'..i) == nil then break end sbw:recursiveGetChildById('spell'..i):destroy() sbw:recursiveGetChildById('progress'..i):destroy() end end function getSpells(tabela) destruirSpells() spellBarWindow = sbw:recursiveGetChildById('mainWindow') local player = g_game.getLocalPlayer() local valor = #tabela local width = 38 local height = 38 if not player then return end for i = 1,#tabela do if (tabela[i].lvl > player:getLevel()) and hideLevel == true then valor = i - 1 break end if i == #tabela then valor = i end icon = g_ui.createWidget('SpellButton',spellBarWindow) progress = g_ui.createWidget('SpellProgressSpell',spellBarWindow) --icon: icon:setId('spell'..i) local spicon = Spells.getClientId(tabela[i].instantName) icon:setImageSource('/images/game/spells/defaultspells') icon:setImageClip((((spicon -1)%12)*32) .. ' ' .. ((math.ceil(spicon/12)-1)*32) .. ' 32 32') icon:setVisible(true) icon.words = tabela[i].words icon.instantName = tabela[i].instantName icon.lvl = tabela[i].lvl icon.mana = tabela[i].mana icon.exhaustion = tabela[i].exhaustion icon.exhaustionNeeded = 0 icon:setTooltip(tabela[i].words) if lado == 'horizontal' then icon:setMarginTop(3) height = 38 width = (i) * 32 + 2*(i) icon:setMarginLeft((i) * 32 + 2*(i) - 32) else icon:setMarginLeft(3) icon:setMarginTop((i) * 32 + 2*(i) - 32) width = 38 height = (i) * 32 + 2*(i) end --progress: progress:setId('progress'..i) progress:setVisible(true) progress:setPercent(100) progress:setMarginLeft(icon:getMarginLeft()) progress:setMarginTop(icon:getMarginTop()) if player:getLevel() < icon.lvl then progress:setText('L'..icon.lvl) progress:setColor('red') progress:setPercent(0) end if progress:getPercent() == 100 then progress:setText('OK') elseif icon.lvl < player:getLevel() then progress:setText(progress:getPercent()) end progress:setPhantom(true) icon.onClick = function() useSpell(i) end end sbw:setHeight(height) sbw:setWidth(width) spellBarWindow:setSize(sbw:getSize()) end function useSpell(i) local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) local player = g_game.getLocalPlayer() if not player then return end if progress:getPercent() < 100 then return modules.game_textmessage.displayFailureMessage('Wait your delay!') end g_game.talk(spell.words) end function startDownDelay(i) -- aqui vai ficar on onTalk, pra descer só realmente quando a spell sair local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) progress:setPercent(0) progress:setText('0%') progress:setColor('red') spell.exhaustionNeeded = 0 scheduleEvent(function() spellTimeleft(i) end,100) end function spellTimeleft(i) local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) spell.exhaustionNeeded = spell.exhaustionNeeded + 100 if spell.exhaustionNeeded < spell.exhaustion then progress:setPercent(math.ceil(((spell.exhaustionNeeded) * 100)/spell.exhaustion)) progress:setText(progress:getPercent()) progress:setColor('red') else progress:setPercent(100) progress:setText('OK') progress:setColor('green') spell.exhaustionNeeded = 0 return true end scheduleEvent(function() spellTimeleft(i) end,100) end vocID > id da voc, que vai aparecer as spells que no script, exp: kina voc 4 vocID 4 no script deixa so as spells de kina vocID 1 no scirpt deixa so as spells de sorc no serve agora otserv>data>talkactions function onSay(cid, words, param) if not param then return true end doPlayerSendCancel(cid, "#getVoc# ".. getPlayerVocation(cid)) return true end tag: tipo ser for criar spells pra mais voc, tipo 1mod pra cada voc... espero que tenha ficado facil... O script ta bem primitivo mais ja é um lado ai pra quem não tem.... Creditos: DrakyLucas, pois peguei seu mode como base.. Noninhouh. +reps se ajudo... ,1 ponto -
Mostre seu poder
vvdda91 reagiu a BananaFight por um tópico no fórum
Spell bar, uma janela com botões que soltam magias. Nome: Spell Bar Descrição: Atalho para soltam magias. Autor: Eduardo Vicente (Banana Fight) ++ Zeh(Shaykie) Website: www.xtibia.com Versão 2.0 Features: - Solta magias, temporizador para poder usar denovo - Corrigido para deslogar e remover a janela. Novidades Adicionado configuração de level e minimo de mana para usar Download https://mega.co.nz/#...F4-L5lHp6BmFggA Instalação Adicione o Mod, dentro da pasta otclient-master\Mods Como configurar: Criando um novo botão SpellGroupIcon id: ID DO BOTÃO image-source: IMAGEM DO ICONE anchors.top: parent.top anchors.left: parent.left margin-left: 5 SpellProgressSpell id: ID DO CONTADOR anchors.fill: groupIconAttack !tooltip: tr('MENSAGEM QUE APARECE QUANDO DEIXA MOUSE ENCIAM') @onClick: SpellSkill('VALOR DO SCRIPT QUE VAI EXECUTAR') Como Fica SpellGroupIcon id: groupIconSpecial image-source: moves_icon/Special.png anchors.top: parent.top anchors.left: groupIconSupport.right margin-left: 5 SpellProgressSpell id: progressSpellSpecial anchors.fill: groupIconSpecial !tooltip: tr('Special') @onClick: SpellSkill('4') Parte do .Lua Embaixo de: elseif numeskill == '4' then Spell = 'progressSpellSpecial' GrpSpell = 'groupIconSpecial' TimeSpell = 1200 spellText = 'Exori Gran' level = 8 mana = 20 Adicione isso: elseif numeskill == '4' then Spell = 'ID DO CONTADOR' GrpSpell = 'ID DO BOTÃO' TimeSpell = TEMPO PRA USAR DE NOVO spellText = 'MAGIA QUE VAI USAR' level = LEVEL MINIMO mana = MANA MINIMA E pronto, você adicionou um novo botão, não esqueça de ir aumentando o tamanho da janela conforme for adicionando botões.1 ponto -
Char Maker
Noninhouh reagiu a BananaFight por um tópico no fórum
Esse Mod faz com que seja possível criar novos char na sua acc usando apenas o client. OBS: Ele usa Opcode, e com isso só é possível criar char com um personagem online, Porem o sistema é foi totalmente feito para funcionar com um personagem off, então a menos que você consiga editar as source do server, só será possível criar novos personagens na conta com um char logado, Pois os opcodes só funcionam com um char logado. Nome: Char MakerDescrição: Criado de charAutor: Eduardo Vicente (Banana Fight)Website: www.xtibia.com Client Side Client_Entergame/Entergame.lua Procure por: if modules.game_things.isLoaded() thenprotocolLogin:login(G.host, G.port, G.account, G.password) e embaixo adicione: accountName = G.account Client_Entergame/Characterlist.lua procure por : -- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endend E substitua por : -- public functions[function CharacterList.init()connect(g_game, { onLoginError = onGameLoginError })connect(g_game, { onUpdateNeeded = onGameUpdateNeeded })connect(g_game, { onConnectionError = onGameConnectionError })connect(g_game, { onGameStart = CharacterList.destroyLoadBox })connect(g_game, { onLoginWait = onLoginWait })connect(g_game, { onGameEnd = CharacterList.showAgain })if G.characters thenCharacterList.create(G.characters, G.characterAccount)endnewChar = g_ui.displayUI('newchar')newChar:hide()endfunction sendAll()local msg = newChar:getChildById('msg')local name = newChar:getChildById('name'):getText()local sex = newChar:getChildById('sex'):getText()local voc = newChar:getChildById('vocation'):getText()local protocol = g_game.getProtocolGame()local sendSexlocal sendVocif sex == "male" thensendSex = 0elsesendSex = 1endif voc == "Sorcerer" thensendVoc = 1elseif voc == "Druid" thensendVoc = 2elseif voc == "Paladin" thensendVoc = 3elsesendVoc = 4endprotocol:sendExtendedOpcode(152, string.format("%s,%s,%d,%d", accountName, name, sendVoc, sendSex))msg:setColor("green")msg:setText("Character "..name.." Created")end Agora Crie um arquivo com o nome newchar.lua, e adiciona isso dentro : MainWindowid: characterCreator!text: tr('New Char')size: 210 250@onEnter: sendAll()Labelid: labelNametext: Choose your name:color: whitetext-auto-resize: trueanchors.top: parent.topanchors.left: parent.leftmargin-top: 2TextEditid: nameanchors.left: parent.leftanchors.right: parent.rightanchors.top: prev.bottommargin-top: 5Labelid: labelSextext: Chose your sextext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: name.bottommargin-top: 10ComboBoxid: sexanchors.left: parent.leftanchors.top: labelSex.bottommargin-top: 5width: 75options:- Male- FemaleLabelid: labelVocationtext: Chose your vocationtext-auto-resize: truecolor: whiteanchors.left: parent.leftanchors.top: sex.bottommargin-top: 10ComboBoxid: vocationanchors.left: parent.leftanchors.top: labelVocation.bottommargin-top: 5width: 100options:- Knight- Paladin- Sorcerer- DruidLabelid: msgtext-auto-resize: trueanchors.left: parent.leftanchors.top: vocation.bottommargin-top: 20Buttonid: creatChartext: Creat Charactercolor: whiteanchors.left: parent.leftanchors.bottom: parent.bottom@onClick: sendAll()Buttonid: canceltext: Cancelcolor: whiteanchors.left: creatChar.rightanchors.right: parent.rightanchors.bottom: parent.bottommargin-left: 10@onClick: newChar:hide() E no chartacterlist.otui, lá no final você apaga os 2 botões de "cancel" e "ok" e substituto por estes : Buttonid: newChartext: New Charwidth: 64anchors.left: parent.leftanchors.bottom: parent.bottom@onClick: newChar:show()Buttonid: buttonOk!text: tr('Ok')width: 64anchors.left: newChar.rightanchors.right: buttonCancel.leftanchors.bottom: parent.bottommargin-right: 10margin-left: 10@onClick: CharacterList.doLogin()Buttonid: buttonCancel!text: tr('Cancel')width: 64anchors.right: parent.rightanchors.bottom: parent.bottom@onClick: CharacterList.hide(true) Server Side Data/Creaturescritps/scripts crie um arquivo chamado exetendedopcode.lua, e adicione isso dentro : local QUERY = "INSERT INTO `players` VALUES (NULL, '%s', 0, 1, %d, 1, %d, 150, 150, 0, 0, 0, 0, 0, 221, 0, 0, 50, 50, 0, 0, 1, 95, 127, 7, 0, 400, %d, 0, 0, 1, 0, 0, 0, '', 0, 0, 0, 151200000, 2, 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, '');"NEW_ACCOUNT_CHAR = 152function onExtendedOpcode(cid, opcode, buffer)if opcode == NEW_ACCOUNT_CHAR thenlocal info = string.explode(buffer, ",")for a = 1, #info doif tonumber(info[a]) theninfo[a] = tonumber(info[a])endenddb.executeQuery(string.format(QUERY, info[2], getAccountIdByAccount(info[1]), info[3], info[4]))endreturn trueend E dentro do creaturescripts.xml adicione : <event type="extendedopcode" name="ExtendedOpcode" event="script" value="extendedopcode.lua"/> O sistema ainda não esta 100% completo, falta a parte que envia uma mensagem de erro quando o char não é criado, Porem eu não irei atualizar esse sistema pelo fato de só funcionar com char online.1 ponto -
Modificador de attackspeed em Item e/ou skill.
Leon25 reagiu a henriqueberro por um tópico no fórum
Versão: 0.3.6pl1 TFS Função: Adiciona a velocidade de ataque de acordo com uma determinada skill e/ou arma. Autor: henriqueberro (eu). Aviso: A unidade que usamos aqui é o milissegundo (ms). 1ms = 0,001s 1s = 1000ms Instalação em player.cpp, procure a função: uint32_t Player::getAttackSpeed() e substitua ela inteira por: uint32_t Player::getAttackSpeed() { int32_t weaponAttackSpeed = 0; int32_t minimumAttackSpeed = 500; Item* weapon = getWeapon(); if(weapon && weapon->getAttackSpeed() != 0) weaponAttackSpeed = floor ((int)weapon->getAttackSpeed()); // FORMULA int32_t attackSpeed = vocation->getAttackSpeed() - (getSkill(SKILL_CLUB, SKILL_LEVEL) * 20) - weaponAttackSpeed; // CHECA A VELOCIDADE MÍNIMA if (attackSpeed && attackSpeed < minimumAttackSpeed) return minimumAttackSpeed; return attackSpeed; } Explicando Definimos um mínimo de velocidade caso a formula retorne um valor menor que 500, verificamos se a arma tem modificador de velocidade, ou seja, se a tag 'attackspeed' está definida no items.xml e então calculamos e retornamos o total. O total é definido pela seguinte formula: (Velocidade de Ataque da Vocations.xml ) - ( Skill Club * 20 ) - ( Velocidade de Ataque da Tag 'attackspeed' do Items.xml ) Configurações 500 - O Valor mínimo de velocidade de ataque, SKILL_CLUB - A skill que vai modificar a velocidade de ataque. 20 - O multiplicador, como default está definida 0,02 segundos a menos por skill. Como definir a tag no items.xml Embaixo do item desejado adicione a seguinte tag: <attribute key="attackspeed" value="X"/> Espero que ajude alguém e qualquer problema estou a disposição, me corrija se estiver errado pois não testei, apenas desenvolvi a lógica e fiz o teste de compilação, o código inteiro é de minha autoria e livre para modificações e uso, abraços.1 ponto -
Vi que muitos voltaram, principalmente meu mestre Oneshot, então voltei também. Não sei se voltei pra ficar ativo, mas de qualquer maneira, vou quebrar o gelo e postar um sistema depois de mais de um semestre inativo no fórum. Sinceramente, a qualidade da seção de scripting caiu consideravelmente. Chega a dar vergonha ver como está andando atualmente em comparação à época de novembro/dezembro do ano passado até fevereiro desse ano, em que deu aqueles problemas. São poucas as coisas que aparecem aqui que realmente são bem feitas. Bom, de qualquer maneira, fazer o quê se a maioria dos membros não consegue ver isso, deixemos rolar e tentemos restaurar o que era, né. Voltando ao tópico, trouxe pra vocês um sisteminha que funciona como um autoloot, porém, ele looteia apenas money e envia ele direto pra backpack ou direto para o banco do player (configurável), cobrando uma porcentagem do dinheiro looteado como troca pelo serviço. Exemplo, looteou 10 gold coins, cobra 10% (1 gold coin), dando pro player 9 gold coins no total. Scripts: Configurando: Para usar o sistema, use o comando /autoloot. Créditos: - Luck Oake1 ponto
-
Criei esse tópico para postar as sprites que eu estarei fazendo para treinar... Ultimamente estou bem ocupado com uns projetos e como futuramente precisarei de um bom desenvolvimento gráfico, fica difícil depender dos outros para isso, então vou começar a treinar sempre que sobrar um tempinho... E aqui estarei postando os resultados. Bom, vamos começar então! Pikachu: Eevee: Charmander: Squirtle: Outlines: Metal Greymon: Cenario: Poste iluminação: Orc: Helmet: Rabisco de um Dinossauro:1 ponto
-
É isso mesmo galera, o Avatar (OTAvatar) está de volta, com novidades e novas espectativas. Para quem não sabe da história, tudo iniciou com a criação do OTAvatar, onde foram reunidas várias doações de sprites de outros servidores que não deram certo. Gustavo Ferreira começou patrocinando o OTAvatar, dentre toda a história do projeto se destacaram algumas figuras de ambos os fóruns. Infelizmente, por conta de problemas pessoais o projeto teve que ser cancelado, o site foi fechado, e o projeto arquivado. Agora nos reerguemos, uma equipe antes com mentes fortes se transformou apenas em um projeto antigo tentando voltar a ser o que era quando estava crescendo. AGRADECIMENTOS Agradecimentos Gerais: Gustavo Carvalho Pereira Rafael Carvalho Pereira Comedinhas Demonbholder Vodkart Insaend Won Helder Matheus Sesso Raphaelpdc Setzen Kaio Santos BlWalker Bolz Warotserv Eratsu Jamison Avuenja BloodWalker Warotserver Omega Blueheaven Nogard OrochiElf Agradecimento Test Server Subwat Vodkart Won Helder Comedinhas Demonbholder • • •• • • Apresentação Geral O servidor Avatar terá 90% das sprites editadas, dessas, grande parte são doações, (gostaria que se alguém reconhecesse algum trabalho doado comentasse no tópico para eu adicionar os créditos.). O servidor se baseia no desenho Avatar - A lenda de Aang, pretendemos criar um servidor 100% RPG e diferente que agrade o público. Equipe Avatar • Daniel (Administrador, RPG Maker, Mapper) • Jamison (Administrador, Mapper, Scripter) • Ozai (Coadministrador, Designer, Spriter, Scripter) • Nogard (Coadministrador, RPG Maker, Spriter) • Omega Blueheaven (Diretor, RPG Maker, Scripter) • Kaiquegabriel (Diretor, RPG Maker, Mapper) • Avuenja (Webmaster) • Raphaelpdc (Colaborador, spriter) • Kaio Santos (Patrocinador) • Matheus Sesso (Patrocinador) Sprites e Mapa Site Outfits: Waterbender, Firebender, Earthbender, Airbender e Warrior e Bender; Magias: pelo menos 5 sprites de efeitos novos adicionados; Sprites de sistemas: Sprite do APA, que foi feita exclusivamente por Insaend entre outras. • • • • Sistemas Fly: Dobradores de ar podem voar pelo mapa utilizando um sistema muito criativo; Apa: Temos o apa como meio de transporte Kyoshi: Os jogadores iniciantes começam na ilha kyoshi e aprendem suas dobras, há muitas quests e RPG; Spirit On: Jogadores experientes podem ter acesso ao mundo espiritual, incluindo novas outfits e magias; Guerra de Nações: é um evento onde as nações guerreiam, uma quest que todos os jogadores devem fazer, invadir nações inimigas e capturar recompensas. Controle de magias: As vocações só poderão usar magia se tiver o elemento por perto, um jarro da água e um lago permitem um waterbender usar a magia como exemplo. Vocações Chi Blocker Warrior Waterbender Firebender Earthbender Airbender VAGAS Sem vagas no momento. Em breve mais atualizações.1 ponto
-
Atendendo ao pedido do LourencoTibia (http://www.xtibia.com/forum/topic/221228-peca-aqui-o-seu-sistemaevento/page-2#entry1563530) Explicação: Você cria uma casa. Através dessa casa você dá acesso a um lugar (preferivelmente pequeno). Nesse lugar você coloca uma alavanca e um quadro negro, placa, ou coisa do tipo. Ao puxar a alavanca, será ativado um respawn de um determinado monstro (configurável), limpando todos os outros monstros que existem nessa área, enviando uma msg para o jogador sobre qual respawn está ativado. Ao olhar para a placa/quadro/etc (você escolhe), o jogador receberá uma janela com os monstros que podem ser ativados e qual está ativo no momento. Códigos: Salve em actions/scripts como qgaction1.lua Salve em creaturescripts/scripts como qglook1.lua: TAGs Em creaturescripts.xml, adicione:<event type="look" name="QGboard1" event="script" value="qglook1.lua"/> Em actions.xml, adicione:<action actionid="> actionid de sua escolha <" script="qgaction1.lua"/> Em login.lua, adicione (próximo aos demais registerCreatureEvents)registerCreatureEvent(cid, "QGboard1") Configurações (preste atenção ou não irá funcionar) local aid = 75000 Aqui você deverá adicionar um actionid (diferente para cada QG) no quadro/placa/etc (pelo editor do mapa) e ele deverá ser o mesmo daquilocal monsters = { [1] = 'demon', [2] = 'vampire', [3] = 'dragon lord', [4] = 'hydra', } Aqui você deve configurar, ordenadamente, os monstros que estarão disponíveis do Quartel Generallocal posi = {x=49, y=217, z=7} local posf = {x=90, y=271, z=7} Aqui você deve configurar a posição inicial (canto superior esquerdo) e a posição final (canto inferior direito) do seu QGlocal gstorage1 = 8671 local gstorage2 = 8672 Aqui você deve colocar números aleatórios e diferentes em cada QG (lembre-se de editar nos dois arquivos e deixe assim para o primeiro QG)local respPos = { [1] = {x=57, y=223, z=7}, [2] = {x=79, y=223, z=7}, [3] = {x=56, y=224, z=7}, [4] = {x=82, y=242, z=7}, } Aqui você insere cada uma das posições dos spawns, dentro da área em que os monstros serão criadosO processo deverá ser repetido inteiro para cada novo QG, mudando, além das configurações, os nomes QGboard1, qglook1, qgaction1 para o número do QG que você está fazendo! Screenshot1 ponto
-
[Tutorial] Criando Client Proprio Sem Vapus [Completo]
Fuscante reagiu a KuchikiKenpachi por um tópico no fórum
Fala galera, o Vapus era Perfeito para criar Client's proprios mas depois que ele fechou e re-abriu ficou uma merda, os clients criados no vapus não funcionam, então fica a pergunta de como criar um client proprio sem usar o Vapus! Então vamos lá. Pode usar o client que já vem no server mesmo. *Material: 1º Parte: Mudando o IP do client. 2º Parte: Compilando .dat, .spr e .pic: 3º Parte: Mudar o Icone do Client. Qualquer duvida, erros ou coisa do tipo posta ae. Proximo tutorial vou mostrar como fazer um Launcher e Instalador.1 ponto -
Fiery Cave
Administrador reagiu a Gabriel Couto por um tópico no fórum
Fiery Cave Faaala galera! Meus tutoriais de Mapping já inspiraram muitos há algum tempo (talvez até hoje), e voltei a mappear somente para passar meu ensinamento à vocês! Sim, todos os mapas que eu fizer serão destinados à tutoriais Então, essa que eu chamei de fiery cave é simplesmente uma caverna com fogo, que podemos usar para Demons, Dragons, blá blá blá. Aqui vou mostrar um jeito prático e bonito, com dicas e imagens, e, no fim do tópico, teremos um vídeo acelerado que me mostra fazendo o mapa, caso se interessem! Aconselho que leiam vendo o vídeo! Para começar, vamos ao grande clichê do mapping: Delimitar a área! Como é uma caverna, use os dirt floor (id 351+). Após isso, você irá delimitar a área através das "paredes" de caverna. No meu caso, usei as paredes cinzas, mas você pode usar qualquer tipo, que são de id 5631 à 5652, e 5683 a 5686. Esses dois últimos podem ser usados caso você queira mesclar os tipos de parede. Se você usar o Raw Palette, o resultado pode sair melhor que utilizando o auto-boarder. Se você é iniciante, aconselho que tente mesclar auto-boarder ao Raw, até pegar prática! Agora, vamos colocar pisos adicionais que podemos encontrar nesse tipo de caverna, além das entradas e saídas, claro! De início, eu coloquei uma escada de pedra (id 1388+), além de um "suporte", que é uma borda de montanha, de id 4471. Após isso, escolhi outro local pra colocar uma cave hole (id 385). Fiz isso para mostrar que você pode optar por qual escada preferir, mas aconselho que fique entre essas duas somente! Depois disso, coloquei em algumas bordas tiles de lava (id 599+), e fechei-os com suas bordas (id 4808+). Tente colocar sempre nas bordas da caverna. Perto das escadas e em outra borda, coloquei alguns tiles de pedra gravel (id 4566 - 4579), e fechei-os com a borda grossa de lama (id 7654+). Também contornei a escada com as bordas de chão de montanha (id 4456+). Agora, fica para o final a parte legal do detalhamento de nature, que dará um tom especial ao seu mapa. Comecei colocando fire fields que não decaem (id 1487 a 1489) em cima de alguns tiles de lava. Após isso, coloquei alguns stalagmites e lava holes (id 386+) nas bordas, perto da lava e em cima do gravel tile. Contornei algumas bordas com os gravel debris, que são pedrinhas pequenas de decomposição, seus ids começam em 6476 e ficam perto no Raw Palette. Colocar o mangrove seco pequeno (id 5396) e por um fire field pequeno em cima também dá um visual muito bonito e coerente com o local. Além disso, usar o tufo de grama seco (id 10740) em alguns lugares ajuda bastante com o visual. Pedrinhas andáveis (id 3610 a 3614), como sempre, são uma ótima opção para preencher o local! Colocar alguns corpses ou pedras maiores fica de seu critério, mas não são essenciais ao local, e assim, o seu mapa fica pronto!! No próximo tutorial, vou ver se consigo melhorar essa qualidade do vídeo, mas dá pra ajudar já! Então pessoal, espero que tenha ajudado novamente, e que vocês curtam o tópico (sim, apertar o botãozinho curtir hahahaha) Att, Anyur.1 ponto -
Bom dia. Como muitos devem saber a prática de se completar uma quest de baú e depois sair correndo (sem matar os monstros por perto) é muito comum. Com isso, decidi implementar um sistema simples de impedir que isso aconteça. Primeiramente, darei uma visão geral do que é verificado para que o player tenha sucesso na quest. O player não poderá estar a X SQM de distância do baú de quest. O player não poderá estar em uma andar diferente do baú de quest. Agora explicando o que deve ser feito. No arquivo de sua quest, cole o seguinte código -- this table will store the players who are on delay to have their quest completed (successfully or not) playersCompletingQuests = {} local checkingEventDelay = 250 local checkingEventTimes = 60 local maxDistanceToBeCompleted = 7 -- SQM function getDistance (pos1, pos2) -- get distance between two positions (using tibia formula) local difX = pos1.x - pos2.x local difY = pos1.y - pos2.y local difZ = pos1.z - pos2.z -- math.abs() of difs if difX < 0 then difX = -difX end if difY < 0 then difY = -difY end if difZ < 0 then difZ = -difZ end -- using tibia formula local maxDif = difX if maxDif < difY then maxDif = difY end if maxDif < difZ then maxDif = difZ end -- return the result return maxDif end -- To be completed, it's essential that player stays nearby the chest AND at the same floor. function canBeCompleted(cid, item, topos) -- checks if player respected the delay and distance -- check if player is on-line or if it died during the delay time if not isPlayer(cid) then return false end -- store player position in a variable local playerPos = getCreaturePosition(cid) -- check if the distance between player and chest is below the maximum allowed if getDistance(playerPos, topos) > maxDistanceToBeCompleted then return false end -- check same floor condition if playerPos.z ~= topos.z then return false end -- reach here means the player can receive its awards return true end function completeQuest(cid, item, topos) --Event will call this -- remove the player from playersCompletingQuests playersCompletingQuests[cid] = nil -- give player it's awards!!! --double checking if the player hasn't done the quest yet if not questAlreadyCompleted(cid, item) then doCreatureSay(cid, "COMPLETEI UMA QUEST!!", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid,22,"Voce completou a quest, parabens!") -- AQUI VOCÊ IMPLEMENTARÁ A PARTE DE ENTREGAR O PRÊMIO AO PLAYER -- AQUI VOCÊ IMPLEMENTARÁ A PARTE DE ACRESCENTAR A STORAGE AO PLAYER else doPlayerSendTextMessage(cid,22,"Voce ja completou essa quest.") end end function checkingEvent(cid, item, topos, checkingsLeft) if checkingsLeft <= 0 then completeQuest(cid, item, topos) else if canBeCompleted(cid, item, topos) then doCreatureSay(cid, checkingsLeft, TALKTYPE_ORANGE_1) addEvent(checkingEvent, checkingEventDelay, cid, item, topos, checkingsLeft-1) else -- cannot be completed if isPlayer(cid) then -- is player online? doCreatureSay(cid, "fail", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid,22,"Voce falhou em completar a quest. tente novamente!") end -- remove the player from playersCompletingQuests playersCompletingQuests[cid] = nil end end end function questAlreadyCompleted(cid, item) local queststatus = getPlayerStorageValue(cid,STORAGE_NUMBER) -- COLOQUE O STORAGE NUMBER DA QUEST AQUI!!!!!! if queststatus == -1 then return false else return true end end function isOnAnotherQuest(cid) if playersCompletingQuests[cid] == true then return true else return false end end function onUse(cid, item, frompos, item2, topos) if questAlreadyCompleted(cid, item) then doPlayerSendTextMessage(cid,22,"Voce ja completou essa quest.") elseif isOnAnotherQuest(cid) then doPlayerSendTextMessage(cid,22,"Voce ja esta tentando completar uma outra quest. Aguarde!") else playersCompletingQuests[cid] = true -- player is now trying to achieve success in a quest addEvent(checkingEvent, 0, cid, item, topos, checkingEventTimes) end return true end Agora, faça as devidas mudanças, para se adaptar à sua quest, em: faça o que se pede. Agora, explicando o que pode ser configurado: checkingEventDelay representa de quanto em quanto tempo (em milissegundos) a função "checkingEvent" será chamada. checkingEventTimes representa quantas vezes a função "checkingEvent" será chamada. maxDistanceToBeCompleted representa qual é a distancia máxima que o player pode se distanciar do baú, para que a quest não falhe. Bom, é isso. Espero ter ajudado. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.1 ponto
-
Player nascer
Lumaga reagiu a SkyDarkyes por uma questão
Como eu mudo a POS onde o player ira nascer,no caso na primeira vez ao logar1 ponto -
Conhecendo Gigantes e Seu Habitat
Tonynh reagiu a Gabriel Couto por um tópico no fórum
Conhecendo Gigantes e Seu Habitat Olá galera do XTibia, hoje estarei fazendo esse tutorial-dica para indicar os locais mais coerentes para a colocação dos gigantes em seu mapa. Se você deseja fazer um mapa de qualidade, é ótimo conferir essas dicas, que poderão ajudar bastante. Nesse tutorial-dica, não ensinarei a fazer mapas, mas indicarei fotos que demonstrem o que quero passar a vocês, assim como um bom texto! Vamos lá? Caso você não saiba quais são os gigantes, lá vai: Cyclops, Cyclops Drone, Cyclops Smith, Behemoth, Frost Giant (+Giantess). O Trio de Cyclops: É aconselhável que você coloque-os em montanhas de pedra, as quais não precisarão necessariamente de itens que indiquem que o local é habitado pelos gigantes (como mesas gigantes, ossos, etc). Outro local muito bom para se colocar é também no interior dessas montanhas. Já nesse interior, é crucial que você coloque as mesas, ossos, fogueiras e outras coisas que indiquem que aquele é o lar dos Cyclops: "Basicamente, é como se os gigantes de fora da montanha fossem guardas e os de dentro os moradores do local, como se fosse uma comunidade, ou até uma cidade dos gigantes." Você também pode colocá-los em vales pequenos, que sejam perto de montanhas. Lembre-se sempre de colocar os mais fortes (Drone e Smith) mais ao topo da montanha ou ao fundo da caverna, pois isso nivelará bem o local e ajudará o player do seu servidor, que descerá em níveis até encontrar os maiores desafios. Coloque no máximo 3 monstros juntos, para que haja espaço e evite a morte do player. Exemplo de Cyclops no Interior de Montanhas Exemplo de Cyclops em Vale e Montanha Behemoths: Podemos considerá-los bem parecidos aos próprios ciclopes, e podemos até usar nas mesmas cavernas/montanhas. Sim, o estilo apropriado é o mesmo, mas é importante que se lembre de uma coisa: SEMPRE colocar ao TOPO da montanha ou ao FUNDO da caverna, para não surpreender jogadores de level mais baixo. Outra alternativa interessante pode ser de colocá-los em minas - mas não aquelas de Dwarfs - e sim a no estilo que temos em Svarground no Tibia Global, as famosas Minas Geladas, que mesclam o gelo com montanha comum. Sendo um local em que geralmente a maioria dos monstros é de nível elevado, pode-se colocar em qualquer lugar que você ache coerente, pois a chance de surpreender pode ser considerada baixa. No Tibia Global, é muito usado em quests de Edron, que predominam dentro de uma montanha. Porém, o detalhamento é baixo, e você como mapper de otserver, pode fazer um ambiente bem melhor Exemplo de Behemoths ao Topo de Montanhas Frost Giants: Exatamente iguais aos Cyclops, mas com uma graaande ressalva: No gelo. Ao invés de montanhas de pedra comuns, as montanhas têm de ser de gelo, ou até mescladas com as de pedra, mas é essencial que fiquem em áreas frias: com fogueiras, mesas gigantes, ossos e tudo que eles têm direito! Exemplo de Frost Giants Pessoal, o tutorial-dica foi esse, e eu espero que seja esclarecedor para os novatos, o que irá trazer coerência aos seus mapas! Em breve terei novos tutoriais-dica desse tipo, com outros monstros! Att, Anyur.1 ponto -
Bom dia novamente, agora vou postar outro script que fiz que faz com que, quando um player pisar em um tile com determinada action ID, seja teletransportado para uma lugar randômico. Primeiramente, crie um arquivo em "data\movements\scripts" chamado "tileTeleporter.lua" e copie o seguinte conteúdo para dentro dele local teleportPoints = { [ 0] = {x = 210, y = 190, z = 7}, [ 1] = {x = 233, y = 196, z = 7}, [ 2] = {x = 243, y = 188, z = 7}, [ 3] = {x = 254, y = 180, z = 7}, [ 4] = {x = 231, y = 160, z = 7}, [ 5] = {x = 212, y = 158, z = 7}, [ 6] = {x = 212, y = 170, z = 7}, [ 7] = {x = 227, y = 171, z = 7}, [ 8] = {x = 266, y = 149, z = 7}, [ 9] = {x = 234, y = 140, z = 7}, [10] = {x = 205, y = 143, z = 7}, [11] = {x = 177, y = 126, z = 7}, [12] = {x = 290, y = 177, z = 6}, [13] = {x = 219, y = 185, z = 6}, [14] = {x = 261, y = 167, z = 6}, [15] = {x = 270, y = 167, z = 8} } function onStepIn(cid, item, position) if isPlayer(cid) then local position = teleportPoints[math.random(0,15)] doTeleportThing(cid, position) end return true end agora, em "movements.xml" cole a seguinte linha de código <movevent type="StepIn" actionid="8586" script="tileTeleporter.lua"/> Bom, é isso. Acho que não precisa explicar, está bem fácil de entender e alterar o código. Espero ter ajudado. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.1 ponto
-
Acredito que a chance de gerar um stack overflow é muito baixa mesmo. Ah sei lá, estou enferrujado.1 ponto
-
Aperte windows+r e vai abrir uma caixinha digite nela %appdata% e de enter vai abrir uma janela cheia de pastas nela vai ter a pasta nomeada com o nome do RME abre essa pasta e segue os passos que o vital disse (não tenho como mostrar certinho pois estou sem RME)1 ponto
-
O número situado em chance, você divide por 1000 e dará o resultado que seria a porcentagem de chance para dropar o item.1 ponto
-
Modificador de attackspeed em Item e/ou skill.
henriqueberro reagiu a Meunometemvinteletra por um tópico no fórum
É no player.cpp.. Ta escrito la em cima '-' Esse arquivo encontra-se nas sources do ot @Tópico Ótimo código, poderei fazer bom uso desse sistema. Obrigado por compartilhar conosco :31 ponto -
Spritesheet do novo outfit da cipsoft: Yamaken~1 ponto
-
[Arquivado]Como atrair o público?
WillOliveira reagiu a Tonynh por um tópico no fórum
Olá pessoal, tranquilo? Eu faço um curso de gamedev em uma escola especializada, e hoje a aula foi bem interessante. Se tratou de uma parte importantíssima do marketing de jogos, e por Tibia se tratar de um jogo, eu gostaria de compartilhar um pouco desse conhecimento com vocês, principalmente aos donos de servidores. A questão é que com o tempo os servidores de Tibia vem perdendo sua essência, e isso é terrível para quem pretende abrir sua rede de servidores por exemplo. Então eu lanço algumas perguntas para vocês: Quais elementos você criaria, ou destacaria para fazer com que o usuário se cadastrasse em seu servidor? O que prenderia e instigaria o seu jogador? Se não houvesse qualquer limitação (tecnológica, por exemplo), o que vocês inovariam nos servidores? As perguntas acima são reflexivas, e a partir daqui, vocês podem expor suas ideias a vontade. Não se limitem apenas as questões acima, apontem o maior defeito dos servidores na opinião de vocês, e o que você faria para mudar, por exemplo. Abraços, Tonynh.1 ponto -
[Show Off] OTAvatar
Thiago3712 reagiu a SkyDarkyes por um tópico no fórum
Parabens man,sprites muito boas1 ponto -
1 ponto
-
DarkXPoke (DXP)
ShinySprite reagiu a SmiX por um tópico no fórum
Finalmente, o nosso teaser#2 saiu. Obrigado a todos que querem, o bem, ver o DxP online... DarkXPoke (DxP) Teaser#2 http://www.youtube.com/watch?edit=vd&v=LRZFUFCwIMA1 ponto -
Eu ainda prefiro fazer com duas posições apenas, já que o objetivo do script é teleportar para posições totalmente aleatórias. local fromPosition = {x=100,y=100,z=7} local toPosition = {x=200, y=200, z=7} function getRandomPosition(fromPosition, toPosition) local tmp = { x = math.random(fromPosition.x, toPosition.x), y = math.random(fromPosition.y, toPosition.y), z = math.random(fromPosition.z, toPosition.z), } if getTileInfo(tmp).house == false and getTopCreature(tmp).uid == 0 and doTileQueryAdd(cid, tmp, 7) == RETURNVALUE_NOERROR then return tmp end return getRandomPosition(fromPosition, toPosition) end function onStepIn(cid) return doTeleportThing(cid, getRandomPosition(fromPosition, toPosition)) end Com recursividade, se a primeira posição não for "boa", ele sorteia uma segunda dentro da área delimitada e por aí vai.1 ponto
-
Assinatura da Semana #89
Gabriel Couto reagiu a Tonynh por um tópico no fórum
Faaala galera! Estamos de volta com a assinatura da semana! Tema da ADS #89: LIVRE Para sugerir um tema (Clique Aqui) Premiação 1° Colocado - 3 Reps + sign + medalha 2° Colocado - 2 Reps + sign 3° Colocado - 1 Rep + sign Datas: Concurso: 14/09/2013 até 22/09/2013 (23:59) Votação: 23/09/2013 até 27/09/2013 (23:59) Resultado: 28/09/2013. Dúvidas: Clique aqui AS IMAGENS DEVEM SER POSTADAS NESTE TÓPICO ATÉ A DATA MARCADA. Espero muitos participantes! .1 ponto -
Players
Avuenja reagiu a Piabeta Kun por uma questão
caso o seu pedido tenha sido atendido reporte para que o topico seja movido para a area correta facilitando a busca de muitos outros e sempre que tiver uma duvida ou pedido visite a area de pedido e duvidas atendidos para ver se ja nao existe o que voce procura ou use a barra de pesquisa rapida!1 ponto -
Arma não ta aumentando ml
warriorfrog reagiu a Oneshot por uma questão
Seu erro está aqui: <movevent type="Equip" itemid="7463" slot="head" event="function" value="onEquipItem"> </movevent> Você colocou slot igual a head, coloque armor.1 ponto -
function onKill(cid, target) if isPlayer(target) then doBroadcastMessage(getCreatureName(cid)..' ['..getPlayerLevel(cid)..'] matou '..getCreatureName(target)..' ['..getPlayerLevel(target)..']', 18) end return true end creaturescripts.xml <event type="kill" name="broadcast kill" script="broadkill.lua"/> registra no login.lua também registerCreatureEvent(cid, "broadcast kill")1 ponto
-
QG (QUARTEL GENERAL)
GustavoCastilho reagiu a Omega por uma questão
Poxa, cara, não sei se você já começou a fazer, mas eu acabei fazendo porque ele postou no meu outro tópico. Pedido atendido em http://www.xtibia.com/forum/topic/221530-sistema-de-quartel-general/1 ponto -
Pedido atendido:[spell] Buff Sio1 ponto
-
function getPlayerTopMeleeSkill(cid) local skill = 0 local value = 10 for i = 1, 4 do if getPlayerSkillLevel(cid, i) > value then value = getPlayerSkillLevel(cid, i) skill = i end end return {skill = skill, value = value} end function onAdvance(cid, skill, oldLevel, newLevel) if not isKnight(cid) then return true end if getPlayerTopMeleeSkill(cid).skill > 3 then return true end local weap = {7415, 7390, 7434} if skill == 8 and newLevel >= 60 and getPlayerStorageValue(cid, 876125) == -1 then local topskill = getPlayerTopMeleeSkill(cid) if doPlayerAddItem(cid, weap[topskill.skill], 1, false) then doPlayerSendTextMessage(cid, 25, "Parabens, voce ganhou uma arma especial por passar do level 60!") setPlayerStorageValue(cid, 876125, 1) end end return true end1 ponto
-
Script Arena
arthurabreu57 reagiu a Omega por uma questão
Em creaturescripts/scripts, cria um arquivo chamado arena_pvp.lua com esse código: local pos1 = {x=111, y=222, z=7} -- Posição do canto superior esquerdo local pos2 = {x=222, y=333, z=7} -- Posição do canto inferior direito local exit = {x=231, y=444, z=7} -- Posição de saída da arena function onPrepareDeath(cid, killers) if isInArea(getThingPos(cid), pos1, pos2) then doTeleportThing(cid, exit) doCreatureAddHealth(cid, getCreatureMaxHealth(cid), 65535, 256, true) doRemoveConditions(cid, false) if isPlayer(killers[1]) then doPlayerSendTextMessage(cid, 25, 'You have defeated '..getCreatureName(cid)..'.') doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'You were defeated by '..getCreatureName(killers[1])..'.') end return false end return true end Em creaturescripts.xml, adicione: <event type="preparedeath" name="PVP Arena" event="script" value="arena_pvp.lua"/> Em creaturescripts/scripts, abra o login.lua e adicione perto dos demais registerCreatureEvent: registerCreatureEvent(cid, 'PVP Arena')1 ponto -
Naruto Ultimate Ninja Online Wings (NUNOW)
melquinho2013 reagiu a BlazeOT por um tópico no fórum
Tempos que não jogava um, curti, bacana1 ponto -
Piso que só passa com storage
warriorfrog reagiu a Omega por uma questão
function onStepIn(cid, item, position, fromPosition) if getPlayerStorageValue(cid, 666) >= os.time() then return true end doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, 'Apenas jogadores VIP podem passar.') return true end1 ponto -
1 ponto
-
Imagens Fantásticas
JonatasLucasf reagiu a Alexclusive por um tópico no fórum
Gostei mais da ultima rs1 ponto -
Assinatura da Semana #89
Tonynh reagiu a Gabriel Couto por um tópico no fórum
Boa Sorte, todo mundo )1 ponto -
Player nascer
Piabeta Kun reagiu a luanluciano93 por uma questão
Na pasta pricipal do seu site, tem uma pasta 'config', abra ela vai ter um arquivo 'config.php', abra-o, ali você vai ver essa linha: $towns_list[0] = array(1 => 'SUA CIDADE 1', 2 => 'SUA CIDADE 2', 5 => 'SUA CIDADE 3'); Ai onde esta escrito CIDADE 1,2 e 3 estará o(s) nome(s) da(s) cidade(s), tanto faz, pode ter 1, ou 2, ou 10. Esta numéro antes do nome da cidade é o town_id, ou seja o ID DA CIDADE, você marca os IDs das cidade pelo map editor, como o nosso amigo disse acima ... ai você configura ... bem simples!1 ponto -
1 ponto
-
[Arquivado]Como atrair o público?
Gatonho reagiu a GustavoCastilho por um tópico no fórum
Inovação. Essa é uma palavra que eu considero ambígua. Muitos consideram inovação como criar coisas novas e revolucionárias. Eu considero como inovação como criar coisas que os outros servidores não possuem. A primeira vista, parece a mesma coisa, mas não é. Não é necessário mudar totalmente a essência do Tibia para se ter algo novo, como os servidores derivados vem fazendo. Inovar é RPG, mas RPG exagerado afasta grande parcela dos players que desistem/enjoam de tais missões. Inovar é favorecer o modo PvP, mas PvP exagerado também afasta muitos players, que querem caçar, coletar itens raros e/ou serem TOPs. Inovar é ter sistemas bons e ter uma administração impecável, 70% dos OT-ADMINs pegaram o servidor pronto em algum fórum, arrumaram alguns bugs, colocaram um site - se já não veio junto com o servidor - e colocaram online. Inovar é projetar bem, vindo da ação de fazer um projeto bom e planejado. Inovar não é arrecadar dinheiro com uma semana de servidor. Não é colocar o servidor online, fazer promoções de points e deixar o servidor largado. O marketing é o que atrai os players. Mas marketing não é só fazer banners espetaculares e/ou propagandas. Marketing é dar suporte ao seus players ou clientes (como deveriam ser chamado os players da maioria dos OTServers da atualidade), pois, se eles gostarem do seu servidor, amigos deles serão chamados, assim como amigos dos amigos, amigos dos amigos dos amigos e assim por diante. Mas não é só isso, o sucesso do servidor depende, também, da infraestrutura dele. O sucesso do servidor vem a tona quando começam os ataques DDoS, mas se não houver infraestrutura, todo o sucesso vai embora em questão de dias ou até mesmo horas. Eu considero essa parte a mais difícil, é ela quem me faz ter medo de fazer algo bom. É muito difícil conter os ataques ao seu servidor, ainda mais se for no começo quando não há muitos recursos. Se não houvesse a limitação tecnológica, com certeza teriam servidores melhores e que sobreviveriam aos dias atuais, onde manda quem ataca melhor.1 ponto -
[Encerrado] [Pedido] Script Go/Back para digitibia !
humberto25 reagiu a CallOfTibia por um tópico no fórum
cara la no cacth se poe o nome do digimon começado com letra maiuscula e no item.xml tb exemplo ['Agumon'] = 10, <item id="id do corpo" article="a" name="dead Agumon"> <attribute key="containerSize" value="8" /> <attribute key="decayTo" value="0" /> <attribute key="duration" value="60" /> </item> Vc adicionou o digimon no monsters xml e pos tb seu nome no xml dele lembre ponha tudo iniciano com letra maiuscula1 ponto -
na tabela bem no início do código, você tem linhas assim: [heart] = {Nome dos pokemons que evoluem com heart stone}, [fire] = {...}, esse heart/fire etc são variáveis declaradas no configuration.lua e tem o valor do ID das stones, você provavelmente deletou algumas stones (por exemplo, metal, king etc) do configuration.lua o que fez com que essas variáveis assumissem o valor "nil", e não se pode ter index de tabela (valor entre colchetes) como nil... ou você tira essas partes da tabela do nome dos pokemons que evoluem com uma stone que você tirou, ou então coloca alguns valores quaisquer, tipo 1, depois 2, depois 3 no lugar dessas variáveis que não existem no configuration.lua que não vai atrapalhar em nada seu script1 ponto