diff options
Diffstat (limited to 'src/modules/modTeleport.c')
| -rwxr-xr-x | src/modules/modTeleport.c | 94 |
1 files changed, 83 insertions, 11 deletions
diff --git a/src/modules/modTeleport.c b/src/modules/modTeleport.c index d54bb4c..9d8eb70 100755 --- a/src/modules/modTeleport.c +++ b/src/modules/modTeleport.c @@ -236,13 +236,19 @@ static void teleportTux(tux_t *tux, teleport_t *teleport) #endif if( export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_SERVER ) { + char msg[STR_PROTO_SIZE]; + + sprintf(msg, "teleporttux %d %d %d", tux->id, dist_x, dist_y); + if( tux->bonus == BONUS_HIDDEN ) { - export_fce->fce_proto_send_newtux_server(PROTO_SEND_ONE, (client_t *)tux->client, tux); + export_fce->fce_proto_send_module_server(PROTO_SEND_ONE, (client_t *)tux->client, msg); + //export_fce->fce_proto_send_newtux_server(PROTO_SEND_ONE, (client_t *)tux->client, tux); } else { - export_fce->fce_proto_send_newtux_server(PROTO_SEND_ALL, NULL, tux); + export_fce->fce_proto_send_module_server(PROTO_SEND_ALL, NULL, msg); + //export_fce->fce_proto_send_newtux_server(PROTO_SEND_ALL, NULL, msg); } } } @@ -301,7 +307,7 @@ static void moveShot(shot_t *shot, int position, int src_x, int src_y, int dist_x, int dist_y, int dist_w, int dist_h) { int offset = 0; - int new_x = 0, new_y = 0; // no warnning + int new_x = 0, new_y = 0; // no warninng switch( shot->position ) { @@ -322,33 +328,35 @@ static void moveShot(shot_t *shot, int position, int src_x, int src_y, { case TUX_UP : new_x = dist_x + offset; - new_y = dist_y; + new_y = dist_y - ( shot->h + 5 ); break; case TUX_LEFT : - new_x = dist_x; + new_x = dist_x - ( shot->w + 5 ); new_y = dist_y + offset; break; case TUX_RIGHT : - new_x = dist_x + dist_w; + new_x = dist_x + dist_w + 5; new_y = dist_y + offset; break; case TUX_DOWN : new_x = dist_x + offset; - new_y = dist_y + dist_h; + new_y = dist_y + dist_h + 5; break; } - new_y += shot->px; - new_y += shot->py; - moveObjectInSpace(export_fce->fce_getCurrentArena()->spaceShot, shot, new_x, new_y); if( export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_SERVER ) { - export_fce->fce_proto_send_shot_server(PROTO_SEND_ALL, NULL, shot); + char msg[STR_PROTO_SIZE]; + + sprintf(msg, "teleportshot %d %d %d %d %d %d", + shot->id, shot->x, shot->y, shot->px, shot->py, shot->position); + + export_fce->fce_proto_send_module_server(PROTO_SEND_ALL, NULL, msg); } } @@ -480,6 +488,70 @@ void cmdArena(char *line) if( strncmp(line, "teleport", 8) == 0 )cmd_teleport(line); } +static void proto_teleporttux(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int id, x, y; + space_t *space; + tux_t *tux; + + assert( msg != NULL ); + + sscanf(msg, "%s %d %d %d", + cmd, &id, &x, &y); + + space = export_fce->fce_getCurrentArena()->spaceTux; + tux = getObjectFromSpaceWithID(space, id); + + if( tux != NULL ) + { + moveObjectInSpace(space, tux, x, y); + } +} + +static void proto_teleportshot(char *msg) +{ + char cmd[STR_PROTO_SIZE]; + int shot_id, x, y, px, py, position; + space_t *space; + shot_t *shot; + + assert( msg != NULL ); + + sscanf(msg, "%s %d %d %d %d %d %d", + cmd, &shot_id, &x, &y, &px, &py, &position); + + + space = export_fce->fce_getCurrentArena()->spaceShot; + + if( ( shot = getObjectFromSpaceWithID(space, shot_id) ) == NULL ) + { + return; + } + + moveObjectInSpace(space, shot, x, y); + shot->isCanKillAuthor = 1; + shot->position = position; + shot->px = px; + shot->py = py; + + if( shot->gun == GUN_LASSER ) + { + transformOnlyLasser(shot); + } +} + +void recvMsg(char *msg) +{ + if( export_fce->fce_getNetTypeGame() == NET_GAME_TYPE_SERVER ) + { + return; + } + + if( strncmp(msg, "teleporttux", 11) == 0 )proto_teleporttux(msg); + if( strncmp(msg, "teleportshot", 12) == 0 )proto_teleportshot(msg); +} + int destroy() { destroySpaceWithObject(spaceTeleport, destroyTeleport); |