Ir para conteúdo

Mono Singed

Membro
  • Registro em

  • Última visita

Tudo que Mono Singed postou

  1. Na verdade, no global é assim. A ideia é que o shield demore menos pra subir pra recompensar quem não tem mente sã e ainda treina online huaauhu. Se mesmo assim tu quer deixar na msm velocidade, tenta assim: Na verdade, a única parte que eu alterei foi: player:addOfflineTrainingTries(SKILL_SHIELD, trainingTime / 4) A ideia é mudar o segundo parâmetro (estava trainingTime/4, eu pus (trainingTime / modifier) / 2). Quanto maior for o valor dele, mais upará a skill de shield.
  2. Só queria salientar que isso não apenas tira o cooldown de usar runa enquanto anda, mas o cooldown de fazer qualquer action enquanto anda. Não consigo pensar no momento, mas se essa "proteção" existe nas sources, pode estar evitando algum tipo de bug.
  3. Não faz sentido usar um módulo se tu não quer que alguém tenha acesso a ele. É plenamente possível configurar os parâmetros de sockets direto no código fonte em vez de carregar eles numa interface pra lua se tu não quer que elas sejam editáveis ou descobríveis, economiza memória e usa a melhor criptografia: código de máquina.
  4. Mono Singed postou uma resposta no tópico em Xeno Bot
    Ele ganhou reputação por postar uma dúvida? k
  5. Não vai funcionar, o servidor dele é 1.2 e o tutorial é para versão 0.4 Teste: local spellName = "" function onUse(player, item, fromPosition, target, toPosition, isHotkey) if not player:hasLearnedSpell(spellname) then player:learnSpell(spellname) player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE) player:sendTextMessage(MESSAGE_INFO_DESCR, "com esta runa anciã você aprendeu a magia " .. spellName) return true else player:sendTextMessage(MESSAGE_INFO_DESCR, "você já tem conhecimento dessa magia") return false end end Dá pra configurar as magias por atributos, também, pra ti não ficar criando um item para cada magia.
  6. Olá, estou criando um poketibia com base no branch master do TFS (embora isso não realmente importe, já que minha dúvida é sobre um método interna relacionada ao client, deve ser igual independente do protocolo). Avancei bastante, mas estaquei no seguinte: como verificar a string enviada pelo player ao servidor? Na verdade, fiz o seguinte exemplo e funcionou (é apenas o meaning da coisa): void Player::onCreatureSay(Creature* creature, SpeakClasses, const std::string& text) { const Player* jogador = creature->getPlayer(); if (jogador && jogador->getSummons() && text.find("foo") != std::string:npos) { jogador->sendCancelMessage("você digitou foo e tem um summon"); } } Mas, seria esse o meio mais conveniente de checar a entrada? Ou melhor, o meio mais rápido? Esse método é chamado pra todos espectadores ou só pra quem deu a entrada de texto? Bom citar que tive que dar override no onCreatureSay da classe Creature, já que por padrão a classe player não estende esse método, mas o chama. Eu dei uma olhada em outros métodos, e achei o seguinte: bool ChatChannel::talk(const Player&, SpeakClasses, std::string&). É um possível candidato? P.S.: sei que é possível com talkactions, mas não vejo porque scriptar uma funcionalidade que será nativa no meu servidor.
  7. Vou dar uma breve explicação (se quiser mais detalhes pode vir pm): Antigamente, existiram dois grandes servidores de poketibia: SVKE e PAdventures. Não vou entrar muito em detalhes sobre eles porque tem controvérsias, mas resumindo: a comunidade participou e participa ativamente nas "ideias inovadoras" desses servidores de poketibias considerados grandes (as conversas com npc pelo botão direito, que foi popularizada pela pxg, por exemplo, pode ser encontrada disponível na otland). O que se tem na comunidade hoje em dia é: PDA: sem source, só tem a distro compilada (ou seja, bugs não poderão ser resolvidos), é a mais avançada em relação a sistemas, mas grande parte deles tem bugs ou foram implementados com gambiarras em lua que quase ninguém entende (nem tente entender elas, tu só vai ter dor de cabeça) Pokémon Dash: tem a source (pode resolver os bugs), muiiitas gambiarras em lua e sistemas defasados ou falta deles (tu consegue consertar tudo) Pokémon Flash: porra, isso é antigo demais SAHUSAHUSUHA, só ignora. Pra ti ter noção, algumas distros do pokémon flash nem moves (m1, m2 etc) tem. Tendo informação disso tudo, tu chega na seguinte conclusão: pra ti partir de qualquer base disponível na comunidade tu vai precisar estudar as gambiarras e sistemas dela na unha, já que grande parte da documentação foi perdida (por estar no xtibia ou pelos links terem ficado off). Outro comentário cabível é que: essas bases foram baseadas na versão 0.3.6 do theforgottenserver. Essa versão foi lançada em 2010. O código fonte em geral não usa açúcar sintático, é bagunçado, usa convenções antigas etc, além de ter vários bugs conhecidos (por ser antiga). Na minha singela opinião, se tu tiver conhecimento e quiser algo sério e que tu compreenda totalmente o funcionamento, faça o seguinte: vá no github do theforgottenserver, baixe a última versão (1.3), estude ela (tem a otland e a wiki no próprio github pra isso) e altere as sources para adaptar a um poketibia.
  8. Dá algum erro ou só crasha?
  9. substitua: itemattributes.cpp
  10. Apaguei um ":" sem querer, só deixar assim: std::map<std::string, ItemAttribute>* ItemAttributes::getAttributeMap()
  11. tente: luascript.cpp Relaxa, tá quase lá, ahuahuauh O problema aqui tá sendo como fazer essa função retornar uma tabela de chave e valor (aka {chave = "valor", chave2 = "valor2"), eu não sabia fazer isso, to aprendendo na mao SHUASUHASUHA. Do jeito que tu fez vai retornar só os valores, fica meio ruim pra ti manipular depois.
  12. uma hora vai, substitua: luascript.cpp
  13. Opa, não tinha lido que tu não conseguiu mudar a versão, desculpa ahuahua. Essa é a parte meio bad de fazer um código em c++ qnd alguém pede, pq tu não pode compilar pra ver os erros e resolver por ti próprio Substitua: luascript.cpp
  14. substitua: itemattributes.cpp luascript.h itemattributes.h luascript.cpp
  15. Tudo bem, usa esse último que eu mandei, fiz umas alterações
  16. foi um problema de formatação de texto, por causa da plataforma que eu uso ;P testa: itemattributes.cpp itemattributes.h luascript.cpp luascript.h
  17. Okay, okay, alguns erros foram, mas a maioria foi porque eu não fiz isso usando uma ide, aí errei em alguns nomes e tal. Substitua teus arquivos por estes: itemattributes.cpp itemattributes.h luascript.cpp luascript.h (novamente, te explico como utilizar se compilar certinho)
  18. Cara, vou te falar a real: isso é balela. Não vale a pena criptografar o teu client, e se tu fizer isso sendo leigo, das duas uma: não vai ser uma criptografia segura ou tu não vai entender como funciona at all. Só afirmo que vale a pena criptografar as tuas sprites (mas sempre vai ter um jeito do usuário com conhecimento conseguir ela, já que, além de não existir nenhuma criptografia 100% segura, tu está exibindo elas na tela), os modules não valem a pena. Por quê? Porque, assim como o The Forgotten Server, os modules foram feitos para serem facilmente modificados pelo usuário, algo hackable e de uso não profissional. (só a existência deles aumenta o tempo de carregamento do teu programa, se tu tiver que descriptografar eles vai ser mais pesado ainda) Se tu não é um usuário leigo, tu pode até usar a engine do otclient, mas tirar todo seu suporte à lua, assim tudo será compilado, e todas tuas customizações estarão compiladas e sem possibilidade de modificação sem alteração do programa na memória (o que é algo indiscutivelmente difícil)
  19. Amigo, eu fiz, mas utilizei padrões do c++11, tenha certeza de que o teu compilador esteja nessa versão. Também não testei (não creio que haja erros de lógica, mas pode haver alguns de escrita, como letras comidas ou falta de ;, fiz correndo), já que não dá pra compilar só com esses arquivos, mas vê aí: Antes de tudo, vamos para os includes: no arquivo luascript.cpp, adicione um: #include "itemattributes.h" onde tu encontrar os includes semelhantes já no arquivo luascript.h, declare a classe ItemAttribute: class ItemAttribute; onde tu encontrar as declarações de classes semelhantes Após "bool unserializeMap(PropStream& stream);", no arquivo itemattributes.h, adicione: AttributeMap* getMap(); Após a linha 315, no arquivo itemattributes.cpp, adicione: //RETORNA UM PONTEIRO PARA O ATTR MAP POR MOTIVOS DE PERFORMANCE, NÃO PODE SER UTILIZADO EM OBJETOS CONSTANTES!!! AttributeMap* ItemAttributes::getMap() { if(!attributes){ createAttributes(); } return attributes; } Após a seguinte linha no arquivo luascript.h: static int32_t luaGetItemAttribute(lua_State* L); Adicione: static int32_t luaGetItemAttributeMap(lua_State* L); Após a seguinte linha no arquivo luascript.cpp: //getItemAttribute(uid, key) lua_register(m_luaState, "getItemAttribute", LuaScriptInterface::luaGetItemAttribute); Adicione: //getItemAttributeMap(uid, key) lua_register(m_luaState, "getItemAttributeMap", LuaScriptInterface::luaGetItemAttributeMap); Após a linha 9282, no arquivo luascript.cpp, adicione: int32_t LuaScriptInterface::luaGetItemAttributeMap(lua_State* L) { //getItemAttributeMap(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } typedef std::map<std::string, ItemAttribute> AttributeMap; AttributeMap* attrMap = item->getAttributeMap(); lua_newtable(L); for(auto attr : attrMap){ setField(L, attr->first, attr->second.get()); pushTable(L); } return 1; }
  20. Entendi, tu pode me mandar tuas sources? Ou a source da base do teu servidor
  21. Então, tem o jeito mais correto de fazer isso em C++, mas fica ruim tu me passar as sources aqui pelo fórum, então dá pra fazer isso: Vá até a pasta lib, e abra o arquivo 050-function: Após isso. insira, no começo do arquivo, o seguinte: CUSTOM_ITEM_ATTR = {"atributoX", "atributoY"} --ponha todos os nomes dos atributos customizados que tu for utilizar nesta tabela, modelo --[ retorna um array com o valor e a chave de todos atributos contidos no array CUSTOM_ITEM_ATTR ]-- function doGetAllItemAttr(uid) if not isCreature(uid) then local item_attributes = {} for key, value in pairs(CUSTOM_ITEM_ATTR) do item_attributes[value] = getItemAttribute(uid, value) end else return false end return item_attributes end Basicamente, tu terá que que adicionar o nome de todos atributos customizados na tabela CUSTOM_ITEM_ATTR. Não testei, vê aí no que deu. Se funcionar e quiser uns exemplos de uso, eu te dou.
  22. Você diz de atributos costumizados? Se sim, tem a source do teu servidor? (se não, vai ter que ser uma pequena gambiarra)
  23. Tenta assim: function BikeSpeedOn(cid,nSpeed) setPlayerStorageValue(cid,sBike,getCreatureSpeed(cid)) doChangeSpeed(cid,getCreatureSpeed(cid)+nSpeed) end function BikeSpeedOff(cid) doChangeSpeed(cid,-getCreatureSpeed(cid)) doChangeSpeed(cid,getPlayerStorageValue(cid,sBike)) end function onUse(cid, item, fromPosition, itemEx, toPosition) local sBike = 2547 local speed = 20 -- speed que você quer extra local t = { [18473] = {s=9999, condition=bikeCondition}, } local v, r = getCreaturePosition(cid), t[item.itemid] local s = r.s local pos = {x = v.x, y = v.y, z = v.z} if fromPosition.x == CONTAINER_POSITION then if r then if getPlayerStorageValue(cid, 25000) == 5 then return end if getPlayerStorageValue(cid, 23000) == 5 then return end if isRiderOrFlyOrSurf(cid) then doPlayerSendCancel(cid, "Dismount your pokemon to ride.") return true end if getPlayerSlotItem(cid, CONST_SLOT_AMMO).uid == item.uid then doPlayerSendCancel("Não está no slot correto") return true end if getPlayerStorageValue(cid, s) <= 0 then doCreatureSay(cid, r.text, 19) setPlayerStorageValue(cid, s, 1) BikeSpeedOn(cid,speed) player_outfit = getCreatureOutfit(cid) if getPlayerSex(cid) == 1 then doSetCreatureOutfit(cid, {lookType = 2293, lookHead = player_outfit.lookHead, lookAddons = 0, lookLegs = player_outfit.lookLegs, lookBody = player_outfit.lookBody, lookFeet = player_outfit.lookFeet}, -1) ---Female else doSetCreatureOutfit(cid, {lookType = 2292, lookHead = player_outfit.lookHead, lookAddons = 0, lookLegs = player_outfit.lookLegs, lookBody = player_outfit.lookBody, lookFeet = player_outfit.lookFeet}, -1) --- Male end elseif getPlayerStorageValue(cid, s) == 1 then doCreatureSay(cid, r.dtext, 19) setPlayerStorageValue(cid, s, 0) BikeSpeedOff(cid) return doRemoveCondition(cid, CONDITION_OUTFIT) else return doPlayerSendCancel(cid, "You can't do this.") end else return doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, 'Report bugs in Bike system.') end else doPlayerSendCancel(cid, "deixe o item na backpack") --mensagem que vai aparecer quando utilizar o item fora da bp return true end end

Informação Importante

Confirmação de Termo