-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
Tem sim. Seria interessante você estudar Lua e aprender fazer seus próprios scripts, já que você só pensa em lucrar com OTserv.
-
[Creatureevent] Respect System By Gustavo
tópico respondeu ao Beeki de Oneshot em Globalevents e Spells
Ui Ui Ui O grande Gustavo fazendo scripts Lua. Gostei Rep+ para você por trazer ao XTibia, Beeki -
Olá, preier. Na verdade, você usou a função doCreateMonster de forma incorreta. O certo seria assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_SUBID, 1) setConditionParam(exhaust, CONDITION_PARAM_TICKS, 1 * 10 * 1000) setCombatCondition(combat, exhaust) function onCastSpell(cid, var) local target = getCreatureTarget(cid) if isCreature(target) then local creature = doCreateMonster("Target Dummy", getThingPosition(target)) doConvinceCreature(cid, creature) return doCombat(cid, combat, var) else return doPlayerSendCancel(cid, "You need a target.") end end
-
Opa, ThallesNovais. Foi um erro meu na query do banco de dados. Veja se agora funciona local config = { lenght = 30, itemid = 2160, strings = {"ADM"} } function onSay(cid, words, param, channel) if param ~= "" then if getPlayerStorageValue(cid, 13540) == -1 then return doPlayerSendCancel(cid, "Você não é VIP.") end for i = 1, #config.strings do if param:find(config.strings[i]) then doPlayerSendCancel(cid, "Você não pode usar ".. config.strings[i] .." em seu novo nome.") break end end if param:find("%c") or param:find("%p") then return doPlayerSendCancel(cid, "Você não pode usar caracteres especiais em seu novo nome.") end if string.len(param) > config.lenght then return doPlayerSendCancel(cid, "Você pode usar, no máximo, ".. config.lenght .." letras.") end if not getTilePzInfo(getThingPosition(cid)) then return doPlayerSendCancel(cid, "Só pode ser usado em Protection Zone.") end local result = db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. param ..";") if result:getID() ~= -1 then return doPlayerSendCancel(cid, "Já existe alguém com esse nome no servidor.") end if getPlayerByNameWildcard(param) then return doPlayerSendCancel(cid, "Há alguém online com esse nome.") end if doPlayerRemoveItem(cid, config.itemid, 1) then local pid = getPlayerGUID(cid) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `name` = '".. param .."' WHERE `id` = ".. pid ..";") else doPlayerSendCancel(cid, "Você não possui ".. getItemNameById(config.itemid) ..".") end else doPlayerSendCancel(cid, "Insira um novo nome.") end return true end
-
Seria daora sim, principalmente se as funções nativas dos servidores permitissem que eu fizesse isso.
-
Amigo, você tem que colocar os uniqueids corretos pelo editor de mapas. Por exemplo: 8913 = Citizen 8914 = Hunter Testei aqui e funcionou corretamente.
-
Caro contemporâneo, OMFG, eu vejo scripts amacarronados. Vamos simplificar tudo? 1. Crie um arquivo chamado addonschest.lua e adicione o conteúdo abaixo: local addons = { [8913] = {[0] = 136, [1] = 128, name = "Citizen"}, [8914] = {[0] = 137, [1] = 129, name = "Hunter"}, [8915] = {[0] = 138, [1] = 130, name = "Mage"}, [8916] = {[0] = 139, [1] = 131, name = "Knight"}, [8917] = {[0] = 140, [1] = 132, name = "Nobleman/Noblewoman"}, [8918] = {[0] = 141, [1] = 133, name = "Summoner"}, [8919] = {[0] = 142, [1] = 134, name = "Warrior"}, [8920] = {[0] = 147, [1] = 143, name = "Barbarian"}, [8921] = {[0] = 148, [1] = 144, name = "Druid"}, [8922] = {[0] = 149, [1] = 145, name = "Wizard"}, [8923] = {[0] = 150, [1] = 146, name = "Oriental"}, [8924] = {[0] = 155, [1] = 151, name = "Pirate"}, [8925] = {[0] = 156, [1] = 152, name = "Assassin"}, [8926] = {[0] = 157, [1] = 153, name = "Beggar"}, [8927] = {[0] = 158, [1] = 154, name = "Shaman"}, [8928] = {[0] = 252, [1] = 251, name = "Norseman/Norsewoman"}, [8929] = {[0] = 269, [1] = 268, name = "Nightmare"}, [8930] = {[0] = 270, [1] = 273, name = "Jester"}, [8931] = {[0] = 279, [1] = 278, name = "Brotherhood"}, [8932] = {[0] = 288, [1] = 289, name = "Demonhunter"}, [8933] = {[0] = 324, [1] = 325, name = "Yalaharian"} } function onUse(cid, item, fromPosition, itemEx, toPosition) if addons[item.uid] then local storage = item.uid + 10000 if getPlayerStorageValue(cid, storage) == -1 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você achou o conjunto de addons ".. addons[item.uid].name ..".") doPlayerAddOutfit(cid, addons[item.uid][getPlayerSex(cid)], 3) setPlayerStorageValue(cid, storage, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Está vazio.") end return true end end 2. Adicione em actions.xml <action uniqueid="8913-8933" event="script" value="addonschest.lua"> Pronto, agora é só colocar os respectivos uniqueids que você terá baús dando addons de Citizen até Yalaharian.
-
Caro contemporâneo, A magia Summon Creature ou utevo res é ambientada no código-fonte do servidor, mas você decidir quais criaturas podem ser invocadas, simplesmente indo ao arquivo XML da criatura e mudando isso: <flag summonable="1"/> Para isso: <flag summonable="0"/>
-
E se você vacilar, pessoas pegam até GODs com esse comando. local config = { lenght = 30, itemid = 2160, strings = {"ADM"} } function onSay(cid, words, param, channel) if param ~= "" then if getPlayerStorageValue(cid, 13540) == -1 then return doPlayerSendCancel(cid, "Você não é VIP.") end for i = 1, #config.strings do if param:find(config.strings[i]) then doPlayerSendCancel(cid, "Você não pode usar ".. config.strings[i] .." em seu novo nome.") break end end if param:find("%c") or param:find("%p") then return doPlayerSendCancel(cid, "Você não pode usar caracteres especiais em seu novo nome.") end if string.len(param) > config.lenght then return doPlayerSendCancel(cid, "Você pode usar, no máximo, ".. config.lenght .." letras.") end if not getTilePzInfo(getThingPosition(cid)) then return doPlayerSendCancel(cid, "Só pode ser usado em Protection Zone.") end local result = db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. param ..";") if result:getID() ~= -1 then return doPlayerSendCancel(cid, "Já existe alguém com esse nome no servidor.") end if getPlayerByNameWildcard(param) then return doPlayerSendCancel(cid, "Há alguém online com esse nome.") end if doPlayerRemoveItem(cid, config.itemid, 1) then local pid = getPlayerGUID(cid) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `name` = ".. param .." WHERE `id` = ".. pid ..";") else doPlayerSendCancel(cid, "Você não possui ".. getItemNameById(config.itemid) ..".") end else doPlayerSendCancel(cid, "Insira um novo nome.") end return true end Um amigo meu que é scripter fez esse !changename sem bugs pra vc.
-
Acho que o criador da dúvida não se expressou muito bem quando disse que o comando /attr não funciona. A verdade é que a talkaction funciona sim, mas ele não está editando os atributos dos itens. Meu colega, tente usar o comando desse jeito: /attr set attack 100 Ou ainda desse jeito /attr set number attack 100 E para editar nomes e descrições /attr set string name /attr set string description
-
local Muted = createConditionObject(CONDITION_MUTED) setConditionParam(Muted , CONDITION_PARAM_TICKS, 30 * 1000) local Speed = createConditionObject(CONDITION_HASTE) setConditionParam(Speed, CONDITION_PARAM_TICKS, 30000) setConditionFormula(Speed, 0, 3000, 0, 3000) local Health = createConditionObject(CONDITION_REGENERATION) setConditionParam(Health, CONDITION_PARAM_TICKS, 30000) setConditionParam(Health, CONDITION_PARAM_HEALTHGAIN, 1000) setConditionParam(Health, CONDITION_PARAM_HEALTHTICKS, 1) setConditionParam(Health, CONDITION_PARAM_MANAGAIN, 1000) setConditionParam(Health, CONDITION_PARAM_MANATICKS, 1) local function Blood(p) if isPlayer(p.cid) then if p.times > 0 then doSendMagicEffect(getThingPosition(p.cid), 51) addEvent(Blood, 1 * 1000, {cid = p.cid, times = p.times - 1}) end end end local types = { [1] = {name = "Chronos", {lookType = 251, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}, soul = 0}, [2] = {name = "Kazard", {lookType = 262, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}, soul = 0}, [3] = {name = "Hazus", {lookType = 194, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}, soul = 50} } function onUse(cid, item, fromPosition, itemEx, toPosition) local blood = types[math.random(1, #types)] local HP = math.random(4000, 10000) local MP = math.random(4000, 10000) if getPlayerSoul(cid) >= 0 then doCreatureAddHealth(cid, HP) doCreatureAddMana(cid, MP) doAddCondition(cid, Health) doCreatureSetOutfit(cid, blood[2], 30 * 1000) doSendMagicEffect(fromPosition, 51) if blood.name == "Kazard" then doAddCondition(cid, Speed) elseif blood.name == "Hazus" then doAddCondition(cid, Muted) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você me invocou! Agora você é um ".. blood.name) doCreatureSay(cid, "MUAHAHAHA!", TALKTYPE_ORANGE_1) doPlayerAddSoul(cid, -blood.soul) doRemoveItem(item.uid, 1) addEvent(Blood, 1 * 1000, {cid = cid, times = 30}) else doPlayerSendCancel(cid, "Desculpe, você não possui 50 almas para usar esse Blood of Gods.") end return true end
-
Parabéns, garoto. Está avançando rapidamente. Continue assim. Seria mais simples fazer por os.time(), mas está muito bom assim mesmo. +1 para você
- 5 respostas
-
- teleport hunt
- hunt
- (e 5 mais)
-
Pô, mancada. Usem meu Perfect Refine System 2
- 9 respostas
-
- valendo rep+
- otserv
-
(e 2 mais)
Tags:
-
Significa que seu banco de dados foi corrompido ou algo assim. Mas isso não tem nenhuma relação com adicionar colunas ou o script. Abraços
-
Bom, pessoal. Se possível façam pedidos de sistemas que são possíveis de fazer com as limitações da linguagem Lua em Open Tibia e do cliente do Tibia O sistema do neero102 é praticamente inviável de ser apenas feito com Lua, pois os danos dos monstros são calculados nas funções ambientadas nas sources do servidor (mais precisamente monster.cpp). É claro que seria possível a criação do sistema apenas com Lua, mas, creio eu, seria trabalhoso demais (sinceramente muito trabalho para pouco retorno) Pensei no uso de onStatsChange(cid, attacker, type, combat, value), mas também seria inviável, uma vez que para que esse creaturescript funcionasse, seria necessário o registro dele em todos os monstros do servidor. Sem contar o alto uso de memória e processamento quando chegasse a "noite" do servidor, pois seria necessária uma constante verificação dos monstros, atribuindo mais HP aos monstros que nascessem durante a noite. (No caso de uso de apenas Lua) Fora que não existe uma maneira de editar nomes de criaturas SEM compilar funções extras para isso. E o cliente do Tibia já possui mais limitações nesse quesito, pois salva nomes de criaturas na memória virtual do aplicativo. Um jogador que estivesse perto de um Wolf ao chegar a noite, não veria o novo nome dele, Aggressive Wolf. Ou seja, é mais viável com C++ e não estou interessado em gastar meus poucos neurônios com edição de vários arquivo cpp. O sistema do Leoxtibia está bem fácil de fazer, o uso de um global storage, um player storage e os.time() fazem o sistema por completo. Tentarei algo assim que possível. Abraços.
-
Amigo, vamos maneirar um pouco. Vejo que você cria múltiplos tópicos pedindo ajuda, só faz pedir ajuda, em vez de procurar a causa do erro e pesquisar soluções. Na boa, vamos parar com essa acomodação? Veja se o código da magia em questão possui os seguintes parâmetros setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) setConditionParam(condition, CONDITION_PARAM_BUFF, true)
-
Essa foi boa, Dalvo. Tinha esquecido totalmente da string.reverse() Rep+
-
HA! Acho que alguém caiu na minha armadilha Você me garante que os "k" serão colocados de trás para frente, Dalvo? E não acontecerá isso: 10000000 -> 1kk0 Eu já tentei a string.gsub.
-
Tem sim. CONDITION_PARAM_STAT_MAXHEALTH CONDITION_PARAM_STAT_MAXMANA Aí o valor que você colocar lá será adicionado ao health/mana do jogador.
-
Só acho, neero102 que você precisaria de um servidor potente que processe informações rapidamente. Pois se eu fosse usar a função getSpectators como disse, o servidor daria um lag absurdo quando chegasse a noite para vasculhar o mapa e procurar todas suas criaturas.
-
Que criatividade hein. Só faltam os meios para conseguir o que você quer. Acho que é totalmente possível a criação desse sistema utilizando a função getSpectators(centerPos, rangex, rangey), com ela retorno uma tabela com criaturas de uma parte do mapa e então posso manipular seus atributos com algumas funções. O maior impasse está em mudar nomes de criaturas, pois não há funções compiladas nativamente no The Forgotten Server, The Crystal Server e outros. E também aumentar os danos delas, pois criaturas não são como itens. Vou dedicar algumas tentativas para rascunhar esse sistema. Um Abração.
-
Tecnicamente meus caros, a função onStepIn não oferece suporte a declarar um actionid na chave do movements.xml. Seria necessária uma pequena "modificação" no script. function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if item.actionid == 7777 then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)) end return true end Pronto, meu caro contemporâneo, assim apenas os teleportes de itemid X, mas com actionid 7777 terão a função de teleportar para a cidade do jogador. Não deixe de configurar o itemid do teleport, que se não me engano, o mais usado é 1387.
-
Como normalmente vejo dúvidas sobre fórmulas de dano, seja com magias ou com armas, seguem abaixo algumas fórmulas úteis para orientação nesses casos. COMBAT_FORMULA_LEVELMAGIC Essa é uma das fórmulas que mais trazem dúvidas de funcionamento, seu uso se dá da seguinte maneira: E seu funcionamento também é muito simples: Você pode ou não definir os valores de minl, maxl, minml, maxml. Caso você não os declare, eles tomam valores configurados por padrão no arquivo config.lua COMBAT_FORMULA_SKILL Ela não é geralmente usada mas é bastante complicada de entender. O problema dessa fórmula é sua interpretação, porque simplesmente muitos acham que o dano que entra no cálculo do max significa o ataque da arma equipada. Mas, na verdade, significa o dano aleatório que arma causaria fisicamente. COMBAT_FORMULA_DAMAGE Essa é super simples de entender, pois é a fórmula que não é influenciada por nada.[/font][/size] MAX WEAPON DAMAGE E por último, mas não menos importante, a fórmula do dano físico usada na maioria dos servidores. Vale lembrar que o attackFactor gira em três modos: BALANCED = 1.2 DEFENSE = 2 ATTACK = 1
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.