Ir para conteúdo

Líderes


Conteúdo Popular

Mostrando conteúdo com a maior reputação desde 16-03-2019 em todas áreas

  1. 9 pontos
    [C++] Unique Item System testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) contribuição: gristony Olá galera, beleza? Então, tem tanto tempo que eu não faço minhas contribuições e hoje eu resolvi postar um sistema bastante simples, porém de extrema necessidade e importância nos servidores que dão items iniciais aos jogadores, especialmente os poketibias. Então com esse sistema o jogador fica impossibilitado de jogar o item fora e também de fazer trocas com outros jogadores, sendo literalmente únicos. Eu criei ele em cima do código do TFS 0.3.6, porém é um sistema com o código completamente simples, então acredito que se instalado atentamente em outras versões, funcione sem problemas. Bom, sem mais delongas vamos ao que interessa. Vá ao game.cpp e procure por esta função: bool Game::playerMoveItem(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint8_t count) Então, dentro desta mesma função, você procura por esta condição aqui. if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } E logo abaixo adicione esta condição: Item* tmpItem = NULL; Container* tmpContainer = NULL; if(tmpContainer = item->getContainer()) { for(ContainerIterator it = tmpContainer->begin(); it != tmpContainer->end(); ++it) { if(tmpItem = (*it)->getItem()) { boost::any value = tmpItem->getAttribute("unique"); if(!value.empty() && getMap()->getTile(toPos)) { player->sendCancel("Has a unique item in this bag, you can't drop this item."); return false; } } } } boost::any value = item->getAttribute("unique"); if(!value.empty() && (!toCylinder->getItem() && toCylinder != player && toCylinder->getParent() != player || toCylinder->getItem() && toCylinder->getItem()->isGroundTile() || toCylinder->getItem() && toCylinder->getItem()->getContainer() && !toCylinder->getItem()->getContainer()->getDepot() && toCylinder->getItem()->getParent() != player)) { player->sendCancel("It is a unique item, you can't drop this item."); return false; } Certo. Continuando no game.cpp, você vai procurar pela função: ReturnValue Game::internalMoveItem(Creature* actor, Cylinder* fromCylinder, Cylinder* toCylinder, int32_t index, Item* item, uint32_t count, Item** _moveItem, uint32_t flags /*= 0*/) Dentro da função, você procura pela condição: //update item(s) if(item->isStackable()) E troque por esta: //update item(s) if(item->isStackable()) { if(toItem && toItem->getID() == item->getID()) { boost::any item_value = item->getAttribute("unique"); boost::any toItem_value = toItem->getAttribute("unique"); if(!item_value.empty() && !toItem_value.empty() || item_value.empty() && toItem_value.empty()) { n = std::min((uint32_t)100 - toItem->getItemCount(), m); toCylinder->__updateThing(toItem, toItem->getID(), toItem->getItemCount() + n); updateItem = toItem; } } if(m - n > 0) { moveItem = Item::CreateItem(item->getID(), m - n); boost::any value = item->getAttribute("unique"); if(!value.empty()) moveItem->setAttribute("unique", 1); } else moveItem = NULL; if(item->isRemoved()) freeThing(item); } Sem sair do game.cpp, você procura pela função: bool Game::playerRequestTrade(uint32_t playerId, const Position& pos, int16_t stackpos, uint32_t tradePlayerId, uint16_t spriteId) Dentro dela, você procura pela condição: if(!tradeItem || tradeItem->getClientID() != spriteId || !tradeItem->isPickupable() || (tradeItem->isLoadedFromMap() && (tradeItem->getUniqueId() != 0 || (tradeItem->getActionId() != 0 && tradeItem->getContainer())))) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } E logo abaixo você adiciona a condição: boost::any value = tradeItem->getAttribute("unique"); if(!value.empty()) { player->sendTextMessage(MSG_INFO_DESCR, "It is a unique item, you can't trade this item."); return false; } Item* tmpItem = NULL; Container* tmpContainer = NULL; if(tmpContainer = tradeItem->getContainer()) { for(ContainerIterator it = tmpContainer->begin(); it != tmpContainer->end(); ++it) { if(tmpItem = (*it)->getItem()) { boost::any value = tmpItem->getAttribute("unique"); if(!value.empty()) { player->sendTextMessage(MSG_INFO_DESCR, "Has a unique item in this bag, you can't trade this item."); return false; } } } } Pronto, seu sistema de unique está instalado e pronto para ser utilizado. Para você setar o item unique, basta: doItemSetAttribute(item.uid, "unique", 1) Algumas imagens Bom, é isso galera, espero que gostem e façam bom proveito. ;D
  2. 8 pontos
    [C++] Monsters Passive System testado: TFS - 0.3.6 (porém acredito que funcione em outros) autor: Tony Araújo (OrochiElf) Eai galera, tranquilão? Estou eu aqui novamente, e hoje eu vou compartilhar com vocês um sistema que eu vejo muitas pessoas pedindo e buscando ajuda (principalmente no meu inbox kkkkk), seria ele o sistema de monstros passivos, que consiste naquela criatura que só ataca o jogador que o atacou, caso contrário ele fica andando normalmente. O sistema foi desenvolvido em cima do código do TFS 0.3.6, porém caso instale prestando bastante atenção em outras versões, funcione, talvez seja necessário mudar algum código, porém bem simples. Bom, vamos ao sistema. Em creature.cpp, procure pela função: bool Creature::setAttackedCreature(Creature* creature) E altere esta condição: if(attackedCreature) { onAttackedCreature(attackedCreature); attackedCreature->onAttacked(); } Por esta: if(attackedCreature) { onAttackedCreature(attackedCreature); attackedCreature->onAttacked(); attackedCreature->addDamagePoints(this, 0); } Procure pela função: void Creature::addDamagePoints(Creature* attacker, int32_t damagePoints) E troque por esta: Agora vá em monster.cpp e procure pela função: void Monster::onThink(uint32_t interval) E dentro dela, procure pela condição: else if(!targetList.empty()) E troque por esta: else if(!targetList.empty()) { if(!followCreature || !hasFollowPath) searchTarget(); } Procure pela função: bool Monster::selectTarget(Creature* creature) E troque por esta: Bom galera, espero que gostem e que façam bom uso. Qualquer bug ou problema, comenta aí pra eu resolver.
  3. 3 pontos
    Fala galera, tranquilão? Bom, hoje eu to aqui pra apresentar pra vocês o meu xodó. O projeto no qual já trabalho tem 4 anos, e de muita luta e sofrimento kkkkkkk, afinal, passamos por trancos e barrancos. Foi um servidor que eu pensei em fazer diferente, a forma que ele funcionava. Trabalhei em cima de uma source até eu criar a minha própria, voltada completamente para pokémon, para ter um melhor desempenho, tirando todas as funções do tibia e deixando o servidor bem mais leve. Bom, vamos falar exatamente o que é o oldPokemon. Eu criei esse servidor, junto com meu primo João, na ideia de trazer o oldschool do poketibia de volta a vida. Eu vejo muita gente comentando em vários forums / canais de poketibia / grupos do fb, que sentem saudades do antigo SvkE, e olha, eu também sentia, então foi de onde partimos nessa dura jornada de trazer um servidor que fosse fielmente o SvkE, porém com vários sistemas novos e funções inovadoras em nosso client e servidor. É com grande alegria que compartilho com vocês o Beta Test deste servidor, após uma longa caminhada. Algumas imagens do servidor: O servidor está contando com os seguintes sistemas: E MUITO MAIS! Para criar a conta, basta entrar no 1/1 e criar pelo Account Manager. Discord Link: https://discord.gg/uT2v4X Download Link: https://www.dropbox.com/s/r1mgoh052idvhkd/oldPokemon Player.rar?dl=0 https://www.mediafire.com/file/u3wsjv2mmo4fu0u/oldPokemon_Player.rar/file
  4. 3 pontos
    Salve salve galera do XT! Hoje vos trago o Wodbo Wars versão 5.9(de 2016) Creio que muitos daqui que joga dbo deve conhecer esse servidor, atualmente ele está online! Pra quem não sabe eu já fui da equipe, ajudei a dar inicio ao projeto, corrigindo bugs, scripts,mexendo com site,db etc... Por conta de mesquice do Arkam, ele me tirou da equipe e ai rolou treta entre eu e ele. Muitos já devem saber a história. Enfim... Decidi trazer para vocês pois faz muito tempo que a galera vive enchendo o saco para mim postar. E como esse servidor não tem nenhum valor para mim, só guardava e não postava por respeito ao Matheus P.(Arkam), mesmo tendo nossas intrigas, ele é um grande rapaz. Decidi postar, já que o mesmo não liga mais! Imagens: Bom, não estarei postando a distro original, estarei deixando a que ele utilizou no inicio. Recomendo vocês baixarem alguma src(source) e compilarem. Recomendo utilizar a do @Fir3element. No site dele oficial tem um bug de gerar várias vezes a RK, concertei isso para vocês. Assim podendo gera apenas uma vez! A base utilizado nesse servidor foi o Dbo Hunter(criado pelo Renan), esse servidor tem umas gambiarras, mas creio que irá ajudar muitas pessoas que não tem muita experiência de começar do 0. Utilizem como base, sejam criativos e entre pra concorrência ;D DOWNLOAD: Créditos: Matheus Pacheco(Arkam or Arkamed) Yan Liima(Night) As vezes certas pessoas se aproveita de outras para poder chegar longe. ;( Façam um bom aproveito, abraços!
  5. 2 pontos
    Tenta assim : function onSay(cid, words, param, channel) local poss = {{x=82, y=296, z=7}, {x=82, y=297, z=7}, {x=82, y=298, z=7}, {x=82, y=299, z=7}, {x=82, y=300, z=7}, {x=82, y=301, z=7}} -- poss que vai nascer o item local item = {id=2160, count =10} --- id = id do item, count = quantidade de iten que vai aparecer for i, pos in ipairs(poss) do doCreateItem(item.id, item.count, pos) doSendMagicEffect(pos, 10) end return true end <talkaction log="yes" words="/teste" access="5" event="script" value="itempos.lua"/>
  6. 2 pontos
    em game.cpp em baixo de if(!player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { if((std::abs(playerPos.x - mapToPos.x) > item->getThrowRange()) || (std::abs(playerPos.y - mapToPos.y) > item->getThrowRange()) || (std::abs(mapFromPos.z - mapToPos.z) * 4 > item->getThrowRange())) { player->sendCancelMessage(RET_DESTINATIONOUTOFREACH); return false; } } coloque isso: if(item->getContainer()) { Container* container = item->getContainer(); for(ContainerIterator sb = container->begin(), end = container->end(); sb != end; ++sb) { Item* ballSLot = (*sb)->getItem(); boost::any valueU = (ballSLot)->getAttribute("unique"); if(valueU.type() == typeid(int32_t)) { if(boost::any_cast<int32_t>(valueU) == 1) { Thing* thingT = internalGetThing(player, toPos, toIndex, spriteId, STACKPOS_MOVE); if(getMap()->getTile(toPos)) { player->sendTextMessage(MSG_INFO_DESCR, "A item in this container is a Unique Item. You can't throw away this item!"); return false; } } } } } OBS: isso é só para não poder rebolar a bag com item unique no chão, a outra parte estou com preguiça. quem sabe, mais tarde eu resolva fazer, se ninguém ainda tiver feito, até lá. kkkk
  7. 1 ponto
    Vini Original

    [PEDIDO] SCRIPT STAFF ON

    Em Talkactions/scripts copie e cole qualquer arquivo.lua e renomei para staffon e apague tudo dentro dele.. Dentro coloque isso Em Talkactions.lua coloque isso Onde tem "group_id") == Voce adiciona a group que deseja e em baixo coloca o nome EX: "group 1 e o Help , Dai voce coloca em "group_id") == , o Id do group e em baixo o nome , Caso tenha mais cargos e so copiar e colar e fazer o mesmo
  8. 1 ponto
    Tony Araujo

    [C++] Monsters Passive System (No-bugs)

    É aquela tag <flag hostile="0"/> do monster, se for 0, ele é passivo
  9. 1 ponto
    Obrigado por contribuir com o código brother ❤️
  10. 1 ponto
    No 0.4 só deu um erro na hora de compilar, mas foi uma besteirinha e falta de atenção minha: Na hora de substituir essa função: if(item->isStackable()) Você poem essa: Código: Também, na hora de copiar e colar, prestem atenção se não tem nenhum sinal de interrogação '?' no código. Ainda não testei pra ver se está 100% funcional na versão 0.4, mas creio que está sem problema. Depois edito o comentário dizendo.
  11. 1 ponto
    Corrigindo, ele criou 9 maquinas por conta que nas anteriores ele não conseguiu resolver. Mas na ultima deu certo, mas ele usa apenas uma.
  12. 1 ponto
    Benny

    [OTClient] Shiny Name

    PREVIEW: CÓDIGO: Procure essa parte em creature.cpp: if(drawFlags & Otc::DrawNames) { if(g_painter->getColor() != fillColor) g_painter->setColor(fillColor); m_nameCache.draw(textRect); } Troque por: if (drawFlags & Otc::DrawNames) { if (g_painter->getColor() != fillColor) g_painter->setColor(fillColor); CachedText shiny; shiny.setText("Shiny"); shiny.setFont(g_fonts.getFont("verdana-11px-rounded")); Rect shinyrect = Rect(point.x - shiny.getTextSize().width() / 2.0, point.y - 26, shiny.getTextSize()); if (m_name.find("Shiny") != std::string::npos) { char* shinys = "Shiny"; std::string nname = m_name; nname.erase(0, 5); m_nameCache.setText(nname); m_nameCache.draw(textRect); g_painter->setOpacity(0.5); g_painter->setColor(Color(255, 255, 0)); shiny.draw(shinyrect); g_painter->resetColor(); g_painter->resetOpacity(); m_nameCache.setText(m_name); } else { m_nameCache.draw(textRect); } } Créditos: @Refe
  13. 1 ponto
    Benny

    [OTClient] Cor no nome por tag (ADM;GM;HELP)

    PREVIEW: CÓDIGO: Abra o creature.cpp da source do seu otclient e procure por: void Creature::setHealthPercent(uint8 healthPercent) Substitua tudo por: void Creature::setHealthPercent(uint8 healthPercent) { if(m_name.find("[ADM]")!=std::string::npos) m_informationColor = Color(0x00, 0x2a, 0xff); else if(m_name.find("[GM]")!=std::string::npos) m_informationColor = Color(0x00, 0xff, 0x0c); else if(m_name.find("[HELP]")!=std::string::npos) m_informationColor = Color(0xff, 0x00, 0x00); else if(healthPercent > 92) m_informationColor = Color(0x00, 0xBC, 0x00); else if(healthPercent > 60) m_informationColor = Color(0x50, 0xA1, 0x50); else if(healthPercent > 30) m_informationColor = Color(0xA1, 0xA1, 0x00); else if(healthPercent > 8) m_informationColor = Color(0xBF, 0x0A, 0x0A); else if(healthPercent > 3) m_informationColor = Color(0x91, 0x0F, 0x0F); else m_informationColor = Color(0x85, 0x0C, 0x0C); m_healthPercent = healthPercent; callLuaField("onHealthPercentChange", healthPercent); if(healthPercent <= 0) onDeath(); } Explicação: [ADM] é a tag (Qualquer personagem que tenha [ADM] no nome) Color(0x00, 0x2a, 0xff) é a cor. No caso, você tem que usar cores RGB Hexadecimais, pode encontrar uma tabela AQUI e completar com 0x. Exemplo: A cor amarela tem como código: #FFFF00 Ficaria assim: Color(0xFF, 0xFF, 0x00) Qualquer dúvida, à disposição! Créditos: @Refe Abração!!
  14. 1 ponto
    Woox

    Knight spell ! Rep++

    Tinha postado tarde, tava cansado pra explicar, é creaturescript. Editei o script e deixei esses dados configuráveis e já vai com login pra registrar, o buff já está funcionando desta maneira, ativa com -30% de life, acima disso é desativado.
  15. 1 ponto
    Woox

    Knight spell ! Rep++

    --<event type="statschange" name="SpellBuff" event="script" value="spellbuff.lua"/>-- --<event type="login" name="RegisterBuff" event="script" value="spellbuff.lua"/>-- local vocations = {4, 8} -- ID das vocations que receberao o buff local percentageToActive = 0.30 -- 30% local bonusSkill = 20 -- Quantidade de skill que o buff vai dar local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, -1) setConditionParam(condition, CONDITION_PARAM_SKILL_MELEE, bonusSkill) setConditionParam(condition, CONDITION_PARAM_SUBID, 10) setConditionParam(condition, CONDITION_PARAM_BUFF, true) function onStatsChange(cid, attacker, type, combat, value) local health_now, health_max = getCreatureHealth(cid), getCreatureMaxHealth(cid) if (type == STATSCHANGE_HEALTHGAIN) then if (health_now + value) > math.ceil(health_max * percentageToActive) then doRemoveCondition(cid, CONDITION_ATTRIBUTES, 10) end elseif (type == STATSCHANGE_HEALTHLOSS) then if (health_now - value) > 0 and (health_now - value) < math.ceil(health_max * percentageToActive) then doAddCondition(cid, condition) end end return true end function onLogin(cid) if isInArray(vocations, getPlayerVocation(cid)) then registerCreatureEvent(cid, "SpellBuff") end return true end
  16. 1 ponto
    diarmaint

    Knight spell ! Rep++

    Posta a magia.
  17. 1 ponto
    Cypher

    MALIBU BEACH 10.98

    Fala galera, sou um antigo membro do forum, acabei de fazer um mapa e acho que vocês irão gostar, me inspirei numa foto de Malibu que é uma praia bem conhecida. Utilizei um Tibia spr 10.98 e adicionei algumas sprites da Pxg. Realmente quero agradecer a essa comunidade que me ajudou muito muito, ah e pra quem não conhece meu trabalho, eu fiz a Charizard valley do Poke Storm e a Leaf Island do Kpdo. O que contém no arquivo zip: Fotos: Download Mapa Scan
  18. 1 ponto
    Refe

    Look System!!

    local NPCBattle = { ["Brock"] = {artig = "He is", cidbat = "Pewter"}, ["Misty"] = {artig = "She is", cidbat = "Cerulean"}, ["Blaine"] = {artig = "He is", cidbat = "Cinnabar"}, ["Sabrina"] = {artig = "She is", cidbat = "Saffron"}, --alterado v1.9 \/ peguem tudo! ["Kira"] = {artig = "She is", cidbat = "Viridian"}, ["Koga"] = {artig = "He is", cidbat = "Fushcia"}, ["Erika"] = {artig = "She is", cidbat = "Celadon"}, ["Surge"] = {artig = "He is", cidbat = "Vermilion"}, } local shinys = { ["Shiny Abra"] = "Dark Abra", ["Shiny Onix"] = "Crystal Onix", ["Shiny Gyarados"] = "Red Gyarados", ["Shiny Charizard"] = "Elder Charizard", ["Shiny Venusaur"] = "Ancient Venusaur", ["Shiny Blastoise"] = "Ancient Blastoise", ["Shiny Farfetch'd"] = "Elite Farfetch'd", ["Shiny Hitmonlee"] = "Elite Hitmonlee", ["Shiny Himonchan"] = "Elite Hitmonchan", ["Shiny Snorlax"] = "Big Snorlax", } local pokeprice = { ["Bulbasaur"] = "3k", ["Poke2"] = "3k and 500 dollars", } local itemprice = { [2222] = "100 dollars", --[ITEMID] = "Preço, utilizar k ou dollars", } function onLook(cid, thing, position, lookDistance) local str = {} local isTrade = false if lookDistance == 0 then isTrade = true end -- trade lookDistanc end if not isCreature(thing.uid) then local iname = getItemInfo(thing.itemid) if isPokeball(thing.itemid) and getItemAttribute(thing.uid, "poke") then local isDittoBall = isInArray({"Ditto", "Shiny Ditto"}, getItemAttribute(thing.uid, "poke")) and true or false unLock(thing.uid) local lock = getItemAttribute(thing.uid, "lock") local pokename = isDittoBall and getItemAttribute(thing.uid, "copyName") or getItemAttribute(thing.uid, "poke") local heldx = getItemAttribute(thing.uid, "xHeldItem") local heldy = getItemAttribute(thing.uid, "yHeldItem") local megaID = getItemAttribute(thing.uid, "megaID") local pokeBallName = getItemAttribute(thing.uid, "ball") if not pokeBallName then doItemSetAttribute(thing.uid, "ball", "poke") pokeBallName = "Poke" end if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end table.insert(str, "You see ".. doCorrectString(pokeBallName) .."ball.") if getItemAttribute(thing.uid, "unique") then table.insert(str, " It's an unique item.") end table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.. (isDittoBall and " (Ditto)" or "") .. ".\n") if lock and lock > 0 then table.insert(str, "It will unlock in ".. os.date("%d/%m/%y %X", lock)..".\n") end local boost = getItemAttribute(thing.uid, "boost") or 0 if boost > 0 then table.insert(str, "Boost level: +"..boost..".\n") end if getItemAttribute(thing.uid, "nick") then table.insert(str, "It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n") end local heldName, heldTier = "", "" local heldYName, heldYTier = "", "" if heldx or heldy then if heldx then heldName, heldTier = string.explode(heldx, "|")[1], string.explode(heldx, "|")[2] end if heldy then heldYName, heldYTier = string.explode(heldy, "|")[1], string.explode(heldy, "|")[2] end local heldString = heldName .. " (tier: " .. (heldTier or heldx) .. ")" local heldYString = heldYName .. (not isInArray({"Mega", "GHOST"}, heldYTier) and " (tier: " .. heldYTier .. ")" or "") if heldx and heldy then table.insert(str, "Holding: " .. heldString .. " and " .. heldYString .. ". ") elseif heldx then table.insert(str, "Holding: "..heldString..". ") elseif heldy then table.insert(str, "Holding: "..heldYString ..". ") end end if pokeprice[getItemAttribute(thing.uid, "poke")] then table.insert(str, "\nPrice: "..pokeprice[getItemAttribute(thing.uid, "poke")]) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif getItemAttribute(thing.uid, "pokeName") and string.find(getItemAttribute(thing.uid, "pokeName"), "fainted") then local lootName = getItemAttribute(thing.uid, "pokeName") if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end table.insert(str, "You see a "..string.lower(lootName)..". ") if isContainer(thing.uid) then table.insert(str, "(Vol: "..getContainerCap(thing.uid)..")") end if getItemAttribute(thing.uid, "corpseowner") then if getItemAttribute(thing.uid, "corpseowner") == "asçdlkasçldkaçslkdçaskdçaslkdçlsakdçkaslç" then table.insert(str, "\nSuicidou-se.") else table.insert(str, "\nEle foi morto por: ("..getItemAttribute(thing.uid, "corpseowner")..")") end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif isContainer(thing.uid) then --containers if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end if getItemAttribute(thing.uid, "iname") then table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").") table.insert(str, getItemAttribute(thing.uid, "iname")..".") else table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").") end if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") local pos = getThingPos(thing.uid) table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif getItemAttribute(thing.uid, "unique") then if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end local p = getThingPos(thing.uid) table.insert(str, "You see ") if thing.type > 1 then table.insert(str, thing.type.." "..iname.plural..".") else table.insert(str, iname.article.." "..iname.name..".") end table.insert(str, " It's an unique item.\n"..iname.description) if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]") end sendMsgToPlayer(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false else elseif itemprice[thing.itemid] then local item = getItemInfo(thing.itemid) table.insert(str, "You see "..item.article.." "..item.name".\n") table.insert(str, "Price: "..itemprice[thing.itemid]) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]") end return true end end local npcname = getCreatureName(thing.uid) if ehNPC(thing.uid) and NPCBattle[npcname] then --npcs duel table.insert(str, "You see "..npcname..". "..NPCBattle[npcname].artig.." leader of the gym from "..NPCBattle[npcname].cidbat..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if getPlayerStorageValue(thing.uid, 697548) ~= -1 then table.insert(str, getPlayerStorageValue(thing.uid, 697548)) local pos = getThingPos(thing.uid) if youAre[getPlayerGroupId(cid)] then table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if not isPlayer(thing.uid) and not isMonster(thing.uid) then --outros npcs table.insert(str, "You see "..getCreatureName(thing.uid)..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if isPlayer(thing.uid) then --player doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getPlayerDesc(cid, thing.uid, false)) return false end if getCreatureName(thing.uid) == "Evolution" then return false end if not isSummon(thing.uid) then --monstros table.insert(str, "You see a wild "..string.lower(getCreatureName(thing.uid))..".\n") if isGod(cid) then table.insert(str, "Hit Points: "..getCreatureHealth(thing.uid).." / "..getCreatureMaxHealth(thing.uid)..".\n") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif isSummon(thing.uid) and not isPlayer(thing.uid) then --summons local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0 local isDittoBall = isInArray({"Ditto", "Shiny Ditto"}, getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "poke")) and true or false if getCreatureMaster(thing.uid) == cid then local myball = getPlayerSlotItem(cid, 8).uid table.insert(str, "You see your "..doCorrectString(getCreatureName(thing.uid)).. (isDittoBall and " (Ditto)" or "") ..".") if boostlevel > 0 then table.insert(str, "\nBoost level: +"..boostlevel..".") end table.insert(str, "\n"..getPokemonHappinessDescription(thing.uid)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) else local health = "\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid).."." doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..doCorrectString(getCreatureName(thing.uid)).. (isDittoBall and " (Ditto)" or "") ..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid)).."." .. (isGod(cid) and health or "") ) end return false end return true end
  19. 1 ponto
    joaopera

    OTCLIENT 0.6.5++

    Todas as versões estão no fórum só dar uma olhada na área clientes.
  20. 1 ponto
    XZero

    [C++] Unique Item System - ATUALIZADO! (No-bugs)

    @Tony Araujo Se eu colocar um item unique em uma bag e joga-la, iria ser impedido ? Ou se eu colocar o item unique em um baú ou caixa pelo mapa, irá reconhecer que o container não está no meu inventario ?
  21. 1 ponto
    Muito bem lembrado, vou adicionar a condição pertencente a isso. Muito obrigado brow! @Tópico Editado e adicionado a condição. Adicionado imagens do funcionamento.
  22. 1 ponto
    @Tony Araujo caso o player dar trade com o item unique vai aparecer a mensagem que ele não pode negociar itens unique?
  23. 1 ponto
    Tibia Server Mapa Global Eae pessoal, venho trazer a vocês um servidor de Tibia com mapa igualzissimo ao do Tibia Original. Com Rookgard e muito mais, claro não fui eu quem fiz este servidor magnifico. Mais venho traze-lo para vocês fazerem dele sua base e ter um servidor muito melhor de Tibia. Como nós sabemos nenhum servidor vem sem bugs, então é issu vo postar algumas imagems e espero que gostem. Muitas coisas ainda vocês terão de configurar como onde o player ínicial irá nascer e etc.. Este servidor estava sendo utilizado com site então você terá de fazer suas auterações. Cidades Newbie Island (Rookgaard) + Island of Destiny Ankrahmun Ab'Dendriel Carlin Darashia Edron Yalahar Kazordoon Liberty Bay Port Hope Svargrond Thais Venore Farmine Zao Cormaya Algumas imagems: Como eu ja disse este servidor não foi eu em que fui, mais venho pelo o menos trazer a vocês. Créditos Dener Diegoli Team e ao Membro Shekys do xtibia por contribuições enorme no projeto. Kurobisu (Por Trazer aqui pro Xtibia) Downloads OTServer Completo: >>( Kurobisu Download Otserv )<< Download Client Normal de Tibia 8.6: >>( Kurobisu Download Client )<< Download do SqliteStudio para quem for usar via account manager: >>(Kurobisu Download SqliteStudio)<< O 4Shared ja tem seu proprio ( Scanner ) então pelo visto não precisa. Estou também abrindo este tópico para caso alguém tenha alguma dúvida ou ache algum bug possa reporta-lo para mim, e eu concerteza tentarei ajuda-lo. Então como muitos sabem o tópico deve ter regras, e aqui não será diferente. Regras Poste suas dúvida aqui caso tenha alguma, caso acho algum bug poste aqui também. Tentarei ajudar o maximo possivel. Gosto do tópico? Lhe ajudei?Rep+ Não ajudei? Tentarei melhorar
  24. 1 ponto
    MT21

    [OPEN SOURCE] Pokemon Skyfall

    bom
  25. 1 ponto
    Brunds

    Sprites Dragon Ball

    Fala guys achei esse um client com sprites bem interessantes de dragon ball como meu projeto não é do mesmo quero compartilhar para ajudar quem tem um projeto de dragon ball tem sprites bem legais nesse client espero que gostem Download Scan By: Brunds
  26. 1 ponto
    Yan Liima

    Quando matar boss aparece báu.

    @Thalles Vitor nesse script não tem nada definindo que o jogador matou o boss... @Italox @diarmaint Todos que ajudarem matar o Boss ganha a storage. Em creaturescripts crie um arquivo.lua e cole isso: function onDeath(cid, corpse, deathList) local monstro, m = {"Yanzito"}, {} local storage = 1239854 -- Storage que irá receber if isMonster(cid) and isInArray(monstro, getCreatureName(cid)) then for _, jogador in pairs(deathList) do if isPlayer(jogador) then local test = true if #m > 0 and isInArray(m, getPlayerIp(jogador)) then test = false end m[#m+1] = getPlayerIp(jogador) if test and getPlayerStorageValue(jogador, storage) <= 0 then setPlayerStorageValue(jogador, storage,1) end end end return true end return true end XML: <event type="death" name="BossStr" event="script" value="arquivo.lua"/> Vai no XML do monstro e antes de </monster> coloque isso: <script> <event name="BossStr"/> </script> No seu actions, na script do bau tu pode por a storage 1239854 para poder abrir. Vou deixar um exemplo: function onUse(cid, item, frompos, item2, topos) if item.uid == 60090 then if getPlayerStorageValue(cid,1239854) >= 2 then doPlayerSendTextMessage(cid,25,"Você já recebeu seu item.") return true end if getPlayerStorageValue(cid,1239854) <= 0 then doPlayerSendTextMessage(cid,25,"Você precisa matar o Boss antes.") else doPlayerSendTextMessage(cid,25,"Parabens!") doPlayerAddItem(cid,2631,1) setPlayerStorageValue(cid,1239854,2) end return true end end <action uniqueid="60090" script="arquivo.lua" /> Ai é só por o UniqueID 60090 no baú.
  27. 1 ponto
    Dipirona SZ

    [POKÉMON] BASE LENDA (2019) - [TOP]

    Galera, estou postando esse servidor, pois me roubaram, e para que o retardado não saia vendendo ela, ou tirando aproveitos, irei postar ela aqui. [TÓPICO] Informações; Prints; Download; Scan; Créditos; INFORMAÇÕES: PRINTS: https://imgur.com/a/X1Oo9lU Download: https://mega.nz/?fbclid=IwAR30ubPlZMnSTLNvbxU_iINxhGEcg5AIBi23_hGXNYLN_Ok6rNFN8QgksHs#!9r41CB4B!zBWvrUU6BsMvql2myYom53ctSHEVjT9t37mjTM6jP7Q Scan: Sem tempo para postar, e também não sei fazer, se alguém puder fazer, eu adiciono aqui. Créditos: To muito triste em ter que fazer isso, mas é isso... Ao invés do cara ajudar a comunidade, ele suja mais ela rsrs...
  28. 1 ponto
    Mizakinha

    [DXP] PokeAlpha OpenSource

    como q eu faço pra baixar? o link do download eu n posso ver, fala que tenho q reagir ao post, como q eu reajo?
  29. 1 ponto
    Marshmello

    Teleport Automatico

    Ae Pessoal beleza , hoje trago para vocês teleport automatico(basico para eventos) Vamos lá? Em Globalevents.xml cole isso <globalevent name="Tp1" time="xxx" event="script" value="nomedoarquivo.lua"/> em XXX coloque o horario que irar abrir o TP Depois crie um arquivo .lua e cole isso dentro --[[ EDITOR: Marshmello Script: Portal automatico : www.xtibia.com: ]] local entrada = {pos = {x = 1028, y = 259, z = 7}, toPos = {x = 1033, y = 259, z = 7}, time = 30} --- POS: Onde o TP vai aparecer ; toPos : para onde player vai; time: tempo que o tp vai ficar aberto local tp = 1387 -- id do TP -------------------------------------------------- function removeTp(tp) local t = getTileItemById(entrada.pos, tp) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(entrada.pos, CONST_ME_POFF) doBroadcastMessage("O teleport da sala de eventos fechou") ----- MSG do Evento fechado end end function onTimer() if tp then doCreateTeleport(tp, entrada.toPos, entrada.pos) doBroadcastMessage("O teleport da sala de eventos foi aberto por 2 minutos ") ---- Msg de evento aberto addEvent(removeTp, entrada.time*1000, tp) end return true end Então e isso rapeize tmj , ajudei deixe seu REP
  30. 1 ponto
    BrunooAngel

    [Pokémon] Sprites Parecidas Do Gba

    Olá galerinha do :XTibia_smile:, minha conta voltou hoje da suspençao pqe deu rolo num topico e como smp sobra p/ mim e pa mais to sussa, vim aqui hoje pra trazer um pacotao com 116 SPRITES isso mesmo 116 SPRITES entao vamos la: São Bem Parecidas com as do GBA, veja essa print dentro do jogo: Em breve posto mais sprites com as outfits e outras novas :smile_positivo: Contém: Tutorial de Como Adiciona-las: Obs: Sempre crie backups e sempre nao adicione um numero muito elevado de sprites por vez! Agora vamos ao mais importante, os downloads e aos créditos: Downloads: Pacotão 116 New Sprites: Clique Aqui Scan Pacotão New 116 Sprites: Clique Aqui Créditos: Criadores Do PokeArena Nintendo Brunoo Angel
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...