summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/CMakeLists.txt4
-rw-r--r--src/common/Makefile.in3
-rw-r--r--src/common/console.c186
-rw-r--r--src/common/console.h48
-rw-r--r--src/common/core.c189
-rw-r--r--src/common/core.h7
-rw-r--r--src/config/const.h6
-rw-r--r--src/config/core.h21
-rw-r--r--src/map/skill.c6
-rw-r--r--src/tool/Makefile.in4
-rw-r--r--vcproj-10/char-server.vcxproj2
-rw-r--r--vcproj-10/char-server.vcxproj.filters6
-rw-r--r--vcproj-10/login-server.vcxproj2
-rw-r--r--vcproj-10/login-server.vcxproj.filters6
-rw-r--r--vcproj-10/map-server.vcxproj2
-rw-r--r--vcproj-10/map-server.vcxproj.filters6
-rw-r--r--vcproj-10/mapcache.vcxproj2
-rw-r--r--vcproj-10/mapcache.vcxproj.filters6
-rw-r--r--vcproj-12/char-server.vcxproj2
-rw-r--r--vcproj-12/char-server.vcxproj.filters6
-rw-r--r--vcproj-12/login-server.vcxproj2
-rw-r--r--vcproj-12/login-server.vcxproj.filters6
-rw-r--r--vcproj-12/map-server.vcxproj2
-rw-r--r--vcproj-12/map-server.vcxproj.filters6
-rw-r--r--vcproj-12/mapcache.vcxproj2
-rw-r--r--vcproj-12/mapcache.vcxproj.filters6
-rw-r--r--vcproj-9/char-server.vcproj8
-rw-r--r--vcproj-9/login-server.vcproj8
-rw-r--r--vcproj-9/map-server.vcproj8
-rw-r--r--vcproj-9/mapcache.vcproj12
30 files changed, 440 insertions, 134 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index e8c6c0a70..508154c00 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -36,6 +36,7 @@ set( COMMON_ALL_HEADERS
set( COMMON_MINI_HEADERS
${COMMON_ALL_HEADERS}
"${COMMON_SOURCE_DIR}/core.h"
+ "${COMMON_SOURCE_DIR}/console.h"
"${COMMON_SOURCE_DIR}/malloc.h"
"${COMMON_SOURCE_DIR}/showmsg.h"
"${COMMON_SOURCE_DIR}/strlib.h"
@@ -43,6 +44,7 @@ set( COMMON_MINI_HEADERS
CACHE INTERNAL "" )
set( COMMON_MINI_SOURCES
"${COMMON_SOURCE_DIR}/core.c"
+ "${COMMON_SOURCE_DIR}/console.c"
"${COMMON_SOURCE_DIR}/malloc.c"
"${COMMON_SOURCE_DIR}/showmsg.c"
"${COMMON_SOURCE_DIR}/strlib.c"
@@ -61,6 +63,7 @@ set( COMMON_BASE_HEADERS
${COMMON_ALL_HEADERS}
"${COMMON_SOURCE_DIR}/conf.h"
"${COMMON_SOURCE_DIR}/core.h"
+ "${COMMON_SOURCE_DIR}/console.h"
"${COMMON_SOURCE_DIR}/db.h"
"${COMMON_SOURCE_DIR}/des.h"
"${COMMON_SOURCE_DIR}/ers.h"
@@ -86,6 +89,7 @@ set( COMMON_BASE_HEADERS
set( COMMON_BASE_SOURCES
"${COMMON_SOURCE_DIR}/conf.c"
"${COMMON_SOURCE_DIR}/core.c"
+ "${COMMON_SOURCE_DIR}/console.c"
"${COMMON_SOURCE_DIR}/db.c"
"${COMMON_SOURCE_DIR}/des.c"
"${COMMON_SOURCE_DIR}/ers.c"
diff --git a/src/common/Makefile.in b/src/common/Makefile.in
index c24499c02..26cae3e51 100644
--- a/src/common/Makefile.in
+++ b/src/common/Makefile.in
@@ -3,7 +3,8 @@ COMMON_OBJ = obj_all/core.o obj_all/socket.o obj_all/timer.o obj_all/db.o \
obj_all/nullpo.o obj_all/malloc.o obj_all/showmsg.o obj_all/strlib.o obj_all/utils.o \
obj_all/grfio.o obj_all/mapindex.o obj_all/ers.o obj_all/md5calc.o \
obj_all/minicore.o obj_all/minisocket.o obj_all/minimalloc.o obj_all/random.o obj_all/des.o \
- obj_all/conf.o obj_all/thread.o obj_all/mutex.o obj_all/raconf.o obj_all/mempool.o
+ obj_all/conf.o obj_all/thread.o obj_all/mutex.o obj_all/raconf.o obj_all/mempool.o obj_all/console.o \
+ obj_all/miniconsole.o
COMMON_H = $(shell ls ../common/*.h)
diff --git a/src/common/console.c b/src/common/console.c
new file mode 100644
index 000000000..ee4570b2a
--- /dev/null
+++ b/src/common/console.c
@@ -0,0 +1,186 @@
+// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// See the LICENSE file
+// Portions Copyright (c) Athena Dev Teams
+
+#include "../common/showmsg.h"
+#include "../common/console.h"
+#include "../config/core.h"
+#include "core.h"
+
+#ifndef MINICORE
+ #include "../common/atomic.h"
+ #include "../common/spinlock.h"
+ #include "../common/thread.h"
+ #include "../common/mutex.h"
+ #include "../common/timer.h"
+ #include "../common/strlib.h"
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifndef _WIN32
+ #include <unistd.h>
+#else
+ #include "../common/winapi.h" // Console close event handling
+#endif
+
+#ifdef CONSOLE_INPUT
+ #ifdef _WIN32
+ #include <conio.h> /* _kbhit() */
+ #endif
+#endif
+
+/*======================================
+ * CORE : Display title
+ *--------------------------------------*/
+void display_title(void) {
+ const char* svn = get_svn_revision();
+ const char* git = get_git_hash();
+
+ ShowMessage("\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" Hercules Development Team presents "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" _ _ _ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | | | | | | "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | |_| | ___ _ __ ___ _ _| | ___ ___ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | _ |/ _ \\ '__/ __| | | | |/ _ \\/ __|"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | | | | __/ | | (__| |_| | | __/\\__ \\"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" \\_| |_/\\___|_| \\___|\\__,_|_|\\___||___/"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" http://hercules.ws/board/ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+ ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
+
+ if( git[0] != HERC_UNKNOWN_VER )
+ ShowInfo("Git Hash: '"CL_WHITE"%s"CL_RESET"'\n", git);
+ else if( svn[0] != HERC_UNKNOWN_VER )
+ ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'\n", svn);
+}
+#ifdef CONSOLE_INPUT
+#ifdef _WIN32
+int console_parse_key_pressed(void) {
+ return _kbhit();
+}
+#else /* _WIN32 */
+int console_parse_key_pressed(void) {
+ struct timeval tv;
+ fd_set fds;
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ FD_ZERO(&fds);
+ FD_SET(STDIN_FILENO, &fds);
+
+ select(STDIN_FILENO+1, &fds, NULL, NULL, &tv);
+
+ return FD_ISSET(STDIN_FILENO, &fds);
+}
+#endif /* _WIN32 */
+
+void console_parse(char* line) {
+ int c, i = 0, len = MAX_CONSOLE_INPUT - 1;/* we leave room for the \0 :P */
+
+ while( (c = fgetc(stdin)) != EOF ) {
+ if( --len == 0 )
+ break;
+ if( (line[i++] = c) == '\n') {
+ line[i-1] = '\0';/* clear, we skip the new line */
+ break;/* new line~! we leave it for the next cycle */
+ }
+ }
+
+ line[i++] = '\0';
+}
+void *cThread_main(void *x) {
+
+ while( console->ptstate ) {/* loopx */
+ if( console->key_pressed() ) {
+ char input[MAX_CONSOLE_INPUT];
+
+ console->parse(input);
+ if( input[0] != '\0' ) {/* did we get something? */
+ EnterSpinLock(&console->ptlock);
+
+ if( cinput.count == CONSOLE_PARSE_SIZE ) {
+ LeaveSpinLock(&console->ptlock);
+ continue;/* drop */
+ }
+
+ safestrncpy(cinput.queue[cinput.count++],input,MAX_CONSOLE_INPUT);
+ LeaveSpinLock(&console->ptlock);
+ }
+ }
+ ramutex_lock( console->ptmutex );
+ racond_wait( console->ptcond, console->ptmutex, -1 );
+ ramutex_unlock( console->ptmutex );
+ }
+
+ return NULL;
+}
+int console_parse_timer(int tid, unsigned int tick, int id, intptr_t data) {
+ int i;
+ EnterSpinLock(&console->ptlock);
+ for(i = 0; i < cinput.count; i++) {
+ parse_console(cinput.queue[i]);
+ }
+ cinput.count = 0;
+ LeaveSpinLock(&console->ptlock);
+ racond_signal(console->ptcond);
+ return 0;
+}
+void console_parse_final(void) {
+ InterlockedDecrement(&console->ptstate);
+ racond_signal(console->ptcond);
+
+ /* wait for thread to close */
+ rathread_wait(console->pthread, NULL);
+
+ racond_destroy(console->ptcond);
+ ramutex_destroy(console->ptmutex);
+
+}
+void console_parse_init(void) {
+ cinput.count = 0;
+
+ console->ptstate = 1;
+
+ InitializeSpinLock(&console->ptlock);
+
+ console->ptmutex = ramutex_create();
+ console->ptcond = racond_create();
+
+ if( (console->pthread = rathread_create(console->pthread_main, NULL)) == NULL ){
+ ShowFatalError("console_parse_init: failed to spawn console_parse thread.\n");
+ exit(EXIT_FAILURE);
+ }
+
+ add_timer_func_list(console->parse_timer, "console_parse_timer");
+ add_timer_interval(gettick() + 1000, console->parse_timer, 0, 0, 500);/* start listening in 1s; re-try every 0.5s */
+
+}
+#endif /* CONSOLE_INPUT */
+
+void console_init (void) {
+ console->display_title();
+#ifdef CONSOLE_INPUT
+ console->parse_init();
+#endif
+}
+void console_final(void) {
+#ifdef CONSOLE_INPUT
+ console->parse_final();
+#endif
+}
+void console_defaults(void) {
+ console = &console_s;
+ console->init = console_init;
+ console->final = console_final;
+ console->display_title = display_title;
+#ifdef CONSOLE_INPUT
+ console->parse_init = console_parse_init;
+ console->parse_final = console_parse_final;
+ console->parse_timer = console_parse_timer;
+ console->pthread_main = cThread_main;
+ console->parse = console_parse;
+ console->key_pressed = console_parse_key_pressed;
+#endif
+} \ No newline at end of file
diff --git a/src/common/console.h b/src/common/console.h
new file mode 100644
index 000000000..d0b9e8bb1
--- /dev/null
+++ b/src/common/console.h
@@ -0,0 +1,48 @@
+// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// See the LICENSE file
+
+#ifndef _CONSOLE_H_
+#define _CONSOLE_H_
+
+#include "../common/atomic.h"
+#include "../common/thread.h"
+#include "../common/mutex.h"
+#include "../common/spinlock.h"
+#include "../config/core.h"
+
+/**
+ * Queue Max
+ * why is there a limit, why not make it dynamic? - I'm playing it safe, I'd rather not play with memory management between threads
+ **/
+#define CONSOLE_PARSE_SIZE 10
+struct {
+ char queue[CONSOLE_PARSE_SIZE][MAX_CONSOLE_INPUT];
+ unsigned short count;
+} cinput;
+
+struct console_interface {
+ void (*init) (void);
+ void (*final) (void);
+ void (*display_title) (void);
+#ifdef CONSOLE_INPUT
+ /* vars */
+ SPIN_LOCK ptlock;/* parse thread lock */
+ rAthread pthread;/* parse thread */
+ volatile int32 ptstate;/* parse thread state */
+ ramutex ptmutex;/* parse thread mutex */
+ racond ptcond;/* parse thread cond */
+ /* */
+ void (*parse_init) (void);
+ void (*parse_final) (void);
+ int (*parse_timer) (int tid, unsigned int tick, int id, intptr_t data);
+ void *(*pthread_main) (void *x);
+ void (*parse) (char* line);
+ int (*key_pressed) (void);
+#endif
+} console_s;
+
+struct console_interface *console;
+
+void console_defaults(void);
+
+#endif /* _CONSOLE_H_ */
diff --git a/src/common/core.c b/src/common/core.c
index b004d2b96..da4e4ccf9 100644
--- a/src/common/core.c
+++ b/src/common/core.c
@@ -6,13 +6,17 @@
#include "../common/showmsg.h"
#include "../common/malloc.h"
#include "core.h"
+#include "../common/console.h"
+
#ifndef MINICORE
-#include "../common/db.h"
-#include "../common/socket.h"
-#include "../common/timer.h"
-#include "../common/thread.h"
-#include "../common/mempool.h"
-#include "../common/sql.h"
+ #include "../common/db.h"
+ #include "../common/socket.h"
+ #include "../common/timer.h"
+ #include "../common/thread.h"
+ #include "../common/mempool.h"
+ #include "../common/sql.h"
+ #include "../config/core.h"
+ #include "../common/strlib.h"
#endif
#include <stdio.h>
@@ -25,14 +29,9 @@
#include "../common/winapi.h" // Console close event handling
#endif
-
/// Called when a terminate signal is received.
void (*shutdown_callback)(void) = NULL;
-#if defined(BUILDBOT)
- int buildbotflag = 0;
-#endif
-
int runflag = CORE_ST_RUN;
int arg_c = 0;
char **arg_v = NULL;
@@ -54,8 +53,7 @@ char SERVER_TYPE = ATHENA_SERVER_NONE;
#ifndef POSIX
#define compat_signal(signo, func) signal(signo, func)
#else
-sigfunc *compat_signal(int signo, sigfunc *func)
-{
+sigfunc *compat_signal(int signo, sigfunc *func) {
struct sigaction sact, oact;
sact.sa_handler = func;
@@ -76,26 +74,23 @@ sigfunc *compat_signal(int signo, sigfunc *func)
* CORE : Console events for Windows
*--------------------------------------*/
#ifdef _WIN32
-static BOOL WINAPI console_handler(DWORD c_event)
-{
- switch(c_event)
- {
- case CTRL_CLOSE_EVENT:
- case CTRL_LOGOFF_EVENT:
- case CTRL_SHUTDOWN_EVENT:
- if( shutdown_callback != NULL )
- shutdown_callback();
- else
- runflag = CORE_ST_STOP;// auto-shutdown
- break;
- default:
- return FALSE;
+static BOOL WINAPI console_handler(DWORD c_event) {
+ switch(c_event) {
+ case CTRL_CLOSE_EVENT:
+ case CTRL_LOGOFF_EVENT:
+ case CTRL_SHUTDOWN_EVENT:
+ if( shutdown_callback != NULL )
+ shutdown_callback();
+ else
+ runflag = CORE_ST_STOP;// auto-shutdown
+ break;
+ default:
+ return FALSE;
}
return TRUE;
}
-static void cevents_init()
-{
+static void cevents_init() {
if (SetConsoleCtrlHandler(console_handler,TRUE)==FALSE)
ShowWarning ("Unable to install the console handler!\n");
}
@@ -104,42 +99,40 @@ static void cevents_init()
/*======================================
* CORE : Signal Sub Function
*--------------------------------------*/
-static void sig_proc(int sn)
-{
+static void sig_proc(int sn) {
static int is_called = 0;
switch (sn) {
- case SIGINT:
- case SIGTERM:
- if (++is_called > 3)
- exit(EXIT_SUCCESS);
- if( shutdown_callback != NULL )
- shutdown_callback();
- else
- runflag = CORE_ST_STOP;// auto-shutdown
- break;
- case SIGSEGV:
- case SIGFPE:
- do_abort();
- // Pass the signal to the system's default handler
- compat_signal(sn, SIG_DFL);
- raise(sn);
- break;
-#ifndef _WIN32
- case SIGXFSZ:
- // ignore and allow it to set errno to EFBIG
- ShowWarning ("Max file size reached!\n");
- //run_flag = 0; // should we quit?
- break;
- case SIGPIPE:
- //ShowInfo ("Broken pipe found... closing socket\n"); // set to eof in socket.c
- break; // does nothing here
-#endif
+ case SIGINT:
+ case SIGTERM:
+ if (++is_called > 3)
+ exit(EXIT_SUCCESS);
+ if( shutdown_callback != NULL )
+ shutdown_callback();
+ else
+ runflag = CORE_ST_STOP;// auto-shutdown
+ break;
+ case SIGSEGV:
+ case SIGFPE:
+ do_abort();
+ // Pass the signal to the system's default handler
+ compat_signal(sn, SIG_DFL);
+ raise(sn);
+ break;
+ #ifndef _WIN32
+ case SIGXFSZ:
+ // ignore and allow it to set errno to EFBIG
+ ShowWarning ("Max file size reached!\n");
+ //run_flag = 0; // should we quit?
+ break;
+ case SIGPIPE:
+ //ShowInfo ("Broken pipe found... closing socket\n"); // set to eof in socket.c
+ break; // does nothing here
+ #endif
}
}
-void signals_init (void)
-{
+void signals_init (void) {
compat_signal(SIGTERM, sig_proc);
compat_signal(SIGINT, sig_proc);
#ifndef _DEBUG // need unhandled exceptions to debug on Windows
@@ -157,13 +150,11 @@ void signals_init (void)
#endif
#ifdef SVNVERSION
- const char *get_svn_revision(void)
- {
- return EXPAND_AND_QUOTE(SVNVERSION);
- }
+const char *get_svn_revision(void) {
+ return EXPAND_AND_QUOTE(SVNVERSION);
+}
#else// not SVNVERSION
-const char* get_svn_revision(void)
-{
+const char* get_svn_revision(void) {
static char svn_version_buffer[16] = "";
FILE *fp;
@@ -198,12 +189,10 @@ const char* get_svn_revision(void)
fclose(fp);
// parse buffer
- for( i = prefix_len + 1; i + postfix_len <= len; ++i )
- {
+ for( i = prefix_len + 1; i + postfix_len <= len; ++i ) {
if( buffer[i] != postfix[0] || memcmp(buffer + i, postfix, postfix_len) != 0 )
continue; // postfix missmatch
- for( j = i; j > 0; --j )
- {// skip digits
+ for( j = i; j > 0; --j ) {// skip digits
if( !ISDIGIT(buffer[j - 1]) )
break;
}
@@ -220,29 +209,23 @@ const char* get_svn_revision(void)
}
// subversion 1.6 and older?
- if ((fp = fopen(".svn/entries", "r")) != NULL)
- {
+ if ((fp = fopen(".svn/entries", "r")) != NULL) {
char line[1024];
int rev;
// Check the version
- if (fgets(line, sizeof(line), fp))
- {
- if(!ISDIGIT(line[0]))
- {
+ if (fgets(line, sizeof(line), fp)) {
+ if(!ISDIGIT(line[0])) {
// XML File format
while (fgets(line,sizeof(line),fp))
if (strstr(line,"revision=")) break;
if (sscanf(line," %*[^\"]\"%d%*[^\n]", &rev) == 1) {
snprintf(svn_version_buffer, sizeof(svn_version_buffer), "%d", rev);
}
- }
- else
- {
+ } else {
// Bin File format
if ( fgets(line, sizeof(line), fp) == NULL ) { printf("Can't get bin name\n"); } // Get the name
if ( fgets(line, sizeof(line), fp) == NULL ) { printf("Can't get entries kind\n"); } // Get the entries kind
- if(fgets(line, sizeof(line), fp)) // Get the rev numver
- {
+ if(fgets(line, sizeof(line), fp)) { // Get the rev numver
snprintf(svn_version_buffer, sizeof(svn_version_buffer), "%d", atoi(line));
}
}
@@ -287,36 +270,8 @@ const char *get_git_hash (void) {
return HerculesGitHash;
}
-/*======================================
- * CORE : Display title
- * ASCII By CalciumKid 1/12/2011
- *--------------------------------------*/
-static void display_title(void) {
- const char* svn = get_svn_revision();
- const char* git = get_git_hash();
-
- ShowMessage("\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" Hercules Development Team presents "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" _ _ _ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | | | | | | "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | |_| | ___ _ __ ___ _ _| | ___ ___ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | _ |/ _ \\ '__/ __| | | | |/ _ \\/ __|"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" | | | | __/ | | (__| |_| | | __/\\__ \\"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" \\_| |_/\\___|_| \\___|\\__,_|_|\\___||___/"CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" http://hercules.ws/board/ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
-
- if( git[0] != HERC_UNKNOWN_VER )
- ShowInfo("Git Hash: '"CL_WHITE"%s"CL_RESET"'\n", git);
- else if( svn[0] != HERC_UNKNOWN_VER )
- ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'\n", svn);
-}
-
// Warning if executed as superuser (root)
-void usercheck(void)
-{
+void usercheck(void) {
#ifndef _WIN32
if (geteuid() == 0) {
ShowWarning ("You are running Hercules with root privileges, it is not necessary.\n");
@@ -340,17 +295,18 @@ int main (int argc, char **argv)
arg_c = argc;
arg_v = argv;
}
-
+ console_defaults();
+
malloc_init();// needed for Show* in display_title() [FlavioJS]
-
+
+ console->display_title();
+
#ifdef MINICORE // minimalist Core
- display_title();
usercheck();
do_init(argc,argv);
do_final();
#else// not MINICORE
set_server_type();
- display_title();
usercheck();
Sql_Init();
@@ -358,12 +314,15 @@ int main (int argc, char **argv)
mempool_init();
db_init();
signals_init();
-
+
#ifdef _WIN32
cevents_init();
#endif
timer_init();
+
+ console->init();
+
socket_init();
do_init(argc,argv);
@@ -376,6 +335,8 @@ int main (int argc, char **argv)
}
}
+ console->final();
+
do_final();
timer_final();
diff --git a/src/common/core.h b/src/common/core.h
index ccdfa6c35..dce8157b1 100644
--- a/src/common/core.h
+++ b/src/common/core.h
@@ -5,6 +5,9 @@
#ifndef _CORE_H_
#define _CORE_H_
+#include "../common/db.h"
+#include "../config/core.h"
+
/* so that developers with --enable-debug can raise signals from any section of the code they'd like */
#ifdef DEBUG
#include <signal.h>
@@ -13,10 +16,6 @@
extern int arg_c;
extern char **arg_v;
-#if defined(BUILDBOT)
- extern int buildbotflag;
-#endif
-
#define HERC_UNKNOWN_VER '\x02'
/// @see E_CORE_ST
diff --git a/src/config/const.h b/src/config/const.h
index 5fb74e22e..1e7a40d74 100644
--- a/src/config/const.h
+++ b/src/config/const.h
@@ -93,6 +93,12 @@
time = time * (1 - (float)min(val, 100) / 100); \
}
#endif
+
+/* console_input doesn't go well with minicore */
+#ifdef MINICORE
+ #undef CONSOLE_INPUT
+#endif
+
/**
* End of File
**/
diff --git a/src/config/core.h b/src/config/core.h
index 1e8ce9992..c9b1463de 100644
--- a/src/config/core.h
+++ b/src/config/core.h
@@ -1,13 +1,9 @@
-// Copyright (c) rAthena Dev Teams - Licensed under GNU GPL
-// For more information, see LICENCE in the main folder
+// Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// See the LICENSE file
+// Portions Copyright (c) Athena Dev Teams
#ifndef _CONFIG_CORE_H_
#define _CONFIG_CORE_H_
-/**
- * rAthena configuration file (http://rathena.org)
- * For detailed guidance on these check http://rathena.org/wiki/SRC/config/
- **/
-
/// Max number of items on @autolootid list
#define AUTOLOOTITEM_SIZE 10
@@ -27,8 +23,15 @@
/// your map-server using more resources while this is active, comment the line
#define SCRIPT_CALLFUNC_CHECK
-/// Uncomment to disable rAthena's anonymous stat report
-/// We kindly ask you to consider keeping it enabled, it helps us improve rAthena.
+/// Comment to disable Hercules' console_parse
+/// CONSOLE_INPUT allows you to type commands into the server's console,
+/// Disabling it saves one thread.
+#define CONSOLE_INPUT
+/// Maximum number of caracters 'CONSOLE_INPUT' will support per line.
+#define MAX_CONSOLE_INPUT 150
+
+/// Uncomment to disable Hercules' anonymous stat report
+/// We kindly ask you to consider keeping it enabled, it helps us improve Hercules.
//#define STATS_OPT_OUT
/// uncomment to enable query_sql script command and mysql logs to function on it's own thread
diff --git a/src/map/skill.c b/src/map/skill.c
index 033b91a0b..88111d898 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -16758,9 +16758,7 @@ int skill_blockpc_end(int tid, unsigned int tick, int id, intptr_t data) {
* @param load whether this assignment is being loaded upon player login
* @return 0 if successful, -1 otherwise
*/
-int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick, bool load)
-{
- int oskill_id = skill_id;
+int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick, bool load) {
struct skill_cd* cd = NULL;
uint16 idx = skill->get_index(skill_id);
@@ -16786,7 +16784,7 @@ int skill_blockpc_start_(struct map_session_data *sd, uint16 skill_id, int tick,
// record the skill duration in the database map
cd->duration[cd->cursor] = tick;
cd->skidx[cd->cursor] = idx;
- cd->nameid[cd->cursor] = oskill_id;
+ cd->nameid[cd->cursor] = skill_id;
cd->cursor++;
}
diff --git a/src/tool/Makefile.in b/src/tool/Makefile.in
index d72ef5405..5c188857b 100644
--- a/src/tool/Makefile.in
+++ b/src/tool/Makefile.in
@@ -1,10 +1,10 @@
COMMON_OBJ = ../common/obj_all/minicore.o ../common/obj_all/malloc.o \
../common/obj_all/showmsg.o ../common/obj_all/strlib.o \
- ../common/obj_all/utils.o ../common/obj_all/des.o ../common/obj_all/grfio.o
+ ../common/obj_all/utils.o ../common/obj_all/des.o ../common/obj_all/grfio.o ../common/obj_all/miniconsole.o
COMMON_H = ../common/core.h ../common/mmo.h \
../common/malloc.h ../common/showmsg.h ../common/strlib.h \
- ../common/utils.h ../common/cbasetypes.h ../common/des.h ../common/grfio.h ../config/renewal.h
+ ../common/utils.h ../common/cbasetypes.h ../common/des.h ../common/grfio.h ../common/console.h ../config/renewal.h
LIBCONFIG_OBJ = ../../3rdparty/libconfig/libconfig.o ../../3rdparty/libconfig/grammar.o \
../../3rdparty/libconfig/scanctx.o ../../3rdparty/libconfig/scanner.o ../../3rdparty/libconfig/strbuf.o
diff --git a/vcproj-10/char-server.vcxproj b/vcproj-10/char-server.vcxproj
index 6b72a6ca7..9791cefb7 100644
--- a/vcproj-10/char-server.vcxproj
+++ b/vcproj-10/char-server.vcxproj
@@ -139,6 +139,7 @@
<ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h" />
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\common\malloc.h" />
@@ -179,6 +180,7 @@
<ClCompile Include="..\3rdparty\libconfig\strbuf.c" />
<ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
<ClCompile Include="..\src\common\malloc.c" />
diff --git a/vcproj-10/char-server.vcxproj.filters b/vcproj-10/char-server.vcxproj.filters
index d78e5e70d..0c90c0ab8 100644
--- a/vcproj-10/char-server.vcxproj.filters
+++ b/vcproj-10/char-server.vcxproj.filters
@@ -4,6 +4,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\db.c">
<Filter>common</Filter>
</ClCompile>
@@ -117,6 +120,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-10/login-server.vcxproj b/vcproj-10/login-server.vcxproj
index dc55af074..4e26c500f 100644
--- a/vcproj-10/login-server.vcxproj
+++ b/vcproj-10/login-server.vcxproj
@@ -149,6 +149,7 @@
<ClInclude Include="..\src\login\loginlog.h" />
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\common\malloc.h" />
@@ -179,6 +180,7 @@
<ClCompile Include="..\src\login\login.c" />
<ClCompile Include="..\src\login\loginlog_sql.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
<ClCompile Include="..\src\common\malloc.c" />
diff --git a/vcproj-10/login-server.vcxproj.filters b/vcproj-10/login-server.vcxproj.filters
index f4280a018..c5345b030 100644
--- a/vcproj-10/login-server.vcxproj.filters
+++ b/vcproj-10/login-server.vcxproj.filters
@@ -16,6 +16,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\db.c">
<Filter>common</Filter>
</ClCompile>
@@ -102,6 +105,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-10/map-server.vcxproj b/vcproj-10/map-server.vcxproj
index 07e4b2df8..92555662f 100644
--- a/vcproj-10/map-server.vcxproj
+++ b/vcproj-10/map-server.vcxproj
@@ -137,6 +137,7 @@
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\conf.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\des.h" />
<ClInclude Include="..\src\common\ers.h" />
@@ -209,6 +210,7 @@
<ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
<ClCompile Include="..\src\common\conf.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\ers.c" />
diff --git a/vcproj-10/map-server.vcxproj.filters b/vcproj-10/map-server.vcxproj.filters
index 72ad44246..8f8c43e0c 100644
--- a/vcproj-10/map-server.vcxproj.filters
+++ b/vcproj-10/map-server.vcxproj.filters
@@ -112,6 +112,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\des.c">
<Filter>common</Filter>
</ClCompile>
@@ -306,6 +309,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-10/mapcache.vcxproj b/vcproj-10/mapcache.vcxproj
index f2f5fec95..61c6e8ea8 100644
--- a/vcproj-10/mapcache.vcxproj
+++ b/vcproj-10/mapcache.vcxproj
@@ -124,6 +124,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\grfio.c" />
<ClCompile Include="..\src\common\malloc.c" />
@@ -135,6 +136,7 @@
<ItemGroup>
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\des.h" />
<ClInclude Include="..\src\common\grfio.h" />
<ClInclude Include="..\src\common\malloc.h" />
diff --git a/vcproj-10/mapcache.vcxproj.filters b/vcproj-10/mapcache.vcxproj.filters
index e5a3cb87b..b32268443 100644
--- a/vcproj-10/mapcache.vcxproj.filters
+++ b/vcproj-10/mapcache.vcxproj.filters
@@ -4,6 +4,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\des.c">
<Filter>common</Filter>
</ClCompile>
@@ -33,6 +36,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\des.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-12/char-server.vcxproj b/vcproj-12/char-server.vcxproj
index aa8cb34c8..d32222162 100644
--- a/vcproj-12/char-server.vcxproj
+++ b/vcproj-12/char-server.vcxproj
@@ -142,6 +142,7 @@
<ClInclude Include="..\3rdparty\mt19937ar\mt19937ar.h" />
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\common\malloc.h" />
@@ -182,6 +183,7 @@
<ClCompile Include="..\3rdparty\libconfig\strbuf.c" />
<ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
<ClCompile Include="..\src\common\malloc.c" />
diff --git a/vcproj-12/char-server.vcxproj.filters b/vcproj-12/char-server.vcxproj.filters
index d78e5e70d..0c90c0ab8 100644
--- a/vcproj-12/char-server.vcxproj.filters
+++ b/vcproj-12/char-server.vcxproj.filters
@@ -4,6 +4,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\db.c">
<Filter>common</Filter>
</ClCompile>
@@ -117,6 +120,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-12/login-server.vcxproj b/vcproj-12/login-server.vcxproj
index b95b048fb..65284dbd1 100644
--- a/vcproj-12/login-server.vcxproj
+++ b/vcproj-12/login-server.vcxproj
@@ -153,6 +153,7 @@
<ClInclude Include="..\src\login\loginlog.h" />
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\ers.h" />
<ClInclude Include="..\src\common\malloc.h" />
@@ -183,6 +184,7 @@
<ClCompile Include="..\src\login\login.c" />
<ClCompile Include="..\src\login\loginlog_sql.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\ers.c" />
<ClCompile Include="..\src\common\malloc.c" />
diff --git a/vcproj-12/login-server.vcxproj.filters b/vcproj-12/login-server.vcxproj.filters
index f4280a018..c5345b030 100644
--- a/vcproj-12/login-server.vcxproj.filters
+++ b/vcproj-12/login-server.vcxproj.filters
@@ -16,6 +16,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\db.c">
<Filter>common</Filter>
</ClCompile>
@@ -102,6 +105,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-12/map-server.vcxproj b/vcproj-12/map-server.vcxproj
index f6bed2fe9..216a3932c 100644
--- a/vcproj-12/map-server.vcxproj
+++ b/vcproj-12/map-server.vcxproj
@@ -141,6 +141,7 @@
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\conf.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\db.h" />
<ClInclude Include="..\src\common\des.h" />
<ClInclude Include="..\src\common\ers.h" />
@@ -213,6 +214,7 @@
<ClCompile Include="..\3rdparty\mt19937ar\mt19937ar.c" />
<ClCompile Include="..\src\common\conf.c" />
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\db.c" />
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\ers.c" />
diff --git a/vcproj-12/map-server.vcxproj.filters b/vcproj-12/map-server.vcxproj.filters
index 72ad44246..8f8c43e0c 100644
--- a/vcproj-12/map-server.vcxproj.filters
+++ b/vcproj-12/map-server.vcxproj.filters
@@ -112,6 +112,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\des.c">
<Filter>common</Filter>
</ClCompile>
@@ -306,6 +309,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\db.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-12/mapcache.vcxproj b/vcproj-12/mapcache.vcxproj
index 32f6a3418..390e0cc65 100644
--- a/vcproj-12/mapcache.vcxproj
+++ b/vcproj-12/mapcache.vcxproj
@@ -128,6 +128,7 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\common\core.c" />
+ <ClCompile Include="..\src\common\console.c" />
<ClCompile Include="..\src\common\des.c" />
<ClCompile Include="..\src\common\grfio.c" />
<ClCompile Include="..\src\common\malloc.c" />
@@ -139,6 +140,7 @@
<ItemGroup>
<ClInclude Include="..\src\common\cbasetypes.h" />
<ClInclude Include="..\src\common\core.h" />
+ <ClInclude Include="..\src\common\console.h" />
<ClInclude Include="..\src\common\des.h" />
<ClInclude Include="..\src\common\grfio.h" />
<ClInclude Include="..\src\common\malloc.h" />
diff --git a/vcproj-12/mapcache.vcxproj.filters b/vcproj-12/mapcache.vcxproj.filters
index 9db61046e..dea00ce79 100644
--- a/vcproj-12/mapcache.vcxproj.filters
+++ b/vcproj-12/mapcache.vcxproj.filters
@@ -4,6 +4,9 @@
<ClCompile Include="..\src\common\core.c">
<Filter>common</Filter>
</ClCompile>
+ <ClCompile Include="..\src\common\console.c">
+ <Filter>common</Filter>
+ </ClCompile>
<ClCompile Include="..\src\common\des.c">
<Filter>common</Filter>
</ClCompile>
@@ -33,6 +36,9 @@
<ClInclude Include="..\src\common\core.h">
<Filter>common</Filter>
</ClInclude>
+ <ClInclude Include="..\src\common\console.h">
+ <Filter>common</Filter>
+ </ClInclude>
<ClInclude Include="..\src\common\des.h">
<Filter>common</Filter>
</ClInclude>
diff --git a/vcproj-9/char-server.vcproj b/vcproj-9/char-server.vcproj
index 2a1dfd732..4ae68cd36 100644
--- a/vcproj-9/char-server.vcproj
+++ b/vcproj-9/char-server.vcproj
@@ -293,6 +293,14 @@
>
</File>
<File
+ RelativePath="..\src\common\console.c"
+ >
+ </File>
+ <File
+ RelativePath="..\src\common\console.h"
+ >
+ </File>
+ <File
RelativePath="..\src\common\db.c"
>
</File>
diff --git a/vcproj-9/login-server.vcproj b/vcproj-9/login-server.vcproj
index 9bbc53263..53c77309a 100644
--- a/vcproj-9/login-server.vcproj
+++ b/vcproj-9/login-server.vcproj
@@ -263,6 +263,14 @@
>
</File>
<File
+ RelativePath="..\src\common\console.c"
+ >
+ </File>
+ <File
+ RelativePath="..\src\common\console.h"
+ >
+ </File>
+ <File
RelativePath="..\src\common\db.c"
>
</File>
diff --git a/vcproj-9/map-server.vcproj b/vcproj-9/map-server.vcproj
index ff02b2fd3..ff4ba342a 100644
--- a/vcproj-9/map-server.vcproj
+++ b/vcproj-9/map-server.vcproj
@@ -292,6 +292,14 @@
>
</File>
<File
+ RelativePath="..\src\common\console.c"
+ >
+ </File>
+ <File
+ RelativePath="..\src\common\console.h"
+ >
+ </File>
+ <File
RelativePath="..\src\common\db.c"
>
</File>
diff --git a/vcproj-9/mapcache.vcproj b/vcproj-9/mapcache.vcproj
index 45d40a004..eadf6b64e 100644
--- a/vcproj-9/mapcache.vcproj
+++ b/vcproj-9/mapcache.vcproj
@@ -211,6 +211,18 @@
>
</File>
<File
+ RelativePath="..\src\common\core.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\common\console.c"
+ >
+ </File>
+ <File
+ RelativePath="..\src\common\console.h"
+ >
+ </File>
+ <File
RelativePath="..\src\common\des.c"
>
</File>