Ir para conteúdo
Propaganda

hisokafail

Membro
  • Total de Posts

    17
  • Registro em

  • Última visita

  • Dias Ganhos

    1

hisokafail ganhou no último dia 3 de Outubro

hisokafail teve o conteúdo mais curtida!

Sobre hisokafail

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

hisokafail's Achievements

Explorer

Explorer (4/14)

  • Conversation Starter Rara
  • Collaborator Rara
  • First Post
  • Dedicated
  • Week One Done

Emblemas Recentes

74

Reputação

  1. Postei no lugar errado, se alguém puder mover agradeço
  2. É de fato, mas quando eu comecei programar não tinha gpt (graças a Deus). Porque se tu só depende do gpt e não entende de lógica nem nada se não vai saber pedir código certo e não vai entender aonde ele ta fazendo cagada e nem como corrigir. AI ao meu ver é para agilizar um trabalho que você conseguiria fazer sem ela, fora disso se vira escravo.
  3. Proteção para jogadores que não forem donos da house mexer em itens. Evita falhas no sistema de house e jogadores serem roubados. game.cpp, ache: bool Game::playerMoveThing(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint16_t count) E troque por: bool Game::playerMoveThing(uint32_t playerId, const Position& fromPos, uint16_t spriteId, int16_t fromStackpos, const Position& toPos, uint16_t count) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; uint8_t fromIndex = 0; if(fromPos.x == 0xFFFF) { if(fromPos.y & 0x40) fromIndex = static_cast<uint8_t>(fromPos.z); else fromIndex = static_cast<uint8_t>(fromPos.y); } else fromIndex = fromStackpos; Tile* tileHoN = getMap()->getTile(fromPos); if(tileHoN) { HouseTile* houseTileNo = tileHoN->getHouseTile(); if(houseTileNo) { House* houseI = houseTileNo->getHouse(); if(houseI) { House* houseO = Houses::getInstance()->getHouse(houseI->getId()); if(player->getGUID() != houseO->getOwner()) { if(!houseO->isSubOwner(player)) { player->sendTextMessage(MSG_INFO_DESCR, "Sorry but you are not allowed to move item in this house."); return false; } } } } } Thing* thing = internalGetThing(player, fromPos, fromIndex, spriteId, STACKPOS_MOVE); Cylinder* toCylinder = internalGetCylinder(player, toPos); if(!thing || !toCylinder) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } if(Creature* movingCreature = thing->getCreature()) { uint32_t delay = g_config.getNumber(ConfigManager::PUSH_CREATURE_DELAY); if(Position::areInRange<1,1,0>(movingCreature->getPosition(), player->getPosition()) && delay > 0) { SchedulerTask* task = createSchedulerTask(delay, boost::bind(&Game::playerMoveCreature, this, player->getID(), movingCreature->getID(), movingCreature->getPosition(), toCylinder->getPosition())); player->setNextActionTask(task); } else playerMoveCreature(playerId, movingCreature->getID(), movingCreature->getPosition(), toCylinder->getPosition()); } else if(thing->getItem()) playerMoveItem(playerId, fromPos, spriteId, fromStackpos, toPos, count); return true; }
  4. Compartilhando com vocês um bug do PDA que já derrubou muito servidor. Basicamente a nurse joy das bases de pda (e provavelmente de outras também) roda um looping no jogador procurando todas as pokébolas validas para curar, o problema é que se o jogador se encher de bags (propositalmente ou não) o looping rodado vai ser muito grande e vai causar travamento no servidor (principalmente dependendo da hospedagem, quantidade de players online e quantidade de bags e pessoas fazendo esse bug de forma proposital). Eu corrigi isso em meus projetos de forma bem pragmática, colocando para só curar os pokémons na bag principal, se alguém ai usar pda e quiser usar esse mesmo metódo. Função: -- Retorna todas as pokébolas válidas dentro de um container (ex: mochila) local function getPokeballsInContainerHeal(container) if not isContainer(container) then return {} end -- Se não for container, retorna vazio local items = {} for slot = 0, getContainerSize(container) - 1 do -- Percorre todos os slots do container local item = getContainerItem(container, slot) if isPokeball(item.itemid) then -- Só adiciona se for uma pokébola table.insert(items, item.uid) end end return items -- Retorna a lista de pokébolas encontradas end ---- Na hora de pegar as pokebolas para cura: local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local balls = getPokeballsInContainer(bp.uid) Se quiser o npc heal pronto com essa proteção: local posis = { [897530] = {x = 1054, y = 1050, z = 7}, -- saffron [897531] = {x = 1061, y = 900, z = 7}, -- cerulean [897532] = {x = 1203, y = 1040, z = 7}, -- lavender [897533] = {x = 1213, y = 1321, z = 7}, -- fuchsia [897534] = {x = 860, y = 1094, z = 6}, -- celadon [897535] = {x = 706, y = 1083, z = 7}, -- viridian [897536] = {x = 1073, y = 1233, z = 7}, -- vermilion [897537] = {x = 723, y = 844, z = 7}, -- pewter [897538] = {x = 848, y = 1394, z = 7}, -- cinnabar [897539] = {x = 1281, y = 1468, z = 6}, -- snow [897540] = {x = 258, y = 429, z = 7}, -- golden [897541] = {x = 243, y = 1028, z = 7}, -- Hammlin [897542] = {x = 268, y = 1163, z = 7}, -- Shamouti [897543] = {x = 252, y = 1260, z = 6}, -- Ascordbia [897544] = {x = 2612, y = 985, z = 7}, -- Vip 1 [897545] = {x = 2680, y = 675, z = 7}, -- Vip 2 [897546] = {x = 2559, y = 444, z = 5}, -- Vip 3 / Pallet / Coliseum / Outlands } function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Good bye sir!') focus = 0 talk_start = 0 end end function onCreatureTurn(creature) end local function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end -- 🧩 Função de proteção — apenas pokébolas dentro do container válido serão curadas local function getPokeballsInContainerHeal(container) if not isContainer(container) then return {} end local items = {} for slot = 0, getContainerSize(container) - 1 do local item = getContainerItem(container, slot) if isPokeball(item.itemid) then table.insert(items, item.uid) end end return items end function onCreatureSay(cid, type, msg) local msg = string.lower(msg) local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid for a, b in pairs(gobackmsgs) do local gm = string.gsub(b.go, "doka!", "") local bm = string.gsub(b.back, "doka!", "") if string.find(string.lower(msg), string.lower(gm)) or string.find(string.lower(msg), string.lower(bm)) then return true end end if ((msgcontains(msg, 'hi') or msgcontains(msg, 'heal') or msgcontains(msg, 'help')) and (getDistanceToCreature(cid) <= 3)) then if exhaustion.get(cid, 1) then selfSay('Por Favor espere um momento para eu curar novamente seus Pokémons!') return true end if not getTileInfo(getThingPos(cid)).protection and nurseHealsOnlyInPZ then selfSay("Por Favor, entre no Centro Pokémon para eu poder curar seus Pokémons!") return true end if getPlayerStorageValue(cid, 52480) >= 1 then selfSay("Não posso curar seus Pokémons enquanto você está em duelo!") return true end exhaustion.set(cid, 9211, 1) doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid)) doCureStatus(cid, "all", true) doSendMagicEffect(getThingPos(cid), 103) local mypb = getPlayerSlotItem(cid, 8) if #getCreatureSummons(cid) >= 1 then if not nurseHealsPokemonOut then selfSay("Por favor, retorne seu Pokémon para a Pokébola!") return true end local s = getCreatureSummons(cid)[1] doCreatureAddHealth(s, getCreatureMaxHealth(s)) doSendMagicEffect(getThingPos(s), 13) doCureStatus(s, "all", false) if getPlayerStorageValue(s, 1008) < baseNurseryHappiness then setPlayerStorageValue(s, 1008, baseNurseryHappiness) end if getPlayerStorageValue(s, 1009) > baseNurseryHunger then setPlayerStorageValue(s, 1009, baseNurseryHunger) end else if mypb.itemid ~= 0 and isPokeball(mypb.itemid) then doItemSetAttribute(mypb.uid, "hp", 1) if getItemAttribute(mypb.uid, "hunger") and getItemAttribute(mypb.uid, "hunger") > baseNurseryHunger then doItemSetAttribute(mypb.uid, "hunger", baseNurseryHunger) end for c = 1, 15 do setCD(mypb.uid, "move" .. c, 0) end if getItemAttribute(mypb.uid, "happy") and getItemAttribute(mypb.uid, "happy") < baseNurseryHappiness then doItemSetAttribute(mypb.uid, "happy", baseNurseryHappiness) end if getPlayerStorageValue(cid, 17000) <= 0 and getPlayerStorageValue(cid, 17001) <= 0 and getPlayerStorageValue(cid, 63215) <= 0 then for a, b in pairs(pokeballs) do if isInArray(b.all, mypb.itemid) then doTransformItem(mypb.uid, b.on) end end end end end -- 🧠 Proteção: cura apenas pokébolas dentro da mochila do jogador local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK) local balls = getPokeballsInContainerHeal(bp.uid) for _, uid in ipairs(balls) do doItemSetAttribute(uid, "hp", 1) for c = 1, 15 do setCD(uid, "move" .. c, 0) end if getItemAttribute(uid, "hunger") and getItemAttribute(uid, "hunger") > baseNurseryHunger then doItemSetAttribute(uid, "hunger", baseNurseryHunger) end if getItemAttribute(uid, "happy") and getItemAttribute(uid, "happy") < baseNurseryHappiness then doItemSetAttribute(uid, "happy", baseNurseryHappiness) end local this = getThing(uid) for a, b in pairs(pokeballs) do if isInArray(b.all, this.itemid) then doTransformItem(uid, b.on) end end end selfSay('Todos os seus Pokémons foram curados! Boa sorte em sua jornada!') if useKpdoDlls then doUpdateMoves(cid) end if useOTClient then onPokeHealthChange(cid) end end end Observação: script feito em cima da base cyan, caso sua base seja diferente basta apenas adaptar.
      • 1
      • Like
  5. Seria mais interessante se tu conseguisse deixar todas essas infos cliente side e apenas atualiza-se com um launcher. Isso em questão de performace é claro
  6. Pega uma sprite mais o menos do mesmo tamanho, exporta, depois ajusta essa por cima no photoshop e depois joga o png dentro do obd. Para mim é bem mais rapido
  7. Tudo tem de graça na internet, principalmente se a pessoa estudar, for atrás e fazer networking. Entretanto tudo isso custa a coisa mais importante do mundo, que é seu tempo, mas acho que você não entende isso.
  8. E o curso é vendido pela plataforma kwify, que faz o reembolso AUTOMATICO se a pessoa não gostar do produto em até 7 dias, e mesmo assim o produto tendo mais de um ano no mercado, só tem 18% de taxa de reembolso. E grande parte desses reembolso é porque o cara simplesmente acha que vai comprar um curso de 200 reais e abrir A NOVA POKE X GAMES.
  9. Eu acabei de provar ao contrário, você que não entendeu. Eu informei claramente um bug muito comum que não foi corrigido na maioria das bases de poketibia postados por ai, e que na minha disponbilizada foram corrigidos (o bug da joy, mas tem outros como bug do party, entre outros) E só para DEIXAR BEM CLARO, MESMO, eu não estou vendendo a base, eu estou vendendo um CURSO que MASTIGA TODO O ESSENCIAL DE COMO SE TER UM SERVIDOR ONLINE E CHEGAR ATÉ A FASE DA MONETIZAÇÃO COM ELE. A base é apenas um BÔNUS. Quero que tu me aponte um tutorial no fórum aonde ensina de forma clara e objetiva a criar uma moeda donate pro teu jogo, entrega-la ao jogador e colocar coisas para serem compradas no jogo, provavelmente nem você sabe fazer isso. Ai mais o cara comprou o curso e disse que o código tinha free na internet. Beleza, me informe ai o link de uma base cyan postada que esteja com: - Bugs conhecidos do 0.3.6 corrigidos (joy, party, guild, house) - Fly otimizado (anda clicando e travado e apenas no teclado, como a maioria das bases de poketibia por ai) - Pasta organziadas - Scripts simplificados para adicionar quests de pokémons e itens via array E não, nada disso é nada demais para quem já entende de servidor, mas para quem nunca mexeu em um servidor, ou mexeu muito pouco ADIANTA MUITO A CAMINHADA DO CARA. E para matar a PAU, eu mostrei que tenho dois servidores online a muito tempo, e eles não tem lag nem rollback. Ou seja você não pode dizer que a base é ''Estável'' porque ela realmente é, e ta provado por 1 + 2. Fora as vídeo aulas que são excelentes no que são propostas, ensinam tudo direto ao ponto, coisa que você vai ver tutorial por ai demora 10, 15, 20 minutos para ensinar coisas que ensino em 1 minuto ou 2. Exemplo da aula de remeres. Agora se algum jênio comprou o curso, só abriu o jogo base e viu só porque o mapa é antigo e não tem interface moderna, quero mais que ele baixe alguma base por ai que só tem estética, tome rollback e lag, e tenha que gastar com freelancers para corrigir esses problemas, que provavelmente vão demroar uma eternidade para responder e prestar o serviço de má vontade (se prestarem), em vez de pegar uma base QUE O NOME JÁ DISSE, VAI SERVIR DE BASE, e alterar interface. Só na parte que ensina deixar o servidor online, eu disponibilizo um arquivo .sh que é só executar no linux, que vai instalar tudo para rodar o servidor. E a source já ta tudo certinho para compilar, sem o cara ter que jogar uma linha e se mesmo com tudo na mão a pessoa não conseguir fazer as coisas ensinadas no curso, eu ainda presto um EXCELENTE SUPORTE. E só para matar mais a pau ainda vou estar postando print de depoimento de alunos no discord.
  10. Tem sim, E TEM MUITA GENTE CHATA NA COMUNIDADE. Tanto de ''dev'' quanto de player, que fica cagando regra e desmerecendo o trabalho dos outros, só porque as vezes não é do jeito que ele acha certo. Verdade é uma só, se ta cumprindo sua função, ta certo. To cagando se meu servidor usa source 0.3.6, ele ta rodando liso, não ta dando rollback, ta cumprindo seu proposito. ''Ohh mas é 0.3.6, não presta ahhh''. Ai vai ver o cara nunca nem deixou um projeto online
  11. Problema do pessoal é só ver superficialmente e achar que entendeu alguma coisa. Pessoal esquece do mais importante que é a infraestrutura. Ouvi relatos de pessoas que afirmam que a base PokeFãs tem bug de clonar itens, inclusive foi um dos motivos da staff ter desistido e postado a base (se é verídico eu não sei, mas ouvi relatos). Eu usei a pokedash pota pura já em um projeto, e ela realmente é muito boa, porém tinha um pequeno problema de não salvar storage adequadamente e tinha que forçar o char a relogar quando concluia a quest para concluir o salvamento adequado, ou seja, toda base independente da versão vai ter seus problemas. Agora sobre o curso, questão de base é só a cereija do bolo, o diferencial mesmo é a rapidez que a pessoa vai adquirir conhecimento sobre as mais diversas ferramentas usadas na criação de um otserver e as mais diversas noções de edição. E lembrando é um treinamento voltado para leigos, ou quem tem uma noção muito superficial.
  12. Toda base ta sujeita a gambiarra e falhas. Base estável porque uso nos meus projetos que estão online a anos com uptimes altos, sem crash, sem rollback, sem queda. Sim são disponíveis sim, CONFIA. Pega qualquer base de poketibia 0.3.6 por ai nos fórums, enche o personagem de bag e fica dando hi para a joy (isso com o servidor em produção lotado de players). Fora que foram corrigidos todos bugs da tfs 0.3.6 Antes disso virar modinha ter base open source, meu servidor foi um dos primeiros a terem source adaptada, antes de ser moda terem várias bases open source (e a maioria é bixada). E desde dessa epoca eu escuto gente falando esse tipo de merda, na epoca era que PDA não tinha futuro, porque não tinha source e blah, blah. E agora é essa historinha do pessoal falando mal do 0.3.6. Pessoal tem que largar de ser tapado e entender que independente da base, da versão, ou de qualquer outra coisa quem vai fazer o jogo é o programador. [Hidden Content] [Hidden Content]
×
  • Criar Novo...