A few bug fixes

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@412 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
amber 2004-11-29 05:19:01 +00:00
parent 0f8ee5ebb6
commit c4c0532ffa
8 changed files with 43 additions and 579 deletions

View File

@ -1,5 +1,13 @@
Date Added Date Added
11/28 11/28
* Fixed a crash in login_sql/login.c [MouseJstr]
* made common/socket.c more crash resistant [MouseJstr]
* Added flush_fifos to socket.c so that we can make sure everything
has been sent before we shut the process down [MouseJstr]
* Modified src/char_sql/char.c to flush fifos on exit [MouseJstr]
* Fixed a crash in src/map/map.c shutdown where it would
use the char_fd session after it was alrady cleaned up [MouseJstr]
* removed conf-templ/atcommand_athena.conf.orig [MouseJstr]
* removed a USE from sql-files/main.sql that should not be there [MouseJstr] * removed a USE from sql-files/main.sql that should not be there [MouseJstr]
* Changed MSG_INFO color to bright white, since bright blue want so bright... [MC Cameri] * Changed MSG_INFO color to bright white, since bright blue want so bright... [MC Cameri]
* Made Map Removed: %d string be displayed only if there were maps removed. [MC Cameri] * Made Map Removed: %d string be displayed only if there were maps removed. [MC Cameri]

View File

@ -84,3 +84,7 @@ Problem: Changing email and Broadcast both use the same packets / Packet
Notes: Refer to char.c line 2272 and line 2416, intif.c line 107, chrif.c line 377 Notes: Refer to char.c line 2272 and line 2416, intif.c line 107, chrif.c line 377
Assigned: N/A Assigned: N/A
Progress: 0% Progress: 0%
Problem: Sanctuary heal emp during WoE?
Assigned: N/A
Progress: 0%

View File

@ -1,569 +0,0 @@
// Athena atcommand Configuration file.
// Translated by Peter Kieser <pfak@telus.net>
// Set here the symbol that you want to use for your commands
// Only 1 character is get (default is '@'). You can set any character,
// except control-character (0x00-0x1f), '%' (party chat speaking) and '/' (standard ragnarok GM commands)
// With default character, all commands begin by a '@': <example> @revive
command_symbol: @
// Sets the level of the users that can use the GM commands.
// <command name>: level
// When battle_athena.conf has atcommand_gm_only set to no,
// normal players (gm level 0) can use GM commands if you set 0 to the command level.
// Max GM level is 99. If you want forbid a command to all people, set it with level 100.
// Default values are set to define different GM levels like follow:
// 0: normal player
// -> no special advantage (only @time to know time and if at_command_gm_only is disabled)
// 1: Super player
// -> some (very) little advantages: storage, petrename, etc...
// 10: Super player+
// -> same of Super player with !go (very super player)
// 20: Mediator
// -> it's a GM that only need to know people, and move to their to speak with them (they can access to any command about wisps)
// 40: Sub-GM
// -> This GM can help a GM, and can not create item or zeny or modify a character (can have some information commands)
// 50: Sub-GM+
// -> This GM can change some non-important things on a character
// 60: GM
// -> can do almost anything (excep administration, and mass commands)
// GM is the first level where we can modify a character with important value, create items or create zenys
// 80: GM Chief
// -> can do anything, except administration commands
// 99: Administrator
// -> can do anything!
//--------------------------
// 0: normal player commands
// Give server time. (6 same commands)
time: 0
date: 0
server_date: 0
serverdate: 0
server_time: 0
servertime: 0
// Display your ignore list (people from which you ignore wisps)
ignorelist: 0
// To change your (own) email (characters protection)
// note: this command doesn't check email itself, but check structure of the email (xxx@xxx)
// if you want be sure of each e-mail disable this option (value: 100)
email: 0
// To become GM (need password; password is set in login_athena.conf).
// special!: only a non-GM (player with gm level 0) need to have this command.
// if you change the value, be sure of what you do!
// To be able to create a gm with @gm, you must:
// - give a level to level_new_gm (parameter of login_athena.conf) (not 0)
// - enable to level 0 the @gm command (atcommand_athena.conf) (default 100) - Only level 0 can give access to this command
// - enable gm commands to normal player (battle_athena.conf, atcommand_gm_only parameter)
// - and normal player must give correct password when he use the @gm command (gm_pass paramter in login_athena.conf)
gm: 100
//-------------------------
// 1: Super player commands
// Suicide your character.
die: 1
// Enables you to rename your pet.
petrename: 1
party: 1
// Brings up your personal storage wherever you are.
storage: 1
// Locate someone on a map, returns your coordinates if the person isn't on.
where: 1
//---------------------------
// 10: Super player+ commands
// Spawns you to set points in major cities.
go: 10
//----------------------
// 20: Mediator commands
// Displays helpfile in Athena base directory (2 same commands).
help: 20
h: 20
// Warp yourself to a person (3 same commands + /shift).
jumpto: 20
goto: 20
warpto: 20
// follow a player (including warping to them)
follow: 20
// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit").
kick: 20
// Changes your apperance.
model: 20
// To get a peco to (un)ride
mountpeco: 20
// Returns list of logged in characters with their position (2 same commands).
who: 20
whois: 20
// Returns list of logged in characters with their job.
who2: 20
// Returns list of logged in characters with their party/guild.
who3: 20
// Returns list of logged in characters with their position in a specifical map.
whomap: 20
// Returns list of logged in characters with their job in a specifical map.
whomap2: 20
// Returns list of logged in characters with their party/guild in a specifical map.
whomap3: 20
// Like @who+@who2+who3, but only for GM.
whogm: 20
// Change your appearence to other players to a mob.
disguise: 20
//Restore your normal appearance.
undisguise: 20
// Display ignore list of a player (people from which the player ignore wisps)
charignorelist: 20
// Enable all wispers for a player
inall: 20
// Disable all wispers for a player
exall: 20
//--------------------
// 40: Sub-GM commands
// Broadcast to the whole server. Using (1 command + /nb, /b).
broadcast: 40
// Broadcast to the map you are on (1 command + /lb, /nlb).
local_broadcast: 40
// Broadcast (with or without name).
kami: 40
kamib: 40
// Enables you to go to a certain map, at (x,y) coordinates. (@mapmove + /mm or /mapmove)
mapmove: 40
// Enables you to view other characters stats.
charstats: 40
// Shows Stats Of All Characters Online
charstatsall: 40
// Enables GVG on a map (2 same commands).
gvgon: 40
gpvpon: 40
// Turns GVG (Guild v. Guild) off on a map (2 same commands).
gvgoff: 40
gpvpoff: 40
// Heals a person to full HP/SP.
heal: 40
// GM Hide (enables you to be invisible to characters, and most monsters) (1 command + /hide).
hide: 40
// Changes your job to one you specify (2 same commands).
job: 40
jobchange: 40
// Enables you to to jump randomly on a map (that you are already on).
jump: 40
// Warps you to your last save point (2 same commands).
return: 40
load: 40
// Enables lost skills.
lostskill: 40
// Saves a warp point.
memo: 40
// Set your character display options. (Visual effects of your character)
option: 40
//Makes an egg
makeegg: 40
//Hatches an egg
hatch: 40
// Sets the level of intemecy of your pet.
petfriendly: 40
// Sets hunger level of your pet.
pethungry: 40
// Turns PVP (Person v. Person) off on a map.
pvpoff: 40
// Enables PVP on a map.
pvpon: 40
// Enables platinum skills.
questskill: 40
// Sets the speed you can walk/attack at. Default is 150.
speed: 40
// Enables spirit sphere balls.
spiritball: 40
// Warp yourself to a certain map, at (x,y) coordinates (2 same commands).
rura: 40
warp: 40
// Changes GM clothes color (2 same commands)
dye: 40
ccolor: 40
// Changes GM hair style (2 same commands)
hairstyle: 40
hstyle: 40
// Changes GM hair color (2 same commands)
haircolor: 40
hcolor: 40
// Deletes all your items.
itemreset: 40
// Kill all monsters in map (without drops)
killmonster2: 40
// Sets your spawn point (aka save point).
save: 40
// Do some visual effect on your character
effect: 40
// Display all items of a player
charitemlist: 40
// Display all items of a player's storage
charstoragelist: 40
// Display all items of a player's cart
charcartlist: 40
//---------------------
// 50: Sub-GM+ commands
// Changes character's model
charmodel: 50
guild: 50
// Brings up your guild storage wherever you are.
gstorage: 50
// Spawns a monster, and a certain amount (3 same commands + /monster).
spawn: 50
monster: 50
summon: 50
// Spawns a monster with parameters not in same order of @spawn.
monster2: 50
// To get a peco to (un)ride for another player.
charmountpeco: 50
// Enables to give possibility to a player to rename his/her pet.
charpetrename: 50
//----------------
// 60: GM commands
// Starts Guild Wars
agitstart: 60
// Ends Guild Wars
agitend: 60
// Resurects yourself.
alive: 60
// Levels your character to specified level (adds to your level) (3 same commands).
lvup: 60
baselvlup: 60
blevel: 60
// Raises your job level (3 same commands).
joblvup: 60
joblvlup: 60
jlevel: 60
// Sets another persons base level.
charbaselvl: 60
// Changes the sex of an online player (all characters on the account)
charchangesex: 60
// Remove items from a character
chardelitem: 60
// Sets another persons job level.
charjlvl: 60
// Sets the job of another character (2 same commands).
charjob: 60
charjobchange: 60
// Set options on another character.
charoption: 60
// Gives another character status points
charstpoint: 60
// Gives another character skill points
charskpoint: 60
// Resets another character's stats
charreset: 60
// Resets another character's status, skills
charstreset: 60
charskreset: 60
// Saves the respawn point of another character.
charsave: 60
// Changes another character's zenny
charzeny: 60
// Levels your guild to specified level (2 same commands).
guildlvup: 60
guildlvlup: 60
idsearch: 60
// Creates an item of your choosing, either Item ID or Name (1 command + /item).
item: 60
// Creates a complet item (card, etc...) of your choosing, either Item ID or Name.
item2: 60
// ??
itemcheck: 60
// Kill another character without hitting them.
kill: 60
// Kill all monsters in map (with drops)
killmonster: 60
// Creates yourself a pet egg, have to use Pet ID.
makeegg: 60
// Instantly kills player whose name is entered and deals insane damage to everything around.
nuke: 60
// Enable hitting a player even when not in pvp
killer: 60
// Creates weapon of desired element.
produce: 60
// Warps a character to you (1 command + /recall).
recall: 60
// Refines all weapons in your items list.
refine: 60
// Will repair all broken items in inventory.
repairall: 60
// Revives a character, and heals them.
revive: 60
// Warp another person to a certain map, at (x,y) coordinates (2 same commands).
rura+: 60
charwarp: 60
// Change Status of your character
str: 60
agi: 60
vit: 60
int: 60
dex: 60
luk: 60
// Gets all skills (4 same commands)
allskill: 60
allskills: 60
skillall: 60
skillsall: 60
// sets GM stats to maximum (4 same commands)
statall: 60
statsall: 60
allstats: 60
allstat: 60
// Gives you job points.
stpoint: 60
// Gives you skill points of desired amount.
skpoint: 60
// Warps all online character of a guild to you. (at least one member of that guild must be on.)
guildrecall: 60
// Warps all online character of a party to you. (at least one party member must be online.)
partyrecall: 60
// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.)
guildspy: 60
//Allows you to spy on any party's party chat. (at least one party member must be online.)
partyspy: 60
// Gives you money (zeny) of desired amount.
zeny: 60
// To block definitively a player (only administrator can unblock the account) (2 same commands)
block: 60
charblock: 60
// To unblock a player (2 same commands)
unblock: 60
charunblock: 60
// To ban a player for a limited time (only administrator can unban the account) (4 same commands)
ban: 60
banish: 60
charban: 60
charbanish: 60
// To unban a player (4 same commands)
unban: 60
unbanish: 60
charunban: 60
charunbanish: 60
// To send specified character in jails
jail: 60
// To discharge a prisoner (2 same commands)
unjail: 60
discharge: 60
// To change disguise of another player/GM
chardisguise: 60
charundisguise: 60
// Enables platinum skills of another player.
charquestskill: 60
// Enables lost skills of another player.
charlostskill: 60
// turn on and off skills on a map
skillon: 60
skilloff: 60
// Create a static warp portal that lasts until the next reboot
addwarp: 60
//----------------------
// 80: GM Chief commands
// Set the map you are on to day.
day: 80
// Kills everyone on the server.
doom: 80
// Kills everyone on the map you are on.
doommap: 80
// Set the map you are currently on to night.
night: 80
// Recalls Everyone To Your Coordinates
recallall: 80
// Revives all players on the map.
raisemap: 80
// Revives all players on the server.
raise: 80
// Enables a NPC.
enablenpc: 80
// Disables a NPC.
disablenpc: 80
// Move a NPC
npcmove: 80
//---------------------------
// 99: Administrator commands
// Disconnect all users from the server
kickall: 99
// Closes Map-Server
mapexit: 99
// Give information about terrain/area (debug function)
gat: 99
// Enables debugging
packet: 99
// Shows information about the map
mapinfo: 99
// Re-load item database (admin command)
reloaditemdb: 99
// Re-load monsters database (admin command)
reloadmobdb: 99
// Re-load skills database (admin command)
reloadskilldb: 99
// Re-load scripts (admin command)
reloadscript: 99
// Re-load GM level (admin command)
reloadgmdb: 99
//---------------------
// OTHER: not a command
//import: conf/import/atcommand_conf.txt

View File

@ -2755,21 +2755,25 @@ void do_final(void) {
do_final_itemdb(); do_final_itemdb();
//check SQL save progress. //check SQL save progress.
//wait until save char complete //wait until save char complete
printf("waiting until char saving complete...\n");
do {
sleep (0);
}while (save_flag != 0);
set_all_offline(); set_all_offline();
flush_fifos_for_final();
sprintf(tmp_sql,"DELETE FROM `ragsrvinfo"); sprintf(tmp_sql,"DELETE FROM `ragsrvinfo");
if (mysql_query(&mysql_handle, tmp_sql)) { if (mysql_query(&mysql_handle, tmp_sql))
printf("DB server Error (insert `char`)- %s\n", mysql_error(&mysql_handle)); printf("DB server Error (insert `char`)- %s\n", mysql_error(&mysql_handle));
if(gm_account) {
free(gm_account);
gm_account = 0;
} }
if(gm_account) free(gm_account); if(char_dat) {
free(char_dat);
char_dat = 0;
}
if(char_dat) free(char_dat);
delete_session(login_fd); delete_session(login_fd);
delete_session(char_fd); delete_session(char_fd);

View File

@ -121,8 +121,10 @@ static int send_from_fifo(int fd)
int len; int len;
//printf("send_from_fifo : %d\n",fd); //printf("send_from_fifo : %d\n",fd);
if(session[fd]->eof) if(session[fd]->eof || session[fd]->wdata == 0)
return -1; return -1;
if (session[fd]->wdata_size == 0)
return 0;
#ifdef _WIN32 #ifdef _WIN32
len=send(fd, session[fd]->wdata,session[fd]->wdata_size, 0); len=send(fd, session[fd]->wdata,session[fd]->wdata_size, 0);
@ -148,6 +150,15 @@ static int send_from_fifo(int fd)
return 0; return 0;
} }
void flush_fifos_for_final()
{
int i;
for(i=0;i<fd_max;i++)
if(session[i] != NULL &&
session[i]->func_send == send_from_fifo)
send_from_fifo(i);
}
static int null_parse(int fd) static int null_parse(int fd)
{ {
printf("null_parse : %d\n",fd); printf("null_parse : %d\n",fd);

View File

@ -90,6 +90,8 @@ int do_sendrecv(int next);
int do_parsepacket(void); int do_parsepacket(void);
void do_socket(void); void do_socket(void);
extern void flush_fifos_for_final();
int start_console(void); int start_console(void);
void set_defaultparse(int (*defaultparse)(int)); void set_defaultparse(int (*defaultparse)(int));

View File

@ -163,7 +163,7 @@ void add_online_user(int account_id) {
printf("add_online_user: memory allocation failure (malloc)!\n"); printf("add_online_user: memory allocation failure (malloc)!\n");
exit(0); exit(0);
} }
p = &account_id; *p = account_id;
numdb_insert(online_db, account_id, p); numdb_insert(online_db, account_id, p);
} }

View File

@ -2159,6 +2159,10 @@ void do_final(void) {
map_foreachinarea(cleanup_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, 0, 0); map_foreachinarea(cleanup_sub, map_id, 0, 0, map[map_id].xs, map[map_id].ys, 0, 0);
} }
#ifndef TXT_ONLY
chrif_char_reset_offline();
#endif
for (i = 0; i < fd_max; i++) for (i = 0; i < fd_max; i++)
delete_session(i); delete_session(i);
@ -2181,8 +2185,8 @@ void do_final(void) {
do_final_itemdb(); do_final_itemdb();
do_final_storage(); do_final_storage();
do_final_guild(); do_final_guild();
#ifndef TXT_ONLY #ifndef TXT_ONLY
chrif_char_reset_offline();
map_sql_close(); map_sql_close();
#endif /* not TXT_ONLY */ #endif /* not TXT_ONLY */
} }