Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/28/15 em todas áreas
-
Sobre o xGesior O xGesior, veio com a tarefa de ser um Gesior sem bugs e com uma aparência diferenciada, esse gesior conta com 3 versões, 2 ainda estão em desenvolvimento, esse conteúdo não deve ser de qualquer maneira comercializado! https://github.com/xtibia/xgesior VERSÕES Versão 1.0.0 [ DISPONIVEL ] Versão 1.1.1 [ IDISPONIVEL ] Versão 1.2.2 [ IDISPONIVEL ] COMPATIBILIDADES TFS 1.1 [NÃO TESTADO] TFS 1.0 [FUNCIONAL] TFS 0.4 [NÃO TESTADO] TFS 0.2 [NÃO TESTADO] Imagens XGesior DOWNLOAD E SCAN Senha para descompactar: www.xtibia.com WebSite : http://www.mediafire.com/download/xq87wnpno9wdoa5/xGesior+1.0.0+ByMudrocK.rar Xampp : http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.3/ SCAN : https://www.virustotal.com/pt/file/803c43116009f63c38c589a5f3c49d90caf80d066c0cd95fb58eab9203b080c7/analysis/1430007560/ Database : [ JA NA PASTA DO GESIOR ] GitHub: https://github.com/xtibia/xgesior Créditos Mudrock Daniel2 pontos
-
[Fix] Unsupported Client Version (8)
Bruno e um outro reagiu a Marco Oliveira por um tópico no fórum
Eu tive alguns problemas com isso e depois de ver cada um dos fóruns espalhados pelo google cheguei a solução. Primeiro Passo verifique se você tem tanto a versão do cliente desejada, bem como uma versão mais recente instalada. Por exemplo, o mapa que eu estou tendo problema é "9,60" por isso vou precisar de tanto "9,60" como da "9,81" Segundo Passo Importe o mapa que você está tendo problemas para abrir! Terceiro Passo2 pontos -
Abrindo um servidor das versões atuais. [10.77/10.78]
kjadlhsajkd e um outro reagiu a Marco Oliveira por um tópico no fórum
Bom, muita gente me manda PM pedindo ajuda sobre "como abrir um servidor das versões atuais", citando que só existem esses tipos de tutoriais para versões antigas, etc e tal, então decidi faze-lo para ajudar os iniciantes! Primeiramente devo explicar que um servidor de Tibia é basicamente formado por sources e datapack. A source é o código fonte escrito em C++, que depois de compilada se transforma no arquivo/executável (aquele tela preta) que usamos para abrir o servidor. O datapack é onde ficam os arquivos LUA e XML que servem para diversas finalidades dentro do servidor, desde a criação de monstros, magias .. a criação de eventos complexos. Para esse tutorial irei usar como base do código fonte o projeto theforgottenserver, vulgo TFS, e como base do datapack o projeto datapack do printer, hoje renomeado como ORTS. Mãos a obra, crie uma pasta otserv em seu computador. Esse é o link para o repositório do TFS no github, basta ir em download zip, depois que baixar descompacte, pegue os arquivos config.lua e schema.sql, e coloque na pasta que você criou. Use esses arquivos que restaram para compilação. Agora devemos baixar o datapack do printer, esse é o link do repositório do projeto no github, basta ir em download zip, depois que baixar descompacte e pegue a pasta data e jogue na pasta otserv que você criou. (o mapa desse projeto fica nesse repositório separado, portanto faça o mesmo processo, depois que baixar o mapa, coloque-o dentro da pasta data/worlds). Pois bem, você já tem o arquivo de execução, a pasta data, o config.lua e o schemas.sql. Agora é preciso baixar um servidor web, que contenha apache, php, e mysql, para deixar o site online (sim, as novas versões não suportam o sqlite, apenas o mysql, portanto a unica forma deixa-lo online é um servidor mysql rodando o database, e para a criação de account no servidor terá que usar algo que interaja com o mesmo, ou seja, um website). Como website, eu, particularmente, sempre usei o Gesior, mas fica a escolha de cada um. Aqui fica o repositório do gesior para versão TFS 1.0+ (ele é bem ruim em aparência, portanto aconselho a baixar algum com o layout igual ao o website do global, aqui no fórum existem vários). Agora você deve baixar um servidor web (xampp, vertrigo, usbwebserver, etc). Esta etapa não tem segredo, existem vários tutoriais aqui no fórum de como deixar um website de Tibia online. Lembrando que se for em windows é preciso baixar as libs necessárias, e em linux no tutorial de compilação já é instalado as libs necessárias. Após estar com o servidor web ligado, dados de conexão mysql configurados no config.lua, database importada no phpmyadmin, website instalado e funcionando, pronto,agora é só ligar o servidor. FAQs (perguntas frequentes): Download das Libs https://mega.co.nz/#!KQ8FEQYb!ZrLlJHMfLF752A9Rs400jWi2yhqIEIVDSvjjlAVeDTA Compilando em Windows https://github.com/otland/forgottenserver/wiki/Compiling Distos Compiladas http://www.xtibia.com/forum/topic/235737-distos-compiladas-10-12/ Créditos Luan Luciano2 pontos -
• Menu: ├ Informações; ├ Prints; ├ Download; └ Creditos. • Informações Basicas • • print screen • • download+scan • client/serve/source: http://www.mediafire.com/download/7zuy27ymn7nhnj7/dash+v6+reupload.rar scan: https://www.virustotal.com/pt/file/f8cd451fecabccc09b683e5928a0f186ec11f278628ab0c81e157628f91c6826/analysis/1436901745/ • Creditos • brun123 n lembro o resto1 ponto
-
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 budamunky1 ponto
-
[TFS 1.0] Battlefield Event - NEW 100%
RigBy reagiu a mkbrabsolute por um tópico no fórum
O Evento Battlefield há para TFS 1.1, 1.2. Portanto, este é o ÚNICO E EXCLUSIVO evento para o TFS 1.0 que a maioria usa. O Que há nele? Neste tópico encontraremos os scripts do evento, mapa e arquivo da source. Há necessidade de alterar o arquivo game.cpp da source e recompilar o TFS para que o evento funcione perfeitamente. Vamos ao que interessa! Em data/creaturescripts/scripts crie um arquivo com o nome de BATTLEFIELD_creaturescript.lua com o conteúdo: dofile('data/lib/BATTLEFIELD_lib.lua') local function getWinnersBattle(storage) for _, online in ipairs(Game.getPlayers()) do if online:isPlayer() then if online:getStorageValue(storage) > 0 then online:teleportTo(online:getTown():getTemplePosition()) online:sendTextMessage(MESSAGE_INFO_DESCR, msg) online:setStorageValue(storage, 0) online:addItem(bf.rewardWin[1], bf.rewardWin[2]) online:unregisterEvent("BattleTeamLife") online:unregisterEvent("BattleTeamMana") online:unregisterEvent("BattleDeath") online:addHealth(online:getMaxHealth()) online:addMana(online:getMaxMana()) online:removeCondition(CONDITION_OUTFIT) if online:isPzLocked() then online:remove() end end end end if storage == bf.teamOne.storage then broadcastMessage("The BattleEvent is finish, team ".. bf.teamOne.name .." win.", MESSAGE_STATUS_WARNING) elseif storage == bf.teamTwo.storage then broadcastMessage("The BattleEvent is finish, team ".. bf.teamTwo.name .." win.", MESSAGE_STATUS_WARNING) end checkGate() print("> BattleField Event was finished.") end function onLogin(cid) local player = Player(cid) if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then player:setStorageValue(bf.teamOne.storage, 0) player:setStorageValue(bf.teamTwo.storage, 0) player:removeCondition(CONDITION_OUTFIT) player:teleportTo(player:getTown():getTemplePosition()) player:unregisterEvent("BattleTeamLife") player:unregisterEvent("BattleTeamMana") player:unregisterEvent("BattleDeath") end return true end function onLogout(cid) local player = Player(cid) if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can not logout now.") return false end return true end function onChangeHealth(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType) local player = Player(creature) local enemy = Player(attacker) if enemy then if (player:getStorageValue(bf.teamOne.storage) > 0 and enemy:getStorageValue(bf.teamOne.storage) > 0) or (player:getStorageValue(bf.teamTwo.storage) > 0 and enemy:getStorageValue(bf.teamTwo.storage) > 0) or (enemy:isMonster()) and (primaryDamage > 0) then return false end end return primaryDamage, primaryType, secondaryDamage, secondaryType end function onChangeMana(cid, attacker, manaChange) local player = Player(cid) local enemy = Player(attacker) if enemy then player:sendTextMessage(MESSAGE_INFO_DESCR, enemy) if (player:getStorageValue(bf.teamOne.storage) > 0 and enemy:getStorageValue(bf.teamOne.storage) > 0) or (player:getStorageValue(bf.teamTwo.storage) > 0 and enemy:getStorageValue(bf.teamTwo.storage) > 0) or (enemy:isMonster()) then return false end end return manaChange end function onPrepareDeath(cid, killer) local creature = Player(cid) if creature:getStorageValue(bf.teamOne.storage) > 0 then creature:removeCondition(CONDITION_OUTFIT) creature:sendTextMessage(MESSAGE_INFO_DESCR, "You are dead!") creature:teleportTo(creature:getTown():getTemplePosition()) creature:addHealth(creature:getMaxHealth()) creature:addMana(creature:getMaxMana()) creature:unregisterEvent("BattleTeamLife") creature:unregisterEvent("BattleTeamMana") creature:unregisterEvent("BattleDeath") Game.setStorageValue(bf.teamOne.storage, Game.getStorageValue(bf.teamOne.storage) - 1) creature:setStorageValue(bf.teamOne.storage, 0) elseif creature:getStorageValue(bf.teamTwo.storage) > 0 then creature:removeCondition(CONDITION_OUTFIT) creature:sendTextMessage(MESSAGE_INFO_DESCR, "You are dead!") creature:teleportTo(creature:getTown():getTemplePosition()) creature:addHealth(creature:getMaxHealth()) creature:addMana(creature:getMaxMana()) creature:unregisterEvent("BattleTeamLife") creature:unregisterEvent("BattleTeamMana") creature:unregisterEvent("BattleDeath") Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) - 1) creature:setStorageValue(bf.teamTwo.storage, 0) end if Game.getStorageValue(bf.teamOne.storage) == 0 then getWinnersBattle(bf.teamTwo.storage) elseif Game.getStorageValue(bf.teamTwo.storage) == 0 then getWinnersBattle(bf.teamOne.storage) end if Game.getStorageValue(bf.teamOne.storage) > 0 and Game.getStorageValue(bf.teamTwo.storage) > 0 then doMsgBattlefield("[BattleField] "..bf.teamOne.name.." "..Game.getStorageValue(bf.teamOne.storage).." VS "..Game.getStorageValue(bf.teamTwo.storage).." " ..bf.teamTwo.name) end if creature:isPzLocked() then creature:remove() end return false end Em data/creaturescripts/creaturescripts.xml adicione as seguintes linhas: <event type="login" name="BattleLogin" script="BATTLEFIELD_creaturescript.lua"/> <event type="logout" name="BattleLogout" script="BATTLEFIELD_creaturescript.lua"/> <event type="preparedeath" name="BattleDeath" script="BATTLEFIELD_creaturescript.lua"/> <event type="changehealth" name="BattleTeamLife" script="BATTLEFIELD_creaturescript.lua"/> <event type="changemana" name="BattleTeamMana" script="BATTLEFIELD_creaturescript.lua"/> Em data/globalevents/script, crie um arquivo com o nome de BATTLEFIELD_globalevents.lua e adicione o conteúdo: dofile('data/lib/BATTLEFIELD_lib.lua') local function teleportCheck() local tile = Tile(bf.teleportPosition) if tile then local item = tile:getItemById(1387) if item then item:remove() broadcastMessage("The BattleField Event was start in ".. bf.timeOpenGate .." minutes.", MESSAGE_STATUS_WARNING) local team1 = Game.getStorageValue(bf.teamOne.storage) local team2 = Game.getStorageValue(bf.teamTwo.storage) if (team1 + team2) % 2 ~= 0 then local playerLeave = Player(Game.getStorageValue(bf.namePlayer)) playerLeave:teleportTo(playerLeave:getTown():getTemplePosition()) playerLeave:removeCondition(CONDITION_OUTFIT) playerLeave:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are dead!") playerLeave:addHealth(playerLeave:getMaxHealth()) playerLeave:addMana(playerLeave:getMaxMana()) playerLeave:unregisterEvent("BattleTeamLife") playerLeave:unregisterEvent("BattleTeamMana") playerLeave:unregisterEvent("BattleDeath") Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) - 1) playerLeave:setStorageValue(bf.teamTwo.storage, 0) end addEvent(checkGate, bf.timeOpenGate * 60 * 1000) else broadcastMessage("The BattleField Event was opened and will close in ".. bf.timeCloseTeleport .." minutes.", MESSAGE_STATUS_WARNING) Game.setStorageValue(bf.teamOne.storage, 0) Game.setStorageValue(bf.teamTwo.storage, 0) Game.setStorageValue(bf.namePlayer, 0) print("> BattleField Event was opened.") local teleport = Game.createItem(1387, 1, bf.teleportPosition) if teleport then teleport:setActionId(47000) end end end end function onTime(interval) teleportCheck() addEvent(teleportCheck, bf.timeCloseTeleport * 60 * 1000) return true end Em data/globalevents/globalevents.xml adicione: <globalevent name="BattleField" time="20:55:00" script="BATTLEFIELD_globalevents.lua" /> Em data/libs crie um arquivo com o nome de BATTLEFIELD_lib com o conteúdo: - -[[ LIB BATTLEFIELD TFS 1.0 Arquivos além desta lib: - BATTLEFIELD_globalevents.lua - BATTLEFIELD_movements.lua - BATTLEFIELD_creaturescript.lua - spell invisible.lua -- alterar UTANA VID e STEALTH RING ]]-- bf = { rewardWin = {2160, 10}, teamOne = {name = "Black Assassins", storage = 140120, pos = {x=1006,y=994,z=6}}, teamTwo = {name = "Red Barbarians", storage = 140121, pos = {x=1032,y=994,z=6}}, timeCloseTeleport = 1, timeOpenGate = 1, teleportPosition = {x=1019, y=1016, z=7}, namePlayer = 18400, levelToEvent = 7, itemGate = 3517 } function checkGate() local wall = { {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, {x=1019, y=994, z=6}, } broadcastMessage("The BattleEvent Event will begin now!", MESSAGE_STATUS_WARNING) doMsgBattlefield("[BattleField] "..bf.teamOne.name.." "..Game.getStorageValue(bf.teamOne.storage).." VS "..Game.getStorageValue(bf.teamTwo.storage).." " ..bf.teamTwo.name) print("> BattleField Event will begin now.") for i = 1, #wall do local tile = Tile(wall[i]) if tile then local item = tile:getItemById(bf.itemGate) if item then item:remove() else Game.createItem(bf.itemGate, 1, wall[i]) end end end end function doMsgBattlefield(msg) for _, online in ipairs(Game.getPlayers()) do if online:isPlayer() then if online:getStorageValue(bf.teamOne.storage) > 0 or online:getStorageValue(bf.teamTwo.storage) > 0 then online:sendTextMessage(MESSAGE_INFO_DESCR, msg) end end end end Em data/movements/scripts crie um arquivo com o nome de BATTLEFIELD_movements com o conteúdo: dofile('data/lib/BATTLEFIELD_lib.lua') local conditionBlack = Condition(CONDITION_OUTFIT) conditionBlack:setTicks(120 * 60 * 1000) conditionBlack:addOutfit({lookType = 134, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}) local conditionRed = Condition(CONDITION_OUTFIT) conditionRed:setTicks(120 * 60 * 1000) conditionRed:addOutfit({lookType = 143, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}) function onStepIn(cid, item, position, fromPosition) local player = Player(cid) if player:getLevel() < bf.levelToEvent then player:sendTextMessage(MESSAGE_INFO_DESCR, "You need level " .. bf.levelToEvent .. " to enter in event.") player:teleportTo(fromPosition) return false end if player:getItemCount(2165) >= 1 then player:sendTextMessage(MESSAGE_INFO_DESCR, "You can not enter stealth ring in the event.") player:teleportTo(fromPosition) return false end if Game.getStorageValue(bf.teamOne.storage) < Game.getStorageValue(bf.teamTwo.storage) then Game.setStorageValue(bf.teamOne.storage, Game.getStorageValue(bf.teamOne.storage) + 1) player:addCondition(conditionBlack) player:setStorageValue(bf.teamOne.storage, 1) player:setStorageValue(bf.teamTwo.storage, 0) player:teleportTo(bf.teamOne.pos) player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. bf.teamOne.name .. ".") else Game.setStorageValue(bf.teamTwo.storage, Game.getStorageValue(bf.teamTwo.storage) + 1) player:addCondition(conditionRed) player:setStorageValue(bf.teamTwo.storage, 1) player:setStorageValue(bf.teamOne.storage, 0) player:teleportTo(bf.teamTwo.pos) player:sendTextMessage(MESSAGE_INFO_DESCR, "You will join the team " .. bf.teamTwo.name .. ".") Game.setStorageValue(bf.namePlayer, cid) end player:addHealth(player:getMaxHealth()) player:addMana(player:getMaxMana()) player:registerEvent("BattleTeamLife") player:registerEvent("BattleTeamMana") player:registerEvent("BattleDeath") return true end Em data/movements/movements.xml adicione: <movevent event="StepIn" actionid="47000" script="BATTLEFIELD_movements.lua"/> Em data/spells/scripts/support abra o arquivo invisible.lua, apague tudo e coloque: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0) local condition = createConditionObject(CONDITION_INVISIBLE) setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) setCombatCondition(combat, condition) dofile('data/lib/BATTLEFIELD_lib.lua') function onCastSpell(cid, var) local player = Player(cid) if player:getStorageValue(bf.teamOne.storage) > 0 or player:getStorageValue(bf.teamTwo.storage) > 0 then return false else return doCombat(cid, combat, var) end end Conforme avisado, no TFS 1.0 há necessidade de alterar alguns códigos nas fontes, portanto estou disponibilizando o arquivo game.cpp, basta substituir em sua basta e recompila-lo. Download game.cpp: https://www.sendspace.com/file/vqs5u4 Download Map tradicional: https://www.sendspace.com/file/f5tjhg Imagem do mapa: Para configurar, basta ver os arquivos e configurar horário, dias e posições do mapa! SCRIPT 100% TESTADO, O MESMO É VENDIDO PELO MODERADOR DO OUTRO FÓRUM! PORTANTO SEM ESSA, MODIFICAMOS E, IT'S FREEEEEEEE! Créditos: Absolute Vodkart Luan Luciano Markin Bom Proveito a todos, até o próximo! FAVOR MOVER O TÓPICO PRA SEÇÃO SCRIPTING > SISTEMAS E MODS, QUE TÁ FOD* CRIAR LÁ....1 ponto -
Distros Compiladas 1.0 | 1.2
Danihcv reagiu a Marco Oliveira por um tópico no fórum
The Forgontten Server 1.2 10.91 | 32 Bits: Download | Scan 10.91 | 64 Bits: Download | Scan 10.90 | 32 Bits: Download | Scan 10.90 | 64 Bits: Download | Scan 10.78 | 32 Bits: Download | Scan 10.78 | 64 Bits: Download | Scan The Forgontten Server 1.0 10.78 | 32 Bits: Download | Scan 10.78 | 64 Bits: Download | Scan 10.78: 64 Bits Ubunto 14.04: Download | Scan Colaboradores Bruno Minervino MitsuigFireelementMarco Oliveira1 ponto -
Fruit Picking Introdução: é um sistema simples, consiste em você pode colher a fruta da arvore e ela crescer depois de um tempo de novo. Instalar o script: em action/script crie: FruitHarvesting.lua adicione: -- Do not remove the credits -- -- [ACTION] Fruit Harvesting -- -- Developed by Rigby -- -- Especially for the Xtibia.com -- local config = { -- [ID_DA_ARVORE] = {FRUTA, QUANTIDADE{minimo, maximo}, ID_DA_ARVORE_SEM_FRUTO, TEMPO_PARA_ÀRVORE_FICA_COM_FRUTO} [5157] = {fruit = 5097, quantity = {0,1}, treeWithoutFruit = 5156, timeToGrow = 5}, [4006] = {fruit = 2675, quantity = {0,3}, treeWithoutFruit = 4008, timeToGrow = 20}, [5094] = {fruit = 2676, quantity = {3,6}, treeWithoutFruit = 5092, timeToGrow = 30}, [5096] = {fruit = 2678, quantity = {2,7}, treeWithoutFruit = 2726, timeToGrow = 70}, } function onUse(cid, item, fromPosition, itemEx, toPosition) for i, k in pairs(config) do if (isInArray(i, item.itemid) == true) then random = math.random(k.quantity[1],k.quantity[2]) doTransformItem(item.uid, k.treeWithoutFruit, 1) doPlayerAddItem(cid,k.fruit,random) addEvent(function() doTransformItem(getThingFromPos(toPosition).uid, i) end, k.timeToGrow * 1000) if random > 0 then doPlayerSendTextMessage(cid,27,"Você pego "..random.." "..getItemNameById(k.fruit).."!") else doPlayerSendTextMessage(cid,27,"Àrvore não deu nenhum fruto!") end end end return true end em action/action.xml adicione a tag: <action itemid="5157;4006;5094;5096" event="script" value="FruitHarvesting.lua"/> Se você adicionar mais arvore não esqueça de adiciona o id na tag também.1 ponto
-
Como criar seus próprios monstros personalizados.
Luga03 reagiu a Marco Oliveira por um tópico no fórum
Neste tutorial vou ensinar como criar seus próprios monstros personalizados para seu servidores OTSERV. Comece fazendo o download da versão mais recente do Notepad ++ Em seguida, você deve criar um arquivo xml e nomeá-lo com o nome do monstro, eu irei utilizar "King Kong" Clique com o botão esquerdo no arquivo e clique em Editar com o Notepad ++ em seguida, começar adicionando: <?xml version="1.0" encoding="UTF-8"?> Depois: <monster name="King kong" nameDescription="a King kong" race="blood" experience="10000" speed="500" manacost="200"> <health now="500000" max="500000"/> Monster name: Nome do Monstro nameDescription: Você deve usar ou não como exemplo o "You see a King kong" Race: Tudo o que sei sobre ele é que seu sangue / mortos-vivos. Experience: Experiencia por matar o monstro. Speed: Velocidade do monstro. Manacost: Custo de mana para sumonar a criatura. Healt now: vida da criatura ao ser summonada (criada no mapa) Max: vida máxima da criatura Agora: <look type="x" corpse="x"/> <targetchange interval="x" chance="0"/> <strategy attack="100" defense="0"/> Look Type: Outfit da criatura. Corpse: Corpo da criatura quando morto. Targetchange interval: Intervalo em que o monstro muda de alvo. Defense: Defesa da criatura. Depois: <flags> <flag summonable="x"/> <flag attackable="x"/> <flag hostile="x"/> <flag illusionable="x"/> <flag convinceable="x"/> <flag pushable="x"/> <flag canpushitems="x"/> <flag canpushcreatures="x"/> <flag targetdistance="x"/> <flag staticattack="x"/> <flag runonhealth="x"/> </flags> Em todos eles "1" (true) é para sim e "0" (false) é para não. Agora, deixe-me explicar cada um deles flag summonable="x" - A criatura pode ser sumonada ? flag attackable="x" - O Monstro pode ser atacado ? flag hostile="x" - A Criatura é Hostil ? flag illusionable="x" - Pode ser usado Utevo Res Ina ? flag convincible="x" - As pessoas podem coruja-la a partir de uma runa ? flag pushable="x" - A criatura pode ser puxada ? flag canpushitems="x - A criatura puxa itens ? flag canpushcreatures="x" - A criatura puxa outras criaturas ? flag targetdistance="x" - deve ser um número que é o espaço entre o alvo e criatura. 1 = lado do alvo, 5 = 4 sqms distância, etc flag runonhealth="x" a criatura vai correr do player com X de vida, se colocar 500, quando a criatura tiver 500 de vida, ele vai correr do jogador. Agora: <attacks> <attack name="x" interval="x" skill="x" attack="x"/> <attack name="x" interval="x" chance="x" range="x" min="-x" max="-x"> <attribute key="shootEffect" value="x"/> <attack name="x" interval="x" chance="x" range="x" radius="x" target="x" min="-x" max="-x"> <attribute key="shootEffect" value="x"/> <attribute key="areaEffect" value="x"/> </attack> </attacks> Attack name: eles são muito "use outros arquivos de monstro para saber sobre eles". Interval: Quantas vezes irá o ATK do monstro u "Lembre-se é contado em milisegundos" Skill: it is skill like sword fighting "it increases the atk rate" Attack: Por exemplo torná-lo como 10 a escala do monstro será de 10. Attack name: Tipo de ataque Chance: Chance de ataque Range: Ataque contados em SQM. Min: Dano mínimo causado "importante" e lembre-se de adicionar - antes que o dano como -10. Max: Danos máximo causado "importante" mesmo aqui lembrar acrescentando - antes que o dano como -20. AreaEffect: o efeito se vc quiser fazê-lo disparar chamá-lo de área de fogo entre o "" "Lembre-se que o nome de ataque deve ser a incêndios, se u quer que ele faça um atk fogo e definir o intervalo e raio como outros ATKS. attribute key="shootEffect": O efeito usado no ataque é como uma lança ou parafuso ou pequena pedra ou um incêndio ou algo. value="x": O item utilizado no shooteffect Depois: <defenses armor="x" defense="x"/> <defense name="x" interval="x" chance="x" speedchange="x" duration="x"> <attribute key="areaEffect" value="x"/> </defense> </defenses> Defenses armor: sua defesa armadura como 10 ou 12 ou assim por diante Defense: É como a armadura ur blindagem 20 ou assim por diante Agora: <elements> <element energyPercent="x"/> <element holyPercent="x"/> <element earthPercent="x"/> <element deathPercent="x"/> </elements> Todos esses são as % retirado do Energy/holy/earth/death se vc fez, por exemplo 10, então vai demorar 10% menos dano do ataque X se tornou u -10, então vai demorar 10% mais dano do X. Depois: <voices interval="x" chance="x"> <voice sentence="X" yell="x"/> </voices> vozes interval/chance: Quantas vezes ele vai dizer sua fala! Agora: <loot> <item id="x" countmax="x" chance="x"/> <item id="x" chance="x"/> <item id="x" chance="x"> <inside> <item id="x" chance="x"/> </inside> </item> </loot> </monster> Item id: item que irá dropar. Count max: Quantidade máxima que irá dropar. Chance: chance de drop do item. <inside> <item id="x" chance="x"/> </inside> Itens que vem dentro da bag, mesma configuração da de cima.1 ponto -
Servidor aceitando qualquer items.otb
gmstrikker reagiu a Bruno por um tópico no fórum
Lembrando que este procedimento foi testado no tfs v0.4. Abra o seu items.cpp e procure por: if(Items::dwMajorVersion == 0xFFFFFFFF) std::clog << "[Warning - Items::loadFromOtb] items.otb using generic client version." << std::endl; else if(Items::dwMajorVersion < 3) { std::clog << "[Error - Items::loadFromOtb] Old version detected, a newer version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; } else if(Items::dwMajorVersion > 3) { std::clog << "[Error - Items::loadFromOtb] New version detected, an older version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; } else if(!g_config.getBool(ConfigManager::SKIP_ITEMS_VERSION) && Items::dwMinorVersion != CLIENT_VERSION_920) { std::clog << "[Error - Items::loadFromOtb] Another (client) version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; } Agora basta comentar, ficando assim: /*if(Items::dwMajorVersion == 0xFFFFFFFF) std::clog << "[Warning - Items::loadFromOtb] items.otb using generic client version." << std::endl; else if(Items::dwMajorVersion < 3) { std::clog << "[Error - Items::loadFromOtb] Old version detected, a newer version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; } else if(Items::dwMajorVersion > 3) { std::clog << "[Error - Items::loadFromOtb] New version detected, an older version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; } else if(!g_config.getBool(ConfigManager::SKIP_ITEMS_VERSION) && Items::dwMinorVersion != CLIENT_VERSION_920) { std::clog << "[Error - Items::loadFromOtb] Another (client) version of items.otb is required." << std::endl; return ERROR_INVALID_FORMAT; }*/ Qualquer problema ou dúvida, só postar aqui!1 ponto -
Estou trazendo um script simples e muito legal, o que ele faz? O SCRIPT FUNCIONA DA SEGUINTE MANEIRA : O player clica no item ao clicar ele vai tê a chance de ganhar 3 items (Ou mais basta você adicionar). Então vamos configura-lo ao seu servidor, Vá em data/actions/scripts e crie um arquivo.lua chamada sorteio.lua e adicione o seguinte código dentro. function onUse(cid, item, fromPosition, itemEx, toPosition) local sorteio = {2160, 2159, 2157} --- items do sorteio local level = 100 --- level necessário para utilizar o item if getPlayerLevel(cid) >= level then if item.itemid == ID DO ITEM then ------ ID DO ITEM QUE VAI UTILIZAR doRemoveItem(item.uid,1) local sorteiostatus = getPlayerStorageValue(cid, 5967) doPlayerSendTextMessage(cid, 22 , "Parabéns você ganhou o item do sorteio") doPlayerAddItem(cid, sorteio[math.random(1, #sorteio)], 1) doSendMagicEffect(getThingPos(cid), 29) setPlayerStorageValue(cid, 5967 ,1) else doPlayerSendCancel(cid,'Somente levels 100+ conseguem abrir este bau.') end return true end end Apos isso vá em actions.xml e adicione a seguinte tag dentro. <action itemid="ID DO ITEM QUE VAI UTILIZAR" script="sorteio.lua"/> Lembre-se de configurar o script com suas escolhas, como os id's do item sorteado,o id do item que vai cê utilizado e etc... Qualquer dúvida só comentarem no tópico.1 ponto
-
Feliz em ver que você não desistiu de design também, Avu (= Posts sem a assinatura para participação excluídos. Abraços, Benny1 ponto
-
Vou ver uma formula que chegue perto para poder ajudar, para não ter que digitar 200 linhas para cada grupo.1 ponto
-
Script tile guild members online do vodkart
gmstrikker reagiu a Bruno por uma questão
@@gmstrikker, Tentei, vamos ver se vai: Utilizei as actionids 12000, 12001 e 12002 como exemplo: No exemplo apenas a 12000 faz a verificação de level/guild, as demais apenas envia a mensagem, para evitar fazer uma checagem em todos os pisos já que apenas o principal define quem vai ou não entrar. Att.1 ponto -
Item de sorteio
SkyLigh reagiu a SkyDangerous por um tópico no fórum
Dica: Faz cada item ter uma porcentagem de chance vai ficar mais legal .. imagina por um item 5% e conseguir ele haha'1 ponto -
Script tile guild members online do vodkart
gmstrikker reagiu a Vodkart por uma questão
ok qndo chegar em casa eu edito1 ponto -
1 ponto
-
Navegando pelo D.A eu achei esse guia, e realmente, ele é ótimo. Aí vai o Link. Guia Downloads Packs : http://rider-gfx.deviantart.com/art/Rider-Resource-Pack-1-528374407 http://mrrobin.deviantart.com/gallery/5224940/Resources?offset=0 Brushes : http://fudgegraphics.deviantart.com/art/Hi-Res-Splatter-PS-Brush-Set-163129947 Cores : http://www.deviantart.com/users/outgoing?http://webdesign.tutsplus.com/articles/an-introduction-to-color-theory-for-web-designers--webdesign-1437 http://www.deviantart.com/users/outgoing?http://www.johnmuirlaws.com/art-and-drawing/color-theory Flow : http://www.deviantart.com/art/Tutorial-Flow-524882499 http://strawhatmakesmagic.deviantart.com/ Abstract : http://wishlah.deviantart.com/art/Fisheye-Placebo-Signature-Tutorial-Very-In-Depth-439624753 http://vionas.deviantart.com/art/Tutorial-Glow-494249821 http://angelus-hellion.deviantart.com/gallery/250106/Render-packs Composição : http://www.deviantart.com/users/outgoing?http://painting.about.com/od/artglossaryc/g/defcomposition.htm Créditos : Greev1 ponto
-
[8.54] Servidor + Client Naruto B&W [EXCLUSIVO]
roriscrave reagiu a DeCarvalho por um tópico no fórum
E pelas imagens deu para perceber que 'a' 'muintos' erros de português.. quem pegar, se for querer fazer algo 'serto' vai ter que corrigir isso.. Mas o que vale é a intenção1 ponto -
Tile Reset Diferente
williamserravalle reagiu a Bruno por uma questão
@, vá em data/movements/movements.xml e adicione a seguinte tag: <movevent type="StepIn" actionid="16500" event="script" value="resettile.lua" />Agora em data/movements/scripts crie um arquivo chamado resettile.lua com o seguinte conteúdo: local config = { level = 1000, -- level mínimo para entrar resets = 10, -- quantidade máxima de resets para passar msg = 'Somente jogadores com level superior a 1000 e com 10 resets ou menos podem passar.' -- mensagem para quem tiver mais resets que o permitido } function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local resets = getPlayerStorageValue(cid, 378378) if getPlayerLevel(cid) < config.level or resets > config.resets then doTeleportThing(cid, fromPosition) doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, config.msg) return false end return true endPronto! Basta colocar a actionid 16500 (ou outra configurada) no piso.1 ponto -
https://github.com/otland/forgottenserver/blob/master/src/items.cpp#L191-1991 ponto
-
Tile Morador de cidade com 11 town o melhor!
Marco Oliveira reagiu a L3K0T por um tópico no fórum
CONTEÚDO REMOVIDO: AGORA VOCÊ VAI TER QUE TER CRIATIVIDADE OU SE PENDURAR-SE NAS COSTA DE ALGUÉM, MENOS NA MINHA - BOA SORTE! error 404 - I do not serve the forum I retired.1 ponto