Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/23/15 em %
-
BattleField TFS 1.1+
Administrador e 3 outros reagiu a Vodkart por um tópico no fórum
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.4 pontos -
Alguns Arabescos e Molduras
Ryukiimaru e um outro reagiu a Francisco Souza por um tópico no fórum
Estarei disponibilizando ao fórum alguns arabescos e molduras que gosto bastante de usar, para trabalhos mais rústicos e profissionais. Espero que gostem! (Alguns arabescos não estão sem fundo, então terão que fazer isso no PhotoShop, bem simples, caso tenha duvidas de como tirar o fundo das imagens responda esse tópico que posso ajuda-los) http://imgur.com/Ld4zO3F,EwH70vv,yvfbSyM,JE3HKHc,KVzjdtQ,M8a1tqx,LsamgQr,Y1EL9Re,fDRo5yE,pHJo8y8,jCMc2Z3,E6lTjYx,mY4sCJ42 pontos -
Não é simples assim, só alterar o tipo do campo. Primeiro porque muitos scripts ainda dependem do storage como um inteiro e isso ia quebrar muita coisa. Segundo que você teria que fazer muitas alterações na source pra mudar o tipo de inteiro (mais precisamente int32_t) pra string. Se você sabe o que está fazendo, vai fundo, se não, nem tente porque vai dar muito trabalho. O que você pode fazer e eu recomendo fortemente é um mapa de valores possíveis do storage pro que você vai salvar. Tenho um script, por exemplo, que recebe o idioma do player configurado no OTClient e salva como um storage da seguinte forma: local languages = { ["en"] = 0, ["br"] = 1, (...) } function ...(...) (...) player:setStorageValue(storage, languages[buffer]) end Onde storage é uma chave qualquer e buffer é o idioma do player (en, br, de, etc). Faz algo nesse estilo, eu realmente não consigo pensar em nada que seja realmente muito dinâmico e não dê de mapear dessa forma.2 pontos
-
[AJUDA] Spell Que Precisa de Permissão
Night Wolf e um outro reagiu a mkbrabsolute por uma questão
Perdão, erros da matina hudshudsuhdshuds Try now: local config = { velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido) hits = 24, -- quantos hits vai dar msg = "Frozen Orb", -- msg ao soltar a spell storage = {99998}, key = 13871, -- storage que sera utilizado pro cooldown cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro. effect1 = 36, -- efeito de distancia que vai ficar rodando effect3 = 37, -- efeito ao castar a spell effect4 = 43 -- efeito ao acertar a roda no player } --[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro. Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 255) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onTargetCreature(cid, target) doSendMagicEffect(getCreaturePosition(target), config.effect4) end setCombatCallback(combat, 4, "onTargetCreature") local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end return true end function middleEffect(uid, param, lim, count) n = count or 0 if isCreature(uid) and n < lim then for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(uid, combat, { pos = getCreaturePosition(uid), type = 2 }) addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1) end return true end function endEffect(uid) if isCreature(uid) then for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1) end end return true end function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage[1]) >= 1 then setPlayerStorageValue(cid, config.key, os.time() + config.cooldown) local position = getCreaturePosition(cid) doCreatureSay(cid, config.msg, 20) addEvent(endEffect, 8.55 * 1000, uid) doSendMagicEffect(position, config.effect3) initEffect(position) addEvent(middleEffect, 200, cid, var, config.hits) else doPlayerSendCancel(cid, "Desculpe,Você tem que comprar a permissao para usar está magia.") end return true end2 pontos -
[AJUDA] Spell Que Precisa de Permissão
Night Wolf e um outro reagiu a mkbrabsolute por uma questão
@Edit, vamos lá, leia com atenção a explicação! Em data/actions/scripts crie um arquivo com o nome de frozenorb.lua e adicione: function onUse(cid, item, frompos, item2, topos) spellName = "SUA SPELL" -- Nome da spell if getPlayerStorageValue(cid, 99998) <= 0 then setPlayerStorageValue(cid, 99998, 1) doPlayerSendTextMessage(cid, 20, "You received permission to use the ".. spellName ..".") else doPlayerSendTextMessage(cid, 20, "You already have permission to use the ".. spellName .." spell.") end return TRUE end Em data/actions/actions.xml adicione: <action actionid="SUA ACTION" event="script" value="frozenorb.lua"/> A Spell ficará assim: local config = { velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido) hits = 24, -- quantos hits vai dar msg = "Frozen Orb", -- msg ao soltar a spell storage = {99998}, key = 13871, -- storage que sera utilizado pro cooldown cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro. effect1 = 36, -- efeito de distancia que vai ficar rodando effect3 = 37, -- efeito ao castar a spell effect4 = 43 -- efeito ao acertar a roda no player } --[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro. Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]] local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, 255) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1) function onTargetCreature(cid, target) doSendMagicEffect(getCreaturePosition(target), config.effect4) end setCombatCallback(combat, 4, "onTargetCreature") local arr = { {1, 1, 1}, {1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando {1, 1, 1}, } local area = createCombatArea(arr) setCombatArea(combat, area) function initEffect(position) for i = 0, 3 do local pos = {x = position.x, y = position.y, z = position.z} local dir = getPosByDir(pos, i) doSendDistanceShoot(position, dir, config.effect1) end return true end function middleEffect(uid, param, lim, count) n = count or 0 if isCreature(uid) and n < lim then for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local pos2 = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0) doSendDistanceShoot(dir, dir2, config.effect1) end doCombat(uid, combat, { pos = getCreaturePosition(uid), type = 2 }) addEvent(middleEffect, config.velocidade, uid, param, lim, n + 1) end return true end function endEffect(uid) if isCreature(uid) then for i = 0, 3 do local pos = {x = getCreaturePosition(uid).x, y = getCreaturePosition(uid).y, z = getCreaturePosition(uid).z} local dir = getPosByDir(pos, i) doSendDistanceShoot(dir, getCreaturePosition(uid), config.effect1) end end return true end function onCastSpell(cid, var) if getPlayerStorageValue(cid, config.storage[1]) >= 1 then setPlayerStorageValue(cid, config.key, os.time() + config.cooldown) local position = getCreaturePosition(cid) doCreatureSay(cid, config.msg, 20) addEvent(endEffect, 8.55 * 1000, uid) doSendMagicEffect(position, config.effect3) initEffect(position) addEvent(middleEffect, 200, cid, var, config.hits) else doPlayerSendCancel(cid, "Desculpe,Você tem que comprar a permissao para usar está magia.") end return true end ATENÇÃO: no frozenorb.lua note que há: spellName = "SUA SPELL" -- Nome da spell Onde está SUA SPELL, você procura a spell no spells.xml e veja o nome dela em: <instant name="AQUI VAI ESTAR O NOME DELA". Agora na linha do actions.xml em "SUA ACTION" é a ACTIONID que você colocará no baú que o player irá dar use (pelo remeres). A Spell, basta edita-la conforme postei. Conforme pedido, EXPLICAÇÃO: O Que foi alterado? No local da spell foi acionado o storage = {99998}, Este local foi feito para que quando o player executar a ação (soltar a spell) haverá uma função buscando o storage para checar se o player possui a mesma ou não. A função que irá verificar foi adicionada, é á: if getPlayerStorageValue(cid, config.storage) >= 1 then Caso o player não tenha a storage irá retornar com a função adicionada: doPlayerSendCancel(cid, "Sorry, you have to buy permission to use this.") No seu caso eu adicionei a storage em local, pois não havia, mas caso for fazer em outra é houver já o storage, você irá acrescentar a storage na local/variavel e na hora de fazer o check storage você irá identifica-las na storage como: storage[1], storage[2], storage[3] e assim sucessivamente... E então na hora de verificar você irá fazer o check normal, setando a creature com cid e irá identificar como [1], ficando assim: cid, storage[1] cid, storage[2] cid, storage[3] Bom, é isso aí, teste ai e tente fazer a próxima. Desculpe pelo português ou qualquer erro, são 06h da manhã minha cabeça não funciona perfeitamente dshuhusdhusduhsd. Obrigado, abraços. Obs: Havia postado a spell do outro, como disse são 06hrs dbhsshduhuds, postei a sua, normalizado.2 pontos -
Stream Live tfs 1.0 e 1.2
elli e um outro reagiu a Masterlokinhon por um tópico no fórum
elli é possível sim só entender um pouco dos script do tibia eu mostro oque você tem que mudar Você tem que mudar as funções que estão em vermelho para funcionar algumas pode ser ate compatível com 0.4 tipo getThingfromPos2 pontos -
Transparência Eae galera, vim aqui pra ensinar vocês a usar a transparência no tibia, vamos começar. Primeiro você tem que ter uma versão de 0.6.5 ou superior do otclient e habilitar a feature. Para habilitar a feature você vai em game_things depois em game_things.lua e adicione isto em baixo de function load() g_game.enableFeature(GameSpritesAlphaChannel) Agora você tem que usar o Object Builder(versão 0.3.4), abra o object builder, abra seu spr/dat e bota em compile as e ative a opção transparency. Pronto, seu cliente e o server já estão aptos a receber a transparência. Agora a parte mais complicadinha, como montar a sprite com transparência para adicionar no client. Abra sua sprite no photoshop, delete todos os pixels de fundo(geralmente é rosa), deixe somente os que a sprite usa. Agora vá em opacidade e diminua para o desejado. Agora preste bem atenção, salve a imagem no formato PNG, pois ele aceita alfa. Depois vá no Object Builder, clique para abrir spr/dat, selecione a opção transparency(senão não vai reconhecer seu dat/spr), vá na sprite desejada e a adicione. Agora compile, também com a opção transparency ativada. Testei com uma outfit qualquer, resultado final: Créditos xSONYx EdMignari Baxnie1 ponto
-
E ai galerinha, estou afastado do Tibia após o encerramento das atividades na "chaitosoft" porém nestas férias estou com um projeto de OTServer 8.60 e me deparei com alguns pequenos problemas básicos referentes a revisão 3777 do executável theforgottenserver . Isto consequentemente fez com que fosse necessário efetuar pequenas correção de alguns "maus funcionamentos", lembrando que estes são alguns dos poucos erros que encontrei e estarei atualizando esta source sempre que possível além de estar aberto a sugestões para adição de alguma funcionalidade ou correção. Alterações Efetuadas Não irei descrever muito sobre o que foi feito pois pessoas poderão se utilizar disso para trapacear nos servidores. - Problema: Estouro de memória (house.cpp); - Problema: Estouro de memória (mailbox.cpp); - Função: Sistema de Cast / Live; - Edição: Remoção de "Salt" ao criar contas (permite usar simultaneamente ACC MANAGER & SITE; - Problema: Estouro de memória (game.cpp); - Edição: Sincronia entre CAST ~ ACC MANAGER; - Edição: Aceitar todas as versões de "items.otb"; - Problema: Compilação em Ubunto 12.04 - 64x bits; Sistema Operacional Recomendado Ubunto versões menores ou igual ao 12.04 com arquitetura 64x bits; Última Edição - 18/07/2015 (V.1.0); Sources - Utilize o link abaixo para efetuar o download: https://mega.co.nz/#!KgEgXAZR!4380dQWvcYjObWYSDCfvVvfghRooJ-UZ3BY8H0gdq6o Scan - Utilize o link abaixo para visualizar o scan: https://www.virustotal.com/pt/file/5c3f3ce63f9583b987690f796456a448c3d71f3ba06b247a5532cc1147be08a5/analysis/1437212639/ Créditos: Otland - (Disponibilizou as sources);1 ponto
-
[8.6 ~ 9.x ] Gesior WebGesiorMudrocK 100%
JustinnoTibianno reagiu a Mudrock por um tópico no fórum
Opa pessoal do XTIBIA tudo bem, tava editando um Gesior para o meu servidor a um tempo mais o projeto acabo dando errado por problemas técnicos, e eu fiquei com meu gesior pronto porem sem utilidade então resolvi trazer para vocês OBSERVAÇÃO : esse gesior erá de um projeto meu, finalizei ele hoje quando peguei uma base que um amigo meu me passo para ajuda-lo, e acabei implementando alguns sistemas e funções, ESSE GESIOR FOI FEITO APARTIR DOS MEUS GOSTOS, ESTOU SOMENTE DISPONIBILIZANDO-O PARA VOCÊS, PORTANTO FIQUEM A VONTADE PARA EDITAR NOMES, IMAGENS, CORES. Bugs arrumados Compatibilidade TFS 0.3 TFS 0.3.8 TFS 0.4 Download em anexo DATABASE : http://www.mediafire.com/download/w3n1nnw0gtmc2k0/mudrock.sql GESIOR : http://www.mediafire.com/download/frfgq96jawas214/mudrockwebgesior.rar Créditos MudrocK Archez Aleh Hollister Matheus ( for top level )1 ponto -
Olá a todos, venho mostrar a vocês, o Layout do site para o servidor Pokémon Oblivion, e peço a vocês opiniões sobre tudo, de cor à conteúdos e funções. Conteúdos e Funções: • Notificações de nova notícia, que seus créditos foram depositados etc... • Shop. • Diversos tutoriais (Estou pensando se o jogador é que vai mandar, e antes de ser postado vai ser revisado pela a equipe e caso aprovado, será postado). • Gestão de clã ou guild, como queiram chamar. • Informação dos torneios. • Postagem de novidades ou notícias. • Upload de foto para os usuários. E mais que podem vim a ser colocadas. Pois bem, agora que vocês já sabem o que pretendo fazer, vamos ao layout. Live-preview, site logo abaixo. Criticas são sem bem vindas, entretanto, que sejam construtivas e que me ajude a melhorar. Bem, isso é tudo, obrigado desde já, Delkawy.1 ponto
-
Tirando a hegemonia do LoL aqui... quem joga aí?1 ponto
-
~ FSouza Design
Bruno reagiu a Francisco Souza por um tópico no fórum
Avatar Anchor Avatar Boy Blue Sign SOTW #5 LOGO de meu Tumblr LOGO do canal Alpha Century que está em desenvolvimento! Sign Girls Sing In LOL Todos os trabalhos apresentados a cima são de minha autoria e qualquer cópia será caracterizado crime! (Em alguns trabalhos utilizei a mesma Background porque ela é muito linda ) Até a próxima, estarei atualizando o tópico1 ponto -
NPC Banco Não aceitar transferência para jogador No Vocation
DeCarvalho reagiu a Bruno por uma questão
Tópico movido para dúvidas / pedidos resolvidos.1 ponto -
Ooi, eu vou fazer pra vc so espera ums minutos1 ponto
-
NPC Banco Não aceitar transferência para jogador No Vocation
DeCarvalho reagiu a Mateusoo por uma questão
Olá, Posta o teu Banker.lua por favor... Abraço.1 ponto -
NPC Banco Não aceitar transferência para jogador No Vocation
DeCarvalho reagiu a Bruno por uma questão
Editei o conteúdo, testa outra por gentileza. Abs.1 ponto -
@, Em nome da comunidade agradeço pelo conteúdo, muito obrigado Não só por este, mas por todos! Abraço!1 ponto
-
Vdd dlç.. não tinha percebido isso... mudei o ID das walls ficou perfeito! funcionando sem erros.1 ponto
-
Duvida de edição slot system
surfnament reagiu a Night Wolf por um tópico no fórum
ele tá com chances iguais pra todos os atributos: local l = choose('hp','mp','ml','cas','shield','dist') todos tem 1/6 de chance de entrar. Oque dá pra fazer é escrever mais de uma vez outros atributos pra dar prioridade maior pra eles: local l = choose('hp','mp','ml','cas','shield','dist', 'ml','cas','shield','dist') Dessa forma hp e mp ficam com 10% cada e os outros com 20% cada;1 ponto -
~ FSouza Design
Francisco Souza reagiu a Bruno por um tópico no fórum
Eu curti ambos os trabalhos, meus parabéns, você tem talento Abraço!1 ponto -
NPC Banco Não aceitar transferência para jogador No Vocation
DeCarvalho reagiu a Bruno por uma questão
Tenta assim:1 ponto -
End Vip E Efeito Vip
williamserravalle reagiu a Bruno por uma questão
Olha man, eu editei o FimVip, testa ai... Sua outra dúvida eu não entendi. Vamos por parte, tentar resolver primeiro a proposta do tópico.1 ponto -
BattleField TFS 1.1+
tiagoduuarte reagiu a Vodkart por um tópico no fórum
isso é simples, você adiciona no MAPA EDITOR as parades, configura no script o ID delas e POS, quando começar o evento a função vai checar se tem realmente as paredes naquele lugar q vc configurou, caso não tiver, vai cria-las. vou fazer isso então, só vou adc uma storage igual eu fiz no map changer. qndo eu atualizar aviso1 ponto -
fico feliz que esteja usando meu projeto como seu WebSite, boa sorte ai com o servidor1 ponto
-
Ah tá, erro meu então, vou arrumar aqui, já sei o que é.. Edit: agora vai! kkkk1 ponto
-
@, Vá em data/actions/actions.xml e adicione a seguinte tag: <action actionid="21137" event="script" value="prizeQuest.lua" />Agora em data/actions/scripts crie o arquivo prizeQuest.lua com o seguinte conteúdo: local config = { storage = 115900, -- storage da quest preco = 40000000, -- valor que ele precisa ter para quest (40kk neste caso) item = 9999, -- id do item qtd = 1, -- quantidade do item msgWin = 'Voce ganhou um Super Healing.', -- mensagem ao fazer a quest msgMoney = 'Voce precisa de 40kk para fazer essa quest.', -- mensagem se o player não tiver dinheiro suficiente msgDone = 'Esta Vazio . Vc Ja Fez A Quest.' -- mensagem caso ja fez a quest } function onUse(cid, item, frompos, item2, topos) local queststatus = getPlayerStorageValue(cid, config.storage) if queststatus <= 0 then if doPlayerRemoveMoney(cid, config.preco) then doPlayerSendTextMessage(cid, 22, config.msgWin) doPlayerAddItem(cid, config.item, config.qtd) setPlayerStorageValue(cid, config.storage, 1) return true else doPlayerSendTextMessage(cid, 22, config.msgMoney) return true end else doPlayerSendTextMessage(cid, 22, config.msgDone) end return true endAgora basta colocar a actionid 21137 no baú (ou se já estiver sendo usada, basta alterar na tag e adicionar no baú).1 ponto
-
@@Neymar Jr, Tente assim: Vá em data/actions/actions.xml e adicione a tag: <action actionid="2135" event="script" value="doorItem.lua"/>Agora em data/actions/scripts crie um arquivo chamado doorItem.lua com o seguinte conteúdo: Agora basta colocar a action 2135 (ou outra que você configurou) na porta.1 ponto
-
Sign of the Week #5
Lumus reagiu a Francisco Souza por um tópico no fórum
Opa, quase perco o tempo, vou participar também Boa sorte a todos!1 ponto -
End Vip E Efeito Vip
williamserravalle reagiu a Bruno por uma questão
@, Sistema: FimVip: EfeitoVip:1 ponto -
Duvida sobre [VIP] não sair do nick
Night Wolf reagiu a RigBy por uma questão
Quando loga e a vip tiver acabado, vai tirar o nome [VIP] Creaturescript: .lua function onLogin(cid) local name = string.gsub(""..getCreatureName(cid).."", ".VIP. ", "") if getPlayerStorageValue(cid, 13704) <= 0 then if getCreatureName(cid) ~= name then db.executeQuery("UPDATE `players` SET `name` = '"..name.."' WHERE `id` = "..getPlayerGUID(cid)..";") addEvent(doRemoveCreature, 2*1000, cid, true) end end return true end .xml <event type="login" name="RemoveName" event="Nome_do_Scriptt"> Login.lua antes do ultimo return true registerCreatureEvent(cid, "RemoveName")1 ponto -
DHQuest Room Revamped
Marco Oliveira reagiu a HadesBR por um tópico no fórum
Demon Helmet Quest Room Revamped! Resolvi dar uma mudada em algumas areas que são iguais na maioria dos mapas pra ficar mais legal e estou compartilhando essa ai... Versão: 8.60 Screenshot: Download: MediaFire "O SCAN"1 ponto -
Assim deve quebrar o item toda vez que ele não conseguir o upgrade. É só substituir esse código pelo upgradesystem.lua original. Qualquer problema, avisa aí.1 ponto
-
Base Otpokemon V1
XxHenriquexX reagiu a Yan Oliveira por um tópico no fórum
As sprites são muiito legais, principalmente do Salamance... só não curti a depot, mas ótimo conteúdo .1 ponto -
Segue uma lista para download com os principais clientes de Tibia ainda utilizados. Tibia 10.79 Tibia 10.76 Tibia 10.37 Tibia 8.60 Tibia 8.54 Tibia 8.00 Tibia 7.72 Tibia 7.60 Tibia 7.4 Todos os links são do site tibia.sx. Lá todos os outros clientes poderão ser baixados.1 ponto
-
Olá Xtibianos. Hoje irei postar um tópico aqui no Xtibia que ensina a resolver o problema que ocorre em muitos servidores (quase todos, principalmente nos baiaks). O problema é aquele do exit trainer, que o player loga, vá no trainer e dá exit. Sendo assim, o char fica online e não desloga, e por esse motivo você toma ban no OT Serv List pelo motivo de "Spoofing". Pra quem não quiser tomar ban no OT Serv List por esse motivo, então siga o tutorial abaixando explicando como resolver esse problema. Vá em Pasta do seu OT -> data -> creaturescripts -> creaturescripts.xml: <!-- Idle --> <event type="think" name="Idle" event="script" value="idle.lua"/> Agora vá em Pasta do seu OT -> data -> creaturescripts -> scripts -> idle.lua: local config = { idleWarning = getConfigValue('idleWarningTime'), idleKick = getConfigValue('idleKickTime') } function onThink(cid, interval) if(getTileInfo(getCreaturePosition(cid)).nologout or getCreatureNoMove(cid) or getPlayerCustomFlagValue(cid, PlayerCustomFlag_AllowIdle)) then return true end local idleTime = getPlayerIdleTime(cid) + interval doPlayerSetIdleTime(cid, idleTime) if(config.idleKick > 0 and idleTime > config.idleKick) then doRemoveCreature(cid) elseif(config.idleWarning > 0 and idleTime == config.idleWarning) then local message = "You have been idle for " .. math.ceil(config.idleWarning / 60000) .. " minutes" if(config.idleKick > 0) then message = message .. ", you will be disconnected in " local diff = math.ceil((config.idleWarning - config.idleKick) / 60000) if(diff > 1) then message = message .. diff .. " minutes" else message = message .. "one minute" end message = message .. " if you are still idle" end doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, message .. ".") end return true end Para finalizar, agora vá em Pasta do seu OT -> data -> creaturescripts -> scripts -> login.lua: registerCreatureEvent(cid, "Idle") Para você alterar o tempo do exit, basta você abrir o config.lua e configura-la nessa parte: idleWarningTime = 9 * 60 * 1000 idleKickTime = 10 * 60 * 1000 Pronto! Problema solucionado! Os créditos do script eu não sei, pois eu peguei ele do meu servidor, só que o script faltava uma parte para funcionar, então eu adicionei essa parte. Então é isso! até mais!1 ponto
-
Como Colocar Fast Atack No Seu Otserv!
Marco Oliveira reagiu a popota por um tópico no fórum
Bom pessoal , aqui vou falar como você coloca Fast Atack no seu Ot! Va no arquivo vocations.xml, clique com o botão direito e dpois em editar. Vai estar mais o menus assim: <?xml version="1.0"?> <vocations> <vocation id="0" name="None" description="a rookie" gaincap="5" gainhp="5" gainmana="5" gainhpticks="6" gainhpamount="1" gainmanaticks="6" gainmanaamount="10" gainsoulticks="120" gainsoulamount="1" maxsoul="100" manamultiplier="4.0" attackspeed="700" prevoc="0" basespeed="220"> <diepercent experience="7" magic="7" skill="7" equipment="7" container="100"/> <formula damage="1.2" defense="1.1" armor="1.1"/> <skill id="0" multiplier="1.5"/> <skill id="1" multiplier="2.0"/> <skill id="2" multiplier="2.0"/> <skill id="3" multiplier="2.0"/> <skill id="4" multiplier="2.0"/> <skill id="5" multiplier="1.5"/> <skill id="6" multiplier="1.1"/> </vocation> Aqui peguei a vocation none , veja onde esta escrito: attackspeed="700" No lugar de 700 coloque 200 e ira ficar assim: attackspeed="200" Faça isso em todas as vocações e está Pronto ! Ps: Se não der certo, dê ctrl+alt+del Vá em processos , procure o nome do seu Otserv , clique com o botão direito e vá em definir propriedade , coloque Tempo Real e está pronto!1 ponto