2010-04-16

level_up_history

Mais uma nova tabela adicionado ao banco de dados. Esta registra o momento em que o jogador passou de nível, além de outras informações que serão (espero) utilizadas para ajudar a balancear o jogo futuramente. Aproveitando que há agora dois jogadores excepcionalmente dedicados, dá para ter uma idéia tanto do investimento necessário (em termos de tempo) para se alcançar uma nova encarnação, bem como o efeito das encarnações na evolução do personagem. Imagino que personagens com mais encarnações acumuladas farão uso das magias que lembram de outras vidas e terão uma subida amenizada pelo uso que farão delas.

Aproveitando, também foi removido o bug da skill 'bandage', dos guerreiros. Era um código muito estranho. Se essa skill fosse usada, e o jogador tivesse uma atadura no inventário, uma certa quantidade de hp seria recuperado. Caso não houvesse a atadura, uma quantidade menor seria recuperada. Estranhamente não existe um item chamado atadura. No final foram removidas as condições que levavam em consideração esse item. Ah sim, o bug era causado por uma subtração hardcoded de movimento retirado do player. Havia casos onde os pontos de movimento retirados (que depende do nível do jogador) eram maiores do que o mínimo garantido, levando a números negativos.

Voltei a usar redmine para gerenciar a resolução de bugs do debo. Infelizmente perdi a base de dados antiga, então os tickets tiveram suas contagens reiniciadas. Ao menos agora consigo acessar o repositório git pelo redmine.

2010-03-25

Atualizações menores

Agora o contador de tempo não contabiliza tempo ocioso. Foi criado uma nova macro IDLING(), em utils.h. Ela verifica se o contador de tempo ocioso do jogador é maior que zero. Assim, antes de atualizar os já conhecidos GET_FIGHTING_TIME() e GET_PEACE_TIME(), verifica-se IDLING(). Estranhamente aparecem casos onde o jogador ficou online por alguns segundos, mas o tempo marcado como peace_time mostrava centenas de segundos. O Hanaf sugeriu que talvez tivesse a ver com a forma como o mud gerencia heartbeats atrasados. Então talvez seja possível o loop principal não atualizar (por algum motivo) e, ao usuário entrar, todos os hearbeats atrasados serem computados num espaço curto de tempo.

A tabela session_history é criada, caso ela não exista, durante a inicialização do mud. Mas uma nova alteração já se faz necessária. Registrar o IP dos usuários. Após algumas recreativas horas de testes com manipuladores de bits em SQL, foi observado que é possível armazenar o IP como um inteiro de 32bits e fazer manipulações com esse número, usando operadores lógicos, em SQL. Fazia tempo que não me animava pra relembrar SQL. Agora falta alterar a tabela para adicionar esse novo campo e fazer o registro desse novo dado.

2010-03-21

session history

interpreter.c
- nanny(): inicializa GET_FIGHTING_TIME e GET_PEACE_TIME

fight.c
- perform_violence(): atualiza GET_FIGHTING_TIME e GET_PEACE_TIME

comm.c
- close_socket(): close_session_history()

Basicamente são esses os arquivos alterados. Agora a cada desconexão será criado um registro contendo o tempo em luta e o tempo sem estar em luta. Não foi tratado o caso de tempo em idle.

Também preciso checar se a tabela session_history não existe. Nesse caso é preciso criá-la.

2010-03-13

Mais magias de Necromante


Última leva de magias de Necromante foi adicionada ao spells.help. Tive vontade de citar "Jaspion" na magia "make aggr" (de 'make aggressive'):


'Satan Goss têm o poder de enfurecer os seres, e transformá-los em monstros incontroláveis.'

2010-03-11

Help para skills de necromante

Mais uma leva de skills de necromante agora tem help. São magias obtidas entre os níveis 20 e 50, aproximadamente.

É sempre bom verificar a sintaxe da magia olhando no spell_parser.c. Lá dá para saber quem pode ser alvo da magia (objeto, mob, jogador, conjurador...).