summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.txt5
-rw-r--r--conf-tmpl/script_athena.conf4
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/pc.c13
-rw-r--r--src/map/script.c14
-rw-r--r--src/map/script.h10
6 files changed, 29 insertions, 18 deletions
diff --git a/Changelog.txt b/Changelog.txt
index ae556d9d8..2f356603b 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,5 +1,10 @@
Date Added
01/10
+ * Added 'max_eventtimer_length' (default is 32) to script_athena.conf. [celest]
+ Some event timers with names longer than 24 could cause the server to close
+ itself, change this if you need support for even longer names
+ * Removed PCLoginEvent requiring 'PCLoginEvent' for the player to be set to 1
+ first to be activated. [celest]
* Added Shinomori and orn's fix for the skill tree to only check the first
required skill in the DB and skipping the rest [celest]
* Modified 'wedding' script command to work with "OnTimer" scripts even without
diff --git a/conf-tmpl/script_athena.conf b/conf-tmpl/script_athena.conf
index 45ee734f7..d47b0d5b5 100644
--- a/conf-tmpl/script_athena.conf
+++ b/conf-tmpl/script_athena.conf
@@ -11,4 +11,6 @@ warn_cmd_mismatch_paramnum: yes
check_cmdcount: 8192
-check_gotocount: 512 \ No newline at end of file
+check_gotocount: 512
+
+max_eventtimer_length: 32 \ No newline at end of file
diff --git a/src/map/map.h b/src/map/map.h
index 15de79d01..e6ad63b08 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -147,7 +147,6 @@ struct map_session_data {
unsigned event_death : 1;
unsigned event_kill : 1;
unsigned event_disconnect : 1;
- unsigned event_onconnect : 1;
} state;
struct {
unsigned killer : 1;
diff --git a/src/map/pc.c b/src/map/pc.c
index 4aa2e7342..5ff5f06fd 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -876,8 +876,7 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
sd->state.event_death = pc_readglobalreg(sd,"PCDieEvent");
sd->state.event_kill = pc_readglobalreg(sd,"PCKillEvent");
sd->state.event_disconnect = pc_readglobalreg(sd,"PCLogoffEvent");
- sd->state.event_onconnect = pc_readglobalreg(sd,"PCLoginEvent");
-
+
if (night_flag == 1 && !map[sd->bl.m].flag.indoors) {
char tmpstr[1024];
strcpy(tmpstr, msg_txt(500)); // Actually, it's the night...
@@ -898,7 +897,7 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, struct mmo_chars
sprintf(tmp_output,"Character '"CL_WHITE"%s"CL_RESET"' logged in. (Account ID: '"CL_WHITE"%d"CL_RESET"').\n", sd->status.name, sd->status.account_id);
ShowInfo(tmp_output);
- if (sd->state.event_onconnect) {
+ {
struct npc_data *npc;
//printf("pc: OnPCLogin event done. (%d events)\n", npc_event_doall("OnPCLogin") );
if ((npc = npc_name2id("PCLoginEvent"))) {
@@ -6581,8 +6580,6 @@ int pc_setglobalreg(struct map_session_data *sd,char *reg,int val)
sd->state.event_kill = val;
} else if(strcmp(reg,"PCLogoutEvent") == 0){
sd->state.event_disconnect = val;
- } else if(strcmp(reg,"PCLoginEvent") == 0){
- sd->state.event_onconnect = val;
}
if(val==0){
@@ -6794,14 +6791,14 @@ int pc_addeventtimer(struct map_session_data *sd,int tick,const char *name)
nullpo_retr(0, sd);
- Assert(strlen(name) < 24);
+ Assert(strlen(name) < script_config.max_eventtimer_len);
for(i=0;i<MAX_EVENTTIMER;i++)
if( sd->eventtimer[i]==-1 )
break;
if(i<MAX_EVENTTIMER){
- char *evname=(char *)aCalloc(24,sizeof(char));
- memcpy(evname,name,24);
+ char *evname=(char *)aCalloc(script_config.max_eventtimer_len,sizeof(char));
+ memcpy(evname,name,script_config.max_eventtimer_len);
sd->eventtimer[i]=add_timer(gettick()+tick,
pc_eventtimer,sd->bl.id,(int)evname);
sd->eventcount++;
diff --git a/src/map/script.c b/src/map/script.c
index c2369d024..6e00d15cb 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -78,14 +78,8 @@ struct dbt* script_get_userfunc_db(){ if(!userfunc_db) userfunc_db=strdb_init(50
int scriptlabel_final(void *k,void *d,va_list ap){ return 0; }
static char pos[11][100] = {"頭","体","左手","右手","ローブ","靴","アクセサリー1","アクセサリー2","頭2","頭3","装着していない"};
-static struct Script_Config {
- int warn_func_no_comma;
- int warn_cmd_no_comma;
- int warn_func_mismatch_paramnum;
- int warn_cmd_mismatch_paramnum;
- int check_cmdcount;
- int check_gotocount;
-} script_config;
+struct Script_Config script_config;
+
static int parse_cmd_if=0;
static int parse_cmd;
@@ -7210,6 +7204,7 @@ int script_config_read(char *cfgName)
script_config.warn_cmd_mismatch_paramnum=1;
script_config.check_cmdcount=8192;
script_config.check_gotocount=512;
+ script_config.max_eventtimer_len=32;
fp=fopen(cfgName,"r");
if(fp==NULL){
@@ -7243,6 +7238,9 @@ int script_config_read(char *cfgName)
else if(strcmpi(w1,"check_gotocount")==0) {
script_config.check_gotocount = battle_config_switch(w2);
}
+ else if(strcmpi(w1,"max_eventtimer_length")==0) {
+ script_config.max_eventtimer_len = battle_config_switch(w2);
+ }
else if(strcmpi(w1,"import")==0){
script_config_read(w2);
}
diff --git a/src/map/script.h b/src/map/script.h
index b50c46693..5dd266174 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -2,6 +2,16 @@
#ifndef _SCRIPT_H_
#define _SCRIPT_H_
+extern struct Script_Config {
+ int warn_func_no_comma;
+ int warn_cmd_no_comma;
+ int warn_func_mismatch_paramnum;
+ int warn_cmd_mismatch_paramnum;
+ int check_cmdcount;
+ int check_gotocount;
+ int max_eventtimer_len;
+} script_config;
+
struct script_data {
int type;
union {