Página 1 de 1

Duvida sobre Game Maker

Enviado: Qui Fev 01, 2018 11:51 am
por GhostPower
Bom dia,

Sou novo aqui no fórum e no game maker mas já tenho algumas duvidas sobre o game maker.

1- Estou tentando fazer um jogo de rpg em tempo real sei fazer ele mostrar o numero do dano em um inimigo, mas quando e mais de um eu não sei. pq ele mostra o mesmo dano nos dois inimigos.

Como to fazendo:
Crio um novo objeto que pega todos os inimigos na room e se o inimigo esta com a Target true ele recebe o dano.

Obs: O hp de cada inimigo esta funcionado certinho. 

Olha o script:
if Target = "Target"{
instance_create(self.x,self.y,obj_damage);

e no objeto dano:

damage = global.playerAttack - global.playerTarget.enenyDefend;

crio um objeto temporário para saber qual e o inimigo, mas quando e mais de um inimigo ai ele mostra o mesmo dano.Sei que a logica esta errada. 

2- A segunda duvida como faço para equipar um item ou arma no player usando um objeto slot?(quando pego o item e coloco no slot do item(que e um objeto) ele equipa e quando tiro ele desequipa).

Obs: estou usando o sistema de drag and drop nos itens e nao to usando ds.

E ai alguém sabe me ajuda com essa duvida.

Desde já agradeço.

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 03, 2018 1:45 am
por theguitarmester
Bem vindo @Ghots

Não entendi muito bem, isso fica no objeto dano?
damage = global.playerAttack - global.playerTarget.enenyDefend;

Tinha escrito mais coisas, mas achei que tava complicado, vou deixar resumido.

utilizando o evento colisão do dano, tu pode fazer a redução de dano utilizando o other:
damage = global.playerAttack - other.enenyDefend;

Mas fiquei em dúvida do que realmente queria fazer, usei como base que tu queria que ao player tocar o poder, esse dano irá ver quem está sofrendo o dano, e calculará o dano adequado para aquele inimigo.



2 - cria variavel para cada slot, ou, um vetor:
slot1=0; slot2=0 ;slot3=0;..
ou, que é melhor:
slot[];

daí pode colocar coisas como:
if slot[1] == "inSeto Kaiba" habilidadeDeRoubar = 100;
if slot[2] == "Coração das Cartas" habilidadeDeRoubar = 10000;
....melhor seria colocar um switch ao invés de if, no exemplo.

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 03, 2018 2:31 pm
por GhostPower
Blz cara,
theguitarmester

Olha quando target true o inimigo recebe o dano. 

Então tenho um exemplo na room tenho 3 mostro, certo, quando eu ataco um inimigo e criado um objeto dano para mostra o dano do inimigo,(no objeto dano esta assim:
 damage = global.playerAttack - global.playerTarget.enenyDefend;)

Se eu atacar em área,(que tenha mais de um inimigo) este numero q sobe em cima do inimigo e igual ao primeiro inimigo que foi atacado, entendeu? (este sistema de dano e igual do jogos tipo terraria, FINAL FANTASY ou qualquer rpg que mostra o dano no inimigo). A duvida e pq ele nao mostra o dano de cada inimigo sendo q cada um tem uma defesa diferente?

Cara, tentei usar o damage = global.playerAttack - other.enenyDefend, mas o game maker fala quenão reconhece avariável other.enenyDefend.

2 - Eu já fiz o sistema drag and drop no item, só quero fazer ele equipa,  assim quando coloco o item(objeto) no slot item(outro objeto) ele equipa.

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 03, 2018 5:08 pm
por theguitarmester
Agora entendi o que ser esse dano hehe, ele para mostrar na tela o dano que foi causado, apenas um draw.

É uma questão de lógica mesmo, crie o dano vinculado a cada inimigo.
Se a criação do dano parte do inimigo, grave a ID do inimigo no dano, para ele saber qual é a instância /inimigo que esse dano está se referenciando, algo como
Inimigo:
//Ao tomar o dano, ele cria o obj que mostra o dano:

Código: Selecionar todos

var objdano = instance_create(x,y-32, obj_dano);
objdano.idDoInimigoQueEuEstouMostrandoODano = instance_id; //Não lembro se de fato é instance_id a função pra pegar o id da instancia atual, this deve dar também.
Então em algum lugar do dano:
damage = global.playerAttack - idDoInimigoQueEuEstouMostrandoODano.enenyDefend;

Cuidado só ao colocar no create neste meu exemplo, porque o idDoInimigoQueEuEstouMostrandoODano inicia como zero, o create é(pelo menos até o GMS1, pelo que lembro) executado logo após a intância ser criada, logo, a linha abaixo no inimigo que seta o ID, acontece depois do create do objdano.

Mas eu acho que o melhor modo não era criar o dano dessa forma, porém essa funciona, enfim, é isso.

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 03, 2018 6:45 pm
por GhostPower
Blz theguitarmester

Então o problema e que quando e em área eu pego somente o id do inimigo selecionado,o q estou tentando fazer e ataca todos inimigo que tiver a target true.Pode ser dois,três ou quatro sei la todos q tiver a target true.(o sistema de target do inimigo funciona). Como faço se ele atacar dois(ou mais inimigo)?

Obrigado pela ajuda, isso de pega o id do inimigo ja tinha feito, aqui: global.playerTarget.????, esta em uma variável global.

Re: Duvida sobre Game Maker

Enviado: Ter Fev 06, 2018 9:07 pm
por theguitarmester
Dê uma olhada no comando "with" e em como ele funciona

"Então o problema e que quando e em área eu pego somente o id do inimigo selecionado"
Como tu tá fazendo essa captura?

tu pode criar algo assim:

Código: Selecionar todos

InimigosNaMira[0];
totalNaMira=0;
with inimigos {if target=true {other.inimigosNaMira[totalNaMira]=id; other.totalNaMira+=1;}}
Tu tá usando uma variável só, tu só vai "conseguir" guardar um inimigo.

Caso não entendeste, mostra os códigos que tu está usando para marcar os inimigos, e para fazer danos neles.

Re: Duvida sobre Game Maker

Enviado: Qua Fev 07, 2018 9:41 am
por GhostPower
Blz theguitarmester

Vou deixar o código para vc então, pq isso de guardar mais de um inimigo eu entendi, mas o q tenho q mudar no objeto dano não tenho ideia.

Abaixo o código que estou usando:

Colisão com inimigo:

Código: Selecionar todos

if enemyTarget = "Target"{

instance_create(self.x,self.y,obj_player_damage);
}
Objeto dano:

Código: Selecionar todos

Create:

damage = global.playerAttack - global.playerTarget.enenyDefend;
Obrigado por sua ajuda. 

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 10, 2018 2:20 am
por theguitarmester
GhostPower:O que poderia você fazer:

Colisão com inimigo:

Código: Selecionar todos

if enemyTarget = "Target"{

var dano = instance_create(self.x,self.y,obj_player_damage);
dano.enenyDefend = enenyDefend;
}
Objeto dano:

Código: Selecionar todos

Create:
enenyDefend = 0;
alarm[9] = 1;
damage=0;

Alarm 0:
damage = global.playerAttack - enenyDefend;

Essa é uma forma de fazer, tive que colocar o alarm(que foi só para não fazer a definição do damage no create) porque quando tu cria uma nova instância, o evento CREATE dela é chamado imediatamente, e então, o valor de enenyDefend estaria como 0.
De nada!

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 10, 2018 1:06 pm
por GhostPower
Bom dia theguitarmester,

Cara testei as modificações q tu disse, mas continua na mesma.
Não sei o pq, pensei q ia funciona agora.

Obs.: Não sei se falei, mas os inimigos são herança. Não tem um jeito de fazer isso usando o Draw de cada inimigo ?  


Vlw pela tentativa.

Re: Duvida sobre Game Maker

Enviado: Sáb Fev 10, 2018 10:39 pm
por SirPug
Pensei um pouco aqui e pensei o seguinte:
A função que mostra o dano ser no inimigo já que você cria a global de dano do jogador pode acessar ela dentro dos códigos do inimigo, basicamente da seguinte forma: Quando o inimigo estiver na área do ataque do jogador ele mostra o dano a partir do inimigo

Em relação ao equipamento pode criar um objeto de cada item do jogo com atributos padrão, por exemplo ATAQUE e DEFESA.
Quando o jogador arrastar o item até o slot você acessa o item que foi equipado pelo id e coloca ele dentro da lista de slots.
Depois quando for calcular a defesa do jogador soma a defesa de cada item que está equipado nos slots acessando o atributo de defesa de cada item pelo id.

Espero ter ajudado!

Re: Duvida sobre Game Maker

Enviado: Dom Fev 11, 2018 7:14 am
por SnowPi
Vou tentar ajudar com o primeiro problema, depois pensamos no segundo o/
Sinceramente, tentar montar seu código sem ter acesso a ele seria muito difícil, então me dei ao luxo de criar um do 0 e te passar pra você se basear nele, caso queira.
Aqui está o link pra baixar o projeto.

Exemplo do "sistema":
Imagem
Basicamente, quando o jogador(quadrado verde) ataca, caso tenha um inimigo na frente dele ele marca esse inimigo como um alvo(sei que não é exatamente o que você quer, mas foi um exemplo pra você adaptar).
Ao marcar esse inimigo como um alvo, o oManager vai criar o objeto de dano(quadrado azul) em cima dele.
Todos os monstros dentro do objeto de dano vão ser atingidos por ele.

Você pode mudar a ordem que as coisas acontecem pra ter resultados diferentes. Por exemplo criar o objeto de dano ao atacar e caso ele acerte alguém você marca esse alguém como alvo(e ai você tira vida ou alguma outra coisa).

Algo que eu queria deixar comentado aqui é esse trecho do oManager:

Código: Selecionar todos

// Checar se existe algum inimigo
if(instance_exists(oRed)) {
    // Cria array com todos inimigos
    i = 0; repeat(instance_number(oRed)) {
        Enemy[i] = instance_find(oRed, i);    
        i++
    }
    
    // Pega cada inimigo no mapa pra poder manipular
    i = 0; repeat(array_length_1d(Enemy)) {
        with(Enemy[i]) {
            // Checa se ele é alvo e está vivo
            if(Target && isAlive) {
                // Cria objeto de dano em cima dele
                instance_create(x, y, oDamage);
            }
        }
        i++
    }
}
[/left]
Essa é a parte importante pra você poder separar quem esta sendo alvo e quem não está.
Na verdade essa é a parte mais importante pra você lidar com os inimigos, hehe...

Enfim, espero que o código te ajude o/
See ya.

Re: Duvida sobre Game Maker

Enviado: Dom Fev 11, 2018 10:51 am
por GhostPower
Blz SnowPi

Vamos la cara:

Primeiramente obrigado pela sua ajuda a segunda duvida eu consegui fazer uma maneira de equipar e desequipar um item pelo objeto(ate agora esta funcionando).

Então o meu maior problema esta no objeto dano, pq não sei o que fazer para criar um objeto dano e ele calcular os danos em diferentes inimigos de uma  vez.
Se vc poder usar uma teoria ou um código no objeto dano e mostrar, eu agradeceria. 

Obs.: O HP do inimigo funciona (mesmo em área, ele calcular o dano de cada inimigo mesmo com a defesa ou atributo diferente), até sugeri em usar o events Draw para mostra o dano, pq ai eu eliminaria este objeto dano.

Deixo meu muito obrigado pela sua atenção e disposição.

Re: Duvida sobre Game Maker

Enviado: Dom Fev 11, 2018 6:13 pm
por SnowPi
O calculo do dano depende do teu sistema de batalha. Não tenho como simular um aqui porque a forma como você fez pode divergir muito da forma como eu faria...

Anyway, você pode, por exemplo, usar o código que eu deixei na minha última resposta DENTRO do objeto dano pra pegar todos os inimigos acertados(só precisaria mudar algumas coisas no código), depois disso você calcularia os danos e absorções...

Re: Duvida sobre Game Maker

Enviado: Ter Fev 13, 2018 10:18 am
por GhostPower
Blz SnowPi,

Então vc poderia mostra o seu jeito de fazer? Ou sua ideia?

Obrigado pela ajuda, cara infelizmente não tenho ideia de como fazer isso.

Re: Duvida sobre Game Maker

Enviado: Qua Fev 14, 2018 6:26 pm
por SnowPi
Eu tinha escrito uma resposta legal aqui mas o fórum me deslogou e eu perdi tudo e infelizmente não tenho mais tempo pra refazer ela, mas eu deixei esse código aqui, basicamente:

Código: Selecionar todos

// Checar se existe algum inimigo
if(instance_exists(oRed)) {
    // Cria array com todos inimigos
    i = 0; repeat(instance_number(oRed)) {
        Enemy[i] = instance_find(oRed, i);    
        i++
    }
    
    // Pega cada inimigo no mapa pra poder manipular
    i = 0; repeat(array_length_1d(Enemy)) {
        with(Enemy[i]) {
            if(place_meeting(x, y, oDano)) {
                // Tá colidindo com o dano
                Enemy[i].hp -= (oDano.dano - Enemy[i].defesa) 
            }
        }
        i++
    }
}
Exemplo de aplicação:
Caso o objeto dano fosse criado colidindo com 2 inimigos:
Goblin:
HP = 20
Defesa = 5

Ogro:
HP = 20
Defesa = 20

Se o dano for 25, o Goblin vai morrer(25 do ataque - 5 da defesa = 20 de dano) e o Ogro vai sobreviver(25 do ataque - 20 da defesa = 5 de dano).
Agora, pra não ter que colocar todo o calculo ali(talvez seu jogo tenha buffs e estados específicos, chance de acertar ou de dar crítico e etc...) eu criaria um script pra cuidar de tudo isso.

Re: Duvida sobre Game Maker

Enviado: Qui Fev 15, 2018 4:44 pm
por GhostPower
Vlw SnowPi

Vou tentar usar este código no meu jogo, mas digo se tiver mais algumas ideia sobre isso estou a disposição.

Obrigado pela ajuda.

Re: Duvida sobre Game Maker

Enviado: Qua Mar 21, 2018 10:04 am
por GhostPower
Bom dia SirPug,

Então cara obrigado pela sua ajuda, mais já consegui resolver as duas duvidas.

Se quiserem podem ate fechar/encerrar esta duvida com resolvida.

Agradeço a todos pela a ajuda.