* Collection of random insignificant changes.

- Added progress indication on map-server shutdown when objects are removed from maps, as it takes significant amount of time to complete.
- Moved ers_free in db_obj_vclear, so that the node pointer is not used for comparison after it has been freed.
- Some documentation of shop packets.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14639 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ai4rei 2010-12-29 21:31:36 +00:00
parent 73ea4abec4
commit 33d2446b11
6 changed files with 44 additions and 12 deletions

View File

@ -1,6 +1,10 @@
Date Added Date Added
2010/12/29 2010/12/29
* Collection of random insignificant changes. [Ai4rei]
- Added progress indication on map-server shutdown when objects are removed from maps, as it takes significant amount of time to complete.
- Moved ers_free in db_obj_vclear, so that the node pointer is not used for comparison after it has been freed.
- Some documentation of shop packets.
* Fixed 'console' plugin not working on Windows, due to NULL passed to CreateThread instead of required pointer to thread id variable. [Ai4rei] * Fixed 'console' plugin not working on Windows, due to NULL passed to CreateThread instead of required pointer to thread id variable. [Ai4rei]
- Fixed 'console' plugin causing delete_timer error when it fails to load, due to uninitialized variable. - Fixed 'console' plugin causing delete_timer error when it fails to load, due to uninitialized variable.
* Renamed plugin.def to sample.def and added 'sample' plugin exports into it, as it's purpose is nothing than a sample right now. * Renamed plugin.def to sample.def and added 'sample' plugin exports into it, as it's purpose is nothing than a sample right now.

View File

@ -1976,13 +1976,13 @@ static int db_obj_vclear(DBMap* self, DBApply func, va_list args)
node->deleted = 1; node->deleted = 1;
} }
DB_COUNTSTAT(db_node_free); DB_COUNTSTAT(db_node_free);
ers_free(db->nodes, node);
if (parent) { if (parent) {
if (parent->left == node) if (parent->left == node)
parent->left = NULL; parent->left = NULL;
else else
parent->right = NULL; parent->right = NULL;
} }
ers_free(db->nodes, node);
node = parent; node = parent;
} }
db->ht[i] = NULL; db->ht[i] = NULL;

View File

@ -9562,9 +9562,11 @@ void clif_parse_NpcBuyListSend(int fd, struct map_session_data* sd)
WFIFOSET(fd,packet_len(0xca)); WFIFOSET(fd,packet_len(0xca));
} }
/*========================================== /// Request to sell chosen items to npc shop
* /// R 00c9 <packet len>.W {<index>.W <amount>.W}.4B*
*------------------------------------------*/ /// S 00cb <result>.B
/// result = 00 -> "The deal has successfully completed."
/// result = 01 -> "The deal has failed."
void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd) void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd)
{ {
int fail=0,n; int fail=0,n;
@ -11674,7 +11676,7 @@ void clif_parse_GMReqAccountName(int fd, struct map_session_data *sd)
* S 0198 <x>.W <y>.W <gat>.W * S 0198 <x>.W <y>.W <gat>.W
*------------------------------------------*/ *------------------------------------------*/
void clif_parse_GMChangeMapType(int fd, struct map_session_data *sd) void clif_parse_GMChangeMapType(int fd, struct map_session_data *sd)
{// FIXME: type sent by client is 0 or 1 (even if you enter 2+); that suggests, that it is walkable gat attribute {
int x,y,type; int x,y,type;
if( battle_config.atc_gmonly && !pc_isGM(sd) ) if( battle_config.atc_gmonly && !pc_isGM(sd) )
@ -13139,6 +13141,31 @@ void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd)
WFIFOSET(fd,WFIFOW(fd,2)); WFIFOSET(fd,WFIFOW(fd,2));
} }
/// Cashshop Buy Ack (ZC_PC_CASH_POINT_UPDATE)
/// S 0289 <cash point>.L <kafra point>.L <error>.W
///
/// @param error
/// 0: The deal has successfully completed. (ERROR_TYPE_NONE)
/// 1: The Purchase has failed because the NPC does not exist. (ERROR_TYPE_NPC)
/// 2: The Purchase has failed because the Kafra Shop System is not working correctly. (ERROR_TYPE_SYSTEM)
/// 3: You are over your Weight Limit. (ERROR_TYPE_INVENTORY_WEIGHT)
/// 4: You cannot purchase items while you are in a trade. (ERROR_TYPE_EXCHANGE)
/// 5: The Purchase has failed because the Item Information was incorrect. (ERROR_TYPE_ITEM_ID)
/// 6: You do not have enough Kafra Credit Points. (ERROR_TYPE_MONEY)
/// 7: You can purchase up to 10 items.
/// 8: Some items could not be purchased.
void clif_cashshop_ack(struct map_session_data* sd, int error)
{
int fd = sd->fd;
WFIFOHEAD(fd, packet_len(0x289));
WFIFOW(fd,0) = 0x289;
WFIFOL(fd,2) = sd->cashPoints;
WFIFOL(fd,6) = sd->kafraPoints;
WFIFOW(fd,10) = TOW(error);
WFIFOSET(fd, packet_len(0x289));
}
void clif_parse_cashshop_buy(int fd, struct map_session_data *sd) void clif_parse_cashshop_buy(int fd, struct map_session_data *sd)
{ {
int fail = 0, amount, points; int fail = 0, amount, points;
@ -13154,12 +13181,7 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd)
else else
fail = npc_cashshop_buy(sd, nameid, amount, points); fail = npc_cashshop_buy(sd, nameid, amount, points);
WFIFOHEAD(fd,12); clif_cashshop_ack(sd, fail);
WFIFOW(fd,0) = 0x289;
WFIFOL(fd,2) = sd->cashPoints;
WFIFOL(fd,6) = sd->kafraPoints;
WFIFOW(fd,10) = fail;
WFIFOSET(fd,12);
} }
/*========================================== /*==========================================

View File

@ -3412,9 +3412,14 @@ void do_final(void)
ShowStatus("Terminating...\n"); ShowStatus("Terminating...\n");
// remove all objects on maps
for (i = 0; i < map_num; i++) for (i = 0; i < map_num; i++)
{
ShowStatus("Cleaning up maps [%d/%d]: %s..."CL_CLL"\r", i+1, map_num, map[i].name);
if (map[i].m >= 0) if (map[i].m >= 0)
map_foreachinmap(cleanup_sub, i, BL_ALL); map_foreachinmap(cleanup_sub, i, BL_ALL);
}
ShowStatus("Cleaned up %d maps."CL_CLL"\n", map_num);
//Scan any remaining players (between maps?) to kick them out. [Skotlex] //Scan any remaining players (between maps?) to kick them out. [Skotlex]
iter = mapit_getallusers(); iter = mapit_getallusers();

View File

@ -3210,6 +3210,7 @@ int pc_checkadditem(struct map_session_data *sd,int nameid,int amount)
return ADDITEM_NEW; return ADDITEM_NEW;
for(i=0;i<MAX_INVENTORY;i++){ for(i=0;i<MAX_INVENTORY;i++){
// FIXME: This does not consider the checked item's cards, thus could check a wrong slot for stackability.
if(sd->status.inventory[i].nameid==nameid){ if(sd->status.inventory[i].nameid==nameid){
if(sd->status.inventory[i].amount+amount > MAX_AMOUNT) if(sd->status.inventory[i].amount+amount > MAX_AMOUNT)
return ADDITEM_OVERAMOUNT; return ADDITEM_OVERAMOUNT;

View File

@ -6191,7 +6191,7 @@ BUILDIN_FUNC(readparam)
if( script_hasdata(st,3) ) if( script_hasdata(st,3) )
sd=map_nick2sd(script_getstr(st,3)); sd=map_nick2sd(script_getstr(st,3));
else else
sd=script_rid2sd(st); sd=script_rid2sd(st);
if(sd==NULL){ if(sd==NULL){
script_pushint(st,-1); script_pushint(st,-1);