Jump to content

Search the Community

Showing results for tags 'action'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. Esse é um pacote com actions úteis para se usar nos servidores e, a menos que esteja indicado o contrário, são de minha autoria. [Testado em servidor 8.6] Para colocar essas actions no jogo, você deve colocar uma TAG no arquivo actions.xml do seu servidor, com um actionid e o nome do arquivo .lua (contendo o script) na pasta de scripts. Então, você deve colocar um item com aquele actionid no mapa. [ACTION #1] Baús de quests completos Descrição: Com essa action, você pode colocar vários baús simples de quest em apenas um script de forma rápida e organizada. Basta apenas registrar diferentes actionIDs no actions.xml, colocar eles em cada baú e depois inserir no script, conforme o padrão. [ACTION #2] Summon simples Descrição: Dessa forma você pode criar um pequeno sistema de summon com um monstro. No primeiro uso, ele invoca o monstro à comando do jogador, gastando a mana definida. Então, caso outro uso seja realizado até o exhaust terminar, o monstro será removido. Quando o jogador usar novamente, se o monstro invocado existir, ele será removido e outro monstro será invocado, reiniciando o ciclo. OBS.: os ataques em área do summon ainda vão tirar vida do jogador. Para uma correção, vide final do tópico. [ACTION #3] Fome Zero Descrição: Script simples: você registra o actionID dele em algum item e então o jogador ganhará uma comida sorteada entre as que constam em foodID (deve ser configurado) Pode ser usado à vontade pelo jogador para conseguir comida. [ACTION #4] Alavanca do Cassino Descrição: Um script de alavanca: nesse você define as possíveis recompensas, o quanto de dinheiro a pessoa vai precisar e as chances! [ACTION #5] Fantasias de Monstros Descrição: Quando o jogador clicar em um item, será sorteada uma outfit entre as definidas. [ACTION #6] Passagem Secreta Descrição: Ao puxar a alavanca, o jogador removerá uma parede do lugar, abrindo uma passagem secreta. Ela se fechará em alguns segundos. [ACTION #7] Baús de vocações Descrição: Bem óbvio pelo nome, essa action dá prêmios diferentes para cada vocação [ACTION #8] SUSTO! Descrição: Essa action super engraçada fará o seguinte: o jogador se transformará num cadáver e aparecerá a mensagem You were downgraded from level... (igual a msg do tibia mesmo). Depois de TRÊS segundos, o jogador voltará a sua outfit normal e receberá a mensagem Gotcha! (te peguei em inglês) [ACTION #9] Painel informativo Descrição: Com essa action você pode fazer aparecer uma mensagem em popup para o jogador contendo as informações que você quiser. [ACTION #10] Armários realistas! Autor: Avronex Descrição: Colocando esse script em armários, os jogadores irão receber a janela de trocar outfit quando clicarem! [ACTION #11] Fogos de Artifício Descrição: Um novo script para fogos de artifício, com efeitos, número de explosões e tempo entre as explosões configuráveis. E aqui a lista termina por enquanto. Me avise se você achar/tiver uma action útil que possa entrar para a lista. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Correção para que o summon não dê dano em quem o invocou:
  2. Eai pessoal blz? eu estava lendo um tópico do nosso amigo Alexxxx... ai o Top...(o Bolz, esqueci o nick dele aq ¬¬) ai eu vi que ele falou que a forma que ele conseguio de adicionar addon no OT dele foi dando um Ctrol+F: Addon, na pasta do PokémonXRain! ai eu baixei ele e tentei, ai adicionei tudo nescessário nele no meu ot, ai quando usei, funcionou perfeitamente! mas claro q não é sem 100% pq quando da fly, ride, surf e etc ele volta pra outfit normal, ai precisa dar Go/back no pokémon para voltar com o addon! mas fora isto esta funcionando perfeitamente! Então Vamos Parar de Blábláblá e começar! Em Data/actions e Actions.xml adiciona isto: <action itemid="IdAddon;IdAddon" event="script" value="Addon.lua"/> Em IdAddon Coloca os ids dos items dos addons! ai para adicionar mais ids é só colocar o ";" Ou seja aquele negocio verde, e depois colocar o ID Ficando: IdAddon;IdAddon;IdAddon e por ai vai Ai Em Data/actions/scripts cria um arquivo lua Chamado "Addon" e Dentro Dele Adiciona Isto: function onUse(cid, item, fromPosition, itemEx, toPosition) local addons = { [12593] = {pokemon= "Electabuzz" , looktype = 1482}, --xxxx = id do item do addon --- "Scyther" = nome do pokemon --- looktype = 1 é o looktype do pokemon com addon [12925] = {pokemon= "Alakazam" , looktype = 1471}, --xxxx = id do item do addon --- "Scyther" = nome do pokemon --- looktype = 1 é o looktype do pokemon com addon } if #getCreatureSummons(cid) > 0 then doPlayerSendCancel(cid, "Please back your pokemon.") return false end local numero = addons[item.itemid].looktype local pb = getPlayerSlotItem(cid, 8).uid local pk = addons[item.itemid].pokemon if getItemAttribute(pb,"poke") ~= pk then doPlayerSendCancel(cid, "Sorry, you can't use this addon on this poke.") return false end if getItemAttribute(pb,"addon") < 1 then doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid, 27, "Congratulations! Now your pokemon will use the addon.") doSetItemAttribute(pb,"addon",numero) return true end return true end Ai para adicionar um Novo Addon é só Adicionar esta tag: [ItemID] = {pokemon= "NomeDoPoke" , looktype = IdDaOutfit}, EM ItemID, troca pelo id do addon em pokemon troca NomeDoPoke, pelo Nome Do Pokémon que vai ser adicionado o Addon Em looktype, troca IdDaOutfit, pelo looktype do pokémon com addon! Em Goback.lua Procure Por: else doPlayerSendCancel(cid, "This pokemon is fainted.") end E Adiciona Emcima de Else Isto: local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) return false end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) return true end Em Catch system.lua Procura Por: doItemSetAttribute(item, "description", description) Adiciona Isto embaixo: doItemSetAttribute(item, "addon", 0) Em Some Functions.lua Procure Por: unLock(item.uid) Da Enter Duas Vezes e Adiciona isto: local pk = getCreatureSummons(cid)[1] local pb = getPlayerSlotItem(cid, 8).uid local look = getItemAttribute(pb,"addon") if not look then doSetItemAttribute(pb,"addon",0) return false end if look > 0 then doSetCreatureOutfit(pk, {lookType = look}, -1) return true end Pronto! Sistema de Addon Funcionando Perfeitamente Caso Coloque Tudo Certinho! Caso Queira uma Addon Box... Faz isto Em Actions.xml Adiciona Isto: <action itemid="12595" event="script" value="addonbox.lua"/> E Em Data/Actions/Scripts Cria um Arquivo Lua Chamado "addonbox" e Adiciona Isto Dentro Dele: function onUse(cid, item, frompos, item2, topos, pos) local addons = {12593,12889} local randomChance = math.random(1, 49) if item2.itemid == 12595 then doSendMagicEffect(getCreaturePosition(cid), 28) doRemoveItem(item2.uid, 1) doPlayerAddItem(cid, addons[randomChance], 1) doPlayerSendTextMessage(cid, 27, "Você ganhou um Addon!") return true end end Pronto Addon Box Adicionada! Créditos Pokémon X Rain Pelo Sistema de Addon Summer Slyer (Zet0N0Murmurou) Por Trazer ao Xtibia, e Por Fazer o Tutorial!
  3. Atualização v1.2: Funciona em OTpokémon. Além de Premium, agora tem VIPTIME. Atualização v1.1: AutomaticDeposit adicionado. Introdução: É um sistema que você pegue os loots automaticamente. O sistema contém: Menu: Há um menu mostrando quais itens estão marcados para lootear automaticamente. Mods: Comandos: /autoloot -- mostra a sua lista de items /autoloot add,nome do item -- adiciona o item na loot list /autoloot remove,nome do item -- remove o item da loot list Configurando: OnlyPremium = true vc precisa ser premium para usar o comando -------------------------------------------------------------------------------- AutomaticDeposit = true Se o dinheiro que ele dropar ao invés de ir para bag vai para o banco -------------------------------------------------------------------------------- BlockMonsters = {} aqui você pode bloquear alguns monstro para ele não usar o auto loot, exemplo: BlockMonsters = {'demon','medusa'} -------------------------------------------------------------------------------- Também tem como bloquear alguns itens para serem adicionados a loot list, exemplo: BlockItemList = {2160,2163 "ok Vodkart, tem pra premium mas e se meu servidor for de Vip Time?" Simples: Troque: if info.OnlyPremium == true and not isPremium(cid) then doPlayerSendCancel(cid, "you must be a premium account.") return true por: if info.OnlyPremium == true and getPlayerStorageValue(cid, 13540) - os.time() <= 0 then doPlayerSendCancel(cid, "you must be a vip account.") return true Caso seu servidor precise que relogue para atualizar a loot list, adicione isso: func(cid, item) -- depois desta linha doPlayerSave(cid) -- essa função
  4. colocar exausted ou uma storage pra poder ser usa de 10 min em 10 min tfs 0.3.6 -- [( Script created by Doidin for XTibia.com )] -- function onUse(cid, item, fromPosition, item2, toPosition) local monstername1 = "Dragon Lord" -- Nome dos monstros que serão sumonados após o player clicar no item! local monstername2 = "Dragon" -- Nome dos monstros que serão sumonados após o player clicar no item! local monster1 = {x=930,y=907,z=7} -- Coordenas de a onde o monstro irá aparecer! (Dragon Lord) local monster2 = {x=925,y=910,z=7} -- Coordenas de a onde o monstro irá aparecer! (Dragon Lord) local monster3 = {x=929,y=906,z=7} -- Coordenas de a onde o monstro irá aparecer! (Dragon Lord) local monster4 = {x=928,y=912,z=7} -- Coordenas de a onde o monstro irá aparecer! (Dragon) local monster5 = {x=932,y=906,z=7} -- Coordenas de a onde o monstro irá aparecer! (Dragon) function Quest() doPlayerSendTextMessage(cid,22,"You have found the secret item!") doPlayerAddItem(cid,itemid,1) end function Summon() doSummonCreature(monstername1,monster1) doSummonCreature(monstername1,monster2) doSummonCreature(monstername1,monster3) doSummonCreature(monstername2,monster4) doSummonCreature(monstername2,monster5) doSendMagicEffect(monster1,36) doSendMagicEffect(monster2,36) doSendMagicEffect(monster3,36) doSendMagicEffect(monster4,36) doSendMagicEffect(monster5,36) end doCreatureSay(cid,"You went in the wrong place, beware!",TALKTYPE_ORANGE_1) addEvent(Summon,100) addEvent(Summon,15000) addEvent(Summon,30000) addEvent(Summon,45000) addEvent(Summon,60000) addEvent(Summon,75000) addEvent(Quest,6000) end
  5. Eaí galera, estive procurando e nunca achei um tutorial para instalar o Mod de Game Shop ou o Diamond Shop, muito usado nos Poketibias da vida; Afim de ajudar os que também procuram, aqui está o tutorial traduzido do Margoh: Como é que o game_shop funciona: Há apenas uma escolha de item por botão, se você quiser mais, faça você mesmo. A compra funciona por comandos, por exemplo (em shop.lua): Exemplo em addons.otui: Code: Como adicionar um novo botão? Copie e/ou edite todas as funções de exemplo: Troque este nome por ex. buyWizard, ficando: Abaixo da função mude: Para: Abaixo de addons.otui copie e cole o último botão e edit para o novo nome de sua função: Ficando: Siga o tutorial para todos os items do shop. Download: MEGA Créditos: Margoh
  6. Introdução Este script consiste em defender uma porcentagem dos ataques recebidos de acordo com o dodge level. Exemplo: Suponhamos que o player tenha Dodge Skill 100 e a porcentagem de defesa esteja configurado para defender 50%, o player terá 30% de chance de defender 50% dos ataques recebidos. Instalação O conteúdo da lib serve para o Dodge e Critical System, se você já fez este procedimento no outro script simplesmente ignore e vá para o próximo passo. Em data/lib/core/core.lua adicione o seguinte conteúdo em qualquer parte: dofile('data/lib/core/dclib.lua')Ainda em data/lib/core/core crie um arquivo chamado dclib.lua com o seguinte conteúdo: Agora em data/actions/actions.xml adicione a seguinte tag: <action itemid="18413" script="other/dodge.lua"/>Depois em data/actions/scripts/other crie um arquivo chamado dodge.lua com o seguinte conteúdo: Pronto, já configuramos o item para atribuir o Dodge Skill, vamos configurar a parte dos ataques recebidos. Vá em data/creaturescripts/creaturescripts.xml e adicione a seguinte tag: <event type="healthchange" name="DodgeSystem" script="dodgeSystem.lua"/>Agora em data/creaturescripts/scripts crie um arquivo chamado dodgeSystem.lua com o seguinte conteúdo: Ainda em data/creaturescripts/scripts abra o arquivo login.lua e Antes de: return trueAdicione: player:registerEvent("DodgeSystem") -- Dodge System if player:getDodgeLevel() == -1 then player:setDodgeLevel(0) endO sistema está finalizado, agora vamos criar as talkactions para que os players acompanhem seu skill. Em data/talkactions/talkactions.xml adicione a tag: <talkaction words="!dodge" script="dodge.lua"/>E para finalizar, em data/talkactions/scripts crie um arquivo chamado dodge.lua com o seguinte conteúdo: Bom é isso ai! Créditos:
  7. Galera irei disponibilizar a distro que uso TFS 0.4 (rev 3777) que retirei o Salt, ele causa um problema onde só é possível criar acc pelo site, como resolvi agora também é possível pelo tibia "1/1", ela acompanha: System War Ant-Divulg (Direto na distro) No-OTBM (Faz aceitar qualquer items.otbm) No-Salt (que citei a cima) Caso precise do config.lua. Caso use outra versão da distro e irá usar o mesmo config.lua Mude: worldType para "open", adicione em mapName ao final do nome ".otbm" e ela só aceita criptografia sha1 em "encryptionType" mude para "sha1", visando sua melhor proteção de seus dados. -- The Forgotten Server Config -- Account manager accountManager = true namelockManager = true newPlayerChooseVoc = false newPlayerSpawnPosX = 95 newPlayerSpawnPosY = 117 newPlayerSpawnPosZ = 7 newPlayerTownId = 1 newPlayerLevel = 1 newPlayerMagicLevel = 0 generateAccountNumber = false -- Unjustified kills -- NOTE: *Banishment and *BlackSkull variables are >summed up< -- (dailyFragsToRedSkull + dailyFragsToBanishment) with their -- *RedSkull equivalents. -- Auto banishing works only if useBlackSkull set to negative. -- advancedFragList is not advised if you use huge frags -- requirements. useFragHandler = true redSkullLength = 30 * 24 * 60 * 60 blackSkullLength = 45 * 24 * 60 * 60 dailyFragsToRedSkull = 3 weeklyFragsToRedSkull = 5 monthlyFragsToRedSkull = 10 dailyFragsToBlackSkull = dailyFragsToRedSkull weeklyFragsToBlackSkull = weeklyFragsToRedSkull monthlyFragsToBlackSkull = monthlyFragsToRedSkull dailyFragsToBanishment = dailyFragsToRedSkull weeklyFragsToBanishment = weeklyFragsToRedSkull monthlyFragsToBanishment = monthlyFragsToRedSkull blackSkulledDeathHealth = 40 blackSkulledDeathMana = 0 useBlackSkull = true advancedFragList = false -- Banishments -- violationNameReportActionType 1 = just a report, 2 = name lock, 3 = player banishment -- killsBanLength works only if useBlackSkull option is disabled. notationsToBan = 3 warningsToFinalBan = 4 warningsToDeletion = 5 banLength = 7 * 24 * 60 * 60 killsBanLength = 7 * 24 * 60 * 60 finalBanLength = 30 * 24 * 60 * 60 ipBanishmentLength = 1 * 24 * 60 * 60 broadcastBanishments = true maxViolationCommentSize = 200 violationNameReportActionType = 2 autoBanishUnknownBytes = false -- Battle -- NOTE: showHealingDamageForMonsters inheritates from showHealingDamage. -- loginProtectionPeriod is the famous Tibia anti-magebomb system. -- deathLostPercent set to nil enables manual mode. worldType = "open" protectionLevel = 1 pvpTileIgnoreLevelAndVocationProtection = true pzLocked = 60 * 1000 huntingDuration = 60 * 1000 criticalHitChance = 7 criticalHitMultiplier = 1 displayCriticalHitNotify = false removeWeaponAmmunition = true removeWeaponCharges = true removeRuneCharges = true whiteSkullTime = 15 * 60 * 1000 noDamageToSameLookfeet = false showHealingDamage = false showHealingDamageForMonsters = false fieldOwnershipDuration = 5 * 1000 stopAttackingAtExit = false loginProtectionPeriod = 10 * 1000 deathLostPercent = 10 stairhopDelay = 2 * 1000 pushCreatureDelay = 2 * 1000 deathContainerId = 1987 gainExperienceColor = 215 addManaSpentInPvPZone = true squareColor = 0 allowFightback = true fistBaseAttack = 7 -- Connection config worldId = 0 ip = "127.0.0.1" loginPort = 7171 gamePort = 7172 loginTries = 10 retryTimeout = 5 * 1000 loginTimeout = 60 * 1000 maxPlayers = 1000 motd = "Welcome to the Forgotten Server!" displayOnOrOffAtCharlist = false onePlayerOnlinePerAccount = true allowClones = false serverName = "Forgotten" loginMessage = "Welcome to the Forgotten Server!" statusTimeout = 5 * 60 * 1000 replaceKickOnLogin = true forceSlowConnectionsToDisconnect = false loginOnlyWithLoginServer = false premiumPlayerSkipWaitList = false -- Database -- NOTE: sqlFile is used only by sqlite database, and sqlKeepAlive by mysql database. -- To disable sqlKeepAlive such as mysqlReadTimeout use 0 value. -- encryptionType can be plain, md5, sha1, sha256, sha512 or vahash. sqlType = "sqlite" sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "" sqlDatabase = "theforgottenserver" sqlFile = "theforgottenserver.s3db" sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTimeout = 10 encryptionType = "sha1" -- Deathlist deathListEnabled = true deathListRequiredTime = 1 * 60 * 1000 deathAssistCount = 19 maxDeathRecords = 5 -- Guilds ingameGuildManagement = true levelToFormGuild = 8 premiumDaysToFormGuild = 0 guildNameMinLength = 4 guildNameMaxLength = 20 -- Highscores highscoreDisplayPlayers = 15 updateHighscoresAfterMinutes = 60 -- Houses buyableAndSellableHouses = true houseNeedPremium = true bedsRequirePremium = true levelToBuyHouse = 1 housesPerAccount = 0 houseRentAsPrice = false housePriceAsRent = false housePriceEachSquare = 1000 houseRentPeriod = "never" houseCleanOld = 0 guildHalls = false -- Item usage timeBetweenActions = 200 timeBetweenExActions = 1000 hotkeyAimbotEnabled = true -- Map -- NOTE: storeTrash costs more memory, but will perform alot faster cleaning. mapName = "forgotten.otbm.gz" mapAuthor = "Komic" randomizeTiles = true storeTrash = true cleanProtectedZones = true mailboxDisabledTowns = "" -- Process -- NOTE: defaultPriority works only on Windows and niceLevel on *nix -- niceLevel works only on *nix systems -- coresUsed are seperated by comma cores ids used by server process, -- default is -1, so it stays untouched (automaticaly assigned by OS). defaultPriority = "high" niceLevel = 5 coresUsed = "-1" -- Startup startupDatabaseOptimization = true updatePremiumStateAtStartup = true confirmOutdatedVersion = false -- Spells formulaLevel = 5.0 formulaMagic = 1.0 bufferMutedOnSpellFailure = false spellNameInsteadOfWords = false emoteSpells = false -- Outfits allowChangeOutfit = true allowChangeColors = true allowChangeAddons = true disableOutfitsForPrivilegedPlayers = false addonsOnlyPremium = true -- Miscellaneous -- NOTE: promptExceptionTracerErrorBox works only with precompiled support feature, -- called "exception tracer" (__EXCEPTION_TRACER__ flag). dataDirectory = "data/" logsDirectory = "data/logs/" bankSystem = true displaySkillLevelOnAdvance = false promptExceptionTracerErrorBox = true maximumDoorLevel = 500 maxMessageBuffer = 4 -- VIP list separateVipListPerCharacter = false vipListDefaultLimit = 20 vipListDefaultPremiumLimit = 100 -- Saving-related -- useHouseDataStorage usage may be found at README. saveGlobalStorage = true useHouseDataStorage = false storePlayerDirection = false -- Loot -- monsterLootMessage 0 to disable, 1 - only party, 2 - only player, 3 - party or player (like Tibia's) checkCorpseOwner = true monsterLootMessage = 3 monsterLootMessageType = 25 -- Ghost mode ghostModeInvisibleEffect = false ghostModeSpellEffects = true -- Limits idleWarningTime = 14 * 60 * 1000 idleKickTime = 15 * 60 * 1000 reportsExpirationAfterReads = 1 playerQueryDeepness = 2 tileLimit = 0 protectionTileLimit = 0 houseTileLimit = 0 -- Premium-related freePremium = false premiumForPromotion = true -- Blessings -- NOTE: blessingReduction* regards items/containers loss. -- eachBlessReduction is how much each bless reduces the experience/magic/skills loss. blessings = true blessingOnlyPremium = true blessingReductionBase = 30 blessingReductionDecrement = 5 eachBlessReduction = 8 -- Rates -- NOTE: experienceStages configuration is located in data/XML/stages.xml. -- rateExperienceFromPlayers 0 to disable. experienceStages = false rateExperience = 5.0 rateExperienceFromPlayers = 0 rateSkill = 3.0 rateMagic = 3.0 rateLoot = 2.0 rateSpawn = 1 -- Monster rates rateMonsterHealth = 1.0 rateMonsterMana = 1.0 rateMonsterAttack = 1.0 rateMonsterDefense = 1.0 -- Experience from players -- NOTE: min~Threshold* set to 0 will disable the minimum threshold: -- player will gain experience from every lower leveled player. -- max~Threshold* set to 0 will disable the maximum threshold: -- player will gain experience from every higher leveled player. minLevelThresholdForKilledPlayer = 0.9 maxLevelThresholdForKilledPlayer = 1.1 -- Stamina -- NOTE: Stamina is stored in miliseconds, so seconds are multiplied by 1000. -- rateStaminaHits multiplies every hit done a creature, which are later -- multiplied by player attack speed. -- rateStaminaGain is multiplying every second of logged out time, eg: -- 60 * 1000 / 3 = 20 seconds, what gives 1 stamina minute for 3 being logged off. -- rateStaminaThresholdGain is dividing in case the normal gain (that is -- multiplied by rateStaminaGain, btw.) passed above threshold, eg: -- 60 * 1000 / 3 = 20 / 4 = 5 seconds (3 * 4 = 12 minutes for 1 stamina minute). -- staminaRatingLimit* is in minutes. rateStaminaLoss = 1 rateStaminaGain = 3 rateStaminaThresholdGain = 12 staminaRatingLimitTop = 40 * 60 staminaRatingLimitBottom = 14 * 60 staminaLootLimit = 14 * 60 rateStaminaAboveNormal = 1.5 rateStaminaUnderNormal = 0.5 staminaThresholdOnlyPremium = true -- Party -- NOTE: experienceShareLevelDifference is float number. -- experienceShareLevelDifference is highestLevel * value experienceShareRadiusX = 30 experienceShareRadiusY = 30 experienceShareRadiusZ = 1 experienceShareLevelDifference = 2 / 3 extraPartyExperienceLimit = 20 extraPartyExperiencePercent = 5 experienceShareActivity = 2 * 60 * 1000 -- Global save -- NOTE: globalSaveHour means like 03:00, not that it will save every 3 hours, -- if you want such a system please check out data/globalevents/globalevents.xml. globalSaveEnabled = false globalSaveHour = 8 globalSaveMinute = 0 shutdownAtGlobalSave = true cleanMapAtGlobalSave = false -- Spawns deSpawnRange = 2 deSpawnRadius = 50 -- Summons maxPlayerSummons = 2 teleportAllSummons = false teleportPlayerSummons = false -- Status statusPort = 7171 ownerName = "" ownerEmail = "@otland.net" url = "http://otland.net/" location = "Europe" displayGamemastersWithOnlineCommand = false -- Logs -- NOTE: This kind of logging does not work in GUI version. -- For such, please compile the software with __GUI_LOGS__ flag. displayPlayersLogging = true prefixChannelLogs = "" runFile = "" outputLog = "" truncateLogsOnStartup = false -- Manager -- NOTE: managerPassword left blank disables manager. managerPort = 7171 managerLogs = true managerPassword = "" managerLocalhostOnly = true managerConnectionsLimit = 1 -- Admin -- NOTE: adminPassword left blank disables manager. -- Set to anything if you set adminRequireLogin to false. -- adminEncryption available options: rsa1024xtea; -- remember to set correct data! adminPort = 7171 adminLogs = true adminPassword = "" adminLocalhostOnly = true adminConnectionsLimit = 1 adminRequireLogin = true adminEncryption = "" adminEncryptionData = "" A Distro não foi feita por min então estarei deixando os créditos dela na distro. A Compilação foi feita por min e não deu nenhum erro. Ela está sem as dlls caso precise de alguma procure o nome dela no Google, baixe e coloque na pasta de seu OT, caso tenhas mais problemas deixe comentário. Se você Esteve com o mesmo problema e te ajudei Rep+ Link Para Download Do Executável: http://www.mediafire.com/download/7l6od8gdkob5572/Baiak-Map.exe Link Das Sources p/ Quem Queira Compilar: http://www.mediafire.com/download/auib21zd0i3o40o/sources_7.rar Scan Do Executável: https://www.virustotal.com/pt/url/ec493975bc373285e3fcf30709339c84bcac700bbf66334bdb9108b9628f38e9/analysis/1436509651/ Scan Das Sources: https://www.virustotal.com/pt/url/a3c207f0c2f1b0aea8cc411692f7a8ff40fed5c570bbc60ede6442fdcef11403/analysis/1436511749/ Obs. p/ Mods.: Meu antigo tropico foi poque não conseguia compilar as sources, mas como consegui, sem problemas resolvi compartilhar.
  8. Introdução Este script consiste em aumentar uma porcentagem dos ataques de acordo com o critical level. Exemplo: Suponhamos que o player tenha Critical Skill 100 e a porcentagem de ataque esteja configurado para aumentar 50%, o player terá 30% de chance de au 50% dos ataques. Instalação O conteúdo da lib serve para o Critical e Dodge System, se você já fez este procedimento no outro script simplesmente ignore e vá para o próximo passo. Em data/lib/core/core.lua adicione o seguinte conteúdo em qualquer parte: dofile('data/lib/core/dclib.lua')Ainda em data/lib/core/core crie um arquivo chamado dclib.lua com o seguinte conteúdo: Agora em data/actions/actions.xml adicione a seguinte tag: <action itemid="18415" script="other/critical.lua"/>Depois em data/actions/scripts/other crie um arquivo chamado critical.lua com o seguinte conteúdo: Pronto, já configuramos o item para atribuir o Critical Skill, vamos configurar a parte dos ataques. Vá em data/creaturescripts/creaturescripts.xml e adicione a seguinte tag: <event type="healthchange" name="CriticalSystem" script="criticalSystem.lua"/>Agora em data/creaturescripts/scripts crie um arquivo chamado criticalSystem.lua com o seguinte conteúdo: Ainda em data/creaturescripts/scripts abra o arquivo login.lua e Antes de: return trueAdicione: player:registerEvent("CriticalSystem") -- Critical System if player:getCriticalLevel() == -1 then player:setCriticalLevel(0) endO sistema está finalizado, agora vamos criar as talkactions para que os players acompanhem seu skill. Em data/talkactions/talkactions.xml adicione a tag: <talkaction words="!critical" script="critical.lua"/>E para finalizar, em data/talkactions/scripts crie um arquivo chamado critical.lua com o seguinte conteúdo: Bom é isso ai! Créditos:
  9. Olá a todos meus consagrados Eu gostaria de uma ajuda de voces, queria desenvolver um script que ganha um valor X ao pegar um bau de quest Exemplo - Ao abrir um báu da Annihilator o personagem recebesse 25 pontos de Glória (ou missao ou task)... Podem me ajudar por favor??
  10. Servidor pokemon dash 2.0 by ricardo + source + level system Versão 1.1: Versão 1.1_a: Versão 1.1_b: Versão 1.2_a: Versão 1.3: Versão 1.3_a: Versão 1.3_b: Versão 1.4: Versão 1.4_a: Versão 1.4_b: Versão 1.4_c: Versão 1.4_ Versão 1.4_e: Versão 1.4_f: Downloads Servidor Sources Client Scans Servidor Sources Client Prints Créditos Ricardo budamunky
  11. Boa noite, Tou testando meu ot deu um erro quando tentei usa headbutt com o chikorita ai apareceu o erro e o pokemon ele não se move mais. Eu tentei remover esse mais não consigo. [24/11/2015 19:30:47] [Error - Action Interface] [24/11/2015 19:30:47] In a timer event called from: [24/11/2015 19:30:47] data/actions/scripts/order.lua:onUse [24/11/2015 19:30:47] Description: [24/11/2015 19:30:47] data/lib/order.lua:248: attempt to get length of local 'array' (a nil value) [24/11/2015 19:30:48] stack traceback: [24/11/2015 19:30:48] data/lib/order.lua:248: in function <data/lib/order.lua:206> Meu data/actions/scripts/order.lua
  12. Dice Arena Esse evento foi postado para o Script de Terça, para ver os outros scripts de terça, clique aqui. Como o evento funciona? Um número configurado de jogadores deve permanecer em posições configuradas (Igual na annihilator). Quando todas as posições tiverem ocupadas, o primeiro jogador puxa a alavanca, levando todos para dentro da Arena. Dentro da arena, tem um dado que, quando usado, sorteia um monstro. Quando os jogadores matam o monstro, um loot cai no chão (Quanto menor o número do dado, mais forte será o monstro e melhor será o item que dropa). - Se já tiver gente dentro da arena, outro time não poderá entrar. - Uma vez dentro da arena, cada jogador só pode rodar o dado uma vez. - Cada jogador só pode entrar na arena uma vez por dia (tempo configurável). - Os monstros e loots são configuráveis. Vídeo do evento (obrigado ao por me ajudar a gravar) Instalação Lib Actions Creaturescripts Movements Globalevents Configuração A configuração é feita inteiramente na lib, nesta tabela: dice_cfg = { positions_ = {{x = 164, y = 17, z = 7}, {x = 164, y = 18, z = 7}}, arena_pos = {x = 501, y = 141, z = 7}, wait_ = 60*60*24, max_time = 1800, numbers = { [1] = {"Orshabaal", "Morgaroth", "Ferumbras"}, [2] = {"Demodras", "Juggernaut"}, [3] = {"Demon", "Behemoth"}, [4] = {"Dragon Lord", "Hydra"}, [5] = {"Dragon", "Cyclops"}, [6] = {"Rotworm", "Rat"} }, noob_item = {2158, 10}, pro_item = {2160, 5}, arena_frompos = {x = 491, y = 125, z = 7}, arena_topos = {x = 512, y = 144, z = 7} } Em positions_, coloque as posições que os jogadores devem ficar para poder puxar a alavanca (Pode por quantas quiser). Em arena_pos, coloque a posição da arena (Pra onde os jogadores vão quando puxarem a alavanca). Em wait_, coloque o tempo que o jogador deve esperar para entrar na arena novamente (em segundos). 60*60*24 = 1 dia, aconselho deixar assim. Em max_time, coloque o tempo máximo que os jogadores podem permanecer na arena (em segundos (após esse tempo, eles serão teleportados para o templo)). Em numbers, coloque o nome dos monstros que podem vir dependendo do número sorteado pelo dado (quanto menor o número, mais forte devem ser os monstros). Em noob_item, coloque o {id, quantidade} do item que dropa dos monstros mais fracos/médios Em pro_item, coloque o {id, quantidade} do item que pode dropar dos monstros mais fortes/médios Em arena_frompos, coloque a posição do canto superior esquerdo da arena. Em arena_topos, coloque a posição do canto inferior direito da arena. Coloque NO-LOGOUT TOOL na arena inteira. Siga as imagens para facilitar a configuração: Se alguém se dispuser a fazer um mapa pro evento para eu disponibilizar para download, eu agradeceria. Espero que gostem do evento. Download do evento: Dice Arena Event por Killua.rar
  13. Informações: Repassei esse sistema: http://www.xtibia.com/forum/topic/192920-battlefield-event/page-1 para a nova versão Versão: TFS 1.1 ou SUPERIOR(NÃO FUNCIONA NO TFS 1.0) OBS: Favor ter noções básicas de como instalar o sistema no seu server. Instalando o Sistema: data\creaturescripts\scripts battlefield.lua function onLogin(player) player:registerEvent("battledeath") if Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) == -1 then Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) end if player:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or player:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then player:setStorageValue(_Lib_Battle_Info.TeamOne.storage, -1) player:setStorageValue(_Lib_Battle_Info.TeamTwo.storage, -1) player:teleportTo(player:getTown():getTemplePosition()) end return true end function onPrepareDeath(creature, lastHitKiller, mostDamageKiller) if creature:isPlayer() and creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or creature:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then local MyTeam = creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and _Lib_Battle_Info.TeamOne.storage or _Lib_Battle_Info.TeamTwo.storage local EnemyTeam = creature:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and _Lib_Battle_Info.TeamTwo.storage or _Lib_Battle_Info.TeamOne.storage Game.setStorageValue(MyTeam, (Game.getStorageValue(MyTeam)-1)) creature:sendTextMessage(MESSAGE_INFO_DESCR, "[Battle Field] You Are Dead!") creature:setStorageValue(MyTeam, -1) creature:removeCondition(CONDITION_OUTFIT) if Game.getStorageValue(MyTeam) == 0 then getWinnersBattle(EnemyTeam) else doBroadCastBattle(23,"[BattleField Information] ".._Lib_Battle_Info.TeamOne.name.." "..Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage).." VS "..Game.getStorageValue(_Lib_Battle_Info.TeamTwo.storage).." " .._Lib_Battle_Info.TeamTwo.name) end end return true end creaturescript.xml <event type="login" name="battleflogin" script="battlefield.lua"/> <event type="preparedeath" name="battledeath" script="battlefield.lua"/> -------------------------------------------//------------------------------------------------- data\events\scripts abra o arquivo creature.lua e troque: function Creature:onTargetCombat(target) return true end por function Creature:onTargetCombat(target) if not self then return true end if self:isPlayer() and target:isPlayer() then if self:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamOne.storage) >= 1 or self:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 and target:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) >= 1 then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end return true end events.xml Troque: <event class="Creature" method="onTargetCombat" enabled="0" /> por <event class="Creature" method="onTargetCombat" enabled="1" /> -------------------------------------------//------------------------------------------------- data\globalevents\scripts battlefieldstart.lua function onStartup() Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) return true end battlefieldthink.lua _Lib_Battle_Days = { ["Tuesday"] = { ["16:00"] = {players = 30}, ["15:32"] = {players = 2} }, ["Wednesday"] = { ["23:06"] = {players = 2} }, ["Thursday"] = { ["11:26"] = {players = 4}, ["20:30"] = {players = 10} } } function onThink(interval) if _Lib_Battle_Days[os.date("%A")] then hours = tostring(os.date("%X")):sub(1, 5) tb = _Lib_Battle_Days[os.date("%A")][hours] if tb and (tb.players % 2 == 0) then local tp = Game.createItem(1387, 1, _Lib_Battle_Info.tpPos) tp:setActionId(45000) CheckEvent(_Lib_Battle_Info.limit_Time) Game.setStorageValue(_Lib_Battle_Info.storage_count, tb.players) broadcastMessage("The event BattleField was opened and We are waiting "..tb.players.." Players! Team divided into "..((tb.players)/2).." VS "..((tb.players)/2)) end end return true end globalevents.xml <globalevent type="startup" name="NoBugBattle" script="battlefieldstart.lua"/> <globalevent interval="60000" name="BattleField" script="battlefieldthink.lua"/> -------------------------------------------//------------------------------------------------- data\lib\core battlefield.lua _Lib_Battle_Info = { Reward = { exp = {true, 100}, items = {true, 2160, 10}, premium_days = {false, 1} }, TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, storage_count = 180400, tpPos = {x=92, y=116, z=7}, limit_Time = 2 -- em minutos } function resetBattle() Game.setStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) Game.setStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) end function doBroadCastBattle(type, msg) for _, cid in pairs(Game.getPlayers()) do if Player(cid):getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 1 or Player(cid):getStorageValue(_Lib_Battle_Info.TeamTwo.storage) == 1 then Player(cid):sendTextMessage(type, msg) end end end function getWinnersBattle(storage) local str, c = "" , 0 for _, cid in pairs(Game.getPlayers()) do local player = Player(cid) if player:getStorageValue(storage) >= 1 then if _Lib_Battle_Info.Reward.exp[1] == true then player:addExperience(_Lib_Battle_Info.Reward.exp[2]) end if _Lib_Battle_Info.Reward.items[1] == true then player:addItem(_Lib_Battle_Info.Reward.items[2], _Lib_Battle_Info.Reward.items[3]) end if _Lib_Battle_Info.Reward.premium_days[1] == true then player:addPremiumDays(_Lib_Battle_Info.Reward.premium_days[2]) end player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(storage, -1) player:removeCondition(CONDITION_OUTFIT) c = c+1 end end str = str .. ""..c.." Player"..(c > 1 and "s" or "").." from team "..(Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 0 and _Lib_Battle_Info.TeamTwo.name or _Lib_Battle_Info.TeamOne.name).." won the event battlefield!" resetBattle() OpenWallBattle() return broadcastMessage(str) end function OpenWallBattle() local B = { {1543,{x=96, y=124, z=7, stackpos = 1}}, {1543,{x=95, y=124, z=7, stackpos = 1}} } for i = 1, #B do if getTileItemById(B[i][2], B[i][1]).uid == 0 then doCreateItem(B[i][1], 1, B[i][2]) else doRemoveItem(getThingfromPos(B[i][2]).uid,1) end end end function removeBattleTp() local t = getTileItemById(_Lib_Battle_Info.tpPos, 1387).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(_Lib_Battle_Info.tpPos, CONST_ME_POFF) end function CheckEvent(delay) if delay > 0 and Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then broadcastMessage("[BattleField Event] We are waiting "..Game.getStorageValue(_Lib_Battle_Info.storage_count).." players to Battlefield starts") elseif delay == 0 and Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then for _, cid in pairs(Game.getPlayers()) do local player = Player(cid) if player:getStorageValue(_Lib_Battle_Info.TeamOne.storage) == 1 or player:getStorageValue(_Lib_Battle_Info.TeamTwo.storage) == 1 then player:teleportTo(player:getTown():getTemplePosition()) player:setStorageValue(_Lib_Battle_Info.TeamOne.storage, -1) player:setStorageValue(_Lib_Battle_Info.TeamTwo.storage, -1) player:removeCondition(CONDITION_OUTFIT) end end broadcastMessage("The event cannot be started because not had enough players.") Game.setStorageValue(_Lib_Battle_Info.storage_count, 0) resetBattle() removeBattleTp() end addEvent(CheckEvent, 60000, delay-1) end Na mesma pasta procure por data\lib\core.lua e adc essa linha: dofile('data/lib/core/battlefield.lua') -------------------------------------------//------------------------------------------------- data\movements\scripts battlefield.lua local conditionRed = Condition(CONDITION_OUTFIT) conditionRed:setTicks(120 * 60 * 1000) conditionRed:setOutfit({lookType = 143, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}) local conditionBlack = Condition(CONDITION_OUTFIT) conditionBlack:setTicks(120 * 60 * 1000) conditionBlack:setOutfit({lookType = 134, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}) function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if player == nil then return false end if player:getGroup():getId() >= 3 then return player:teleportTo(_Lib_Battle_Info.TeamOne.pos) end if Game.getStorageValue(_Lib_Battle_Info.storage_count) > 0 then local getMyTeam = Game.getStorageValue(_Lib_Battle_Info.TeamOne.storage) < Game.getStorageValue(_Lib_Battle_Info.TeamTwo.storage) and {_Lib_Battle_Info.TeamOne.storage,_Lib_Battle_Info.TeamOne.pos,_Lib_Battle_Info.TeamOne.name,conditionBlack} or {_Lib_Battle_Info.TeamTwo.storage,_Lib_Battle_Info.TeamTwo.pos, _Lib_Battle_Info.TeamTwo.name, conditionRed} player:addCondition(getMyTeam[4]) player:setStorageValue(getMyTeam[1], 1) Game.setStorageValue(getMyTeam[1], Game.getStorageValue(getMyTeam[1])+1) player:teleportTo(getMyTeam[2]) player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. getMyTeam[3] .. "!") Game.setStorageValue(_Lib_Battle_Info.storage_count, Game.getStorageValue(_Lib_Battle_Info.storage_count)-1) end if Game.getStorageValue(_Lib_Battle_Info.storage_count) == 0 then removeBattleTp() broadcastMessage("Battlefield will start in 2 minutes, please create your strategy!") addEvent(broadcastMessage, 2*60*1000-500, "BattleField will begin now!") addEvent(OpenWallBattle, 2*60*1000) end return true end movements.xml <movevent event="StepIn" actionid="45000" script="battlefield.lua"/> -------------------------------------------//------------------------------------------------- Configurações do TIME: em data\lib\core\battlefield.lua tem essas linhas: _Lib_Battle_Info = { Reward = { exp = {true, 100}, items = {true, 2160, 10}, premium_days = {false, 1} }, TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, storage_count = 180400, tpPos = {x=92, y=116, z=7}, limit_Time = 10 -- em minutos } exp = {true,100} -- se vai receber exp ao ganhar evento? true ou false e quantidade items = {true, 2160, 10} -- se vai receber items ao ganhar o evento, true ou false e id, quantidade do item premium_days = {false, 1} -- se vai receber premium days ao ganhar o evento, true ou false e quantidade TeamOne = {name = "Black Assassins", storage = 140120, pos = {x=95,y=113,z=7}}, TeamTwo = {name = "Red Barbarians",storage = 140121,pos = {x=100,y=116,z=7}}, Name = nome do time Storage = Não mexa Pos = Onde cada time vai nascer storage_count = 180400 -- NÃO MEXAR tpPos = {x=92, y=116, z=7} -- Onde o teleporte irá aparecer ao iniciar o evento limit_Time = 10 -- É o tempo limite para os jogadores entrarem no teleport.(em minutos) Configurar Datas dos Eventos: Em data\globalevents\scripts\battlefieldthink.lua vai ter essa tabela: _Lib_Battle_Days = { ["Tuesday"] = { ["16:00"] = {players = 30}, ["15:32"] = {players = 2} }, ["Wednesday"] = { ["23:06"] = {players = 2} }, ["Thursday"] = { ["11:26"] = {players = 4}, ["20:30"] = {players = 10} } } ["DIA DA SEMANA"] = { ["HORARIO"] = {players = QUANTOS JOGADORES IRÃO PARTICIPAR} Regra: Sempre coloque números pares para os jogadores, do contrário o evento não irá iniciar.
  14. Bem bem bem bem.. venho trazer aqui um sistema/script seja la como quiser chamar que me chamou bema a tenção por ser bem interessante.. Feito pelo Karain (qual pedi autorização para repostar).. inicialmente havia sido feito para 0.4, inspirado num mini game para mc mas com a tendência de mudança e pedidos da comunidade o mesmo foi atualizado.. Não me peçam 0.4 pois ele não disponibilizou.. e bem.. atualizem-se né... eu não suporto 0.4 (para quem não entende, não suporto de não apóio) .~> Sobre o sistema - Como funciona <~. Primeiramente, se o jogador decidir se juntar a lista de espera do evento ele irá utilizar o comando !join hunger games e pronto.. estará na lista de espera. Depois de um tempo e quantidade de players para o evento (ambos configuráveis), assim que o evento começar eles serão teleportados para um local; terão todos seus items removidos de forma segura para um depot (configurável) Em cada mapa haverá chests que tem uma chance (random) de conter alguns items, o player precisa encontrar e coletar com intenção de sobreviver e ser o último player vivo. Premio configurável .~> Mapa<~. o mapa não foi feito pelo Karain, caso você seja dono do mapa e tenha como provar, por favor informe para que seu nome seja colocado nos créditos Download Do Mapa Aqui P.s.: não sei colocar scan nem como faz, se for preciso scan alguém faz por favor que eu edito o post Bug conhecido (mas acho que para server que não fique reiniciando isso não venha a ser um problema..) não testei essa parte para ver o que realmente ocorre.. // [edit]Código para correção do bug (não oficial) após o hunger.lua do global events[/edit] - alguns items podem não retornar ao player após o evento, mesmo que tenha sido carregado no mapa e nos scripts, no entanto, irá funcionar se o player tiver visitado o depot ao menos uma vez, em que o server ficou online Changelog 1.0.0 23 de julho 2015 : Liberado 1.0.1 29 de julho 2015 : Arrumado a atualziaçãod e items no chest após um player o abrir. 1.0.2 30 de julho 2015 : -Corrigido um erro fatal que acontecia quando um player morria ou dava logout enquanto no evento. -Adicionado o comando !ragequit que faz o jogador se matar enquanto no evento. 1.0.3 8 de agosto 2015: Corrigido bug que fazia o evento death ser executado em qualquer situação pvp, arquivos alterados: - creaturescripts/scripts/hunger.lua 1.0.4 9 de agosto 2015: Corrigido um debug no client por conta de broadcasts, obrigado ao silveralol, arquivos alterados: -globalevents/scripts/hunger.lua -creaturescripts/scripts/hunger.lua -creaturescripts/scripts/eventlogout.lua 1.0.5 30 de agosto 2015 (não oficial): Adicionado uma alteração para o problema de recuperação de items -globalevents/scripts/hunger.lua .~> Códigos <~. Em globalevents/globalevents.xml <globalevent type="startup" name="hunger" script="hunger.lua"/> Crie um arquivo chamado hunger.lua em globalevents/scripts e cole isso Em 30/08 o usuário Mokerhamer apareceu com uma solução para o problema que fazia com que alguns players não conseguissem recuperar os items após o evento, adicionando uma função clone, então funciona abrindo ou não o dp antes do evento.. estou sem pc novamente então não pude testar e o Karain até o momento não se pronunciou, de qualquer maneira parece promissor então vou colocar aparte. alterem por conta e risco. Altere a função player:getbackitems do código acima por este Em creaturescripts/creaturescripts.xml <event type="logout" name="eventlogout" script="eventlogout.lua"/> <event type="death" name="hunger" script="hunger.lua"/> Em creaturescripts/scripts/login.lua antes do return true player:registerEvent("hunger") Em creaturescripts/scripts/eventlogout.lua Em creaturescripts/scripts/hunger.lua Em talkactions/talkactions.xml <talkaction words="!join" separator=" " script="join.lua"/> <talkaction words="!ragequit" separator=" " script="leave.lua"/> Em talkactions/scripts/join.lua Em talkactions/scripts/leave.lua Em actions/actions.xml <!-- Hunger Games Chests --> <action fromaid="60101" toaid="60499" script="games/hunger.lua"/> <action fromaid="61101" toaid="61499" script="games/hunger.lua"/> <action fromaid="62101" toaid="62499" script="games/hunger.lua"/> Em actions/scripts/hunger.lua Curtiu da um rep ae né.. não arranca pedaço da mão e incentiva a trazer mais.. se você for sovina e n gostar de dar rep, ao menos um obrigado ja ta bom.. pelo menos mostra que esta valendo a pena ficar procurando sistemas maneiros para trazer, pedir autorização e traduzir as informações... [edit] para evitar problemas façam testes antes, fui informado por pm que as vezes mesmo indo ao dp antes alguns items ainda não retornam.. eu fiz um teste básico no sistema e não tive esse problema.. mas é melhor prevenir, por isso antes de colocar o sistema on no seu server façam stress test .Certamente o Karain esta tentando resolver mas mesmo assim eu fiz um post no seu tópico perguntando sobre informações mais detalhadas sobre e se esta sendo feito algo [edit 08/08] Alteração no script - vide Changelog [edit 09/08] Alteração no script - vide Changelog [edit 30/08] Alteração para o script - vide Changelog
  15. Bem procurei aqui na comunidade um VIP System mais informativo e nada, além de ter tido problema com os que estão aqui e acabei achando em outro lugar um que funcionou perfeitamente para mim. Usando tfs 1.2 disponibilizado por Bruno Minervino Só estou trazendo o conteúdo e por não conhecer bem não posso dar suporte mas do jeito que está é só 'instalar' e vai funcionar. Creditos.: Summ por fazer e a mim por uma ou duas alterações que estavam fazendo as portas funcionarem de forma estranha.. Sistema Vip Talkaction !checkvip para todos os players Talkaction /vip para membros da staff - /vip adddays, NomedoPlayer, 5 --> Adiciona 5 dias vip para o Player. - /vip removedays, NomedoPlayer, 5 --> Remove 5 dias vip do Player. - /vip remove, PlayerName --> Remove todos os dias vip do Player. - /vip check, NomedoPlayer --> Checa quantos dias vip o Player tem. - /vip addinfinite, NomedoPlayer --> Adiciona tempo vip infinito para o Player. Tiles VIP Portas VIP / Actions Items que adicionam dias VIP ItemId 10135 adiciona 10 dias vip. ItemId 10134 adiciona 30 dias vip. ItemId 10133 adiciona 90 dias vip. Imagens Comando !checkvip mas sem ter vip Comando /vip adddays, dracoknight, 5 Comando !checkvip após adicionar 5 dias Comando /vip addinfinite, dracoknight Comando !checkvip após usar infinite Comando /vip remove, dracoknight
  16. Iaewww! Galerinha Ekz!! Eu estava com preguiça de fazer algo grande, então resolvi criar esse code, eu olhei nos outros e vi que eram muito mal feitos, então recriei pra postar pra vocês. Como funciona? Você diz !afk on e começa a sair mensagens em cima do player dizendo "Off-line", "Afk!", "Ausente!", etc (configurável) e fica imóvel (para players não moverem o player) Para sair do modo ausente, ande com o personagem ou diga "!afk off" NEW: Agora player não pode usar comando em área pvp e nem se tiver infight! Player quando está com evento ativo não pode ser atacado! Agora player não pode ser empurrado! Code testado e funcionando 100% Como instalar? Vá em creaturescripts/scripts/login.lua abra ele e coloque isso: registerCreatureEvent(cid, "AwayFromKeyboard1") registerCreatureEvent(cid, "AwayFromKeyboard2") setPlayerStorageValue(cid, 3123, -1) Agora, em creaturescripts/scripts/ crie um arquivo chamado AwayFromKeyboard.lua e adicione isso: function onPush(cid, target) if cid ~= target then if getPlayerStorageValue(target, 3123) ~= -1 then doPlayerSendCancel(cid, "Você não pode empurrar esse player!") return false end end return true end function onCombat(cid, target) if isPlayer(target) or isPlayer(cid) then if getPlayerStorageValue(target, 3123) ~= -1 or getPlayerStorageValue(cid, 3123) ~= -1 then return false end end return true end Agora em creaturescripts.xml adicione isso: <event type="push" name="AwayFromKeyboard1" event="script" value="AwayFromKeyboard.lua"/> <event type="combat" name="AwayFromKeyboard2" event="script" value="AwayFromKeyboard.lua"/> Vá em talkactions/scripts e crie um arquivo chamado AwayFromKeyboard.lua e adicione isso: local msgss = {"AFK!", "OFF!", "Off-Line!", "Ausente!"} local msgsss = {"On!", "Voltei!", "Online!", "On-Line!"} function sendAfkMsg(cid, oldpos) if isCreature(cid) then oldpos1 = getCreaturePosition(cid) if getPlayerStorageValue(cid, 3123) >= 1 and doComparePositions(oldpos, oldpos1) then doSendAnimatedText(getCreaturePosition(cid), msgss[math.random(1, #msgss)], math.random(0, 256)) addEvent(sendAfkMsg, 1500, cid, oldpos1) else setPlayerStorageValue(cid, 3123, -1) doSendAnimatedText(getCreaturePosition(cid), msgsss[math.random(1, #msgss)], math.random(0, 256)) end end end function onSay(cid, words, param) if param == "on" then if getPlayerStorageValue(cid, 3123) >= 1 then doPlayerSendTextMessage(cid, 27, "Você já está no modo afk!") else if getCreatureCondition(cid, CONDITION_INFIGHT) or getTileInfo(getThingPos(cid)).hardcore then doPlayerSendTextMessage(cid, 27, "Você não pode usar esse comando enquanto estiver em fight ou em área PVP!") return true end setPlayerStorageValue(cid, 3123, 1) doPlayerSendTextMessage(cid, 27, "Você acaba de entrar no modo afk! Para sair diga ".. words .." off") sendAfkMsg(cid, getCreaturePosition(cid)) end elseif param == "off" then if getPlayerStorageValue(cid, 3123) >= 1 then setPlayerStorageValue(cid, 3123, -1) doPlayerSendTextMessage(cid, 27, "Você acaba de sair do modo afk!") doSendAnimatedText(getCreaturePosition(cid), msgsss[math.random(1, #msgss)], math.random(0, 256)) else doPlayerSendTextMessage(cid, 27, "Você não está no modo afk para usar este comando!") end else doPlayerSendTextMessage(cid, 27, "Você precisa declarar algum parâmetro (on/off)!") end return true end Pronto, para finalizar vá em talkactions.xml e adicione isso: <talkaction hide="yes" words="!afk" event="script" value="AwayFromKeyboard.lua"/> Espero que gostem do code Créditos: BielLucena1291 (Drazyn1291 - Eu) - Por fazer o script inteiro! Os seguintes foram por dá ideias de melhorias! @Poccnn @samlecter @Danihcv
  17. Opa, galerinha do XTibia, resolvi trazer a solução de uns problemas que vejo que ocorrem com uma certa frequência: Os erros da data base. Neste tutorial vou ensinar a resolver os erros do tipo No such table, Insert into, No such column, ... has no column named... etc. 1°) NO SUCH TABLE Bom, para o erro No such table, basta vc visualizar qual table está faltando. Para isso basta ler o erro na distro: No caso da imagem, está faltando a table: player_statements Para resolver este e qualquer outro problema deste tipo, caso sua data base seja sqlite, basta abrir sua data base pelo Sqlite Studio(download: http://sqlitestudio.pl/?act=download) e clicar em Open SQL query editor: Mas caso sua data base seja Mysql abra pelo phpMyadmin, ou por outro editor de sua preferencia. 1.1°) EXECUTANDO OS COMANDOS PARA RESOLVER O PROBLEMA Bom, dependendo da table que estiver faltando, vc irá colocar seu respectivo comando, segue abaixo TODOS os comandos básicos necessários para que sua data base fique Ok! : (VC VAI PEGAR O COMANDO REFERENTE À TABLE QUE VC QUER!!!) account_viplist accounts bans environment_killers global_storage guild_invites guild_kills guild_ranks guild_wars guilds house_auctions house_data house_lists houses killers market_history market_offers player_deaths player_depotitems player_inboxitems player_items player_killers player_namelocks player_skills player_spells player_statements player_storage player_viplist players server_config server_motd server_record server_reports tile_items tile_store tiles announcements pagsegurotransacoes player_advances reports thanks z_bug_logs z_featured_article z_forum z_helpdesk z_monsters z_network_box z_news_tickers z_ots_comunication z_polls z_polls_answers z_poll_votes z_shop_history_item z_shop_history_pacc z_shop_offer z_spells z_news_big 2°) No such column / "NOME DA TABLE" has no column named "NOME DA COLUMN QUE FALTA" / Insert into Bom, para resolver esse problema vc deve identificar em qual TABLE está essa coluna que falta. Para isso, basta ler o erro como na imagem: No caso da imagem, está faltando a column WORLD_ID dentro da table MARKET_OFFERS. Para resolver, vc deve executar excluir a sua table MARKET_OFFERS existante em sua data base, e em seguida, executar o domando da da market_offers, encontrado acima, logicamente isso só se aplica ao caso da imagem, depende do seu caso, vc deve excutar o comando da table que estiver sendo referida no erro. Mas antes de executá-lo vc deve excluir a sua table EXISTENTE, para então executar o comando. ESTA FORMA DE RESOLUÇÃO SE APLICA AOS TRÊS CASOS: NO SUCH COLUMN, ...HAS NO COLUMN NAMED... e INSERT INTO. Bom galera, é isso. SE ENCONTRAREM, OU SE DEPARAREM COM ALGUM ERRO, BASTA ME PEDIR AJUDA QUE EU DAREI TOTAL SUPORTE PARA VOCÊS! SE ESTIVER FALTANDO MAIS ALGUMA TABLE QUE EU NÃO COLOQUEI AQUI, PF ME INFORMEM E EU ATUALIZAREI O TÓPICO!!! Lembrem-se, se eu te ajudei, por favor, deem REP++ pois foi meio trabalhoso fazer este tutorial todo... ^^ ESTOU A DISPOSIÇÃO DE TODOS! Espero ter ajudado!! E isso é tudo, pessoal! ^^ Créditos Eu (@Danihcv) Abraços.
  18. galera tenho um nto e queria tirar o drop item de quando um player morre por favor me ajudeem !!!
  19. Olá terráqueos o/ Hoje vim trazer uma edição minha do Centurion,coloquei online chegou a 40 pessoas online.e é minha primeira edição de PokeTibia(primeira para postar) Informações : Minhas edições : Prints : Downloads : Servidor : https://www.mediafire.com/?bsv68d54unf1xia Cliente : http://www.4shared.com/rar/8U22GWdo/Centurion_V8_OT_Client_.html? ​Creditos : Lordbaxx - pelo centurion v8 Jobby Magalhães - porque o Lordbaxx pediu que colocasse creditos a ele. Cacaiu - por criar o centurion oficial Notle2012 - Pelo pokes falando que eu usei Valeu ae gente,abraço. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Centurion v9.1 editado por LuizHenriqueSmania Editei algumas coisas,segue no spoiler a seguir : Prints : Downloads : Servidor : https://www.mediafire.com/?k93dzmndpzqhaye desculpe por não colocar os items.otb e items.xml Cliente(pode usar o OTCLIENTE,da versão 9.0) : http://www.mediafire.com/download/l5435d95q4lf9mc/CenturionV6+Cliente.rar Lembrando,vou continuar atualizando,talvez até o centurion v10,seilá,vou ir atualizando,podem ir seguindo o tópico,vai atualizar 1 vez por dia,1 vez a cada 2 dias,vou colocando coisas novas,editando o mapa,retirando bugs,balanceando,até ficar top Abraço
  20. Créditos à ViitinG. Objetivo É um comando que o player poderá usar para reportar bugs direto para o ADM do servidor com um intervalo de 60 minutos (configurável). O bug será enviado para um log (bloco de notas) que será criado na pasta do servidor! Prévia Tutorial Em data/talkactions/scripts crie o arquivo reportbugs.lua e adicione: function onSay(cid, words, param, channel) if os.time() > getPlayerStorageValue(cid, 14001) then setPlayerStorageValue(cid, 14001, os.time()+3600) local file = io.open('log.txt','a') file:write(getCreatureName(cid)..": "..tostring(param).."\n") file:close() doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Mensagem enviada com sucesso.') else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Você não pode mandar outra mensagem ainda. Falta(m) '..(math.ceil((getPlayerStorageValue(cid, 14001)-os.time())/60)+1)..' minuto(s) para você poder mandar uma nova mensagem.') end return TRUE end Em data/talkactions/ abra o arquivo talkactions.xml e adicione a tag: <talkaction words="/reportbug" event="script" value="reportbugs.lua"/> Como funciona doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Mensagem enviada com sucesso.') doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Você não pode mandar outra mensagem ainda. Falta(m) '..(math.ceil((getPlayerStorageValue(cid, 14001)-os.time())/60)+1)..' minuto(s) para você poder mandar uma nova mensagem.') <talkaction words="/reportbug" event="script" value="reportbugs.lua"/> Mensagem que será enviada para o player quando enviar o relatório para o ADM. Tempo que o player terá que esperar para usar o comando novamente. Mensagem que vai aparecer quando o player tentar usar o comando sem esperar o tempo para usar novamente. Comando que será usado. /reportbug
  21. Queria pedir ajuda de algum programar criar pra min um script de uma box que tem tantos porcento de chance de aparecer tal o item x e outro tanto para aparecer o item y
  22. Eae Galerinha do Xtibia, estou aqui para trazer um "Sistema" que não achei no fórum e fuçando aqui acabei encontrando, O sistema serve para deixar as skills e o Goback "Vá Charmander", em laranja seguindo a imagem: http://imgur.com/a/MoN1I http://imgur.com/a/KCN7j Então vamos ao assunto... Primeiramente vá em "Data/lib", abra o arquivo some functions.lua e procure por: doCreatureSay(cid, mbk, TALKTYPE_SAY) e mude para: doCreatureSay(cid, mbk, TALKTYPE_ORANGE_1) Até aqui editamos só para ficar em laranja o Soltar e Voltar o Pokemon... Para mudar as skills vá em "Data/Talkactions" abra o arquivo move1.lua e procure por: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_SAY) e mude para para: doCreatureSay(cid, ""..getPokeName(mypoke)..", "..msgs[math.random(#msgs)]..""..move.name.."!", TALKTYPE_ORANGE_1) e para mudar o soltar o pokemon para ficar em laranja vá em "Actions" abra o arquivo Goback.lua e procure por "doCreatureSay(cid, mgo, TALKTYPE_SAY)",e troque por "doCreatureSay(cid, mgo, TALKTYPE_ORANGE_1) é isso então qualquer erro deixe ai que eu tento ajudar :3, lembrando que não sou "Scripter", eu só entendo um pouco. OBS: Testado apenas em PDA, e desculpe pela mal organização não sei colocar Spoiler, deixa ai nos comentários como faz que eu edito o tópico. OBS: Meu servidor https://www.facebook.com/pokemonlegendaryy/ /\/\/\/\/\//\/\/\/\//\/\/\/\/\/\ O server está em manutenção mais fique ligado para quando voltar. Se Ajudei REP+.
  23. Passagem Secreta Gif de como funciona Essa semana tava ajudando um cara chamado Farathor nesse topico, e foi uma ideia boa então decidi refazer e trazer pra cá Ela funciona da seguinte maneira, vai ter 3 coal basin (Você pode configurar e coloca quantas você quiser), ai você vai ter que joga 3 itens diferente em cada coal basin (no meu caso eu usei os 3 fields) a estatua vai se move criando um teleport ou não (configurado), depois que você entrar no teleport ele ira fechar ou não (configurado). Eu usei como exemplo os 3 field mas você pode alterar para algum item ou até adicionar ou remover mais locais onde tera que joga o item. Testei na TFS 0.4 rev 3887 Então vamos instalar: Crie um arquivo chamado Secret_Passage.lua na pasta movement/script e coloque isso dentro: Agora adicione essa duas linha em movement.xml: <movevent type="AddItem" tileitem="1" actionid="13501" event="script" value="Secret_Passage.lua.lua"/> <movevent type="StepIn" actionid="5555" event="script" value="Secret_Passage.lua.lua"/> Agora so basta você adicionar o actionid 13501 nos coal basin ou nos piso mesmo. Se você alterar o actionid "5555" você terar que alterar no Secret_Passage.lua também. Para adicionar mais locais so basta você adicionar outra linha com o id do item e o local onde terá que ruma o item e não esqueã de sempre coloca 1 a mais no inicio, exemplo: se tiver 3 ai você cria o outro um a mais ficando 4. [4] = {necessary_Item = 2160, tile = {x = 1062, y = 1027, z = 7, stackpos= 1}}, Isso ai, xau
  24. Bom Dia, Boa Tarde, Boa Noite, e ae galera do Xtibia Tudo Bem Com Vocês? venho aqui trazendo uma script da santa claus, vejo muitas pessoas querendo essa script, então pensei em compartilhar com vocês, vamos lá então! vai na sua base, abre o Actions e cria um arquivo .lua ficando santaclaus.lua dentro dele add isso. vai no seu actions.XML e add essa tag! Te Ajudou? já deixa aquela REP pra ajudar, Tmj Galera <3
  25. Crie um arquivo chamado doors.lua na pasta data\movements\scripts e adicione o seguinte conteúdo: -- CONFIGURAÇÕES --local doors = {18312, 18311, 18310, 18309}local door_pos = {x=1051,y=1032,z=7}-- FIM CONFIGURAÇÕES --local top_left = {x = door_pos.x - 3, y = door_pos.y - 2, z = door_pos.z}local bottom_right = {x = door_pos.x, y = door_pos.y + 2, z = door_pos.z}local function areThereCreaturesInArea(top_left, bottom_right) for x = top_left.x, bottom_right.x do for y = top_left.y, bottom_right.y do if isCreature(getTopCreature({x=x, y=y, z=top_left.z}).uid) then return true end end end return falseendlocal function open(pos, i)if i < #doors then current = doors[i] next_ = doors[i+1] local door = getTileItemById(pos, current) if door.uid > 0 then doTransformItem(door.uid, next_) addEvent(open, 200, pos, i+1) endend endlocal function close_(pos, i)if areThereCreaturesInArea(top_left, bottom_right) then return trueendif i <= #doors and i > 1 then current = doors[i] next_ = doors[i-1] local door = getTileItemById(pos, current) if door.uid > 0 then doTransformItem(door.uid, next_) addEvent(close_, 200, pos, i-1) endend endfunction onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) for i = 1, #doors do local door = getTileItemById(door_pos, doors[i]) if door.uid > 0 then open(door_pos, i) break end end return trueendfunction onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) close_(door_pos, #doors) return trueend No arquivo movements/movements.xml adicione as seguintes linhas <movevent type="StepIn" actionid="12000" event="script" value="doors.lua"/> <movevent type="StepOut" actionid="12000" event="script" value="doors.lua"/> No map editor adicione o action id 12000 aos tiles em volta da porta marcados com X Agora você deve configurar as coordenadas da porta no script de acordo com o seu mapa: local door_pos = {x=1051,y=1032,z=7} (A pos onde fiz o X) E por último configurar os IDS das portas de acordo com o seu servidor: local doors = {18312, 18311, 18310, 18309} Você deve colocar os IDS na ordem da "mais fechada" até a "mais aberta". No meu exemplo a porta totalmente fechada tem id 18312 e a totalmente aberta 18309, mas no seu servidor provavelmente os ids são diferentes. Espero que seja útil Lembrando que você tem que repetir todos os passos para cada porta assim no seu mapa, usando action ids e posições diferentes. Em breve faço uma versão que dê pra configurar todas as portas do mapa em 1 script.
×
×
  • Create New...