Líderes
-
luanluciano93
HéroiPontos5981Total de itens -
-
-
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/03/15 em todas áreas
-
[TFS 1.x] Removendo House por Tempo OFF
[TFS 1.x] Removendo House por Tempo OFF
stauro e 9 outros reagiu a luanluciano93 por uma resposta no tópico
10 pontosOlá, esse script é usada para que o player que fique offline pelo tempo editado, perca a house automaticamente. Em globalevents/scripts/ crie um arquivo chamado doCheckHouses.lua e coloque esse código dentro: -- <globalevent type="startup" name="doCheckHouses" script="doCheckHouses.lua" /> local function doCheckHouses() local dias = 3 local tempo = os.time() - (dias * 24 * 60 * 60) local registros = db.storeQuery("SELECT `houses`.`owner`, `houses`.`id` FROM `houses`,`players` WHERE `houses`.`owner` != 0 AND `houses`.`owner` = `players`.`id` AND `players`.`lastlogin` <= " .. tempo .. ";") if registros ~= false then local count = 0 print('house leave code') repeat count = count + 1 local owner = result.getNumber(registros, "owner") local houseId = result.getNumber(registros, "id") local house = House(houseId) if house and (owner > 0) then print(house:getName()) house:setOwnerGuid(0) end until not result.next(registros) print('house leave house count:' .. count) result.free(registros) end end function onStartup() addEvent(doCheckHouses, 60 * 1000) return true end A tag do globalevents.xml esta no script como comentário, é só adiciona-lá. Para editar o tempo (em dias) que se o jogador ficar offline ele perderá a house é nessa linha: local dias = 3 OBS: Esse script é iniciado junto com o servidor, logo após aparecerá na distro as houses removidas e a quantidade total. Créditos: Luan e Cristofer.10 pontos -
[TFS 1.x] Anti-Magebomb
[TFS 1.x] Anti-Magebomb
Perl e 8 outros reagiu a luanluciano93 por uma resposta no tópico
9 pontosBom, esse script limita uma quantidade de MC logados por IP, podendo evitar várias coisas, como por exemplo o magebomb. Basta criar um arquivo em creaturescript/scripts/ com o nome anti-magebomb.lua e coloque esse código dentro: -- <event type="login" name="Anti-Magebomb" script="anti-magebomb.lua"/> local AccPorIp = 2 function onLogin(player) local mc = 0 for _, verificar in ipairs(Game.getPlayers()) do if player:getIp() == verificar:getIp() then mc = mc + 1 if mc > AccPorIp then return false end end end return true end A tag do creaturescript.xml já esta como comentário no script, é só copiar. É isso, espero ter ajudado.9 pontos -
Piso que seta condição de POX ao jogador.
Piso que seta condição de POX ao jogador.
p e o p l e e 2 outros reagiu a Snowsz por uma resposta no tópico
3 pontosEm movements/scripts crie um arquivo chamado tilepox.lua e coloque isso dentro: local config = { time = 30, --Tempo em minutos. minHit = -10, --Dano mínimo. maxHit = -120, --Dano máximo. startValue = -5, --Valor do primeiro dano. hitInterval = 3000, --Intervalo entre os danos. storage = 6545 --Storage usada pelo jogador. } local condition = Condition(CONDITION_POISON) condition:setParameter(CONDITION_PARAM_TICKS, config.time*1000*60) condition:setParameter(CONDITION_PARAM_DELAYED, true) condition:setParameter(CONDITION_PARAM_MINVALUE, config.minHit) condition:setParameter(CONDITION_PARAM_MAXVALUE, config.maxHit) condition:setParameter(CONDITION_PARAM_STARTVALUE, config.startValue) condition:setParameter(CONDITION_PARAM_TICKINTERVAL, config.hitInterval) condition:setParameter(CONDITION_PARAM_FORCEUPDATE, true) function onStepIn(player, item, position, lastPosition, fromPosition, toPosition, actor) if not player:isPlayer() then return true end player:addCondition(condition) player:setStorageValue(config.storage, 1) addEvent(function() if player:isPlayer() then player:addHealth(-player:getHealth()) end end, config.time*1000*60) return true end Tag do movements.xml se quiser com Actionid: <movevent event="StepIn" actionid="ID DA ACTIONID AQUI" script="tilepox.lua"/> Tag do movements.xml se quiser com Uniqueid: <movevent event="StepIn" uniqueid="ID DO UNIQUEID AQUI" script="tilepox.lua"/> Em creaturescripts/scripts crie um arquivo chamado tilepox.lua e coloque isso dentro: local storage = 6545 --Storage usada pelo jogador, a storage deve ser a mesma que usada no tile de POX. function onLogin(player) if player:getStorageValue(storage) >= 1 then player:setStorageValue(storage, 0) end return true end function onLogout(player) if player:getStorageValue(storage) >= 1 then player:sendCancelMessage("You cannot logout, while is poisoned.") return false end return true end Tag creaturescripts: <event type="login" name="PoxLogin" script="tilepox.lua"/> <event type="logout" name="PoxLogout" script="tilepox.lua"/> Obs: não testei.3 pontos -
[8.60] Baiak ROX ! Editado By DeathRocks [Cast + Wars System]
[8.60] Baiak ROX ! Editado By DeathRocks [Cast + Wars System]
Veigh reagiu a DeathRocks por uma resposta no tópico
1 pontoEae Galera do TibiaKing É o seguinte Hoje trago a vocês o Baiak Rox Editado por Min Espero que Gostem Oque eu Fiz ? | Novo Visual do Templo Totalmente ICE | Critical System | Task System | Dodge System | Run Event (CORRIDA MALUCA) | Reset System (ÁREA EXCLUSIVA COM CASTELO E HUNTS) para resetar fale !reset | Guild Frags System ( ACESSO AO PROMOTE E ITENS EXCLUSIVOS ) | War System (100% RODANDO EM SQLITE) | Cast System (100% Roda em Mysql ) ( Para Ativar vai em Config.lua e ache | enableCast = false | mude para true ) Duvidas entrem em http://www.tibiaking...os-na-distro/ | PvP Balanceado Agora com mais RPG | Armas Arrumadas Para Melhor PvP | Varios Eventos Automaticos | Battle Field Event | Capture The Flag Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Distro 0.4 Rodando 100% ( Se For 64x Bits) | Refinamento ( Aprimora seus Equipamentos ) | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Outras Coisas | SENHA DO GOD: rox/styller | Aqui Vai Umas Prints | Castelo Reset System | Nova Imagem do Templo | Área Donate | Mostra de Itens Donate + Eventos | Download | Scan | Créditos | Gostou ? Então dei um REP1 ponto -
Auto-Backup Database
Auto-Backup Database
Trunksontibia reagiu a Natanael Beckman por uma resposta no tópico
1 pontoGalera esse script é um auto backup da sua database, quem gosta de prevenir vamos ao tutorial. Backup.sh Criei uma pasta em qualquer local no linux, no meu caso eu fiz uma pasta com o nome database que está localizada na pasta home. home/database/backup.sh Certo vamos configura o arquivo, dentro dele já vem tudo explicado mais vou dar um reforço, dentro do arquivo backup.sh contém: #!/bin/bash CAMINHO="/home/database/" <--- local onde vai ficar salvo os backups NOMEBACKUP="server-backup" <--- nome do backup USER="root" <--- não mexe SENHA="nitendo64" <--- senha da database BANCO="casa_blanca" <--- nome da database #Nao mexer daqui pra baixo TEMPO="$(date +'%d-%m-%Y-%H-%M')" ##### #Rodando o backup ##### if [[ -z "$USER" || -z "$SENHA" || -z "$BANCO" ]]; then echo "Por favor preencha o usuário, senha e banco de dados nas configurações." else mysqldump -u$USER -p$SENHA $BANCO > $CAMINHO"/"$NOMEBACKUP"-"$TEMPO".sql" fi Certo configurado né, vamos fazer um teste: Acessa a pasta: cd /home/database Da permissão pros arquivos dentro dela, no caso o backup.sh: chmod 777 -R * Roda o script pra um teste: ./backup.sh Veja na imagem do meu teste, já aparece ali a database, então ta ok deu certo as configurações: Tudo bem, agora vamos configura pra ficar automático, pra todos os dias o script executar o backup em um certo horário: crontab -e Se aparecer algo tipo seleciona alguma opção, selecione Nano, que provavelmente seja numero 2... ---------------------------------------------------------------------------------- Se não aparecer vai direto pra isso: Digite isso dentro do nano, como você ver na imagem acima já tem adicionado: 0 6,21 * * * sh /home/database/backup.sh ctrl+x y da ENTER No meu caso botei pro script ser executado as 06:00hrs e 21:00hrs, então todo os dias nesse horário o script vai fazer o backup pra essa pasta que configurei, caso queria mudar o horário a logica do comado é clara né. Caso queria deixar de minutos em minutos abaixo observe um exemplo de 5 em 5 minutos: */5 * * * * sh /home/database/backup.sh Caso queria deixar de horas em horas abaixo observe um exemplo de 1 em 1 hora: 0 */1 * * * sh /home/database/backup.sh Qualquer duvida postem, clica em GOSTEI, valeu. Créditos total: Joffily Ferreira1 ponto -
Dodge System 8.54+
Dodge System 8.54+
Leo Zanin reagiu a xWhiteWolf por uma resposta no tópico
1 pontoAe galera do TK, uns caras ficaram me mandando PM pedindo esse sistema aqui.. aparentemente tem em algum server e eles queriam replicar o sistema no OT deles. Não sei como funciona no outro server mas no script que eu fiz vai funcionar assim: Serão 100 livros que você poderá comprar de um npc específico, cada livro te dá 1 ponto a mais na skill Dodge e isso acarreta em 0.3% de chance a mais de desviar de um golpe e tomar só 50% de dano. Infelizmente eu nunca joguei no servidor que foi o pioneiro desse sistema (na vdd eu nem sei qual é) então eu não fiz igual o deles, na realidade o meu só funciona ao perder vida então se o mago usar utamo vita acabou os dodge's dele. Outra coisa importante é que o player tem uma chance rara de dar Dodge no Dodge, ou seja, levando 1/4 do dano. Só vai funcionar para ataques de criaturas, tanto melee quanto spells, ou seja, se o cara passar no fogo não tem chance dele desviar do dano Sem mais delongas, vamos ao script: Crie um arquivo chamado dodge.lua na pasta creaturescripts\scripts e coloque isso dentro dele: agora adicione essa linha no creaturescripts.xml: <event type="statschange" name="dodge" event="script" value="dodge.lua"/> em creaturescripts\scripts\login.lua adicione isso antes do ultimo return true: registerCreatureEvent(cid, "dodge") if getPlayerStorageValue(cid, 48902) == -1 then setPlayerStorageValue(cid, 48902, 0) end agora vá em actions.xml e adicione essa linha aqui: <action itemid="1950" script="dodgebook.lua"/> note que vc pode mudar o ID do livro a hora que vc quiser. em items.xml, procure o item com o ID que vc irá utilizar e deixe ele assim: <item id="1950" article="a" name="Skill Book [DODGE]"> <attribute key="weight" value="1300" /> </item> agora crie um arquivo chamado dodgebook em actions\scripts e coloque isso dentro dele: local config = { minlevel = 150, --- level que precisa pra comprar o livro price = 10000, --- preço do livro itemid = 1950 --- ID DO LIVRO } --- end config function getDodgeSkill(cid) dodgeskill = getPlayerStorageValue(cid, 48902) return dodgeskill end local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} -- OTServ event handling functions start function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end -- OTServ event handling functions end function creatureSayCallback(cid, type, msg) -- Place all your code in here. Remember that hi, bye and all that stuff is already handled by the npcsystem, so you do not have to take care of that yourself. if (not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'skill book') then if getDodgeSkill(cid) == dodgeskill then selfSay('You want to buy Skill Book [DODGE]? It will cost '..config.price..' gp\'s!', cid) talkState[talkUser] = 1 else selfSay('I couldnt acess your data bank!', cid) end elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if getPlayerMoney(cid) < config.price then selfSay('Its necessary to have at least '..config.price..' gp\'s in order to buy the Skill Book!', cid) elseif getPlayerLevel(cid) < config.minlevel then selfSay('The minimum level for buying this skill book is '..config.minlevel..'!', cid) else doPlayerRemoveMoney(cid,config.price) doPlayerAddItem(cid, config.itemid, 1, TRUE) end talkState[talkUser] = 0 elseif(msgcontains(msg, 'no')) and isInArray({1}, talkState[talkUser]) == TRUE then talkState[talkUser] = 0 selfSay('Ok.', cid) elseif msgcontains(msg, 'level') then selfSay('You have Leveled your Dodge Skill to ['..getDodgeSkill(cid)..'/100].', cid) end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) lembrando que no começo vc pode editar o preço, o level que precisa pra comprar a skill e o ID do livro que será usado (USE O MESMO ID NO ITEMS.XML E NO ACTIONS.) agora crie o npc dodgeseller.xml e coloque isso nele: <npc name="Dodge Skill Seller" script="data/npc/scripts/bookseller.lua" access="5" lookdir="1"> <health now="1000" max="1000"/> <look type="133" head="95" body="86" legs="86" feet="38" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|. I've been waiting for you to come.. Say 'skill book' or 'level'" /> <parameter key="message_farewell" value="Cya folk." /> <parameter key="message_walkaway" value="How Rude!" /> </parameters> </npc> Explanações gerais: O sistema é bem simples (muito simples mesmo), ele pega o valor do storage do cara e multiplica por 3.. se isso for maior que um numero aleatório criado entre 0 e 1000 ele dá dodge e solta os efeitinhos lá do creaturescripts. Note que no nivel máximo o cara vai ter 100 de storagevalue e isso será multiplicado por 3 resultando em 300. Se 300 for maior que um valor aleatorio entre 0 e 1000 (30% de chance) você vai tomar apenas metade do dano. Vc pode editar a vontade e melhorar ele da forma que quiser, se vc quiser que todos os danos do player sejam passíveis de serem esquivados mude aqui: if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then apenas retirando esse and isCreature(attacker), daí até dano de firefield vai dar pra dar dodge. Se você quiser adicionar classes que poderão usar (só knights e paladins por exemplo) só colocar isInArray({3,4,7,8}, getPlayerVocation(cid)) como condição na action. E se vc quiser que mago possa dar dodge mesmo com utamo vita (OQUE NÃO FAZ MUITO SENTIDO JÁ QUE O ESCUDO DE MANA FICA EM VOLTA DO PLAYER TEORICAMENTE, MAS TUDO BEM) é só colocar if type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS and isCreature(attacker) then Se você quiser que só ataques de Players sejam desviados ou só ataques de monstros é só trocar isCreature(attacker) por isMonster(attacker) ou isPlayer(attacker). Bom, isso é tudo, espero que vcs tenham curtido e qualquer coisa é só comentar ou me dar um Rep que ajuda pra caralho. Um abraço pra vocês. EDIT: Arrumei o problema de o npc não dar bye automáticamente qnd o player se afasta, bugando em algumas versões e impedindo de conversar com outros npcs. Apenas substituam o arquivo em scripts pela versão atualizada, grato.1 ponto -
ShopGuild TFS 1.0
ShopGuild TFS 1.0
diff reagiu a Natanael Beckman por uma resposta no tópico
1 pontoShop Guild TFS 1.0 Bom, vamos ao sistema: Em talkactions.xml, adicione a tag abaixo: <talkaction words="!guildpoints" separator=" " script="guildpoints.lua"/> Na pasta talkactions/scripts faça um .lua com o nome guildpoints e dentro dele adicione os coder abaixo: local config = { executeInterval = 24, minimumLevel = 80, membersNeeded = 10, minimumDifferentIps = 6, pointAmount = 9 } local function getValidAccounts(guild) local resultId = db.storeQuery('SELECT a.`id` FROM `accounts` a, `guild_membership` m, `players` p WHERE m.`guild_id` = ' ..guild:getId() .. ' AND p.`id` = m.`player_id` AND p.`level` > ' .. config.minimumLevel .. ' and a.`id` = p.`account_id` AND a.`guild_points_stats` = 0 GROUP BY a.`id`;') if resultId == false then return {} end local accounts = {} repeat table.insert(accounts, result.getDataInt(resultId, 'id')) until not result.next(resultId) result.free(resultId) return accounts end function onSay(cid, words, param) local player = Player(cid) local guild = player:getGuild() if not guild or player:getGuildLevel() ~= GUILDLEVEL_LEADER then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only guild leader can request points.') return false end local resultId = db.storeQuery('SELECT `last_execute_points` FROM `guilds` WHERE id = ' .. guild:getId()) if resultId == false then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendCancelMessage('Error while running database query.') return false end local lastExecution = result.getDataInt(resultId, 'last_execute_points') result.free(resultId) if lastExecution >= os.time() then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'The command can only be run once every ' ..config.executeInterval .. ' hours.') return false end local members = guild:getMembersOnline() for i = #members, 1, -1 do if members[i]:getLevel() < config.minimumLevel then table.remove(members, i) end end if #members < config.membersNeeded then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only ' .. #members .. ' guild members online, you need ' ..config.membersNeeded .. ' guild members with level ' .. config.minimumLevel .. ' or higher.') return false end local ipDictionary, ipCount = {}, 0 for i = 1, #members do local ip = members[i]:getIp() if not ipDictionary[ip] then ipDictionary[ip] = true ipCount = ipCount + 1 end end if ipCount < config.minimumDifferentIps then player:getPosition():sendMagicEffect(CONST_ME_POFF) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, 'Only ' .. ipCount .. ' members are valid, you need ' ..config.minimumDifferentIps .. ' players with different ip addresses.') return false end local validAccounts = getValidAccounts(guild) db.query('UPDATE `guilds` SET `last_execute_points` = ' .. (os.time() + config.executeInterval * 3600) .. ' WHERE `guilds`.`id` = ' .. guild:getId() .. ';') player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, #validAccounts .. ' guild members received points.') if #validAccounts > 0 then db.query('UPDATE `accounts` SET `guild_points` = `guild_points` + ' .. config.pointAmount .. ', `guild_points_stats` = ' .. os.time() .. ' WHERE `id` IN (' .. table.concat(validAccounts, ',') .. ');') for i = 1, #members do local member = members[i] if isInArray(validAccounts, member:getAccountId()) then member:sendTextMessage(MESSAGE_INFO_DESCR, 'You received ' .. config.pointAmount .. ' guild points.') end end end return false end No coder acima bem no inicio tem as linhas seguintes para configurar: executeInterval = 24, ( Intervalo para execução do comando, ae está de 24 em 24hrs) membersNeeded = 10, (Quantos players é preciso está online para poder executar o comando.) minimumDifferentIps = 6, (Quantos IPS diferentes são necessários para executar o comando no exemplo ae tem 6.) minimumLevel = 80, (Aqui adicione o level minimo, é necessário que todos os player da guild tenha o level pedido para o lider executar o comando.) pointAmount = 9, (Aqui é a quantidade de pontos para adicionar em cada player da guild.) Em data/globalevents/scripts crie um arquivo chamado shopguild.lua e adicione o code a seguir: -- ### CONFIG ### -- message send to player by script "type" (types you can check in "global.lua") SHOP_MSG_TYPE = 18 -- time (in seconds) between connections to SQL database by shop script SQL_interval = 30 -- ### END OF CONFIG ### function onThink(interval, lastExecution) local result_plr = db.storeQuery("SELECT * FROM z_ots_guildcomunication") if(result_plr ~= false) then repeat local id = tonumber(result.getDataInt(result_plr, "id")) local action = tostring(result.getDataString(result_plr, "action")) local delete = tonumber(result.getDataInt(result_plr, "delete_it")) local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name"))) if(cid) then local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1")) local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2")) local container_id = tonumber(result.getDataInt(result_plr, "param3")) local container_count = tonumber(result.getDataInt(result_plr, "param4")) local add_item_type = tostring(result.getDataString(result_plr, "param5")) local add_item_name = tostring(result.getDataString(result_plr, "param6")) local received_item = 0 local full_weight = 0 if(add_item_type == 'container') then container_weight = getItemWeight(container_id, 1) if(isItemRune(itemtogive_id)) then items_weight = container_count * getItemWeight(itemtogive_id, 1) else items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeight(itemtogive_id, itemtogive_count) if(isItemRune(itemtogive_id)) then full_weight = getItemWeight(itemtogive_id, 1) else full_weight = getItemWeight(itemtogive_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if(full_weight <= free_cap) then if(add_item_type == 'container') then local new_container = doCreateItemEx(container_id, 1) local iter = 0 while(iter ~= container_count) do doAddContainerItem(new_container, itemtogive_id, itemtogive_count) iter = iter + 1 end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) received_item = doPlayerAddItemEx(cid, new_item) end if(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.') db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '..SQL_interval ..' seconds to get it.') end end until not result.next(result_plr) result.free(result_plr) end return true end Em data/globalevents/globalevents.xml adicione a seguinte tag: <globalevent name="shopguild" interval="300" event="script" value="shopguild.lua"/> Certo, a parte do servidor é esta, ta feita, vamos adicionar a database o coder a seguir: ALTER TABLE `accounts` ADD `guild_points` INTEGER(11) NOT NULL DEFAULT 0; ALTER TABLE `accounts` ADD `guild_points_stats` INT NOT NULL DEFAULT '0'; ALTER TABLE `guilds` ADD `last_execute_points` INT NOT NULL DEFAULT '0'; CREATE TABLE `z_shopguild_offer` ( `id` int(11) NOT NULL auto_increment, `points` int(11) NOT NULL default '0', `itemid1` int(11) NOT NULL default '0', `count1` int(11) NOT NULL default '0', `itemid2` int(11) NOT NULL default '0', `count2` int(11) NOT NULL default '0', `offer_type` varchar(255) default NULL, `offer_description` text NOT NULL, `offer_name` varchar(255) NOT NULL, `pid` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)) CREATE TABLE `z_shopguild_history_item` ( `id` int(11) NOT NULL auto_increment, `to_name` varchar(255) NOT NULL default '0', `to_account` int(11) NOT NULL default '0', `from_nick` varchar(255) NOT NULL, `from_account` int(11) NOT NULL default '0', `price` int(11) NOT NULL default '0', `offer_id` int(11) NOT NULL default '0', `trans_state` varchar(255) NOT NULL, `trans_start` int(11) NOT NULL default '0', `trans_real` int(11) NOT NULL default '0', PRIMARY KEY (`id`)) CREATE TABLE `z_shopguild_history_pacc` ( `id` int(11) NOT NULL auto_increment, `to_name` varchar(255) NOT NULL default '0', `to_account` int(11) NOT NULL default '0', `from_nick` varchar(255) NOT NULL, `from_account` int(11) NOT NULL default '0', `price` int(11) NOT NULL default '0', `pacc_days` int(11) NOT NULL default '0', `trans_state` varchar(255) NOT NULL, `trans_start` int(11) NOT NULL default '0', `trans_real` int(11) NOT NULL default '0', PRIMARY KEY (`id`)) CREATE TABLE IF NOT EXISTS `z_ots_guildcomunication` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `type` varchar(255) NOT NULL, `action` varchar(255) NOT NULL, `param1` varchar(255) NOT NULL, `param2` varchar(255) NOT NULL, `param3` varchar(255) NOT NULL, `param4` varchar(255) NOT NULL, `param5` varchar(255) NOT NULL, `param6` varchar(255) NOT NULL, `param7` varchar(255) NOT NULL, `delete_it` int(2) NOT NULL DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13107; Olha estamos quase finalizando tudo, só precisamos terminar a parte de web. O meu GuildShop eu copiei meu shopsystem.php e fiz umas modificações, simples você pode fazer o mesmo é menos trabalhoso. Copie o shopsystem.php renomeie para shopguild.php, após abra-o e modifique como manda a seguir: shop_system para shopguild_system premium_points para guild_points premium points para guild points z_shop_offer para z_shopguild_offer shopsystem para shopguild z_shop_history_pacc para z_shopguild_history_pacc z_shop_history_item para z_shopguild_history_item z_ots_comunication para z_ots_guildcomunication Ou utilize este já pronto: shopguild.php O shopguildadmin.php está no link abaixo, basta fazer o mesmo procedimento: shopguildadmin.php Em index.php add: case "shopguild"; $topic = "Shop Guild"; $subtopic = "shopguild"; include("shopguild.php"); break; case "shopguildadmin"; $topic = "ShopGuild Admin"; $subtopic = "shopguildadmin"; include("shopguildadmin.php"); break; Vá em config.php adicione: $config['site']['shopguild_system'] = 1; $config['site']['access_adminguild_panel'] = 9; Vá em layouts.php adicione abaixo de buypoints: <a href='?subtopic=shopguild'> <div id='submenu_shopguild' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)'onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_shopguild' class='ActiveSubmenuItemIcon'style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'>Shop Guild</div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Em layouts.php add depois do shopadmin: if($group_id_of_acc_logged >= $config['site']['access_adminguild_panel']) echo "<a href='?subtopic=shopadmin'> <div id='submenu_shopguildadmin' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)'onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_shopguildadmin' class='ActiveSubmenuItemIcon'style='background-image:url(".$layout_name."/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>! ShopGuild Admin !</font></div> <div class='RightChain' style='background-image:url(".$layout_name."/images/general/chain.gif);'></div> </div> </a>"; Em shopsystem.php procure por: elseif($action == 'show_history') { if(!$logged) { $main_content .= 'Please login first.'; } else{ $items_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($items_history_received)) { foreach($items_history_received as $item_received) { if($account_logged->getId() == $item_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $items_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$item_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $item_received['from_account']) $items_received_text .= '<i>Your account</i>'; else $items_received_text .= $item_received['from_nick']; $items_received_text .= '</td><td>'.$item_received['offer_id'].'</td><td>'.$item_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $item_received['trans_start']).'</td>'; if($item_received['trans_real'] > 0) $items_received_text .= '<td>'.date("j F Y, H:i:s",$item_received['trans_real']).'</td>'; else $items_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $items_received_text .= '</tr>'; } } $paccs_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccs_history_received)) { foreach($paccs_history_received as $pacc_received) { if($account_logged->getId() == $pacc_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccs_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$pacc_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $pacc_received['from_account']) $paccs_received_text .= '<i>Your account</i>'; else $paccs_received_text .= $pacc_received['from_nick']; $paccs_received_text .= '</td><td>'.$pacc_received['pacc_days'].' days</td><td>'.$pacc_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $pacc_received['trans_real']).'</td></tr>'; } } $main_content .= '<center><h1>Transactions History</h1></center>'; if(!empty($items_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b> Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$items_received_text.'</table><br />'; if(!empty($paccs_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b> Pacc Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccs_received_text.'</table><br />'; if(empty($paccs_received_text) && empty($items_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; } } Troque por: elseif($action == 'show_history') { if(!$logged) { $main_content .= 'Please login first.'; } else{ $items_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($items_history_received)) { foreach($items_history_received as $item_received) { if($account_logged->getId() == $item_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $items_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$item_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $item_received['from_account']) $items_received_text .= '<i>Your account</i>'; else $items_received_text .= $item_received['from_nick']; $items_received_text .= '</td><td>'.$item_received['offer_id'].'</td><td>'.$item_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $item_received['trans_start']).'</td>'; if($item_received['trans_real'] > 0) $items_received_text .= '<td>'.date("j F Y, H:i:s",$item_received['trans_real']).'</td>'; else $items_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $items_received_text .= '</tr>'; } } $itemsguild_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shopguild_history_item').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($itemsguild_history_received)) { foreach($itemsguild_history_received as $itemguild_received) { if($account_logged->getId() == $itemguild_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $itemsguild_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$itemguild_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $itemguild_received['from_account']) $itemsguild_received_text .= '<i>Your account</i>'; else $itemsguild_received_text .= $itemguild_received['from_nick']; $itemsguild_received_text .= '</td><td>'.$itemguild_received['offer_id'].'</td><td>'.$itemguild_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $itemguild_received['trans_start']).'</td>'; if($itemguild_received['trans_real'] > 0) $itemsguild_received_text .= '<td>'.date("j F Y, H:i:s",$itemguild_received['trans_real']).'</td>'; else $itemsguild_received_text .= '<td><b><font color="red">Not realized yet.</font></b></td>'; $itemsguild_received_text .= '</tr>'; } } $paccs_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shop_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccs_history_received)) { foreach($paccs_history_received as $pacc_received) { if($account_logged->getId() == $pacc_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccs_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$pacc_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $pacc_received['from_account']) $paccs_received_text .= '<i>Your account</i>'; else $paccs_received_text .= $pacc_received['from_nick']; $paccs_received_text .= '</td><td>'.$pacc_received['pacc_days'].' days</td><td>'.$pacc_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $pacc_received['trans_real']).'</td></tr>'; } } $paccsguild_history_received = $SQL->query('SELECT * FROM '.$SQL->tableName('z_shopguild_history_pacc').' WHERE '.$SQL->fieldName('to_account').' = '.$SQL->quote($account_logged->getId()).' OR '.$SQL->fieldName('from_account').' = '.$SQL->quote($account_logged->getId()).';'); if(is_object($paccsguild_history_received)) { foreach($paccsguild_history_received as $paccguild_received) { if($account_logged->getId() == $paccguild_received['to_account']) $char_color = 'green'; else $char_color = 'red'; $paccsguild_received_text .= '<tr bgcolor="#F1E0C6"><td><font color="'.$char_color.'">'.$paccguild_received['to_name'].'</font></td><td>'; if($account_logged->getId() == $paccguild_received['from_account']) $paccsguild_received_text .= '<i>Your account</i>'; else $paccsguild_received_text .= $paccguild_received['from_nick']; $paccsguild_received_text .= '</td><td>'.$paccguild_received['pacc_days'].' days</td><td>'.$paccguild_received['price'].' Points</td><td>'.date("j F Y, H:i:s", $paccguild_received['trans_real']).'</td></tr>'; } } $main_content .= '<center><h1>Transactions History</h1></center>'; if(!empty($items_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b> ShopServer Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$items_received_text.'</table><br />'; if(!empty($itemsguild_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="6"><font color="white" size="4"><b> ShopGuild Item Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Offer name</b></td><td><b>Cost</b></td><td><b>Bought on page</b></td><td><b>Received on '.$config['server']['serverName'].'</b></td></tr>'.$itemsguild_received_text.'</table><br />'; if(!empty($paccs_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b> ShopServer VIP Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccs_received_text.'</table><br />'; if(!empty($paccsguild_received_text)) $main_content .= '<center><table BORDER=0 CELLPADDING=1 CELLSPACING=1 WIDTH=95%><tr width="100%" bgcolor="#505050"><td colspan="5"><font color="white" size="4"><b> ShopGuild VIP Transactions</b></font></td></tr><tr bgcolor="#D4C0A1"><td><b>To:</b></td><td><b>From:</b></td><td><b>Duration</b></td><td><b>Cost</b></td><td><b>Added:</b></td></tr>'.$paccsguild_received_text.'</table><br />'; if(empty($paccs_received_text) && empty($items_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; if(empty($paccsguild_received_text) && empty($itemsguild_received_text)) $main_content .= 'You did not buy/receive any items or PACC.'; } } Finalmente terminamos! Bom todo esse processo é feito só para facilitar tudo pra você e o player e pra diferenciar o Shop System do Shop Guild, porque um sustenta as despesas do server e o outro atrai player, porque pra ter player é preciso ter player. Galera acredito que não esteja faltando nada, espero que gostem e tudo que eu poder fazer para nossas melhoras estarei postando, me desculpem meu erros de português mais o que importa aqui é o script está correto, abraços! Créditos: Natanael Beckman Não proíbo ninguém de copia o tópico só peço que onde você adicione os créditos mencionados.1 ponto -
[TFS 1.x] Gaz'Haragoth (Heal + Magia + Teleport)
[TFS 1.x] Gaz'Haragoth (Heal + Magia + Teleport)
Nerivalhs reagiu a luanluciano93 por uma resposta no tópico
1 pontoEai pessoal, criei esse tópico para postar o script do heal e do teleport do Gaz, em breve complemento com a magia (avisa e depois solta uma magia que da hs em qualquer um). HEAL - Se o life dele chega a 50k, ele solta um aviso, e depois de 5 segundos heala 300k. Crie um arquivo em creaturescripts/scripts/ com o nome heal_gaz.lua e coloque esse código: -- <event type="healthchange" name="HealGaz" script="heal_gaz.lua"/> local config = { life_ative = 50000, life_add = 300000, seconds_ative = 5, gStorage = 90702, } local function Uheal(cid) local gaz = Monster(cid) gaz:addHealth(config.life_add) gaz:say("Gaz'haragoth HEALS himself!", TALKTYPE_MONSTER_SAY) gaz:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED) Game.setStorageValue(config.gStorage, 0) end function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin) if attacker then if creature:getHealth() < config.life_ative and Game.getStorageValue(config.gStorage) < 1 then creature:say("Gaz'haragoth beginns to draw on the nightmares to HEAL himself!", TALKTYPE_MONSTER_SAY) addEvent(Uheal, 1000 * config.seconds_ative, creature.uid) Game.setStorageValue(config.gStorage, 1) end end return primaryDamage, primaryType, secondaryDamage, secondaryType end A tag que deve add ao creaturescript.xml esta como comentário no script, é só add. Depois para funcionar no Gaz, vá até o xml dele em monster e coloque em seu código: <script> <event name="HealGaz" /> </script> TELEPORT - Quem passa em cima do corpo dos summons do boss é teleportado para perto dele. Crie um arquivo em movements/scripts/ com o nome tp_gaz.lua e coloque esse código: -- <movevent event="StepIn" itemid="22455" script="teleport_gaz.lua"/> function onStepIn(creature, item, position, fromPosition) local player = creature:getPlayer() if player == nil then return false end local monster = Creature("Gaz'Haragoth") if monster then player:teleportTo(monster:getPosition()) else player:teleportTo(fromPosition) end return true end A tag que deve add ao movements.xml esta como comentário no script, é só add. Em breve a ultima atualização.1 ponto -
~*~ 46 Chars e Battlers do Yu-Gi-Oh! (Sprites)
~*~ 46 Chars e Battlers do Yu-Gi-Oh! (Sprites)
KoDGuardian reagiu a Rezende.16 por uma resposta no tópico
1 pontoEai pessoal, tranquilo? Hoje dando continuidade a série, trago mais uma vez um material um pouco incomum, trago à vocês sprites do tão famoso anime Yu-Gi-Oh! Vamos as sprites? Conteúdo do pacote: Imagens: Download: http://www.4shared.com/rar/0Ga0-iv7ba/Sprite_de_Yu-Gi-Oh_By_Rezende1.html Scan: https://www.virustotal.com/pt/file/a62fca042f6be3fc5ef52ec7047a5fc14487979d29bd6044dd411f9c92bb60f5/analysis/1433335835/ Crédito: Xandy1608 / Metaldodomon1 ponto -
Newbaiakrox 8.60
1 pontoOlá galerinha do TK, hoje venho trazer um mapa baiak rox, modificado por min. È um mapa simples, mais começamos assim, la de baixo para um dia chegarmos la encima... Vamos lá. Obs: meu primeiro post, tentarei deixar tudo claro e bem explicado. O quê eu mudei no mapa: -> Removi 95% dos erros na distro, os outros são erros de respawns, não interfere em nada. -> Removi bugs de dar itens vips nos monstros, retirei todos, isso mesmo TODOS... -> Novo Templo -> Teleportes free modificado -> City vip 2 modificada. -> Treiner Modificado -> Look Frags -> Fast Attack equilibrado -> Itens Rox por alavanca -> Novo Set no NPC no templo -> Utito Tempo San arrumado sem exausted em outras magias. -> Nova cave ao lado do templo, que so passa por lá quem tiver Crystak Key. (Escolha uma forma de ser adquirida,pois não coloquei a venda no npc nem em lot de monstros, fica a sua escolha) -> Caves de draken no deserto. -> Sala de Boss, tp no templo.. -> Adicionei Yalahar Quest 100% funcional. -> Recarregar soft basta clicar nela. -> Varias statuas no jogo que dão um addon. Para adicionar mais statuas vá na pasta Actions e procure por addonschest e pega o ID do addon e adicione na statua que quiser. -> Recompensas por level. -> Anunciar morte de player pra player somente. -> PvpSystem. (Double Kill,Triple Kill, M M M MOSTER KILL...) -> Tutor tem roupa especial para n precisar por aquele famoso [Tutor] no nome. -> Adicionei a magia Exori Gran Con para Paladin. -> Exp do server está em stages, inicial x800. -> Novo Visual do !rank -> Novos monstros: Verminor / King Of the Elements / Capetinha / Bau de Xp . Esses bixos só podem ser invocado por GM para cima, não tem no mapa, È otimo para sumonar ele na sala de boss. Comandos: -> !eject (Remover casa de player que não loga a 3 dias) Obs: Caso queira mudar o dias vá na pasta Talkactions e procure por expulse_house e altere essa coluna: local days = 3*24*60*60, mude o 3 pelo dia que quiser. -> !spells -> !sex nome do player -> !buyaddon (comprar addon doll 1kk) -> !autoloot -> !food -> !mute,nome do player,minutos. -> Pequeno ajuste no comando /squelch (Você ligou modo private ignoring) ao falar novamente (Você desativou modo private ignoring.) Então galerinha é isso um mapa simples, mais é o inicio continuarei editando e melhorando a cada dia mais, vamos as imagens! Templo. Onde os player's nascem. Treiners Free Teleportes Free City Vip 1 City Vip 2 Segundo Andar Vip 2 Roupa Especial Para Tutores Cidade Baiak (Obs: Dei uma arrumadinha no templo,basta repararem a primeira foto do templo com essa da cidade..) Senha do GOD: god1/god2 Então pessoal é isso ai. Dicas e criticas podem mandar, pois quero suas opiniões sobre o quê melhorar. Obrigado Creditos: vinny1999 pelo mapa e Brendoonh (eu) Que dei uma modificada e retirei alguns bugs.1 ponto
-
[DOWNLOAD] Server PokeZot
[DOWNLOAD] Server PokeZot
thyagolima reagiu a AdmAlexandre por uma resposta no tópico
1 pontoEae Galerinha do TibiaKing Hoje Venho Postar um Servidor Mais não é Feito Por Min !! Lista Completa de Pokemon Adicionados!! Sistemas Quests Alterações Prints Downloads!! -Créditos-1 ponto -
Cliente 8.60 - Traduzido
Cliente 8.60 - Traduzido
thelifeofpbion reagiu a Wakon por uma resposta no tópico
1 pontoFala ai pessoal, tranquilo? Estou trazendo para vocês 1 cliente traduzido do Tibia 8.60 feito por mim, eu traduzi pelo XVI21 ( HexEditor ). Não está 100% traduzido, mas vou atualizando nesse post conforme eu traduzo o resto do cliente, algumas imagens da tradução: Exit: Quando tenta fechar o Client com o char online. Hotkeys: CTRL + K Login: Opções: Skills: Tempo de stamina: Ainda está uns 30% completo, pois preciso traduzir os outros stats da stamina. Atualização: 12/02/2015 - 12:39 Inventario: CTRL+H Escadas: CTRL+H Aba de Ajuda: Portas: Outros: Aba de Report: CTRL+R Bom é isso, espero que gostem apesar de ser algo meio "Inutil", vou terminar de traduzir esse e atualizo, talvez eu continue com isso e traduza outras versões populares e outros clientes como o OTClient. Atualizado: 12/02/2015 - 12:54 Download: Tibia - TraduzidoV1.1.exe Scan: Tibia - TraduzidoV1.1.exe Basta colocar na pasta do Tibia mantendo o resto dos arquivos como .dat, .spr, .pic e tals. Por que eu fiz isso? Char no bot, tedio monstro, poaskpoask.1 ponto -
[Crack] RedBot Pro {10.80}
[Crack] RedBot Pro {10.80}
downloadkct reagiu a EdsonJunior por uma resposta no tópico
1 pontoInstruções Baixe o RedBot Pro 2.0.5 pelos seguintes links - Download Extraia em qualquer area do seu computador Execute RedBot Pro como Administrador Use seu usuario e senha criado no fórum PandoriumX Criando Seu Proprio Cracker1 ponto -
Logout com 5 segundos parecido com do Otpokemon
Logout com 5 segundos parecido com do Otpokemon
Thay Oliveira reagiu a L3K0T por uma resposta no tópico
1 pontoEae galera sabe aquele sisteminha do Otpokemon que você loga, tem que esperar 5 segundos para sair, então aqui vou disponibilizar o meu script, parecido com do Otpokemon e que fiz para meu sevidor www.facebook.com/pokemondbr vamos lá! Vá na pasta creaturescripts/scripts copia um arquivo lá e ronomeia para logout delay e adiciona isso. agora em login.lua adiciona isso pra registrar o script. agora em creaturescrpts.xml coloque a tag pra funcionar. É isso vai prevenir problemas no seu ot e melhorando mais ainda e evitando mais leg que todo os ot sofre! Resultado Vídeo.1 ponto -
ShowOff 151 Pokemon 45°
1 pontoBom dia TibiaKing! Venho hoje abrir minha galeria de Pokemons. Meu objetivo aqui é fazer os 151 Pokemons da primeira Geração, conforme as sprites ficam prontas eu vou postando aqui. Quero criar o hábito de praticar sprite todo dia para conseguir melhorar e porque faço por hobbie também Espero que vocês curtam <- Bulbasaur antigo. @up Bônus de Hoje 03/06 Talvez eu deva usar uma tonalidade mais esura, o que acham? ---> O USO É PROIBIDO, SE QUISER USAR, ANTES ME PEÇA. Vamos alimentar essa areia de Otpokemon para o pessoal que só faz por dinheiro fazer bem feito ou deixar de fazer Otserv que uso é o KPDO, não sei quem fez o carinha da equipe rocket, mas fica ae os créditos a ele e o pessoal do KPDO. Como eu citei acima, eu faço apenas por hobbie não sou nenhum manjador das artes dos manjadores. Mas toda critica para me ajudar é bem vinda. Tópico será atualizado com o passar do tempo.1 ponto
-
Gambity Gallery
1 pontoOlá bom sou novo aqui, me perdoem pelo português e que normalmente não frequento fóruns estrangeiros, mas vamos lá hahahaha, vou postar aqui minhas sprites e meus avanços. Obs: podem usar minhas Sprites pois elas são de uso livre, não sou fresco como "alguns artistas que só visam lucros e não humildade" Antigas (Old) Novas (new) ~Updates~ Monsters (mobs) Djin Demon Objetos (objects) ~Bom logo mais posto mais de meus trabalhos1 ponto
-
Npc Addoner (10.76)
Npc Addoner (10.76)
chriscarp reagiu a diegosilva por uma resposta no tópico
1 pontoScript NPC Addoner Ola Pessoa to postando um Script atualizado do NPC Addoner Para Servidores TFS 1.0 - 10.76 Pesquisei muito pra arruma o Bug Dele espero que Gostem,< ps. Isso não é um Tutorial, Por isso se vc n sabe o que esta fazendo não prossiga. Bug que não deixava a script rodar Ficava na linha:33 e estava assim. " items_list = items_list .. item[2] .. ' ' .. getItemNameId(item[1])" O que eu Fiz foi retirar o "ID" no GetItemName(item[1]) e fico assim, " items_list = items_list .. item[2] .. ' ' .. getItemName(item[1])" Bom peguei a Script de outro forum, e configurei para rodar na Versão 10.76 Esta ai Zero Bala. Se gosto comenta, se não Comenta TBM, estarei Feliz em ajudar no que puder.1 ponto -
(Resolvido)[PEDIDO] Exaust + doRemoveItem
(Resolvido)[PEDIDO] Exaust + doRemoveItem
biel.stocco reagiu a Caronte por uma resposta no tópico
1 pontoAaaa, esqueci disso, pera aí... --By: Gabriel Stocco(Wolf) Improvised Version-- pescar peixe vivo/morto/lixo/levar dano/ quebrar vara local config = { waters = {4614, 4615, 4616, 4617, 4618, 4619, 4608, 4609, 4610, 4611, 4612, 4613, 7236, 4614, 4615, 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4665, 4666, 4820, 4821, 4822, 4823, 4824, 4825}, level = 1, skill = SKILL_FISHING, skillReq = 1, effect = CONST_ME_BLOCKHIT, addTries = 10, msgType = MESSAGE_EVENT_ADVANCE, soul = 0, } local t = { [{1, 50}] = {msg = "You found %A %N.", item = 5951}, --- fins [{51, 90}] = {msg = "You found %A %N.", item = 2226}, --- fishbone [{91, 110}] = {msg = "You found %A %N.", item = 2009}, --- bottle [{111, 130}] = {msg = "You found %A %N.", item = 2237}, --- cap [{131, 140}] = {msg = "You found %A %N.", item = 2670}, --- camarão [{161, 170}] = {msg = "You found %A %N.", item = 2669}, ---grande [{170, 175}] = {msg = "Sua vara de pesca caiu dentro da água!", destroy = true}, [{176, 180}] = {msg = "O peixe era muito forte e quebrou a vara de pesca!", destroy = true}, [{181, 4800}] = {msg = "Não pescou nada!"}, [{4801, 7200}] = {msg = "Você pescou um peixe!", summon = "Peixe"}, [{7201, 7600}] = {msg = "Você pescou um Atum!", summon = "Atum"}, [{7601, 8000}] = {msg = "Você pescou uma Truta Vermelha!", summon = "Truta Vermelha"}, [{8001, 8400}] = {msg = "Você pescou uma Truta Verde!", summon = "Truta Verde"}, [{8401, 8700}] = {msg = "Perdeu %D hitpoints porque um peixe infectado te mordeu!", damage = {550, 2800}}, [{8701, 9000}] = {msg = "Perdeu %D hitpoints porque está exausto!", damage = {550, 1800}} } function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, 9394) - os.time() <= 0 then setPlayerStorageValue(cid, 9394, os.time() + 2) else doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if getPlayerItemCount(cid, 11416) >= 1 then doPlayerRemoveItem(cid, 11416, 1) else doPlayerSendCancel(cid, "You need a ".. getItemName(11416) .." To do this.") doSendMagicEffect(fromPosition, CONST_ME_POFF) end if isInArray(config.waters, itemEx.itemid) and config.level <= getPlayerLevel(cid) and config.skillReq <= getPlayerSkill(cid, config.skill) and config.soul <= getPlayerSoul(cid) then local v, amount, damage = math.random(9000), 1, nil for i, k in pairs(t) do if v >= i[1] and v <= i[2] then if k.destroy then doRemoveItem(item.uid) end if k.summon then doCreateMonster(k.summon, toPosition) end if k.damage then damage = math.random(k.damage[1], k.damage[2]) doCreatureAddHealth(cid, - damage) doSendMagicEffect(getThingPos(cid), CONST_ME_DRAWBLOOD) doSendAnimatedText(getThingPos(cid), damage, TEXTCOLOR_RED) end if k.item then if k.amountmax then amount = math.random(k.amountmax) end doPlayerAddItem(cid, k.item, amount) end if k.msg then local msg = k.msg if msg:find("%%") then if msg:find("%%A") and k.item then msg = msg:gsub("%%A", amount > 1 and amount or getItemDescriptionsById(k.item).article) end if msg:find("%%N") and k.item then msg = msg:gsub("%%N", amount > 1 and getItemDescriptionsById(k.item).plural or getItemNameById(k.item)) end if msg:find("%%D") and damage then msg = msg:gsub("%%D", damage) end end doPlayerSendTextMessage(cid, config.msgType, msg) end doTransformItem(itemEx.uid, config.debris) doPlayerAddSoul(cid, -config.soul) doSendMagicEffect(toPosition, k.destroy and CONST_ME_HITAREA or config.effect) return doPlayerAddSkillTry(cid, config.skill, config.addTries) end end end return doPlayerSendCancel(cid, "Você não pode pescar aqui.") end1 ponto -
(Resolvido)[PEDIDO] Exaust + doRemoveItem
(Resolvido)[PEDIDO] Exaust + doRemoveItem
biel.stocco reagiu a Caronte por uma resposta no tópico
1 ponto1 ponto- (Resolvido)[PEDIDO] Spell de "Correr"
(Resolvido)[PEDIDO] Spell de "Correr"
pokefelipe reagiu a klipstyle por uma resposta no tópico
1 pontoo script do que pode usar "" troque por este veja se funciona. (desculpa por não poder colocar em code ou spoiler pois meu navegador esta um lixo) local condition = createConditionObject(CONDITION_HASTE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) setConditionFormula(condition, 1.7, -36, 1.7, -36) function onSay(cid, words, param) if exhaustion.get(cid, 502) then doPlayerSendCancel(cid, 'aguarde '..exhaustion.get(cid, 502)..' segundos para usar novamente.') return true end local pos = getThingPos(cid) if(param == '') then doSendMagicEffect(pos, 14) doAddCondition(cid, condition) exhaustion.set(cid, 502, 10) -- 10 e o tempo em segundos do intervalo para usar return true end local t = string.explode(param, '"') if(t[2]) then doCreatureSay(cid, "Strong Haste: ".. t[2], 20, false, 0, pos) doSendMagicEffect(pos, 14) doAddCondition(cid, condition) exhaustion.set(cid, 502, 10) -- 10 e o tempo em segundos do intervalo para usar end return true end1 ponto- [Showoff] New City
[Showoff] New City
luanluciano93 reagiu a runeraserver por uma resposta no tópico
1 ponto1 ponto- Addon System Poketibia
1 pontoAinda recomendo o PokexRain nele o sistema é funcionando perfeitamente, eu até já tirei o sistema dele pra adiciona no PDA e está funcionando até hoje1 ponto- Addon System Poketibia
1 pontoOpps Esse Servidor Tem Muito BUG, Por isso Ninguém Usa Mais Tem Sistema De Addons 100% -> Link TK <-1 ponto- (Resolvido)Código Source Remover EXP dos Summons
Fala galera alguém pode me ajudar a alterar a source do meu servidor pra remover a Experiência dos Summon, exemplo eu tenho um Summon ai uso ele pra matar um monstro selvagem nos 2 ganhamos EXP, quero remover só pra mim ganhar EXP pela source. JÁ RESOLVI VLW XD alterei isso na minha source void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints) { uint32_t attackerId = 0; if(attacker) { if(Creature* master = attacker->getMaster()) attacker = master; attackerId = attacker->getID(); } if(attacker->getPlayer()) { CountMap::iterator it = damageMap.find(attackerId); if(it != damageMap.end()) { it->second.ticks = OTSYS_TIME(); if(damagePoints > 0) it->second.total += damagePoints; } else damageMap[attackerId] = CountBlock_t(damagePoints); } if(damagePoints > 0) lastHitCreature = attackerId; }1 ponto- Colocar LocalStorage na VIP Account.
Colocar LocalStorage na VIP Account.
kawaylidor reagiu a klipstyle por uma resposta no tópico
1 ponto1º \data\talkactions\scripts crie um arquivo chamado bookinfo.lua dentro cole. function onSay(cid, words, param) local text = 'Informações que você deseja que apareça' -- \n função usada para quebrar linhas (EX: 123\n456\n789) doShowTextDialog(cid, 2160, text) -- 2160 foto do item q ira aparecer no topo da janela return true end registre a tag em talkactions.xml <talkaction log="yes" words="!info" hide="yes" script="bookinfo.lua"/> 2º verifique em data\creaturescripts\scripts\ o arquivo sobre o fim da vip, pois o sistema do Mock também utiliza verificação por conta toda e pela data base porem possui uma storage sim. Poste o arquivo referente ao fim da vip ou o link do sistema utilizado.1 ponto- (Resolvido)[Ajuda] Client Anti BOT
eu utilizo e recomendo este. http://www.tibiaking.com/forum/topic/15175-anti-bot-system/1 ponto- (Resolvido)COMO COLOCAR SITE DO OT PARA " .COM OU .NET " ?
(Resolvido)COMO COLOCAR SITE DO OT PARA " .COM OU .NET " ?
Fabricio Herrmann reagiu a luanluciano93 por uma resposta no tópico
1 pontoO tópico foi movido para a área correta, preste mais atenção da próxima vez! Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680 Este tópico foi movido: De: "Desenvolvimento e Programação → VB / .NET → Dúvidas" Para: "OTServ → Suporte OTServ → Suporte de WebSites"1 ponto- (Resolvido)COMO COLOCAR SITE DO OT PARA " .COM OU .NET " ?
(Resolvido)COMO COLOCAR SITE DO OT PARA " .COM OU .NET " ?
Fabricio Herrmann reagiu a Shyrriro por uma resposta no tópico
1 pontoSe pelo que entendi do que você falou. Acho que a solução para seu problema é hospedagem de site. Você paga por isso esta aqui o exemplo https://www.lgvhost.com.br/central/cart.php?a=add&pid=16escolha um note para site net, com ou org, verifica se o nome já não é existente. Se tem isso de graça por ai eu não sei te informar.1 ponto- (Resolvido)Quest
(Resolvido)Quest
eunaosei123 reagiu a zipter98 por uma resposta no tópico
1 pontoAmbas as variáveis já estão configuradas como deviam: time para o tempo de realização da quest, e interval o tempo para fazê-la novamente. wtf? Para time ser configurado em minutos: Troque: timer(config.time) por: timer(config.time * 60)1 ponto- (Resolvido)Quest
(Resolvido)Quest
eunaosei123 reagiu a zipter98 por uma resposta no tópico
1 pontoVocê trocou a linha errada... function convert(time) return {minutes = math.floor(time / 60), seconds = time - math.floor(time / 60) * 60} end function timer(time) if time < 0 or not checkPlayer() then return true end for i = 1, #config.timerPos do doSendAnimatedText(config.timerPos[i], convert(time).minutes..":"..convert(time).seconds, 215) end addEvent(timer, 1000, time - 1) end1 ponto- (Resolvido)Problema com "Castle war 24hrs".
(Resolvido)Problema com "Castle war 24hrs".
Raziel Frehley reagiu a Vodkart por uma resposta no tópico
1 pontosó colocar no PVP tool Area no logout ¬¬1 ponto- (Resolvido)[pedido] compilar source
(Resolvido)[pedido] compilar source
gbik reagiu a Fir3element por uma resposta no tópico
1 pontoManda ai.1 ponto- (Resolvido)Quest
(Resolvido)Quest
eunaosei123 reagiu a zipter98 por uma resposta no tópico
1 pontoAh sim, confundi com o interval e mencionei que o time também era em minutos... time -> segundos interval -> minutos A alteração para o tempo restante aparecer em mais de um lugar é a seguinte: Tabela: timerPos = { {x = x, y = y, z = z}, --Posições onde o tempo restante aparecerá. {x = x, y = y, z = z}, {x = x, y = y, z = z}, --etc }, Troque: doSendAnimatedText(config.timerPos, convert(time).minutes..":"..convert(time).seconds, 215) por: for i = 1, #config.timerPos do doSendAnimatedText(config.timerPos[i], convert(time).minutes..":"..convert(time).seconds, 215) end Para mostrar o tempo em outros códigos, basta usar as funções: function convert(time) return {minutes = math.floor(time / 60), seconds = time - math.floor(time / 60) * 60} end function timer(time, pos) if time < 0 then return true end doSendAnimatedText(pos, convert(time).minutes..":"..convert(time).seconds, 215) addEvent(timer, 1000, time - 1) end Uso: timer(TEMPO, POSIÇÃO)1 ponto- (Resolvido)[PEDIDO] Script comando !sellhouse pra vender house
simplesmente troque no talkactions.xml a parte referente ao sell house por esta. <talkaction words="!sellhouse" event="function" value="houseSell"/>1 ponto- (Resolvido)Quest
(Resolvido)Quest
eunaosei123 reagiu a zipter98 por uma resposta no tópico
1 pontolocal config = { storage = 9721, time = 5, --Tempo para fazer a quest, em minutos. interval = 15, --Tempo para poder usar a alavanca novamente, em minutos. timerPos = {x = x, y = y, z = z}, --Posição onde o tempo restante aparecerá. monster = { name = "monster_name", --Nome do monstro. pos = { {x = x, y = y, z = z}, --Posições onde ele vai nascer. {x = x, y = y, z = z}, {x = x, y = y, z = z}, --etc }, }, player = { {{x = x, y = y, z = z}, {x = x, y = y, z = z}}, --{{posição onde o player deve ficar}, {para onde será teleportado}}, {{x = x, y = y, z = z}, {x = x, y = y, z = z}}, {{x = x, y = y, z = z}, {x = x, y = y, z = z}}, --etc }, area = {{x = x, y = y, z = z}, {x = x, y = y, z = z}}, --{{posição superior esquerda da área}, {posição inferior direita da área}}, } local cidPos = {} function clearArea() for x = config.area[1].x, config.area[2].x do for y = config.area[1].y, config.area[2].y do local pos = {x = x, y = y, z = config.area[1].z} local pid = getTopCreature(pos).uid if pid > 0 then if isPlayer(pid) then doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid))) doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_RED, "You didn't get to the reward room in time.") else doRemoveCreature(pid) end end end end setGlobalStorageValue(config.storage, os.time() + config.interval * 60) end function checkPlayer() for x = config.area[1].x, config.area[2].x do for y = config.area[1].y, config.area[2].y do local pos = {x = x, y = y, z = config.area[1].z} local pid = getTopCreature(pos).uid if isPlayer(pid) then return true end end end return false end function convert(time) return {minutes = math.floor(time / 60), seconds = time - math.floor(time / 60) * 60} end function timer(time) if time < 0 or not checkPlayer() then return true end doSendAnimatedText(config.timerPos, convert(time).minutes..":"..convert(time).seconds, 215) addEvent(timer, 1000, time - 1) end function onUse(cid) if getGlobalStorageValue(config.storage) > os.time() then return doPlayerSendCancel(cid, "Wait "..convert(getGlobalStorageValue(config.storage) - os.time()).minutes.."min and "..convert(getGlobalStorageValue(config.storage) - os.time()).seconds.."secs.") elseif checkPlayer() then return doPlayerSendCancel(cid, "There's player(s) doing the quest right now.") end local p = {} for _, pos in pairs(config.player) do local pid = getTopCreature(pos[1]).uid if isPlayer(pid) then p[#p + 1] = pid cidPos[pid] = _ end end if #p < #config.player then return doPlayerSendCancel(cid, "There's some player(s) missing.") end for i = 1, #p do doTeleportThing(p[i], config.player[cidPos[p[i]]][2]) doPlayerSendTextMessage(p[i], 27, "Good luck!") end for _, pos in pairs(config.monster.pos) do doCreateMonster(config.monster.name, pos) end timer(config.time * 60) addEvent(function() clearArea() end, config.time * 60 * 1000) return true end1 ponto- Passagem apenas pra staff
Passagem apenas pra staff
L3K0T reagiu a luanluciano93 por uma resposta no tópico
1 ponto@alexxxxxxx, seu script esta funcional, porem você poderia melhora-lo. Você esta usando duas condições: se é monstro não entra e se for group id 1 não entra. Poderia simplificar ... -- <movevent type="StepIn" actionid="56830" event="script" value="pisoStaff.lua"/> function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) or getPlayerGroupId(cid) == 1 then doTeleportThing(cid, fromPosition, true) doSendMagicEffect(getThingPos(cid), 2) doPlayerSendTextMessage(cid, 25, "Ops voce nao e da Staff!") return true end doSendMagicEffect(getThingPos(cid), 12) doPlayerSendTextMessage(cid, 25, "Bem-vindo(a)!") return true end1 ponto- Addon System Poketibia
Addon System Poketibia
pokefelipe reagiu a Wend II por uma resposta no tópico
1 pontoPokexRain , eu pesquisei por addons com o notepad++ em toda a pasta do servidor e oque encontrei fui adicionando no meu servidor1 ponto- (Resolvido)Monsters que Empurra
1 pontoMe interessei pelo seu pedido, fiz aqui rapidinho.. monsterpusher.lua (data\creaturescripts\scripts): function doPush(uid) if not isCreature(uid) then return false end local pos = getCreaturePosition(uid) local pushp = { [0] = {x = pos.x, y = pos.y + 1, z = pos.z, stackpos = 0}, [1] = {x = pos.x - 1, y = pos.y, z = pos.z, stackpos = 0}, [2] = {x = pos.x, y = pos.y - 1, z = pos.z, stackpos = 0}, [3] = {x = pos.x + 1, y = pos.y, z = pos.z, stackpos = 0}, [4] = {x = pos.x + 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [5] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0}, [6] = {x = pos.x + 1, y = pos.y + 1, z = pos.z, stackpos = 0}, [7] = {x = pos.x - 1, y = pos.y - 1, z = pos.z, stackpos = 0} } local rn = math.random(0, 7) if getTopCreature(pushp[rn]).uid > 0 or getTileThingByPos(pushp[rn]).itemid == 0 then return doPush(uid) else doTeleportThing(uid, pushp[rn], true) end return true end function onAttack(cid, target) doPush(target) doMonsterChangeTarget(cid) return true end creaturescripts.xml (data\creaturescripts): <event type="attack" name="MonsterPusher" script="monsterpusher.lua"/> Registre o creature event adicionando a seguinte tag ao arquivo XML do monstro desejado: <script> <event name="MonsterPusher"/> </script>1 ponto- [PEDIDO] Pokemon Dash v9 (Cliente)
[PEDIDO] Pokemon Dash v9 (Cliente)
Purungo reagiu a Lucas Unknown por uma resposta no tópico
1 pontoOlá pessoal, Eu e outros Membros TibiaKing estamos a procura e precisando do OTC (OT CLIENT) do Servidor Pokemon Dash V9 o melhor Open, se alguém estiver disposto a disponibilizar e compartilhar conosco, ficaremos muito agradecidos. Att. Tópico do Servidor: Pokemon Dash v9 o melhor Open Poste abaixo caso você esteja esperando, sabendo de noticias sobre e também se puder ajudar de algum modo.1 ponto- [Help] Shop System Gesior 0.3.8
1 pontoVocê tem o script do shop dentro do servidor na pasta globalevents\scripts? se não tiver é claro que o item não vai chegar nunca1 ponto- (Resolvido)Script Para Deslogar
1 pontoEm "Data/creaturescripts/scripts" crie blocklogin.lua e blocklogout.lua e cole: blocklogin.lua: local t = { storage = 54555, temp = 20 } function onLogin(cid) setPlayerStorageValue(cid, t.storage, os.time() + t.temp) return true end blocklogout.lua: local t = { storage = 54555 } function onLogout(cid) if getPlayerStorageValue(cid, t.storage) > os.time() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa esperar "..getPlayerStorageValue(cid, t.storage) - os.time().. " segundos para deslogar.") return false end return true end Ai em "Data/creaturescripts" abra o creaturescripts.xml e cole as tags: <event type="logout" name="BlockLogout" script="blocklogout.lua"/> <event type="login" name="BlockLogin" script="blocklogin.lua"/> Testei e está normal, caso tenha problemas me avise .1 ponto- Pyrus OT, 1.5
Pyrus OT, 1.5
JohnnyBlease reagiu a jeff of hell por uma resposta no tópico
1 pontoamigão, tem algum segredo pra diminuir a rate de exp? pq ja coloquei 1 no config.lua, stages.xml e configuration.lua e a magickarp continua dando exp altissimo, quando que no configuration.lua e em seu arquivo xml eles estao configurados pra dar 4001 ponto- rme extendido
rme extendido
Arbams02 reagiu a CarlosHenrique7457 por uma resposta no tópico
1 pontoBaixe esse rme http://www.tibiaking.com/forum/topic/38665-remeres-map-editor-vers%C3%A3o-cliente-estendidaextended/#entry219705 Abra a ele e va em preferencias Fito isso selecione o cliente 8.54 la em cima, e la embaixo escolha seu cliente lembrando é a pasta aonde esta o dat e o spr1 ponto- [OTC] Background animado
1 pontoOlá pessoal, achei um tutorial muito legal na net, e resolvi trazer para vocês... Ele ensina como colocar background animado no OTClient. Entendendo as limitações do OTC Todos nós sabemos que o OTC só aceita imagens em .pgn e a maioria das imagens animadas são gif ou flash, então como vamos colocar imagens animadas no nosso cliente... Introdução Passeando pelas profundezas da internet andei lendo que o novo firefox 3 aceitara uma extensão de imagem nova, e qual é essa extensão o APNG isso mesmo Animated Portable Networks Graphics então pensei vamos explorar isso.. encontrei um programa que se chama APNG Anime Maker e e ele que vamos utilizar 1º Passo Baixe o Programa AQUI ( ele funciona por frames então vc tera que ter todas as imagens de sua animação 1 por 1 em qualquer arquivo mas desde que elas tenham o mesmo tamanho (1024x719 padrão OTC) para n dar conflito visual). depois de baixar o programa e ter todas as imagens agora fica facil então vamos seguir. 2º Passo. Abra o APNG Menu Principal OPEN > Abre as suas imagens SAVE > Salva a sua imagem em formato png (porem com a animação) CLEAN > Limpa todas as imagens Move Up / Move down > altera a ordem das imagens Menu Lateral Delay > tempo para cada imagens ficar em exibição em ms ou fps Offset / Increment > não sei pra que serve =p os outros menus tbm n mas n vamos usar eu acho rsrs Após adicionar todas as suas imagens em frames e classificar a ordem e tempo de exibição delas salve o arquivo no botão SAVE e coloque dentro da pasta \data\images com nome de background e teste1 ponto- Mapa infinity-sky 8.6
Mapa infinity-sky 8.6
andrewalekson reagiu a Lucaszte por uma resposta no tópico
1 pontoo otserver nao esta dando para fazer itens com god como eu configuro isso ??1 ponto- Anti-Bot System
Anti-Bot System
Lokozoido reagiu a Guilherme. por uma resposta no tópico
1 pontoBom, esse é um sistema anti-bot que vai funcionar da seguinte forma: O Jogador fica online por 15 minutos [Antibot]: Por favor escreva !antibot 5%8&9^2*3 sem simbolos. Ex: code: 1*5^8¿6%9 -> !antibot 15869. Lembre-se você tem 2 minutos para fazer isso ou será kickado. Jogador: !antibot 58923 [Antibot]: Aproveite seu tempo! Caso o código esteja incorreto: [Antibot]: Voce tem mais 2 chances para tentar novamente. Caso o jogador escreva o código 3 vezes errado, será kickado, ou então, caso o jogador não escrever o código nos próximos 2 minutos (configurável) será kickado também. Primeiro vá em data/creaturescripts/scripts/ e crie um arquivo chamado antibot.luae então cole: local symbols = {"*", "^", "¿", "%", "&", "$"} local timeBetweenQuestion = 15 * 60 --15 minutes local timeToKick = 2 * 60 --2 minutes local timeStorage = 65117 local codeStorage = 65118 local kickStorage = 65119 local timesStorage = 65121 function onThink(cid, interval) if not isPlayer(cid) or getPlayerGroupId(cid) >= 3 then return end if getCreatureStorage(cid, timeStorage) < 1 then doCreatureSetStorage(cid, timeStorage, os.time() + timeBetweenQuestion) end if getCreatureStorage(cid, kickStorage) > 0 and os.time() >= getCreatureStorage(cid, kickStorage) then local tmp = {timeStorage, kickStorage, timesStorage, codeStorage} for i = 1, #tmp do doCreatureSetStorage(cid, tmp[i], 0) end return doRemoveCreature(cid) end if os.time() >= getCreatureStorage(cid, timeStorage) then local code, set = "", 0 set = math.random(1, 100000) local s, e = 1, 1 for i = 1, string.len(set) do code = (code == "" and string.sub(set, s, e) or code .. symbols[math.random(#symbols)] .. string.sub(set, s, e)) s, e = s + 1, e + 1 end doCreatureSetStorage(cid, codeStorage, set) doCreatureSetStorage(cid, kickStorage, os.time() + timeToKick) doCreatureSetStorage(cid, timeStorage, os.time() + timeBetweenQuestion) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Antibot]: Por favor escreva !antibot " .. code .. " sem simbolos. Ex: code: 1*5^8¿6%9 -> !antibot 15869. Lembre-se voce tem " .. timeToKick / 60 .. " minutos para fazer isso ou sera kickado.") end return end Agora cole isso em data/creaturescripts/creaturescripts.xml: <event type="think" name="Antibot" event="script" value="antibot.lua"/> Cole isso em data/creaturescripts/scripts/login.lua: local timeStorage = 65117 local codeStorage = 65118 local kickStorage = 65119 local timesStorage = 65121 registerCreatureEvent(cid, "Antibot") doCreatureSetStorage(cid, codeStorage, 0) doCreatureSetStorage(cid, kickStorage, 0) doCreatureSetStorage(cid, timesStorage, 0) doCreatureSetStorage(cid, timeStorage, 0) Agora vá em data/talkactions/scripts,crie um arquivo criado antibot.lua e cole: local codeStorage = 65118 local kickStorage = 65119 local timesStorage = 65121 local times = 3 function onSay(cid, words, param, channel) if getCreatureStorage(cid, codeStorage) == 0 then return doPlayerSendCancel(cid, "Not yet.") elseif tonumber(param) == tonumber(getCreatureStorage(cid, codeStorage)) then doCreatureSetStorage(cid, codeStorage, 0) doCreatureSetStorage(cid, kickStorage, 0) doCreatureSetStorage(cid, timesStorage, 0) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Antibot]: Aproveite seu tempo!") return true else if getCreatureStorage(cid, timesStorage) < 0 then doCreatureSetStorage(cid, timesStorage, 0) end doCreatureSetStorage(cid, timesStorage, getCreatureStorage(cid, timesStorage) + 1) if getCreatureStorage(cid, timesStorage) == times then doCreatureSetStorage(cid, codeStorage, 0) doCreatureSetStorage(cid, kickStorage, 0) doCreatureSetStorage(cid, timesStorage, 0) doRemoveCreature(cid) return true else return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Antibot]: Voce tem " .. times - getCreatureStorage(cid, storageTimes) .. " oportunidades para tentar novamente.") end end return true end Agora cole isso em data/talkactions/talkactions.xml: <talkaction words="!antibot" event="script" value="antibot.lua"/> Caso você queria deixar o jogador banido por 1 (uma) hora, coloque isto: return doAddAccountBanishment(getPlayerAccountId(cid),getPlayerGUID(cid), os.time() + 1*60*60, 12, 7, "Away from keyboard botter") and doRemoveCreature(cid) No lugar de: return doRemoveCreature(cid) E isso é tudo pessoal, aproveitem o código, que por sinal, foi completamente feito por darkhaos com alguma colaboração de Gomgom e uma pequena parte minha, que deixei as frases em Português (BR) !1 ponto- [MOD] Criminal System v2.0
[MOD] Criminal System v2.0
Deathstroke reagiu a Kimoszin por uma resposta no tópico
1 pontoOlá pessoal, não tinha nada para fazer aqui e resolvi aprimorar o meu sistema básico de Policia e Ladrão. Agora ele está na versão v2.0 e está mais bonito *-* Change Log - v2.0 * Feito com simulação de OOP * Adicionado a classe Civil * Fácil configuração * Varias funções feitas * O policial ganha todo o dinheiro que o ladrão roubou * É possivel identificar quantos players você roubou e o quanto de dinheiro * ... Link para a versão v1.0 http://tibiaking.com...riminal-system/ Configurando Basicamente você só tem que mudar isso: minSteal = 300, -- Minimo que o bandido pode roubar maxSteal = 1400, -- Maximo que o bandido pode roubar prisonPos = {x=1013, y=1034, z=7}, -- Posição dentro da prisão jailTime = 1, -- Tempo em minutos que vai ficar preso Depois no script abaixo, você escolhe os dois itens, um vai ser para roubar, outro para prender o item precisar ter o "Use With" Você precisa adicionar a actionid 1256 pelo Map Editor na porta da prisão \mods\Criminal System.xml1 ponto- Poll System - Enquetes no seu servidor .-.
Poll System - Enquetes no seu servidor .-.
Babilonia reagiu a MaXwEllDeN por uma resposta no tópico
1 pontopost_pattern = { author = "Maxwell Denisson(MaXwEllDeN)", developed_in = "The Forgotten Server 0.3.6", code_version = 1.0 } Introdução Com esse sistema, você pode criar enquetes no seu servidor, para saber a opniao de seus players. Instalação Abra a pasta creatureevents, dentro da pasta scripts copie qualquer arquivo com extenção .lua, renomeie para PollMaX, abra com algum editor de texto, apague tudo que tiver dentro e cole o seguinte conteúdo: --[[ Poll System Author: Maxwell Denisson(MaXwEllDeN) Version: 1.0 ]] local POLL = _POLL_SYS function onLogin(cid) if (POLL.on) then local PVotes = string.explode(POLL.func.playerGetVotes (cid), ", ") for _, a in pairs(PVotes) do if not (POLL.func.hasPoll(a)) then POLL.func.removePlayerVote(cid, a) end end local kyz = 0 local polls = {} local msgeX = "MaX Poll System:\nParticipe de nossa(s) enquete(s) -> " for _, a in pairs(POLL.func.getPolls()) do kyz = 1 table.insert(polls, a[1]) msgeX = msgeX .. a[1] .. ", " end if (kyz ~= 0) then doPlayerSendTextMessage(cid, 27, msgeX:sub(1, #msgeX-2)) end end return true end Abra a pasta lib na sua pasta data, copie qualquer arquivo com extenção .lua, renomeie para PollMaX, abra com algum editor de texto, apague tudo que tiver dentro e cole o seguinte conteúdo: --[[ Poll System Author: Maxwell Denisson(MaXwEllDeN) Version: 1.0 ]] _POLL_SYS = { func = {}, VotdSto = 42873, on = true } local InStalled = false function printTableSI(aff) -- BETA ~ By MaXwEllDeN local s = "{" for a, b in pairs(aff) do local index = "[".. a .. "]" if (type(a) == "string") then index = '["'.. a ..'"]' end if (type(b) == "table") then value = printTableSI(b) elseif (type(b) == "string") then value = '"'.. b .. '"' else value = b end s = s .. index .. " = " .. value .. ", " end s = "{" .. s:sub(2, #s) return (#s < 3) and "{}" or (s:sub(1, #s-2) .. "}") end _POLL_SYS.func.install = function () return (db.getResult("ALTER TABLE `server_config` ADD COLUMN `polls` VARCHAR( 255 ) NOT NULL DEFAULT ('{}');")) and true or false end _POLL_SYS.func.getPolls = function () local get = db.getResult("SELECT `polls` FROM `server_config` WHERE `config` = 'db_version';") local resultado = get:getDataString('polls') return (resultado) and loadstring("return " .. resultado)() or nil end _POLL_SYS.func.setPolls = function (newpoll) return (db.getResult("UPDATE `server_config` SET `polls` = '".. newpoll .."' WHERE `config` = `db_version`;")) and true or false end _POLL_SYS.func.addPoll = function (poll, options) local Apoll = _POLL_SYS.func.getPolls() table.insert(Apoll, {poll, options}) return _POLL_SYS.func.setPolls(printTableSI(Apoll)) end _POLL_SYS.func.removePoll = function (poll) local Apoll = _POLL_SYS.func.getPolls() local Npoll = {} for _, b in pairs(Apoll) do if (b[1]:lower() ~= poll:lower()) then table.insert(Npoll, b) end end local Npoll = printTableSI(Npoll) return _POLL_SYS.func.setPolls(Npoll) end _POLL_SYS.func.hasPoll = function (poll) local polls = _POLL_SYS.func.getPolls() for _, b in pairs(polls) do if (b[1]:lower() == poll:lower()) then return true end end return false end _POLL_SYS.func.hasPollOption = function (poll, option) local polls = _POLL_SYS.func.getPolls() for _, b in pairs(polls) do if (b[1]:lower() == poll:lower()) then if (b[2][option:lower()]) then return true end end end return false end _POLL_SYS.func.playerSetVotes = function (player, votes) return setPlayerStorageValue(player, 77734, votes) end _POLL_SYS.func.playerGetVotes = function (player) if (getPlayerStorageValue(player, 77734) == -1) then setPlayerStorageValue(player, 77734, "") end return getPlayerStorageValue(player, 77734) end _POLL_SYS.func.playerAddVote = function (player, poll) return setPlayerStorageValue(player, 77734, getPlayerStorageValue(player, 77734) .. ", ".. poll .. "") end _POLL_SYS.func.hasPlayerVote = function (player, poll) local _, votes = _POLL_SYS.func.playerGetVotes(player):gsub(poll:lower(), "fuu") return (votes > 0) and true or false end _POLL_SYS.func.removePlayerVote = function (player, poll) local _, votes = _POLL_SYS.func.playerGetVotes(player):gsub(poll:lower(), " ") return (votes > 0) and _POLL_SYS.func.playerSetVotes(player, _) or false end _POLL_SYS.func.removeAllPlayersVote = function (poll) for _, cid in pairs(getOnlinePlayers()) do local cid = getPlayerByNameWildcard(cid) _POLL_SYS.func.removePlayerVote(cid, poll) end end _POLL_SYS.func.addVote = function (poll, option, player) local polls = _POLL_SYS.func.getPolls () for _, b in pairs(polls) do if (b[1]:lower() == poll:lower()) then print(UHU) for a, _ in pairs(b[2]) do if (a:lower() == option:lower()) then b[2][a] = _ + 1 _POLL_SYS.func.playerAddVote (player, poll) _POLL_SYS.func.setPolls (printTableSI(polls)) return true end end end end return false end _POLL_SYS.func.getPollHighestValue = function (poll) local value = "" local polls = _POLL_SYS.func.getPolls() for _, a in pairs(polls) do if (a[1]:lower() == poll:lower()) then for b, c in pairs(a[2]) do for _, d in pairs(a[2]) do if (_ ~= b) then if (c > d) then value = b end end end end end end return value end if not(InStalled) then local file = io.open("data/lib/PollSystem.lua", "r") local content = file:read("*all") local content, _ = content:gsub("In".. string.upper("s") .."talled = false", "InStalled = true") file:close() local file = io.open("data/lib/PollSystem.lua", "w+") file:write(content) file:close() return _POLL_SYS.func.install() end Abra a pasta talkactions, dentro da pasta scripts copie qualquer arquivo com extenção .lua, renomeie para PollMaX, abra com algum editor de texto, apague tudo que tiver dentro e cole o seguinte conteúdo: --[[ Poll System Author: Maxwell Denisson(MaXwEllDeN) Version: 1.0 ]] function onSay(cid, words, param) local funcs = {"add", "result", "finalize", "list", "vote"} local POLL = _POLL_SYS if not(POLL.on) then return false end local paramCHECK = param:lower() local param = param:lower() local params = string.explode(param, ";") local param = params[1] local helpE = "Max Poll System Help: \n \n * vote - serve para votar em uma enquete. \n" local helpE = helpE .." Exemplo de uso: " .. words .. " vote; enquete; opção " .. words .. " vote; Quem é o mais gato?; Maxwell\n" local helpE = helpE .."\n * list - lista as enquetes existentes. \n" local helpE = helpE .." Exemplo de uso: " .. words .. " list" if (getPlayerAccess(cid) >= 4) then helpE = helpE .. "\n\n * add - serve para adicionar uma enquete. \n Exemplo de uso: " .. words .. " add; Você votaria no sim?; {'Não', 'Sim'}\n" helpE = helpE .. "\nVocê votaria no sim? é a enquete, o que estiver dentro de {} são as opções, ATENÇÃO: TODAS OPÇÕES DEVEM SER FEITAS DENTRO DE \'\', E SEPARADAS POR VIRGULA!" helpE = helpE .. "\n\n * finalize - serve para finalizar uma enquete. \n Exemplo de uso: ".. words .. " finalize; Você votaria no sim?\n\nVocê votaria no sim é a enquete que você deseja finalizar." end if not(isInArray(funcs, param)) then return doShowTextDialog(cid, 1953, helpE) end if (param == "add") and (getPlayerAccess(cid) >= 4) then if not(params[3]) then return doShowTextDialog(cid, 1953, helpE) end local optionS = loadstring("return " .. params[3]:lower())() if (type(optionS) ~= "table") then return doShowTextDialog(cid, 1953, helpE) end local _, paramCHECK = paramCHECK:gsub(";", "a") if (paramCHECK > 2) then return doPlayerSendTextMessage(cid, 27, "Você não pode usar \";\" nas opções") end if not (optionS[2]) then return doPlayerSendTextMessage(cid, 27, "Sua enquete deve ter no mínimo 2 opções") end local Opt = {} for _, b in pairs(optionS) do Opt[b] = 0 end if (POLL.func.hasPoll(params[2])) then return doPlayerSendTextMessage(cid, 27, "Já existe uma enquete nomeada ".. params[2]) end POLL.func.addPoll(''..params[2]..'', Opt) doPlayerSendTextMessage(cid, 27, "A enquete ".. params[2] .." foi adicionada com as opções: ".. params[3]:lower() ..".") elseif (param == "finalize") and (getPlayerAccess(cid) >= 4) then if not (params[2]) then return doShowTextDialog(cid, 1953, helpE) end if not (POLL.func.hasPoll(params[2])) then return doPlayerSendTextMessage(cid, 27, "Não existe nenhum enquete no banco de dados nomeada ".. params[2] .. "!") end local HValue = POLL.func.getPollHighestValue(params[2]) if (HValue == "") then doBroadcastMessage("A enquete " .. params[2] .. " foi finalizada, sem opções vencedoras!") else doBroadcastMessage("A enquete " .. params[2] .. " foi finalizada, e a opção que recebeu mais votos foi: ".. HValue ..".") end doPlayerSendTextMessage(cid, 27, "A enquete ".. params[2] .." foi finalizada.") POLL.func.removePoll (params[2]) POLL.func.removeAllPlayersVote (params[2]) elseif (param == "list") then local polls = POLL.func.getPolls() local kizizim = 0 mszi = "MaX Poll System:\n\nEnquetes Ativas:\n" local function getPollsOptions(poll) local fukZz = "" for _, b in pairs(polls) do if (b[1] == poll:lower()) then for c, _ in pairs(b[2]) do fukZz = fukZz .. "\n " .. c end return fukZz end end end for a, b in pairs(polls) do kizizim = 1 mszi = mszi .. "\n * ".. b[1] .. getPollsOptions(b[1]) end mszi = mszi .. "\n~-~-~-~-~-~-~-~-~-~-~-~-~-" if (kizizim == 0) then return doPlayerSendTextMessage(cid, 27, "Não existe nenhuma enquete no momento!") end doShowTextDialog(cid, 1953, mszi) elseif (param == "vote") then if not (params[3]) then return doShowTextDialog(cid, 1953, helpE) end if not (POLL.func.hasPoll(params[2])) then return doPlayerSendTextMessage(cid, 27, "Não existe nenhum enquete nomeada \"".. params[2] .. "\"! Para ver a lista das enquetes disponíveis digite: ".. words .. " list") end if (POLL.func.hasPlayerVote(cid, params[2])) then return doPlayerSendTextMessage(cid, 27, "Você já votou nesta enquete.") end if not(POLL.func.hasPollOption(params[2], params[3])) then return doPlayerSendTextMessage(cid, 27, "A enquete ".. params[2] .. " não tem nenhuma opção nomeada ".. params[3] .. "! Para ver a lista das enquetes e suas opções disponíveis digite: ".. words .. " list") end POLL.func.addVote(params[2], params[3], cid) doPlayerSendTextMessage(cid, 27, "Obrigado por participar da enqute ".. params[2] .. ".") elseif (param == "result") then local polls = POLL.func.getPolls() local kizizim = 0 mszi = "MaX Poll System:\n\nResultado das enquetes:\n" local function getPollsOptions(poll) local fukZz = "" for _, b in pairs(polls) do if (b[1] == poll:lower()) then for c, d in pairs(b[2]) do fukZz = fukZz .. "\n " .. c .. " - ".. d .. " voto(s)." end return fukZz end end end for a, b in pairs(polls) do kizizim = 1 mszi = mszi .. "\n * ".. b[1] .. getPollsOptions(b[1]) end mszi = mszi .. "\n~-~-~-~-~-~-~-~-~-~-~-~-~" if (kizizim == 0) then return doPlayerSendTextMessage(cid, 27, "Não existe nenhuma enquete no momento!") end doShowTextDialog(cid, 1953, mszi) end return true end Depois instale as seguintes Tags: #Creatureevents.xml <event type="login" name="PollLogin" event="script" value="PollMax.lua"/> <!-- Poll System By MaXwEllDeN --> #Talkactions.xml <talkaction words="!polls" event="script" value="PollMax.lua"/> <!-- Poll System By MaXwEllDeN --> Condiderações Finais Faz tempo que eu fiz esse sistema, por isso pode conter vários bugs, quem encontrar faça o favor de reportar!1 pontoLíderes está configurado para São Paulo/GMT-03:00 - (Resolvido)[PEDIDO] Spell de "Correr"
Informação Importante
Confirmação de Termo