Julho 29julho 29 Licença Plus comment_634 Sugestão de implementação de suporte a Mapa por Instância (Dungeon Instance)Olá!Gostaria de sugerir a implementação de um sistema de Map Instance (Instância de Mapa) no emulador.Hoje, quando vários jogadores entram em uma dungeon, todos utilizam o mesmo mapa físico, compartilhando monstros, NPCs e progresso. Isso limita bastante a criação de sistemas PvE modernos.A ideia seria permitir que o servidor criasse várias cópias independentes de um mesmo mapa.ExemploExiste apenas um mapa:Mapa 70Hoje:Party A Party B Party C ↓ Mapa 70Resultado: todos veem os mesmos monstros; todos atacam o mesmo boss; progresso compartilhado; uma party pode atrapalhar a outra. A proposta seria:Party A ↓ Mapa 70 (Instância 1) ------------------------ Party B ↓ Mapa 70 (Instância 2) ------------------------ Party C ↓ Mapa 70 (Instância 3)Visualmente o mapa é exatamente o mesmo.Porém cada instância possui: monstros próprios; NPCs próprios; progresso próprio; cronômetro próprio; boss próprio; eventos próprios. Nenhuma party interfere na outra.Exemplo práticoParty A mata o Boss.Somente a Party A recebe:Etapa concluídaEnquanto isso, a Party B continua normalmente na primeira etapa.Nenhum monstro desaparece da outra instância.O que seria interessante existir na SourceAlgo semelhante a:int CreateMapInstance(int map);Retorno:InstanceIDDepois:MoveUserToInstance(Index, InstanceID);ouMoveUser( Index, Map, InstanceID, X, Y );Para monstros:CreateMonster( MonsterClass, InstanceID, X, Y );OuMonster.Instance = InstanceID;Assim cada instância teria seus próprios monstros.ConsultasTambém seria interessante:GetUserInstance(Index); GetMonsterInstance(Index); DestroyInstance(InstanceID); GetPlayersInInstance(InstanceID);Eventos LuaSeria excelente disponibilizar nas bridges Lua algo como:User.GetInstance(aIndex) User.SetInstance(aIndex, instance) Monster.GetInstance(monster) Instance.Create(map) Instance.Destroy(id) Instance.GetPlayers(id)Ou funções equivalentes.BenefíciosCom esse recurso seria possível desenvolver: Dungeons por Party Dungeons Solo Boss exclusivos Sistema de Andares Torre Infinita Survival Raid Castle PvE Eventos temporários Missões por instância Campanhas Labirintos Challenge Mode Speed Run Ranking por tempo Tudo sem conflito entre jogadores.Consumo de memóriaNão seria necessário duplicar arquivos do mapa.Uma instância utilizaria os mesmos recursos carregados:Terrain Objects Textures BMD Mudaria apenas o estado da execução:Jogadores Monstros NPCs Drops Objetos temporários Cronômetros EventosOu seja, várias instâncias utilizariam o mesmo mapa carregado em memória, alterando apenas os dados dinâmicos.Exemplo de usoint instance = CreateMapInstance(70); MoveUserToInstance(player1, instance); MoveUserToInstance(player2, instance); CreateMonster(BudgeDragon, instance, 120, 85); CreateMonster(BudgeDragon, instance, 125, 90); CreateMonster(Boss, instance, 150, 150);Quando todos saírem:DestroyInstance(instance);Toda a memória utilizada pela dungeon seria liberada automaticamente.Considerações finaisA implementação desse recurso abriria possibilidades para sistemas PvE muito mais avançados no emulador, sem a necessidade de criar dezenas de mapas duplicados apenas para simular instâncias. Além de simplificar o desenvolvimento, manteria um consumo de recursos mais eficiente e permitiria que múltiplas parties utilizassem a mesma dungeon simultaneamente, cada uma com sua própria execução independente. Isso aproximaria o emulador do funcionamento adotado por MMORPGs modernos e facilitaria a criação de conteúdos escaláveis, como raids, campanhas, dungeons por dificuldade e eventos cooperativos. Relatório
Julho 29julho 29 comment_635 Mas isso já existe, não?CustomInstance.txtSó não puxei as chamadas pro Lua ainda porque não recebi feedback total da custom.E já temos a um bom tempo, faça os testes e depois informe, mas nele você pode definir a quantidade de instâncias, a party se encontrar outra party na instancia 1, podem ir para outra instância. Rivify Brasil LtdaHolding de tecnologia, Software, Cloud, IAe infraestrutura digital.[email protected] • www.rivify.com.brAv. Tiradentes, 960, 9.º andar, sala 2 — LuzSão Paulo/SP — CEP 01102-000CNPJ 68.145.965/0001-06Nos acompanhem nas redes @rivifybrasil Relatório
Julho 29julho 29 Autor Licença Plus comment_637 2 horas atrás, José Silva disse:Mas isso já existe, não?CustomInstance.txtSó não puxei as chamadas pro Lua ainda porque não recebi feedback total da custom.E já temos a um bom tempo, faça os testes e depois informe, mas nele você pode definir a quantidade de instâncias, a party se encontrar outra party na instancia 1, podem ir para outra instância.Olá José.Analisando melhor a documentação e os arquivos do servidor, encontrei o arquivo CustomInstance.txt.Pelo que entendi, ele indica que já existe um sistema de instâncias na source, com configurações como:MaxActiveInstanceMaxPlayersPerInstanceMaxActiveMapsPerInstanceDurationMinutesMaxMonsterUseAlém disso, é possível definir quais mapas aceitam instâncias privadas.Minha dúvida é: esse sistema já está totalmente implementado na source?A ideia que tenho é desenvolver dungeons totalmente em Lua, por exemplo:Cada party entra em sua própria instância.Cada instância possui monstros, boss, progresso e cronômetro independentes.Uma party não interfere na outra, mesmo utilizando o mesmo mapa base.Ao finalizar ou expirar o tempo, a instância é destruída automaticamente.Gostaria de saber se atualmente existe alguma forma de acessar esse sistema pelo Lua ou se ele é utilizado apenas internamente pela source.Caso ainda não exista uma API para isso, acredito que algumas funções como estas seriam suficientes para permitir a criação de sistemas bastante avançados:Instance.Create(map) Instance.Destroy(instanceId) player:getInstance() player:setInstance(instanceId) Instance.AddPlayer(instanceId, player) Instance.RemovePlayer(instanceId, player) Instance.SpawnMonster(instanceId, monsterClass, x, y) Instance.GetPlayers(instanceId)Com isso seria possível desenvolver dungeons, raids, torres, eventos PvE e outros sistemas praticamente apenas em Lua, aproveitando um recurso que aparentemente a source já possui.O que você acha? O sistema do CustomInstance já suporta esse tipo de utilização ou ainda seria necessário expandi-lo?O sistema que eu estava desenvolvendo aqui era justamente uma dungeon/raid em Lua.A solução que encontrei, sem um sistema de instâncias, seria criar várias cópias do mesmo mapa. Por exemplo, quando uma party tenta iniciar a dungeon, o servidor verifica:Se o mapa X estiver ocupado, tenta o mapa Y.Se o mapa Y estiver ocupado, tenta o mapa Z.E assim sucessivamente até encontrar um mapa livre.O problema dessa abordagem é que ela possui algumas limitações importantes.Primeiro, é necessário duplicar os arquivos do mapa World e Object para cada slot da dungeon. Se eu quiser permitir 10 execuções simultâneas da mesma raid, precisarei manter 10 cópias desses arquivos, aumentando o tamanho do cliente e tornando a manutenção muito mais trabalhosa. Qualquer alteração no mapa precisa ser replicada em todas as cópias.Além disso, vi que o sistema de CustomInstance está configurado para suportar até 10 instâncias. Na prática, esse limite pode acabar sendo baixo dependendo do conteúdo do servidor.Por exemplo, imagine uma única raid com três dificuldades:EasyMediumHardSe houver 10 players ou 10 parties executando essas variações ao mesmo tempo, todas as instâncias disponíveis já estariam ocupadas. Isso impediria que outros jogadores participassem de outras dungeons ou raids que também utilizassem o sistema de instâncias.Minha dúvida é:Esse limite de 10 instâncias é apenas uma configuração do CustomInstance.txt ou é uma limitação da própria source?O sistema foi desenvolvido para suportar um número maior de instâncias simultâneas?Existe alguma forma de acessar esse sistema via Lua, ou a intenção é que ele seja utilizado apenas internamente?Acredito que um sistema de instâncias mais flexível abriria muitas possibilidades para criação de conteúdo PvE, como dungeons, raids, torres, campanhas e eventos, sem a necessidade de duplicar mapas e mantendo um consumo muito menor de recursos no cliente. Relatório
Julho 29julho 29 comment_643 Acabei de responder essa pergunta acima.Vai ser adicionado ao Lua ainda. Rivify Brasil LtdaHolding de tecnologia, Software, Cloud, IAe infraestrutura digital.[email protected] • www.rivify.com.brAv. Tiradentes, 960, 9.º andar, sala 2 — LuzSão Paulo/SP — CEP 01102-000CNPJ 68.145.965/0001-06Nos acompanhem nas redes @rivifybrasil Relatório
Julho 30julho 30 Autor Licença Plus comment_646 Perfeito obrigado man !2 horas atrás, José Silva disse:Acabei de responder essa pergunta acima.Vai ser adicionado ao Lua ainda. Relatório
Participe da conversa
Você pode publicar agora e se cadastrar depois. Se você tem uma conta, entre agora para publicar com sua conta.