Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''script''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Clubes
    • Calabouço
  • OTServ - Áreas Comuns
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
    • Divulgação de Servidores
    • Projetos e Formações de Equipes
  • Outros
    • Design

Encontrado 58 registros

  1. Senhores, sejam todos muito bem-vindos. Você que possui experiência com OTSERVER (Programador, Scripter, Mapper...) e esteja a procura de um projeto sério, se você é uma pessoa engajada e comprometida com suas responsabilidades e que sabe trabalhar em grupo, aqui é o seu lugar. NEXUSWAR O projeto NEXUSWAR acabou de sair do forno, é isso mesmo, a ideia é desenvolver um projeto com mapa global na versão 8.6 compatível com a realidade para que possamos oferecer a melhor das experiências do Tibia Global, com GUERRAS, EVENTOS, BIG QUESTS, RAIDS e outros... [+] Sistemas [-] Visão geral do projeto Até o momento este e o percentual do projeto. Progresso |||||||||| (0%) [+] Informações do Servidor Mapa Global Full Versão 8.60 [+] A equipe Essa são nossas vagas! Programador (Vaga em aberto) Scripter (Vaga em aberto) Mapper (Vaga em aberto) [+] Contato Rápido Skype: [email protected] WhatsApp: (11) 96261-4291
  2. Pessoal coloquei um ot online e uns amigos fizeram suas contas e vieram sem nenhum item mesmo com o script no creaturescripts funcionando mas depois nao funciona mais o que faço ? alguem tem o script de quest com os itens iniciais ? ja que nao ta dando certo
  3. galera tenho um ot... ja des de 2012 e voltei a hostiar e tem 2 coisas q preciso arrumar house > alguma script q faça com que o player perca a house se ficar uns 30dias of ( pq ja abri esse ot e ele ficou mais de 1 ano on sem reset, e mt house parada ) stamina > quando player morre esta voltando stamina full.. achei alguns tópicos na net, porem nem um resolvido.. (nao tem e nem vou colocar sistema de algum item para ficar full stamina ) (New Slayer Yurots 8.6)
  4. MERLIN BAIAK [8.6]

    Servidor em constante desenvolvimento buscamos uma equipe bem qualificada para ser remunerada! contato pelo servidor merlinpvp.servegame.com ou www.facebook.com/merlinbaiakteam
  5. TFS 1.0 Skill Point System

    Opa galera, eu vi esse script em outro fórum e trouxe aqui para compartilhar com vocês porque achei a ideia bacana. O script é uma forma de customizar seu personagem à medida que ele vai avançando de level. O avanço de level dá ao jogador "pontos", os quais podem ser utilizados para comprar HP, MP e niveis de skills. O grande benefício desse sistema é que jogadores de um mesmo level podem ser radicalmente diferentes e podem se especializar, como no caso de uma equipe/time (um druida com pontos pode se especializar em HP e MP e virar o healer do time, enquanto um knight pode se especializar somente skills para ser o atacante e outro em HP para ser o tank e bloquer) Algumas imagens do funcionamento (retiradas do outro tópico original): Agora que já se interessou pelo sistema, vamos aplicá-lo em nosso servidor! Em /creaturescripts/scripts/skillpoints.lua local SkillPoints = { [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1, [6] = 1, [7] = 1, [8] = 1, } function onAdvance(cid, skill, oldlevel, newlevel) if not (SkillPoints[getPlayerVocation(cid)]) then return true end if (skill == 8) then if (getPlayerStorageValue(cid, 14573) < newlevel) then if (getPlayerStorageValue(cid, 14574) < 0) then setPlayerStorageValue(cid, 14574, 0) setPlayerStorageValue(cid, 14573, 0) end setPlayerStorageValue(cid, 14573, newlevel) setPlayerStorageValue(cid, 14574, getPlayerStorageValue(cid, 14574) + (newlevel - oldlevel) * (SkillPoints[getPlayerVocation(cid)])) doCreatureSay(cid, '+1 Skill Point!', TALKTYPE_ORANGE_1) end end return true endEm /creaturescripts/scripts/login.lua, adicione player:registerEvent("SkillPointSystem")Em /creaturescripts/creaturescripts.xml, adicione <event type="advance" name="SkillPointSystem" script="skillpoints.lua"/>Em /talkactions/scripts/skillpoints.lua local SkillPoints = { [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1, [6] = 1, [7] = 1, [8] = 1, } function onSay(cid, words, param) local player = Player(cid) local vocation = Player(cid) if not (SkillPoints[getPlayerVocation(cid)]) then return false end local param = param:lower() local p2 = param:split(",") if (getPlayerStorageValue(cid, 14574) < 0) then setPlayerStorageValue(cid, 14574, 0) end local skillids = { ["shielding"] = 5, ["sword"] = 2, ["axe"] = 3, ["club"] = 1, ["fist"] = 0, ["distance"] = 4 } local attributes = { ["health"] = {np = 1, vl = 2, skn = "Hit Points"}, ["energy"] = {np = 1, vl = 2, skn = "Mana Points"}, ["magic"] = {np = 15, vl = 1, skn = "Magic Level"}, ["shielding"] = {np = 15, vl = 1, skn = "Shielding Skill"}, ["sword"] = {np = 15, vl = 1, skn = "Sword Skill"}, ["axe"] = {np = 15, vl = 1, skn = "Axe Skill"}, ["club"] = {np = 15, vl = 1, skn = "Club Skill"}, ["fist"] = {np = 15, vl = 1, skn = "Fist Skill"}, ["distance"] = {np = 15, vl = 1, skn = "Distance Skill"}, } if (param == "check") then doPlayerPopupFYI(cid, "<<<<< Skill Points >>>>> \n\nPoints Available: ".. getPlayerStorageValue(cid, 14574) .."\nPoints Per Level: ".. SkillPoints[getPlayerVocation(cid)]) elseif (p2[1] and p2[1] == "add") and (attributes[p2[2]]) and (tonumber(p2[3])) then local creature = Creature(cid) local cpos = creature:getPosition() if (getPlayerStorageValue(cid, 14574) < tonumber(p2[3]) * attributes[p2[2]].np) then doPlayerSendCancel(cid, "you need more skill points go hunt!") return cpos:sendMagicEffect(CONST_ME_POFF) end if (p2[2] == "health") then player:setMaxHealth(player:getMaxHealth() + attributes[p2[2]].vl * tonumber(p2[3])) player:addHealth(attributes[p2[2]].vl * tonumber(p2[3])) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have been rewarded with ".. tonumber(p2[3]) * attributes[p2[2]].vl .. "Hit Points") elseif (p2[2] == "energy") then player:setMaxMana(player:getMaxMana() + attributes[p2[2]].vl * tonumber(p2[3])) player:addMana(attributes[p2[2]].vl * tonumber(p2[3])) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have been rewarded with ".. tonumber(p2[3]) * attributes[p2[2]].vl .. "Mana Points") elseif (p2[2] == "magic") then player:addManaSpent(math.ceil((Vocation(getPlayerVocation(cid)):getRequiredManaSpent(player:getBaseMagicLevel() + 1) - player:getManaSpent()) / configManager.getNumber(configKeys.RATE_MAGIC))) ---Player receives message on Skill Advance elseif(skillids[p2[2]]) then for a = 1, tonumber(p2[3]) do player:addSkillTries(skillids[p2[2]], player:getVocation():getRequiredSkillTries(skillids[p2[2]], player:getSkillLevel(skillids[p2[2]]) + 1) - player:getSkillTries(skillids[p2[2]])) --Player receives message on Level Advance end end setPlayerStorageValue(cid, 14574, getPlayerStorageValue(cid, 14574) - tonumber(p2[3]) * attributes[p2[2]].np) else local msgx = "" for i, v in pairs(attributes) do local add = (v.np > 1) and "s" or "" msgx = msgx .. string.upper(i:sub(1,1)) .. i:sub(2, #i) .. " - ".. v.np .. " points".. add .. " = " .. v.vl .. " ".. v.skn .. "\n" end doPlayerPopupFYI(cid, " <<<<<<<< Add Skill Points >>>>>>>> \n\n Skill Points are used to customize your character\n\n".. msgx .. "\nExample of Use: ".. words .." add,health, 1\n\nPoints available: ".. getPlayerStorageValue(cid, 14574)) end return true endEm /talkactions/talkactions.xml, adicione <talkaction words="!points" separator=" " script="skillpoints.lua"/>Se gostou, poste!<Não testei o script, embora tenham garantido no outro fórum que está funcionando... se não funcionar, poste no próprio tópico os erros relacionados a esse script ou então em nossa seção de dúvidas de scripting (http://forums.otserv.com.br/index.php/forum/170-dúvidas/)>
  6. Olá meu nome é Jean Carlos e estou a procurar de uma equipe com o servidor já online ou preste a abrir. Segue abaixo algumas fotos de trabalhos. [spoiler=Designer] Capa de facebook da pagina do meu clan. Escudo do meu Clan [spoiler=Mapper] OBS: Fotos antigas [spoiler=WebDesigner] Interessado manda pm ou deixar informações a baixo.
  7. Upgrade System (DIFERENTE)

    Olá pessoal da Otserv, Tudo beleza ? Como vocês já perceberam eu vou postar um Script de Upgrade (Avá?) Segue os dados do script: Vamos começar, 1º vá na pasta de seu servidor e entre data/actions/scripts e crie um novo arquivo chamado Upgrade.lua Dentro deste arquivo coloque o seguinte código: (EXPLICAÇÕES NO SCRIPT) após isso volte em data/actions e abra actions.xml e adicione a seguinte linha: NESTA COR - Coloque o ID de sua pedra de Upgrade (EXTRA) Como adicionar mais itens ? Simples basta pegar o script e Copiar as seguintes linhas: e coloca-las novamente (lembrando de editar) Ficando de assim: Para Assim: [spoiler=Imagens de como funciona] [ATTACH]5375[/ATTACH] Obrigado, Espero que tenham gostado.
  8. Funções iteradoras em Lua

    Iteradores são funções especiais criadas para iterar, ou seja, percorrer, listas, vetores (arrays), matrizes, tabelas ou o que quisermos. Nós criamos iteradores para usar na função for. Um exemplo de iterador que você já deve conhecer é o pairs. Vamos supor que eu tenha a seguinte tabela: k = {1, 2, 3, 4, 5} E eu queira iterar por todos eles imprimindo o seu quadrado. Como faríamos isso? Casualmente, o código seria este: for i = 1, 5 do print(i ^ 2) end Mas e se eu quiser fazer isso várias vezes? Com uma lista que não segue um padrão? Então criamos um iterador, mas primeiro, vamos entender a estrutura de um em pseudocódigo Lua: function iterator(values) local pos = 0 --posição do iterador na lista return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] end return nil end end Perceba que eu não retorno um valor especifico ao chamar a função iterator(), eu retorno uma nova função. Essa função será chamada pelo for até que seu retorno seja nil, onde Lua assume que o iterador acabou. E como eu sei quando acaba? Simples, há uma variável (chamei, neste caso, de pos) que armazena a posição dentro do array values do próximo valor a ser retornado. A cada iteração, o valor aumenta em 1 dentro da função. Quando eu acessar um índice dentro do array que não existe, seu valor (values[pos]) será nil, portanto eu testo essa condição. Parece bastante complexo, mas vamos voltar ao exemplo do quadrado. Chamarei minha função iteradora de square: function square(numbers) local pos = 0 return function() pos = pos + 1 if values[pos] ~= nil then return values[pos] ^ 2 end return nil end end A cada chamada da função de retorno, eu aumento a posição e retorno este elemento elevado ao quadrado. Então, usarei a função assim: for i in square(k) do print(i) end Que funciona como o esperado: O que mais podemos fazer com iteradores? Podemos, por exemplo, bloquear uma palavra usando a função onTalk do xotservx (pesquise no Google): local palavra = "jujuba" function splitWords(phrase) local pos = 0, words = phrase:gmatch("%w+") return function() pos = pos + 1 if words[pos] ~= nil then return words[pos] end return nil end end function onTalk(cid, type, text, position) for w in splitWords(text) do if w = palavra then return false end end return true end Claro que esse exemplo é bastante simplório, mas demonstra a utilidade dos iteradores. Neste caso, eu testo todas as palavras que o player falou para encontrar uma palavra especifica que eu defini. Podemos transformar isso tudo em um loop while, para você entender um pouco melhor: local words = splitWords(text) while w = words() do if w == nil then break end if w = palavra then return false end end end return true Usando o iterador, ganhamos organização no código e o controle do for. Espero que façam bom uso de iteradores para organizar seus códigos
  9. Delay em Escadas.

    [spoiler=Padrão] Nome: Delay em Escadas; Autor: MiltonHit, Mirto; Testada: Sim, TFS 0.3.6 (8.54). Olá, hoje vou postar um script muito simples, porém bastante legal e útil. Ele é o seguinte, quando o player sobe ou desce uma escada, o script faz o player esperar um tempo configurável não repetir a mesma ação, ou seja, ele terá de esperar o tempo que você determinar para subir ou descer alguma escada novamente, ideal para servidores que tem muito PvP de escadas. Em data/movements/scripts copie um arquivo qualquer .lua e renomeie para stairs.lua, apague tudo que estiver la dentro e coloque o seguinte code: function onStepIn(cid, item, position, fromPosition) local storage = 89301 --storage gravada local delay = 1 --tempo configuravel do delay if (getPlayerStorageValue(cid, storage) <= os.time()) then setPlayerStorageValue(cid, storage, os.time()+delay) return true else doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "Wait one moment for use this stair.") end return true end Bom, agora vem a parte mais "chata", você precisa setar o id de todas escadas do servidor, tanto as que descem quanto as que sobem, eu vou postar a lista que eu fiz para o meu servidor (8.54) mais se o seu servidor for outra versão com certeza você terá de alterar os IDS, vá em data/movements/movements.xml e adicione a seguinte linha: <movevent type="StepIn" itemid="459;8564;8565;8566;8560;8561;8562;8563;8559;6924;6923;6922;6918;6919;6920;6917;9574;480;5259;5260;3687;3688;9573;1388;1390;1392;1394;5258;6921;6130;6129;6128;411;423;4836;9846;432;433;4837;475;429;3138;8282;476;3219;3220;8283;479;4834;4835;7925;7924;1396;1385;8372;6915;6913;6911;6909;3685;3683;3681;8374;8376;8378" event="script" value="stairs.lua"/> Pronto, está tudo instalado! Só não se esqueça que se você não configurar essa linha acima de acordo com o seu servidor, você poderá ter problemas. Abraços, qualquer coisa dá um grito.
  10. [Ultilitário] Controle de Script v1

    [C]ontrole de cript Olá, estava sem nada pra fazer, e um belo tempo sem programar, então procurei por um ultilitário para gerenciar scripts .lua, e não achei. Então resolvi criar um. Descrição: O programa gerencia scripts .lua, no caso: actions, creaturescripts, globalevents, movements, npcs, lib, talkactions, e weapons. Fotos do programa: [spoiler=Visualizar] Download: Controle de Script: Link 1: Clique Aqui. / Link 2: Clique Aqui. Scan: Clique Aqui. Créditos: Ronaldo Dias ( Eu, BlueeYakuzy). Gostou ? Comente, e doe V$ ! Caso gostarem, irei fazer um update pra versão 2.
  11. Lib Spell (POO) !

    ┌───────────────────────────────────────────────┐ │Nome: Spell System │Versão do script: 1.0.0 │Tipo do script: System/Lib │Servidor Testado: The Forgotten Server 0.4.0 Crying Damson │Autor: Lwkass └───────────────────────────────────────────────┘ Bem, é uma lib que criei para criação de spells, também para mostrar um sistema com "POO" em lua, já vou dizendo que não é super super útil (talvez seja para alguns), mas como eu estava com vontade de fazer pode acabar ajudando a diminuir codes também. Caracteristicas: Script: Apenas um script, crie um arquivo Lua com o nome de Spell-class.lua na pasta data/lib: --[[ @ Spell System By Lwkass form OTServerBrasil ! @ Version: 1.0.0 - Any questions (msn): [email protected] ]] ----------===================------------- ---- CONFIGURATIONS ----------===================------------- SpellOptions = { sendCastSay = true, -- true = Vai mandar uma mensagem sempre que usar uma spell showAnimatedValues = true, -- true = Ativa efeito animado onlySpellOwnerSeeAnimation = true -- true = Apenas o usuario da spell ve a animacao } ---- Constantes SPELL_TYPE_DIRECTION = 0 SPELL_TYPE_AREA = 1 ----------===================------------- ---- GENERAL FUNCTIONS ----------===================------------- function getPosByArea(area, topleftpos) arr = {} for y, a in pairs(area) do arr[y] = {} for x, tile in pairs(a) do arr[y][x] = {x=(x-1)+topleftpos.x, y=(y-1)+topleftpos.y, z=topleftpos.z} end end return arr end function rotateArea(area, angle) final = {} angle = math.rad(angle) for y, a in pairs(area) do for x, tile in pairs(a) do temp = {x = (x * math.cos(angle) + y * math.sin(angle)), y = (x * (-math.sin(angle)) + y * math.cos(angle))} e_x, e_y = (temp.x < 0 and #a + (temp.x) + 1 or temp.x), ((temp.y < 0 and #area + (temp.y) + 1 or temp.y)) final[e_y] = final[e_y] or {} table.insert(final[e_y], e_x, tile or 0) end end return final end ----------===================------------- SpellTile = {} function SpellTile:create(combat, effect, damage) --[[ - Cria uma SpellTile Param: #1 (combat) = combat para o tile, válido todos os combats do tibia (exemplo: COMBAT_PHYSICALDAMAGE, COMBAT_ENERGYDAMAGE, COMBAT_MANADRAIN, etc...) #2 (effect) = efeito para o tile, válido todos os efeitos do tibia (exemplo: CONST_ME_DRAWBLOOD, CONST_ME_LOSEENERGY, CONST_ME_POOF, etc...) #3 (damage) = tabela de dano, que deve seguir esse modelo: {min = -dano_minimo, max = -dano_maximo} ]] return setmetatable({ combat = combat, effect = effect, damage = damage }, { __index = self }) end function SpellTile:setCondition(condition) --[[ - Define uma condição para o SpellTile e retorna uma cópia do próprio SpellTile Param: #1 (condition) = Precisa ser uma condition válida do tibia, exemplo: condition = createConditionObject(CONDITION_POISON) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 10, 2000, -10) ]] copy = SpellTile:create(self.combat, self.effect, self.damage) copy.delay = self.delay copy.center = self.center copy.condition = condition return copy end function SpellTile:setSpellCenter() --[[ - Define que esse SpellTile é o centro da magia e retorna uma cópia do próprio SpellTile ]] copy = SpellTile:create(self.combat, self.effect, self.damage) copy.delay = self.delay copy.center = true return copy end function SpellTile:delay(mili) --[[ - Define um delay para lançar o spelltile e retorna uma cópia do próprio SpellTile Param: #1 (mili) = Tempo em milisegundos até lançar o spelltile ]] copy = SpellTile:create(self.combat, self.effect, self.damage) copy.delay = mili return copy end ----------===================------------- --[[ @ Spell System By Lwkass form OTServerBrasil ! @ Version: 1.0.0 - Any questions (msn): [email protected] ]] ----------===================------------- Spell = {} -- Construtor function Spell:create(spellwords, spelltype, options) --[[ - Cria uma nova spell Param: #1 (spellwords) = Palavras mágicas da spell #2 (spelltype) = Tipo da spell, é necessário utilizar os valores que estão no Spell-class.lua, por exemplo: SPELL_TYPE_DIRECTION (para spell com direção) ou SPELL_TYPE_AREA (para spell com area) #3 (options) = uma tabela com opções da spell, pode possuir esses valores (não é necessário colocar todos !): options = { level = 1, -- Level necessario maglevel = 1, -- Magic Level necessario mana = 100, -- Mana necessaria maxDistance = 3, -- Distancia máxima needWeapon = true, -- Se precisa estar usando alguma arma vocation = {1,2,3,4,5}, -- Vocações que podem usar a magia sex = 0, -- Sexo que pode usar a magia group = 2 -- Group minimo para usar a magia } ]] return setmetatable({ spellwords = spellwords, spelltype = spelltype, level = options and options.level or 0, maglevel = options and options.maglevel or 0, mana = options and options.mana or 0, options = options or {} }, { __index = self }) end -- Setters & Getters function Spell:setArea(area) --[[ - Define a area da spell Param: #1 (area) = Uma tabela que segue o modelo padrão de magias (exemplo: {{1,1,1},{1,1,1},{0,3,1}}) ]] self.area = area end function Spell:setOption(option, value) --[[ - Define as opções Param: #1 (option) = opção (exemplo: mana, level...) #2 (value) = valor ou novo valor ]] self.options = self.options or {} self.options[option] = value end function Spell:setMaxDistance(n) --[[ - Define a distancia máxima para usar a spell, pode-se definir direto através da tabela options também (maxDistance = distancia) Param: #1 (n) = Distancia máxima ]] self:setOption("maxDistance", n) end function Spell:setDefaultTile(tile) --[[ - Define a spellTile padrão para a spell (usa-se a marcação 1 na area) Param: #1 (tile) = precisa ser um spellTile ]] self.dftTile = tile end -- Others function Spell:getCreatureMark() --[[ - Procura e retorna a posição do tile que seja igual a 3 ou que esteja com a marcação tile.center = true ]] for y, b in pairs(self.area) do for x, d in pairs( do if ((type(d) == "table" and d.center) or d == 3) then return {x = x,y = y} end end end end -- Main Function function Spell:cast(cid, target) --[[ - Lança a magia Param: #1 (cid) = usuario da magia #2 (target) = alvo da magia (se necessário) ]] if (not isCreature(cid)) then return print('[spellClass - Warning / "'.. self.spellwords ..'"]: The cid must be a creature !') end -- Target checks if (target) then if (not isCreature(target)) then -- Target is not selected return doPlayerSendCancel(cid, "You need a target.") end if (self.spelltype == SPELL_TYPE_DIRECTION) then return print('[spellClass - Warning / "'.. self.spellwords ..'"]: Set the spelltype to SPELL_TYPE_AREA or remove the param target from the method \'cast\' !') end end -- Options for option, value in pairs(self.options) do if (target and option == "maxDistance" and type(value) == "number") then if (getDistanceBetween(getThingPos(cid), getThingPos(target)) > value) then return doPlayerSendCancel(cid, "Target too far.") end elseif (option == "needWeapon" and value) then if (getPlayerWeapon(cid).uid == 0) then return doPlayerSendCancel(cid, "You need be using a weapon.") end elseif (option == "vocation" and type(value) == "table") then if (not isInArray(value, getPlayerVocation(cid))) then return doPlayerSendCancel(cid, "Your vocation can't use this spell.") end elseif (option == "sex" and type(value) == "number") then if (not getPlayerSex(cid) == value) then return doPlayerSendCancel(cid, "Your sex can't use this spell.") end elseif (option == "group" and type(value) == "number") then if (not getPlayerGroupId(cid) >= value) then return doPlayerSendCancel(cid, "You can't use this spell.") end end end -- Cid checks if (isPlayer(cid)) then if (getPlayerLevel(cid) >= self.level) then if (getPlayerMagLevel(cid) >= self.maglevel) then if (getCreatureMana(cid) >= self.mana) then doCreatureAddMana(cid, -(self.mana)) if (SpellOptions.showAnimatedValues) then doSendAnimatedText(getThingPos(cid), self.mana, COLOR_PURPLE, (SpellOptions.onlySpellOwnerSeeAnimation and cid or false)) end else return doPlayerSendCancel(cid, "You need " .. self.mana .. " of mana to use this spell.") end else return doPlayerSendCancel(cid, "You need magic level " .. self.maglevel .. " or greater to use this spell.") end else return doPlayerSendCancel(cid, "You need level " .. self.level .. " or greater to use this spell.") end end -- Direction change if (self.spelltype == SPELL_TYPE_DIRECTION) then local dir = {[0] = 0, [1] = 270, [2] = 180, [3] = 90} self:setArea(rotateArea(self.area, dir[getCreatureLookDirection(cid)])) end -- Main local playerPos, player = getThingPos((target or cid)), self:getCreatureMark() local theArea = getPosByArea(self.area, {x=playerPos.x - player.x + 1, y=playerPos.y - player.y + 1, z=playerPos.z}) if (SpellOptions.sendCastSay) then doCreatureSay(cid, getCreatureName(cid) .. " casts " .. self.spellwords .. " !", TALKTYPE_MONSTER) end for y, b in pairs(self.area) do for x, _tile in pairs( do local tilePos = theArea[y][x] local tile = ((_tile == 1) and self.dftTile or _tile) if (tile ~= 0 and tile ~= 3) then if (tile.condition) then doAreaCombatCondition(cid, tilePos, {1}, tile.condition, tile.conditionEffect or CONST_ME_NONE) end addEvent(doAreaCombatHealth, tile.delay or -1, cid, tile.combat, tilePos, {1}, tile.damage.min, tile.damage.max, tile.effect) end end end return true end --[[ @ Spell System By Lwkass form OTServerBrasil ! @ Version: 1.0.0 - Any questions (msn): [email protected] ]] Caso seu server não carregue automaticamente o script, tente adicionar essa linha a qualquer outro arquivo lua da pasta lib: dofile('data/lib/Spell-class.lua') Pronto ! Aqui um exemplo de spell com esse sistema: function onCastSpell(cid, var) spell = Spell:create("spell", SPELL_TYPE_DIRECTION, {mana = 100, level = 10, maglevel = 5}) tile = SpellTile:create(COMBAT_PHYSICALDAMAGE, 15, {min = -1, max = -2}):delay(500) spell:setArea({ {tile, tile, tile}, {0, tile, 0}, {0, tile, 0}, {0, 3, 0} }) spell:cast(cid) end Usos: Você pode usar assim também a area se quiser: spell:setArea({ {tile:delay(10), tile, tile:delay(620)}, {0, tile:delay(100), 0}, {0, tile, 0}, {0, 3, 0} }) Cada spelltile vai aparecer no delay que estiver ali marcado e os que não estiverem aparecerão no delay = 500 (que está definido em 'tile'). ---- Para adicionar conditions pode ser feito assim: local condition = createConditionObject(CONDITION_FIRE) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 10, 2000, -10) spell:setArea({ {tile:delay(10), tile, tile:delay(620)}, {0, tile:delay(100):setCondition(condition), 0}, {0, tile, 0}, {0, 3, 0} }) Apenas o tile que está com o setCondition vai receber a condition ! ---- Para uma spell de area que é lançada em um alvo é necessário deixar a spell dessa maneira: function onCastSpell(cid, var) spell = Spell:create("spell", SPELL_TYPE_AREA, {mana = 100, level = 10, maglevel = 5}) tile = SpellTile:create(COMBAT_PHYSICALDAMAGE, 15, {min = -1, max = -2}):delay(500) spell:setArea({ {tile, tile, tile}, {0, tile, 0}, {0, tile:setSpellCenter(), 0} }) spell:cast(cid, getCreatureTarget(cid)) end ---- Mas caso você queira definir um spelltile como padrão para a spell (Sempre que usar o 1 na area esse spelltile será chamado), você pode fazer assim: function onCastSpell(cid, var) spell = Spell:create("spell", SPELL_TYPE_DIRECTION, {mana = 100, level = 10, maglevel = 5}) spell:setDefaultTile(SpellTile:create(COMBAT_ENERGYDAMAGE, 30, {min = -1, max = -2})) -- Define o tile padrão tile = SpellTile:create(COMBAT_PHYSICALDAMAGE, 15, {min = -1, max = -2}):delay(500) spell:setArea({ {tile, tile, tile}, {1, 1, 1}, {1, tile, 1}, {0, 3, 0} }) spell:cast(cid) end Então sempre que usar o numero 1 na area ele será substituido pelo spelltile padrão ! Todas as funções estão comentadas, em caso de dúvida sobre como usar uma função, leia o código-fonte ou pergunte aqui mesmo
  12. The Zodiac ~

    ┌──────────────────────────────────────────────────┐ │Nome: Sign of Zodiac │Versão do script: 1.0.0 │Tipo do script: Sistema (Creature Script, Talkaction e Lib) │Servidor Testado: The Forgotten Server 0.4.0 Doomed Elderberry │Autor: Lwkass └──────────────────────────────────────────────────┘ Por mais que o feedback do meu ultimo post (Lib para criar Spell) tenha sido pouco, vou postar mais um script... É um sistema de Signo do Zodíaco, onde cada signo da um bônus (por enquanto apenas 2), a ideia está bem inicial, mas pretende continua-lo. - Características: - Explicando: Para escolher o signo o player deve colocar o dia e o mês do aniversário e o sistema automaticamente coloca o signo, comando: Só para deixar claro como o sistema funciona, usando de exemplo o signo de Leão (Leo) que é do elemento Fire: * Se receber um dano do elemento Fire, absorve 5% (modificável) do dano total, ou seja, o dano seria igual a 95% do que seria (dano absorvido indicado por animatedText). * Se matar um monstro que tenha uma defesa contra Fire maior que 0% ganha bônus de 10% (modificável) da exp total, ou seja, ganha-se 110% (exp extra indicada por animatedText). Se o signo fosse do elemento Earth, então seria a mesma coisa só que com o elemento Earth, se fosse Ice ou Lighting a mesma coisa. Pode-se usar o comando !zodiac info para informações. - Script: Primeiro, na pasta data/lib (caso a pasta não exista, crie) do seu servidor crie um arquivo Lua com o nome zodiac-Lib.lua (Lib com maiúscula) e salve com isso dentro: --[[ Sign of Zodiac System v1.0.0 by: Lwkass ([email protected]) ]] Zodiac = { constant = { OPTION_PERCENT_BLOCK = 5, -- In Percent OPTION_EXTRA_EXP_RATE = 10, -- In Percent STORAGE_SIGN = 16161, elements = { ["Fire"] = { combat = COMBAT_FIREDAMAGE, color = COLOR_ORANGE }, ["Earth"] = { combat = COMBAT_EARTHDAMAGE, color = COLOR_LIGHTGREEN }, ["Lighting"] = { combat = COMBAT_ENERGYDAMAGE, color = COLOR_TEAL }, ["Ice"] = { combat = COMBAT_ICEDAMAGE, color = COLOR_LIGHTBLUE } } }, signs = { ["Aries"] = { date = {"21/03", "20/04"}, element = "Fire" }, ["Taurus"] = { date = {"21/04", "20/05"}, element = "Earth" }, ["Gemini"] = { date = {"21/05", "20/06"}, element = "Lighting" }, ["Cancer"] = { date = {"21/06", "21/07"}, element = "Ice" }, ["Leo"] = { date = {"22/07", "22/08"}, element = "Fire" }, ["Virgo"] = { date = {"23/08", "22/09"}, element = "Earth" }, ["Libra"] = { date = {"23/09", "22/10"}, element = "Lighting" }, ["Scorpio"] = { date = {"23/10", "21/11"}, element = "Ice" }, ["Sagittarius"] = { date = {"22/11", "21/12"}, element = "Fire" }, ["Capricorn"] = { date = {"22/12", "20/01"}, element = "Earth" }, ["Aquarius"] = { date = {"21/01", "19/02"}, element = "Lighting" }, ["Pisces"] = { date = {"20/02", "20/03"}, element = "Ice" } }, getSignInfo = function (signName) return Zodiac.signs[signName] end, set = function (cid, signName) setPlayerStorageValue(cid, Zodiac.constant.STORAGE_SIGN, signName) end, get = function (cid) return getPlayerStorageValue(cid, Zodiac.constant.STORAGE_SIGN), Zodiac.getSignInfo(getPlayerStorageValue(cid, Zodiac.constant.STORAGE_SIGN)) or 0 end, getElement = function (cid) return Zodiac.getSignInfo(getPlayerStorageValue(cid, Zodiac.constant.STORAGE_SIGN)).element end, getSign = function (cid, day, month) for sign, info in pairs(Zodiac.signs) do _, _, beginDay, beginMonth = info.date[1]:find("(%d+)/(%d+)") _, _, endDay, endMonth = info.date[2]:find("(%d+)/(%d+)") beginDay, beginMonth, endDay, endMonth = tonumber(beginDay), tonumber(beginMonth), tonumber(endDay), tonumber(endMonth) if ((month == beginMonth and day >= beginDay) or (month == endMonth and day <= endDay)) then return sign, info end end end } Agora na pasta data/creaturescripts/scripts: No arquivo login.lua adicione isso antes do return: -- Zodiac registerCreatureEvent(cid, "zodiacKill") registerCreatureEvent(cid, "zodiacStats") if (getPlayerLastLogin(cid) <= 0 or getPlayerStorageValue(cid, 16160) == 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Please, when is your birthday date ? (Example: !zodiac day/month = !zodiac 1/2, !zodiac 23/7,...)") setPlayerStorageValue(cid, 16160, 1) -- Talk state else doPlayerSetSpecialDescription(cid, ", sign of " .. getPlayerStorageValue(cid, 16161)) end E crie esses arquivos: zodiacKill.lua dofile('data/lib/zodiac-Lib.lua') function getMonsterPath(monstername) f = io.open ("data/monster/monsters.xml", 'r') for line in f:lines() do _, _, name, path, file_name = string.find(line, '<monster name="(.+)" file="(.+)/(.+).xml"/>') if (name and path and file_name and name:lower() == monstername:lower()) then f:close() return path .. "/" .. file_name .. ".xml" end end end function getMonsterElementDefense(monstername, element) f = io.open ("data/monster/" .. getMonsterPath(monstername), 'r') for line in f:lines() do if (string.find(line, '</elements>')) then break end _, _, n = string.find(line, '<element '.. element:lower() ..'Percent="([-%d]+)"/>') if (n) then f:close() return tonumber(n) end end f:close() return 0 end ------- function onKill(cid, target, lastHit) if (isMonster(target) and getMonsterElementDefense(getCreatureName(target), (Zodiac.getElement(cid) == "Lighting" and "Energy" or Zodiac.getElement(cid))) > 0) then local exp_bonus = math.ceil(getMonsterInfo(getCreatureName(target)).experience * (Zodiac.constant.OPTION_EXTRA_EXP_RATE/100)) doSendAnimatedText(getThingPos(cid), exp_bonus, COLOR_GREY) doPlayerAddExperience(cid, exp_bonus) end return true end zodiacStats.lua dofile('data/lib/zodiac-Lib.lua') function onStatsChange(cid, attacker, type, combat, value) playerSign = Zodiac.get(cid) if (combat == Zodiac.constant.elements[Zodiac.getElement(cid)].combat) then valuem = math.ceil(value*(Zodiac.constant.OPTION_PERCENT_BLOCK/100)) doCreatureAddHealth(cid, valuem) doSendAnimatedText(getThingPos(cid), "+"..valuem, Zodiac.constant.elements[Zodiac.getElement(cid)].color) end return true end Certo, agora no arquivo data/creaturescripts/creaturescripts.xml, adicione isso: <event type="statschange" name="zodiacStats" event="script" value="zodiacStats.lua"/> <event type="kill" name="zodiacKill" event="script" value="zodiacKill.lua"/> Na pasta data/talkactions/scripts, adicione um arquivo Lua com o nome de zodiacTalk.lua: dofile('data/lib/zodiac-Lib.lua') function onSay(cid, words, param, channel) if (param:len() == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You can use '!zodiac day/month' or '!zodiac info'") return true end playerSign, Info = Zodiac.get(cid) if (type(playerSign) == "string" and param:lower() == "info") then doPlayerPopupFYI(cid, [[ Zodiac Informations ~ ------------------------------- * Sign: ]] .. playerSign .. [[ * Element: ]] .. Info.element .. [[ * Bonus: +]] .. Zodiac.constant.OPTION_EXTRA_EXP_RATE .. [[% experience of ]] .. Zodiac.getElement(cid) .. [[ monsters +]] .. Zodiac.constant.OPTION_PERCENT_BLOCK .. [[% of defense in attacks with ]] .. Zodiac.getElement(cid) .. [[ element ]]) elseif (getPlayerStorageValue(cid, 16160) == 1) then _, _, day, month = string.find(param, "(%d+)/(%d+)") day, month = tonumber(day), tonumber(month) if (day and month and day > 0 and day <= 31 and month > 0 and month <= 12) then Zodiac.set(cid, Zodiac.getSign(cid, day, month)) playerSign = Zodiac.get(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param) doSendMagicEffect(getThingPos(cid), math.random(28, 30)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You sign of zodiac is " .. playerSign .. " which is of element " .. Zodiac.getElement(cid) .. " !") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You can see more information saying '!zodiac info', remember this...") setPlayerStorageValue(cid, 16160, -1) else doPlayerSendCancel(cid, "You put a invalid date.") end end return true end Coloque essa tag no arquivo data/talkactions/talkactions.xml <talkaction words="!zodiac" event="script" value="zodiacTalk.lua"/> ChangeLog: E é isso ! Qualquer dúvida, sugestão, critica só dizer ^^
  13. Nãot em área de Show-off vejam!

    Bom, como dito no titulo, não há áreas de show-off para scripts, por tanto, estou postando aqui. Eu fiz este "Script" super pequeno, que da tantos % de exp para quem for da guild dona do WoE, más eu não estou conseguindo ligar meu servidor, para testar, então pesso que testem e depois avaliem ou deem dicas, estou começando agora, e espero que este script seja funcional. Outra coisa, eu não consigo postarna área de scripts, fala que eu não tenho autorização.. se não, este script já estaria lá Bom vamos ao que intereça. Creaturescripts/scripts copie e renomeie qlqer 1 para woexp.lua, apague tudo que tiver dentro e ponha isso dentro. function onLogin(cid) local rate = 1.2 local config = { leader = "Voce é lider do castelo então guanha "..((rate - 1)*100).." % de exp a mais agora!", notleader = "Tornesse Lider do castelo e guanhe "..((rate - 1)*100).." % de exp a mais!", } if Woe.guildName(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.notleader) else doPlayerSetExperienceRate(cid, rate) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.leader) end return TRUE end Na creaturescrips.xml adicione: <event type="login" name="WoExp" script="woexp.lua"/> E em login.lua em creaturescripts/scripts adicione: registerCreatureEvent(cid, "WoExp") Por favor, críticas,sugestões,correções, e se tiver faltando alguma coisa, e so falar! Por favor testem, ou se ver algum erro avisem antes, para eu arrumar. Obrigado, espero respostas!!
  14. Boa noite, primeiramente vou colocar alguns dados do nosso Servidor Online 24h: - MAPA EDITED 8.60 - OTServer Perfeito, RPG com muita aventura! - Servidor dedicado 24/7 100mb uplink EUA. - Vocações 100% balanceadas - Equipe séria e dedicada! - Exp por stages - Runas Infinitas - ONLINE 24H - ================================== Vagas na Equipe: Como você pode perceber nosso servidor é Sério, pagamos um DataCenter para que ele fique Online 24h, no momento gostariamos de melhorar nosso mapa, e colocar alguns sistemas novos, como VIP"Para arrecadar doações", Ilhas e Cidades novas! Novas Hunts, por isso gostariamos de contratar algum Scripter/Mapper para esta função, pagamos em R$ Dinheiro REAL! :money::money::money: Entre em contato comigo via MSN! Obs: Sex, Sab e Dom estou Online quase que 24h!:mindfuck: MSN: [email protected] :witch::witch::witch:
  15. Moeda da Sorte

    Bom galera, o iuniX me deu uma pequena aula de script e decidi me virar. O Script a seguir faz o seguinte: Você dá use na scarab coin (ou se você modificar no item que você escolher) e tem 10% para ganhar 1kk. (Pode usar a scarab coin em eventos ou monstros dificeis como bosses) Abra data/actions/scripts e lá dentro crie uma pasta chamada moedasorte.lua e ponha isso lá dentro: function onUse(cid, item, pos) if math.random(100) <= 10 then doSendMagicEffect(pos, 30) doPlayerAddItem(cid, 2160, 100) end doRemoveItem(item.uid) return true end E adicione isso no actions.xml: <action itemid="2159" event="script" value="moedasorte.lua"/> o 2159 é o ID do scarab coin, se você quizer mudar o item é ali. Pronto, agora sua moeda da sorte está pronta. Obrigado. ps: Agradeço ao Catios por ter visto o pequeno erro que cometi.
  16. Scripter

    Scripter Nome:Tiago Lins Idade: 21 Contato:[email protected] Experiencia:7 anos Estou com bastante tempo livre agora,então descidi procurar um ot que precisasse de um scripter já que adoro esse serviço. Obrigado!
  17. OTServ Live Action! Recrutando!

    OTServ Live Action! Ola, Galerinha da OTNET!!! Quanto tempo ein?(Faz tanto tempo que dei até sorte de acertar a Acc deste perfil kkk...) Bom, voltando a ativa, com uma incrível proposta para vocês... Sim realmente isto é uma proposta séria, não é para criação de servidores, formação de qualquer tipo de equipe, ou algo do gênero, eu estou realmente buscando bons programadores e scripters conhecimento nas seguintes áreas, para que eu concretize uma idéia para auxiliar o mundo do Tibia! ..:: Vagas ::.. Administrador Geral, Idealista e Fundador do projeto - Eu(Pedro Michel) Coordenadores: [Vago!], [Vago!] (Estás vagas só serão preenchidas por pessoas realmente de minha confiança dentro do projeto, então por favor não insista em pedi-la!) Analistas(Idealistas) [Vago!], [Vago!] (Estás vagas só serão preenchidas por pessoas realmente por dentro do projeto, que façam boas analises e tirem conclusões exatas de cada fato ocorrido dentro do projeto!) Designer Gráfico [bioquímico], [Vago!] (Procuro bons designers com grande facilidade em criação de interface de programas etc... Isso será discutido via MSN!) Programadores [Vago!], [Vago!], [Vago!] (Será um trabalho mega importante dentro do projeto, só se inscreva se você realmente tem um bom conhecimento na área da criação de softwares!) Scripters de Tibia(.lua) [Vago!], [Vago!], [Vago!], [Vago!] (Será necessário bons scripters na área do Tibia, para ajudar na configuração e na projeção dos códigos de forma que fique "legível"(Isso será discutido via MSN), estou recrutando scripters que tenho conhecimento dês das versões do Tibia 7.6 até as versões atuais(Creio que seja 8.70) ..:: A idéia ::.. Bom como toda boa idéia, ela veio de erros e principalmente do nada! Enquanto eu estudava um pouco de scripts, notei que algumas pessoas tinham mais facilidade em aprender os scripts em forma de códigos(.lua), e outras por formas mais distintas onde elas compreendiam o que tem que é preciso fazer más não sabiam passar para o papel, por isso veio a idéia do OTServ Live Action!(Nome a ser refeito futuramente)! ..:: O Projeto ::.. Bom o projeto em si está na mesa de planejamento (Quase pronto para fluir), por isso preciso de pelo menos 40% das vagas preenchidas para começar os debates, apresentações mais detalhadas e mais a fundo do projeto, tempo para bolar como ira funcionar, demonstrar o que eu quero proporcionar, qual a finalidade, e por fim ir fazendo testes e criações “BETA” a serem divulgadas(OBS: Esse projeto não tem nenhum intuito de fazer propagandas de nenhum local, a não ser que realmente sejamos motivados a isso) Progresso Geral → ░░░░░░░░░░ 0% Progresso para a primeira BETA → ░░░░░░░░░░ 0% ..:: Proposta Inicial ::.. A proposta é de desenvolver um software cuja função seja de auxiliar os players, na hora de desenvolver scripts e seus derivados (OBS: Não estou aqui visando criar um OTScript Live nem nada do gênero, o OTServ Live Action! é outra coisa....), o software em questão tem uma função única, de auxiliar o player que tem mais dificuldade na hora de "botar no papel" o seu script(idéias). Então com tudo eu posso dizer, se o projeto realmente fluir eu digo, adeus códigos complicados e sérias dificuldades, e bem vindo aos anos 2000 onde o processo é mais rápido, pratico e detalhado! (OBS: Não, eu não sou nenhum deus, nem santo milagreiro, só vejo e falo a verdade, e pretendo concretizá-la!). Neste projeto vamos precisar de pessoas realmente qualificadas, que tenham um bom conhecimento tanto na área de scripts(.lua tibia) quanto na área da programação avançada(Vale qualquer programador(Delphi, C, C++, Visual Basic etc...), dês de que atenta todos os pedidos e não tenha muita dificuldade com o planejado pelo projeto, e nem com o pedido de nossos membros. ..:: Forma de Inscrição ::.. (OBS: Todos os membros serão ouvidos, testados, e avaliados!) Bom galerinha conto com a colaboração de vocês! Qualquer e toda duvida que vocês tenham não deixe de postar aqui mesmo no fórum ou no MSN, breve será criado uma comunidade para o mesmo! Até galerinha e muito obrigado! \\Att \\Pedro Michel!
  18. Trade List System

    Informações = { Nome = Trade List System Autor = Mock, Dean(reformulação do script) Versão testada = TFS 0.3.5 } Informações A algum tempo atrás(1 ano +/-) o Mock havia postado um script assim, porém ele já é antigo e não sei se functiona nos servers novos. O script permite que você compre ou venda itens, sem estar perto do player ou até mesmo offline! Comandos /sell item name,price = Adiciona o item à lista com o preço escolhido. /buy trade id = Compra o item, trade id é o número da venda, que está na lista. /offers = Mostar uma lista com todos os itens à venda. /search item name = Semelhante ao /offers, porém mostra a lista apenas com o item escolhido. /stop trade id = Para a venda, o item é devolvido automaticamente ao player. Script Crie um arquivo chamado trade.lua na pasta talkactions/scripts e adicione isso dentro: function onSay(cid,words,param) list = "Id Player Item Money" if param == "info" then return doPlayerPopupFYI(cid,"Comandos:\n/sell itemname,price\n/offers\n/search\n/buy tradeid\n/stop tradeid") end if words == "/sell" then local t = db.getResult("SELECT `tradeid`,`player`,`itemid`,`money` FROM `trade` ORDER BY `tradeid` DESC LIMIT 100;") local itemname,price = param:match('(.-),%s*(.+)') local item = getItemIdByName(itemname) if t:getID() ~= -1 then v = t:getDataInt("tradeid") else v = 0 end if doPlayerRemoveItem(cid,item,1) then return db.executeQuery("INSERT INTO `trade` (`tradeid`, `player`, `itemid`, `money`) VALUES ("..v.."+1,"..getPlayerGUID(cid)..","..item..","..price..");") end return doPlayerSendTextMessage(cid,22,"Você não tem essa quantidade do item") end if words == "/buy" then local j = db.getResult("SELECT `tradeid`,`player`,`itemid`,`money` FROM `trade` WHERE `tradeid` = "..param.." LIMIT 100;") if doPlayerRemoveMoney(cid,j:getDataInt("money")) then doPlayerAddItem(cid,j:getDataInt("itemid")) if isOnline(getPlayerNameByGUID(j:getDataInt("player"))) then doPlayerAddMoney(getPlayerByName(getPlayerNameByGUID(j:getDataInt("player"))),j:getDataInt("money")) else db.executeQuery("UPDATE `players` SET `moneytoreceive` = "..j:getDataInt("money").." WHERE `players`.`id` ="..j:getDataInt("player").." LIMIT 1 ;") end return db.executeQuery("DELETE FROM `trade` WHERE `trade`.`tradeid` = "..param.." LIMIT 1;") end return doPlayerSendTextMessage(cid,22,"Você não possui essa quantia") end if words == "/offers" then local t = db.getResult("SELECT `tradeid`,`player`,`itemid`,`money` FROM `trade` ORDER BY `tradeid` DESC LIMIT 100;") if t:getID() ~= -1 then repeat list = list.."\n"..t:getDataInt("tradeid").." "..getPlayerNameByGUID(t:getDataString("player")).." "..getItemNameById(t:getDataInt("itemid")).." "..t:getDataInt("money").." gps" until not t:next() end return doPlayerPopupFYI(cid,list) end if words == "/search" then id = getItemIdByName(param, false) if (not id) then return doPlayerSendTextMessage(cid,22,"Esse item não existe.") end local t = db.getResult("SELECT `tradeid`,`player`,`itemid`,`money` FROM `trade` WHERE `itemid` = "..id..";") if t:getID() == -1 then return doPlayerSendTextMessage(cid,22,"O item procurado não está à venda") end repeat list = list.."\n"..t:getDataInt("tradeid").." "..getPlayerNameByGUID(t:getDataString("player")).." "..getItemNameById(t:getDataInt("itemid")).." "..t:getDataInt("money").." gps" until not t:next() return doPlayerPopupFYI(cid,list) end if words == "/stop" then local t = db.getResult("SELECT `tradeid`,`player`,`itemid`,`money` FROM `trade` ORDER BY `tradeid` DESC LIMIT 100;") repeat if tonumber(t:getDataInt("tradeid")) == tonumber(param) and tonumber(t:getDataInt("player")) == tonumber(getPlayerGUID(cid)) then doPlayerAddItem(cid,t:getDataInt("itemid")) return db.executeQuery("DELETE FROM `trade` WHERE `trade`.`tradeid` = "..t:getDataInt("tradeid").." LIMIT 1;") end until not t:next() end t:close() return TRUE end Adicione as seguintes tags em talkaction.xml: <talkaction words="/sell" event="script" value="trade.lua"/> <talkaction words="/offers" event="script" value="trade.lua"/> <talkaction words="/buy" event="script" value="trade.lua"/> <talkaction words="/search" event="script" value="trade.lua"/> <talkaction words="/stop" event="script" value="trade.lua"/> Crie um arquivo chamado trade.lua na pasta creaturescripts/scripts e adicione isso dentro: function onLogin(cid) local t = db.getResult("SELECT `moneytoreceive` FROM `players` WHERE `id` = "..getPlayerGUID(cid).." LIMIT 1;") if t:getDataInt("moneytoreceive") > 0 then return doPlayerAddMoney(cid,tonumber(t:getDataInt("moneytoreceive"))),doPlayerSendTextMessage(cid,22,"Um item seu foi comprado da trade list.Receba seu dinheiro"),db.executeQuery("UPDATE `players` SET `moneytoreceive` = 0 WHERE `players`.`id` ="..getPlayerGUID(cid).." LIMIT 1 ;") end t:close() return TRUE end Adicione a seguinte tag em creaturescripts.xml: <event type="login" name="Trade" script="trade.lua"/> Agora abra o arquivo creaturescripts/scripts/login.lua e adicione entes do último return TRUE: registerCreatureEvent(cid, "Trade") Você precisará da OTAL ou simplesmente coloque isso em lib/functions.lua ou arquivo semelhante: function isOnline(name)--by mock local players = getOnlinePlayers() name = string.lower(name) for i, player in ipairs(players) do player = string.lower(player) if name == player then return TRUE end end return FALSE end Para finalizar, execute a seguinte query no seu banco de dados mysql: CREATE TABLE `trade` ( `tradeid` INT NOT NULL , `player` INT NOT NULL , `itemid` INT NOT NULL , `money` INT NOT NULL ) ENGINE = MYISAM ;[font=Comic Sans MS][size=4][size=2][size=4][size=2][size=4][size=2] [/size][/size][/size][/size][/size][/size][/font]ALTER TABLE `players` ADD `moneytoreceive` INT NOT NULL Bom, é isso, espero que façam bom uso do script, se achar algum bug por favor avise. Esse script é exclusivo da OTnet, se encontrar em outro fórum por favor avise
  19. Percy jackson Online

    O Jogo baseado na série de livros percy jackson e os olimpianos (quem ja viu o filme pode ajudar) as raças seram baseadas em semideuses (filhos do deuses). Ele será um Otserver de tibia versão 8.10, e já está com algumas sprites, algumas spells já editadas. Mas falta muito a faser ainda. Spells maker1: Spells maker2: Mapper1:Pv Mapper2: Mapper3: Mapper4: Scripter1: Scripter2: Scripter3: Web Designer: Spriter1: Spriter2: Coordenador Geral: Frenanjf Quem quiser preencha o seguinte formulário: Msn:________ Cargo:_______ Experiencia no cargo: Baixa ( ), Media ( ), Alta ( ), Expert ( ). Irei faser testes com voçes, e quem passar entra na equipe. Qualquer dúvida poste ai tambem.
  20. Sistema de propaganda

    Bom, para começar, gostaria de dizer que este script SUPER SIMPLES foi feito por mim, então, por favor, não venham me dizer que foi cópia. Eu sei que há outro script parecido com este no fórum, mas o outro foi feito por raids, este será feito por global events e irá acontecer sempre de tempos em tempos. De agora em diante, adotando os padrões de postagem: Titulo: [8.4] Sistema de propaganda Editado: Adicionando a dica do Mock, você pode pular linhas utilizando "[[", em vez de usar o \n. Segue como exemplo: function onThink(interval, lastExecution) -- Configurações local cor = 22 -- Defina a cor da mensagem (22 = branco) local mensagens = { [[Propaganda: Gostaria de ser premium account? Compre nosso pacote com 6000 VIP Points por apenas R$ 5,00!]], [[ Propaganda: Está com inveja de outros jogadores por não possuir as mesmas magias? Compre sua premium account por apenas R$ 5,00!]], [[You advanced in magic level. Oops, mentira, mas poderia ter acontecido se você fosse premium account. Compre a sua em nosso website. ]] } -- Fim de Configurações doBroadcastMessage(mensagens[math.random(1,table.maxn(mensagens))], cor) return TRUE end Créditos: Pivigu
  21. Mapper

    Nome: Marcelo Idade: 15 Trabalho: Mapper Experiência: Trabalho Mapper a 2 anos Sou: Rio de Janeiro Quero Trabalhar em um Ot sério . que esteje realmente enteressado em fazer um ot , sou copetente e interessado. Contato: [email protected]
  22. Sistema AFK

    Olá, estou criando esse tutorial mostrando como fazer o Sistema de AFK em seu OTServ, Então vamos lá ^^ Vá Na Pasta De Seu OTServ / Data / Talkactions / Scripts - Copie qualquer arquivo .lua que está lá, tire tudo que a dentro dele e renomeie como 'afk' Coloque isso : [spoiler=Coloque isso] local time = 5 -- 1 = 1 sec, 2 = 2 sec, ... local say_events = {} local function SayText(cid) if isPlayer(cid) == TRUE then if say_events[getPlayerGUID(cid)] ~= nil then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Ausente !", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 100 / 2, cid) end end return TRUE end function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if param == "on" then if isPlayer(cid) == TRUE then doSendAnimatedText(getPlayerPosition(cid),"Ausente !", math.random(01,255)) end say_events[getPlayerGUID(cid)] = addEvent(SayText, time * 1000, cid) doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING ,"You Now Stated you are (afk).") elseif param == "off" then stopEvent(say_events[getPlayerGUID(cid)]) say_events[getPlayerGUID(cid)] = nil doPlayerSendTextMessage(cid,MESSAGE_STATUS_WARNING ,"You Now stated your are not (afk).") end return TRUE end Depois vá em Pasta De Seu OTServ / Data / Talkactions / Talkactions.XML Procure A Parte dos Players Bote Isso : [spoiler=Coloque Isso] <talkaction words="!afk on" event="script" value="afk.lua"/> Obs : falando !afk off acaba com !afk on começa! Gente então é isso salve feche e use Abraços, Victor Morin
  23. Wolfman and Halloween Monster

    ------------------------------- Monstros: Wolfman - Humano que pode se tranformar em um lobo selvagem e depois volta a forma humana. Bom para hunts, além de sumonar wolfs também. Halloween Monster - Otimo monstro que pode ser usado em evento.Ele se transforma em varios outros monstros e transforma os players que estiverem perto dele também. Versão: 8.5x Tipo do script: Monstro Servidor Testado: The Forgotten Server 0.3.5.2576,Alissow Ots 3.6 Autor: LordBelkil (Eu) ------------------------------- Bom pessoal, esses são meus primeiros monstros e estou aberto a críticas e sugestões. Lembrando, esses monstros são editavéis, ou seja, edite eles a seu gosto e necessidades do seu server. Wolfman 1º Passo: Abra a pasta monster aque se encontra na pasta data do seu server. Copie e cole qualquer arquivo e renomeie para Wolfman. Abra o arquivo, delete tudo e cole isso: [spoiler=Wolfman] 2º Passo: Salve em .xml e fexe. 3º Passo: Abra o arquivo monsters.xml que se encontra na pasta monster e adicione: Halloween Monster 1º Passo: Abra a pasta monster aque se encontra na pasta data do seu server. Copie e cole qualquer arquivo e renomeie para Halloween Monster. Abra o arquivo, delete tudo e cole isso: [spoiler=Halloween Monster] 2º Passo: Salve em .xml e fexe. 3º Passo: Abra o arquivo monsters.xml que se encontra na pasta monster e adicione: Bom galera, agora você ja tem mais 2 monstros criativos e legais pro seu server! :w00t: Espero que tenham gostado... Doe V$ ;D!!!!!!
  24. Epoch Of Darkness

    Epoch of Darkness As Rates serão bem baixas, procurando o RPG Venho com intuito de criar um Open Tibia muito eficiente, e muito divertido, jeitos diferentes, mapa totalmente feito por nossa equipe. Prometo a você leitor, paciente, que espera ficar numa equipe responsável e coerente. Algumas das nossas idéias é, buscar o RPG do tíbia Normal (RL), e mudar, configurar um jeito diferente, mas devemos também, preocupar com o jogador, com o cliente, sem ele nos não somos nada. Hoje em dia temos, Pokemon, Digimon, e outros animes, sprites novas, tudo. Mas todos esses projetos sempre buscam rápido, querem fazer tudo o mais breve possível, assim o mapa (difícil achar um mapa bom de pokemon), sprites? Maioria igual ao Pokemon normal. Iremos-nos ter sprites novas, nada muito além, o mapa será completamente, totalmente nosso, não irá chegar a nenhuma pessoa desconhecida. Eu sinceramente, prometo a vocês que esse Open Tibia não passará a ser mais um OT que sumiu... Precisamos NO MOMENTO: Admistrador: Bruno, Tekkas Mapper: --Tekkas--, (VAGA), (VAGA) Scripter: --Bruno--, (VAGA) Web Master: (VAGA) Web Design: --PeterXd-- Colaborador: (VAGA)... Historiador: (VAGA) Não é porque a vaga está preenchida que você não poderar se candidatar Ainda, por inquanto não temos imagens, nem muitas ideias, mas vamos criar juntos um ot perfeito, com RPG, mapa proprio, sprites proprias, scripts proprios. Para se candidatar: Nome::said: Cargo: Msn::style: Trabalhos::w00t: Tempo disponivel::yes: Para contato: [email protected] Sua candidatura só será valida com o preenchimento correto da ficha.
  25. Flexas saindo da Parede.

    Nome: Flexas. Autor: Neon. Versão Testada: Cliente 8.54 - Servidor TFS 0.3.6 Bom vim aqui no Otnet postar um script que tenho em meu Servidor e acho legal para mapas que têem um grande numero de RPG. O que vou mostrar hoje se resume na imagem abaixo. Primeiro passo: -Vá na pasta Movements de seu servidor e crie um arquivo lua com o seguinte código, e salve com o seguinte nome: arrow.lua function onStepIn(cid, item, topos) frompos = {x=52, y=177, z=9} topos = getPlayerPosition(cid) rand = math.random(10,18) rand2 = math.random(1,7) if (isPlayer(cid)) == 1 and rand2 > 2 then doSendDistanceShoot(frompos, topos, CONST_ANI_ARROW) doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -70, -10, CONST_ME_HITAREA) doSendMagicEffect(topos,0) doSendAnimatedText(topos,rand,180) doCreateItem(2019,2,topos) elseif (isPlayer(cid)) == 1 and rand2 == 1 then doSendDistanceShoot(frompos, topos, CONST_ANI_ARROW) doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -70, -10, CONST_ME_HITAREA) doSendMagicEffect(topos,2) else doSendDistanceShoot(frompos, topos, CONST_ANI_ARROW) doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -70, -10, CONST_ME_HITAREA) doSendMagicEffect(topos,3) end return 1 end Segundo passo: - Agora va em Movements.xml e adicione a seguinte tag. <movevent type="StepIn" uniqueid="24241" event="script" value="arrow.lua" /> Terceiro passo: -Adicionar o UniqueId no piso onde voce quer que quando o player passe leve uma flexada. ..:: Configurando ::.. Na seguinte linha, voce coloca o local de onde saira a flexa. X - Y - Z. frompos = {x=[b][i][color=Blue]52[/color][/i][/b], y=[b][i][color=Green]177[/color][/i][/b], z=[b][i][color=Red]9[/color][/i][/b]} Ja nessa linha, voce configura o tanto de Damage que voce quer que o player leve ao pisar no tile. Voce pode variar, como mostra o script. Ali esta para variar os danos entre '70' e '10'. Configure do seu jeito. doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -[b][i][color=Red]70[/color][/i][/b], -[b][i][color=Red]10[/color][/i][/b], CONST_ME_HITAREA) E no Movements.xml voce Coloca o Id que ira no UniqueId em seu MapEditor. <movevent type="StepIn" uniqueid="[b][i][color=Red]24241[/color][/i][/b]" event="script" value="arrow.lua" />
×