diff options
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/arenaFile.c | 97 | ||||
| -rw-r--r-- | src/base/arenaFile.h | 32 | ||||
| -rw-r--r-- | src/base/proto.c | 10 |
3 files changed, 103 insertions, 36 deletions
diff --git a/src/base/arenaFile.c b/src/base/arenaFile.c index bd048b0..25e0582 100644 --- a/src/base/arenaFile.c +++ b/src/base/arenaFile.c @@ -14,6 +14,7 @@ #include "item.h" #include "director.h" #include "modules.h" +#include "archive.h" #ifndef PUBLIC_SERVER #include "configFile.h" @@ -60,6 +61,18 @@ int getArenaValue(char *line, char *env, char *val, int len) } +image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha) +{ + char *extractFile; + image_t *image; + + extractFile = extractFileFromArchive(arenaFile->path, filename); + image = addImageData(extractFile, alpha, name, group); + deleteExtractFile(extractFile); + + return image; +} + static void cmd_arena(arena_t **arena, char *line) { char str_image[STR_SIZE]; @@ -95,7 +108,7 @@ static void cmd_loadModule(char *line) #ifndef PUBLIC_SERVER -static void cmd_loadImage(char *line) +static void cmd_loadImage(arenaFile_t *arenaFile, char *line) { char str_file[STR_SIZE]; char str_name[STR_SIZE]; @@ -107,7 +120,11 @@ static void cmd_loadImage(char *line) return; if (getArenaValue(line, "alpha", str_alpha, STR_SIZE) != 0) return; - addImageData(str_file, isYesOrNO(str_alpha), str_name, IMAGE_GROUP_USER); + + printf("str_file=%s str_name=%s str_alpha=%s\n", str_file, str_name, str_alpha); + loadImageFromArena(arenaFile, str_file, IMAGE_GROUP_USER, str_name, isYesOrNO(str_alpha)); + + //addImageData(str_file, isYesOrNO(str_alpha), str_name, IMAGE_GROUP_USER); } static void cmd_loadMusic(char *line) @@ -139,13 +156,11 @@ int getArenaCount() return listArenaFile->count; } -static char *getArenaStatus(int id, char *s) +static char *getArenaStatus(textFile_t *ts, char *s) { - textFile_t *ts; int len; int i; - ts = (textFile_t *) listArenaFile->list[id]; len = strlen(s); for( i = 0; i < ts->text->count; i++ ) { char *line; @@ -156,44 +171,56 @@ static char *getArenaStatus(int id, char *s) return NULL; } -char *getArenaName(int id) +char *getArenaName(arenaFile_t *arenaFile) { char *ret; - ret = getArenaStatus(id, "name"); + ret = getArenaStatus(arenaFile->map, "name"); return ( ret != NULL ? ret : "arena_no_name" ); } -char *getArenaNetName(int id) +char *getArenaNetName(arenaFile_t *arenaFile) { char *ret; - ret = getArenaStatus(id, "netName"); + ret = getArenaStatus(arenaFile->map, "netName"); return ( ret != NULL ? ret : "arena_no_net_name" ); } -int getArenaIdFormNetName(char *s) +arenaFile_t* getArenaFileFormNetName(char *s) { int i; for (i = 0; i < listArenaFile->count; i++) - if (strcmp(getArenaNetName(i), s) == 0) - return i; - return -1; + { + arenaFile_t *arenaFile; + + arenaFile = (arenaFile_t *)listArenaFile->list[i]; + if (strcmp(getArenaNetName(arenaFile), s) == 0) + return arenaFile; + } + + return NULL; +} + +char *getArenaImage(arenaFile_t *arenaFile) +{ + return getArenaStatus(arenaFile->map, "screen"); } -char *getArenaImage(int id) +arenaFile_t* getArenaFile(int n) { - return getArenaStatus(id, "screen"); + return (arenaFile_t *)listArenaFile->list[n]; } -arena_t* getArena(int id) +arena_t* getArena(arenaFile_t *arenaFile) { textFile_t *ts; arena_t *arena = NULL; // no warninng int i; - ts = (textFile_t *) listArenaFile->list[id]; + ts = (textFile_t *) arenaFile->map; + for( i = 0 ; i < ts->text->count ; i++ ) { char *line; @@ -201,7 +228,7 @@ arena_t* getArena(int id) cmdModule(line); #ifndef PUBLIC_SERVER if (strncmp(line, "loadImage", 9) == 0) - cmd_loadImage(line); + cmd_loadImage(arenaFile, line); if (strncmp(line, "loadMusic", 9) == 0) cmd_loadMusic(line); if (strncmp(line, "playMusic", 9) == 0) @@ -215,9 +242,32 @@ arena_t* getArena(int id) //if( strncmp(line, "teleport", 8) == 0 )cmd_teleport(arena, line); //if( strncmp(line, "pipe", 4) == 0 )cmd_pipe(arena, line); } + return arena; } +arenaFile_t* newArenaFile(char *path) +{ + arenaFile_t *new; + char *extractFile; + + new = malloc( sizeof(arenaFile_t) ); + new->path = strdup(path); + + extractFile = extractFileFromArchive(path, "mapa.map"); + new->map = loadTextFile(extractFile); + deleteExtractFile(extractFile); + + return new; +} + +void destroyArenaFile(arenaFile_t *p) +{ + destroyTextFile(p->map); + free(p->path); + free(p); +} + void initArenaFile() { director_t *p; @@ -231,18 +281,19 @@ void initArenaFile() p = loadDirector(PATH_ARENA); for (i = 0; i < p->list->count; i++) { char *line; - + line = (char *)( p->list->list[i] ); - if (strstr(line, ".map") != NULL && + if (strstr(line, ".zip") != NULL && strstr(line, "~") == NULL) { char path[STR_PATH_SIZE]; sprintf(path, PATH_ARENA "%s", line); #ifdef DEBUG - printf(_("Loading map file: %s\n"), line); + printf(_("Loading arena: %s\n"), line); #endif accessExistFile(path); - addList(listArenaFile, loadTextFile(path)); + + addList(listArenaFile, newArenaFile(path)); } } //printf("No. of Arens: %d\n", listArenaFile->count); @@ -252,5 +303,5 @@ void initArenaFile() void quitArenaFile() { isArenaFileInit = FALSE; - destroyListItem(listArenaFile, destroyTextFile); + destroyListItem(listArenaFile, destroyArenaFile); } diff --git a/src/base/arenaFile.h b/src/base/arenaFile.h index 75efec8..b4ca92b 100644 --- a/src/base/arenaFile.h +++ b/src/base/arenaFile.h @@ -5,15 +5,27 @@ #include "main.h" #include "arena.h" + #include "textFile.h" - extern int getArenaValue(char *line, char *env, char *val, int len); - extern bool_t isArenaFileInicialized(); - extern void initArenaFile(); - extern int getArenaCount(); - extern char *getArenaName(int id); - extern char *getArenaNetName(int id); - extern int getArenaIdFormNetName(char *s); - extern char *getArenaImage(int id); - extern arena_t* getArena(int id); - extern void quitArenaFile(); + +typedef struct +{ + char *path; + textFile_t *map; +} arenaFile_t; + +extern bool_t isAreaFileInicialized(); +extern int getArenaValue(char *line, char *env, char *val, int len); +extern int getArenaCount(); +extern char *getArenaName(arenaFile_t *arenaFile); +extern char *getArenaNetName(arenaFile_t *arenaFile); +extern arenaFile_t* getArenaFileFormNetName(char *s); +extern char *getArenaImage(arenaFile_t *arenaFile); +extern image_t* loadImageFromArena(arenaFile_t *arenaFile, char *filename, char *group, char *name, int alpha); +extern arenaFile_t* getArenaFile(int n); +extern arena_t* getArena(arenaFile_t *arenaFile); +extern arenaFile_t* newArenaFile(char *path); +extern void initArenaFile(); +extern void quitArenaFile(); + #endif diff --git a/src/base/proto.c b/src/base/proto.c index ca10743..9c9163e 100644 --- a/src/base/proto.c +++ b/src/base/proto.c @@ -228,7 +228,8 @@ void proto_send_status_server(int type, client_t *client) clients = getCurrentArena()->spaceTux->listIndex->count; maxclients = getServerMaxClients(); uptime = (unsigned int)getUpdateServer(); - arena = getArenaNetName( getChoiceArenaId() ); + //arena = getArenaNetName( getChoiceArenaId() ); + //TODO snprintf(msg, STR_PROTO_SIZE, "name: %s\n" @@ -346,10 +347,12 @@ void proto_send_init_server(int type, client_t *client, client_t *client2) #endif check_id = getNewIDcount(0); - +/* snprintf(msg, STR_PROTO_SIZE, "init %d %d %d %d %s %d\n", client2->tux->id, client2->tux->x, client2->tux->y, count, getArenaNetName( getChoiceArenaId() ), check_id); +*/ + //TODO //proto_send(type, client, msg); protoSendClient(type, client, msg, CHECK_FRONT_TYPE_CHECK, check_id); @@ -385,7 +388,8 @@ void proto_recv_init_client(char *msg) return; } - setWorldArena( getArenaIdFormNetName(arena_name) ); + //setWorldArena( getArenaIdFormNetName(arena_name) ); + //TODO arena = getCurrentArena(); arena->max_countRound = n; |