Ir para conteúdo

Guilherme.

Héroi
  • Registro em

  • Última visita

Tudo que Guilherme. postou

  1. isso serve para desativar, pra arrumar o código tente isso: va até a pasta do site e va na pasta config e abra o config.php e adicione isso depois de <?PHP $config['site']['publickey'] = "6LfZAAoAAAAAALswKC2UCdCo_wf3ilh_C0qBhQJs "; // Public Key $config['site']['privkey'] = "6LfZAAoAAAAAAA7_sZX1ZPomaqqTKBka5t6so0Un";; // Private Key
  2. use o RME map editor, copie o mapa da WOE e cole em 1 lugar vazio no seu mapa, acredito que existam tutoriais de como fazer isso aqui no fórum, do contrario faça um pedido que certamente será atendido. Após copiar o mapa terá que mudar as coordenadas nos scripts da WOE.
  3. Guilherme. postou uma resposta no tópico em Playground (Off-topic)
    Seja wellcomido pra não perder o costume Faça dessa sua casa e fique a vontade !
  4. Guilherme. postou uma resposta no tópico em Outros Bots
    Renato ? hehe Acho que esse é o Arthur
  5. De mais detalhes sobre o erro, se possivel poste alguns códigos do sistema, o autor, poste uma SS do console do server se tiver algum erro.
  6. Guilherme. postou uma resposta no tópico em Playground (Off-topic)
    Você pode ir ao procon ou talvez processá-los, pois consta 99,7% de Uptime em CONTRATO, se você concordou com o contrato tem todo o direito de receber o que está pagando.
  7. Guilherme. postou uma resposta no tópico em Suporte & Pedidos
    Isso realmente é muito inspirador, me da muita vontade de ser mapper mais o que falta é a paciência ;s
  8. Legal, se eu não estivesse montando um servidor junto com meu parceiro Raul Neiva, com certeza eu iria entrar para a equipe de vocês ! Sucesso com o OT.
  9. Guilherme. postou uma resposta no tópico em Suporte & Pedidos
    Adorei essas 2, muito perfeitas
  10. As sources do servidor são basicamente isso Doug: https://opentibia.svn.sourceforge.net/svnroot/opentibia/otserv/trunk/ Esse é um link do TFS OTServ 0.6.3 Version:revision number :6052 Client version: 8.60 Após baixar as tais sources e edita-las você deverá compilar elas com algum compilador C++ (preferencial DEV CPP) Na área de programação open tibia tem um tutorial do Matheus.
  11. Gostei, ao meu ver funciona bem sem nenhum bug!
  12. Mark Of The Assassin O Player causa dano e marca a criatura por 10 segundos. Quando o alvo é marcado, ele recebe 50% de dano a mais. Entre em data/mods/ e crie um arquivo chamado mark.xml em seguida cole o código abaixo dentro do arquivo, salve e feche. <?xml version="1.0" encoding="UTF-8"?> <mod name="Mark of the Assassin" version="1.0" author="Snake Royal" contact="otland.net" enabled="yes"> <instant name="Mark of the Assassin" words="exori sin" lvl="50" mana="140" prem="1" range="5" needtarget="1" blockwalls="1" needweapon="1" exhaustion="7000" needlearn="0" event="script"> <vocation id="4"/> <vocation id="8"/> <![CDATA[ local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack, level / 5 return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal) end function onTargetCreature(cid, target) registerCreatureEvent(target, "Mark of the Assassin/statschange001") doCreatureSetStorage(target, 1000, os.time() + 10) doCreatureSetStorage(target, 1001, cid) return true end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") function onCastSpell(cid, var) return doCombat(cid, combat, var) end ]]> </instant> <event type="statschange" name="Mark of the Assassin/statschange001" event="script"><![CDATA[ function onStatsChange(cid, attacker, type, combat, value) if (getCreatureStorage(cid, 1000) > os.time() and getCreatureStorage(cid, 1001) == attacker and type == STATSCHANGE_HEALTHLOSS) then doSendMagicEffect(getThingPosition(cid), CONST_ME_STUN) doCreatureAddHealth(cid, -math.ceil(value * 0.5)) end return true end ]]></event> </mod> A configuração é básica assim como toda spell, basta entender um pouquinho de otserv, esse é uma spell/mod feita por Snake Royal
  13. Olá TibiaKing! Esse script necessita um pouco mais de conhecimento, pois precisa adicionar códigos em C++ ao distro. O script adiciona você em uma espécie de fila, assim que a fila completar 5 pessoas, automaticamente um grupo é formado e as 5 pessoas são teleportadas para dentro da dungeon ou quest. Basicamente funciona assim: Player (Eu): /queue join Player (Outro): /queue join Player (Outro): /queue join Player (Outro): /queue join Player (Outro): /queue join Onde queue significa fila. Uma pequena demonstração Database (MySQL/PHPMyAdmin) CREATE TABLE `dungeon_finder` (`id` INT(8) AUTO_INCREMENT PRIMARY KEY, `player_id` INT(255)) Talkactions function onSay(cid, words, param, channel) if(param == "join") then query = db.getResult("SELECT * FROM `dungeon_finder` WHERE `player_id` = " .. getPlayerGUID(cid) .. "") if(getPlayerStorageValue(cid, CONFIG.DUNGEON_STORAGE) > 1) then if(getPlayerStorageValue(cid, CONFIG.DUNGEON_STORAGE) > os.time()) then doPlayerSendCancel(cid, "You can't join queue with deserter debuff.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(CONFIG.AREA) then if(not(isInArea(getPlayerPosition(cid), (CONFIG.AREA).FROMPOS, (CONFIG.AREA).TOPOS))) then doPlayerSendCancel(cid, "You're not in required area to join the queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(CONFIG.PZ_REQUIRED) then if(not(getTilePzInfo(getPlayerPosition(cid)))) then doPlayerSendCancel(cid, "You're not in protection zone to join the queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(CONFIG.REQUIRED_LEVEL) then if(getPlayerLevel(cid) < CONFIG.REQUIRED_LEVEL) then doPlayerSendCancel(cid, "You don't have required level to join the queue. The minimum level to join the queue is " .. CONFIG.REQUIRED_LEVEL .. ".") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(CONFIG.SKULL) then if(getPlayerSkullType(cid) >= CONFIG.SKULL) then doPlayerSendCancel(cid, "Murderers are not allowed to join the queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(CONFIG.IN_FIGHT) then if(getCreatureCondition(cid, CONDITION_INFIGHT)) then doPlayerSendCancel(cid, "You can't be in combat in order to join the queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end end if(isInParty(cid)) then doPlayerSendCancel(cid, "You can't join queue while you are in party group.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end if(query:getID() == 0) then doPlayerSendCancel(cid, "You are already listed in queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end db.executeQuery("INSERT INTO `dungeon_finder` SET `player_id` = " .. getPlayerGUID(cid) .. ";") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_BLUE) doCreatureSay(cid, "You've beed queued in dungeon finder - random mode.", TALKTYPE_ORANGE_1) elseif(param == "remove") then query = db.getResult("SELECT * FROM `dungeon_finder` WHERE `player_id` = " .. getPlayerGUID(cid) .. "") if(query:getID() == -1) then doPlayerSendCancel(cid, "You are not listed in the queue.") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) return true end db.executeQuery("DELETE FROM `dungeon_finder` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") doCreatureSay(cid, "You've beed removed from queue.", TALKTYPE_ORANGE_1) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_MAGIC_RED) end return true end Globalevents local DUNGEONS = { [1] = {NAME = "Test dungeon", LEVEL = 30, POS = {x = 450, y = 357, z = 15}}, } local condition = createConditionObject(CONDITION_INFIGHT) setConditionParam(condition, CONDITION_PARAM_TICKS, 15000) function onThink(cid, interval) DUNGEON = DUNGEONS[math.random(1, table.maxn(DUNGEONS))] players = {} for i = 1, 1000 do if(table.maxn(players) == 5) then break end query = db.getResult("SELECT * FROM `dungeon_finder` WHERE `id` = " .. i .. ";") if(query:getID() > -1) then pid = getPlayerByName(getPlayerNameByGUID(query:getDataInt("player_id"))) if(getPlayerStorageValue(pid, CONFIG.DUNGEON_STORAGE) > 1) then return true end if(getPlayerLevel(pid) > DUNGEON.LEVEL and getPlayerLevel(pid) < DUNGEON.LEVEL + 50) then table.insert(players, getPlayerGUID(pid)) end query:free() end end if(table.maxn(players) == 5) then for i = 1, 5 do pid = getPlayerByName(getPlayerNameByGUID(players[i])) if(i == 1) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_BLUE, "You were chosen to be a dungeon guide.") addEvent(doCreatureSay, 15200, pid, "You and your team were teleported to the " .. DUNGEON.NAME .. ".", TALKTYPE_ORANGE_1) for j = 2, 5 do lid = getPlayerByName(getPlayerNameByGUID(players[j])) doPlayerInviteToParty(pid, lid) end else doPlayerJoinParty(pid, getPlayerByName(getPlayerNameByGUID(players[1]))) end delay = 0 for i = 1, 15 do addEvent(doPlayerSendTextMessage, delay + 1000, pid, MESSAGE_STATUS_CONSOLE_BLUE, "A dungeon group for you has been found. You'll be teleported to the dungeon in " .. 15 - i .. " seconds.") delay = delay + 1000 end doAddCondition(pid, condition) addEvent(doTeleportThing, 15000, pid, DUNGEON.POS) addEvent(doSendMagicEffect, 15000, DUNGEON.POS, CONST_ME_TELEPORT) db.executeQuery("DELETE FROM `dungeon_finder` WHERE `player_id` = " .. players[i] .. ";") if(CONFIG.QUIT_POS) then setPlayerStorageValue(pid, 9001, getPlayerPosition(pid).x) setPlayerStorageValue(pid, 9002, getPlayerPosition(pid).y) setPlayerStorageValue(pid, 9003, getPlayerPosition(pid).z) end setPlayerStorageValue(pid, CONFIG.DUNGEON_STORAGE, 1) end end return true end CreatureEvents function onLogout(cid) query = db.getResult("SELECT * FROM `dungeon_finder` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") if(query:getID() == -1) then return true end db.executeQuery("DELETE FROM `dungeon_finder` WHERE `player_id` = " .. getPlayerGUID(cid) .. ";") return true end function onLeaveParty(cid) if(getPlayerStorageValue(cid, CONFIG.DUNGEON_STORAGE) == 1) then setPlayerStorageValue(cid, CONFIG.DUNGEON_STORAGE, -1) if(CONFIG.DESERTER_DEBUFF_TIME) then setPlayerStorageValue(cid, CONFIG.DUNGEON_STORAGE, os.time() + CONFIG.DESERTER_DEBUFF_TIME) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You've been marked with deserter debuff for " .. CONFIG.DESERTER_DEBUFF_TIME / 3600 .. " hour/s. For this time you can't join the queue again.") end TMP_POS = CONFIG.QUIT_POS and {x = getPlayerStorageValue(cid, 9001), y = getPlayerStorageValue(cid, 9002), z = getPlayerStorageValue(cid, 9003)} or getPlayerMasterPos(cid) doTeleportThing(cid, TMP_POS) doSendMagicEffect(TMP_POS, CONST_ME_TELEPORT) for i = 9001, 9003 do setPlayerStorageValue(cid, i, -1) end end return true end lib CONFIG = { AREA = false, -- if false then everyone can join queue everywhere, if you want certain area add AREA = {FROMPOS = {}, TOPOS = {}} PZ_REQUIRED = false, -- requirement of standing in pz, if you don't want it just set PZ_REQUIRED = false REQUIRED_LEVEL = 30, -- required level to join the queue, if you don't want it just set REQUIRED_LEVEL = false SKULL = 1, -- skull that is not acceptable while joining queue, if you want players join with skulls just set SKULL = false IN_FIGHT = true, -- if player is in fight he can't join the queue, IN_FIGHT = false to disable QUIT_POS = false, -- if you want player to go back to his previous position (from which he got teleported to the dungeon) set QUIT_POS = true, if set to false it'll teleport player to his temple DESERTER_DEBUFF_TIME = 1800, -- 60 = 1 min, 3600 = 1h DUNGEON_STORAGE = 9005 } C++ luascript.cpp int32_t LuaScriptInterface::luaDoPlayerJoinParty(lua_State* L) { //doPlayerJoinParty(cid, lid) ScriptEnviroment* env = getEnv();[/left] Player* leader = env->getPlayerByUID(popNumber(L)); if(!leader) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } Player* player = env->getPlayerByUID(popNumber(L)); if(!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } g_game.playerJoinParty(player->getID(), leader->getID()); lua_pushboolean(L, true); return 1; } Coloque: int32_t LuaScriptInterface::luaDoPlayerInviteToParty(lua_State* L) { //doPlayerInviteToParty(cid, pid) ScriptEnviroment* env = getEnv(); Player* leader = env->getPlayerByUID(popNumber(L)); if(!leader) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } Player* player = env->getPlayerByUID(popNumber(L)); if(!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } g_game.playerInviteToParty(player->getID(), leader->getID()); lua_pushboolean(L, true); return 1; } creatureevent.h Depois de: CREATURE_EVENT_PREPAREDEATH, Coloque: CREATURE_EVENT_LEAVEPARTY Depois de: bool playerLogout(Player* player, bool forceLogout); Coloque: uint32_t executeLeaveParty(Player* player); Depois de: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Coloque: uint32_t executeLeaveParty(Player* player); creatureevent.cpp Depois de: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Coloque: else if(tmpStr == "leaveparty") m_type = CREATURE_EVENT_LEAVEPARTY; Depois de: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Coloque: case CREATURE_EVENT_LEAVEPARTY: return "onLeaveParty"; Depois de: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Coloque: case CREATURE_EVENT_LEAVEPARTY: return "cid"; Depois da função: uint32_t CreatureEvent::executeFollow(Creature* creature, Creature* target)... Coloque: uint32_t CreatureEvent::executeLeaveParty(Player* player) { //onLeaveParty(cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); #ifdef __DEBUG_LUASCRIPTS__ std::stringstream desc; desc << player->getName(); env->setEventDesc(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); bool result = m_interface->callFunction(1); m_interface->releaseEnv(); return result; } else { std::cout << "[Error - CreatureEvent::executeAdvance] Call stack overflow." << std::endl; return 0; } } game.cpp Mude: bool Game::playerLeaveParty(uint32_t playerId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; if(!player->getParty() || player->hasCondition(CONDITION_INFIGHT)) return false; return player->getParty()->leave(player); } Para: bool Game::playerLeaveParty(uint32_t playerId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; if(!player->getParty() || player->hasCondition(CONDITION_INFIGHT)) return false; CreatureEventList leavePartyEvents = player->getCreatureEvents(CREATURE_EVENT_LEAVEPARTY); for(CreatureEventList::iterator it = leavePartyEvents.begin(); it != leavePartyEvents.end(); ++it) (*it)->executeLeaveParty(player); return player->getParty()->leave(player); } E é isso galera, o local da quest pode ser mudado/adicionado no GlobalEvent, mais uma maravilha do Teckman Depois de: //doPlayerJoinParty(cid, lid) lua_register(m_luaState, "doPlayerJoinParty", LuaScriptInterface::luaDoPlayerJoinParty); Coloque: //doPlayerInviteToParty(cid, pid) lua_register(m_luaState, "doPlayerInviteToParty", LuaScriptInterface::luaDoPlayerInviteToParty); Depois de:
  14. Olá galera, vim trazer mais um maravilhoso e criativo script do Teckman. *OBS; O Script não contém todos os items para todas as estações. Funciona assim: Quando você abrir o server ele irá substituir os items de acordo com as estações do ano, por exemplo, vai substituir as árvores por árvores de neve, pedras por pedras de neve, e assim por diante. O Script vai ser executado logo que o server ligar pois ocupa muito do CPU e da memória RAM, mas apenas para grandes mapas e por pouco tempo. Entre em /globalevents/scripts/ e então crie o arquivo seasons.lua, coloque o código abaixo no arquivo, salve e feche. local config = { areas = { [1] = { {x = 954, y = 1001, z = 7}, {x = 992, y = 1026, z = 7} } }, items = { ["winter"] = { [2700] = 2698, -- fir tree [2705] = 8139, -- pear tree [2703] = 2697, -- plum tree [2704] = 7020, -- red maple [2706] = 7071, -- yellow maple [2701] = 2698, -- sycamore [2707] = 7022, -- beech [2708] = 7020, -- poplar [2711] = 7021, -- dwarf tree [2712] = 7023, -- pine [4526] = 6580, -- grass [4527] = 6581, -- grass [4528] = 6582, -- grass [4529] = 6583, -- grass [4530] = 6584, -- grass [4531] = 6585, -- grass [4532] = 6586, -- grass [4533] = 6587, -- grass [4534] = 6588, -- grass [4535] = 6589, -- grass [4536] = 6590, -- grass [4537] = 6591, -- grass [4538] = 6592, -- grass [4539] = 6593, -- grass [4540] = 6580, -- grass [4541] = 6580, -- grass [6216] = 6715, -- grass tuffs [6217] = 6716, -- grass tuffs [6218] = 6717, -- grass tuffs [6219] = 6718, -- grass tuffs [387] = 6966, -- stalagmite [3610] = 6611, -- stones [3614] = 6610, -- stones [3666] = 6713, -- stone [3667] = 6714, -- stone [3668] = 6715, -- stone [468] = 483, -- hole [469] = 484, -- hole [3310] = 485, -- hole [3607] = 6999, -- medium stone [3609] = 7003, -- medium stone [3616] = 7002, -- medium stone [3663] = 7016, -- big stone [3664] = 7017, -- big stone [3615] = 7000, -- medium stone [3608] = 7001, -- medium stone [3659] = 7018, -- medium stone [3660] = 7019, -- medium stone [3617] = 7004, -- big stone [3618] = 7005, -- big stone [3619] = 7006, -- big stone [3620] = 7007, -- big stone [3624] = 7008, -- big stone [3625] = 7009, -- big stone [3626] = 7010, -- big stone [3627] = 7011, -- big stone [3628] = 7012, -- big stone [3629] = 7013, -- big stone [3630] = 7014, -- big stone [3631] = 7015, -- big stone [4470] = 6768, -- mountain [4471] = 6720, -- mountain [4472] = 6719, -- mountain [4476] = 6724, -- mountain [4477] = 6725, -- mountain [4478] = 6726, -- mountain [4479] = 6727, -- mountain [4473] = 6721, -- mountain [4474] = 6722, -- mountain [4475] = 6723, -- mountain [4468] = 6762, -- mountain [4469] = 6761, -- mountain [4542] = 4737, -- grass border [4543] = 4738, -- grass border [4544] = 4739, -- grass border [4545] = 4740, -- grass border [4546] = 4741, -- grass border [4547] = 4742, -- grass border [4548] = 4743, -- grass border [4549] = 4744, -- grass border [4550] = 4745, -- grass border [4551] = 4746, -- grass border [4552] = 4747, -- grass border [4553] = 4748, -- grass border } }, seasons = { ["monday"] = "winter", ["tuesday"] = "winter", ["wednesday"] = "autumn", ["thursday"] = "autumn", ["friday"] = "spring", ["saturday"] = "summer", ["sunday"] = "summer" } } function onStartup () doSetGameState(GAMESTATE_CLOSED) addEvent(doSetGameState, 1000 * 15, GAMESTATE_NORMAL) for i = 1, table.maxn(config.areas) do for x = ((config.areas)[i][1]).x, ((config.areas)[i][2]).x do for y = ((config.areas)[i][1]).y, ((config.areas)[i][2]).y do for z = ((config.areas)[i][1]).z, ((config.areas)[i][2]).z do for k, v in pairs(config.items[config.seasons[string.lower(os.date("%A"))]]) do pos = {x = x, y = y, z = z} if(getTileItemById(pos, k).uid > 0) then doTransformItem(getTileItemById(pos, k).uid, v) end end end end end end return true end Agora entre em /globalevents/globalevents.xml adicione a TAG abaixo, salve e feche. <globalevent name="seasons" type="start" event="script" value="seasons.lua"/> E é isso galera, vocês estão livres para editar o código e adicionar/retirar items, para fazer isso use o map editor ou então o arquivo items.xml para verificar o ID dos items.
  15. Olá galerinha do Tibia King ! Hoje vim trazer para vocês um MOD que achei muito foda. O script atribui um 'rank' militar ao player que tem certa quantidade de frags, é parecido com o REP System, bom agora vamos aos 'finalmente' ! Primeiro entre em /mods/ e crie um arquivo com o nome de ranks.xml agora coloque o código abaixo, salve e feche o arquivo. Você pode editar facilmente o nome do Rank e a quantidade de Frags necessários para obtelo seguindo o padrão: [1] - Quantidade de Frags "Private First Class" - Nome do Rank <?xml version = "1.0" encoding = "UTF-8"?> <mod name = "Military Ranks" version = "1.0" author = "Teckman" enabled = "yes"> <config name = "ranks"><![CDATA[ titles = { [5] = "Private First Class", [10] = "Specialist", [15] = "Corporal", [20] = "Sergeant", [25] = "Staff Sergeant", [30] = "Sergeant First Class", [35] = "Master Sergeant", [40] = "First Sergeant", [45] = "Sergeant Major", [50] = "Command Sergeant Major", [55] = "Sergeant Major of the Army", [60] = "Second Lieutenant", [65] = "First Lieutenant", [70] = "Captain", [75] = "Major", [80] = "Lieutenant Colonel", [90] = "Colonel", [100] = "Brigadier General", [110] = "Major General", [120] = "Lieutenant General", [140] = "General", [170] = "General of the Army" } fragsStorage = 600 ]]></config> <event type = "look" name = "ranksLook" event = "script"><![CDATA[ domodlib("ranks") function onLook(cid, thing, position, lookDistance) if(isPlayer(thing.uid)) then local rank = {rank = "Private", frags = 0} for k, v in pairs(titles) do if(math.max(0, getPlayerStorageValue(thing.uid, fragsStorage)) > k - 1) then if(k - 1 > rank.frags) then rank.rank, rank.frags = v, k - 1 end end end doPlayerSetSpecialDescription(thing.uid, "\n Military rank: " .. rank.rank) end return true end ]]></event> <event type = "kill" name = "ranksKill" event = "script"><![CDATA[ domodlib("ranks") function onKill(cid, target) if(isPlayer(target)) then setPlayerStorageValue(cid, fragsStorage, math.max(0, getPlayerStorageValue(cid, fragsStorage) + 1)) if(titles[getPlayerStorageValue(cid, fragsStorage)]) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You advanced to military rank: " .. titles[getPlayerStorageValue(cid, fragsStorage)] .. ". Congratulations " .. titles[getPlayerStorageValue(cid, fragsStorage)] .. "!") end end return true end ]]></event> <event type = "login" name = "ranksLogin" event = "script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "ranksKill") registerCreatureEvent(cid, "ranksLook") return true end ]]></event> </mod> Os créditos do script vão para Teckman;
  16. ótima ideia, se funcionar vai ser de grande ajuda ao pessoal.
  17. Caralho cara, vocês não conseguem se comportar em 1 porra de tópico, todos tem que ter uma frase com ironia, duplo sentido, ofensas, e coisas do gênero, me desculpem o linguajar mais vocês estão sendo muito muleques ! Isso aqui é pra ser um lugar onde uma pessoa ajuda outra, sem 'stress' e esses tipos de 'intrigas' desnecessárias. Tentem se aguentar pelo menos, já que um não gosta do outro, mostrem respeito e tentem responder uns aos outros com educação.
  18. A dúvida do Raul também é minha dúvida, porque não quero jogar em Pacera
  19. Guilherme. postou uma resposta no tópico em Suporte Bots
    Fala o OT que você joga pra ficar mais facil pra quem for fazer, porque os mapas são diferentes uns dos outros (I Think)
  20. Eu vou participar do evento, e espero ganhar, hail TibiaKing! Mundo: Empera Nível: 61
  21. se voce encontrar essa criatura talvez ele possa te falar qual é a droga kkkkkkkkkkk
  22. Bom, isso pode ser decidido em grupo, tenho várias opções aqui no meu pc, algumas delas são: o baiak do dragon age; global full com aquele tal de tfs 0.4, war system e etc; global compacto, o qual você ja deve ter visto em outro fórum; site, war of emperium, zombie event; e coisas que dizem respeito as rates de skills, magic e experience, nome do server e afins pode ser melhor explanado com quem oferecer o host, no caso você. Acho que deu pra você entender um pouquinho vou tirar uma SS de tudo o que eu tenho no meu pen drive e ja posto aqui...
  23. http://www.youtube.com/watch?v=lvipx1wO4wU shauHSUAhusahuSHUAhsuahUSHAuhsuaHSUhau
  24. Olá, tenho TUDO o que é necessário para manter um servidor de Tibia online, menos o host. Se alguem se interessar faça contato (:
  25. Guilherme. postou uma resposta no tópico em Ouvidoria
    Não tem segredo, só ajude a comunidade ;]

Informação Importante

Confirmação de Termo