Ir para conteúdo
  • Cadastre-se

Crypter

Membro
  • Total de itens

    343
  • Registro em

  • Última visita

  • Dias Ganhos

    4

Histórico de Curtidas

  1. Gostei
    Crypter recebeu reputação de fhoenix00 em (Resolvido)Spawn de mega aleatório igual de shiny   
  2. Curtir
    Crypter recebeu reputação de Kitsune Shiro em Como atribuir tempo para aparecer a segunda effect ?   
    Explicação de como fazer isso,
     
    Você pode usar um addEvent, que iria fazer X coisa em Y tempo , no seu caso é lançar o efeito 230 em 1segundos ficando assim
     
    Esta é a função vazia
    addEvent( )
     
    Agora vamos ajustar ela, colocando a função que lança efeito.
     
    addEvent(doSendMagicEffect, 1000, getThingPosition(getCreatureTarget(cid), 229)
     
     
    A Script completa ficaria assim,
     
     
    Caso alguma resposta tenha solucionado sua dúvida , marque como melhor resposta.
  3. Obrigado
    Crypter deu reputação a Luan Zero em Attack speed - 2018   
    Olá pessoal, desejo um ótimo dia para todos, é notório que 90% da galera que tem um servidor com derivado de nto/dbo procuram pelo sistema de Speed Attack igual do NtoBrasil, então hoje venho disponibilizar para vocês, o sistema, eu fiz com a ajuda ADM do ultiimate "LKS", lembrando que o sistema eu testei em uma sources 0.4, alguns amigos meu disseram que funcionou em 0.3.6.
     
    Vamos lá, na sua sources procure pelo arquivo : Player.cpp.
     
    e procure por : 
     
    uint32_t Player::getAttackSpeed() { Item* weapon = getWeapon(); if(weapon && weapon->getAttackSpeed() != 0) return weapon->getAttackSpeed(); return vocation->getAttackSpeed(); } e substitua pelo código. 
     
    uint32_t Player::getAttackSpeed() const { int32_t SpeedAttack; SpeedAttack = getSkill(SKILL_FIST, SKILL_LEVEL); if(SpeedAttack < 100) SpeedAttack = 1000; else if(SpeedAttack >= 100 && SpeedAttack < 110) SpeedAttack = 800; else if(SpeedAttack >= 110 && SpeedAttack < 120) SpeedAttack = 600; else SpeedAttack = 500; return SpeedAttack; } Explicando, onde tem 100, 110, 120, é o que precisa de fist para bater rápido, 
     
    Onde tem SpeedAtacck = 500, é 2 hits por segundos, quanto menor mais rápido o personagem vai hitar.
     
    Créditos ao LKS Pela ajuda.
     
  4. Obrigado
    Crypter deu reputação a Gassadas em Estou procurando um Mapper   
    Ola, estou procurando um mapper experiente para entrar em uma equipe de World of nanatsu (Nanatsu no taizai), em nossa equipe so falta mapper pois ja temos 2 sprites, 1 desgner e 2 programadores.
    Irei deixar alguns projetos nosso aq para te converser a entrar ? 
     Para entrar em contato com nossa equipe me adicione la no discord Hawk de Natal#7065
     


  5. Gostei
    Crypter recebeu reputação de gilmarloks em The Ruby Server - Base Pokémon   
    Recomendo entrar no discord do projeto, lá tem todos os links que você vai precisar, ob, item editor e etc.
    https://discord.gg/XTrZGpy
     
    Object builder que suporte o dat e spr
    https://mega.nz/#!A8Z0yIQK!_CmjhJ56vEzkkedVFUQjw9LKBIp-tcZScIJB1-2PNlY
  6. Gostei
    Crypter recebeu reputação de lordzetros em World of Nanatsu   
    Recrutamento para equipe
          Aberto vagas para Programadores, Spriters, Designers e mappers. 
     
    Caso tenha interesse deixe seu contato aqui no tópico, ou mande-me uma mensagem aqui no xtibia.
     
     
    Informações do projeto:
     

     
     

     
  7. Gostei
    Crypter recebeu reputação de Polguilo em (Resolvido)[AJUDA - SCRIPT] Bug no Target 8.60 + Auto Stack Item   
    Abre o globalevents.xml e adicionar três zeros (000) no tempo de todos eventos, é utilizado ms nessa source, e na sua src antiga é utilizado segundo
  8. Gostei
    Crypter deu reputação a oclipper em OT 7.6 war 1/1   
    Versão 7.6

    Ta cansado dos OT de war porco de hoje? Esse é o OT de war estilo das antigas
     
    1/1 = Antica 
    2/2 = Nova 
    3/3 = Secura 
    4/4 = Amera 
    5/5 = Calmera 
    6/6 = Hiberna 
    7/7 = Harmonia
     

     
    Video:
    https://fbcdn-video-n-a.akamaihd.net/hvideo-ak-xfp1/v/t43.1792-2/13058643_1678069482458554_1518186926_n.mp4?efg=eyJybHIiOjE1MDAsInJsYSI6MTAyNCwidmVuY29kZV90YWciOiJzdmVfaGQifQ%3D%3D&rl=1500&vabr=164&oh=45993adcee35b47a12cb5bb526eec8f5&oe=5719118F&__gda__=1461259604_00cd9cd5bb96a4c825c193f109b202a7
     
    Download:
    http://www.mediafire.com/download/kdc4vp4ijcnahai/world_war_binary_and_source.rar
     
    Scan:
    https://www.virustotal.com/pt/file/d1966461c19bdfe67e331487a40fca445438912e6f2c548bad7e68b9ecc4d087/analysis/1461247838/
  9. Gostei
    Crypter recebeu reputação de Vodkart em World of Nanatsu   
    Recrutamento para equipe
          Aberto vagas para Programadores, Spriters, Designers e mappers. 
     
    Caso tenha interesse deixe seu contato aqui no tópico, ou mande-me uma mensagem aqui no xtibia.
     
     
    Informações do projeto:
     

     
     

     
  10. Gostei
    Crypter recebeu reputação de Soaresdk em (Resolvido)(Ajuda) [8.60] Sistema de Recompensa   
  11. Gostei
    Crypter recebeu reputação de Yusuke Urameshi em (Resolvido)ataques dos pokémon   
  12. Gostei
    Crypter recebeu reputação de J.L em (Resolvido)Colocar distancia na pesca   
    editei testa novamente
  13. Gostei
    Crypter recebeu reputação de J.L em (Resolvido)Colocar distancia na pesca   
    .
     
  14. Gostei
    Crypter deu reputação a Agaka em False Tile   
    Fala galera do TK, estou fazendo alguns scripts para melhor cada vez mais. Achei um interessante o False Tile, então decidi postar o mesmo aqui. O que ele faz? Imagine uma sala com o chão todo igual, e só tem um caminho correto no meio desses tiles. Se você errar o caminho, vai voltar ao inicio e tomar um dano. Moral da história "Encontre o caminho correto, mas tome cuidado pois você pode morrer." Bom, vamos lá.
     
    Em data/movements/scripts, crie um arquivo .lua com o nome falsetile, e em seguida adicione o script dentro.
    Em movements.xml, adicione a tag.
     
    Explicação.
    9467 - É o action id que TODOS os TILES ERRADOS devem ter.
    itemid="407" - Id do piso.
     
    Esta foi a área que criei.

    Nas linhas azuis - São os tiles sem action id, ou seja, é o caminho correto.
    O restante dos tiles tem action id = 9467 e se você pisar nele vai voltar ao inicio da sala, e vai tomar um dano.
  15. Gostei
    Crypter deu reputação a Codex NG em [C++] TFS 1.2 / OTX Server 3 New Npc Currency System   
    Sorry I don't speak spanish so you will have to bare with me.
     
    This is a new way for people to create npc's which use different types of currency, rather than a coming up with different items to trade with the npc or trying to edit the npc modules this method simplifies everything by providing the npc with a npc currency id.
     
    All this npc currency id is, is a storage value.. pretty simple eh?
    If the npc doesn't have a currency id then it will use the normal currency e.g. gold, plat, cc etc..
     
    I originally posted this on otland, but fuck them xD
     
    Using Lailene here you can see she has a currency attribute with id of 123456
    <?xml version="1.0" encoding="UTF-8"?> <npc name="Lailene" currency="123456" script="lailene.lua" walkinterval="2000" floorchange="0" speechbubble="2"> <health now="100" max="100"/> <look type="279" head="114" body="94" legs="113" feet="114" addons="0"/> </npc>  
    Now any player who has a storage value of 123456 can purchase things from her shop provided they have enough value stored within the storage, similar to having money in the bank.
    The money or in this case the storage value is added and removed from the player in real time.
     
    Lets get to the code
     
    game.cpp
    Find this
    bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) Replace the whole function with this.
    bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) { if (cylinder == nullptr) { return false; } if (money == 0) { return true; } uint32_t currencyId = 0; Player* player; if (Creature* creature = cylinder->getCreature()) { if (Player* p = creature->getPlayer()) { currencyId = p->getNpcCurrencyId(); player = p; } } if (!currencyId) { std::vector<Container*> containers; std::multimap<uint32_t, Item*> moneyMap; uint64_t moneyCount = 0; for (size_t i = cylinder->getFirstIndex(), j = cylinder->getLastIndex(); i < j; ++i) { Thing* thing = cylinder->getThing(i); if (!thing) { continue; } Item* item = thing->getItem(); if (!item) { continue; } Container* container = item->getContainer(); if (container) { containers.push_back(container); } else { const uint32_t worth = item->getWorth(); if (worth != 0) { moneyCount += worth; moneyMap.emplace(worth, item); } } } size_t i = 0; while (i < containers.size()) { Container* container = containers[i++]; for (Item* item : container->getItemList()) { Container* tmpContainer = item->getContainer(); if (tmpContainer) { containers.push_back(tmpContainer); } else { const uint32_t worth = item->getWorth(); if (worth != 0) { moneyCount += worth; moneyMap.emplace(worth, item); } } } } if (moneyCount < money) { return false; } for (const auto& moneyEntry : moneyMap) { Item* item = moneyEntry.second; if (moneyEntry.first < money) { internalRemoveItem(item); money -= moneyEntry.first; } else if (moneyEntry.first > money) { const uint32_t worth = moneyEntry.first / item->getItemCount(); const uint32_t removeCount = (money / worth) + 1; addMoney(cylinder, (worth * removeCount) - money, flags); internalRemoveItem(item, removeCount); break; } else { internalRemoveItem(item); break; } } } else { int32_t value; player->getStorageValue(currencyId, value); if (value < money) { return false; } player->addStorageValue(currencyId, value - money); } return true; } Next find this
    void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) Replace the whole function with this
    void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/) { if (money == 0) { return; } if (Creature* creature = cylinder->getCreature()) { if (Player* player = creature->getPlayer()) { if(uint32_t currencyId = player->getNpcCurrencyId()){ int32_t value; player->getStorageValue(currencyId, value); player->addStorageValue(currencyId, value + money); return; } } } uint32_t crystalCoins = money / 10000; money -= crystalCoins * 10000; while (crystalCoins > 0) { const uint16_t count = std::min<uint32_t>(100, crystalCoins); Item* remaindItem = Item::CreateItem(ITEM_CRYSTAL_COIN, count); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } crystalCoins -= count; } uint16_t platinumCoins = money / 100; if (platinumCoins != 0) { Item* remaindItem = Item::CreateItem(ITEM_PLATINUM_COIN, platinumCoins); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } money -= platinumCoins * 100; } if (money != 0) { Item* remaindItem = Item::CreateItem(ITEM_GOLD_COIN, money); ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags); if (ret != RETURNVALUE_NOERROR) { internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT); } } }  
    npc.cpp
    Look for this
    pugi::xml_attribute attr; if ((attr = npcNode.attribute("speed"))) { baseSpeed = pugi::cast<uint32_t>(attr.value()); } else { baseSpeed = 100; } Right underneath that you are going to place this.
    if ((attr = npcNode.attribute("currency"))) { currency = pugi::cast<uint32_t>(attr.value()); }  
    npc.h
    Look for this
    bool isPushable() const final { return walkTicks > 0; } Place this right underneath
    uint32_t getCurrencyId() const { return currency; } Look for this
    uint32_t walkTicks; Place this right underneath
    uint32_t currency;  
    player.cpp
    Find this
    void Player::openShopWindow(Npc* npc, const std::list<ShopInfo>& shop) Replace that function with this
    void Player::openShopWindow(Npc* npc, const std::list<ShopInfo>& shop) { shopItemList = shop; sendShop(npc); sendSaleItemList(npc); } Next find this
    bool Player::updateSaleShopList(const Item* item) Replace that function with this
    bool Player::updateSaleShopList(const Item* item) { uint16_t itemId = item->getID(); if (itemId != ITEM_GOLD_COIN && itemId != ITEM_PLATINUM_COIN && itemId != ITEM_CRYSTAL_COIN) { auto it = std::find_if(shopItemList.begin(), shopItemList.end(), [itemId](const ShopInfo& shopInfo) { return shopInfo.itemId == itemId && shopInfo.sellPrice != 0; }); if (it == shopItemList.end()) { const Container* container = item->getContainer(); if (!container) { return false; } const auto& items = container->getItemList(); return std::any_of(items.begin(), items.end(), [this](const Item* containerItem) { return updateSaleShopList(containerItem); }); } } if (client) { client->sendSaleItemList(shopOwner, shopItemList); } return true; } Next you are going to look for
    uint64_t Player::getMoney() const Now right underneath that function you are going to place these.
    uint64_t Player::getMoney(Npc* npc) const { uint64_t cash; setNpcCurrencyId(npc); uint32_t currencyId = getNpcCurrencyId(); if (currencyId) { int32_t value; getStorageValue(currencyId, value); cash = (uint64_t)value; } else { cash = getMoney(); } return cash; } void Player::setNpcCurrencyId(Npc* npc) const{ currencyId = npc->getCurrencyId(); } uint32_t Player::getNpcCurrencyId() const { return currencyId; }  
    player.h
    Look for this
    uint64_t getMoney() const; Place this right underneath
    uint64_t getMoney(Npc*) const; void setNpcCurrencyId(Npc*) const; uint32_t getNpcCurrencyId() const; Find this
    void sendShop(Npc* npc) const { if (client) { client->sendShop(npc, shopItemList); } } Place this right underneath
    void sendSaleItemList(Npc* npc) const { if (client) { client->sendSaleItemList(npc, shopItemList); } } Find this
    uint32_t manaMax; Place this right underneath
    mutable uint32_t currencyId;  
    protocolgame.cpp
    Now find this function
    void ProtocolGame::sendSaleItemList(const std::list<ShopInfo>& shop) Place this right underneath
    void ProtocolGame::sendSaleItemList(Npc* npc, const std::list<ShopInfo>& shop) { NetworkMessage msg; msg.addByte(0x7B); msg.add<uint64_t>(player->getMoney(npc)); std::map<uint16_t, uint32_t> saleMap; if (shop.size() <= 5) { // For very small shops it's not worth it to create the complete map for (const ShopInfo& shopInfo : shop) { if (shopInfo.sellPrice == 0) { continue; } int8_t subtype = -1; const ItemType& itemType = Item::items[shopInfo.itemId]; if (itemType.hasSubType() && !itemType.stackable) { subtype = (shopInfo.subType == 0 ? -1 : shopInfo.subType); } uint32_t count = player->getItemTypeCount(shopInfo.itemId, subtype); if (count > 0) { saleMap[shopInfo.itemId] = count; } } } else { // Large shop, it's better to get a cached map of all item counts and use it // We need a temporary map since the finished map should only contain items // available in the shop std::map<uint32_t, uint32_t> tempSaleMap; player->getAllItemTypeCount(tempSaleMap); // We must still check manually for the special items that require subtype matches // (That is, fluids such as potions etc., actually these items are very few since // health potions now use their own ID) for (const ShopInfo& shopInfo : shop) { if (shopInfo.sellPrice == 0) { continue; } int8_t subtype = -1; const ItemType& itemType = Item::items[shopInfo.itemId]; if (itemType.hasSubType() && !itemType.stackable) { subtype = (shopInfo.subType == 0 ? -1 : shopInfo.subType); } if (subtype != -1) { uint32_t count; if (!itemType.isFluidContainer() && !itemType.isSplash()) { count = player->getItemTypeCount(shopInfo.itemId, subtype); // This shop item requires extra checks } else { count = subtype; } if (count > 0) { saleMap[shopInfo.itemId] = count; } } else { std::map<uint32_t, uint32_t>::const_iterator findIt = tempSaleMap.find(shopInfo.itemId); if (findIt != tempSaleMap.end() && findIt->second > 0) { saleMap[shopInfo.itemId] = findIt->second; } } } } uint8_t itemsToSend = std::min<size_t>(saleMap.size(), std::numeric_limits<uint8_t>::max()); msg.addByte(itemsToSend); uint8_t i = 0; for (std::map<uint16_t, uint32_t>::const_iterator it = saleMap.begin(); i < itemsToSend; ++it, ++i) { msg.addItemId(it->first); msg.addByte(std::min<uint32_t>(it->second, std::numeric_limits<uint8_t>::max())); } writeToOutputBuffer(msg); }  
    protocolgame.h
    Find this
    void sendSaleItemList(const std::list<ShopInfo>& shop); Place this right underneath
    void sendSaleItemList(Npc* npc, const std::list<ShopInfo>& shop);  
    luascript.cpp
    Find
    int LuaScriptInterface::luaPlayerAddMoney(lua_State* L) Replace that whole function with this
    int LuaScriptInterface::luaPlayerAddMoney(lua_State* L) { // player:addMoney(money[, currencyId]) uint64_t money = getNumber<uint64_t>(L, 2); uint32_t currencyId = getNumber<uint32_t>(L, 3); Player* player = getUserdata<Player>(L, 1); if (player) { if (currencyId) { int32_t value; player->getStorageValue(currencyId, value); player->addStorageValue(currencyId, value + money); } else { g_game.addMoney(player, money); } pushBoolean(L, true); } else { lua_pushnil(L); } return 1; } Next find this function which should be right below it.
    int LuaScriptInterface::luaPlayerRemoveMoney(lua_State* L) Replace that whole function with this
    int LuaScriptInterface::luaPlayerRemoveMoney(lua_State* L) { // player:removeMoney(money[, currencyId]) Player* player = getUserdata<Player>(L, 1); if (player) { uint64_t money = getNumber<uint64_t>(L, 2); uint32_t currencyId = getNumber<uint32_t>(L, 3); if (currencyId) { int32_t value; player->getStorageValue(currencyId, value); if (value < money) { pushBoolean(L, false); return 1; } player->addStorageValue(currencyId, value - money); pushBoolean(L, true); } else { pushBoolean(L, g_game.removeMoney(player, money)); } } else { lua_pushnil(L); } return 1; }  
  16. Gostei
    Crypter recebeu reputação de DarkRed em (Resolvido)shiny stone erro no distito   
    Arrumei o bug que tinha e alguns que dariam problema no stats do pokemon
    local evo = { --nome do shiny, qnts stones precisa ["Snorlax"] = {"Shiny Snorlax", 5}, ["Gengar"] = {"Shiny Gengar", 7}, ["Ninetales"] = {"Shiny Ninetales", 4}, ["Raichu"] = {"Shiny Raichu", 5}, ["Alakazam"] = {"Shiny Alakazam", 7}, } local pokeballs = { [2531] = {"Pokeball"}, [2557] = {"Superball"}, [2524] = {"Greatball"}, [2525] = {"Ultraball"}, [2523] = {"Masterball"}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if isCreature(itemEx.uid) and isMonster(itemEx.uid) and getCreatureMaster(itemEx.uid) == cid then local monster = getCreatureName(itemEx.uid) if evo[monster] then if getPlayerItemCount(cid, item.itemid) >= evo[monster][2] then doPlayerSendTextMessage(cid, 27, "Congratulations! Your "..getPokeName(itemEx.uid).." evolved into a "..evo[monster][1].."!") local health, maxHealth = getCreatureHealth(itemEx.uid), getCreatureMaxHealth(itemEx.uid) doSendMagicEffect(getThingPos(itemEx.uid), 18) doRemoveCreature(itemEx.uid) doPlayerRemoveItem(cid, item.itemid, evo[monster][2]-1) doRemoveItem(item.uid, 1) doSummonMonster(cid,evo[monster][1]) local pokeball = getPlayerSlotItem(cid, 8) if not pokeball then return false end doItemSetAttribute(pokeball.uid, "poke", evo[monster][1]) doItemSetAttribute(pokeball.uid, "level", pokes[evo[monster][1]].level) doItemSetAttribute(pokeball.uid, "happy", 110) local pk = getCreatureSummons(cid)[1] local getShinyPokeballs = balls[pokeball.itemid] doTransformItem(pokeball.uid, getShinyPokeballs.newBall) adjustStatus(pk, pokeball.uid, true, false, true) return true else return doPlayerSendTextMessage(cid, 27, "You need atleast ".. evo[monster][2] .." stones to do it!") end end end return false end  
  17. Gostei
    Crypter deu reputação a Luan Zero em Sprites NTO   
    Bom, estarei sempre trazendo algumas sprites antigas perdidas em meu computador, lembrando que elas são 100% de minha autoria, antes que qualquer zé merdinha comente que é de fulano, até por quê tenho provas que são minhas.
     
    Prints : 
     
    Madara
     
    Naruto
     
    Shikamaru
     
     
    Raikage
     
    Kiba
     
     
    Itachi 
     
    Lembrando que algumas dessas sprites são de 2016, ou começo de 2017, e outras do fim de 2017, todas sprites que estão circulando por ai sem minha permissão, eu irei postar para que todos possam ter acesso, irei postar várias outras que estarei fiscalizando nos server e colocando aqui.
     
    Downloand
     
    http://www.mediafire.com/file/xz1zrl8ojx28hj3/Sprites Zero.rar
     
    Scan :
     
     
     
    By: Zeroº
  18. Gostei
    Crypter deu reputação a Marco Oliveira em Auto git pull e backup   
    O script nada mais faz que dar um git pull do seu repositório automaticamente quando o servidor recebe reload ou crasha.
     
    Na pasta raiz de seu repositório crie um arquivo chamado startserver.sh e uma pasta chamada logs dentro da pasta raiz de seu site.
     
    pastaOt="caminho do servidor" comandoBackup="caminho do servidor/backup/backup.sh" echo "Iniciando o programa" cd $pastaOt mkdir -p /logs mkdir -p build while true do cd $pastaOt ./tfs 2>&1 | awk '{ print strftime("%F %T - "), $0; fflush(); }' | tee "/var/www/html/logs/$(date +"%F %H-%M-%S.log")" exitcode=${PIPESTATUS[0]} if [ $exitcode -eq 0 ]; then echo "Clean close" git pull cd build cmake .. make if [$? -ne 0]; then echo "Compilation failed!" else echo "Compilation successful!" mv tfs .. fi cd .. else echo "Server Crash!!! (O arquivo de log está guardado na pasta logs)" fi echo "Server Down, backup database..." $comandoBackup sleep 2 done;  
    Ainda na pasta raiz do seu servidor crie uma pasta chamada backup e dentro dela crie um arquivo chamado backup.sh
     
    CAMINHO="caminho do servidor/backup/" NOMEBACKUP="nome do arquivo de backup" USER="usuario do phpmyadmin" SENHA="senha do phpmyadmin" BANCO="nome da database" TEMPO="$(date +'%d-%m-%Y-%H-%M')" 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 Não se esqueça da permissão 777 em todos os arquivos, e também de ligar o servidor com o comando ./startserver.sh
     
    OBS: você deve configurar a chave ssh no seu git para que não peça o e-mail e senha a cada reload, o git clone também deve ser feito atraves de ssh e não https
  19. Gostei
    Crypter recebeu reputação de amora murder em [BUG] Nome de item no Market   
    Você tem que alterar no próprio object builder abrindo seu dat/spr
     

  20. Gostei
    Crypter recebeu reputação de KotZletY em [BUG] Nome de item no Market   
    Você tem que alterar no próprio object builder abrindo seu dat/spr
     

  21. Gostei
    Crypter recebeu reputação de Vodkart em [BUG] Nome de item no Market   
    Você tem que alterar no próprio object builder abrindo seu dat/spr
     

  22. Obrigado
    Crypter recebeu reputação de PlaYerZ em [HELP] Cliente distorcido   
    Campo de visão desse cliente está expandida, como no seu servidor não está igual os tile/item no mapa bugam ficando assim, para arrumar você teria que descobrir o valor usado nesse cliente.
  23. Gostei
    Crypter recebeu reputação de UnknowLoad em (Resolvido)Script 3 tiles teleport   
    testa ai 
    local config = { posicao = { x = 1168, y = 731, z = 13}, -- Posição em que o player deve estar no altar need = { {item=2140,p={ x = 1295, y = 719, z = 13}},{item=2140,p={ x = 1296, y = 719, z = 13}},{item=2140,p={ x = 1297, y = 719, z = 13}},{item=2140,p={ x = 1295, y = 719, z = 13}} }, teleporte = {1387, { x = 1209, y = 818, z = 13}, { x = 1850, y = 481, z = 12} }, -- { id do Teleporte / onde será criado o teleporte / onde irá teleportar } tempo = 5000 -- Tempo para que o teleporte desapareça } function removeTP() doRemoveItem(getTileItemById(config.teleporte[2], config.teleporte[1]).uid) end function onUse(cid, item, fromPosition, itemEx, toPosition) local pId = getTopCreature(config.posicao).uid if ( pId == 0 or not isPlayer(pId) ) then return true and doPlayerSendCancel(cid, "You need to stay on the correct floor.") end local items_check = {} for p, v in pairs(config.need) do local posiItem = getTileItemById(v.item, v.p) if posiItem ~= 0 then table.insert(items_check,posiItem.uid) end end if not #items_check == #config.need then return true and doPlayerSendCancel(cid, "You need to put all items on the floors.") end for p, v in pairs(items_check) do if v then doRemoveItem(v) end end doCreateTeleport(config.teleporte[1], config.teleporte[3], config.teleporte[2]) doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) addEvent(removeTP, config.tempo) return true end  
  24. Gostei
    Crypter deu reputação a vital900 em Elysium Online [Download]   
    Fala pessoal, beleza? 
    Desculpa a formatação ruim... e todos os defeitos que trarei nesse post, para quem não me conhece eu fui mapper por muito tempo... um dos pioneiros do tibia! E desde quando comecei a mapear até o dia que parei eu tive um projeto de server chamado elysium... nele passaram grandes mappers que muitos aqui nem nunca ouviram falar... seja porque foram professores de map junto a mim ou meus queridos alunos... enfim... vamos falar desse server!
     
    este servidor começou com dois amigos de fórum: vital900 (eu) e o lordzezim... hoje em dia nem sei o que o José faz da vida... mas sempre guardei esse nosso projeto com muito amor e carinho e sempre pensei em finaliza-lo depois de formar no curso que escolhi... como cada vez mais tenho menos tempo e vejo que nunca irei finaliza-lo decidi postar todo o esforço de uma grande equipe, pois não ache que só tem mapa... tem de tudo, desde scripts a sprites, inclusive roleplay, map, etc... e a equipe que construiu isso comigo sempre foi a elite da época... então espero que quem tenha o interesse em continuar esse grande trabalho tenha respeito por quem iniciou e passou por ele... e quando estiver em construção postar fotos entre outros para que as pessoas vejam a continuação desse trabalho...
     
    Algum dos posts desse nosso trabalho que se iniciou em 2009-2011:
    ** como disse é um projeto de 2009-2011, que se estendeu por 4-6 anos... logo tem muita coisa noob pela incapacidade minha ou pela falta de sprites da época ?
     
    Eis o link do meu grande amor, com tudo o que foi feito... planejado e construído!
    https://drive.google.com/open?id=1RQs9SUeDz57FdCrB9ZEE5JiJAl18bq1T
     
    *Obs: na epoca me ofereceram 3000 reais por esse material que estou disponibilizando de forma gratuita... como ja disse espero que tenham respeito por esse material e no mínimo as devidas referências. 
  25. Curtir
    Crypter recebeu reputação de KotZletY em Problema com houseSell   
    @KotZletY Eu postei o talkaction.cpp com a verificação do vendedor/comprador, como o carinha pediu
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo