Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''action''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

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

Categorias

Não há resultados


Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

Encontrado 838 registros

  1. Amantezinho

    action [Módulo] game_shop OTC

    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
  2. Antes de baixarem eu gostaria de enfatizar alguns pontos: - Incluem-se neste download: servidor e cliente . - Inclui alguns virus da base usada no servidor ( Naruto White). - Existem Alguns Bugs no servidor e no mapa, mais nada dificil de resolver - Caso encontre alguma vocação sem spell, e que não tive muito tempo para criar. Ajudei?? REP++ Trade System {100%} Party System {100%} Transformações {100%} +100 monstros {100%} Novos Monstros {100%} Novas sprites {100%} Novas quests {100%} Novas talkactions {100%} Premium Acess {100%} Double exp para premium {100%} Bonus drop {100%} Bonus spells {100%} Vocations: Downloads: a barrinha vermelha e dos virus da base que vem do servidor naruto white mais nada que prejudique o computador pois os virus são inofencivos Não é preciso scans, pois o proprio 4shared faz, e caso peça pra esperar 1000 segundos para iniciar o Download, basta desativar a Extensão Ad-block.. Creditos Apenas Eu.
  3. 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:
  4. Então eu tinha esse script de carpet em transform_to a bastante tempo desde 2016, mais simples Então então estou postando hoje Vamos ao Assunto. vai em data "datapack"/actions/scripts Crie um arquivo chamado carpet.lua coloque isso Volte na pasta actions abra o actions.xml Coloque Carpet fechado Carpet aberto DONO: PokemonZbr ( Online ) DONO: OtPokemonTvZ ( Offline ) Links do meu jogo https://pokemonzbr.com/ (Online) http://otpokemontvz.com/ (Offline) Eu sou: Scripter: 5% Mapper: 30% Programador: 4% Website : 50%
  5. 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.
  6. 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:
  7. 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??
  8. Fala galera então eu peguei o craft system deste tópico Clique Aqui e dei uma editada mudei os valores do tempo pra ficar certinho eu editei para o meu nto mas ficou legal então resolvi compartilhar eu fiz uma alteração no meu client no item 5941 que é o wooden stake quem quiser fazer a mesma alteração fique avontade a alteração que eu fiz foi para deixar o wooden stake igual o wood item 5901 agrupavel bom o método está logo abaixo é isso fiquem com a script Script action xml <action itemid="ID DO ITEM" event="script" value="NOME DO ARQUIVO.lua"/> print da modificação que fiz no wooden stake mudando ele para Stackable < ou empilhavel,agrupavel bom se estiver usando o OBJ vai tar agrupavel e no item editor vai estar stackable so marque essa opção no client e no item.otb e depois retire a marcação de multiuso do item no item.otb e no client ficando assim Itemeditor Client Link de download das outfits do lenhador Download das sprites de troca de Outfit: Créditos: (Bluester); GabrielTXU; Overllord; Zipter98; PxG pelas sprites.
  9. RigBy

    action Dodge System V2

    Dodge System por item V2 http://prntscr.com/7f2vl9 Para quem não sabe eu ja tinha feito um Dodge System ano passado, na época que eu não sabia nada, embora eu ainda não saiba nada to melhorando , eu tava sem nada para fazer ai decidir refazer, o script não tem nada de novo só foi modificado e melhorado algumas coisa. Para que não sabe dodge é um sistema que faz com que o player tenha uma certa porcentagem de esquiva de um ataque( por ele te esquivado ele não vai toma nenhum ataque e não apenas 50%) Então vamos la: Em creaturescript: Dodge System.lua function onStatsChange(cid, attacker, type, combat, value) local getStorage = getPlayerStorageValue(cid, 123455678) if (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then local chance = math.random (0,100) if chance <= getStorage then doSendAnimatedText(getCreaturePos(cid), "MISS!", 214) doSendMagicEffect(getCreaturePosition(cid), 30) return false end end return true end Creaturescript.xml <event type="StatsChange" name="DodgeSystem" event="script" value="Dodge System.lua"/> Login.lua antes do ultimo return true registerCreatureEvent(cid, "DodgeSystem") if getPlayerStorageValue(cid, 123455678) == -1 then setPlayerStorageValue(cid, 123455678, 0) end em action: dodgestone.lua function onUse(cid, item, fromPosition, itemEx, toPosition) local max = 50 -- limite de dodge local storagedodge = 123455678 -- storage do dodge if getPlayerStorageValue(cid, storagedodge) >= max then return doPlayerSendTextMessage(cid,22,"Você ja chego no limite de Dodge.") else doPlayerSetStorageValue(cid, storagedodge, (getPlayerStorageValue(cid, storagedodge)) + 1) doPlayerSendTextMessage(cid,22, "DodgeSKILL:["..getPlayerStorageValue(cid, storagedodge).."/"..max.."].") doRemoveItem(item.uid, 1) end return true end action.xml tag <action itemid="Id do item" event="script" value="dodgestone.lua"/> Se tiver algum bug ou dica de como melhorar pode comentar ai nos cometários Ps. com base nesse da para fazer Critical System, Reflect System e da para usar como magia de esquiva, se precisar é so fala
  10. 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
  11. 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.
  12. 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
  13. 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!
  14. 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
  15. 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
  16. 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
  17. Ha um tempo atrás eu procurei um Pet System bem simples pro meu servidor, e achei um muito bacana. TFS: 0.4 Tibia: 8.6 O script funciona corretamente, eu fiz apenas algumas alterações e queria compartilhar caso vocês tenham as mesmas exigências que eu; * Ao tentar usar o PET em PZ não da mais erro na distro, sobe um efeito FAILED! no player e manda uma mensagem. * Agora cada PET precisa de um storage para ser usado, no meu caso, cada PET tem sua quest individual. Indo para o assunto... Vá em "data/actions/scripts", copie algum arquivo da pasta e cole, renomeie para "simple_pet" e adicione isso dentro: function onUse(cid, item, frompos, item2, topos)local dolls = {[11256] = {pet = "Rat"},[11207] = {pet = "Demon"},[5791] = {pet = "Dragon"},}local go = dolls[item.itemid]local summon = getCreatureSummons(cid)---------------------------------------------------if not (getTilePzInfo(getCreaturePosition(cid))) thenif #summon >= 1 thenfor _, pid in ipairs(summon) dodoRemoveCreature(pid)doCreatureSay(cid, ""..go.pet..", Recuar!", TALKTYPE_ORANGE_1)endreturn trueendif item.itemid == 5791 thenif getPlayerStorageValue(cid, 6666) == 1 thendoConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid)))doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1)else doPlayerSendTextMessage(cid, 19, "Voce precisa da quest para usar esse PET!")doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180)endend if item.itemid == 11256 thenif getPlayerStorageValue(cid, 4444) == 1 thendoConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid)))doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1)else doPlayerSendTextMessage(cid, 19, "Voce precisa da quest para usar esse PET!")doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180)endendif item.itemid == 11207 thenif getPlayerStorageValue(cid, 4445) == 1 thendoConvinceCreature(cid, doSummonCreature(go.pet, getCreaturePosition(cid)))doCreatureSay(cid, ""..go.pet..", GO!", TALKTYPE_ORANGE_1)else doPlayerSendTextMessage(cid, 19, "Voce precisa fazer a quest para usar esse PET!")doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180)endendelsedoPlayerSendTextMessage(cid, 19, "Voce nao pode sumonar seu PET em Protect Zone!")doSendAnimatedText(getPlayerPosition(cid), "Failed!", 180)return trueendend Muito bem, agora sigamos para "actions.xml" e adicione essa tag: <action itemid="11256;11207;11144;9019" event="script" value="simple_pet.lua"/> Agora para você configurar: Nesta parte do código: local dolls = {[11256] = {pet = "Crystal Spider"},[11207] = {pet = "Ashmunrah"},[11144] = {pet = "Demon"},[9019] = {pet = "Vampire"},} Oque está entre [ e ] nós colocamos os Item ID dos items que vão chamar o PET. Já entre { e } aonde está entre aspas, colocamos o nome do PET.E na tag do "actions.xml" adicionamos estes MESMOS Item Ids, separando-os por ; ficando: <action itemid="ID;ID;ID;ID" event="script" value="simple_pet.lua"/> Para o PET teleportar para você quando subir escadas, ou ficar muito longe, vá em "config.lua" e procure por: teleportPlayerSummons Se estiver false coloque true, se estiver "no", coloque "yes" Demonstração: http://imgur.com/a/emO4I Obrigado pela atenção galera, espero que tenham gostado, e qualquer dúvida tentarei ajudar vocês. Não tenho certeza se esse sistema não tem aqui, mas não estava achando então decidi postar :3 Se Ajudei Rep + CRÈDITOS: LUQUINHA "Um Sitezinho Qualquer"
  18. Fala galera, hoje trago pra vocês meu Fishing System... Eu ainda não sou nem um programador experiente mas consegui fazer esse sistema, eu fiz ele faz um bom tempo... Não programo mais em Lua, apenas C++... Mas espero que gostem... Caso achem algo que seria desnecessário ou outra maneira mais fácil de fazer tal coisa só dizer, estou aberto a críticas. Bem, vamos lá!. - Crie um arquivo chamado fish.lua em Actions e coloque: - Agora crie outro arquivo em Actions chamado isca.lua e coloque: Agora em Creaturescripts crie um arquivo chamado fishing.lua e coloque: e registre esse evento no creaturescripts.xml <event type="think" name="Fishing" script="fishing.lua"/> - Agora na sua lib adicione isso: Bem, eu acho que é isso, espero não estar esquecendo nada... Enjoy.
  19. 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
  20. Olá galerinha do Xtibia, queria pedir a vcs uma ajuda, como tirar aquelas barras laterais do otclient na verdade eu sei qual é a script que mexe para tirar aquelas barras, mais o problema é que quando tiro elas aparece uma visão preta onde ficava as barras, sendo que para remover esses negocios pretos, preciso colocar zoom na interface do jogo para poder ficar normal, mais o problema é que para tirar esses negocios pretos, preciso colocar muito zoom no jogo, e a interface do jogo ficou feio de+, e como eu já vi muitos otclients ai incluindo do Otpokemon, queria saber como remover aquelas barras sem da zoom no jogo, ou pelo menos sem da muito zoom, talvez seja até em outra script que devo mexer, ai queria a ajuda de vcs script da minha interface onde mudo. Up Up Up Up Up Up
  21. 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+.
  22. 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
  23. RobsonSilva

    Santa Claus

    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
  24. 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.
  25. Resumo: Para quem já jogou league of legends, o sistema é "parecido" com o Invite Friends, e para quem não jogou irei dar uma breve descrição sobre o sistema. Descrição: O sistema oferece algumas premiações como: Itens, Premium Days, Montarias, Premium Points(para site) e Outfits. Claro que isso tudo é configurável. A ideia principal do sistema foi que essas premiações fossem exclusivas do sistema, digamos, que os jogadores só fossem recompensados e tivessem certas montarias/outfits se ele atingisse num número "X" de pontos por ter ajudado seu servidor a crescer! Como todo mundo almeja algo exclusivo e difícil de ser obtido, iria instigar os jogadores a usar o sistema e convidar seus amigos para o servidor! Como Funciona o Sistema? O sistema foi planejado para que jogadores "espertinhos" não burlassem o sistema e acontece da seguinte maneira: Temos o jogador João e a jogadora Maria: Maria necessita ser level 30 ou menor que 30(Configurável) para utilizar uma talkactions e dizer por quem foi invitada para o servidor, vamos supor que João a convidou Maria para jogar, João por sua vez necessita também ter um level avançado, digamos 50 ou superior(Configurável). Feito com sucesso o uso do sistema, ele funciona da seguinte maneira: OBS: Você pode dizer o nome do jogador mesmo que ele esteja OFFLINE! OBS2: Um ou mais Players podem ser invitador pelo MESMO JOGADOR! ENTÃO QUANTO MAIS PLAYER VOCÊ CHAMAR, MAIS FÁCIL DE RECEBER PONTOS E PREMIAÇÕES O jogador invitado, no caso o João, teria que atingir um número "X" de pontos para receber premiações, por exemplo: * Com 10 Pontos jogão recebe: Itens * Com 25 Pontos jogão recebe: Itens e Premium Points * Com 50 Pontos jogão recebe: Itens e Montaria * Com 100 Pontos jogão recebe: Itens, Premium Points, Premium Days e Outifit (Claro que isso é tudo configurável em uma Tabela) E como recebo Recebo esses Pontos VODKART SEU FILHO DA PUTA! Se lembra que João Convidou Maria para Jogar? Então... Maria tem que atingir certos leveis para que João receba esses pontos! Por exemplo a tabela do sistema: levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 }, Se Maria atingir level 50, João recebe 5 pontos Se Maria atingir level 80, João recebe 6 pontos Etc... Claro que isso tudo é acumulativo! E sabe o que mais? João recebe Pontos mesmo se estiver ONLINE ou OFFLINE! Sem mais delongas, Vamos instalar o sistema! Instalando o Sistema: data\creaturescripts\scripts InviteFriends.lua function onLogin(player) player:registerEvent("FriendsPoints") if player:getStorageValue(_invite_friends.storages[1]) < 0 then player:setStorageValue(_invite_friends.storages[1], 0) player:setStorageValue(_invite_friends.storages[4], 0) end if getInvitePoints(player) > 0 then local acc = player:getAccountId() local FriendPoints, CheckPoints = getInvitePoints(player), player:getStorageValue(_invite_friends.storages[4]) for vod, ka in pairs(_invite_friends.rewards) do local str = "" if FriendPoints >= vod and CheckPoints < vod then str = str.."--> Invite Players System <--\n\nVocê acaba de receber algumas recompensas:\n\nItems: \n"..getItemsFromList(ka.items)..".\n\n" if ka.p_days > 0 then player:addPremiumDays(ka.p_days) str = str.."Premium Days:\n"..ka.p_days.." Premium Days." end if ka.p_points > 0 then db.executeQuery('UPDATE accounts SET premium_points=premium_points+' .. p_points ..' WHERE id=' .. acc) str = str.."Premium Points:\n"..ka.p_points.." Premium Points." end if ka.out[1] > 0 then player:addOutfitAddon(player:getSex() == PLAYERSEX_FEMALE and ka.out[1] or ka.out[2], 3) str = str.."[New Outfit]\nRecebeu uma Nova Outfit." end if ka.mount_id > 0 then player:addMount(ka.mount_id) str = str.."[New Outfit]\nRecebeu uma Nova Montaria." end player:setStorageValue(_invite_friends.storages[4], FriendPoints) local town_id = player:getTown():getId() if #ka.items > 0 then local parcel = player:getDepotChest(town_id, true):addItem(2595) for _, i_i in ipairs(ka.items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then parcel:addItem(item, amount) else for i = 1, amount do parcel:addItem(item, 1) end end end end local townid = player:getTown():getId() local letter = player:getDepotChest(town_id, true):addItem(2598, 1, true, 1) letter:setAttribute(ITEM_ATTRIBUTE_WRITER, "[+] Invite Players System [+]") letter:setAttribute(ITEM_ATTRIBUTE_TEXT, str) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE,"[Invite Players System] Você Recebeu algumas premiações por estar convidando jogadores para o servidor, Por favor conferir os itens no Depot.") end end end return true end function onAdvance(player, skill, oldlevel, newlevel) if (skill == SKILL__LEVEL) then if hasInviteFriend(player) and player:getStorageValue(_invite_friends.storages[3]) < newLevel and _invite_friends.levels_win[newLevel] then local f_name, points = getNameFriend(player), _invite_friends.levels_win[newLevel] player:setStorageValue(_invite_friends.storages[3], newLevel) addInvitePoints(f_name, points) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "[Invite Friends] você atingiu o level "..newLevel.." e o seu amigou "..f_name.." recebeu "..points.." Friend Points. Obrigado!") end end return true end creaturescripts.xml <event type="advance" name="FriendsPoints" script="InviteFriends.lua"/> <event type="login" name="FriendsLogin" script="InviteFriends.lua"/> data\lib\core invitefriends.lua _invite_friends = { storages = {202301, 202302, 202303, 202304}, -- points, jogador, recompensa lvl, recompensa items level_max = 30, -- até que level ele precisa falar seu friend level_need = 50, -- que lever o jogador precisa ser para ganhar pontos levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 }, rewards = { [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {698, 699}}, [500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}} } } function getInvitePoints(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[1]) < 0 and 0 or getPlayerStorageValue(cid, _invite_friends.storages[1]) end function hasInviteFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[2]) > 0 and true or false end function getNameFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerNameByGUID(getPlayerStorageValue(cid, _invite_friends.storages[2])) end function addInvitePoints(name, amount) local pid, Guid = getPlayerByName(name), getPlayerGUIDByName(name) if not pid then local getFriendPoints = db.storeQuery("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) if getFriendPoints ~= false then db.asyncQuery("UPDATE `player_storage` SET `value` = ".. (result.getDataInt(getFriendPoints, "value")+amount) .." WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) end else setPlayerStorageValue(getPlayerByName(name), _invite_friends.storages[1], getInvitePoints(getPlayerByName(name))+amount) end return true end function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. ItemType(items[i][1]):getName() if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function getPlayerNameByGUID(guid) local a = db.storeQuery('SELECT `name` FROM `players` WHERE `id` = ' .. guid .. ' LIMIT 1') if a then return result.getDataString(a, "name") end return nil end function PlayerExist(name) -- by vodka local a = db.storeQuery('SELECT `id` FROM `players` WHERE `name` = ' .. db.escapeString(name)) if a ~= false then return true end return false end Na mesma pasta procure por data\lib\core.lua e adc essa linha: dofile('data/lib/core/invitefriends.lua') data\talkactions\scripts InviteFriends.lua function onSay(player, words, param) local param = param:lower() if param == "" or not param then player:sendCancelMessage("Você precisa digitar o nome de um jogador.") return false elseif param == "points" then player:popupFYI("[+] Invite Friend System [+]\n\nvocê tem ["..getInvitePoints(player).."] Friends Points.") return false elseif hasInviteFriend(player) then player:sendCancelMessage("Você já agradeceu o jogador ["..getNameFriend(player).."] por te convidar a jogar neste servidor.") return false elseif not getPlayerGUIDByName(param) then player:sendCancelMessage("Desculpe, mas o jogador [" .. param .. "] não existe.") return false elseif player:getLevel() > _invite_friends.level_max or result.getDataInt(db.storeQuery("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(param)), "level") < _invite_friends.level_need then player:sendCancelMessage((player:getLevel() > _invite_friends.level_max and "Desculpe, mas você precisa ter no maximo level ".._invite_friends.level_max.." para usar este comando." or "Desculpe, mas o jogador ["..param.."] precisa ter no minimo level ".._invite_friends.level_need.." para ser escolhido.")) return false elseif player:getName():lower() == param then player:sendCancelMessage("Desculpe, mas você não pode se auto invitar.") return false end player:setStorageValue(_invite_friends.storages[2], getPlayerGUIDByName(param)) player:sendTextMessage(25, "Você indicou o jogador "..param..", este sistema é uma forma de agradecer a vocês por trazerem seus amigos para jogar.") player:getPosition():sendMagicEffect(math.random(28,30)) return false end talkactions.xml <talkaction words="!invited" separator=" " script="InviteFriends.lua"/> Exemplo de uso do comando: Vodkart me chamou para jogador? uso o comando: !invited vodkart Configurando o Sistema: *Vá na LIB do sistema que você adicionou* level_max = 30, -- até que level ele precisa falar seu friend level_need = 50, -- que lever o jogador precisa ser para ganhar pontos levels_win = { -- [LEVEL QUE PRECISA ATINGIR] = QUANTIDADE DE PONTOS QUE O OUTRO JOGADOR VAI RECEBER [50] = 5, [80] = 6, [100] = 8, [150] = 10 } rewards = { [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {698, 699}}, [500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}} } rewards = { [PONTOS NECESSÁRIO PARA OBTER A PREMIAÇÃO] = exemplo: [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, com 10 pontos ele irá rceber aquele itens acima /\ items = {} -- Poderá adicionar itens em uma tabela dizendo {id do item, quantidade} p_days = 0 -- se o jogador vai receber Premium Days? 0 ou Quantidade que vc deseja dar mount_id = 0 -- Se o jogador vai receber montaria? Colocar o Mount ID(que fica em mounts.xml) Ou deixar 0 para nenhuma p_points = 0 -- se o jogador vai receber Premium Points? 0 ou Quantidade que vc deseja dar out = {0,0} -- se vai recever outfit? {FEMALE, MALE} OU {0 , 0} para nenhuma
×
×
  • Criar Novo...