-
Total de itens
1165 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que Omega postou
-
Cara, ficou bem maneiro. Pra ficar mais bonito, deixei sair um efeito de cada vez, com um intervalo de 0,5s entre eles. Aí o helmet só aparece depois que o 7º efeito chega.
-
Cara, não dá pra entender direito o que você tá querendo. Eu não sei o que é um 'monter', não sei como é 'tipo um sumoner' e não entendi a ligação 'não vai atk somente o dono'. Além disso, o nome do seu tópico está fora das regras: ele deve conter informações sobre o conteúdo do tópico e não algo genérico como "para feras". Mas se você puder esclarecer, eu tento te ajudar.
-
Beleza, cara! Fico feliz em ajudar e a crítica é só pra facilitar a ajuda. Ficar de olho em uma seção só (pedidos e dúvidas) é mais fácil do que olhar várias, ou seja, deixar o fórum organizado torna a ajuda mais fácil e rápida.
-
Parabéns por retomar esse projeto interessante aí. Dei uma olhada e parece bem legal. Recomendo para os novatos!
-
Cara, você tem postado várias vezes no lugar errado. TODA dúvida ou pedido de scripting ficam na seção Pedidos e Dúvidas - scripting. As outras seções da área são pra exposição dos scripts. Além disso, esse tópico já existe, é só dar uma procurada (a ferramenta de busca do fórum aqui é ótima). http://www.xtibia.com/forum/topic/218611-kill-boss-system/
-
pedido Pedido query ou talkaction que substitua o item 2641 de todos os players pelo item 18406
pergunta respondeu ao KennyConrad de Omega em Scripts
Bom, não sei se vai funcionar em MySQL, porque testei só em SQLite, mas aí vai: UPDATE player_items SET itemtype = 18406 WHERE itemtype = 2641 Se não funcionar, cria uma talkaction e coloca isso nela: function onSay(cid, words, param) if db.executeQuery("UPDATE `player_items` SET `itemtype` = 18406 WHERE `itemtype` = 2641") then doPlayerSendTextMessage(cid, 27, "SUCESS!") end return true end Como sempre, faça um backup do banco de dados antes, né? Outra opção é fazer um global event que fique rodando e substituindo de quem está online: function onThink() for _, pid in pairs(getPlayersOnline()) do while doPlayerRemoveItem(pid, 2641, 1) do doPlayerAddItem(pid, 18406, 1) end end end TAG: <globalevent name="subitems" interval="5000" event="script" value="subsitems.lua"/> -
function onStepIn(cid, item, position, lastPosition, fromPosition) local check = {',', ';', '-',} local pname = getCreatureName(cid) for _, spchar in pairs(check) do if string.find(pname, spchar) then doTeleportThing(cid, fromPosition) break end end return true end TAG movements.xml <movevent type="StepIn" actionid="ACTIONID" script="ARQUIVO.lua"/> Testei em 8.6... cara, posso te perguntar qual é a utilidade disso pra você? Fiquei curioso aqui =P
-
Tenta esse aqui.
-
Não, claro que não. Olha a linha: setPlayerStorageValue(cid, 157126 + exhaust) Como eu disse, eu costumo ser meio lerdo e errar por falta de atenção: setPlayerStorageValue(cid, 157126, os.time() + exhaust) Testei aqui e tá funcionando agora.
-
Eu acho que tem algum tópico explicando isso, mas o princípio é simples: Existe uma função que retorna os segundos contados desde 1º de janeiro de 1970, a os.time(). Com isso, você consegue ter o tempo em segundos. Daí você coloca esse valor + o tempo de exhaust que você quer em algum storage do jogador e adiciona uma checagem: se o os.time() for maior ou igual ao storage, já deu o tempo, se não, ele ainda tem que esperar. Mas esperar quanto? O valor do storage - o os.time(), vai retornar os segundos que faltam pra poder usar. Então, fica assim, a menos que eu tenha errado algo por falta de atenção: local DESTINO = {x = 1109, y = 581, z = 7} local TEMPO_PARA_VOLTAR = 20 * 1000 -- em ms local events = {} local exhaust = 200 -- EM SEGUNDOS local dbfunc = db and type(db.executeQuery) == "function" and db.executeQuery or db and type(db.query) == "function" and db.query or error local function teleport_back(guid, position) local cid = getPlayerByGUID(guid) if isCreature(cid) then doTeleportThing(cid, position) doSendMagicEffect(position, CONST_ME_TELEPORT) else dbfunc("UPDATE players SET posx = "..position.x..", posy = "..position.y..", posz = "..position.z.." WHERE id = "..guid) end events[guid] = nil end function onCastSpell(cid) local pos, guid = getThingPos(cid), getPlayerGUID(cid) if events[guid] then return not doPlayerSendCancel(cid, "You can't cast this spell now!") end if os.time() >= getPlayerStorageValue(cid, 157126) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid)) doTeleportThing(cid, DESTINO) doSendMagicEffect(DESTINO, CONST_ME_TELEPORT) events[guid] = addEvent(teleport_back, TEMPO_PARA_VOLTAR, guid, pos) setPlayerStorageValue(cid, 157126 + exhaust) else doPlayerSendCancel(cid, "Voce deve esperar "..getPlayerStorageValue(cid, 157126) - os.time().." segundos.") end return true end OBS.: acho que a maioria dos servidores já vem com a função exhaust.set e exhaust.check. Procura na sua lib por exhaustion.lua.
-
Testei aqui. Tive que fazer uma gambiarrazinha pra ajeitar uma coisa meio doida que tava dando aqui, mas agora tá funcionando direito: function onEquip(cid, item, slot) if getPlayerStorageValue(cid, 1233215) == -1 then setPlayerStorageValue(cid, 1233215, 1) local mhp = getCreatureMaxHealth(cid) local hp_f = math.floor(mhp * 1.03) + 200 setCreatureMaxHealth(cid, hp_f) doCreatureAddHealth(cid, math.floor(0.03 * mhp) + 200) setPlayerStorageValue(cid, 808081, math.floor(0.03 * mhp) + 200) end return true end function onDeEquip(cid, item, slot) local hp = 0 local cid = isPlayer(cid) and cid or getThingFromPos(getThingPos(item.uid)).uid setCreatureMaxHealth(cid, (getCreatureMaxHealth(cid) - getPlayerStorageValue(cid, 808081))) if getCreatureHealth(cid) < getPlayerStorageValue(cid, 808081) then hp = -getCreatureHealth(cid) + 1 else hp = -(getPlayerStorageValue(cid, 808081)) end doCreatureAddHealth(cid, hp) setPlayerStorageValue(cid, 1233215, -1) return true end Não esquece de preencher as TAGs do movements.xml direito...
-
De nada, cara. Espero que você aprenda mesmo com esses grandes caras daí, com certeza me ajudaram muito. PS.: cuidado com o nome do tópico: ele deveria conter informações sobre o conteúdo dele e não esses pedidos genéricos "ajude", "pedido", etc. Atrapalha a organização do fórum.
-
Lembrando as vocações: 1 - Sorc, 2 - Druid, 3 - Pala, 4 - Kina, 5 - MS, 6 - ED, 7 - RP, 8 - EK <movevent type="Equip" itemid="ID DO HELMET" slot="head" level="LEVEL" event="script" value="healthhelm.lua"> <vocation id="8" showInDescription="0"/> <vocation id="4"/> </movevent> <movevent type="DeEquip" itemid="ID DO HELMET" slot="head" level="LEVEL" event="script" value="healthhelm.lua"/> Aí salva o código que eu te passei na pasta movements/scripts com o nome de healthhelm.lua
-
Como funcionam os scripts? Pasta Data - 13 tutoriais para entender ela toda A coisa mais importante em um código São os três melhores tutoriais de scripting aqui do XTibia. Em meio a isso, você deve ficar de olho na escolinha de scripting e SEMPRE tentar entender e criar scripts baseando-se no que você aprendeu. Escolinha de Scripting do Roksas
-
action Pacote de Scripts [Simples e Úteis] I - Actions
um tópico no fórum postou Omega Actions e Talkactions
Esse é um pacote com actions úteis para se usar nos servidores e, a menos que esteja indicado o contrário, são de minha autoria. [Testado em servidor 8.6] Para colocar essas actions no jogo, você deve colocar uma TAG no arquivo actions.xml do seu servidor, com um actionid e o nome do arquivo .lua (contendo o script) na pasta de scripts. Então, você deve colocar um item com aquele actionid no mapa. [ACTION #1] Baús de quests completos Descrição: Com essa action, você pode colocar vários baús simples de quest em apenas um script de forma rápida e organizada. Basta apenas registrar diferentes actionIDs no actions.xml, colocar eles em cada baú e depois inserir no script, conforme o padrão. [ACTION #2] Summon simples Descrição: Dessa forma você pode criar um pequeno sistema de summon com um monstro. No primeiro uso, ele invoca o monstro à comando do jogador, gastando a mana definida. Então, caso outro uso seja realizado até o exhaust terminar, o monstro será removido. Quando o jogador usar novamente, se o monstro invocado existir, ele será removido e outro monstro será invocado, reiniciando o ciclo. OBS.: os ataques em área do summon ainda vão tirar vida do jogador. Para uma correção, vide final do tópico. [ACTION #3] Fome Zero Descrição: Script simples: você registra o actionID dele em algum item e então o jogador ganhará uma comida sorteada entre as que constam em foodID (deve ser configurado) Pode ser usado à vontade pelo jogador para conseguir comida. [ACTION #4] Alavanca do Cassino Descrição: Um script de alavanca: nesse você define as possíveis recompensas, o quanto de dinheiro a pessoa vai precisar e as chances! [ACTION #5] Fantasias de Monstros Descrição: Quando o jogador clicar em um item, será sorteada uma outfit entre as definidas. [ACTION #6] Passagem Secreta Descrição: Ao puxar a alavanca, o jogador removerá uma parede do lugar, abrindo uma passagem secreta. Ela se fechará em alguns segundos. [ACTION #7] Baús de vocações Descrição: Bem óbvio pelo nome, essa action dá prêmios diferentes para cada vocação [ACTION #8] SUSTO! Descrição: Essa action super engraçada fará o seguinte: o jogador se transformará num cadáver e aparecerá a mensagem You were downgraded from level... (igual a msg do tibia mesmo). Depois de TRÊS segundos, o jogador voltará a sua outfit normal e receberá a mensagem Gotcha! (te peguei em inglês) [ACTION #9] Painel informativo Descrição: Com essa action você pode fazer aparecer uma mensagem em popup para o jogador contendo as informações que você quiser. [ACTION #10] Armários realistas! Autor: Avronex Descrição: Colocando esse script em armários, os jogadores irão receber a janela de trocar outfit quando clicarem! [ACTION #11] Fogos de Artifício Descrição: Um novo script para fogos de artifício, com efeitos, número de explosões e tempo entre as explosões configuráveis. E aqui a lista termina por enquanto. Me avise se você achar/tiver uma action útil que possa entrar para a lista. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Correção para que o summon não dê dano em quem o invocou: -
Bom, queria expor minha função, já que sempre vi vários comentários construtivos (e outros nem tanto) nas funções postadas aqui. Primeiramente, editei a função isWalkable(pos) do Nord pra tirar o loop, com medo de fazer uma função monstruosa demais. Essa é a função isWalkable original Essa é a minha versão editada: E agora a minha função: eu queria uma função que distribuiria aleatoriamente alguns monstros em uma área, porque acho que seria muito útil em eventos.
-
Cara, isso é em movements, para ser ativado quando o jogador pisar fora do piso da porta. Como o seu servidor não tem, você vai ter que encaminhar manualmente no movements.xml todas as suas portas pra um script. No caso, no meu servidor funciona esse (8.6), mas se você usar outra versão, tenta baixar e ver como funciona. (Procura por um script chamado closingdoor.lua.
-
function onEquip(cid, item, slot) local mhp = getCreatureMaxHealth(cid) local hp_f = math.floor(mhp * 1.03 + 200) setCreatureMaxHealth(cid, hp_f) doCreatureAddHealth(cid, hp_f - mhp) setPlayerStorageValue(cid, 808081, hp_f - mhp) return true end function onDeEquip(cid, item, slot) local hp = 0 local cid = isPlayer(cid) and cid or getThingFromPos(getThingPos(item.uid)).uid setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) - getPlayerStorageValue(cid, 808081)) if getCreatureHealth(cid) < getPlayerStorageValue(cid, 808081) then hp = -getCreatureHealth(cid) + 1 else hp = -(getPlayerStorageValue(cid, 808081) end doCreatureAddHealth(cid, hp) return true end Aí é só criar duas TAGs no movements.xml com o id do item e apontando pra esse script. OBS.: acho que esse tópico deveria ser postado na seção de pedidos e dúvidas - scripting, então reportei pra ver se movem.
-
function getPlayerTopSkillValue(cid) local skill = 0 for i = 1, 4 do if getPlayerSkill(cid, i) > skill then skill = getPlayerSkill(cid, i) end end return skill end local dmgType = { [1] = {COMBAT_ENERGYDAMAGE, CONST_ME_ENERGYAREA}, [2] = {COMBAT_EARTHDAMAGE, CONST_ME_SMALLPLANTS}, [3] = {COMBAT_FIREDAMAGE, CONST_ME_FIREAREA}, [4] = {COMBAT_ICEDAMAGE, CONST_ME_ICEAREA}, } function onUseWeapon(cid, var) local lvl, ml, skill = getPlayerLevel(cid), getPlayerMagLevel(cid), getPlayerTopSkillValue(cid) local formula = lvl + ml + skill local area = {{1, 1, 1}, {1, 3, 1}, {1, 1, 1}} local damage = dmgType[math.random(#dmgType)] local effect = damage[2] local type = damage[1] return doAreaCombatHealth(cid, type, getCreaturePosition(getCreatureTarget(cid)), 1, -(formula*0.8), -(formula*1.2), effect) end Testa esse aí
-
Como eu disse, testei aqui e deu certo. Se não dá aí e não aparece erro, não sei mais como te ajudar. =/
-
Cara, não entendo nada desses servidores derivados, mas seu script fazia o seguinte: a cada milésimo de segundo, ele verificava se os pokémons estavam com a vida máxima igual ao valor que está em uma tabela aí (pokesTable). Se não estivessem, ele consertava. Só que pra isso, ele tem que encher a vida do pokémon, porque só colocar a vida máxima correta, não faz recuperar. Daí, o que eu fiz foi introduzir uma checagem se a vida já estava certa. Se a vida já está certa, ele pula e não enche de novo.
-
Cara, acho que a seção de pedidos e dúvidas em servidores derivados pode te ajudar melhor em relação a esses problemas. Mas acho que isso deve resolver seu problema: function adjustWildPoke(cid) if ehMonstro(cid) then local teste = getPokemonLevel(cid) * pokesTable[getCreatureName(cid)].cons if getCreatureMaxHealth(cid) ~= teste then setCreatureMaxHealth(cid, teste) doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) end end return true end function onThink(cid) if ehMonstro(cid) then addEvent(adjustWildPoke, 1, cid) end return true end
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.