-
Total de itens
750 -
Registro em
-
Última visita
-
Dias Ganhos
8
Tudo que dalvorsn postou
-
Tu pode jogar pro depois do while também se quiser
-
Curti, ficou bem bolado, porem na condicional do while ta com municao >= 0, não deveria ser direto > 0 ? ja evitaria de repetir sem necessidade
-
tfs 0.3.4/0.3.6 [Encerrado] Crash Logs
tópico respondeu ao Adriez de dalvorsn em Tópicos Sem Resposta
Wine Ou então alternativamente existe um map editor do fallen, mas não há necessidade de se fazer o mapa no linux, pode fazer em windows e passar pro linux ue -
tfs 0.3.4/0.3.6 [Encerrado] Crash Logs
tópico respondeu ao Adriez de dalvorsn em Tópicos Sem Resposta
Eu sempre uso o gdb, é perfeito pra isso. Não sei em que sistema ta rodando, mas eu so uso em linux, então não sei como seria em windows. -
Salva ai!
-
Cara, talvez por assembly, mas é mega chato e complicado de fazer isso. Além do mais não vale a pena fazer um servidor com uma distro que não tem as sources, se começa a dar crash por exemplo como concerta? Não tem fundamento usar isso ...
-
No mysql atual pelo ou tu usa SIGNED ou UNSIGNED, INTEGER não é reconhecido como um tipo valido http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html
-
Dentro da classe UIWidget existem dois metodos para essa função: widget:lock() e widget:unlock() Voce pode usá-los dentro da função init, ou qualquer outra que tenha acesso a variavel que salva o widget principal do modulo. Infelizmente não há(ou pelo menos eu não encontrei nada relativo a isso nas sources do otclient) como fazer isso pelo otui. Exemplo: Travar o entergame
-
como transforma uma distro 8.60 para 7.92?
pergunta respondeu ao deivisonamorim de dalvorsn em Programação
Desculpe, nao tinha visto que era o 0.4, nele fica em definitions.h Mas como eu lhe disse, isso e o minimo pra conectar, diversos packets devem ter sido adicionados e como provavelmente um packet novo nao estara nas sources do cliente antigo, isso ira gerar um debug no cliente. Fora a questao de features em si, que da mais um trabalhinho, mas o caminho e esse. :> -
Certo, tinha uma coisa que eu não previa, o parametro usado pra o uid algumas vezes pode ser uma string, no caso de serem virtuais(não tenho certeza mas talvez os selvagens ele considere como "virtuais". A função faz exatamente a mesma coisa, so que ela tem parametros extra, que é o level de destino, caso queira usar e nao for 50, e o intervalo em de boost que ele usa pra incrementar uma stone. Na tabela que tu fez de 4 em 4 boost ele aumenta uma stone no numero necessario para adicionar o boost. De todo modo simplifiquei a função, deixando os dois parametros como opcionais e com valores default de 50 e 4; Segue o codigo ajustado, credio que agora funcione
-
tu por acaso trocou pokemon_uid para o uid do pokemon? caso tenha dificuldade de encontrar, poste o script da pokedex
-
Eu não tenho como adivinhar quais mods voce pegou. Me aponte os links para podermos analisar @001rafa Em momento algum ele disse que o servidor crasha, ele só mencionou o travamento do cliente. Isso em hipotese alguma poderia acontecer por ele ter dito que é apos determinada spell. se o player esta usando spell é que ele passou pelo login, e etc, se tivesse erro na database parava ai.
-
O otui apesar da similaridade com o css, ele trabalha com um metodo diferente de posicionamento, ele usa de anchoramentos. Para voce posicionar um elemento no painel, voce precisa de pelo menos duas orientações anchors.top/anchors.bottom e anchors.left/anchors.right E para acertos mais precisos, tu usa o margin, se tu definiu orientação anchors.top tu deve usar margin-top e assim em diante O otui(otml em geral) usa o conceito de parent através da identação(espaçamento), a cada dois espaços(space) é considerado um novo nivel de parentesco ou quando não for uma classe ele vai ter um attribute do parent. Eu sei que parece muita coisa, mas não é tão complexo, é so tu ler o que eu escrevi e ler alguns codes do proprio otc que vai entender. Além disso, ainda falando de posicionamento, existe a referencia simbolica no ancoramente, que são basicamente parent, prev, next. Diferente do css, a posição em que eles estao escritos é muito importante, prev é o elemento anterior que estiver no mesmo nivel hierarquico, next é o posterior, e parent é o que está acima. E pode-se ainda referenciar pelo id do elemento. Alguns exemplos praticos: MiniWindow // primeiro nivel hierarquico id: newWindow MiniWindowContents //segundo nivel UIWidget // terceiro nivel id: otoWidget size: 11 11 !text: 'Algo' background-color: #505050 anchors.top: parent.top // ancora o topo do widget atual no top do parent (MiniWindow) anchors.right: parent.right margin-right: 36 margin-top: 7 Button // terceiro nivel, irmao de otoWidget !text: 'Botao' width: 80 anchors.left: otoWidget.right anchors.bottom: prev.bottom margin-bottom: 10 margin-left: 10 E lembre, sempre com o espaçamento de dois spaces As classes que me refiro são por exemplo 'Button', UIWidget e etc, que alem disso ainda tem um parentesco de classes igual o c++, tu pode ver melhor eles em styles la na pasta data, a maioria deles estão declarados la. Tu pode ainda criar classes Attribuindo com o seguinte sinal '<', porém isso deve ser feito previamente, antes do Widget pai(MiniWindow) no caso. Eu acho que exagerei nas informações, talvez tenha sido muito pra pouco tempo, mas qualquer duvida pode perguntar.
-
faz um if com o getCreatureMaster(pokemon_uid), caso atrelado ao isPlayer. Inclusive faça os calculos dentro do if, porque eles dependem da existencia do master pra procurar a pokebola. if isPlayer(getCreatureMaster(pokemon_uid)) then table.insert(stt, "Boost level: +"..boost..".\n"..calculo.." stones left to +50.")end
-
Que tal primeiro reduzir o code usando loops e matematica? function getStoneCountByLevel(fromLevel, toLevel, increase_interval) local sum = 0 local a = math.ceil(fromLevel/increase_interval) for i = fromLevel, toLevel do sum = sum + a if (i % increase_interval) == 0 then a = a + 1 end endend E sim, voce pode fazer pegando o master da creature, porem leve em conta que nem todos os pokemons tem master, alguns sao selvagens, logo em alguns não deve ser exibido o boost.
-
tfs 0.3.4/0.3.6 [Encerrado] Weapon Type
tópico respondeu ao ludgeromf1 de dalvorsn em Tópicos Sem Resposta
É só fazer com script, ao invez do default tu faz como se fosse uma spell, tipo o burst arrow Dai tu faz como se fosse uma spell normal, sacou? muda os parametros e tira aquela area ali -
como transforma uma distro 8.60 para 7.92?
pergunta respondeu ao deivisonamorim de dalvorsn em Programação
Em tese pra estabelecer conexão tu so precisa apenas alterar essas duas linhas: #resources.h #define CLIENT_VERSION_MIN 860#define CLIENT_VERSION_MAX 860 Porém a coisa pode ser bem mais complexa, a começar pelos packets, tu teria que pegar o servidor 7.92, ir em protocolgame.cpp e checar todos os packets, verificar se condizem com os da versão 8.6, caso haja divergencias deve-se alterar para a estrutura do 7.92 o packet em divergencia. Como é um downgrade, dificilmente vai haver problema com features, mas caso haja também deve-se adaptar o code ja que o cliente não da pra adaptar(dá até dá, por meio de dll, mas é 1000x mais trabalhoso) Já ia me esquecendo, tem o protocollogin também, que pode ter diferença nos bytes kk -
Não faz o menor sentido ser a database e os players conseguirem logar, e o cliente travar provavelmente é overflow de alguma coisa, algo que ta rodando disparado. Porém sem log de erros ou algo do tipo fica complicado de ajeitar, pode ser tanta coisa ...
-
Ignora as que não for usar: local ignoredSkills = {3,6}-- [...]function onSkillChange(localPlayer, id, level, percent) if table.contains(ignoredSkills, id) then return end setSkillValue('skillId' .. id, level) setSkillPercent('skillId' .. id, percent, tr('You have %s percent to go', 100 - percent)) onBaseSkillChange(localPlayer, id, localPlayer:getSkillBaseLevel(id))endfunction onBaseSkillChange(localPlayer, id, baseLevel) if table.contains(ignoredSkills, id) then return end setSkillBase('skillId'..id, localPlayer:getSkillLevel(id), baseLevel)end
-
Creio eu que não exista um callback para isso em lua, e registrar uma creaturescript pra cada monstro é inviavel. Minha sugestão é que seja feito nas sources, diretamente na função void MonsterType::dropLoot(Container* corpse). Dai um meio facil de configurar seria criando um novo atributo dentro da tag do loot no xml do monstro identificando que esse item deve ter uma mensagem exclusiva. Ou de maneira alternativa, tu pode fazer um onKill registrado no player, que verifica o corpses a procura do item, e caso encontre manda a mensagem.
-
O servidor ta enviando mais skills que as existentes no otc. Qual distro usada? O usual é o byte 0xA1 para as skills, a função no tfs 0.37 é assim: #protocolgame.cpp void ProtocolGameAddPlayerSkills(NetworkMessage_ptr msg){ msg->put<char>(0xA1); for(uint8_t i = 0; i <= SKILL_LAST; ++i) { msg->put<char>(player->getSkill((skills_t)i, SKILL_LEVEL)); msg->put<char>(player->getSkill((skills_t)i, SKILL_PERCENT)); }} Você precisa checar o enum das skills, para ver se existem que o numero normal. O enum dessas skills fica em const.h. Vera algo similar a isso: #const.h enum skills_t{ SKILL_NONE = -1, SKILL_FIRST = 0, SKILL_FIST = SKILL_FIRST, SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DIST, SKILL_SHIELD, SKILL_FISH, SKILL__MAGLEVEL, SKILL__LEVEL, SKILL__EXPERIENCE, SKILL_LAST = SKILL_FISH, SKILL__LAST = SKILL__EXPERIENCE}; Poste esses dois trechos do seu codigo fonte para que possamos analisar o real problema.
-
tfs 0.3.4/0.3.6 [Encerrado] Weapon Type
tópico respondeu ao ludgeromf1 de dalvorsn em Tópicos Sem Resposta
Isso são distance effects, tu quer que ele seja aleatorio em torno da criatura? Tente algo assim: local position = getCreaturePosition(cid)local distance_effect = 12 -- aqui tu coloca o distance effect que tu querfor i = 1, 30 do doSendDistanceShoot(position, {x = position.x + math.random(-7, 7), y = position.y + math.random(-5, 5), z = position.z}, distance_effect)end -
Esse script ta no codestyle do tfs 1.+ Tu ta usando em versão antiga ne? tem que adaptar ele Fiz baseado no tfs 037, mas deve funcionar nos demais function onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor) if not isPlayer(cid) then return true end for _, s in pairs(getSpectators(getCreaturePosition(cid), 7, 5)) do if isMonster(s) and not getCreatureMaster(s) then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Elimine o monstro primeiro.") doTeleportThing(cid, fromPosition, false) return true end end return trueend
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.