como faço para o outro jogador ver que mudei de sprite (39dll).

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Qui 24 Mar 2011, 20:03

Eu procurei vários tutorias,porem os que eu encontrei ou é só pro cara entrar / chat,ou é pra criar sala,e no meu caso eu quero um sistema de loguim,eu achei uns ai tbm no forum,porem são offline,não é online,ai consegui achar essa engine.

mediafire: mediafire.com bafgd09fgdc77ly
4share:http://www.4shared.com/file/qOpk_mki/MMO_Example_v31.html

eu entendi algumas coisas,mas ainda sim não consegui enviar a mensagem falando que eu mudei de sprite,ou que o outro jogador mudou,já tentei:

sprite_index = sprite10
writebyte (sprite_index = sprite10 );// ja colokei só writebyte (sprite_index) tbm nao deu em nada
send_game_server();
//
sprite_index = sprite10
writebyte (sprite_index = sprite10 ); // ja colokei só writebyte (sprite_index) tbm nao deu em nada
sendmessage(global._game_socket);
//
já tentei não usar o fator online,por exemplo,fui no objeto que representa o outro jogador e colokei “if hspeed >= 1 {sprite_index}” na tentativa de que se ele se mexesse la no outro lado,ao objeto andar aki no meu cliente,mudasse de sprite,mas tbm não deu em nada

creio eu que na engine acontece o seguinte,quando um jogador entra na room,um objeto é criado e é atribuído a ele um id,conforme o id do personagem que entro,a partir dai sempre que no meu cliente eu me movo,é enviado a minha posição para o objeto com o meu id para outros clientes fazendo assim o objeto que me representa em outro cliente se mexer conforme minha posição X.Y,mas não sei como fazer isso...
resumindo,eu sei na teoria,mas em códigos,não consigo mandar a minha sprite atual para os outros jogadores =/
alguém consegue me ajudar ???
VLWs!!!

lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por MatheusReis em Qui 24 Mar 2011, 21:54

Você está usando a rotina de clearbuffer() "limpar o buffer") antes de enviar uma nova informação?

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Qui 24 Mar 2011, 22:16

to usando,ta asim o

scr_movement_update(1);
clearbuffer()
sprite_index = sprite10
writebyte (sprite_index = sprite10 );
sendmessage(global._game_socket);

lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por MatheusReis em Qui 24 Mar 2011, 22:33

E qual a rotina de leitura de mensagens q vc está usando? [mostre o código]

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Qui 24 Mar 2011, 22:47

tem um scripti chamado :
scr_brod_platform_engine
Spoiler:
Código:
// CONTROLS
/////////////

if(argument0-argument2==1) {
    spr_dir = 1;
    hsp    = min(max_spd,hsp+acc_spd);
}
if(argument1==1) {
    if(free==0 && hold==0) {
        vsp  = jmp_spd;
        jump = 1;
    }

    hold = 1;
} else {hold = 0;}

if(argument2-argument0==1) {
    spr_dir =-1;
    hsp    = max(-max_spd,hsp-acc_spd);
}


// HORIZONTAL MOVEMENT
////////////////////////

repeat(round(abs(hsp))) {
    var blk, mov;
    blk = place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90)),y+lengthdir_y(1,grv_dir+(sign(hsp)*90)),par_solid);
    mov = 0;
    if(blk==1) {
        for(a=1;a<=max_slp;a+=1) {
            if(place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))-lengthdir_x(a,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))-lengthdir_y(a,grv_dir),par_solid)==0) {
                x  += lengthdir_x(1,grv_dir+(sign(hsp)*90))-lengthdir_x(a,grv_dir);
                y  += lengthdir_y(1,grv_dir+(sign(hsp)*90))-lengthdir_y(a,grv_dir);
                mov = 1;
                break;
            }
        }
        if(mov==0) {
            hsp = 0;
            break;
        }
    } else {
        var jt;
        jt = instance_place(x+lengthdir_x(1,grv_dir+(sign(hsp)*90)),y+lengthdir_y(1,grv_dir+(sign(hsp)*90)),par_jump_through);
        if(jt!=noone) {
            if(place_meeting(x,y,jt)==0) {
                for(a=1;a<=max_slp;a+=1) {
                    if(place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))-lengthdir_x(a,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))-lengthdir_y(a,grv_dir),par_jump_through)==0) {
                        x  += lengthdir_x(1,grv_dir+(sign(hsp)*90))-lengthdir_x(a,grv_dir);
                        y  += lengthdir_y(1,grv_dir+(sign(hsp)*90))-lengthdir_y(a,grv_dir);
                        mov = 1;
                        break;
                    }
                }
            }
        }
        if(mov==0) {
            for(a=max_slp;a>=1;a-=1) {
                if(place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))+lengthdir_x(a,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))+lengthdir_y(a,grv_dir),par_solid)==0 && (place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))+lengthdir_x(a,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))+lengthdir_y(a,grv_dir),par_jump_through)==0 && sign(vsp)>-1)) {
                    if(place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))+lengthdir_x(a+1,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))+lengthdir_y(a+1,grv_dir),par_solid)==1 || place_meeting(x+lengthdir_x(1,grv_dir+(sign(hsp)*90))+lengthdir_x(a+1,grv_dir),y+lengthdir_y(1,grv_dir+(sign(hsp)*90))+lengthdir_y(a+1,grv_dir),par_jump_through)==1) {
                        x  += lengthdir_x(1,grv_dir+(sign(hsp)*90))+lengthdir_x(a,grv_dir);
                        y  += lengthdir_y(1,grv_dir+(sign(hsp)*90))+lengthdir_y(a,grv_dir);
                        mov = 1;
                        break;
                    }
                }
            }
        }
        if(mov==0) {
            x+= lengthdir_x(1,grv_dir+(sign(hsp)*90));
            y+= lengthdir_y(1,grv_dir+(sign(hsp)*90));
        }
    }
}


// VERTICAL MOVEMENT
//////////////////////

repeat(round(abs(vsp))) {
    if(place_meeting(x+lengthdir_x(1,grv_dir-90+(sign(vsp)*90)),y+lengthdir_y(1,grv_dir-90+(sign(vsp)*90)),par_solid)==1) {
        vsp    = 0;
        landed = 1;
        break;
    }
    var jt;
    jt = instance_place(x+lengthdir_x(1,grv_dir),y+lengthdir_y(1,grv_dir),par_jump_through);
    jt = collision_line(bbox_left,bbox_bottom+1,bbox_right,bbox_bottom+1,par_jump_through,1,1);
    if(jt!=noone && sign(vsp)>-1) {
        if(place_meeting(x,y,jt)==0) {
            vsp    = 0;
            landed = 1;
            break;
        }
    }
    x+= lengthdir_x(1,grv_dir-90+(sign(vsp)*90));
    y+= lengthdir_y(1,grv_dir-90+(sign(vsp)*90));
}

free = 1;
if(place_meeting(x+lengthdir_x(1,grv_dir),y+lengthdir_y(1,grv_dir),par_solid)==1) {
    free = 0;
}
var jt;
jt = instance_place(x+lengthdir_x(1,grv_dir),y+lengthdir_y(1,grv_dir),par_jump_through);
jt = collision_line(bbox_left,bbox_bottom+1,bbox_right,bbox_bottom+1,par_jump_through,1,1);
if(jt!=noone && sign(vsp)>-1) {
    if(place_meeting(x,y,jt)==0)free=0;
}


// GRAVITY & FRICTION
///////////////////////

if(free==1) {
    vsp+= grv_spd;
    if(argument0-argument2==0){hsp=max(0,abs(hsp)-air_frc)*sign(hsp);}
} else {
    jump = 0;
    if(argument0-argument2==0){hsp=max(0,abs(hsp)-gnd_frc)*sign(hsp);}
}

ai no obj que simbolisa o outro jogador
obj_obj_dummy_player
step: scr_brod_platform_engine(right, jump, left);
tem o draw tbm,mas acho ke nao tem emportancia
Spoiler:
Código:
 draw_sprite_ext(sprite_index, image_index, x, y, 1, 1, 0, c_white, 1);
draw_set_halign(fa_center);
draw_set_valign(fa_center);
draw_set_color(c_black);
// Make the rectangle alpha
draw_set_alpha(0.6);
// Draw the rectangle under the name
draw_set_font(font_player_name);
draw_rectangle(x - string_width(name) / 2 - 2, y + 45 - string_height(name) - 7, x + string_width(name) / 2 + 2, y + 45 - 8, 0);
draw_set_color(c_white);
// Set alpha back to 1
draw_set_alpha(1);
// Draw name
draw_set_font(font_player_name);
draw_text(x, y + 30, name);

lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por MatheusReis em Qui 24 Mar 2011, 23:10

Nenhum dos 2 códigos apresenta algo relacionado à leitura de mensagens recebidas[algo crucial para o funcionamento de um jogo online, pois sem isso não há comunicação ._.]
Tente encontrar algo como "obj_onlinecontrol" ou coisa do tipo.
ALGUM deve realizar essa função.
[Minha net tá com um problema aqui e eu não to conseguindo baixar nada, assim que eu puder baixar a engine eu tento ajudar melhor, do contrario, só poderei ajudar desse modo: às cegas]

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Qui 24 Mar 2011, 23:46

obj_online_controller
step:
Spoiler:
Código:
 
while(1)
{
    size = receivemessage(global._game_socket);
    if (size <= 0)
    {
        break;
    }
    if (size == 0)
    {
        scr_message("Lost connection with game server. Please press ESC to quit.");
    }
   
    switch(readbyte())
    {
        case ENTER:
        {
            case_enter();
            break;
        }
       
        case GET_POSITION:
        {
            case_get_position();
            break;
        }
       
        case LEAVE:
        {
            case_leave();
            break;
        }
       
        case MOVEMENT:
        {
            case_movement();
            break;
        }
       
        case CHAT:
        {
            case_chat();
            break;
        }
    }
}
scr_message

Spoiler:
Código:
// scr_message(the message here);
if (!instance_exists(obj_fullscreen_message))
{
    i = instance_create(0, 0, obj_fullscreen_message);
    i.message = argument0;
}

case_enter

Spoiler:
Código:
switch(readbyte())
{
    case 1:
    {
        // Add new come player to database
        var name, i;
        i = instance_create(readshort(), readshort(), obj_dummy_player);
        ds_map_add(global._player_map, readshort(), i);
        i.name = readstring();
        break;
    }
   
    case 2:
    {
        // Add all other players to your database
        var name, i;
        i = instance_create(readshort(), readshort(), obj_dummy_player);
        ds_map_add(global._player_map, readshort(), i);
        i.name = readstring();
        break;
    }
}

case_get_position

Spoiler:
Código:
var _other;

_other = readshort();

clearbuffer();
writebyte(GET_POSITION);
writebyte(1);
writeshort(obj_local_player.x);
writeshort(obj_local_player.y);
writeshort(_other);
send_game_server();
// Check server case_enter script
// This is to tell everyone your position
---
case_leave();

Spoiler:
Código:
with(get_player())
{
    instance_destroy();
}

case_movement();

switch(readbyte())
{
    case 1:
    {
        // Go left
        with(get_player())
        {
            x = readshort();
            y = readshort();
            left = 1;
            break;
        }
    }
   
    case 2:
    {
        // Jump
        with(get_player())
        {
            x = readshort();
            y = readshort();
            jump = 1;
            break;
        }
    }
   
    case 3:
    {
        // Go right
        with(get_player())
        {
            x = readshort();
            y = readshort();
            right = 1;
            break;
        }
    }
   
    case 4:
    {
        // Release left
        with(get_player())
        {
            left = 0;
            break;
        }
    }
   
    case 5:
    {
        // Release jump
        with(get_player())
        {
            jump = 0;
            break;
        }
    }
   
    case 6:
    {
        // Release right
        with(get_player())
        {
            right = 0;
            break;
        }
    }
}

case_chat();

with (obj_speech_bubble)
{
instance_destroy();
}
var _p;
_p = get_player();
with (_p)
{
i = instance_create(x, y - 48, obj_speech_bubble);
i._message = readstring();
i._target = _p;
}



lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por MatheusReis em Qui 24 Mar 2011, 23:54

Então você fez o script de envio de sprite à parte.
Desse modo você está apenas...enviando mensagens e elas se perdem.
Você tem que criar uma rotina de leitura para ler a mensagem contendo a sprite OU inclua o envio de sprite no trecho onde são enviadas as coordenadas (case_get_position)
Código:

var _other;

_other = readshort();

clearbuffer();
writebyte(GET_POSITION);
writebyte(1);
writeshort(obj_local_player.x);
writeshort(obj_local_player.y);
writeshort(obj_local_player.sprite_index);
writeshort(_other);
send_game_server();
// Check server case_enter script
// This is to tell everyone your position
E em case_leave
Código:

with(get_player())
{
    instance_destroy();
}

case_movement();

switch(readbyte())
{
    case 1:
    {
        // Go left
        with(get_player())
        {
            x = readshort();
            y = readshort();
            sprite_index = readshort();
            left = 1;       
            break;
        }
    }
   
    case 2:
    {
        // Jump
        with(get_player())
        {
            x = readshort();
            y = readshort();
            sprite_index = readshort();
            jump = 1;
            break;
        }
    }
   
    case 3:
    {
        // Go right
        with(get_player())
        {
            x = readshort();
            y = readshort();
            sprite_index = readshort();
            right = 1;
            break;
        }
    }
   
    case 4:
    {
        // Release left
        with(get_player())
        {
            left = 0;
            break;
        }
    }
   
    case 5:
    {
        // Release jump
        with(get_player())
        {
            jump = 0;
            break;
        }
    }
   
    case 6:
    {
        // Release right
        with(get_player())
        {
            right = 0;
            break;
        }
    }
}

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Sex 25 Mar 2011, 16:19

Só deu pra responder agora pq acabei de chegar da escola =/...

deu esse erro aqui olha
Código:
ERROR in
action number 1
of Draw Event
for object obj_dummy_player:

Trying to draw non-existing sprite.

no draw do obj_dummy_player
Spoiler:
Código:
draw_sprite_ext(sprite_index, image_index, x, y, 1, 1, 0, c_white, 1);
draw_set_halign(fa_center);
draw_set_valign(fa_center);
draw_set_color(c_black);
// Make the rectangle alpha
draw_set_alpha(0.6);
// Draw the rectangle under the name
draw_set_font(font_player_name);
draw_rectangle(x - string_width(name) / 2 - 2, y + 45 - string_height(name) - 7, x + string_width(name) / 2 + 2, y + 45 - 8, 0);
draw_set_color(c_white);
// Set alpha back to 1
draw_set_alpha(1);
// Draw name
draw_set_font(font_player_name);
draw_text(x, y + 30, name);
:cry: :cry: :cry:


lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por MatheusReis em Sab 26 Mar 2011, 10:50

Basta interpretar o erro: ele diz que está tentando desenhar uma sprite inexistente.
Para concertar isso, ponha como sprite inicial do objeto dummy player qualquer uma.
Sim! QUALQUER uma. provavelmente esse objeto inicia com sprite: "undefined".
E quando você tenta desenhar isso, ele não consegue por que não há.
Apenas ponha uma sprite qualquer, pois assim o erro some.

MatheusReis

Ranking : Nota A
Número de Mensagens : 1087
Idade : 23
Data de inscrição : 13/01/2010
Notas recebidas : B-A-A
Reputação : 30
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 0

http://www.mathaeuz.deviantart.com

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por lordjeck em Sab 26 Mar 2011, 18:59

O erro sumiu,mas agora o segundo jogador a logar fica sem sprite pro primeiro jogador,por exemplo,se “usuario1” loga e fica esperando na room,quando o “usuari2” loga,o cliente do usuario1 não vê o sprite do usuario2,só o nome ,e o cliente do usuário 2 não ve nem o nome,nem o sprite do usuario1 na room,mas ambos os clientes vêem o seu próprio sprite.

lordjeck

Número de Mensagens : 54
Idade : 22
Data de inscrição : 03/06/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por ekuhnen em Ter 04 Dez 2012, 17:25

No meu caso a dica funcionou perfeitamente.

VALEU!!!!!!!!!!!

ekuhnen

Número de Mensagens : 47
Idade : 33
Data de inscrição : 05/10/2012
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: como faço para o outro jogador ver que mudei de sprite (39dll).

Mensagem por Conteúdo patrocinado Hoje à(s) 00:29


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum