Ir para conteúdo

Sentsuizan

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    Sentsuizan deu reputação a MaTTch em [Vault System] Sistema de Cofre   
    Bom galera eu resolvi fazer o Vault System a pedido de um amigo meu e decidi compartilhar com vocês.
     
    Testado em 8.60 TFS 0.4
     
    EDIT -- O script foi arrumado, pois havia um bug que o player ganhava golds.
     
    Vamos lá.
     
    1° - Vá em data/actions/scripts e crie um arquivo chamado vault.lua, e dentro você coloca isso:
    local vaultStorage = 99991 -- storage em que ficara armazenado os golds ------------------//* Functions //------------------- local function getPlayerFreeSpace(cid) -- by MaTTch     local checkSlots, space = {3,5,6,10}, 0     local function getContainerFree(container)         local free = 0         if(not isContainer(container.uid)) then             return free         end         for i = 0, (getItemInfo(container.itemid).maxItems -1) do             local item = getContainerItem(container.uid, i)             if(item.itemid == 0) then                 free = free + 1             elseif(isContainer(item.uid)) then                 free = free + getContainerFree(item)             end         end         return free     end     for _, i in ipairs(checkSlots) do         local slotItem = getPlayerSlotItem(cid, i)         if(i ~= CONST_SLOT_BACKPACK and slotItem.itemid == 0) then             space = space + 1         elseif(isContainer(slotItem.uid)) then             space = space + getContainerFree(slotItem)         end     end     return space end local function withdrawMoneySecurity(cid, value, storage) -- by MaTTch     local storageMoney, countValue = getPlayerStorageValue(cid, storage), 0     local config = {         [1] = {ITEM_CRYSTAL_COIN, math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)},         [2] = {ITEM_PLATINUM_COIN, math.floor((value/getItemInfo(ITEM_PLATINUM_COIN).worth)-(math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)*100))},         [3] = {ITEM_GOLD_COIN, math.floor(value%100)}     }     for i = 1, #config do         local count = config[i][2]         if(count > 0) then             while(count > 0) do                 storageMoney = getPlayerStorageValue(cid, storage)                 local a, itemCap = count > 100 and 100 or count, getItemInfo(config[i][1]).weight                 if(getPlayerFreeCap(cid) >= (itemCap*a)) then                     if(getPlayerFreeSpace(cid) >= 1) then                         doPlayerAddItem(cid, config[i][1], a)                         setPlayerStorageValue(cid, storage, (storageMoney - (getItemInfo(config[i][1]).worth * a)))                         countValue = countValue + (getItemInfo(config[i][1]).worth * a)                         count = count - a                     else                         return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough space in container. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.")                     end                 else                     return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough cap. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.")                 end             end         end     end     return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end ------------------//* End Functions //------------------- function onUse(cid, item, fromPosition, itemEx, toPosition)     local cidMoney, vaultMoney = getPlayerMoney(cid), getPlayerStorageValue(cid, vaultStorage)     if(vaultMoney <= 0) then         if(cidMoney <= 0) then             return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have money.")         end         doPlayerRemoveMoney(cid, cidMoney)         setPlayerStorageValue(cid, vaultStorage, cidMoney)         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have added "..cidMoney.." gold"..(cidMoney > 1 and "s" or "").." to vault. Now your money is kept in the vault chest, you can take it whenever you want.")     else         withdrawMoneySecurity(cid, vaultMoney, vaultStorage)     end     return true end 2° - Agora em data/actions/actions.xml adicione a tag:
    <action itemid="ID" event="script" value="vault.lua"/> Em ID você escolhe o id do item que quiser.
     
    3° - Agora em data/creaturescripts/scripts crie um arquivo com o nome vaultLook.lua, e dentro coloque isso:
    local config = { vaultId = ID, -- itemid do vault vaultStorage = 99991 -- storage em que ficara armazenado os golds } function onLook(cid, thing, position, lookDistance) local show = getPlayerStorageValue(cid, config.vaultStorage) if(thing.itemid == config.vaultId) then local str = "You see"..(getItemInfo(thing.itemid).article and " "..getItemInfo(thing.itemid).article.." " or " ")..getItemInfo(thing.itemid).name..".\nYou have "..(show < 0 and 0 or show).." gold"..(show > 1 and "s" or "").." in the vault." if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then str = str .. "\nItemID: ["..thing.itemid.."].\nPosition: [X: "..getThingPos(thing.uid).x.."] [Y: "..getThingPos(thing.uid).y.."] [Z: "..getThingPos(thing.uid).z.."]." end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return false end return true end 4° - Agora em data/creaturescripts/creaturescripts.xml adicione a tag:
    <event type="look" name="vaultLook" event="script" value="vaultLook.lua"/> 5° - Agora em data/creaturescripts/login.lua lá embaixo adicione junto dos outros:
    registerCreatureEvent(cid, "vaultLook") E agora o sistema já esta pronto para ser usado.
     
    - Aah mas como funciona?
    Você clica uma vez no cofre (vault) e deposita todo seu dinheiro nele, ao clicar de novo você pega-os de volta, e caso não tiver cap ou espaço na bag você pega somente o possível e o restante ficara la até você quiser pegar.
     
    --> Versão do Vault System em editText
     
    Créditos:
    MaTTch (eu)
  2. Obrigado
    Sentsuizan deu reputação a Ackerzin em Mana&Life 100/100 sem bug.   
    Mana e Life 100/100


     
    Salve galerinha, estive procurando em vários tópicos, algum codigo de life e mana 100/100, e nenhum deles funcionava perfeito para oque eu precisava, todos eles paravam de funcionar quando o player atingia o level 715835 ou mana/life "21474847" o numero 100 da vida virava 65750 ou da mana, de qual você atingisse primeiro "21474847" e pra quem quer por high XP isso é um problema, mas depois de muito, MUITO,MUITO,muito esforço de um amigo, @Rusherzin, ele conseguiu burla isso, e agora você pode pegar quantos de level/mana/life quiser que não vai sair de 100/100, então é isso vamos ao que interessa.
    TFS 0.4 foi testado !
    Nas SOURCES arquivo protocolgame.cpp procure por:
    void ProtocolGame::AddPlayerStats(NetworkMessage_ptr msg) e substitua por isso:
     
     
    Imagem mostrando certinho a life/mana 
    Créditos:
    99% @Rusherzin  Por fazer tudo !
    1% @Zzyzx Por ficar incomodando até ele fazer !
     
     
  3. Obrigado
    Olá galera do TK !
    Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições.
     
    Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos.
     
    O que tem de diferente no NTO Hard ? 
    Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver.
     
    Veja algumas Imagens !
     
    O que tem nesse Pacote Full de Arquivos NTO Hard ? 
     
    Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor  IP Changer  
     
    DOWNLOAD  &  SCAN
     
     
    dbresetada.sql
  4. Obrigado
    Sentsuizan deu reputação a DdJs em (Resolvido)[Duvida] Sobre Aluguel House   
    @Juantibiano As vezes o server não tem suporte nas sources e outras pastas para fazer funcionar. Acho que é o mesmo principio de um server baiak, que não funciona o sistema de parcel pq falta configurações...
  5. Gostei
    Sentsuizan deu reputação a luanluciano93 em setCreatureName(cid, name, description)   
    Olá pessoal, eu estava ajudando um amigo em um script de Tibia Naruto, e me deparei com a necessidade de usar uma função para trocar o nome de um summon, mas isso teria que ser inGame, e depois de procurar um pouco achei a função setCreatureName, que faz exatamente o que eu precisava.

    O que ela faz?
    Como eu expliquei acima, ela muda o nome da Creature inGame, podendo ser bastante útil (dependendo da sua criatividade).

    Como instalar? 
    A instalação é feita inteiramente nas sources, então vamos lá .. 

    1 - No arquivo monster.h encontre esse trecho: 
    class Monster : public Creature { private: Monster(MonsterType* _mType); public:  E adicione isso abaixo de public::
    std::string name, nameDescription; 2 - Ainda em monster.h procure por:
    virtual const std::string& getName() const {return mType->name;} E substitua por isso:
    virtual const std::string& getName() const {return name;} 3 - Ainda em monster.h procure por:
    virtual const std::string& getNameDescription() const {return mType->nameDescription;} E substitua por isso:
    virtual const std::string& getNameDescription() const {return nameDescription;} 4 - Ainda em monster.h procure por:
    virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";} E substitua por isso:
    virtual std::string getDescription(int32_t) const {return nameDescription + ".";} 5 - Agora em monster.cpp procure por:
    Monster::Monster(MonsterType* _mType): Nas linhas abaixo tem a linha: raid = NULL; , adicione isso logo abaixo: 
    name = _mType->name; nameDescription = _mType->nameDescription;  
     
    6 - Agora em luascript.h adicione isso perto das linhas semelhantes:
    static int32_t luaSetCreatureName(lua_State* L); 7 - Agora em luascript.cpp adicione isso perto das linhas semelhantes:
    //setCreatureName(cid, name, description) lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName); 8 - Ainda em luascript.cpp adicione isso perto das linhas semelhantes: 
    int32_t LuaInterface::luaSetCreatureName(lua_State* L) { // setCreatureName(cid, newName, newDescription) std::string newDesc = popString(L); std::string newName = popString(L); ScriptEnviroment* env = getEnv(); Creature* creature; if (creature = env->getCreatureByUID(popNumber(L))) { Monster* monster = (Monster*)creature; monster->name = newName; monster->nameDescription = newDesc; lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; }  Pelo fato de algumas diferenças no modo de escrever a função entre as TFS, pode ocorrer erros, e então substitua as seguintes linhas dos 2 passos anteriores:
     
     
     
    Créditos: Scarlet Ayeid
     
     
    É isso pessoal ... um exemplo de uso dentro de alguma função é assim basicamente:
    local pos = {x = 10, y = 10, z = 7} local Teste = doCreateMonster("Rat", pos) setCreatureName(Teste, ""..getCreatureName(cid).."", "a "..getCreatureName(cid).."") Espero ter ajudado pessoal, até mais.
  6. Gostei
    Sentsuizan deu reputação a Noob II em habilitar pvp system   
    vai em data/lib/050-function.lua e verifica se tem isso dentro se não tiver adiciona:

    function getTileZoneInfo(pos) local tmp = getTileInfo(pos) if(tmp.pvp) then return 2 end if(tmp.nopvp) then return 1 end return 0 end
     
    Depois vai em data/lib/somefunctions.lua e procura por essa função:

    function canAttackOther(cid, pid)
    abaixo disso: 

    local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
    coloca isso:

    if getTileInfo(getThingPos(cid)).pvp then return "Can" end
  7. Gostei
    Sentsuizan deu reputação a LeoTK em (Resolvido)(Ajuda) Talk que reinicia servidor   
    @Juantibiano simples uso o auto-restarter se for windows caso for linux use o screen com autorestart irei deixar os dois auto-restart para download e depois use o comando shutdown para fechar o servidor e o auto-restarter vai abri-lo automaticamente
     
    Auto-restart = Windows AUTO RESTARTER.bat
    Auto-restart = Linux restart.sh
  8. Obrigado
    Sentsuizan deu reputação a Vodkart em Dúvida: storage e 'key char'   
    No primeiro código não seria difícil, até fiz um sistema que "salva" o tempo online: 
     
    https://tibiaking.com/forums/topic/71413-86-staff-time/
     
    fiz usando storages como vc pode ver
     
  9. Obrigado
    Sentsuizan deu reputação a lordzetros em Dúvida: storage e 'key char'   
    Sobre o segundo, acredito que seja possível sim, em C++ tem-se a possibilidade de você pegar o nome do computador, usuário e outras informações (até mesmo do hardware, como o da placa mãe - GamersClub utiliza deste método para identificar cheaters que já foram banidos -). Com isso, basta você armazenar no banco de dados essas informações de cada jogador e fazer com que seja trabalhada de uma forma que quando o player for banido, seja lançada a identificação do mesmo na blacklist. Dá um pouco de trabalho, mas é algo que rende bastante para novas ideias do servidor, como baú diário de forma precisa e dentre outros...
  10. Curtir
    Sentsuizan recebeu reputação de buenoiz em (Resolvido)AJUDA   
    Irmao, vai na Pallet House do RME e exclua todas as houses que estao nela (da city principal) em seguida siga os passos q te mandei inicialmente. Vai funcionar.
  11. Curtir
    Sentsuizan deu reputação a vankk em (Resolvido)(Ajuda) Alterar Clean   
    Basta você modificar essa linha aqui no game.cpp para
    if((*tit)->getUniqueId() != UNIQUE_ID_DO_ITEMS_VIP && (*tit)->isMoveable() && !(*tit)->isLoadedFromMap() && !(*tit)->isScriptProtected()) aonde está UNIQUE_ID_DO_ITEMS_VIP você muda para o UniqueID dos Items VIP de seu servidor.
  12. Obrigado
    Sentsuizan deu reputação a Vodkart em (Resolvido)Comando que mostra todas as guilds do servidor.   
    function getGuildLeaderName(GuildName) -- function by vodkart local leader = db.getResult("SELECT `players`.`name` FROM `players` WHERE `players`.`id` = (SELECT `guilds`.`ownerid` FROM `guilds` WHERE `guilds`.`name` = ".. db.escapeString(GuildName) .. ")") if(leader:getID() ~= -1) then return leader:getDataString("name") end return "Nobody" end function onSay(cid, words, param, channel) local str, lista = "Guilds Disponiveis no servidor", db.getResult("SELECT `name` FROM `guilds`;") if (lista:getID() ~= -1) then k = 1 repeat local name = lista:getDataString("name") local lider = getGuildLeaderName(name) str = str .. "\n [" .. k .. "] "..name.." - Lider: "..lider k = k + 1 until not lista:next() lista:free() doShowTextDialog(cid, 2529,str) return true end doShowTextDialog(cid, 2529,"Não existem guilds no servidor.") return true end  
  13. Gostei
    Sentsuizan deu reputação a Vodkart em [MODS] - [8.6] Perfect Zombie System [Automático] [V1.0]   
    Qual dúvida ou erro poste no tópico que estarei respondendo.
     
     
    Obs: Antes que me falem besteiras, coloquei para os GM'S, CM'S E GOD'S não contarem no evento, então testem apenas com jogadores.
     
    Zombie.xml
    <?xml version="1.0" encoding="ISO-8859-1"?> <mod name="Perfect Zombie System" version="8.6" author="Vodkart" contact="tibiaking.com" enabled="yes"> <config name="zombie_config"><![CDATA[ zombie_config = { storages = {172100, 172101, 172102}, -- n edite players = {min = 2, max = 30}, -- min, max players no evento rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, timeToStartEvent = 30, -- segundos para começar o evento CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento teleport = {{x=147, y=55, z=7}, {x=125 , y=304, z=7}}, -- position do tp onde aparece, position para onde o jogador vai ao entrar no tp arena = {{x=110,y=297,z=7},{x=145,y=321,z=7}}, -- area positions monster_name = "Zombie Event", timeBetweenSpawns = 20, min_Level = 20 } zombie_days = { ["Monday"] = {"13:00","18:00","20:00","22:00"}, ["Tuesday"] = {"13:00","18:00","22:50","22:00"}, ["Wednesday"] = {"21:57","18:00","20:00","23:17"}, ["Thursday"] = {"13:00","18:00","20:00","22:00"}, ["Friday"] = {"13:00","18:00","21:45","22:00"}, ["Saturday"] = {"13:00","18:00","20:00","22:00"}, ["Sunday"] = {"13:00","18:00","20:00","22:00"} } function removeZombieTp() local t = getTileItemById(zombie_config.teleport[1], 1387).uid return t > 0 and doRemoveItem(t) and doSendMagicEffect(zombie_config.teleport[1], CONST_ME_POFF) end function ZerarStoragesZombie() for _, stor in pairs(zombie_config.storages) do setGlobalStorageValue(stor, 0) end end function getPlayersInZombieEvent() local t = {} for _, pid in pairs(getPlayersOnline()) do if isInRange(getPlayerPosition(pid), zombie_config.arena[1], zombie_config.arena[2]) and getPlayerAccess(pid) < 3 then t[#t+1] = pid end end return t end function getZombieRewards(cid, items) local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID for _, i_i in ipairs(items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then doAddContainerItem(backpack, item, amount) else for i = 1, amount do doAddContainerItem(backpack, item, 1) end end end end function isWalkable(pos, creature, proj, pz)-- by Nord if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end if getTopCreature(pos).uid > 0 and creature then return false end if getTileInfo(pos).protection and pz then return false, true end local n = not proj and 3 or 2 for i = 0, 255 do pos.stackpos = i local tile = getTileThingByPos(pos) if tile.itemid ~= 0 and not isCreature(tile.uid) then if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then return false end end end return true end function HaveCreatureZombie(area, remove) for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end end end end function spawnZombie() if #getPlayersInZombieEvent() > 1 then local pos = {x=math.random(zombie_config.arena[1].x, zombie_config.arena[2].x), y=math.random(zombie_config.arena[1].y,zombie_config.arena[2].y), z=zombie_config.arena[1].z} if not isWalkable(pos, false, false, false) then spawnZombie() else doSummonCreature(zombie_config.monster_name, pos) doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) doSendMagicEffect(pos, CONST_ME_MORTAREA) setGlobalStorageValue(zombie_config.storages[2], getGlobalStorageValue(zombie_config.storages[2]) <= 0 and 1 or getGlobalStorageValue(zombie_config.storages[2])+1) doBroadcastMessage("A zombie has spawned! There is currently " .. getGlobalStorageValue(zombie_config.storages[2]) .. " zombies in the zombie event!", MESSAGE_STATUS_CONSOLE_RED) addEvent(spawnZombie, zombie_config.timeBetweenSpawns *1000) end end end function CheckZombieEvent(delay) if getGlobalStorageValue(zombie_config.storages[1]) ~= (zombie_config.players.max+1) then if delay > 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.max then doBroadcastMessage("Zombie event starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING) elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) < zombie_config.players.min then for _, cid in pairs(getPlayersInZombieEvent()) do doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) end removeZombieTp() doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. zombie_config.players.min .. " players is needed!", MESSAGE_STATUS_WARNING) ZerarStoragesZombie() elseif delay == 0 and getGlobalStorageValue(zombie_config.storages[1]) >= zombie_config.players.min then removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1]) .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end addEvent(CheckZombieEvent, 60000, delay-1) end end]]></config> <event type="statschange" name="ZombieStats" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isMonster(attacker) and getCreatureName(attacker) == zombie_config.monster_name then if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then if #getPlayersInZombieEvent() > 1 then doBroadcastMessage(getPlayerName(cid) .. " have been eated by Zombies!", MESSAGE_STATUS_CONSOLE_RED) local corpse = doCreateItem(getPlayerSex(cid) == 1 and 3058 or 6081, 1, getPlayerPosition(cid)) doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(cid) .. ". He was killed by "..(isMonster(attacker) and "a "..string.lower(getCreatureName(attacker)) or isCreature(attacker) and getCreatureName(attacker) or "a field item")..".") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) doSendMagicEffect(getPlayerPosition(cid), CONST_ME_TELEPORT) if #getPlayersInZombieEvent() == 1 then local winner = getPlayersInZombieEvent()[1] doBroadcastMessage(getCreatureName(winner)..' has survived at zombie event!') local goblet = doPlayerAddItem(winner, zombie_config.rewards.trophy, 1) doItemSetAttribute(goblet, "description", "Awarded to " .. getPlayerName(winner) .. " for winning the Zombie event.") getZombieRewards(winner, zombie_config.rewards.items) doTeleportThing(winner, getTownTemplePosition(getPlayerTown(winner)), false) doSendMagicEffect(getPlayerPosition(winner), CONST_ME_TELEPORT) doBroadcastMessage(getPlayerName(winner).." won the Zombie event! Congratulations!") HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end else doBroadcastMessage("No one survived in the Zombie Event.", MESSAGE_EVENT_ADVANCE) HaveCreatureZombie(zombie_config.arena, true) ZerarStoragesZombie() end return false end end return true]]></event> <globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[ domodlib('zombie_config') function onThink(interval, lastExecution) if zombie_days[os.date("%A")] then local hrs = tostring(os.date("%X")):sub(1, 5) if isInArray(zombie_days[os.date("%A")], hrs) and getGlobalStorageValue(zombie_config.storages[3]) <= 0 then local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(zombie_config.CheckTime) setGlobalStorageValue(zombie_config.storages[1], 0) setGlobalStorageValue(zombie_config.storages[2], 0) HaveCreatureZombie(zombie_config.arena, true) end end return true end]]></globalevent> <event type="login" name="Zombie_Login" event="script"><![CDATA[ domodlib('zombie_config') function onLogin(cid) registerCreatureEvent(cid, "ZombieBattle") registerCreatureEvent(cid, "ZombieStats") if isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end return true end]]></event> <event type="combat" name="ZombieBattle" event="script"><![CDATA[ domodlib('zombie_config') if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), zombie_config.arena[1], zombie_config.arena[2]) then doPlayerSendCancel(cid, "You may not attack this player.") return false end return true ]]></event> <movevent type="StepIn" actionid ="45110" event="script"><![CDATA[ domodlib('zombie_config') function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, zombie_config.teleport[2]) end if getPlayerLevel(cid) < zombie_config.min_Level then doTeleportThing(cid, fromPosition, true) doPlayerSendCancel(cid, "You need to be at least level " .. zombie_config.min_Level .. ".") doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end if getGlobalStorageValue(zombie_config.storages[1]) <= zombie_config.players.max then doTeleportThing(cid, zombie_config.teleport[2]) setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) doBroadcastMessage(getPlayerName(cid) .. " entered the Zombie event! Currently " .. getGlobalStorageValue(zombie_config.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED) if getGlobalStorageValue(zombie_config.storages[1]) == zombie_config.players.max then setGlobalStorageValue(zombie_config.storages[1], getGlobalStorageValue(zombie_config.storages[1])+1) removeZombieTp() doBroadcastMessage("The Zombie event is now full [" .. getGlobalStorageValue(zombie_config.storages[1])-1 .. " players]! The event will soon start.") for _, var in pairs(getPlayersInZombieEvent()) do doPlayerSendTextMessage(var, MESSAGE_EVENT_ADVANCE, "The first zombie will spawn in " .. zombie_config.timeToStartEvent .. " seconds! Good luck!") end addEvent(spawnZombie, zombie_config.timeToStartEvent*1000) end end return true end]]></movevent> <talkaction words="/zombiestart;!zombiestart" access="5" event="buffer"><![CDATA[ domodlib('zombie_config') if getGlobalStorageValue(zombie_config.storages[3]) > 0 then doPlayerSendCancel(cid, "The event is already starting.") return true elseif not param or not tonumber(param) then doPlayerSendCancel(cid, "Use only numbers.") return true end local param = tonumber(param) <= 0 and 1 or tonumber(param) local tp = doCreateItem(1387, 1, zombie_config.teleport[1]) doItemSetAttribute(tp, "aid", 45110) CheckZombieEvent(tonumber(param)) ZerarStoragesZombie() setGlobalStorageValue(zombie_config.storages[3], 1) HaveCreatureZombie(zombie_config.arena, true) ]]></talkaction> <globalevent name="ZombieDebug-Start" type="start" event="buffer"><![CDATA[ domodlib('zombie_config') ZerarStoragesZombie() return true]]></globalevent> </mod>  
    OBS: Quem serve em milesegundos, mude essa parte:

     
    <globalevent name="Zombie_Start" interval="60" event="script"><![CDATA[  
     
    para
     
    <globalevent name="Zombie_Start" interval="60000" event="script"><![CDATA[  
     
     
    ----------------------------------------------------- // --------------------------------------------------
     
    o monstro você instala em data/monsters
     
    zombie event.xml
    <?xml version="1.0" encoding="UTF-8"?> <monster name="Zombie Event" nameDescription="an zombie event" race="undead" experience="280" speed="100" manacost="0"> <health now="500" max="500"/> <look type="311" corpse="9875"/> <targetchange interval="5000" chance="50"/> <strategy attack="100" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="0"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-35000" max="-35000"/> </attacks> <defenses armor="15" defense="10"/> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence="You wont last long!"/> <voice sentence="Mmmmh.. braains!"/> </voices> <loot> <item id="2148" countmax="1" chance="100000"/><!-- gold coin --> </loot> </monster>  
     
    e a tag em monsters.xml
    <monster name="Zombie Event" file="zombie event.xml"/>  
     Configuração 
     
     
     
     
    Sistema
     
    zombie_config = {
        storages = {172100, 172101}, -- não edite
        players = {min = 2, max = 30}, -- número minimo e máximo para jogadores no evento
        rewards = {items ={{2160,10},{2494,1}}, trophy = 5805}, -- premiações do jogador
        timeToStartEvent = 30, -- segundos para começar o evento após dar start
        CheckTime = 5, -- tempo que o TP fica aberto para os jogadores adrentarem o evento
        teleport = {{x=145, y=50, z=7}, {x=176 , y=54, z=5}}, -- posiçãodo tp onde aparece, posição para onde o jogador vai ao entrar no tp
        arena = {{x=173,y=52,z=5},{x=179,y=56,z=6}}, -- posição começo e final da area do evento
        monster_name = "Zombie Event", -- nome do monstro que será sumonado
        timeBetweenSpawns = 20, -- a cada quantos segundos é dado o respaw time do zombie no evento
        min_Level = 20 -- level minimo para participar do evento
    }
     
     
    Dia e Horário
     

    zombie_days = {
        ["Monday"] = {"13:00","18:00","20:00","22:00"},
        ["Tuesday"] = {"13:00","18:00","20:00","22:00"},
        ["Wednesday"] = {"13:00","18:00","20:00","22:00"},
        ["Thursday"] = {"13:00","18:00","20:00","22:00"},
        ["Friday"] = {"13:00","18:00","20:00","22:00"},
        ["Saturday"] = {"13:00","18:00","20:00","22:00"},
        ["Sunday"] = {"13:00","18:00","20:00","22:00"}
    }
     
     
    ["Dia em inglês"] = {"horário do evento"}
     
     
    Configurando a área:
     

     
    zombie lua.rar
  14. Gostei
    Sentsuizan deu reputação a jeremias em !spells ou !jutsus que não buga em STAFF.   
    Olá pessoal, resolvi adaptar o script do comando !spells ou !jutsus, essa adaptação consiste em prevenir que Staffs como GM, CM, ADM, tomem debug ao usar o comando.
    Recomendado para Staffs iniciantes ou esquecidos que usem o comando.
     
    Como coloco em meu servidor ?
    -- Adaptado por Jeremias 13/03/2018. function onSay(cid, words, param) if (getPlayerGroupId(cid) >= 3) then return doPlayerSendTextMessage(cid, 19, "Staff nao tem jutsus.") end local count = getPlayerInstantSpellCount(cid) local text = "" local t = {} for i = 0, count - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if spell.level ~= 0 then if spell.manapercent > 0 then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local prevLevel = -1 for i, spell in ipairs(t) do local line = "" if prevLevel ~= spell.level then if i ~= 1 then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " : " .. spell.mana .. "\n" end doShowTextDialog(cid, 2175, text) return TRUE end
     
    Uma adaptação simples que previne dbugs desnecessários. 
  15. Obrigado
    Sentsuizan deu reputação a Cat em Como usar Map generator   
    Map Generator: Gerar minimap e transformar em .otbm
         O Map Gen, como é conhecido, está disponível em duas versões. É possível criar um minimap baseando-se em fatores como tamanho, temperatura e umidade usando o software feito pelo Hempuli; Essa imagem pode ser convertida em .otbm e em pouco tempo você tem em mãos um continente com piso e bordas prontinho para uso. O outro programa, um pouco mais complexo, possibilita fazer tudo isso que o primeiro faz e mais, gerar montanhas com vários andares, adicionar natureza e outros detalhes no mapa automaticamente.
     
    Vantagens:
    - Programa leve e fácil de manusear.
    - Formatos e bordas customizados requerem habilidade e tempo do mapper, o Map Gen faz isso em segundos.
    - Os formatos obtidos através dos fatores de autenticação são bonitos e complexos ou seja, nas mãos de um mapper habilidoso serviriam muito mais do que uma base.
     
    Desvantagens:
    - A ferramenta só gera até determinado tamanho, é preciso mesclar vários shapes ou editar a mão se quiser fazer continentes maiores. É recomendado apenas para ilhas e continentes de tamanho pequeno-médio.
    - Criatividade: Sem o uso do Map Gen, você além de praticar mais pode criar formatos que o software não pode, você é a melhor ferramenta.
     
     
     
    DOWNLOADS
     
     
     
     
    TUTORIAL - Hempuli's Map Gen + Tibia King Map Shape
         O HMG é totalmente feito por MMF2, mas deve funcionar no Clickteam Fusion 2.5, supondo que você tenha os plugins necessários. Há um executável agradável incluído, por isso, não possuir o MMF2 / CF2.5 não impede que você brinque com o gerador!
         Vamos começar? Abra o Hempuli's Map Gen e siga as orientações da imagem abaixo:
     
    PARTE 01 - Configurações

     
    a. - Montante/Altura: Esta opção é para definir a altura e a proporção, se for configurado com mais altura, o terreno terá mais "gelo" do interior para o exterior e também será mais largo. Se tiver menos altura, o terreno será mais baixo e sem gelo.
    Exemplo:
     
     
     
    b. - Montante/Temperatura: Esta é para fazer a mesclagem com base na temperatura, se for menor terá mais gelo, se for maior e a altura também, o gelo vai mesclar com o verde.
    Exemplo:
     
     
     
    c. - Montante/Chuva: Aqui irá definir os "períodos de chuva", teoricamente falando. Se o terreno será molhado ou bem seco externamente.
    Exemplo:
     
     
     
    d. - Alcance/Largura: O espaço que o terreno vai ocupar, se será uma ilha pequena ou extensa.
    Exemplo:
     
     
     
    e. - Alcance/Temperatura: Mesma função da temperatura em montante.
    Exemplo:
     
     
     
    f. - Alcance/Chuva: Do mesmo modo que em montante, porém internamente.
    Exemplo:
     
     
    g. - Força/Tamanho: Aqui vai definir se o terreno será mais largo e achatado, ou se ele será mais suave e delicado. Também se aplica a altura e largura.
    Exemplo:
     
     
     
    h. - Força/Temperatura: Esta opção vai tratar da intensidade da temperatura (conforme a configuração, mesmo que as três temperaturas sejam altas pode ser que tenha gelo no meio, então é bom ajustar as chuvas caso você queira 0% de gelo)
    Exemplo:
     
     
     
    i. - Força/Chuva: Da mesma forma que nas outras configurações, essa opção vai tirar o verde do terreno, mas terão poças de água localizadas do centro para fora.
    Exemplo:
     
     
     
     
    PARTE 02 - Menus

     
    1. - Clique para gerar um novo terreno conforme muda as configurações na lateral.
    2. - Vai criar terrenos aleatórios, porém aproximando-se das configurações da lateral.
    3. - Mostra o terreno em formato de minimap (padrão)
    4. - Mostra em partículas dispersas, divididas em cores, todas as configuração aplicadas.
    5. - Na cor vermelha, mostra as proporções do tamanho do terreno.
    6. - Na cor verde, mostra as proporções da temperatura do terreno.
    7. - Na cor azul, mostra as proporções da chuva no terreno.
    8. - Copia a imagem para ser salva. Utilize o paint (Win + R: mspaint) para salvá-la ou editá-la se necessário
     
     
    Após finalizar a criação do terreno, utilize o Tibia King Map Shape para transformar em .otbm.
    Video-tutorial abaixo:
     
     
    Dica: Com o mapa aberto, vá em edit - border options - borderize map para adicionar as bordas nos pisos automaticamente. Depois disso faça uma revisão e sucesso!
    Vou deixar para falar sobre o Inconssecus Map Gen mais tarde, pois ainda está em demo. Você pode testá-lo neste link.
     
     
  16. Obrigado
    Sentsuizan deu reputação a MaXwEllDeN em O que é o item.UID?   
    Items UniqueID
     
    Olá, pessoal. Tudo tranquilo?
     
    Após muito tempo sem publicar nada, resolvi comentar um assunto que pode ser um pouco obscuro, que eu usava bastante mas demorei certo tempo pra entender realmente o que era. Estou falando do UniqueID, os IDs únicos.
     
     
    Alguma vez vocês já se perguntaram como o servidor faz para diferenciar o health potion que você possui em sua backpack, do health potion que outro player acabou de dropar em uma caçada?
    Pois é! O servidor tem uma forma bem simples e inteligente de distinguir um item do outro. Ele atribui a cada item um número único, que funciona como a digital do item. Dessa forma, quando usamos o health potion que está em nossa backpack, o servidor sabe exatamente qual item remover, dentre tantos outros existentes no seu servidor.
     
    -Certo Max, mas aonde você quer chegar com esse papinho?
     
    As UniqueIDs podem ser usadas para fazer a ligação de um item específico a um script, assim como as actionIDs, a diferença nesse caso é que só podemos ter um único item em todo o servidor com esse UID(uniqueID).
     
    -Hmm, quer dizer que a UID em um script funciona da mesma forma que uma AID(actionID)?
     
    Quase isso. Pelo Map Editor você pode atribuir a UniqueID diretamente a algum item do mapa, assim como você faz com ActionID. Basicamente, você poderia dividir as ações no seu servidor em duas partes: Aquelas que são exclusivas de um único item e aquelas que podem ser atribuídas a mais de um item. Presta atenção que quando falo único item não estou me referindo ao tipo do ítem, como por exemplo todos os crystal coins(itemID 2160) do jogo, mas sim a um crystal coin específico, como um que esteja em uma área de alguma quest.
     
    Por fim, para esclarecer mais um pouco, vou deixar dois exemplos distintos, onde em um eu escolheria usar o itemUID para atribuir certa ação a um item, e em outro eu escolheria usar a actionID.
     
    Caso onde seria mais agradável utilizar itemUID:
     
    Imagina que você está desenvolvendo um script para a Annihilator, mais precisamente da alavanca que teletransporta os players para dentro da sala dos Demons. Como essa alavanca é um item único no servidor, não haverá nenhuma outra alavanca que quando clicada levará os players para a sala dos Demons, eu escolheria atribuir a ela um itemUID único, e associar esse UID ao script que teletransporta os players para dentro da quest.
     
    Caso onde seria mais agradável utilizar  actionID:
     
    Agora, imaginemos um caso onde precisamos criar por exemplo, uma pedra que heala quem clicar nela, e precisamos atribuir essa mesma ação a três pedras iguais, distribuídas pelo mapa. Como nesse caso teremos mais de um item compartilhando a mesma ação, seria ideal utilizarmos actionIDs para fazer a ligação dessas pedras com o script que heala o player.
     
    É isso, pessoal. O tópico de hoje foi bem simples e enxuto. Caso tenha restado alguma dúvida ou vocês tenham alguma dúvida sobre scripting no geral e gostariam de saber mais, pode deixar um comentário aí que assim que eu tiver tempo respondo.
     
    Abraços e fiquem com Deus.
     
     
  17. Curtir
    Sentsuizan deu reputação a Bruno Carvalho em [TalkAction] Player Check System   
    Versão: 3.2
    Versão de tibia: 9.4+ (Funciona em anteriores)
    Descrição: Existem muitos scripts que ajudam o administrador do servidor a cuidar dele, um deles é saber coisas sobre quem está jogando e se está sendo honesta. Eu peguei alguns scripts e estou juntando em um para diminuir o tamanho e ter uma fácil verificação.

    TAG:
    <talkaction log="yes" words="!p;/p" access="5" event="script" value="playercheck.lua"/> Script:
    Talkactions/scripts/playercheck.lua

    local config = { check = {"check", "viwer", "verificar", "ver"}, delete = {"del", "delete", "deletar"}, search = {"search", "procurar"} } function getItemsInContainer(cont, sep) local text = "" local tsep = "" local count = "" for i=1, sep do tsep = tsep.."-" end tsep = tsep..">" for i=0, getContainerSize(cont.uid)-1 do local item = getContainerItem(cont.uid, i) if isContainer(item.uid) == FALSE then if item.type > 0 then count = "("..item.type.."x)" end text = text.."\n"..tsep..getItemNameById(item.itemid).." "..count.." ("..item.itemid..")" else if getContainerSize(item.uid) > 0 then text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" text = text..getItemsInContainer(item, sep+2).." ("..item.itemid..")" else text = text.."\n"..tsep..getItemNameById(item.itemid).." ("..item.itemid..")" end end end return text end function onSay(cid, words, param, channel) local slotName = {"Cabeça", "Amuleto", "Backpack", "Armor", "Mao Direita", "Mao Esquerda", "Legs", "Pés", "Ring", "Ammo Slot"} local t = string.explode(param, ",") if(table.isStrIn(param, config.check)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[2]) if isPlayer(player) == TRUE then local text = getPlayerName(player).."'s Equipment: " for i=1, 10 do text = text.."\n\n" local item = getPlayerSlotItem(player, i) if item.itemid > 0 then if isContainer(item.uid) == TRUE then text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..") "..getItemsInContainer(item, 1) else text = text..slotName[i]..": "..getItemNameById(item.itemid).." ("..item.itemid..")" end else text = text..slotName[i]..": Empty" end end doShowTextDialog(cid, 6579, text) else doPlayerSendCancel(cid, "This player is not online.") end end elseif(table.isStrIn(param, config.delete)) then if getPlayerGroupId(cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) if isPlayer(player) == TRUE then count = t[4] if(not t[4]) then count = 1 end if getPlayerItemCount(player, t[2]) > 0 then if doPlayerRemoveItem(player, t[2], count) then doPlayerSendCancel(cid, "Item Deletado.") else doPlayerSendCancel(cid, "Este player não esta quantidade.") end else doPlayerSendCancel(cid, "Este player não tem o item.") end end end elseif(table.isStrIn(param, config.search)) then if getPlayerGroupId (cid) >= 5 then local player = getPlayerByNameWildcard(t[3]) local result = db.getResult("SELECT name, online FROM players WHERE id IN (SELECT player_id FROM player_items WHERE itemtype = ".. t[2] ..");") local msg = "Resultados da busca pelo item ".. t[2] .." em seu banco de dados:\n\n" if result:getID() ~= -1 then while true do local name = result:getDataString("name") local online = result:getDataInt("online") msg = msg .. name .." [".. (online == 1 and "Online" or "Offline") .."]\n" if not result:next() then break end end else msg = msg .. "O item não foi encontrado em nenhum jogador." end doShowTextDialog(cid, t[2], msg) end end return true end Explicação:
    Quando o god digita:
    /p check, (PNAME) - Ele verifica os items que o player tem.
    /p del, (ID), (PNAME), (COUNT) - Ele deleta o item de determinado player (Se não colocar o count ele irá remover somente 1).
    /p search, (ID) - Ele verifica quantos players tem tal item e se está online.

    Créditos:
    Oneshot
    CaioODemais
    Comedinha (Bruno Carvalho)
     
  18. Curtir
    Sentsuizan recebeu reputação de Alexander Augusto em [DUVIDA] Vancini deve voltar?   
    Desculpem se está na área errada, é meu primeiro post assim .-.
    Fala pessoal do forum TK, ultimamente só venho fazer pedidos mais hoje vim tirar uma dúvida.
    Muita gente está parando de jogar Tibia, por está virando um jogo antigo e meio que sem graça por conta de servidores não inovaram não é mesmo? Ultimamente só temos nas OTserverlist's Baiaks e Globais  Mais me veio na cabeça uma coisa... Quem se lembra do servidor Vancini OTserver? Aquele que fez muito sucesso na época de 8.50, na qual vários servidores foram abertos como : BogaOT, Killzonepvp, Blackpvp, Euro-vancini etc..
    Penso eu que seria uma boa ideia reabrir-lo por conta que muitas pessoas curtem o Baiak e como os verdadeiros jogadores de Tibia sabem esse servidor e outros também como Snow OTs, Slayer etc.. foi uma das bases usadas no baiak.
    Bem, eu estava pensando em reabri-lo na versão 8.60 que é uma das mais jogadas ainda, o que vocês acham ? Vocês jogariam ? Compensa? Acham bom ? Alias, naquela época que rolava um bom pvp hihi.
    Bem aguardo resposta de vocês.
    Imagens do servidor que está assim desde que abri na época de 8.50.
    Tps área epic
    DP
     
    Templo áreas
    Exposição items
    Quests da epic
    Quests da vip (inicial)
    Quets da área free

    Teleports VIP/Free
     
  19. Gostei
    Sentsuizan deu reputação a bringsz em [AJUDA]Erro ao criar conta   
    @Juantibiano
    Basicamente para você criar um personagem você deve ter um personagem base para ele se "espelhar" vamos assim dizer, ou seja, esses personagens chamamos de sample...
     
    Exemplo para eu criar um Goku no meu servidor de DBO precisa ter um personagem na minha database chamado de Goku Sample, geralmente essas contas ficam na mesma conta que o acc manager...
     
    Esse erro pode ser que quando você tenta criar um personagem ele vai procurar o Sample e não acha, esse personagem é um personagem novo? ou quando você baixou já veio com esse erro? Caso já veio assim, só esse personagem da erro ou todos?
  20. Gostei
    Sentsuizan deu reputação a bringsz em [AJUDA]Erro ao criar conta   
    Solucionou?
  21. Gostei
    local pos = fromPosition local aqui = getPlayerPosition(cid) local vocs = {300, 301, 302, 303, 304, 305, 306, 307} local agua = {4610, 4612, 4611, 4664, 4613, 4666, 4646, 4654, 4609, 4665, 4608, 4625, 4665, 4666, 4645} local parede = {1030, 1029, 1025, 1026, 1027, 1259, 1028, 1032, 1034, 1033, 1536, 1533, 873, 919, 874, 1037, 2700, 2708, 4472, 4475, 4471, 3388, 3373, 3363, 3398, 3408, 3417, 3420, 3407, 3368, 2701, 5130, 6170, 6166, 1596, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 3422} local pedra = {874, 919, 873, 2707, 2784, 2778, 3330, 4471, 4475, 4473, 4472, 4474, 4468, 4478, 4469, 4470, 4479, 2703, 2704, 1534, 2739, 3867, 5324, 5316, 5315, 5317, 1600, 1597, 1601} function onUse(cid, item, fromPosition, itemEx, toPosition) if getDistanceBetween(aqui, toPosition) >= 8 then return doPlayerSendTextMessage(cid, 27, "Está muito longe.") elseif(not(isSightClear(aqui, toPosition, 1))) then return doPlayerSendTextMessage(cid, 27, "Isso é impossivel.") elseif(getTilePzInfo(aqui)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.") elseif(getTilePzInfo(toPosition)) then return doPlayerSendCancel(cid, "Não pode usar a tecnica Deus Dragão em casas ou areas protegidas.") elseif(isInArray(agua, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em agua") elseif(isInArray(parede, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em paredes") elseif(isInArray(pedra, itemEx.itemid)) then return doPlayerSendTextMessage(cid, 27, "voce nao pode usar em pedras") elseif(not(isInArray(vocs, getPlayerVocation(cid)))) then return doPlayerSendTextMessage(cid, 27, "Desculpe, Apenas Minato pode usar a tecnica Deus Dragão.") elseif(isCreature(itemEx.uid)) then return doPlayerSendTextMessage(cid, 27, "Desculpe, mas você não pode teletransportar em criaturas.") end if(doTeleportThing(cid, toPosition, false)) then doSendMagicEffect(pos, 24) doSendMagicEffect(toPosition, 24) doCreatureSay(cid, "Shunshin", 19) return doSendDistanceShoot(pos, toPosition, 16) end return doPlayerSendCancel(cid, "Desculpe nao foi possivel.") end
  22. Gostei
    Sentsuizan deu reputação a KotZletY em Player morre e nao dropa corpo   
    @Juantibiano entendo, é realmente um pena caso tenhamos editado muita coisa na distro. 
    Que bom que conseguiu resolver, eu particularmente nunca passei por erros assim.
     
    Era estranho, ambos scripts, estava funcionando, eu sempre testo, então lhe passei os dois que eu usava quando usava distro 0.4, e que sempre funcionou perfeitamente. Hahahaha.
     
    Em fim, abraços, e boa sorte com seu servidor! 
     
    xD
  23. Gostei
    Sentsuizan recebeu reputação de ZoR em Player morre e nao dropa corpo   
    tava analisando isso hoje, mas nao vi com calma, vou ver aqui e deixo a resposta para você amanha. Caso eu ache a solução posto aqui no tópico. Obrigado pelo suporte.
  24. Gostei
    Sentsuizan deu reputação a Biscoito Gamer em [DUVIDA] Vancini deve voltar?   
    Namoral, eu jogaria muito rs bons tempos cara BogaOT velho que sdd dessa ***** Killzone *.* quem tinha o boneco era rei na epoca, muito bom, precisando de ajuda em algo só chamar \z
  25. Gostei
    Sentsuizan deu reputação a DukeeH em [Ajuda] Sobre colocar donate   
    Não, você não paga taxa para a empresa.
    Sim, sempre existe a chance de eles te processarem, porem é quase impossível tendo em vista o tamanho da empresa e o tamanho do seu server.

Informação Importante

Confirmação de Termo