Ir para conteúdo
View in the app

A better way to browse. Learn more.

priston.pro

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Distribuidor

Postado

Boa noite galera.

Estou querendo resolver um bug que to quebrando a cabeça aqui para entender pq toda vez que recebo item no distribuidor eu consigo pegar só uma vez ai se recebo dnv tem que relogar para pegar o proximo.

Queria entender como faço para atualizar em tempo real sem ter que ficar relogando toda hora.

Minha Source é base Frozen.

Agradeço quem puder dar uma força

Resolvido por Elison

Ir para a solução

Featured Replies

Postado
  • Solução

Arquivo:

Server/SrcServer/OnSever.cpp

Função:

void SendPostBox(char* szID, char* szItemCode, int spec)

Essa função só faz isso:

CreateFile(... OPEN_ALWAYS ...)
SetFilePointer(... FILE_BEGIN no final ...)
WriteFile(...)

Ou seja: ela grava o item no arquivo PostBox, mas se o jogador já está online, a lista dele já está carregada na memória:

lpPlayInfo->lpPostBoxItem

Aí quando ele recebe outro item, o arquivo muda, mas a memória do player não atualiza. Por isso só aparece depois de relogar.

Confirmei também aqui

Arquivo:

Server/record.cpp

Função:

int rsLoadPostBox(rsPLAYINFO *lpPlayInfo)

Tem isso:

if (lpPlayInfo->lpPostBoxItem) return TRUE;
Postado
  • Autor
58 minutos atrás, Elison disse:

Arquivo:

Server/SrcServer/OnSever.cpp

Função:

void SendPostBox(char* szID, char* szItemCode, int spec)

Essa função só faz isso:

CreateFile(... OPEN_ALWAYS ...)
SetFilePointer(... FILE_BEGIN no final ...)
WriteFile(...)

Ou seja: ela grava o item no arquivo PostBox, mas se o jogador já está online, a lista dele já está carregada na memória:

lpPlayInfo->lpPostBoxItem

Aí quando ele recebe outro item, o arquivo muda, mas a memória do player não atualiza. Por isso só aparece depois de relogar.

Confirmei também aqui

Arquivo:

Server/record.cpp

Função:

int rsLoadPostBox(rsPLAYINFO *lpPlayInfo)

Tem isso:

if (lpPlayInfo->lpPostBoxItem) return TRUE;

Exatamente eu vi tudo isso, porém existe alguma forma de fazer um reload no .dat do postbox sem ter que relogar ?

Postado
2 minutos atrás, noezinhos disse:

Sugiro mover essa informação pra sql

Se fizer de qualquer jeito, não ajuda. Funcionar vai.. Certo que devs de PT prezam pouco ou nada pela qualidade do código que produzem.

No mínimo o cara vai fazer puramente um SELECT no banco toda vez que o joãozinho clicar no npc. Não preciso nem dizer o quão newba é isso né.. Certo que os 100 players simultâneos que ele vai ter não vai causar (tanto) estrago no banco de dados.

Era nice a galera descobrir o que é cache e seus benefícios.

Editado por sheen

Postado
2 minutos atrás, sheen disse:

Se fizer de qualquer jeito, não ajuda. Funcionar vai.. Certo que devs de PT prezam pouco ou nada pela qualidade do código que produzem.

No mínimo o cara vai fazer puramente um SELECT no banco toda vez que o joãozinho clicar no npc. Não preciso nem dizer o quão newba é isso né.. Certo que os 100 players simultâneos que ele vai ter não vai causar (tanto) estrago no banco de dados.

Era nice a galera descobrir o que é cache e seus benefícios.

Estava conversando com um dev sobre o cacheamento, parece que alguns vibe coders pararam no tempo e não conhecem a maravilha do cache. Salvar em memória e programar orientado a objeto parece que virou raridade. Criar tudo em tempo real é possível, sem ter que ficar reiniciando.

Estou criando este projeto, onde toda alteração é feita em tempo real e totalmente otimizado. Puro cacheamento + orientação a objeto.

image.png

image.png

Postado

A ideia parece legal porém não faria jamais isso in-game. Usaria web para que eu pudesse fazer edições de qlqr lugar. Se por qlqr motivo eu n tiver acesso ao pc somente um cel consigo fazer oq quiser.

Além do cache - que a galera nem faz ideia - o poder das ferramentas web (quando bem construídas) é absurdo. A questão de ser orientado a objeto ou não é só um "padrão de programação", um jeito de codar diferente.

Entretanto, ao introduzirmos a variável "cache" no sistema, isso traz consigo mais problemas agora relacionados a concorrência e disponibilidade. Cenários com comportamentos indefinidos podem aparecer e isso deve ler levado em conta na hora de construir a arquitetura.

Editado por sheen

Postado
13 minutos atrás, sheen disse:

A ideia parece legal porém não faria jamais isso in-game. Usaria web para que eu pudesse fazer edições de qlqr lugar. Se por qlqr motivo eu n tiver acesso ao pc somente um cel consigo fazer oq quiser.

Além do cache - que a galera nem faz ideia - o poder das ferramentas web (quando bem construídas) é absurdo. A questão de ser orientado a objeto ou não é só um "padrão de programação", um jeito de codar diferente.

Entretanto, ao introduzirmos a variável "cache" no sistema, isso traz consigo mais problemas agora relacionados a concorrência e disponibilidade. Cenários com comportamentos indefinidos podem aparecer e isso deve ler levado em conta na hora de construir a arquitetura. Teorema CAP.

Cache é uma ferramenta, não uma solução universal. Dependendo do cenário, adicionar cache pode até aumentar a complexidade sem trazer benefício relevante.

E citar CAP nesse contexto também não diz muita coisa sem conhecer como o sistema foi construído. Antes de discutir cache, concorrência ou disponibilidade, primeiro é preciso entender os requisitos e a arquitetura do projeto.

No fim, o que define a qualidade não é usar cache, OOP ou ser web/in-game, e sim se a solução atende bem ao problema que precisa resolver.
O meu sistema suporta web, também é possível fazer edições fora do jogo em tempo real.

Editado por noezinhos

Postado

Eu tirei o CAP pq CAP é pra sistemas distribuídos, não se aplica. Se vc não se importa ta suave. Eu prefiro abrir o celular, logar no painel e mudar. Se vc prefere logar dentro do jogo vai na fé

Postado
Agora, sheen disse:

Eu tirei o CAP pq CAP é pra sistemas distribuídos, não se aplica. Se vc não se importa ta suave. Eu prefiro abrir o celular, logar no painel e mudar. Se vc prefere logar dentro do jogo vai na fé

Eu entendi, e concordo. O meu sistema suporta web, como citei.
O administrador responsável pode fazê-lo dentro do jogo ou fora dele. Como ele preferir, pensando em ambos cenários: estou dentro do jogo e preciso atender rápido uma demanda X estou fora do computador e houve uma emergência.

Postado
3 horas atrás, noezinhos disse:

Eu entendi, e concordo. O meu sistema suporta web, como citei.
O administrador responsável pode fazê-lo dentro do jogo ou fora dele. Como ele preferir, pensando em ambos cenários: estou dentro do jogo e preciso atender rápido uma demanda X estou fora do computador e houve uma emergência.

É mais uma coisa pra fazer. Além do frontend, um backend, (e mais, dependendo da arquitetura) tem que fazer a mesma coisa em c++. O que é muito mais complexo - leva tempo.

Em questão de custo X tempo seria uma insanidade prosseguir fazendo nos dois. Mas, é só minha opinião de fora como um "gestor de projeto". De qualquer forma, siga seu coração =D

Postado
8 horas atrás, sheen disse:

É mais uma coisa pra fazer. Além do frontend, um backend, (e mais, dependendo da arquitetura) tem que fazer a mesma coisa em c++. O que é muito mais complexo - leva tempo.

Em questão de custo X tempo seria uma insanidade prosseguir fazendo nos dois. Mas, é só minha opinião de fora como um "gestor de projeto". De qualquer forma, siga seu coração =D

A ideia desse sistema é pra testar alguns limites mesmo, eu continuo concordando com o que está falando, mas como estou com tempo livre, sigo estudando por curiosidade como funciona toda a fundamentação. Neste momento estou tentando colocar Midranda como um personagem jogável... como um gestor de projeto, não é ideal. Como um mero humano matando suas vontades da infância, isso vale muito

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.

Visitante
Responder

Account

Navigation

Pesquisar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.