Crash prevention
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@6706 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
56005cb610
commit
c243406d9e
@ -11412,14 +11412,14 @@ int run_script(struct script_code *rootscript,int pos,int rid,int oid)
|
|||||||
// let's run that stuff
|
// let's run that stuff
|
||||||
run_script_main(st);
|
run_script_main(st);
|
||||||
|
|
||||||
if(st->sleep.tick > 0) {
|
if(st){
|
||||||
// ƒXƒ^ƒbƒN<C692>î•ñ‚ðsleep_db‚ɕۑ¶
|
if(st->sleep.tick > 0) {
|
||||||
unsigned int tick = gettick()+st->sleep.tick;
|
// ƒXƒ^ƒbƒN<C692>î•ñ‚ðsleep_db‚ɕۑ¶
|
||||||
st->sleep.charid = sd ? sd->char_id : 0;
|
unsigned int tick = gettick()+st->sleep.tick;
|
||||||
st->sleep.timer = add_timer(tick, run_script_timer, st->sleep.charid, (int)st);
|
st->sleep.charid = sd ? sd->char_id : 0;
|
||||||
linkdb_insert(&sleep_db, (void*)st->oid, st);
|
st->sleep.timer = add_timer(tick, run_script_timer, st->sleep.charid, (int)st);
|
||||||
} else {
|
linkdb_insert(&sleep_db, (void*)st->oid, st);
|
||||||
if (st->state != END && sd) {
|
} else if (sd) {
|
||||||
// script is not finished, store data in sd.
|
// script is not finished, store data in sd.
|
||||||
sd->npc_script = st->script;
|
sd->npc_script = st->script;
|
||||||
sd->npc_scriptroot = rootscript;
|
sd->npc_scriptroot = rootscript;
|
||||||
@ -11427,23 +11427,23 @@ int run_script(struct script_code *rootscript,int pos,int rid,int oid)
|
|||||||
sd->stack = st->stack;
|
sd->stack = st->stack;
|
||||||
if (bck_stack) //Get rid of the backup as it can't be restored.
|
if (bck_stack) //Get rid of the backup as it can't be restored.
|
||||||
script_free_stack (bck_stack);
|
script_free_stack (bck_stack);
|
||||||
} else {
|
|
||||||
// and if there was a sd associated - zero vars.
|
|
||||||
if (sd) {
|
|
||||||
//Clear or restore previous script.
|
|
||||||
sd->npc_script = bck_script;
|
|
||||||
sd->npc_scriptroot = bck_scriptroot;
|
|
||||||
sd->npc_scriptstate = bck_scriptstate;
|
|
||||||
sd->stack = bck_stack;
|
|
||||||
//Since the script is done, save any changed account variables [Skotlex]
|
|
||||||
if (sd->state.reg_dirty&2)
|
|
||||||
intif_saveregistry(sd,2);
|
|
||||||
if (sd->state.reg_dirty&1)
|
|
||||||
intif_saveregistry(sd,1);
|
|
||||||
}
|
|
||||||
//aFree(st);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// and if there was a sd associated - zero vars.
|
||||||
|
if (sd) {
|
||||||
|
//Clear or restore previous script.
|
||||||
|
sd->npc_script = bck_script;
|
||||||
|
sd->npc_scriptroot = bck_scriptroot;
|
||||||
|
sd->npc_scriptstate = bck_scriptstate;
|
||||||
|
sd->stack = bck_stack;
|
||||||
|
//Since the script is done, save any changed account variables [Skotlex]
|
||||||
|
if (sd->state.reg_dirty&2)
|
||||||
|
intif_saveregistry(sd,2);
|
||||||
|
if (sd->state.reg_dirty&1)
|
||||||
|
intif_saveregistry(sd,1);
|
||||||
|
}
|
||||||
|
//aFree(st);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return st->pos;
|
return st->pos;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user