Página 1 de 3

Criando Missões usando o Q.edit PSO

Enviado: 04 Jun 2025, Qua, 07:35
por Sonic DX
aqui está um tutorial de como criar missões usando o aplicativo Q.edit

Nota: Não fique muito preocupado se você não entender completamente esta parte. Fará mais sentido quando for mostrado como usar as informações.As missões PSO são divididas em duas partes:.dat (contém dados de andar, ou seja, dados de monstros, objetos e eventos).bin (contém o script de montagem PSO para executar a missão) * A montagem será referida como ASM a partir de agora.Para Tethealla, esses dois arquivos estão organizados cuidadosamente em um arquivo .qst para que o servidor possa descompactar e enviar para os clientes para execução.Para que uma missão funcione, ela requer dados de NPC/monstro, objeto e evento. Em seguida, requer um script para dizer ao cliente o que exatamente fazer com muitos desses NPCs e objetos (e outras funções não relacionadas), para que a missão funcione corretamente.Dados de Monstros, Objetos e EventosVamos pegar uma missão como exemplo (Endless Nightmare 1)

Esta é uma visão geral do Pioneer 2 do Endless Nightmare 1. Como você pode ver, muitos monstros (as setas vermelhas) e objetos (as setas verdes) estão colocados no Pioneer 2. Os monstros variam de monstros reais a NPCs, enquanto os objetos variam de objetos de cenário, pontos de Spawn de jogadores e várias colisões para executar eventos ou partes do script. Monstros e objetos têm seus próprios parâmetros, conforme exibido abaixo, mas muitos objetos requerem interações com o script ASM (geralmente definido por uma Função) para poder realizar certos eventos.

Os parâmetros de um Soldado Vermelho (esquerda) e os parâmetros do Principal Warp (direita).Configurar seus monstros e objetos é bastante fácil, como será explicado na segunda parte do guia.Os dados de eventos do mapa também são um processo bastante simples. Na maior parte, os dados de eventos do mapa são usados simplesmente para processar ondas de inimigos, revelar objetos (se ligados a uma onda) e desbloquear portas. Para contextualizar, vamos olhar para a Floresta 1 de EN1 para ter uma ideia melhor.

Esta é uma visão geral dos dois primeiros quartos da Floresta 1. As setas vermelhas são os monstros da primeira sala de inimigos, enquanto as setas verdes são os numerosos objetos no mapa (enquanto a seta amarela é apenas um monstro/objeto destacado).Como você provavelmente sabe, a missão não gera todos os inimigos de uma vez. Este é o papel dos eventos do mapa. Os eventos do mapa informam o jogo para gerar apenas certas ondas de inimigos, e uma vez que uma onda termina, realizar outras ações, como chamar outros eventos ou desbloquear portas.

Acima estão dois inimigos que fazem parte da primeira sala. Como você pode ver, eles estão configurados para ondas diferentes, mas você ainda deve ser capaz de informar ao cliente quando os inimigos devem aparecer. (Note que qualquer coisa atribuída à Onda #0 aparecerá imediatamente ao entrar no mapa).Na imagem do mapa acima, o objeto destacado é uma 'Colisão de Evento'. Isso faz com que um certo evento do mapa ocorra quando os jogadores colidem com o objeto invisível (que tem um determinado raio, então o jogador pode estar em qualquer lugar dentro desse círculo).Essa colisão de evento em particular chamará o Evento 111. Os eventos para a primeira sala estão escritos abaixo, com explicações sobre como eles funcionam.

Código: Selecionar todos

#111 // Calls Wave 1 in Map Section 11, with a delay of 50 frames after the event is called.
  Section: 11
  Wave: 1
  Delay: 50

  Call 1111 // After the wave is cleared, event 1111 will run.

#1111 // Calls Wave 2 in Map Section 11, with a delay of 50 frames after the event is called.
  Section: 11
  Wave: 2
  Delay: 50

  Call 1112 // After the wave is cleared, event 1112 will run.

#1112 // Calls Wave 3 in Map Section 11, with a delay of 50 frames after the event is called.
  Section: 11
  Wave: 3
  Delay: 50

  Unlock 4 // After the wave is cleared, doors with Door ID 4 will be unlocked.
  Unlock 5 // After the wave is cleared, doors with Door ID 5 will be unlocked.
  Unlock 6 // After the wave is cleared, doors with Door ID 6 will be unlocked.
Um processo bastante simples. Em palavras:A Onda 1 será chamada, então após a conclusão da Onda 1, chame a Onda 2, então após a conclusão da Onda 2, chame a Onda 3, então após a conclusão da Onda 3, desbloqueie as portas 4, 5 e 6.Para a essência da missão, isso é tudo que você precisa fazer. Coloque seus monstros, defina suas ondas e escreva eventos para garantir que as ondas sejam processadas de acordo e desbloqueie portas após certas ondas serem limpas. (note que qualquer porta com ID -1 será sempre desbloqueada)O Script da Montagem PSOAgora que você (esperançosamente) sabe como funcionam monstros, objetos e eventos de mapa, é hora de olhar para a parte complicada do arquivo da missão, o script.Para que a missão funcione de fato, é necessário um script para ser executado, para saber quais mapas definir, quando rodar cenas cortadas, quando saber que a missão foi concluída, o que os NPCs dirão, etc. etc. Fora o simples posicionamento de objetos e o progresso através de um mapa de ondas de monstros, o script faz tudo o mais.

Parece complicado, né? Bem, não se preocupe porque na verdade é relativamente simples se você entender o que cada coisa faz. Vamos desvendar isso.Quando uma missão é iniciada, ela imediatamente executa a Função 0 (que é a linha que começa com o azul 0). A Função 0 geralmente define os episódios, define os mapas, diz à missão quais funções executar ao entrar em áreas e diz a essa missão quais funções executar quando a missão estiver concluída ao conversar com a mulher da guilda. Ela pode fazer quantas coisas você quiser, mas esses são alguns exemplos que devem ser colocados na Função 0.

Código: Selecionar todos

0:  set_episode 00000000 // Sets the quest to Episode 1. (This is not actually in the script as the quest is from V1/2, which didn't have episodes, but let's pretend it is)
  set_floor_handler 00000000, 150 // Whenever Floor 0 (Pioneer 2) is entered, run Function 150.
  set_floor_handler 00000001, 151 // Whenever Floor 1 (Forest 1) is entered, run Function 151.
  set_floor_handler 00000002, 152 // Whenever Floor 2 (Forest 2) is entered, run Function 152.
  set_qt_success 250 // When Register 255 is set (more on that later, but basically when the quest is clear), run Function 250 when talking to the guild lady.
  BB_Map_Designate 00, 0000, 00, 00 // Set Floor 0 (Pioneer 2) to be Map 0 (Pioneer 2) and Variant 0. (3rd byte is unknown)
  BB_Map_Designate 01, 0001, 00, 01 // Set Floor 1 (Forest 1) to be Map 1 (Forest 1) and Variant 1.
  BB_Map_Designate 02, 0002, 00, 01 // Set Floor 2 (Forest 2) to be Map 2 (Forest 2) and Variant 1.
  get_difflvl2 R83 // Store the difficulty level in Register 83 (0 = Normal, 1 = Hard, 2 = Very Hard, 3 = Ultimate)
  ret // Return to caller
Sobre ret:Ret é o OPCode (estas são as cadeias de texto) que para a execução do script, na maioria dos casos. Uma vez que o script começa, ele nunca vai parar (os números da função são mais como marcadores do que scripts separados) até que encontre um ret. No entanto, se uma função é chamada usando o OPCode call, ela retornará à função que a chamou. Você deve lembrar de usar ret quando quiser que o script pare, caso contrário, pode causar uma série de coisas indesejadas.Sobre registros:Registros são como contêineres que mantêm certos números dentro deles. Quando uma missão começa, cada Registro é definido como 0 (e, portanto, na verdade não existe, além de alguns registros reservados) e pode ser alterado ao longo do script. Os registros são usados para fazer o script pular para outras funções dependendo de como estão configurados, causando eventos diferentes se você fez algo na missão que fez com que um registro fosse definido.
Vamos usar a função de sucesso da missão (250) como exemplo. Isso acontece quando você fala com a mulher da guilda após a missão ser concluída.

Código: Selecionar todos

250:  jmpi_= R83, 00000000, 251 // If Register 83 is equal to 0 (normal difficulty), jump to function 251.
  jmpi_= R83, 00000001, 252 // If Register 83 is equal to 1 (hard difficulty), jump to function 252.
  jmpi_= R83, 00000002, 253 // If Register 83 is equal to 2 (very hard difficulty), jump to function 253.
  jmpi_= R83, 00000003, 254 // If Register 83 is equal to 3 (ultimate difficulty), jump to function 254.
  ret // Return to caller (this is not actually necessary, because a jump makes the script stop running where it is and start running elsewhere, so to speak)
251:  window_msg 'You've been awarded 2000 Meseta.' // Brings up a window message that displays the text written.
  bgm 00000001 // Plays the quest clear jingle
  winend // Closes the window message
  pl_add_meseta2 000007D0 // Adds 2000 Meseta to the player's inventory
  ret // Return to caller (a jump is not regarded as a caller, so the script will just end here)
252:  window_msg 'You've been awarded 4000 Meseta.'
  bgm 00000001
  winend
  pl_add_meseta2 // 00000FA0 // Adds 4000 Meseta to the player's inventory
  ret
E assim por diante.Registros são extremamente úteis para condicionais, e você poderá ver como usá-los corretamente na próxima parte do guia.Não posso realmente entrar em todos os detalhes da scriptização aqui, já que há muitas coisas a dizer sobre isso, mas isso deve lhe fornecer algum conhecimento fundamental sobre como funciona.Quando o cliente interage com certas coisas, ele pulará para uma determinada Função e executará o que você quiser. Exemplos adequados serão dados abaixo.

Re: Criando Missões usando o Q.edit PSO

Enviado: 04 Jun 2025, Qua, 07:47
por Sonic DX
Para ajudá-lo a entender as coisas, vamos fazer você criar uma quest simples. Ela contará com uma cinemática de abertura em Pioneer 2, 2 salas da Floresta 1, 2 salas da Floresta 2 e, em seguida, o dragão. Uma quest muito simples que deve ajudá-lo a entender o básico.Antes de começarmos, por favor, baixe este .zip:
http://puu.sh/o8kEv/df842c471e.zip
Este .zip contém pré-configurações de mapa para Pioneer 2, Floresta e Dragão, junto com os IDs das portas da Floresta porque elas são super estúpidas.Para começar, abra o QEdit, clique em Novo e selecione o Episódio 1, depois marque Pioneer 2, Floresta 1, Floresta 2 e os andares do Dragão.Antes de fazer qualquer coisa, vá para cada mapa e clique no botão de importar dados do andar à esquerda.Para Pioneer 2, importe Pioneer 2 NPCse.dat e Pioneer 2 Objectso.dat.Para Floresta 1, importe Forest 1 Doorso.dat.Para Floresta 2, importe Forest 2 doorso.dat.Para o Dragão, importe tanto Dragone.dat quanto Dragono.dat.

Você precisará alternar entre Monstros (NPCs) e Objetos para importar cada arquivo.Se tudo estiver certo, você deve ter objetos importados em todos os mapas e NPCs na Pioneira 2. Isso é para facilitar seu trabalho, para que você não precise colocar portas e outras coisas sozinho.Aqui está como a Pioneira 2 deve parecer:

Dica: Antes de começar a trabalhar em qualquer missão, é recomendável que você importe objetos (e possivelmente monstros, para Pioneer 2 / Chefes) de um modo livre ou missão. Isso economizará o trabalho de colocar todas as portas você mesmo, além de garantir que elas não estejam mal colocadas também. Não faça isso no meio do desenvolvimento de uma missão, pois a importação sobrescreve objetos / monstros já colocados.Agora que temos a base pronta, é hora de realmente desenvolver nossa missão.A primeira coisa que queremos fazer é scriptar a Função 0. Isso é imperativo. Uma missão não pode ser executada sem que a Função 0 esteja definida de alguma forma.Clique em Script no menu superior, depois clique em "Visualizar Script". Você será levado a uma outra janela que deve parecer com isso:

(Se houver 0: retire-o, pois provavelmente apenas irá te confundir. Faça isso clicando na linha e pressionando delete)Agora, o que você quer fazer é clicar em Adicionar, para abrir a seguinte janela:

É recomendável que você trabalhe com Hex para a maioria das coisas, mas algumas coisas você pode achar mais fácil colocar valores decimais (como coordenadas ou valores de meseta). Você verá quando isso é apropriado.Neste painel, escreva as seguintes coisas:Rótulo: 0 // Isso rotula a linha como o início da Função 0Opcode: set_episode // Este é o OPCode para esta linha específica de scriptT_DWORD: 0 // Isso fará com que configure o episódio 1.Depois de escrever tudo o que é relevante, pressione Inserir e sua linha de código deverá ser inserida:

Você não é um gênio em script?Agora que descobrimos como começar a escrever o script, é hora de preenchê-lo com o que queremos. Repita o seguinte abaixo (não os comentários, ignore tudo a partir de // e além, eles são apenas explicações), você deve conseguir fazer isso: (Por favor, note que clicar em adicionar irá inserir uma linha abaixo da linha que você destacou. Fique atento a isso para garantir que você escreva as linhas onde você deseja)

Código: Selecionar todos

0:  set_episode 00000000
  set_floor_handler 00000000, 150 // When warping into Floor 0 (Pioneer 2), run Function 150
  set_floor_handler 00000001, 200 // When warping into Floor 1 (Forest 1), run Function 200
  set_floor_handler 00000002, 250 // When warping into Floor 2 (Forest 2), run Function 250
  set_floor_handler 0000000B, 300 // When warping into Floor 11 (Dragon), run Function 300
  set_qt_success 350 // When the quest is clear (R255 is set), jump to Function 350 when talking to the Guild Lady
  get_slotnumber R250 // Store the players' slot number inside Register 250 (0 = P1, 1 = P2, 2 = P3, 3 = P4)
  get_difflvl2 R251 // Store the difficulty level inside Register 251.
  BB_Map_Designate 00, 0000, 00, 00 // Set Floor 0 (Pioneer 2) to be Map 0 (Pioneer 2) and Variant 0.
  BB_Map_Designate 01, 0001, 00, 00 // Set Floor 1 (Forest 1) to be Map 1 (Forest 1) and Variant 0.
  BB_Map_Designate 02, 0002, 00, 00 // Set Floor 2 (Forest 2) to be Map 2 (Forest 2) and Variant 0.
  BB_Map_Designate 0B, 000B, 00, 00 // Set Floor 11 (Dragon) to be Map 11 (Dragon) and Variant 0.
  set_mainwarp 00000001 // Sets the main Ragol teleporter to allow access to Floor 1 (Forest 1).
1: ret // Stops the script. There's a reason it is Function 1, but Function 0 will overflow into it and stop anyway.
Você fez certo? Se seu script corresponde à imagem sob o spoiler, parabéns! Você está no caminho certo. (Eu esqueci de escrever get_slotnumber antes de fazer a captura de tela, finja que está lá)

Agora vamos descobrir como fazer a cena de abertura funcionar. Volte para a janela do mapa de Pioneer 2 e clique em adicionar monstro, isso trará a lista de NPCs.

Escolha qualquer NPC que você gostaria que fosse aquele que lhe dá o briefing no início da missão, e então coloque-o no mapa clicando onde você deseja que eles estejam. Para o propósito desta missão exemplo, vamos colocá-los na Guilda dos Caçadores, onde outros NPCs costumam estar. Pessoalmente, eu decidi usar o Gilliam.Depois de colocar o NPC, clique nele e clique em editar dados e você deve receber uma janela com os parâmetros do NPC.

Edite os dados ao seu gosto (a posição e a rotação), embora eu seja bastante sem graça e goste de copiar o posicionamento da SEGA para muitas coisas. Independentemente de como você deseja que seu NPC seja, coloque o ID do personagem deste NPC como 100 e a função como 400. O que isso faz é tornar seu personagem NPC 100, e quando interagido, o script saltará para a função 400.Agora que o NPC está pronto, vamos trabalhar na cinemática de abertura.Sob 1: ret em seu script, escreva as seguintes linhas:

Código: Selecionar todos

150:  switch_jmp R0, 2:151:1 // Depending on R0's value, jump to Function X. (R0 = 0, F151. R0 = 1, F1)
151:  leti R1, 000000ED // Let R1 be 000000ED (X Coordinate)
  leti R2, 00000000 // Let R2 be 00000000 (Y Coordinate)
  leti R3, 0000014D // Let R3 be 0000014D (Z Coordinate)
  leti R4, FFFFFFF1 // Let R4 be FFFFFFF1 (Rotation)
  p_setpos 00000000, R1 // Set the position of the Player in Slot 1 depending on Registers 1-4.
  leti R1, 000000FF
  leti R2, 00000000
  leti R3, 00000152
  leti R4, FFFFFFD5
  p_setpos 00000001, R1 // Set the position of the Player in Slot 2 depending on Registers 1-4.
  leti R1, 000000DE
  leti R2, 00000000
  leti R3, 00000142
  leti R4, 00000019
  p_setpos 00000002, R1
  leti R1, 000000F8
  leti R2, 00000000
  leti R3, 00000143
  leti R4, FFFFFFEC
  p_setpos 00000003, R1
  call 2 // Calls Function 2
  message 00000064, 'Your opening message here.' // Calls a message box from NPC 100.
  add_msg 'More messages' // Adds more messages
  mesend // Closes the speech bubble
  set R0 // Sets Register 0 to equal 1.
  bgm 00000000 // Plays the quest start jingle
  call 3 // Calls Function 3
  ret // Ends script
A Função 150 será executada quando o jogador entrar no Andar 0 (Pioneer 2) -- isso também é verdade quando a missão começa pela primeira vez. switch_jmp faz o script ir para um determinado ponto dependendo de um registrador definido. 2:151:1 significa que há 2 valores que ele verifica (se R0 é 0 ou 1), então pula para F151 ou 1. Se dissesse 3:151:1:1, isso significa que ele pularia para F1 se R0 fosse 2 também. Assim, neste caso, uma vez que F151 foi executada uma vez, R0 será definido como 1, o que significa que toda vez que você entrar no Pioneer 2 de agora em diante, ele executará F150, mas lerá que o valor de R0 é um, portanto pulando para a Função 1, que é apenas um simples ret, parando o script de fazer qualquer coisa (exatamente o que queremos). Note que as coordenadas dos jogadores foram apenas retiradas de uma missão da SEGA (sou tão lame), mas se você desejar encontrar coordenadas, vá para a Visualização 3D em Ferramentas e vá para onde você deseja colocar algo para obter as coordenadas.
De qualquer forma, você provavelmente notou que F151 chama a função 2 e 3, mas atualmente não existem a Função 2 ou 3. Então é hora de escrevê-las!Volte para 1: ret e pressione Adicionar novamente, e escreva o seguinte:

Código: Selecionar todos

2:  disable_movement2 R250 // Disables player movement.
  p_action_disable // Disables any sort of interactions from the player
  hud_hide // Hides the HUD
  cine_enable // Enables the letterbox cinematics
  cam_zmin // Zooms the camera in
  ret
3:  enable_movement2 R250 // Enables player movement.
  p_action_enable // Enables interactions again.
  hud_show // Shows the HUD
  cine_disable // Disables the letterbox effect
  cam_zmout // Zooms the camera out (back to normal)
  ret
Estas são as funções que possibilitam os efeitos cinematográficos. Em vez de escrevê-las toda vez, podemos guardá-las em outras funções e chamar a função completa quando necessário. Isso provavelmente não será necessário para esta missão, mas se você quiser fazer missões com várias cenas cortadas, é útil escrever funções que você pode chamar. Neste caso também, porque as funções foram chamadas e não puladas, 'ret' fará o script retornar à Função 151, no lugar onde chamou F2 e F3.Então, ao olhar para a Função 151, ela configura as posições dos jogadores, inicia a cena cinematográfica, o NPC irá falar, termina a cena cinematográfica e permite que você comece a missão. Exatamente o que queríamos que acontecesse. Com isso, terminamos com a cena de abertura da missão, nossa!Embora ainda precisemos configurar F400 (a Função do Gilliam quando interagido), podemos deixar isso para depois -- apenas não inicie sua missão para testar e então converse com ele!

Ao Bosque! FLOREST Agora que fizemos praticamente tudo o que queríamos fazer em Pioneer 2 (exceto o diálogo do Gilliam, mas vamos chegar a isso mais tarde), é hora de começar com o conteúdo principal da missão: O mapa e seus monstros.Comparado ao que acabamos de fazer, isso é relativamente fácil.Primeiro, volte ao seu script e escreva:

Código: Selecionar todos

200: ret
Em algum lugar no seu script, qualquer lugar servirá (embora eu goste de manter as funções em ordem e NUNCA quebrar uma função). Como não queremos que nada aconteça quando entramos na Floresta, vamos simplesmente fazer o script parar imediatamente.Vá para o início da floresta no canto inferior direito, onde está a barreira de energia. A primeira coisa que você vai querer fazer é desbloquear a barreira de energia e garantir que ela esteja automaticamente aberta. Para fazer isso, clique na barreira de energia (isso pode ser difícil, talvez você queira ir para o Objeto 20) e clique em editar dados. Dentro dos dados, mude o ID da Porta para -1.

E então confirme isso. Isso manterá a barreira desbloqueada o tempo todo.Na sala depois desta, vamos colocar alguns pontos de renascimento! Mude a colocação do ID da sala para 11 (a floresta é um pouco estranha, então é recomendado não usar Auto), então clique em Adicionar Monstro, defina para Onda 1 e coloque alguns pontos de renascimento. Não faça muitos por enquanto, porque você precisará editar os dados desses inimigos.

Continua abaixo :idea:

Re: Criando Missões usando o Q.edit PSO

Enviado: 04 Jun 2025, Qua, 07:55
por Sonic DX
Completamente malfeito, mas esse não é o momento para fazer uma missão com aparência profissional.Conselho: Você pode pressionar ctrl+clique para continuar adicionando monstros, embora isso coloque um inimigo fictício em 0/0, então você precisará garantir que o exclua (clique no monstro na lista de inimigos e pressione deletar).Após colocar seus monstros, clique neles e pressione editar dados. Isso ocorre porque o jogo sempre coloca monstros na coordenada Y 0, e em muitos mapas isso simplesmente não serve, especialmente na Floresta.Na caixa de edição de dados, a barra de Posição Y à direita mostra o nível do inimigo em relação ao estágio em si. Você vai querer arrastar a barra até que ela alinhe com o chão:

Faça isso para cada inimigo que você colocar e, para verificar se está tudo certo, entre na visualização 3D e olhe para suas aparições.

Provavelmente não é necessário dizer que, ao criar uma missão, você quer parecer profissional, você precisará editar essas coordenadas XYZ manualmente para garantir que as coisas se alinhem corretamente, mas isso não é tão importante para o que estamos fazendo aqui.Depois de ajustar a sua primeira onda, faça uma segunda onda (de qualquer coisa) e então pare. Certifique-se de que os inimigos estão onde você quer que estejam, assim como na primeira onda.Agora que temos os pontos de aparecimento da primeira sala prontos, precisamos fazer com que eles realmente joguem.Desta vez, adicione um objeto e selecione Evento de Colisão. Mantenha o Raio em 30, não importa muito, e coloque-o em frente à Barreira de Energia. Vá para os dados dele e defina o campo Número do Evento como 1. Assim como os monstros, você precisará se certificar de que a Posição Y da Colisão do Evento está correta! Use a barra para ajustá-la, e se você não tiver certeza, entre no modo de Visualização 3D para verificar.

Com a colisão de eventos definida, precisamos realmente definir o evento que será executado (que é o evento 1).Clique em Visualizar evento no mapa à esquerda e escreva o seguinte na caixa grande à direita:

Código: Selecionar todos

#1 // Calls Wave 1 in Section 11 with no delay
Section: 11
Wave: 1
Delay: 0

Call 2 // Calls event 2 after Wave 1 is finished.

#2 // Calls Wave 2 in Section 11 with no delay
Section: 11
Wave: 2
Delay: 0

Unlock 4 // Unlocks the door with Door ID 4 after Wave 2 is finished.
Por favor, note que os IDs das portas do Forest Door são estranhos. Consulte a imagem incluída no .zip anterior para ver quais são os IDs das portas. Não mexa nos IDs das portas a menos que você saiba o que está fazendo.Depois disso, clique em OK e se seus eventos estiverem corretos, a janela se fechará sem mensagens de erro.

Isso termina o primeiro quarto. A porta 4 é a que está ao norte, então vamos para o próximo quarto. Este será o quarto final da Floresta 1.Antes de fazermos qualquer coisa, mude sua identificação de quarto para 7, já que este é o quarto 7.Depois disso, vamos pegar o teletransportador do final (ele está à direita). Clique nele, depois clique em mover, e coloque-o em algum lugar no Quarto 7. Certifique-se de alinhá-lo com o chão, pois ficará bem mais alto devido de onde veio. Além disso, mude para que tenha uma Bandeira de Aparição de 1.

Isso faz com que o teletransportador fique escondido, a menos que seja programado para aparecer.Agora, faça este quarto exatamente como o anterior. Se você esqueceu o que fazer:- Coloque os pontos de spawn (certifique-se de que estão na posição certa)- Faça 2 ondas- Defina uma Colisão de Evento (faça com que seja o evento número 3)- Escreva os dois eventos para as ondas (lembre-se de usar a Seção: 7 desta vez em vez de 11)Uma vez que você tenha terminado, em vez de desbloquear o 4, escreva o seguinte sob o evento 4:

Código: Selecionar todos

Unhide 7 1 // Unhides anything in Room 7 with an Appear Flag of 1
Isso fará com que o teletransportador para F2 apareça após a Onda 2 nesta sala. Se você tiver algum problema com esta parte, me avise.E com isso, a Floresta 1 está completa. Prossiga para a Floresta 2!as profundezas sombrias dos ferets...A primeira coisa a fazer quando chegarmos à Floresta 2 é abrir o script novamente e adicionar a seguinte linha:

Código: Selecionar todos

250:  unlock_door2 00000002, 0000003F // Opens Door 63 on Floor 2 (Forest 2)
  ret
Isso não é realmente necessário, mas eu queria te mostrar como usar este OPCode. Isso permitirá que você destranque portas após cenas cortadas ou outros eventos roteirizados, se assim desejar. Geralmente, em quests na Floresta, interruptores são colocados para essas portas (coloque um interruptor e dê a ele um ID de interruptor de 63 para corresponder à porta), mas eu gosto de ser chique. Isso destrancará a porta na frente da entrada quando você entrar na Floresta 2.Depois disso, pegue o teletransportador do chefe e coloque-o em algum lugar na sala realmente grande (a 2ª, com cerca de 5 saídas). Certifique-se de editar a posição Y!Agora, eu não deveria precisar te ajudar aqui, apenas coloque os pontos de aparecimento na primeira sala, escreva os eventos para progredir nas ondas e destrancar a porta que leva para a sala grande. Note que as duas salas que você deve usar são 2 e 11, nessa ordem.Os dois destrancamentos de porta são 4 (para a sala grande) e 31 (para o teletransportador do chefe). O teletransportador do chefe já está configurado para ir para o andar correto, então não precisa se preocupar com isso.Se você precisar

[*]Lazy, you should be able to figure it out but I'll fill this up later. Poke me if you get confused for now[*]

Re: Criando Missões usando o Q.edit PSO

Enviado: 04 Jun 2025, Qua, 08:02
por Sonic DX
O DRAGÃO!1!!!umAgora é hora de configurar o script de acordo para que, uma vez que matemos o Dragão, possamos completar a missão conversando com Gilliam.No entanto, antes de fazermos isso, certifique-se de escrever um evento para este mapa. A sala é 1, e o Dragão é a onda 1, e uma vez morto, ele deve desmascarar 1 1. Tenho certeza de que você consegue fazer isso, mas se não tiver certeza (já existe uma Colisão de Evento que faz o Evento 1 rodar):

Código: Selecionar todos

#1
Section: 1
Wave: 1
Delay: 0 // I think there's actually a delay here normally, but I'm too lazy to find out what it is. That's why you can move before bosses.

Unhide 1 1
Agora que fizemos isso, o mapa está pronto para a limpeza e só precisamos escrever o script. Escreva o seguinte em algum lugar:

Código: Selecionar todos

300:  thread_stg 301 // Runs a separate script starting at F301 while players are on this floor
  ret
301:  sync // Waits 1 frame
  jmpi_= R254, 00000001, 1 // If R254 is equal to 1, jump to F1 (thus ending the script)
  leti R1, 0000000B // Let R1 equal 0000000B (for Floor 11 (Dragon))
  leti R2, 00000001 // Let R2 equal 00000001 (for Room 1)
  if_zone_clear R254, R1 // If Floor 11, Room 1 is cleared of enemies, set R254 equal to 1
  jmpi_= R254, 00000000, 301 // If R254 is equal to 0, jump to F301 (starting this function again)
  sync_register R254, 00000001 // Make R254 equal 1 on all clients (just incase there are people outside the boss arena)
  jmp 301 // Jump back to F301
Uma thread é uma instância separada do script rodando ao lado da principal, em vez de pular ou chamar outra função a partir da função atual. Esta thread específica terminará se os jogadores saírem do andar.O que esta thread faz é verificar se a sala do Dragão está limpa de inimigos ou não (então, o Dragão), e se não estiver, continuar verificando. Uma vez que os inimigos tenham sido eliminados, R254 será definido e a thread terminará. Isso não limpa especificamente a missão, mas pode ser utilizado para fazer com que Gilliam salte para outra Função e defina R255 (o que limpará a missão).Claro, se você quisesse, poderia fazer o primeiro jmpi_= R254 ir para outra Função para tocar algo como uma cena cortada, mas para a simplicidade, nada acontecerá após a derrota do Dragão.

De volta ao Pioneer 2... Agora que fizemos tudo nos mapas, é hora de voltar para Gilliam e escrever todo o seu diálogo. Quando o criamos anteriormente, atribuímos a ele o ID de Função 400, significando que, ao interagir com ele, o script será executado a partir do F400. No script, escreva isso em algum lugar:

Código: Selecionar todos

400:  jmpi_= R255, 00000001, 402 // If R255 is equal to 1, jump to F402
  jmpi_= R254, 00000001, 401 // If R254 is equal to 1, jump to F401
  message 00000064, 'Quest in progress talk.'
  mesend
  ret
401: message 00000064, 'After Dragon is defeated talk.'
  mesend
  sync_register R255, 00000001 // Make R255 equal 1 on all clients (this causes the quest to clear)
  playbgm_epi 00000001 // Plays the quest clear music
  ret
402: message 00000064, 'Quest clear talk'
  ret
Agora, quando Giliam é interagido, ele dirá certas coisas dependendo de quão longe você está na missão.Durante a missão, como R254 ou R255 não estarão definidos, ele dirá o que você quiser enquanto a missão estiver em andamento (e não concluída).Após o dragão ser derrotado, R254 será definido, então a Função pulou para 401, dará a ele um diálogo diferente e, em seguida, definirá R255 para finalizar a missão (e também tocar a música de finalização da missão).Depois que a missão for concluída, R255 será definido, então ele dirá outra coisa.A única coisa que resta fazer agora é escrever o que a dama da guilda fará quando for interagida. Se nada for definido, ela simplesmente enviará o jogador de volta ao lobby, mas queremos recompensar as pessoas com meseta.Em algum lugar, escreva o seguinte:

Código: Selecionar todos

350:  jmpi_= R251, 00000000, 351 // If R251 is equal to 0 (Normal), jump to F351
  jmpi_= R251, 00000001, 352 // If R251 is equal to 1 (Hard), jump to F352
  jmpi_= R251, 00000002, 353 // If R251 is equal to 2 (Very Hard), jump to F353
  jmpi_= R251, 00000003, 354 // If R251 is equal to 3 (Ultimate), jump to F354
351: window_msg 'You have received X meseta.' // Pops up a window message
  bgm 00000001 // Plays the quest clear jingle
  winend // Closes the window message
  pl_add_meseta2 00000001 // Gives the player 1 meseta
  ret
352: window_msg 'You have received X meseta.'
  bgm 00000001
  winend
  pl_add_meseta2 00000001
  ret
353: window_msg
  bgm 00000001
  winend
  pl_add_meseta2 00000001
  ret
354: window_msg 'You have received X meseta.'
  bgm 00000001
  winend
  pl_add_meseta2 00000001
  ret
Quando a dama da guilda é abordada com R255 definido, o script executará F350, conforme definido em F0. Dependendo de R251 (onde a dificuldade é armazenada, 0-3 sendo N-Ult), então saltaremos para outra função, onde receberemos nossa meseta e seremos levados ao lobby.E com isso, essa é uma missão completa. É apenas uma simples, mas espero que tenha ensinado o básico e ajudado a entender como as missões funcionam e como você pode criar a sua própria. Eu entendo que este guia é muito ruim, mas se ajudar uma pessoa, eu fiz meu trabalho.Antes de salvar sua missão, no entanto, certifique-se de dar um Título e uma Descrição. Isso pode ser feito no menu de propriedades.

esse tutorial foi traduzido em
https://www.pioneer2.net/community/thre ... edit.1769/

Re: Criando Missões usando o Q.edit PSO

Enviado: 04 Jun 2025, Qua, 12:29
por Spam
Sonic DX escreveu: 04 Jun 2025, Qua, 07:35 aqui está um tutorial de como criar missões usando o aplicativo Q.edit
Poxa... Obrigado.

Confesso que nem li ainda, mas tenho interesse.

Valeu. o/

Re: Criando Missões usando o Q.edit PSO

Enviado: 20 Jun 2025, Sex, 18:18
por Sonic DX
oi amigo se conseguir salvar a quest me fala porque eu salvei direitinho e não aparece na lista de jeito nenhum

Re: Criando Missões usando o Q.edit PSO

Enviado: 15 Set 2025, Seg, 17:45
por ASMR
to use the missions created using newserv is a little different will have to rename the mission following the pattern described in the json file and in addition should use the numbering of the mission and create two files one that reads the mission (phases ) and another structure as comments bin and dat etc summarizing complicated and boring to apply

Re: Criando Missões usando o Q.edit PSO

Enviado: 16 Set 2025, Ter, 12:29
por Spam
Sonic DX escreveu: 20 Jun 2025, Sex, 18:18 oi amigo se conseguir salvar a quest me fala porque eu salvei direitinho e não aparece na lista de jeito nenhum
Não fiz nenhuma missão, tô sem tempo pra aprender.

Só traduzi uma missão original da Sega para português para testar, salvei como bin/dat e apareceu na lista de missões.

Mas quando inicia a missão, não tem nada. O personagem aparece sozinho na Pioneer 2, sem nenhum NPC, sem nenhum transportador, nada.

Eu traduzi a missão através da ferramenta de exportar/importar script.

Salvei as missão traduzida em todos os formatos disponíveis no Qedit, mas só um é reconhecido pelo newserv, não lembro agora qual era o método de salvamento.

No entanto, ao iniciar a missão, ela está vazia.

Estou sem tempo pra estudar como funciona o Qedit para o newserv, então minha experiência foi essa, só de mexer no Qedit pra ver como é e não funcionou.

Re: Criando Missões usando o Q.edit PSO

Enviado: 17 Set 2025, Qua, 06:40
por legit nyck
Eu até tentei ativar umas missões que tenho do meu antigo servidor mas não consegui fazer com que elas aparecessem na verdade nem a pasta chamada Resistência apareceu

Re: Criando Missões usando o Q.edit PSO

Enviado: 17 Set 2025, Qua, 07:38
por Sonic DX
legit nyck escreveu: 17 Set 2025, Qua, 06:40 Eu até tentei ativar umas missões que tenho do meu antigo servidor mas não consegui fazer com que elas aparecessem na verdade nem a pasta chamada Resistência apareceu
bom dia man assim eu entrei no servidor da resistencia aqui agora e vi o seguinte
Imagem

Retrieval

Extermination

Events

Virtual Reality

imagino que no seu server de pso tem varias pastas ai né uma do pso outra do pso ver.2 outra do ep1&2 outra do ep3 e uma do psobb certo? e dentro dessa pasta do psobb tem essas quatro subpastas ----> Retrieval----> Extermination----> Events----> Virtual Reality certo? e dentro delas as quests do psobb não é assim? vamos por partes primeiro cria uma subpasta chamada Resistencia aí junto dessas mas sem o ^ no e pra gente testar