From f1b13b2a2fef1e2b2fcb019140888c6b7c478aa3 Mon Sep 17 00:00:00 2001 From: mallocnull Date: Tue, 14 Nov 2017 16:59:51 -0600 Subject: [PATCH] HOLY SHIT SKILLS WOWOWOWOWOWOW --- debug | 2 +- release | 2 +- src/client/client.c | 2 +- src/client/client.h | 4 +- src/main.c | 2 +- src/server/context.c | 3 + src/server/context.h | 1 + src/server/server.c | 2 +- src/server/server.h | 8 +-- src/server/user.c | 19 ++++-- src/server/user.h | 30 +++++++-- src/{ => util/etc}/flimit.c | 0 src/{ => util/etc}/flimit.h | 0 src/util/file/bdat.c | 116 +++++++++++++++++++++++++++++++++++ src/util/file/bdat.h | 40 ++++++++++++ src/util/file/map.c | 1 + src/util/file/map.h | 6 ++ src/{ => util/net}/packet.c | 0 src/{ => util/net}/packet.h | 2 +- src/{ => util/net}/sock.c | 0 src/{ => util/net}/sock.h | 0 src/{ => util/types}/list.c | 0 src/{ => util/types}/list.h | 0 src/{ => util/types}/queue.c | 0 src/{ => util/types}/queue.h | 0 src/{ => util/types}/stack.c | 0 src/{ => util/types}/stack.h | 0 27 files changed, 217 insertions(+), 23 deletions(-) rename src/{ => util/etc}/flimit.c (100%) rename src/{ => util/etc}/flimit.h (100%) create mode 100644 src/util/file/bdat.c create mode 100644 src/util/file/bdat.h create mode 100644 src/util/file/map.c create mode 100644 src/util/file/map.h rename src/{ => util/net}/packet.c (100%) rename src/{ => util/net}/packet.h (98%) rename src/{ => util/net}/sock.c (100%) rename src/{ => util/net}/sock.h (100%) rename src/{ => util/types}/list.c (100%) rename src/{ => util/types}/list.h (100%) rename src/{ => util/types}/queue.c (100%) rename src/{ => util/types}/queue.h (100%) rename src/{ => util/types}/stack.c (100%) rename src/{ => util/types}/stack.h (100%) diff --git a/debug b/debug index 956bc2a..33732f3 100755 --- a/debug +++ b/debug @@ -1,2 +1,2 @@ -gcc src/*.c src/server/*.c src/client/*.c -g -iquotesrc/ -lpthread -lncursesw -lm -o bin/mahou +gcc src/*.c src/util/etc/*.c src/util/file/*.c src/util/net/*.c src/util/types/*.c src/server/*.c src/client/*.c -g -iquotesrc/ -iquotesrc/util/ -lpthread -lncursesw -lm -o bin/mahou chmod +x bin/mahou diff --git a/release b/release index 1929735..b1f5500 100755 --- a/release +++ b/release @@ -1,2 +1,2 @@ -gcc src/*.c src/server/*.c src/client/*.c -iquotesrc/ -lpthread -lncursesw -lm -o bin/mahou +gcc src/*.c src/util/etc/*.c src/util/file/*.c src/util/net/*.c src/util/types/*.c src/server/*.c src/client/*.c -iquotesrc/ -iquotesrc/util/ -lpthread -lncursesw -lm -o bin/mahou chmod +x bin/mahou diff --git a/src/client/client.c b/src/client/client.c index bcf57a5..9927979 100644 --- a/src/client/client.c +++ b/src/client/client.c @@ -38,7 +38,7 @@ static void client_loop(); void client() { int selected, err; BOOL running = TRUE; - ctx.sock = sock_client_init("127.0.0.1", "6770"); + ctx.sock = sock_client_init("127.0.0.1", MAHOU_PORT); printf("Connecting to server...\n"); err = sock_start(ctx.sock); diff --git a/src/client/client.h b/src/client/client.h index 60a64e1..446d5be 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -5,8 +5,8 @@ #include #include #include "common.h" -#include "sock.h" -#include "packet.h" +#include "net/sock.h" +#include "net/packet.h" #include "screen.h" #include "ui.h" diff --git a/src/main.c b/src/main.c index af4f3ee..ac04b59 100644 --- a/src/main.c +++ b/src/main.c @@ -1,7 +1,7 @@ #include "common.h" -#include "packet.h" #include "client/client.h" #include "server/server.h" +#include "net/packet.h" int main(int argc, char **argv) { uint8_t spawn_type = diff --git a/src/server/context.c b/src/server/context.c index dd3cad4..480e8a2 100644 --- a/src/server/context.c +++ b/src/server/context.c @@ -6,8 +6,11 @@ struct { } static ctx; void* server_context(void *params) { + flimit_t vsync; while(ctx.running == TRUE) { + frame_limit_tick(&vsync); + frame_limit_wait(&vsync, 60); } return NULL; diff --git a/src/server/context.h b/src/server/context.h index 67e503c..8e91b02 100644 --- a/src/server/context.h +++ b/src/server/context.h @@ -4,6 +4,7 @@ #include #include #include "common.h" +#include "etc/flimit.h" void server_context_start(void); void server_context_stop(void); diff --git a/src/server/server.c b/src/server/server.c index 3347ad9..1e86abe 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -7,7 +7,7 @@ void server() { user_context_init(); server_context_start(); - socket_t *sock = sock_server_init("6770"); + socket_t *sock = sock_server_init(MAHOU_PORT); sock_start(sock); sock_set_nonblocking(sock); diff --git a/src/server/server.h b/src/server/server.h index 6781172..e5eba4b 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -2,12 +2,12 @@ #define SERVER_H #include +#include "net/sock.h" +#include "net/packet.h" +#include "types/queue.h" +#include "etc/flimit.h" #include "context.h" #include "user.h" -#include "sock.h" -#include "packet.h" -#include "queue.h" -#include "flimit.h" void server(void); diff --git a/src/server/user.c b/src/server/user.c index f7dda5e..7228fa5 100644 --- a/src/server/user.c +++ b/src/server/user.c @@ -1,12 +1,21 @@ #include "user.h" +const char* _SKILL_NAMES[] = { + "Bare-Handed", + "Melee", + "Ranged", + "White Magic", + "Black Magic", + "Firemaking" +}; + struct { pthread_mutex_t mx_ctx; list_t *active_users; user_t **users; } static ctx; -BOOL user_check_flag_nomx(user_t *user, uint64_t flag); +static BOOL user_check_flag_nomx(user_t *user, uint64_t flag); void user_context_init() { pthread_mutex_init(&ctx.mx_ctx, NULL); @@ -37,10 +46,11 @@ BOOL user_context_add(socket_t *sock) { } void user_context_remove(user_t *user) { - pthread_mutex_lock(&ctx.mx_ctx); - if(user_check_flag(user, USER_FLAG_DELETING)) + if(user_check_flag_nomx(user, USER_FLAG_DELETING)) return; + pthread_mutex_lock(&ctx.mx_ctx); + pthread_mutex_lock(&user->mx_user); user->flags |= USER_FLAG_DELETING; list_remove_item(ctx.active_users, user); @@ -80,9 +90,8 @@ BOOL user_check_flag_nomx(user_t *user, uint64_t flag) { BOOL user_check_flag(user_t *user, uint64_t flag) { - BOOL retval; pthread_mutex_lock(&user->mx_user); - retval = user_check_flag_nomx(user, flag); + BOOL retval = user_check_flag_nomx(user, flag); pthread_mutex_unlock(&user->mx_user); return retval; } diff --git a/src/server/user.h b/src/server/user.h index eab3c1c..f284d86 100644 --- a/src/server/user.h +++ b/src/server/user.h @@ -4,15 +4,26 @@ #include #include #include -#include "list.h" -#include "queue.h" -#include "sock.h" -#include "packet.h" +#include "types/list.h" +#include "types/queue.h" +#include "net/sock.h" +#include "net/packet.h" #include "common.h" #define USER_FLAG_LOGGED 1 #define USER_FLAG_DELETING 2 +#define SKILL_COUNT 6 + +#define SKILL_BAREHANDS 0 +#define SKILL_MELEE 1 +#define SKILL_RANGED 2 +#define SKILL_WHMAGIC 3 +#define SKILL_BLMAGIC 4 +#define SKILL_FIREMAKE 5 + +extern const char* _SKILL_NAMES[]; + typedef struct user_t user_t; struct user_t { pthread_mutex_t mx_user; @@ -22,8 +33,15 @@ struct user_t { socket_t *sock; uint64_t flags; - uint16_t user_id, context_id; - uint16_t x, y; + uint16_t user_id; + + struct { + char name[9]; + uint64_t flags; + uint16_t pin, x, y; + uint16_t context_id; + uint32_t skill_exp[SKILL_COUNT]; + } data; }; void user_context_init(void); diff --git a/src/flimit.c b/src/util/etc/flimit.c similarity index 100% rename from src/flimit.c rename to src/util/etc/flimit.c diff --git a/src/flimit.h b/src/util/etc/flimit.h similarity index 100% rename from src/flimit.h rename to src/util/etc/flimit.h diff --git a/src/util/file/bdat.c b/src/util/file/bdat.c new file mode 100644 index 0000000..b15c800 --- /dev/null +++ b/src/util/file/bdat.c @@ -0,0 +1,116 @@ +#include "bdat.h" + +bdat_t* bdat_open_read(char *file) { + bdat_t *bdat = (bdat_t*)malloc(sizeof(bdat_t)); + bdat->fp = fopen(file, "rb"); + bdat->mode = BDAT_MODE_READ; + return bdat; +} + +bdat_t* bdat_open_write(char *file) { + bdat_t *bdat = (bdat_t*)malloc(sizeof(bdat_t)); + bdat->fp = fopen(file, "wb+"); + bdat->mode = BDAT_MODE_WRITE; + return bdat; +} + +uint8_t bdat_get_mode(bdat_t *bdat) { + return bdat->mode; +} + +void* bdat_get_raw(bdat_t *bdat, void *data, int length) { + if(bdat->mode != BDAT_MODE_READ) + return NULL; + + fread(data, length, 1, bdat->fp); +} + +uint8_t bdat_get_uint8(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + uint8_t data; + fread(&data, 1, 1, bdat->fp); + return data; +} + +uint16_t bdat_get_uint16(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + uint16_t data; + fread(&data, sizeof(data), 1, bdat->fp); + return data; +} + +uint32_t bdat_get_uint32(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + uint32_t data; + fread(&data, sizeof(data), 1, bdat->fp); + return data; +} + +uint64_t bdat_get_uint64(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + uint64_t data; + fread(&data, sizeof(data), 1, bdat->fp); + return data; +} + +float bdat_get_float(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + float data; + fread(&data, sizeof(data), 1, bdat->fp); + return data; +} + +double bdat_get_double(bdat_t *bdat) { + if(bdat->mode != BDAT_MODE_READ) + return 0; + + double data; + fread(&data, sizeof(data), 1, bdat->fp); + return data; +} + +void bdat_write_raw(bdat_t *bdat, void *data, int length) { + if(bdat->mode != BDAT_MODE_WRITE) + return; + + fwrite(data, length, 1, bdat->fp); +} + +void bdat_write_uint8(bdat_t *bdat, uint8_t data) { + bdat_write_raw(bdat, (void*)(&data), 1); +} + +void bdat_write_uint16(bdat_t *bdat, uint16_t data) { + bdat_write_raw(bdat, (void*)(&data), sizeof(data)); +} + +void bdat_write_uint32(bdat_t *bdat, uint32_t data) { + bdat_write_raw(bdat, (void*)(&data), sizeof(data)); +} + +void bdat_write_uint64(bdat_t *bdat, uint64_t data) { + bdat_write_raw(bdat, (void*)(&data), sizeof(data)); +} + +void bdat_write_float(bdat_t *bdat, float data) { + bdat_write_raw(bdat, (void*)(&data), sizeof(data)); +} + +void bdat_write_double(bdat_t *bdat, double data) { + bdat_write_raw(bdat, (void*)(&data), sizeof(data)); +} + +void bdat_close(bdat_t *bdat) { + fclose(bdat->fp); + free(bdat); +} \ No newline at end of file diff --git a/src/util/file/bdat.h b/src/util/file/bdat.h new file mode 100644 index 0000000..b7b971e --- /dev/null +++ b/src/util/file/bdat.h @@ -0,0 +1,40 @@ +#ifndef BDAT_H +#define BDAT_H + +#include +#include +#include + +#define BDAT_MODE_READ 0 +#define BDAT_MODE_WRITE 1 + +typedef struct bdat_t bdat_t; +struct bdat_t { + FILE *fp; + uint8_t mode; +}; + +bdat_t* bdat_open_read(char*); +bdat_t* bdat_open_write(char*); + +uint8_t bdat_get_mode(bdat_t*); + +void* bdat_get_raw (bdat_t*, void*, int); +uint8_t bdat_get_uint8 (bdat_t*); +uint16_t bdat_get_uint16 (bdat_t*); +uint32_t bdat_get_uint32 (bdat_t*); +uint64_t bdat_get_uint64 (bdat_t*); +float bdat_get_float (bdat_t*); +double bdat_get_double (bdat_t*); + +void bdat_write_raw (bdat_t*, void*, int); +void bdat_write_uint8 (bdat_t*, uint8_t); +void bdat_write_uint16 (bdat_t*, uint16_t); +void bdat_write_uint32 (bdat_t*, uint32_t); +void bdat_write_uint64 (bdat_t*, uint64_t); +void bdat_write_float (bdat_t*, float); +void bdat_write_double (bdat_t*, double); + +void bdat_close(bdat_t*); + +#endif diff --git a/src/util/file/map.c b/src/util/file/map.c new file mode 100644 index 0000000..3379623 --- /dev/null +++ b/src/util/file/map.c @@ -0,0 +1 @@ +#include "map.h" \ No newline at end of file diff --git a/src/util/file/map.h b/src/util/file/map.h new file mode 100644 index 0000000..d8452af --- /dev/null +++ b/src/util/file/map.h @@ -0,0 +1,6 @@ +#ifndef MAP_H +#define MAP_H + +#include + +#endif \ No newline at end of file diff --git a/src/packet.c b/src/util/net/packet.c similarity index 100% rename from src/packet.c rename to src/util/net/packet.c diff --git a/src/packet.h b/src/util/net/packet.h similarity index 98% rename from src/packet.h rename to src/util/net/packet.h index 284fabb..7b5903b 100644 --- a/src/packet.h +++ b/src/util/net/packet.h @@ -5,7 +5,7 @@ #include #include #include -#include "list.h" +#include "types/list.h" #include "common.h" #define PCK_CTX_C2S 0 diff --git a/src/sock.c b/src/util/net/sock.c similarity index 100% rename from src/sock.c rename to src/util/net/sock.c diff --git a/src/sock.h b/src/util/net/sock.h similarity index 100% rename from src/sock.h rename to src/util/net/sock.h diff --git a/src/list.c b/src/util/types/list.c similarity index 100% rename from src/list.c rename to src/util/types/list.c diff --git a/src/list.h b/src/util/types/list.h similarity index 100% rename from src/list.h rename to src/util/types/list.h diff --git a/src/queue.c b/src/util/types/queue.c similarity index 100% rename from src/queue.c rename to src/util/types/queue.c diff --git a/src/queue.h b/src/util/types/queue.h similarity index 100% rename from src/queue.h rename to src/util/types/queue.h diff --git a/src/stack.c b/src/util/types/stack.c similarity index 100% rename from src/stack.c rename to src/util/types/stack.c diff --git a/src/stack.h b/src/util/types/stack.h similarity index 100% rename from src/stack.h rename to src/util/types/stack.h