Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 01/27/15 em todas áreas

  1. Addon/Mount para Shopsystem por Storage

    godofglobal e 3 outros reagiu a Summ por uma resposta no tópico

    4 pontos
    A pedido desse tópico eu fiz o sistema : http://www.tibiaking.com/forum/topic/49214-duvida-como-colocar-uma-mountaddon-especifica-a-venda/ Troque seu shopsystem.php por esse : shopsystem.php : Agr em data/creaturescripts/scripts crie addonmount.lua addonmount.lua function onLogin(cid) local player = Player(cid) local addons ={ --[storage] = {outfit_male, outfit_female}, [28416] = {143, 147}, -- barbarian [28417] = {134, 142}, -- warrior [28418] = {152, 156}, -- assassins [28419] = {465, 466}, -- Insectoid [28420] = {133, 141}, -- summoner [28421] = {472, 471}, -- Entrepreneur [28422] = {144, 148}, -- duid [28423] = {278, 279}, -- brotherhood [28424] = {577, 578}, -- Dream Warden [28425] = {610, 618}, -- Glooth Engineer [28426] = {130, 138}, -- mage [28427] = {634, 635}, -- Conjurer [28428] = {128, 136}, -- Citizen [28429] = {129, 137}, -- Hunter [28430] = {131, 139}, -- Kinghit [28431] = {132, 140}, -- Noblewoman [28432] = {145, 149}, -- Wizard [28433] = {146, 150}, -- Oriental [28434] = {151, 155}, -- Pirate [28435] = {153, 157}, -- Beggar [28436] = {154, 158}, -- Shaman [28437] = {251, 252}, -- Norsewoman [28438] = {268, 269}, -- Nightmare [28439] = {273, 270}, -- jester [28441] = {289, 288}, -- demonhunter [28442] = {325, 324}, -- yalaharian [28444] = {335, 336}, -- warnaster [28445] = {327, 366}, -- wayfarer [28446] = {430, 431}, -- afflicted [28447] = {432, 433}, -- elementalist [28448] = {463, 464}, -- deepling [28449] = {512, 513}, -- crystal warlord [28450] = {516, 514}, -- soil guardian [28451] = {541, 542}, -- demon [28452] = {574, 575}, -- cave explorer [28453] = {619, 620}, -- jersey [28454] = {637, 636}, -- beastmaster [28455] = {632, 633} -- champion } for storage, addon in pairs(addons) do if player:getStorageValue(storage) > 0 then player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addOutfitAddon(addon[1], 3) player:addOutfitAddon(addon[2], 3) player:sendTextMessage(MESSAGE_INFO_DESCR, "Seu Addon full foi adicionado!") player:setStorageValue(storage, 0) end end local mounts ={ --[storage] = mounts, [80000] = 1, -- Widow Queen [80001] = 2, -- Racing Bird [80002] = 3, -- War Bear [80003] = 4, -- Black Sheep [80004] = 5, -- Midnight Panther [80005] = 6, -- Draptor [80006] = 7, -- Titanica [80007] = 8, -- Tin Lizzard [80008] = 9, -- Blazebringer [80009] = 10, -- Rapid Boar [80010] = 11, -- Stampor [80011] = 12, -- Undead Cavebear [80012] = 13, -- Donkey [80013] = 14, -- Tiger Slug [80014] = 15, -- Uniwheel [80015] = 16, -- Crystal Wolf [80016] = 17, -- War Horse [80017] = 18, -- Kingly Deer [80018] = 19, -- Tamed Panda [80019] = 20, -- Dromedary [80020] = 21, -- King Scorpion [80021] = 22, -- Rented Horse [80022] = 23, -- Armoured War Horse [80023] = 24, -- Shadow Draptor" [80024] = 25, -- Rented Horse [80025] = 26, -- Nethersteed [80026] = 27, -- Ladybug [80027] = 28, -- Manta [80028] = 29, -- Ironblight [80029] = 30, -- Magma Crawler [80030] = 31, -- Dragonling [80031] = 32, -- Gnarlhound [80032] = 33, -- Crimson Ray [80033] = 34, -- Steelbeak [80034] = 35, -- Water Buffalo [80035] = 36, -- Tombstinger [80036] = 37, -- Platesaurian [80037] = 38, -- Ursagrodon [80038] = 39, -- The Hellgrip [80039] = 40, -- Jade Lion [80040] = 41, -- Golden Lion [80041] = 42, -- Shock Head [80042] = 43, -- Walker [80043] = 44, -- Azudocus [80044] = 45, -- Carpacosaurus [80045] = 46, -- Death Crawler [80046] = 47, -- Flamesteed [80047] = 48, -- Jade Pincer [80048] = 49, -- Tempest [80049] = 50 -- Winter King } for storage, mount in pairs(mounts) do if player:getStorageValue(storage) > 0 then player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:addMount(mount) player:sendTextMessage(MESSAGE_INFO_DESCR, "Sua Mount foi adicionado!") player:setStorageValue(storage, 0) end end return true end Só adicionar a storage do arquivo no itemid do shop. creaturescript.xml tag <event type="login" name="ShopMountAddon" script="addonmount.lua"/> Ps : o Shop vai puxar o numero da storage pra procura pela img do addon/mount. Créditos a Taverna de Programação por ter me ajudado
  2. Eae Galera do TibiaKing É o seguinte Hoje trago a vocês o Baiak Rox Editado por Min Espero que Gostem Oque eu Fiz ? | Novo Visual do Templo Totalmente ICE | Critical System | Task System | Dodge System | Run Event (CORRIDA MALUCA) | Reset System (ÁREA EXCLUSIVA COM CASTELO E HUNTS) para resetar fale !reset | Guild Frags System ( ACESSO AO PROMOTE E ITENS EXCLUSIVOS ) | War System (100% RODANDO EM SQLITE) | Cast System (100% Roda em Mysql ) ( Para Ativar vai em Config.lua e ache | enableCast = false | mude para true ) Duvidas entrem em http://www.tibiaking...os-na-distro/ | PvP Balanceado Agora com mais RPG | Armas Arrumadas Para Melhor PvP | Varios Eventos Automaticos | Battle Field Event | Capture The Flag Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Distro 0.4 Rodando 100% ( Se For 64x Bits) | Refinamento ( Aprimora seus Equipamentos ) | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Outras Coisas | SENHA DO GOD: rox/styller | Aqui Vai Umas Prints | Castelo Reset System | Nova Imagem do Templo | Área Donate | Mostra de Itens Donate + Eventos | Download | Scan | Créditos | Gostou ? Então dei um REP
  3. 2 pontos
    Olá caros amigos do forum estou aqui postando o pack completo do pokemon kpdo que atualmente se econtra online a 3 anos, eu sou o administrador do atual servidor pokemon kpdo, irei primeiramente falar o motivo de eu estar postando. Um dos meus EX-staffs roubou os arquivos que eu passei e resolveu vender a terceiros o que eu achei muito anti-ético então resolvi postar open source, pois o que o mesmo fez comigo foi muito errado então não restou a nao deixar gratuito para que o mesmo não lucre nas minha costa. Download: Client+Servidor: Mega Scan: O scan pega o client como um falso positivo por ter injeção de dll injection da barra do meu cliente porém vale lembrar que não tem virus, assim como o pack é um falso positivo. Link do Scan: VirusTotal Os sistemas que o jogo tem são: Sistema de som Cool down e poke bar. Duel System Tv Cam System Sistema de torneio Sistema de Duelos com aposta Pokemons da 1 até a 5 geração e seus devidos shinys. Sistema de shinys Muitas quests TM system etc. Creditos: Renan(Admin) Equipe staff kpdo atual e EX staffs; www.exaioros.com
  4. [OTC] Manager Window

    Gabneitor e um outro reagiu a Snowsz por uma resposta no tópico

    2 pontos
    Testado: Otclient 0.6.7, TFS 0.4 Versão: 1.0 Descrição: Um mod que adiciona um botão, ao lado esquerdo do seu painel, quando clicar irá aparecer uma janela, com comandos. Autor: Snowsz Imagem: Bom, só coloquei os comandos que mais uso, acho que ele seja auto explicativo, mas, vou explicar um pouco... Em name coloque o nome do player, marque uma caixinha do que será adicionado, e em count coloque o valor que o player deverá ganhar desse determinado skill, após isso, clique em Addskill. Os dois "X" são para limpar a caixa, assim como o botão, clear, para limpar as caixas dos outros comandos. Quando clicar em reload, vai aparecer uma lista de opções, clique na que quiser dar reload. No botão commands, quando clicar, irá aparecer a lista de comandos. Ele só funciona com players que possuam cargo GM, CM e GOD. Coloque isto no seu login.lua(para quem não sabe, no seu servidor não no CLIENT!): if getPlayerAccess(cid) > 3 then doPlayerSendCancel(cid, "$@$Administrador") doPlayerSendCancel(cid, " ") end Download V2: Link: https://www.dropbox.com/s/axmop6e80mvlfi7/managerwindow.rar?dl=0 (coloque o arquivo na pasta mods) Scan: https://www.virustotal.com/pt/file/8fbe8b00e272f623bd2ac70c5fa1c39855d5e9c8469efcaae841db2e9eec138a/analysis/1422324181/ Atualizado para versão 2, removido todos os bugs que encontrei e adicionado novos botões, para adicionar mais comandos basta abrir o arquivo lua do mod, procurar por "local uses" e adicionar mais. (obs: esses comandos do "uses", não podem precisar de parâmetro, ex: /r 10) -->Change log v2 -Retirado alguns bugs -Código diminuído e melhor identado -Adicionado novas funcionalidades -Adicionado compatibilidade do comando addskill para "skills", como distance, shield e sword, entre o restante.
  5. Thayam's Show Off

    Thayam e um outro reagiu a ElderDark por uma resposta no tópico

    2 pontos
    O escudo ficou bom, mais faltou o AA, enfim, comecei a fazer o AA mais me deu vontade de Remekear Então ta ai o remake haha
  6. [DOWNLOAD] Poke Zot Atualizado + WebSite

    marcelinho1234 reagiu a Nicrox por uma resposta no tópico

    1 ponto
    Oi, pessoal. Aqui está o server + site que eu estava editando. Adicionei box 10, 11, 12, 13, 14, 15. Editei os mapas e retirei os bugs. Se tiver bugs, pode falar vou arrumar. Download Client MediaFire // 4shared Server MediaFire // 4shared Server sem Website MediaFire // 4shared Download Mapa Editor extendido MediaFire Rep+ Thanks
  7. Perfect VIP System 2.2

    Fernandooww reagiu a EddyHavoc por uma resposta no tópico

    1 ponto
    Perfect Vip system 2.2 Versão Testada:TFS 0.3.6 - 8.54 - 8.60 Creditos pelas modificações: Kydrai,Nicekid e Marcryzius e EddyHavoc Creditos pelas publicações: EddyHavoc e Vodkart Oque Contém no Sistema vip 2.2? Quote - Compra Vip pela talkaction ( Comando !buyvip ) -- ou sem o comando. - Tile para somente Players Vip passarem ( conta também com funçâo os.time ) - verifica quantos dias de Vip o character ainda possui. - Administradores(GOD) podem adicionar e remover dias de Vip para characters. -- Administradores(GOD) podem checkar dias de Vip dos Players. -- É adicionado [VIP] ao nome e retirado quando a vip Acabar. GOD Adicionando e Removendo dias de Vip Comprando VIP e Checkando dia da sua VIP Quote Comando: comprar vip: !buyvip checkar dias de vip: !vipdays God checkar dias de vip do character: /checkvip Nick exemplo: /checkvip Nicekid God adionar dias ao character: /addvip Nick,dias exemplo: /addvip Nicekid,5 aqui adicionei 5 dias de vip. God Retirar dias de Vip do character: /delvip Nick,dias exemplo: /delvip Nicekid,5 aqui retirei 5 dias de vip. Primeiro passo vá até talkactions/scripts Crie um arquivo.lua e renomeie para systemvip.lua dentro coloque: -- Script System Vip 2.2 -- function onSay(cid, words, param) if(words == "!buyvip") then local price = 5000000 if doPlayerRemoveMoney(cid, price) == TRUE then local days = 30 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13540) local timenow = os.time() if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then time = timenow + daysvalue else time = storageplayer + daysvalue end if string.find(tostring(getCreatureName(cid)),"[[Vip]]") then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local name = getCreatureName(cid) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..name.."' WHERE `id` = "..getPlayerGUID(cid)..";") doRemoveCreature(cid) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de "..price.." gp's para colocar vip.") end elseif(words == "!vipdays") then local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no seu character.") elseif(words == "/checkvip") then if getPlayerAccess(cid) == 5 then if not param then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(param) if not isPlayer(player) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player "..player.." not found.") end local timenow = os.time() local quantity = math.floor((getPlayerStorageValue(player, 13540) - timenow)/(24 * 60 * 60)) doPlayerPopupFYI(cid, "O jogador tem ".. (quantity < 0 and 0 or quantity) .." dias de VIP no character.") return TRUE end elseif(words == "/addvip") then if getPlayerAccess(cid) == 5 then local t = string.explode(param, ",") if not t[2] then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end local player = getPlayerByName(t[1]) local name = getCreatureName(player) local days = t[2] local pid = getPlayerByNameWildcard(t[1]) if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") return TRUE end local daysvalue = days*3600*24 local storageplayer = getPlayerStorageValue(player, 13540) local timenow = os.time() local time = storageplayer <= 0 and (timenow + daysvalue) or (storageplayer + daysvalue) if string.find(tostring(getCreatureName(pid)),"[[Vip]]") then doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..days.." dias de VIP no seu character.") setPlayerStorageValue(player, 13540, time) local quantity = math.floor((getPlayerStorageValue(player,13540) - timenow)/(3600*24)) doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você tem "..quantity.." dias de VIP restantes.") else setPlayerStorageValue(player, 13540, time) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..name.."' WHERE `id` = "..getPlayerGUID(player)..";") doRemoveCreature(player) end end elseif(words == "/delvip") then if getPlayerAccess(cid) == 5 then local dec = MESSAGE_INFO_DESCR if(param == "") then return TRUE,doPlayerSendTextMessage(cid,18,"Command param required.")end local C,t = {},string.explode(param, ",") C.pos = getPlayerPosition(cid) C.uid = getCreatureByName(t[1]) C.time = ((tonumber(t[2]) == nil) and 1 or tonumber(t[2]))*3600*24 --Tempo da vip por dia. C.days = (tonumber(t[2]) == nil) and 1 or tonumber(t[2]) --Dias de vip. if(getPlayerStorageValue(C.uid,13540) < C.time)then doPlayerSendTextMessage(cid,dec,'O jogador '..t[1]..' não possui '..C.days..' dias de vip.') else doPlayerSendTextMessage(cid,dec,'Você removeu '..C.days..' dias de vip do player '..t[1]..'.') setPlayerStorageValue(C.uid,13540,getPlayerStorageValue(C.uid,13540)-C.time) end doSendMagicEffect(C.pos, math.random(28,30)) end end return TRUE end price = é o quanto a vip vai custar em gps days = quantos dias de vip serão adicionados ao player em talkactions.xml adicione a tag: <talkaction words="!vipdays;!buyvip;/checkvip;/addvip;/delvip" script="systemvip.lua"/> Pronto primeiro passo terminado. Sistema vip sem o !buyvip abra a spoiler Spoiler ---------------------------------------------------------------------------------------------------------------------------- Tile VIP Segundo passo. vá até movements/scripts crie um arquivo.lua e renomeie para vipe.lua dentro coloque: -- Script Vip Sytem 1.0 -- function onStepIn(cid, item, position, fromPosition) local config = { msgDenied = "Você não e vip ,fale com Administrador do Server.", msgWelcome = "Seja Bem Vindo a Area vip." } if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) return TRUE end Em movements.xml adicione a tag: <movevent type="StepIn" uniqueid="13700" event="script" value="vipe.lua"/> FIM DA VIP creaturescript/script crie um arquivo.lua e renomeie para endvip.lua e cole isso dentro dele: --[[ by EddyHavoc Tibiaking.com ]]-- function onLogin(cid) if getPlayerStorageValue(cid, 13540) - os.time() > 0 then setPlayerStorageValue(cid, 9898, 1) end local pos = {x = 157, y = 50, z = 7} -- posiçao do templo. function EddyHavoc(cid) if isPlayer(cid) then db.executeQuery("UPDATE `players` SET `name` = '"..string.sub(getCreatureName(cid), 7).."' WHERE `id` = "..getPlayerGUID(cid)..";") doRemoveCreature(cid) end end if getPlayerStorageValue(cid, 9898) == 1 and getPlayerStorageValue(cid, 13540) - os.time() < 1 or getPlayerStorageValue(cid, 13540) - os.time() == 0 then doTeleportThing(cid, pos) doPlayerPopupFYI(cid, "Sua vip Account acabou.") setPlayerStorageValue(cid, 9898, -1) if string.find(tostring(getCreatureName(cid)),"[[Vip]]") then addEvent(EddyHavoc, 3*1000, cid) end end return TRUE end em creaturescript.xml adicione a tag: <event type="login" name="CheckVip" script="endvip.lua"/>[i] Pronto Seu sistema Vip está terminado.
  8. {Tutorial} NPC'S

    Skulldrich reagiu a xFatality por uma resposta no tópico

    1 ponto
    Tutorial de NPCS Esse tutorial irá servir para quem gostar de fazer certo NPCs mais complexos com storages, varias missões e tudo mais. Usando como base o Jiddo system apenas para comprar e vender itens, pois não gosto de usar sistemas que facilitam Pois não criam scripters e sim preguiçosos, ainda mais quando o sistema é abandonado ai você se lasca O npc é dividido em duas partes : - Arquivo XML : Responsavel pelo visual e algumas propriedades dele (pelo jiddo system) - Arquivo Lua : Responvasel pelas falas e vendas (Lua puro) Visual do Npc Bem primeiro vamos explicar o visual de um npc, <npc name="Bonifacius" script="data/npc/scripts/default.lua" walkinterval="25" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="128" head="97" body="100" legs="115" feet="114" corpse="2212"/> </npc> Explicando parte a parte Name : Nome dele que aparecerá para todos. script : Arquivo lua do script dele walkinterval : De quanto em quanto milessegundos ele irá caminhar. floorchange : Se ele irá subir escadas ou cair em buracos. access : O valor de acesso dele, caso ele tenha um acesso 5 poderá usar todo os comandos de GODS. level,maglevel : É tosco, você pode fazer ele soltar magias (nunca tentei) e no caso isso contaria. Health Now : Sangue que terá max : Maximo de health (ja fizeram npc com life media) look type : Tipo de roupa dele, Caso queira ele como objeto use look typeex. head,body,legs,feet : Cor da cabeça,corpo,calça e pé do npc. corpse : Corpo caso ele morra (LOL não dá...) Esse é a base do arquivo xml do npc. Caso você queirá enfiar tosquisses pelo Jiddo System fica mais ou menos assim: <?xml version="1.0" encoding="UTF-8"?> <npc name="Bonifacius" script="data/npc/scripts/default.lua" walkinterval="25" floorchange="0" access="5" level="1" maglevel="1"> <health now="150" max="150"/> <look type="128" head="97" body="100" legs="115" feet="114" corpse="2212"/> <parameters> <parameter key="module_shop" value="1"/> <parameter key="shop_buyable" value="banana,2676,2;grapes,2681,3;melon,2682,8;orange,2675,5;pumpkin,2683,10;chees e,2696,5;egg,2695,2;cookie,2678,2;meat,2266,5"/> <parameter key="message_greet" value="What you doing soldier ? Take your weapon and go war!"/> <parameter key="message_walkaway" value="Hey Hey, where you go ?"/> <parameter key="message_farewell" value="Bye bye brave soldier. Remember, peoples without head, don't transform in undeads."/> <parameter key="message_alreadyfocused" value="You are drunked ? You talk really talk to me ?"/> </parameters> </npc> <parameters> <parameter key="module_shop" value="1"/> <parameter key="shop_buyable" value="banana,2676,2;grapes,2681,3;melon,2682,8;orange,2675,5;pumpkin,2683,10;chees e,2696,5;egg,2695,2;cookie,2678,2;meat,2266,5"/> <parameter key="message_greet" value="What you doing soldier ? Take your weapon and go war!"/> <parameter key="message_walkaway" value="Hey Hey, where you go ?"/> <parameter key="message_farewell" value="Bye bye brave soldier. Remember, peoples without head, don't transform in undeads."/> <parameter key="message_alreadyfocused" value="You are drunked ? You talk really talk to me ?"/> </parameters> Esse é um exemplo basico de npc vendedor, que não faz muita coisa. module_shop : Quer dizer que ao falar trade ele irá abrir a janela tosca de venda de itens. shop_buyable : Isso faz tudo que tiver ai ele vender sendo a sintaxe parameter key="shop_buyable" value="nome inutil (inutil mesmo não serve para nada),id do produto,preço; Podendo você adicionar milhares e milhares, unico porém de você adicionar pelo XML é que não há possibilidade de fazer a venda por backpack (pelo menos até a versão que testei) message_farewell Mensagem de despedida Essas message tem alguns tipos explicados abaixo : Tudo isso acima deverá estar depois de message_ e as mensagens em default você poderá encontrar em npc/lib/npcsystem/npchandler.lua Se você fazer asneira lá os npcs não funfam cuidado o0 Ainda há o npc de barco, muito simples : <parameter key="travel_destinations" value="desert,1594,835,5,180;edron,931,825,6,90;"/> Sintaxe value="nome da cidade ,coordenada x,coordenada y,coordenada z ,valor;" local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new()) Ou seja npcs, que aquilo que mostrei no xml é suficiente você pode direcionar para o default.lua Eu disse que npcs feitos no XML, a opção de compra por backpack não é possivel Então para faze-la em um npc Lua ficará assim : local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local shopModule = ShopModule:new() npcHandler:addModule(shopModule) shopModule:addBuyableItem({'health potion'}, 7618, 45, 1, 'health potion') shopModule:addBuyableItem({'mana potion'}, 7620, 50, 1, 'mana potion') shopModule:addBuyableItemContainer({'bp hp'}, 2000, 7618, 900, 1, 'backpack of health potions') shopModule:addBuyableItemContainer({'bp mp'}, 2001, 7620, 1000, 1, 'backpack of mana potions') npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Nesse exemplo o npc vende health potion,mana potion e bp dos respectivos. Sendo a sintaxe shopModule:addBuyableItem({'nome inutil'}, id preço, quantidade ou sub tipo, 'nome inutil') Esse nome só serve para você não se perder, pois ao dizer trade ele aparecerá o nome do item pelo items.xml e não o que voce falou Sintaxe da backpack shopModule:addBuyableItemContainer({'nome'}, id da backpack, id, preço, sub tipo ou quantidade (caso seja agrupavel), 'nome inutil') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'rainbow') or msgcontains (msg, 'perch') then if getPlayerStorageValue(cid,30013) == 8 then selfSay('Yeah. But peguins, stoled my last crate of this. Please go lair of this plague and take again my itens. You go ?', cid) talkState[talkUser] = 1 else selfSay('You are a lier. Leave here!', cid) end elseif msgcontains(msg, 'mission') then if doPlayerRemoveItem(cid,7707,1) == 1 then selfSay('Congratulations. Give this for Willard.', cid) setPlayerStorageValue(cid,30013,10) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then selfSay('Great. Later report me asking mission.', cid) setPlayerStorageValue(cid,30013,9) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Esse npc ai é um simples de quest, você pode se basear nele para seu primeiro npc Vamos explicar umas coisas importantissimas talkState = Isso ai é a genialidade, a cada passo você pode mandar o player para um estagio. Se você leu meus tutos percebeu que ele é um vetor, mais por que ? Porque, ao ser uma variavel ele é armazenada no servidor certo ? Então se não fosse um vetor, o npc falando com dois ao mesmo tempo poderia se confudir e ferrar tudo literalmente Se você dominar o talkState dominará 50% de npcs de missões Storages = Isso também é indispensavel nos npcs, é sempre bom reservar uns para cada missão Para se ela tiver varias etapas você não se confudir, Ou usar o mesmo value para poder aproveitar no questlog (explicado no tutorial SUper Quests) O npc acima ele é 4º npc da minha quest global do meu otserver de testes. Ignore os erros de Inglês. if msgcontains(msg, 'rainbow') or msgcontains (msg, 'perch') then if getPlayerStorageValue(cid,30013) == 8 then selfSay('Yeah. But peguins, stoled my last crate of this. Please go lair of this plague and take again my itens. You go ?', cid) talkState[talkUser] = 1 else selfSay('You are a lier. Leave here!', cid) end Aqui ao você falar rainbow ou perch ele começa a girar essa parte do script. Ou seja no caso eh msgcontains se você falar Ele irá entender normalmente, e rodará o script. Caso fosse msg ai sim teria quer ser certinho (até maiscula e miniscula acho que ele duvidaria) No caso ele checa o storage 30013 se tem o valor 8, caso tenha ele fala aquela frase enorme e muda seu talkstate para 1 Se não tiver o storage com valor 8, ele te ofende. Esse storage 8 é adicionado no npc anterior. Se você tiver tudo certo ele tem pergunto algo, porém isso só será checado no talkstate 1 elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then selfSay('Great. Later report me asking {mission}.', cid) setPlayerStorageValue(cid,30013,9) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end Se você falar yes, ele manda você ir no penguim hell para você pegar os treco para ele. E te coloca o storage 30013 com valor 9. E veja que ele manda você falar mission quando completar Vamos supor (não supositorio), que você completou ela e falo mission para ele. O que iria checar ? elseif msgcontains(msg, 'mission') then if doPlayerRemoveItem(cid,7707,1) == 1 then selfSay('Congratulations. Give this for Willard.', cid) setPlayerStorageValue(cid,30013,10) talkState[talkUser] = 0 else selfSay('You don\'t have nothing!', cid) end Se você fala mission, ele automaticamente remoe o item 7707 (dado na quest) e parabeniza você. Dando o storage 30013 com valor 10 O valor necessario para o npc anterior voltar a falar com você. Caso você seja caloteiro ele já te desmente. Bem simples, não ? Claro que esse npc é minisculo. Porém ja da para seguir como base. Olhe a evolução dele. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'mission') then if getPlayerStorageValue(cid,2411) == -1 then selfSay('Entregue essa carta a minha irmã Clarice.', cid) setPlayerStorageValue(cid,2411,1) doPlayerAddItem(cid,8370,1) else selfSay('Eu ja te dei a carta, aguardo resposta', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Ai checamos se ele já fez a quest. No caso se tiver -1 (que nunca fez) ele poderá começa-la. E dará a carta ao player (item 8370 nem sei o que é) Ok. Essa parte ta montada, ele dá a carta. Situação : A NPC Clarice está cantarolando em sua casa, quando você chega com uma carta de seu irmão. Ela recebe de bom grado porém prescisa provar que recebeu. Porém seu jogador não sabe que existe storage value, então Você poderá enviar outra carta ou inventar que ela irá falar com ele. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'letter') then if getPlayerStorageValue(cid,2411) == 1 then selfSay('Ah você relmente tem a carta de meu amado irmão?', cid) talkState[talkUser] = 1 else selfSay('Ah seu fanfarao saia daqui', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then if doPlayerRemoveItem(cid,8013,1) == 1 then setPlayerStorageValue(cid,2411,2) selfSay('Obrigada. Agora eu irei falar com ele sobre o assunto', cid) talkState[talkUser] = 0 else selfSay('Você não tem a carta dele', cid) end else selfSay('Então porque veio aqui ?', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Veja que ela é a prova de erros. Primeiro ao falar letter ela checa se você tem o storage com valor 1 (Ou seja, se você falo com ele) Se não falou ela já te manda pescar, se houver, ela já mete pergunta se você tem a carta Caso não já te manda pescar Caso sim ela tenta pergunta se voce tem a carta Caso diga não ela te manda pescar também, Caso fale sim ela tenta tirar sua carta, caso você tenha ela te agradece e coloca o storage com valor 2 Caso não tenha ela diz que você não tem a carta Vamos suport, que você aceitou e entregou a carta tudo certinho. Você deve voltar ao Valdemar para ele te dar algo não ? Situação : Você ja deu uma de carteiro e agora quer receber sua recompensa, então ao Oscar, Porém ele não é trouxa E como ele sabe se você ja fez tudo ? Uma dica começa com S e termina com orage... Vejam que eu usei a mesma palavra missão e adicionei um else. Se ele tiver o storage com valor 2 e falar missão, obviamente ele fez tudo e como é a ultima missão Não necessita fazer perguntas retoricas (sem resposta), então ele já da sua recompensa e ja fecha seu storage com 3. local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end npcHandler:addModule(FocusModule:new()) Se você observar ele tem 4 funções ai que nem foram usadas.[/left] onCreatureAppear(cid) : Ela faz uma ação quando o player entrar em seu raio de ação onCreatureDisappear(cid) : Ela faz uma ação quando o player sai do seu raio de ação. onCreaturesay(cid) : Quando o player fala algo. onThink(cid) : Seria ao pensar ao achar, não tenho certeza do que faz, porém é uma função muito usada. onCreatureMove(creature, oldPos, newPos) : Quando a criatura se move de um lugar para outro. local target = 0 local prevTarget = 0 local maxChaseDistance = 20 local origPos = 0 local origDir = NORTH local lastAttack = 0 local followTimeout = 10 local function isSkulled(cid) local skullType = getPlayerSkullType(cid) if(skullType >= 3) then return true end return false end local function goToOrigPos() target = 0 lastAttack = 0 selfFollow(0) doTeleportThing(getNpcCid(), origPos) end local function updateTarget() if(isPlayer(target) == FALSE) then goToOrigPos() elseif(not isSkulled(target)) then target = 0 selfSay("Now, behave in the future.") end if(target == 0) then local list = getSpectators(getNpcPos(), 8, 8, false) for i=1, table.getn(list) do local _target = list[i] if(_target ~= 0) then if(isPlayer(_target) == TRUE and isSkulled(_target)) then if(selfFollow(_target)) then target = _target if(target ~= prevTarget) then selfSay("We do not tolerate people like you here!") end prevTarget = target break end end end end end end function onCreatureAppear(cid) if(cid == getNpcCid()) then --Wake up call origPos = getNpcPos() --origLook = getCreatureDir(cid) end end function onCreatureDisappear(cid) if(target == cid) then goToOrigPos() end end function onCreatureMove(creature, oldPos, newPos) -- end function onThink() updateTarget() if(target == 0) then return end local playerPos = getCreaturePosition(target) local myPos = getNpcPos() if(myPos.z ~= playerPos.z) then goToOrigPos() return end if(math.abs(myPos.x - origPos.x) > maxChaseDistance or math.abs(myPos.y - origPos.y) > maxChaseDistance) then selfSay("I'll catch you next time.") goToOrigPos() return end if(lastAttack == 0) then lastAttack = os.clock() end if(os.clock() - lastAttack > followTimeout) then --To prevent bugging the npc by going to a place where he can't reach selfSay("You got me this time, but just wait.") goToOrigPos() return end if( (math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -200, -300, CONST_ME_BLOCKHIT) lastAttack = os.clock() end end Bem a função updateTarget faz ele apenas fixar a target (alvo) players com skull white ou red. Então deixe ela para outro dia. Vamos verificar a onThink function onThink() updateTarget() if(target == 0) then return end local playerPos = getCreaturePosition(target) local myPos = getNpcPos() if(myPos.z ~= playerPos.z) then goToOrigPos() return end if(math.abs(myPos.x - origPos.x) > maxChaseDistance or math.abs(myPos.y - origPos.y) > maxChaseDistance) then selfSay("I'll catch you next time.") goToOrigPos() return end if(lastAttack == 0) then lastAttack = os.clock() end if(os.clock() - lastAttack > followTimeout) then --To prevent bugging the npc by going to a place where he can't reach selfSay("You got me this time, but just wait.") goToOrigPos() return end if( (math.abs(playerPos.x - myPos.x) <= 1) and (math.abs(playerPos.y - myPos.y) <= 1)) then doTargetCombatHealth(getNpcCid(), target, COMBAT_LIFEDRAIN, -200, -300, CONST_ME_BLOCKHIT) lastAttack = os.clock() end Explicando cada if. - Primeiro ele checa se ele tem target, se não tiver recomeça o ontarget - Segundo se ele verifica se o player está no mesmo andar que ele (coordenada z) se não tiver volta pro começo - Terceiro ele verifica se o player está muito longe (distancia maxima especificada acima), caso esteja ele fala mais ou menos "te pego na proxima" e volta pro seu respawn. - Quarto Ele muda seu ultima attack para o tempo atual do servidor - Quinto Ele verifica se ja passou o "tempo de descanso dele) - Se o tiver na posição certa de ataque, ele mete o sabugo no player espacando ele. Até o player morrer ou fugir. Entederam a logica ? Não !? Tudo bem. Vai treinando... Sinceramente esse npc é o mais complexo que ja vi. Eu entendi ele, porém não tenho animo de refaze-lo xD É Isso. Creditos : Tibiaa4e ( 99%) (Por Fazer). xFatality ( 1% ) (Por trazer ao TK). Obrigado, Abraços. Da para você fazer tudo do LUA no XML, porém eu acho estranho e apenas frescura do Jiddo e dos Developers do TFS (não sei developer em Português) Caso seja curioso olhe nos arquivos bankmax.xml, merchant.xml e postman.xml que estão em npc/lib Bem a parte XML já acabo, ou seja, ela é muito simples. NPCS EM LUA Aqui é a parte legal do npc na qual até certos scripters novos fazem coisas desnecessarias ou que pioram... A base do arquivo usando Jiddo System é Ai sempre virá uma bp cheia dos item especificado. Caso não saiba ao clicar com o direito no TRADE e usar buy with backpack virá com isso ai Essa é a parte facil até agora tentarei pensar aqui 25 minutos um jeito de explicar muita coisa xD NPCS de Missões Bem aqui ensinarei a fazer npcs de missões, isso mesmo até mesmo aqueles de post office, paradox (que eu até ja fiz) Como sempre ensinarei a logica, ou seja, darei conhecimento não ideias Assim já para ter uma ideia de um npc maior... É só seguir essa base... Vamos criar um passo a passo para que não compreendeu. NPCs tutoriais Situação : O npc Valdemar quer que você entregue uma carta a irmã dele chamada Clarice. Pense. Ele irá dar uma carta, e algo que controle se você ja recebeu a carta. Porque se você deu calote uma vez Que não se repita, ou seja, um storage value. Que será o 2411 (bem masculo) Caso você não tenha storage -1 e nem 2 só pode ser 1 (no caso dessa quest) então ele manda você termina o serviço PELO AMOR DE DEUS, SEMPRE ESTRUTURE SEU SCRIPT, SE NÃO VOCÊ IRÁ SE CONFUDIR COM ESSE SHOW DE ELSE E IF. Isso é a vantagem de se usar o Jiddo System, pois diminuiu a confusão. Porém como ja disse, é coisa de preguiçoso Mais cada um com o seu né... Aqui acaba o npc de missões. Eu expliquei apenas a parte dos ifs e elseifs. Isso é simples, agora depende de sua capacidade e criatividade. Melhor maneira de aperfeiçoar ? fazendo varios!!! Eu odeio npcs, quase morri de raiva de ter que fazer esses (serio ) Espero que aproveitem xD. Funções de NPcs Se você leu esse tuto até aqui, é porque não entendeu nada, ou seu interesso muito, por npcs. Lembra dos npc base ?. Pelo que você ja perceberam eu odeio npcs, então não usei muitas dessas funções. No tfs tem o npc cityguard que ataca todos os red skull que aparecem em seu raio. Vamos estuda-lo e aprender juntos!!! function onCreatureAppear(cid) if(cid == getNpcCid()) then --Wake up call origPos = getNpcPos() --origLook = getCreatureDir(cid) end end Quando a criatura aparece ele chama a função getNpcCid que checa o player que o npc está focado. Ai a variavel origPos vira a coordenada que ele está no momento. function onCreatureDisappear(cid) if(target == cid) then goToOrigPos() end end Quando o player sai da tela, ele verifica se o target (player que ele está focado também!?) é um player Se for ele volta para a posição anterior local function isSkulled(cid) local skullType = getPlayerSkullType(cid) if(skullType >= 3) then return true end return false end Essa função seria a base do npc, ele segue apenas players com skull. Poderiamos mudar essa função para ele seguir apenas player druids ? Claro!!! Como é um tutorial mudar o nome da função iriamos que remodelar todo o script (enche o saco) vamos apenas mudar dentro da função local function isSkulled(cid) local vocType = getPlayerVocation(cid) if(vocType== 2) or (vocType == 6) then return true end return false end Mudando só isso os druid iriam sofrer na mão desses npcs xD Da para fazer ele atacar apenas monstros ? (acho que sim) local function isSkulled(cid) local idType = isPlayer(cid) if (idType ~= 1) then return true end return false end No caso se for diferente de 1 ele arrebenta de magia. Teste essas modificações. Porém a ideia base é entender as funções e não só modifica-las. Pelo contrato da SVN tudo que você faz a partir dela é conteúdo livre e de total modificação. Porém tenha bom senso que não é facil fazer scripts assim. Então sempre mantenham os creditos, principalmente Se você modificou
  9. [854] Servidor Galaxy PokeOT

    pedro poke tibia reagiu a Wolf Admin por uma resposta no tópico

    1 ponto
    GALAXY POKEOT Olá Galera... Estou Aqui hoje para postar um servidor onde eu editei por um tempo, o "Galaxy PokeOT". Vamos começar: • Menu: ├ Informações; ├ Ediçoes; ├ Erros; ├ Prints; ├ Download; └ Creditos. Informações Básicas: Edições Erros do Servidor Prints Downloads Créditos Bom, é isso galera.. Espero que tenham gostado do meu servidor Façam bom proveito. Gostou? Ajudei? Deixe seu Rep ai Vlw !!
  10. 1 ponto
    Edições Adicionei novos pokémons,Gothorita,Hydreigon e outros,alguns pokémons não foram adicionados mais as sprites estão no cliente,na V3 vou adiciona-los. Editei um pouco Saffron City e entre outras,lembrando que o mapa é igual do ot pokémon,só não tem umas coisas que tem no ot pokémon. Bom fiz várias coisas,isso você vai ver no Servidor,bom o Change Log,esta desatualizado,não fui eu que fiz o Change Log. NPCS, Partes do Mapa que falta adicionar Bom esqueci de colocar Battle no P.v.P,é só fazer isso no RME. bom esqueci de colocar a Nurse Joy e Nurse Chansey,em algumas citys. Bom acho que é só isso. Erros do Servidor Bom,o Poison Gas esta dando lag(delay) no jogo. o Shiny Metagross,quando usa mount o mount fica com a outfit de Shiny Metang. o Shiny Salamence,esta com a outfit de Shiny Shelgon. Bom acho que é só esses. Créditos PXG. Pobro. Tibiaking. Ot Pokémon. Gabrieltxu. Eu(por editar o servidor,desenhar algumas sprites,editar o mapa e etc. Downloads otCliente: Clique aqui Servidor: Clique aqui
  11. Como criar uma nova skill

    Dasdor reagiu a palubo por uma resposta no tópico

    1 ponto
    Fala, galera! Beleza? Sou novo aqui no TK e queria trazer algo para vocês. Dei uma procurada e não achei nada do tipo, então creio que esse tutorial possa ajudar algumas pessoas! O que vou ensinar a vocês é como criar uma skill direto na source, o que permite que você utilize comandos como "getPlayerSkill", "doPlayerAddSkillTry" etc em seus scripts em Lua. Esse tutorial NÃO serve para criar skills de "combate", como sword, axe etc. Esse tipo de skill envolve vários outros parâmetros além do que mostrarei aqui. Quem sabe eu faça um tutorial sobre isso daqui um tempo. Preview de uma skill que criei para meu projeto: Para este tutorial, eu usei: Sources do The Forgotten Server 0.3.7: Aqui serão feitas várias edições, criando a nova skill e tudo que é necessário para a skill funcionar corretamente. Microsoft Visual Studio 2010 Professional: Utilizei para compilar o TFS com as novas edições. Se não souber compilar, procure em outros tópicos aqui do fórum. Não é meu objetivo aqui ensinar como compilar. É necessário compilar com o MVS? Não. Se você preferir, pode fazer com outros programas. Notepad++: Usei porque acho um editor de texto simples, prático e funcional. Não gosto de editar os códigos no MVS. Porém sinta-se à vontade para usar o editor que quiser. haha SQLiteStudio 2.1.4: Será necessário para fazer pequenas alterações para que seu banco de dados funcione corretamente. Se você utiliza MySQL, terá que fazer essas edições por outro programa. Sources do OTClient: Como utilizo o OTClient em meu servidor, usarei ele para demonstrar como adicionar a barrinha à janela de Skill. Se você utiliza outro client, infelizmente, não poderei dar suporte, já que nunca editei outros clients. Codeblocks: Usei para compilar o OTClient. Mas pode ser feito com o MVS também. A escolha é sua! Passo 1 - Editar a source do TFS: Passo 2 - Editar o OTClient: Passo 3 - Editar o TFS: Passo 4 - Editar a database: Pronto! Seu servidor já está configurado com a nova skill! Agora você poderá usar Lua para configurá-la! Vou dar um exemplo MUITO simples de como isso poderia ser feito em Lua: Claro que essa action acima é algo muito simples, mas, tendo o servidor já configurado, acredito que essas modificações abram uma gama de possibilidades imensas a todos que querem desenvolver uma nova skill. Espero que tenham gostado e que o tutorial seja útil para alguém! haha Qualquer erro ou bug, me avisem! Atenciosamente, Auro Mota.
  12. Lib 000-Const

    Maniaco reagiu a Caronte por uma resposta no tópico

    1 ponto
    Olá pessoal, venho mais uma vez trazer um tutorial simples, e tentar explicar tudo claramente, esse tutorial pode ficar grande dependendo do desenrolar dele, pois é um pack de tutoriais, então vou usar spoilers para ajudar na formatação do tópico. Nota: as informações usadas abaixo, podem ser tanto usadas com o nome, quanto com o número, e podem ser encontradas na pasta lib no arquivo 000-const https://pastebin.com/0FfPcg7y line4 Coordenadas: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Explicando: doMoveCreature(cid, direction): Serve para mover tanto o player quanto o monstro. Combate: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Parâmetros de condição: Condições: Slots: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Participação: xWhiteWolf Bom, é só isso o tutorial pessoal, espero que tenham gostado, e o que prego nesses tutoriais é a essência da simplicidade, às vezes, uma coisa que parece ser boba para você, pode atormentar uma outra pessoa. Const_ani e Const_me: Tutorial feito e formatado por Caronte o + gato do fórum, avaliações do perfil são bem-vindas. Talktypes and message types: [title][/title] Tutoriais concluídos por ordem de formatação (podem ser alterados assim mesmo): Coordenadas, e suas direções. Combat (ainda há coisas a serem adicionadas). Slots. CONST_ME and CONST_ANI Os assuntos do tópico poderão se diminuídos ou aumentados de acordo com o desenrolar do tempo, gostaria de apoio, e não me incomodaria se alguém se propusesse fazer algum tutorial, eles serão supervisionados por mim e formatados por mim, para serem postados neste tópico. Esse tópico demorou e vai demorar muito para fazer cada tutorial, então eu não me importo com um obrigado e REP+, OBS.: Um obrigado vale bem mais do que um REP+
  13. [talkaction] Adicionar X item para o player

    bra reagiu a ViitinG por uma resposta no tópico

    1 ponto
    Para quem não sabe como funciona o script : O ADM do servidor digita um comando para dar X quantidade de item para X player.Útil para quando terminar um evento o ADM dar X item para tal player pelo comando e não jogando o item no chao. • Adicionando o script • "data/talkactions/giveitem.lua" : function onSay(cid, words, param) local param = param.explode(param, ',') if param then if isPlayer(getCreatureByName(param[1])) == TRUE then doPlayerSendTextMessage(getCreatureByName(param[1]), 22, "Você acabou de receber um item do ADM!") doPlayerAddItem(getCreatureByName(param[1]), param[2], param[3]) end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") end return TRUE end "data/talkactions/talkactions.xml" : <talkaction log="yes" access="5" words="/giveitem" event="script" value="giveitem.lua"/> • Configurando •
  14. [Básico] Aprendendo Script

    Shirushi1 reagiu a VictorFT por uma resposta no tópico

    1 ponto
    ---Tutorial by Leo --- Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei. Nessa primeira parte, vamos ver os seguintes pontos: 1. [LÓGICA DE PROGRAMAÇÃO] 1.1 O que é um algoritmo? 1.2 Um exemplo de algoritmo. 1.3 Exercício: Faça seu próprio algoritmo. 1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação. 1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros. 1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é: Acordar Se não tiver água quente então Colocar água na panela Colocar a panela no fogão Ligar o fogão Esperar água ferver Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando... Mas se já tiver água quente então Botar água na xícara Botar duas colheres de açúcar Botar uma colher de café em pó Mexer Tomar Dizer: Delíiiciaa =P Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café. Como ficou o algoritmo: 1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar). 2. [sCRIPTEANDO] 2.1 Arquivos de Base 2.2 Controladores Lógicos - Condicionais - Operadores de relação - Operadores-controladores 2.3 Variáveis 2.4 Storage Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico. 2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são: -- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts. -- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca. -- Notepad++: Um editor de texto que também pode ser útil. 2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir. --- Condicionais Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito. Exemplo: Caso não chova, irei jogar bola. Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo. Na programação, os principais condicionais são: if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end. else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa. elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if. Construindo um algoritmo só para exemplificar: Pegando o exemplo acima, vamos usar o elseif. ---- Operadores de relação Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente: igual: = menor igual: <= maior igual: >= verificação: == Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores. Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100 --- Operadores controladores Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo. Exemplo: se o player tem level 100 e o nome dele é Leoking então execute script fim Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas. Exemplo: se o player tem level 100 ou o nome dele é Leo então execute script fim Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado. 2.3 Variáveis: Servem basicamente para guardarem valores. Exemplo: O script retornará: king -- king é exatamente o valor da variável var. 2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc. Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor) Exemplo: setPlayerStorageValue(cid, 1234, 1) Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor) Exemplo: getPlayerStorageValue(cid, 1234) Essas funções você pode ver naquele arquivo de base: lista de funções em lua Agora a última parte desse mini tutorial: 3. [ACTIONS] 3.1 Sintaxe das actions 3.2 Exemplo de actions 3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação: function onUse(cid, item, fromPosition, itemEx, toPosition) Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end. Exemplo: Explicação da sintaxe: onUse = ao Usar (assim que o player use um item) cid = creature id -- quem vai usar o item item = item que será usado ou item "principal" fromPosition = da Posição itemEx = item "secundário" toPosition = para a Posição 3.2 Vamos colocar em prática tudo que lemos até agora. Nossa action fará: [/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center] Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços. Créditos: 100% Leo PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
  15. Fala galera, hoje eu vendo aqui trazer um tutorial muito útil para quem utiliza o Gesior 2012. Muitos servidores brasileiros estão com dificuldades no sistema de outfits, items e country flags quando estão apontados para o http://item-images.ots.me/. Solução: Você pode deixar esses sistemas em sua própria hospedagem. 1. Como configurar o gesior? - Abra o arquivo config/confg.php e edite as seguintes linhas: $config['site']['outfit_images_url'] = 'http://outfit-images.ots.me/outfit.php'; $config['site']['item_images_url'] = 'http://item-images.ots.me/960/'; $config['site']['item_images_extension'] = '.gif'; $config['site']['flag_images_url'] = 'http://flag-images.ots.me/'; $config['site']['flag_images_extension'] = '.png'; 2. Onde posso obter as imagens dos items?Faça o download da versão correspondente ao seu servidor e extraia o arquivo.zip em sua hospedagem. - Imagem dos Items 8.60 Download: http://item-images.ots.me/items_images_860.zip Mirror: https://mega.co.nz/#!81RGWZSK!p1UkoABfmuiOBpCbFboKdJzumtJUbEtGPGoUbe562-8 9.60 Download: http://item-images.ots.me/items_images_960.zip Mirror: https://mega.co.nz/#!F4ZnzIhR!3tMeBKmeHPSFXYoc94jnKB-X6TpLGa3MSymzjF6iir8 10.30 Download: http://item-images.ots.me/items_images_1030.zip Mirror: https://mega.co.nz/#!40B1wDZB!3JGH4yXqyr2PxuFK0-btII6WD0HrOTlh0WqaVdlrXSI 10.76 Download: http://item-images.ots.me/items_images_1076.zip Mirror: https://mega.co.nz/#!xx5XwIzY!Lc9UqIhz73RbcKieiwAaihHZGWu8eaps5EhJfWbcnsQ - Imagem das Flags Download: http://flag-images.ots.me/flag-images.zip Mirror: https://mega.co.nz/#!Y4JAFBJB!Njot6VnJ_SZtfCyOucx6DrL3oIP4cnOdTbcHlZOGECE - Outfit images generator (requer o módulo GD2 ativo no PHP para gerar as imagens) 9.60 (animação + php script) Download: http://outfit-images.ots.me/outfit-images_960.zip Mirror: https://mega.co.nz/#!MhZGwQhS!08ucrrW1un35TnrZrfbl9_JFBU9Rd72Sv_Kq8DD8shw 10.76 (sem animação + php script) Download: http://outfit-images.ots.me/outfit-images.zip Mirror: https://mega.co.nz/#!skInDS4Y!Hj-KO82x875NxeamYj6rWR6WjF4fwoEZI1Zq1onRmb4 10.76 (animação + php script) Download: https://mega.co.nz/#!NwY3wbgD!pahoOkCksYgbf8_v4Q3DchNAnqjMjOp-e-Gqg-JHWxs 3. O registro das accounts está demorando e todos os players estão com o flag 'unknown'? Faça o download do country-flags.zip e extraia na pasta cache/flags. Download: http://country-flags.ots.me/country-flags.zip Mirror: https://mega.co.nz/#!8hxDGRKb!24HkxX4OYokZuxZbRnIWE_Vyqa-drLKydmPeX14i0SE Bom galera, espero ter ajudado. Qualquer dúvida só postar que estou disponível para suporte. Créditos: - Gesior.pl
  16. Thriller Dance

    Reds reagiu a MaXwEllDeN por uma resposta no tópico

    1 ponto
    Author: Maxwell Denisson (MaXwEllDeN) Testado em: TFS 0.3.6 <?xml version="1.0" encoding="UTF-8"?> <mod name="Max - Halloween Thriller" version="1.0" author="MaXwEllDeN" contact="[email protected]" enabled="yes"> <config name="MaXLIB"><![CDATA[ ]]></config> <globalevent name="Thriller Dance" type="start" event="script"><![CDATA[ --[[ Thriller Dance Author: Maxwell Denisson(MaXwEllDeN) Version: 1.0 ]] local coreo = {0, 0, 2, 2, "'Cause this is thriller, thriller night", {0, 2, 3, 1}, "And no one's gonna save you from the beast about to strike", 1, 1, 2, 0, 3, 3, {0, 2, 3, 1, 2, 0, 1, 2, 3, 0, 1, 2}} local figurino = {65, 68, 18, 311, 33} function getUidsInArea(ext1, ext2) -- By MaXwEllDeN local UiDes = {} for xiz = 0, ext2.x-ext1.x do for yiz = 0, ext2.y-ext1.y do local creature = getThingFromPos({x = ext1.x+xiz, y = ext1.y+yiz, z = ext1.z, stackpos = 255}).uid if (isCreature(creature)) then table.insert(UiDes, creature) end end end return UiDes end function printTableSX(aff) -- BETA ~ By MaXwEllDeN local s = "{" for a, b in pairs(aff) do if (type(b) == "table") then value = printTableSX(b) elseif (type(b) == "string") then value = '"'.. b .. '"' else value = b end s = s .. value .. ", " end s = "{" .. s:sub(2, #s) return (#s < 3) and "{}" or (s:sub(1, #s-2) .. "}") end local config = { interval = {say = 750, walk = 500, turn = 350} } function TeamWalk(cid, direction) if isCreature(cid) then local cp = getThingPos(cid) local ext1 = {x = cp.x-1, y = cp.y-1, z = cp.z} local ext2 = {x = cp.x+1, y = cp.y+1, z = cp.z} local creatures = getUidsInArea(ext1, ext2) for _, uid in pairs(creatures) do if not(isInArray(figurino, getCreatureOutfit(uid).lookType)) and (getCreatureOutfit(uid).lookType ~= 308) then doSetCreatureOutfit(uid, {lookType = figurino[math.random(#figurino)]}, 60*60*1000) end doMoveCreature(uid, direction) end addEvent(doCoreo, 150, cid) end end function TeamTurn(cid, turns) if (isCreature(cid)) then local function Turn(direction, n) if (n == #turns) then addEvent(doCoreo, 150, cid) end local cp = getThingPos(cid) local ext1 = {x = cp.x-1, y = cp.y-1, z = cp.z} local ext2 = {x = cp.x+1, y = cp.y+1, z = cp.z} local creatures = getUidsInArea(ext1, ext2) for _, uid in pairs(creatures) do if not(isInArray(figurino, getCreatureOutfit(uid).lookType)) and (getCreatureOutfit(uid).lookType ~= 308) then doSetCreatureOutfit(uid, {lookType = figurino[math.random(#figurino)]}, 60*60*1000) end doCreatureSetLookDir(uid, direction) end end for int, dir in pairs(turns) do addEvent(Turn, int*config.interval.turn, dir, int) end end end function Saysz(cid, val) doCreatureSay(cid, val, 19) addEvent(doCoreo, 150, cid) end local function StAR() local coreo_LZ = loadstring("return ".. printTableSX(coreo))() print("OKAY") local k = "Dancer" local w = "Michael Jackson" local area = {{k, k, k}, {k, w, k}, {k, k, k} } local ip = {x = 926, y = 1012, z = 7} for x = 1, #area do for y = 1, #area[x] do local pos = {x = ip.x+x-1, y = ip.y+y-1, z = ip.z, stackpos = 253} doSummonCreature(area[x][y], pos) end end local strZN = "" function doCoreo(uid) if not(isCreature(uid)) then return false end for in1, val in pairs(coreo_LZ) do if (type(val) == "number") then addEvent(TeamWalk, config.interval.walk, uid, val) elseif (type(val) == "table") then addEvent(TeamTurn, config.interval.turn, uid, val) elseif (type(val) == "string") then Saysz(uid, val) end table.remove(coreo_LZ, in1) break end strZN = strZN .. "1" if (#strZN > #coreo) then strZN = "" coreo_LZ = loadstring("return ".. printTableSX(coreo))() doCoreo(uid) end end local ip2 = {x = ip.x+2, y = ip.y+2, z = ip.z} local mons = getUidsInArea(ip, ip2) or {} for _, v in pairs(mons) do if (getCreatureName(v) == "Michael Jackson") then doCoreo(v) break end end return true end function onStartup() addEvent(StAR, 1500) return true end ]]></globalevent> <monster name="Dancer" file="Thriller/Dancer.xml"/> <monster name="Michael Jackson" file="Thriller/Michael Jackson.xml"/> </mod> Coreográfia totalmente editável: local coreo = {0, 0, 2, 2, "'Cause this is thriller, thriller night", {0, 2, 3, 1}, "And no one's gonna save you from the beast about to strike", 1, 1, 2, 0, 3, 3, {0, 2, 3, 1, 2, 0, 1, 2, 3, 0, 1, 2}} Tabelas contém as direções que ele vira /\, >, \/, strings são as palavras que ele o Michael Jackson dirá. configuração dos intervalos em milisegundos, 1000 = 1 segundo. local config = { interval = {say = 750, walk = 500, turn = 350} }
  17. Pokemon Generations [V1.0]

    acerak reagiu a Nixon por uma resposta no tópico

    1 ponto
    Bom galera gostaria de lembra que está ainda é a versão v1.0, ainda sairão varias outras atualizações no decorrer do tempo ! - Novos pokémons alguns deles : Shiny Lugia // Shiny Heatran // Shiny Articuno // Shiny Moltres // Gogoat // Xerneas // Yveltal // Giratina // Black Articuno // Black Celebi -Fly de alguns pokémons: Alguns deles: Shiny Zekrom // Shiny Articuno // Giratina // Black Articuno - Ride de alguns pokémons: Alguns deles: Raikou // Suicune - Adicionado npc "Teleportador" Quando você fala "HI" e depois "TRAVEL" e depois "YES" você é teleportado para saffron. - Adicionado area de UP Do lado do portal vip estará um portal para a area de up. -Removido a quest bike; -Removido o stronp -Removido algumas houses -Removido alguns npcs -Adicionado quest de box Algumas delas: Box +1 // Box +2 // Box +3 // Box +4 // Box +5 -Adicionado algumas quests de pokémons Alguns deles: Shiny Lugia // Divine Jirachi // Shiny Riolu // Shiny Reshiram // Green Dialga // Victini // Shiny Regigigas -Adicionado quest Diamonds Recompensa: 50 Diamonds -Adicionado quest Ultra Rod Recompensa: 1 Ultra Rod /t para os players (Corrigido) Bug de atravessar parede do Shiny Zekrom Quest (Corrigido) Quando matar Attack deoxys MVP não abria teleport na Kyogre Quest (Corrigido) Bug da quest Deoxys que não tinha teto (Corrigido) Bug dos 2 golpes que lagavam o servidor (Corrigido) Bug dos Pokes Megas não terem golpes nem força (Corrigido) Print 1 http://imageshack.com/a/img745/8571/AC2fSn.png Print 2 http://imageshack.com/a/img631/4696/KzhcKz.png Print 3 http://imageshack.com/a/img633/5944/viSWts.png Server Cliente Factur - Por adicionar os pokémons Poke pro - Pelas sprites Otsclop - Não posso revelar PokePro - Por algumas sprites e outros Nixon - Editar, remover alguns erros e bugs, adicionar algumas coisas e por criar e organizar o Pokemon Generations. Wolf - Pela base (Não tenho certeza)
  18. [10.35] Venorewarv2 - 32B/64B

    dimiot reagiu a .HuRRiKaNe por uma resposta no tópico

    1 ponto
    Informações: Level inicial 130 Recompensa por kill Mount's por gold Addon's por gold Sem erros no console E mais! Imagens: Download 64B: http://www.mediafire.com/download/w1meo8wk65czkef/Venorewar10.35v2++64bits.rar Scan 64B: http://virusscan.jotti.org/pt-br/scanresult/e7885c3bb9e65a541ffe4b93213e13272eb84ec0 Download 32B: http://www.mediafire.com/download/5wtbokw7f0no3f4/Venorewar10.35v2_32bits.rar Scan 32B: http://virusscan.jotti.org/pt-br/scanresult/f04959c777bfc6b633d9853599cd473942586252 Créditos: Demonius Bt
  19. Baiakzik Full (new Version)

    rafanasser reagiu a fabiodias por uma resposta no tópico

    1 ponto
    Baiakzik full .Noticia -> lembrando que dia 09/01/2014 as 12h lançamento de um novo server(mapa) aqui no fórum....vamos ao que interessa agora! .Novidades? Templo 100% diferente de todos os baiakzik Blood castle reformulado batlefield reformulado city war reformulado (unica) castle24h .Oque a, de novo? quests novas servidor enfeitado para (natal e ano novo) sistemas unicos implantados vip system melhorado as scripts tsf compilado DOWNLOAD: http://www.mediafire.com/download/932witze6d4m0jv/Baiakzik+King.rar Scan: https://www.virustotal.com/pt/file/23200341923c10474886011122f9d1085af4f54e164a8f4c449594186fddae06/analysis/1419694026/ ~~créditos~~ fabiodias tsf team dieguinxp elli Deathsrock
  20. [Tutorial] Como trocar o ip do OT CLIENT

    baraonareba reagiu a Waldragon por uma resposta no tópico

    1 ponto
    Fala ae galerinha na paz? Espero que sim .. Vejo que muitas pessoas tem duvidas De como trocar o ip do OT CLIENT , então estou trazendo esse tutorial para vocês.. Passo a passo... 1° Primeiramente abra a pasta do seu servidor e click em Config.lua . 2° Depois aperte ctrl+F e localize a palavra ip . 3° Aperte Enter umas 5 vezes, em seguida vai localizar ip = "aqui vai esta algum IP" Ai e só substitui o IP que estava em " " pelo seu IP... Agora a parte do OT CLIENT 1° Abra a pasta do seu Ot Client , vá em modules/client_entergame. 2° Agora abra o arquivo entergame.lua . Em seguida aperte ctrl+F e escreva em localizar 7171 . 3° Agora aperte duas vezes Enter que vai localizar essa frase... EnterGame.setUniqueServer('Aqui vai esta algum IP', 7171, 854, 270, 210) Ai e só você trocar esse IP que estava ali pelo IP que você colocou no config.lua.. Espero ter ajudado ....
  21. (Resolvido)[Ajuda] Modificar script de spell

    Farathor reagiu a Caronte por uma resposta no tópico

    1 ponto
    function onCastSpell(cid, words) local wait = 0.5 -- Tempo de exhaustion em segundos local stor = 3711 local mana = -2800 -- Quanta mana vai gastar if exhaustion.check(cid, stor) then doPlayerSendCancel(cid, "") return false elseif getPlayerMana(cid) < mana then doPlayerSendCancel(cid, "") return false end doCreatureAddMana(cid, playermana) doPlayerAddSpentMana(cid, getPlayerMana(cid)) if getPlayerVocation(cid) == 1 then doCreatureAddMana(cid,-2850) -- SORC elseif getPlayerVocation(cid) == 2 then doCreatureAddMana(cid,-2850) -- DRUID elseif getPlayerVocation(cid) == 3 then doCreatureAddMana(cid,-2850) -- PALA elseif getPlayerVocation(cid) == 4 then doCreatureAddMana(cid,-2850) -- KINA end exhaustion.set(cid, stor, wait) doSendMagicEffect(getCreaturePos(cid), 11) return false end Tenta aí
  22. Ajuda em Script de RESET!

    Yamborghini reagiu a Caronte por uma resposta no tópico

    1 ponto
    Muito difiícil. os sistemas resets são quase que "atuais", feitos exclusivamente para a quebra de padrões que teve sobre a versão antiga... no seu caso, tem que ser um sistema reset exclusivo para essa versão, pois como Bruno Minervino disse, os servidores atuais possuem funções que o seu não possui...
  23. Ajuda em Script de RESET!

    Yamborghini reagiu a Bruno Minervino por uma resposta no tópico

    1 ponto
    Então este é o problema amigo, Muitas destas funções não são compatíveis com suas versão, Nessa versão nem tem mods ainda.
  24. Ajuda em Script de RESET!

    Yamborghini reagiu a Caronte por uma resposta no tópico

    1 ponto
    Nem percebi '-' Boa
  25. Ajuda em Script de RESET!

    Yamborghini reagiu a Bruno Minervino por uma resposta no tópico

    1 ponto
    Amigo, esse é apenas o npc, Se você não tem essa função, provavelmente você não tem um sistema. Da uma olhada nesse: http://www.tibiaking.com/forum/topic/19325-mod-reset-system/
  26. Ajuda em Script de RESET!

    Yamborghini reagiu a Caronte por uma resposta no tópico

    1 ponto
    Nem... tem algum problema você trocar o seu reset system ?
  27. (Resolvido)Aprendendo Script

    ZwhiteDog reagiu a Caronte por uma resposta no tópico

    1 ponto
    O que você julga básico ? e os links que eu te dei, fala de quase tudo...
  28. Mapa próprio, visando o RPG, com as versões mais atuais, Ou seja, fazer oq a cip não faz.!
  29. servidor 8.6 com vip +- editado
  30. (Resolvido)Aprendendo Script

    ZwhiteDog reagiu a Caronte por uma resposta no tópico

    1 ponto
    Mané video... http://www.tibiaking.com/forum/forum/136-tutoriais-de-scripting/ http://www.tibiaking.com/forum/forum/220-aulas-de-scripting/
  31. CMD #01 - "Beeny"

    Kluivert reagiu a Beeny por uma resposta no tópico

    1 ponto
    texto : pegar a render de uma psd antiga, é contra as regras? psd : https://www.mediafire.com/?cbexy4w5xz4234v
  32. (Resolvido)Requisitos para equipes

    Gibion reagiu a Bruno Minervino por uma resposta no tópico

    1 ponto
    Existem duas formas simples de se fazer isso: 1ª Em data/items/items.xml 2ª Em data/movements/movements.xml
  33. [Show Off] Gabisa00

    Thayam reagiu a gabisa00 por uma resposta no tópico

    1 ponto
    Finalmente acabei, não achei tão legal assim, mas estou no caminho certo para algo melhor.
  34. (Resolvido)Ajuda com o RME

    Sekk reagiu a GBs por uma resposta no tópico

    1 ponto
    mano abre duas abas em um RME, ai vc vai file > import map > ai vc importa seu mapa em uma aba e na outra vc importa o mapa q vc quer copiar os andares. Dps de copiado vc salva e pronto
  35. (Resolvido)Ajuda com o RME

    Sekk reagiu a ViitinG por uma resposta no tópico

    1 ponto
    Segure CTRL + SHIFT e arraste com o ponteiro do mouse e clicando com o botão esquerdo, selecione todos os andares e copie.
  36. Poketibia como sobreviver?

    RodAlbu reagiu a Nextbr por uma resposta no tópico

    1 ponto
    [+] Na Questao de DDOS - Recomendo Voce Pegar um Dedicado da [serverCore] o Proprio Carter Sofreu Muito Com Isso e no Minimo Para Abrir o Servidor (Postado) é um Dedicado 4 GB (Melhor Ping Baixo) e o Mapa do Server é de [65MB] o Tibia Global (100MB Map - Minimo) Host 4GB [+] A VPS do LGV Host andam Muito Lagado Olha que sou Client desde 2011 e Antigamente eu Abria um Server de War com 200 Players Online (Forçado) em um Host VPS de 2 GB (Fiz Milagre com o Host que no Caso o que mais Importava do Host era so o Ping baixo) o Map 5mb. Agora hoje em dia o VPS dessa Empresa Nao esta como Antigamente [+] Nao Tem como voce Passar o Servidor Para Linux (Pois Para Fazer Isso Voce Precisa de Sources) [+] O Servidor KPDO que o Carter Postou é uma Boa Base (Proprio) So que esta muito "Bagunçado" Varios Scripts de Gambiarra isso faz com que o Server Sofre uns Freezes por Algum Sistema/Funçoes/Script [+] o Servidor Sofre Rolback? Para Poderem Clonar? (DDOS) Derruba a Internet (Conexao) e nao o Servidor
  37. Embreve Baiaker no (tibiaking)

    luanluciano93 reagiu a fabiodias por uma resposta no tópico

    1 ponto
    Olá pessoal peguei um mapa aqui no fórum chamado (baiak classic) achei muito interessante então comecei a editar! então oque eu já fiz no mapa? -adicionei vip system (versão anterior não tinha) -adicionei batlefied -adicionei novas quests -adicionei 20 novas houses (sera adicionado mais 30) -adicionado efeitos em teleports,potions -adicionado novos sistema como ex: !fly tenebra OQUE SERA ADICIONADO AINDA -bloodcastle -ctf event -castle24h -dodge system -critical system -minigames -2 novas cidades donates peço algumas ideias para mim adicionar no mapa,irei disponibilizar no tk é logico baiaker embreve
  38. Então o problema não está na versão e sim no programa que pega as sprites. Porque no caso, o client em si você consegue diretamente no tibia.com Esse aqui: http://www.tibiaking.com/forum/topic/30624-object-builder/ Suporte as versões: 7.10 - 10.41 Vou procurar algo pra você, qualquer coisa edito o post. Abraço!
  39. Pedido Script de teleport

    Drazyn1291 reagiu a Caronte por uma resposta no tópico

    1 ponto
    <movevent type="StepIn" actionid="Numero" event="script" value="Arquivo.lua"/> <movevent type="StepOut" actionid="Numero" event="script" value="Arquivo.lua"/> <talkaction words="!palavra;/palavra" event="script" value="arquivo.lua"/>
  40. Thriller Dance

    subhe reagiu a MaXwEllDeN por uma resposta no tópico

    1 ponto
    local ip = {x = 926, y = 1012, z = 7} Aqui é onde o "Michael Jackson" vai aparecer
  41. [8.6] Biohazard Online Server

    ClaudioMarcio reagiu a Joshuah por uma resposta no tópico

    1 ponto
    Melhor do que ficar parado no meu pc. Quando alguém colocar on me chama pra jogar ueheuhuehueheuh quero ver como vai ficar
  42. [8.6] Biohazard Online Server

    ClaudioMarcio reagiu a Joshuah por uma resposta no tópico

    1 ponto
    Valeu , agora é só esperar ser movido ?
  43. Dominus World

    nick306 reagiu a llucas75 por uma resposta no tópico

    1 ponto
    Nome: Flango Idade: 18 anos Cargo: fazer uma lógica em linguagem C que permita Beijar o biceps enquanto escuto bonde da maromba, tudo isso enquanto tiro um selfie com leo stronda. Projetos recentes: Frango e batata doce Skype:lucas.coelho75
  44. Otserv 10.53 (tb... u.u)

    Gibion reagiu a matheusbrito180 por uma resposta no tópico

    1 ponto
    amigo a pasta que tem a imagem promo.jpg é a que vc baixou do mitsug ! essa pasta ta completa com um global 10.53 baixe esse arquivo e coloque nesta pasta que tem a imagem promo.jpg http://www.mediafire.com/download/zy371z7xqg1p3ub/TFS+10.53.rar ajudei ? rep+
  45. [Debian] OT Panel

    luanluciano93 reagiu a Bruno Minervino por uma resposta no tópico

    1 ponto
    Fala Galera, Hoje eu venho trazer um tutorial a vocês de um Painel de Controle Online para gerenciamento de seu OT. Com este exemplo, creio que vai inspirar muita gente a criar novas ferramentas. Minha intenção era vincular ao Gesior, porém, deixo por conta da imaginação de vocês. Pré-requisitos: Liberar a função "shell_exec" no seu PHP. Instalar os comandos sudo e screen. Vamos Começar... Faça login no seu servidor com o root. Entre com o comando em negrito: pico /etc/init.d/theforgottenserver e adicione isso: #!/bin/sh # # Startup and signals management script for TheForgottenServer # case "$1" in start) echo -n "Starting theforgottenserver: " cd $2 && screen -AdmS ./theforgottenserver & echo "done." ;; stop) echo -n "Shutting down theforgottenserver: " killall -TERM theforgottenserver echo "done." ;; kill) echo -n "Killing theforgottenserver: " killall -KILL theforgottenserver echo "done." ;; quit) echo -n "Quitting theforgottenserver: " killall -QUIT theforgottenserver echo "done." ;; restart) $0 stop $0 start ;; reload) echo -n "Reloading theforgottenserver: " killall -CONT theforgottenserver echo "done." ;; save) echo -n "Saving theforgottenserver data: " killall -HUP theforgottenserver echo "done." ;; clean) echo -n "Cleaning theforgottenserver map: " killall -TRAP theforgottenserver echo "done." ;; refresh) echo -n "Refreshing theforgottenserver map: " killall -CHLD theforgottenserver echo "done." ;; close) echo -n "Setting theforgottenserver gamestate to closed: " killall -USR1 theforgottenserver echo "done." ;; open) echo -n "Setting theforgottenserver gamestate to normal: " killall -USR2 theforgottenserver echo "done." ;; *) echo "Usage: $0 {start path|stop|kill|quit|restart|reload|save|clean|refresh|close|open}" exit 1 esac exit 0 Pressione F2 e salve o arquivo. Agora entre com os seguintes comandos: chmod 777 /etc/init.d/theforgottenserver chown -R www-data.www-data /etc/init.d/theforgottenserver Em seguida, entre com o comando em negrito abaixo: visudo e adicione a linha abaixo no fim do arquivo: www-data ALL= NOPASSWD: /etc/init.d/theforgottenserver Pressione F2 e salve o arquivo. Bom, agora vamos configurar o site... Navegue até o diretório www (cd /var/www?) e crie um novo diretório chamado "controle" (mkdir controle && cd controle). Entre com o comando em negrito abaixo: pico index.php e cole: <?php $path = "/home/otserv"; //Altere para o diretório do seu servidor aqui $options = array("start" => true, "stop" => true, "kill" => true, "quit" => false, "restart" => true, "reload" => true, "save" => true, "clean" => true, "refresh" => false, "close" => true, "open" => true); echo "<html> <head> <meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\"> <title>TheForgottenServer WWW Control</title> </head> <body style=\"color: rgb(0, 0, 0); background-color: rgb(204, 204, 255);\" alink=\"#000099\" link=\"#000099\" vlink=\"#990099\">\n"; if(isset($_GET['do']) && in_array($_GET['do'], $options) && $options[$_GET['do']]) { $output = shell_exec("/usr/bin/sudo /etc/init.d/theforgottenserver ".$_GET['do'].($_GET['do'] == "start" ? " ".$path : "")); echo nl2br($output)."\n<br />\n<a href=\"".$_SERVER['HTTP_REFERER']."\">&raquo Back</a>\n"; } else { echo "\t\tAvailable options:<br />\n"; foreach($options as $option => $enabled) { if($enabled) echo "\t\t<br />\n\t\t&raquo; <a href=\"".$_SERVER['PHP_SELF']."?do=".$option."\">".ucfirst($option)."</a>\n"; } } echo "\t</body> </html>"; ?> Pressione F2 e salve o arquivo. Bom galera, agora basta acessar http://seuip/controle e fazer o teste. Lembrando que dessa forma, qualquer um pode acessar, procure proteger com um arquivo .htacess ou integre ao seu website. OBS: Neste tutorial, foi usado o editor pico, porém isso fica a critério de vocês. Créditos: elf (tutorial em inglês) Bruno Minervino (redigir tutorial e fazer algumas alterações)
  46. Pokemon Generations [V1.0]

    Marotsu reagiu a Insanity por uma resposta no tópico

    1 ponto
    Exelente Trabalho! Fera So Tem Algums Bugs Que Vc Possa Corcertar , Não Liguem Pra Essas Pessoas Que Não Sabe Arrumar e Colocam Defeitos. Exelente Trbalho.
  47. Pokemon Generations [V1.0]

    Marotsu reagiu a Nixon por uma resposta no tópico

    1 ponto
    Corrigi o erro dos 2 golpes que lagavam o servidor, adicionei a area de up, mudei a força dos novos pokes megas e do Xerneas e Yveltal, Dei uma mechida na exp do server (Não mudei muito), Arrumei alguns pokes que ao matar não abriam teleporte !
  48. Criando Client Próprio 7.6 até 10.41

    stylopode reagiu a p e o p l e por uma resposta no tópico

    1 ponto
    Depois quando meu projeto estiver mais completo, irei acrescentar, e irei pegar esse tutorial e veremos se consigo algo AHUAUHUAH. reputado !
  49. Pokemon Com todos os lendarios e com 5 Geração

    DarkRed reagiu a tatooo por uma resposta no tópico

    1 ponto
    Amigo Esse Servidor Tem 40 Pokemons da 5° geraçao e Varios Lendarios Não São todos mais o Restante é só voce Adicionar no Cliente http://www.mediafire.com/?41tth1y28qw915h Se for Util Da um Rep+ aee
  50. Fazendo Quest pelo RME

    Morphred reagiu a Sociopata por uma resposta no tópico

    1 ponto
    Desculpem a enrolação, erros de fala, mas acho que to pegando jeito nisso de vídeo-aula, suahsuhasuahus Contato ae Skype = leo.araujo39 E podem fazer pedidos se eu puder ajudar eu faço a vídeo aula
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo