Picklog improvements:
- now it is finally possible to log every item players gain or lose - added 3 log types: `I` for auctioned items, `B` for buying shop transactions and `X` for all other items transactions that don't fall into another category (for detailed explanation on all log types read `conf/log_athena.conf`) - it also fixes items being logged as picked up/gained by player when in fact they were dropped on the ground due to full inventory git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15420 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
dbe0718739
commit
8b3a63cf11
@ -8,25 +8,28 @@
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// Enable Logs? (Note 3)
|
||||
// 0x0000 - Don't log at all
|
||||
// 0x0001 - (T) Log trades
|
||||
// 0x0002 - (V) Log vending transactions
|
||||
// 0x0004 - (P) Log items drop/picked by players
|
||||
// 0x0008 - (L) Log items drop/looted by monsters
|
||||
// 0x0010 - (S) Log NPC transactions (buy/sell)
|
||||
// 0x0020 - (N) Log Script transactions (items deleted/acquired through quests)
|
||||
// 0x0040 - (D) Log items stolen from mobs (Steal/Gank)
|
||||
// 0x0080 - (C) Log player-used items
|
||||
// 0x0100 - (O) Log produced/ingredient items
|
||||
// 0x0200 - (U) Log MVP prize items
|
||||
// 0x0400 - (A) Log player created/deleted items (through @/# commands)
|
||||
// 0x0800 - (R) Log items placed/retrieved from storage.
|
||||
// 0x1000 - (G) Log items placed/retrieved from guild storage.
|
||||
// 0x2000 - (E) Log mail system transactions.
|
||||
// 0x4000 - (I) Log auction system transactions.
|
||||
// 0x8000 - (B) Log buying store transactions
|
||||
// 0x00000 - Don't log at all
|
||||
// 0x00001 - (T) Log trades
|
||||
// 0x00002 - (V) Log vending transactions
|
||||
// 0x00004 - (P) Log items drop/picked by players
|
||||
// 0x00008 - (L) Log items drop/looted by monsters
|
||||
// 0x00010 - (S) Log NPC transactions (buy/sell)
|
||||
// 0x00020 - (N) Log Script transactions (items deleted/acquired through quests)
|
||||
// 0x00040 - (D) Log items stolen from mobs (Steal/Gank)
|
||||
// 0x00080 - (C) Log player-used items (consumables/pet&hom&merc food/items used for skills&attacks)
|
||||
// 0x00100 - (O) Log produced/ingredient items
|
||||
// 0x00200 - (U) Log MVP prize items
|
||||
// 0x00400 - (A) Log player created/deleted items (through @/# commands)
|
||||
// 0x00800 - (R) Log items placed/retrieved from storage.
|
||||
// 0x01000 - (G) Log items placed/retrieved from guild storage.
|
||||
// 0x02000 - (E) Log mail system transactions.
|
||||
// 0x04000 - (I) Log auction system transactions.
|
||||
// 0x08000 - (B) Log buying store transactions
|
||||
// 0x10000 - (X) Log all other transcations (rentals expiring/inserting cards/items removed by item_check/
|
||||
// rings deleted by divorce/pet egg (un)hatching/pet armor (un)equipping/Weapon Refine skill/Remove Trap skill)
|
||||
// Example: Log trades+vending+script items+created items: 1+2+32+1024 = 1059
|
||||
enable_logs: 0xFFFF
|
||||
// Please note that moving items from inventory to cart and back is not logged by design.
|
||||
enable_logs: 0xFFFFF
|
||||
|
||||
// Use MySQL Logs? [SQL Version Only] (Note 1)
|
||||
sql_logs: no
|
||||
|
@ -1,7 +1,8 @@
|
||||
#PickLog types (M)onsters Drop, (P)layers Drop/Take, Mobs Drop (L)oot Drop/Take,
|
||||
# Players (T)rade Give/Take, Players (V)ending Sell/Take, (S)hop Sell/Take, (N)PC Give/Take,
|
||||
# (C)onsumable Items, (A)dministrators Create/Delete, Sto(R)age, (G)uild Storage,
|
||||
# (E)mail attachment,(B)uying Store
|
||||
# (E)mail attachment,(B)uying Store, Pr(O)duced Items/Ingredients, Auct(I)oned Items,
|
||||
# (X) Other
|
||||
|
||||
#Database: log
|
||||
#Table: picklog
|
||||
@ -9,7 +10,7 @@ CREATE TABLE `picklog` (
|
||||
`id` int(11) NOT NULL auto_increment,
|
||||
`time` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`char_id` int(11) NOT NULL default '0',
|
||||
`type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B') NOT NULL default 'P',
|
||||
`type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X') NOT NULL default 'P',
|
||||
`nameid` int(11) NOT NULL default '0',
|
||||
`amount` int(11) NOT NULL default '1',
|
||||
`refine` tinyint(3) unsigned NOT NULL default '0',
|
||||
|
3
sql-files/upgrade_svn15420_log.sql
Normal file
3
sql-files/upgrade_svn15420_log.sql
Normal file
@ -0,0 +1,3 @@
|
||||
-- Adds 'I' and 'X' to `type` in `picklog` table
|
||||
|
||||
ALTER TABLE `picklog` MODIFY `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X') NOT NULL DEFAULT 'P';
|
@ -1722,14 +1722,11 @@ ACMD_FUNC(item)
|
||||
item_tmp.nameid = item_id;
|
||||
item_tmp.identify = 1;
|
||||
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count)))
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
}
|
||||
}
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, item_id, number, NULL);
|
||||
|
||||
clif_displaymessage(fd, msg_txt(18)); // Item created.
|
||||
return 0;
|
||||
}
|
||||
@ -1797,13 +1794,10 @@ ACMD_FUNC(item2)
|
||||
item_tmp.card[1] = c2;
|
||||
item_tmp.card[2] = c3;
|
||||
item_tmp.card[3] = c4;
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count)))
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
}
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, item_tmp.nameid, number, &item_tmp);
|
||||
|
||||
clif_displaymessage(fd, msg_txt(18)); // Item created.
|
||||
} else {
|
||||
clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name.
|
||||
@ -1823,11 +1817,7 @@ ACMD_FUNC(itemreset)
|
||||
|
||||
for (i = 0; i < MAX_INVENTORY; i++) {
|
||||
if (sd->status.inventory[i].amount && sd->status.inventory[i].equip == 0) {
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, sd->status.inventory[i].nameid, -sd->status.inventory[i].amount, &sd->status.inventory[i]);
|
||||
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_COMMAND);
|
||||
}
|
||||
}
|
||||
clif_displaymessage(fd, msg_txt(20)); // All of your items have been removed.
|
||||
@ -2887,10 +2877,7 @@ ACMD_FUNC(produce)
|
||||
clif_produceeffect(sd, 0, item_id);
|
||||
clif_misceffect(&sd->bl, 3);
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, tmp_item.nameid, 1, &tmp_item);
|
||||
|
||||
if ((flag = pc_additem(sd, &tmp_item, 1)))
|
||||
if ((flag = pc_additem(sd, &tmp_item, 1, LOG_TYPE_COMMAND)))
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
} else {
|
||||
sprintf(atcmd_output, msg_txt(169), item_id, item_data->name); // The item (%d: '%s') is not equipable.
|
||||
@ -5970,10 +5957,7 @@ void getring (struct map_session_data* sd)
|
||||
item_tmp.card[2] = sd->status.partner_id;
|
||||
item_tmp.card[3] = sd->status.partner_id >> 16;
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, item_id, 1, &item_tmp);
|
||||
|
||||
if((flag = pc_additem(sd,&item_tmp,1))) {
|
||||
if((flag = pc_additem(sd,&item_tmp,1,LOG_TYPE_COMMAND))) {
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -8747,11 +8731,7 @@ ACMD_FUNC(delitem)
|
||||
{// delete pet
|
||||
intif_delete_petdata(MakeDWord(sd->status.inventory[idx].card[1], sd->status.inventory[idx].card[2]));
|
||||
}
|
||||
|
||||
//Logs (A)dmins items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_COMMAND, nameid, -delamount, &sd->status.inventory[idx]);
|
||||
|
||||
pc_delitem(sd, idx, delamount, 0, 0);
|
||||
pc_delitem(sd, idx, delamount, 0, 0, LOG_TYPE_COMMAND);
|
||||
|
||||
amount-= delamount;
|
||||
}
|
||||
|
@ -1005,7 +1005,7 @@ void battle_consume_ammo(TBL_PC*sd, int skill, int lv)
|
||||
}
|
||||
|
||||
if(sd->equip_index[EQI_AMMO]>=0) //Qty check should have been done in skill_check_condition
|
||||
pc_delitem(sd,sd->equip_index[EQI_AMMO],qty,0,1);
|
||||
pc_delitem(sd,sd->equip_index[EQI_AMMO],qty,0,1,LOG_TYPE_CONSUME);
|
||||
|
||||
sd->state.arrow_atk = 0;
|
||||
}
|
||||
|
@ -367,13 +367,11 @@ void buyingstore_trade(struct map_session_data* sd, int account_id, unsigned int
|
||||
zeny = amount*pl_sd->buyingstore.items[listidx].price;
|
||||
|
||||
// log
|
||||
log_pick_pc(sd, LOG_TYPE_BUYING_STORE, nameid, -((int)amount), &sd->status.inventory[index]);
|
||||
log_pick_pc(pl_sd, LOG_TYPE_BUYING_STORE, nameid, amount, &sd->status.inventory[index]);
|
||||
log_zeny(sd, LOG_TYPE_BUYING_STORE, pl_sd, zeny);
|
||||
|
||||
// move item
|
||||
pc_additem(pl_sd, &sd->status.inventory[index], amount);
|
||||
pc_delitem(sd, index, amount, 1, 0);
|
||||
pc_additem(pl_sd, &sd->status.inventory[index], amount, LOG_TYPE_BUYING_STORE);
|
||||
pc_delitem(sd, index, amount, 1, 0, LOG_TYPE_BUYING_STORE);
|
||||
pl_sd->buyingstore.items[listidx].amount-= amount;
|
||||
|
||||
// pay up
|
||||
|
@ -937,7 +937,7 @@ int chrif_divorceack(int char_id, int partner_id)
|
||||
sd->status.partner_id = 0;
|
||||
for(i = 0; i < MAX_INVENTORY; i++)
|
||||
if (sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
|
||||
pc_delitem(sd, i, 1, 0, 0);
|
||||
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
|
||||
if( (sd = map_charid2sd(partner_id)) != NULL && sd->status.partner_id == char_id )
|
||||
@ -945,7 +945,7 @@ int chrif_divorceack(int char_id, int partner_id)
|
||||
sd->status.partner_id = 0;
|
||||
for(i = 0; i < MAX_INVENTORY; i++)
|
||||
if (sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F)
|
||||
pc_delitem(sd, i, 1, 0, 0);
|
||||
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -12783,7 +12783,7 @@ void clif_parse_AutoRevive(int fd, struct map_session_data *sd)
|
||||
return;
|
||||
|
||||
clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
|
||||
pc_delitem(sd, item_position, 1, 0, 1);
|
||||
pc_delitem(sd, item_position, 1, 0, 1, LOG_TYPE_CONSUME);
|
||||
}
|
||||
|
||||
|
||||
@ -13532,7 +13532,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
|
||||
clif_Auction_message(fd, 4); // No Char Server? lets say something to the client
|
||||
else
|
||||
{
|
||||
pc_delitem(sd, sd->auction.index, sd->auction.amount, 1, 6);
|
||||
pc_delitem(sd, sd->auction.index, sd->auction.amount, 1, 6, LOG_TYPE_AUCTION);
|
||||
sd->auction.amount = 0;
|
||||
pc_payzeny(sd, auction.hours * battle_config.auction_feeperhour);
|
||||
}
|
||||
|
@ -399,7 +399,7 @@ int guild_created(int account_id,int guild_id)
|
||||
sd->status.guild_id=guild_id;
|
||||
clif_guild_created(sd,0);
|
||||
if(battle_config.guild_emperium_check)
|
||||
pc_delitem(sd,pc_search_inventory(sd,714),1,0,0); // エンペリウム消耗
|
||||
pc_delitem(sd,pc_search_inventory(sd,714),1,0,0,LOG_TYPE_CONSUME); // エンペリウム消耗
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -445,8 +445,7 @@ int merc_hom_food(struct map_session_data *sd, struct homun_data *hd)
|
||||
clif_hom_food(sd,foodID,0);
|
||||
return 1;
|
||||
}
|
||||
log_pick_pc(sd, LOG_TYPE_CONSUME, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);
|
||||
pc_delitem(sd,i,1,0,0);
|
||||
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
|
||||
|
||||
if ( hd->homunculus.hunger >= 91 ) {
|
||||
merc_hom_decrease_intimacy(hd, 50);
|
||||
|
@ -1772,7 +1772,7 @@ static void intif_parse_Auction_register(int fd)
|
||||
else
|
||||
{
|
||||
clif_Auction_message(sd->fd, 4);
|
||||
pc_additem(sd, &auction.item, auction.item.amount);
|
||||
pc_additem(sd, &auction.item, auction.item.amount, LOG_TYPE_AUCTION);
|
||||
pc_getzeny(sd, auction.hours * battle_config.auction_feeperhour);
|
||||
}
|
||||
}
|
||||
|
@ -64,20 +64,21 @@ static char log_picktype2char(e_log_pick_type type)
|
||||
case LOG_TYPE_SCRIPT: return 'N'; // (N)PC Script
|
||||
//case LOG_TYPE_STEAL: return 'D'; // Steal/Snatcher
|
||||
case LOG_TYPE_CONSUME: return 'C'; // (C)onsumed
|
||||
//case LOG_TYPE_PRODUCE: return 'O'; // Pr(O)duced/Ingredients
|
||||
case LOG_TYPE_PRODUCE: return 'O'; // Pr(O)duced/Ingredients
|
||||
//case LOG_TYPE_MVP: return 'U'; // MVP Rewards
|
||||
case LOG_TYPE_COMMAND: return 'A'; // (A)dmin command
|
||||
case LOG_TYPE_STORAGE: return 'R'; // Sto(R)age
|
||||
case LOG_TYPE_GSTORAGE: return 'G'; // (G)uild storage
|
||||
case LOG_TYPE_MAIL: return 'E'; // (E)mail attachment
|
||||
//case LOG_TYPE_AUCTION: return 'I'; // Auct(I)on
|
||||
case LOG_TYPE_AUCTION: return 'I'; // Auct(I)on
|
||||
case LOG_TYPE_BUYING_STORE: return 'B'; // (B)uying Store
|
||||
case LOG_TYPE_LOOT: return 'L'; // (L)oot (consumed monster pick/drop)
|
||||
case LOG_TYPE_OTHER: return 'X'; // Other
|
||||
}
|
||||
|
||||
// should not get here, fallback
|
||||
ShowDebug("log_picktype2char: Unknown pick type %d.\n", type);
|
||||
return 'S';
|
||||
return 'X';
|
||||
}
|
||||
|
||||
|
||||
|
@ -26,26 +26,28 @@ e_log_chat_type;
|
||||
|
||||
typedef enum e_log_pick_type
|
||||
{
|
||||
LOG_TYPE_TRADE = 0x0001,
|
||||
LOG_TYPE_VENDING = 0x0002,
|
||||
LOG_TYPE_PICKDROP_PLAYER = 0x0004,
|
||||
LOG_TYPE_PICKDROP_MONSTER = 0x0008,
|
||||
LOG_TYPE_NPC = 0x0010,
|
||||
LOG_TYPE_SCRIPT = 0x0020,
|
||||
//LOG_TYPE_STEAL = 0x0040,
|
||||
LOG_TYPE_CONSUME = 0x0080,
|
||||
//LOG_TYPE_PRODUCE = 0x0100,
|
||||
//LOG_TYPE_MVP = 0x0200,
|
||||
LOG_TYPE_COMMAND = 0x0400,
|
||||
LOG_TYPE_STORAGE = 0x0800,
|
||||
LOG_TYPE_GSTORAGE = 0x1000,
|
||||
LOG_TYPE_MAIL = 0x2000,
|
||||
//LOG_TYPE_AUCTION = 0x4000,
|
||||
LOG_TYPE_BUYING_STORE = 0x8000,
|
||||
LOG_TYPE_NONE = 0,
|
||||
LOG_TYPE_TRADE = 0x00001,
|
||||
LOG_TYPE_VENDING = 0x00002,
|
||||
LOG_TYPE_PICKDROP_PLAYER = 0x00004,
|
||||
LOG_TYPE_PICKDROP_MONSTER = 0x00008,
|
||||
LOG_TYPE_NPC = 0x00010,
|
||||
LOG_TYPE_SCRIPT = 0x00020,
|
||||
//LOG_TYPE_STEAL = 0x00040,
|
||||
LOG_TYPE_CONSUME = 0x00080,
|
||||
LOG_TYPE_PRODUCE = 0x00100,
|
||||
//LOG_TYPE_MVP = 0x00200,
|
||||
LOG_TYPE_COMMAND = 0x00400,
|
||||
LOG_TYPE_STORAGE = 0x00800,
|
||||
LOG_TYPE_GSTORAGE = 0x01000,
|
||||
LOG_TYPE_MAIL = 0x02000,
|
||||
LOG_TYPE_AUCTION = 0x04000,
|
||||
LOG_TYPE_BUYING_STORE = 0x08000,
|
||||
LOG_TYPE_OTHER = 0x10000,
|
||||
// combinations
|
||||
LOG_TYPE_LOOT = LOG_TYPE_PICKDROP_MONSTER|LOG_TYPE_CONSUME,
|
||||
// all
|
||||
LOG_TYPE_ALL = 0xFFFF,
|
||||
LOG_TYPE_ALL = 0xFFFFF,
|
||||
}
|
||||
e_log_pick_type;
|
||||
|
||||
|
@ -33,12 +33,8 @@ int mail_removeitem(struct map_session_data *sd, short flag)
|
||||
|
||||
if( sd->mail.amount )
|
||||
{
|
||||
if (flag)
|
||||
{ // Item send
|
||||
log_pick_pc(sd, LOG_TYPE_MAIL, sd->mail.nameid, -sd->mail.amount, &sd->status.inventory[sd->mail.index]);
|
||||
|
||||
pc_delitem(sd, sd->mail.index, sd->mail.amount, 1, 0);
|
||||
}
|
||||
if (flag) // Item send
|
||||
pc_delitem(sd, sd->mail.index, sd->mail.amount, 1, 0, LOG_TYPE_MAIL);
|
||||
else
|
||||
clif_additem(sd, sd->mail.index, sd->mail.amount, 0);
|
||||
}
|
||||
@ -141,15 +137,12 @@ void mail_getattachment(struct map_session_data* sd, int zeny, struct item* item
|
||||
{
|
||||
if( item->nameid > 0 && item->amount > 0 )
|
||||
{
|
||||
pc_additem(sd, item, item->amount);
|
||||
|
||||
log_pick_pc(sd, LOG_TYPE_MAIL, item->nameid, item->amount, item);
|
||||
|
||||
pc_additem(sd, item, item->amount, LOG_TYPE_MAIL);
|
||||
clif_Mail_getattachment(sd->fd, 0);
|
||||
}
|
||||
|
||||
if( zeny > 0 )
|
||||
{ //Zeny recieve
|
||||
{ //Zeny receive
|
||||
log_zeny(sd, LOG_TYPE_MAIL, sd, zeny);
|
||||
pc_getzeny(sd, zeny);
|
||||
}
|
||||
@ -174,15 +167,13 @@ void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg)
|
||||
|
||||
if( msg->item.amount > 0 )
|
||||
{
|
||||
// Item recieve (due to failure)
|
||||
log_pick_pc(sd, LOG_TYPE_MAIL, msg->item.nameid, msg->item.amount, &msg->item);
|
||||
|
||||
pc_additem(sd, &msg->item, msg->item.amount);
|
||||
// Item receive (due to failure)
|
||||
pc_additem(sd, &msg->item, msg->item.amount, LOG_TYPE_MAIL);
|
||||
}
|
||||
|
||||
if( msg->zeny > 0 )
|
||||
{
|
||||
//Zeny recieve (due to failure)
|
||||
//Zeny receive (due to failure)
|
||||
log_zeny(sd, LOG_TYPE_MAIL, sd, msg->zeny);
|
||||
|
||||
sd->status.zeny += msg->zeny;
|
||||
|
@ -2403,15 +2403,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
intif_broadcast(message,strlen(message)+1,0);
|
||||
}
|
||||
|
||||
if((temp = pc_additem(mvp_sd,&item,1)) != 0) {
|
||||
if((temp = pc_additem(mvp_sd,&item,1,LOG_TYPE_PICKDROP_PLAYER)) != 0) {
|
||||
clif_additem(mvp_sd,0,0,temp);
|
||||
map_addflooritem(&item,1,mvp_sd->bl.m,mvp_sd->bl.x,mvp_sd->bl.y,mvp_sd->status.char_id,(second_sd?second_sd->status.char_id:0),(third_sd?third_sd->status.char_id:0),1);
|
||||
}
|
||||
|
||||
//Logs items, MVP prizes [Lupus]
|
||||
log_pick_mob(md, LOG_TYPE_PICKDROP_MONSTER, item.nameid, -1, NULL);
|
||||
if (!temp)
|
||||
log_pick_pc(mvp_sd, LOG_TYPE_PICKDROP_PLAYER, item.nameid, 1, NULL);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1271,10 +1271,8 @@ int npc_cashshop_buylist(struct map_session_data *sd, int points, int count, uns
|
||||
{
|
||||
item_tmp.nameid = nameid;
|
||||
item_tmp.identify = 1;
|
||||
pc_additem(sd,&item_tmp,amount);
|
||||
pc_additem(sd,&item_tmp,amount,LOG_TYPE_NPC);
|
||||
}
|
||||
|
||||
log_pick_pc(sd, LOG_TYPE_NPC, nameid, amount, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1378,11 +1376,9 @@ int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int po
|
||||
item_tmp.nameid = nameid;
|
||||
item_tmp.identify = 1;
|
||||
|
||||
pc_additem(sd,&item_tmp, amount);
|
||||
pc_additem(sd,&item_tmp, amount, LOG_TYPE_NPC);
|
||||
}
|
||||
|
||||
log_pick_pc(sd, LOG_TYPE_NPC, nameid, amount, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1486,11 +1482,7 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list)
|
||||
item_tmp.nameid = nameid;
|
||||
item_tmp.identify = 1;
|
||||
|
||||
pc_additem(sd,&item_tmp,amount);
|
||||
|
||||
//Logs items, Bought in NPC (S)hop [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_NPC, item_tmp.nameid, amount, NULL);
|
||||
//Logs
|
||||
pc_additem(sd,&item_tmp,amount,LOG_TYPE_NPC);
|
||||
}
|
||||
|
||||
// custom merchant shop exp bonus
|
||||
@ -1631,10 +1623,6 @@ int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list)
|
||||
amount = item_list[i*2+1];
|
||||
nameid = sd->status.inventory[idx].nameid;
|
||||
|
||||
//Logs items, Sold to NPC (S)hop [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_NPC, nameid, -amount, &sd->status.inventory[idx]);
|
||||
//Logs
|
||||
|
||||
if( sd->inventory_data[idx]->type == IT_PETEGG && sd->status.inventory[idx].card[0] == CARD0_PET )
|
||||
{
|
||||
if( search_petDB_index(sd->status.inventory[idx].nameid, PET_EGG) >= 0 )
|
||||
@ -1643,7 +1631,7 @@ int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list)
|
||||
}
|
||||
}
|
||||
|
||||
pc_delitem(sd, idx, amount, 0, 6);
|
||||
pc_delitem(sd, idx, amount, 0, 6, LOG_TYPE_NPC);
|
||||
}
|
||||
|
||||
if( z > MAX_ZENY )
|
||||
|
@ -1033,7 +1033,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i
|
||||
if( (psd = p->data[i].sd) == NULL || sd->bl.m != psd->bl.m || pc_isdead(psd) || (battle_config.idle_no_share && pc_isidle(psd)) )
|
||||
continue;
|
||||
|
||||
if (pc_additem(psd,item_data,item_data->amount))
|
||||
if (pc_additem(psd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER))
|
||||
continue; //Chosen char can't pick up loot.
|
||||
|
||||
//Successful pick.
|
||||
@ -1055,7 +1055,7 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i
|
||||
}
|
||||
while (count > 0) { //Pick a random member.
|
||||
i = rand()%count;
|
||||
if (pc_additem(psd[i],item_data,item_data->amount))
|
||||
if (pc_additem(psd[i],item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER))
|
||||
{ //Discard this receiver.
|
||||
psd[i] = psd[count-1];
|
||||
count--;
|
||||
@ -1069,13 +1069,10 @@ int party_share_loot(struct party_data* p, struct map_session_data* sd, struct i
|
||||
|
||||
if (!target) {
|
||||
target = sd; //Give it to the char that picked it up
|
||||
if ((i=pc_additem(sd,item_data,item_data->amount)))
|
||||
if ((i=pc_additem(sd,item_data,item_data->amount,LOG_TYPE_PICKDROP_PLAYER)))
|
||||
return i;
|
||||
}
|
||||
|
||||
//Logs items, taken by (P)layers [Lupus]
|
||||
log_pick_pc(target, LOG_TYPE_PICKDROP_PLAYER, item_data->nameid, item_data->amount, item_data);
|
||||
|
||||
if( p && battle_config.party_show_share_picker && battle_config.show_picker_item_type&(1<<itemdb_type(item_data->nameid)) )
|
||||
clif_party_show_picker(target, item_data);
|
||||
|
||||
|
53
src/map/pc.c
53
src/map/pc.c
@ -439,7 +439,7 @@ void pc_inventory_rentals(struct map_session_data *sd)
|
||||
if( sd->status.inventory[i].expire_time <= time(NULL) )
|
||||
{
|
||||
clif_rental_expired(sd->fd, i, sd->status.inventory[i].nameid);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 1, 0);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 1, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -3251,13 +3251,15 @@ int pc_insert_card(struct map_session_data* sd, int idx_card, int idx_equip)
|
||||
// remember the card id to insert
|
||||
nameid = sd->status.inventory[idx_card].nameid;
|
||||
|
||||
if( pc_delitem(sd,idx_card,1,1,0) == 1 )
|
||||
if( pc_delitem(sd,idx_card,1,1,0,LOG_TYPE_OTHER) == 1 )
|
||||
{// failed
|
||||
clif_insert_card(sd,idx_equip,idx_card,1);
|
||||
}
|
||||
else
|
||||
{// success
|
||||
log_pick_pc(sd, LOG_TYPE_OTHER, sd->status.inventory[idx_equip].nameid, -1, &sd->status.inventory[idx_equip]);
|
||||
sd->status.inventory[idx_equip].card[i] = nameid;
|
||||
log_pick_pc(sd, LOG_TYPE_OTHER, sd->status.inventory[idx_equip].nameid, 1, &sd->status.inventory[idx_equip]);
|
||||
clif_insert_card(sd,idx_equip,idx_card,0);
|
||||
}
|
||||
|
||||
@ -3501,7 +3503,7 @@ int pc_search_inventory(struct map_session_data *sd,int item_id)
|
||||
/*==========================================
|
||||
* アイテム追加。個?のみitem構造?の?字を無視
|
||||
*------------------------------------------*/
|
||||
int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
|
||||
int pc_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type)
|
||||
{
|
||||
struct item_data *data;
|
||||
int i;
|
||||
@ -3560,6 +3562,7 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
|
||||
sd->inventory_data[i] = data;
|
||||
clif_additem(sd,i,amount,0);
|
||||
}
|
||||
log_pick_pc(sd, log_type, sd->status.inventory[i].nameid, amount, &sd->status.inventory[i]);
|
||||
|
||||
sd->weight += w;
|
||||
clif_updatestatus(sd,SP_WEIGHT);
|
||||
@ -3571,13 +3574,15 @@ int pc_additem(struct map_session_data *sd,struct item *item_data,int amount)
|
||||
/*==========================================
|
||||
* アイテムを減らす
|
||||
*------------------------------------------*/
|
||||
int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason)
|
||||
int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason, e_log_pick_type log_type)
|
||||
{
|
||||
nullpo_retr(1, sd);
|
||||
|
||||
if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amount<amount || sd->inventory_data[n] == NULL)
|
||||
return 1;
|
||||
|
||||
log_pick_pc(sd, log_type, sd->status.inventory[n].nameid, -amount, &sd->status.inventory[n]);
|
||||
|
||||
sd->status.inventory[n].amount -= amount;
|
||||
sd->weight -= sd->inventory_data[n]->weight*amount ;
|
||||
if(sd->status.inventory[n].amount<=0){
|
||||
@ -3627,14 +3632,10 @@ int pc_dropitem(struct map_session_data *sd,int n,int amount)
|
||||
return 0;
|
||||
}
|
||||
|
||||
//Logs items, dropped by (P)layers [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_PICKDROP_PLAYER, sd->status.inventory[n].nameid, -amount, (struct item*)&sd->status.inventory[n]);
|
||||
//Logs
|
||||
|
||||
if (!map_addflooritem(&sd->status.inventory[n], amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 2))
|
||||
return 0;
|
||||
|
||||
pc_delitem(sd, n, amount, 0, 7);
|
||||
pc_delitem(sd, n, amount, 0, 7, LOG_TYPE_PICKDROP_PLAYER);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -3938,11 +3939,7 @@ int pc_useitem(struct map_session_data *sd,int n)
|
||||
if( sd->status.inventory[n].expire_time == 0 )
|
||||
{
|
||||
clif_useitemack(sd,n,amount-1,1);
|
||||
|
||||
//Logs (C)onsumable items [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_CONSUME, sd->status.inventory[n].nameid, -1, &sd->status.inventory[n]);
|
||||
|
||||
pc_delitem(sd,n,1,1,0); // Rental Usable Items are not deleted until expiration
|
||||
pc_delitem(sd,n,1,1,0,LOG_TYPE_CONSUME); // Rental Usable Items are not deleted until expiration
|
||||
}
|
||||
else
|
||||
clif_useitemack(sd,n,0,0);
|
||||
@ -3968,7 +3965,7 @@ int pc_useitem(struct map_session_data *sd,int n)
|
||||
/*==========================================
|
||||
* カ?トアイテム追加。個?のみitem構造?の?字を無視
|
||||
*------------------------------------------*/
|
||||
int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount)
|
||||
int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type)
|
||||
{
|
||||
struct item_data *data;
|
||||
int i,w;
|
||||
@ -4017,7 +4014,8 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
|
||||
sd->cart_num++;
|
||||
clif_cart_additem(sd,i,amount,0);
|
||||
}
|
||||
|
||||
log_pick_pc(sd, log_type, sd->status.cart[i].nameid, amount, &sd->status.cart[i]);
|
||||
|
||||
sd->cart_weight += w;
|
||||
clif_updatestatus(sd,SP_CARTINFO);
|
||||
|
||||
@ -4027,7 +4025,7 @@ int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amoun
|
||||
/*==========================================
|
||||
* カ?トアイテムを減らす
|
||||
*------------------------------------------*/
|
||||
int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type)
|
||||
int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_pick_type log_type)
|
||||
{
|
||||
nullpo_retr(1, sd);
|
||||
|
||||
@ -4035,6 +4033,8 @@ int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type)
|
||||
sd->status.cart[n].amount<amount)
|
||||
return 1;
|
||||
|
||||
log_pick_pc(sd, log_type, sd->status.cart[n].nameid, -amount, &sd->status.cart[n]);
|
||||
|
||||
sd->status.cart[n].amount -= amount;
|
||||
sd->cart_weight -= itemdb_weight(sd->status.cart[n].nameid)*amount ;
|
||||
if(sd->status.cart[n].amount <= 0){
|
||||
@ -4066,8 +4066,8 @@ int pc_putitemtocart(struct map_session_data *sd,int idx,int amount)
|
||||
if( item_data->nameid == 0 || amount < 1 || item_data->amount < amount || sd->state.vending )
|
||||
return 1;
|
||||
|
||||
if( pc_cart_additem(sd,item_data,amount) == 0 )
|
||||
return pc_delitem(sd,idx,amount,0,5);
|
||||
if( pc_cart_additem(sd,item_data,amount,LOG_TYPE_NONE) == 0 )
|
||||
return pc_delitem(sd,idx,amount,0,5,LOG_TYPE_NONE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -4105,8 +4105,8 @@ int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount)
|
||||
|
||||
if(item_data->nameid==0 || amount < 1 || item_data->amount<amount || sd->state.vending )
|
||||
return 1;
|
||||
if((flag = pc_additem(sd,item_data,amount)) == 0)
|
||||
return pc_cart_delitem(sd,idx,amount,0);
|
||||
if((flag = pc_additem(sd,item_data,amount,LOG_TYPE_NONE)) == 0)
|
||||
return pc_cart_delitem(sd,idx,amount,0,LOG_TYPE_NONE);
|
||||
|
||||
clif_additem(sd,0,0,flag);
|
||||
return 1;
|
||||
@ -4187,7 +4187,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
|
||||
tmp_item.nameid = itemid;
|
||||
tmp_item.amount = 1;
|
||||
tmp_item.identify = itemdb_isidentified(itemid);
|
||||
flag = pc_additem(sd,&tmp_item,1);
|
||||
flag = pc_additem(sd,&tmp_item,1,LOG_TYPE_PICKDROP_PLAYER);
|
||||
|
||||
//TODO: Should we disable stealing when the item you stole couldn't be added to your inventory? Perhaps players will figure out a way to exploit this behaviour otherwise?
|
||||
md->state.steal_flag = UCHAR_MAX; //you can't steal from this mob any more
|
||||
@ -4202,7 +4202,6 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv)
|
||||
|
||||
//Logs items, Stolen from mobs [Lupus]
|
||||
log_pick_mob(md, LOG_TYPE_PICKDROP_MONSTER, itemid, -1, NULL);
|
||||
log_pick_pc(sd, LOG_TYPE_PICKDROP_PLAYER, itemid, 1, NULL);
|
||||
|
||||
//A Rare Steal Global Announce by Lupus
|
||||
if(md->db->dropitem[i].p<=battle_config.rare_drop_announce) {
|
||||
@ -7726,7 +7725,7 @@ int pc_checkitem(struct map_session_data *sd)
|
||||
if( id && !itemdb_available(id) )
|
||||
{
|
||||
ShowWarning("Removed invalid/disabled item id %d from inventory (amount=%d, char_id=%d).\n", id, sd->status.inventory[i].amount, sd->status.char_id);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7737,7 +7736,7 @@ int pc_checkitem(struct map_session_data *sd)
|
||||
if( id && !itemdb_available(id) )
|
||||
{
|
||||
ShowWarning("Removed invalid/disabled item id %d from cart (amount=%d, char_id=%d).\n", id, sd->status.cart[i].amount, sd->status.char_id);
|
||||
pc_cart_delitem(sd, i, sd->status.cart[i].amount, 0);
|
||||
pc_cart_delitem(sd, i, sd->status.cart[i].amount, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7899,9 +7898,9 @@ int pc_divorce(struct map_session_data *sd)
|
||||
for( i = 0; i < MAX_INVENTORY; i++ )
|
||||
{
|
||||
if( sd->status.inventory[i].nameid == WEDDING_RING_M || sd->status.inventory[i].nameid == WEDDING_RING_F )
|
||||
pc_delitem(sd, i, 1, 0, 0);
|
||||
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
|
||||
if( p_sd->status.inventory[i].nameid == WEDDING_RING_M || p_sd->status.inventory[i].nameid == WEDDING_RING_F )
|
||||
pc_delitem(p_sd, i, 1, 0, 0);
|
||||
pc_delitem(p_sd, i, 1, 0, 0, LOG_TYPE_OTHER);
|
||||
}
|
||||
|
||||
clif_divorced(sd, p_sd->status.name);
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "unit.h" // unit_stop_attack(), unit_stop_walking()
|
||||
#include "vending.h" // struct s_vending
|
||||
#include "mob.h"
|
||||
#include "log.h"
|
||||
|
||||
#define MAX_PC_BONUS 10
|
||||
#define MAX_PC_SKILL_REQUIRE 5
|
||||
@ -644,16 +645,16 @@ int pc_checkadditem(struct map_session_data*,int,int);
|
||||
int pc_inventoryblank(struct map_session_data*);
|
||||
int pc_search_inventory(struct map_session_data *sd,int item_id);
|
||||
int pc_payzeny(struct map_session_data*,int);
|
||||
int pc_additem(struct map_session_data*,struct item*,int);
|
||||
int pc_additem(struct map_session_data*,struct item*,int,e_log_pick_type);
|
||||
int pc_getzeny(struct map_session_data*,int);
|
||||
int pc_delitem(struct map_session_data*,int,int,int,short);
|
||||
int pc_delitem(struct map_session_data*,int,int,int,short,e_log_pick_type);
|
||||
|
||||
// Special Shop System
|
||||
void pc_paycash(struct map_session_data *sd, int price, int points);
|
||||
void pc_getcash(struct map_session_data *sd, int cash, int points);
|
||||
|
||||
int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount);
|
||||
int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type);
|
||||
int pc_cart_additem(struct map_session_data *sd,struct item *item_data,int amount,e_log_pick_type log_type);
|
||||
int pc_cart_delitem(struct map_session_data *sd,int n,int amount,int type,e_log_pick_type log_type);
|
||||
int pc_putitemtocart(struct map_session_data *sd,int idx,int amount);
|
||||
int pc_getitemfromcart(struct map_session_data *sd,int idx,int amount);
|
||||
int pc_cartitem_amount(struct map_session_data *sd,int idx,int amount);
|
||||
|
@ -301,7 +301,7 @@ static int pet_return_egg(struct map_session_data *sd, struct pet_data *pd)
|
||||
tmp_item.card[1] = GetWord(pd->pet.pet_id,0);
|
||||
tmp_item.card[2] = GetWord(pd->pet.pet_id,1);
|
||||
tmp_item.card[3] = pd->pet.rename_flag;
|
||||
if((flag = pc_additem(sd,&tmp_item,1))) {
|
||||
if((flag = pc_additem(sd,&tmp_item,1,LOG_TYPE_OTHER))) {
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -445,7 +445,7 @@ int pet_recv_petdata(int account_id,struct s_pet *p,int flag)
|
||||
return 1;
|
||||
}
|
||||
if (!pet_birth_process(sd,p)) //Pet hatched. Delete egg.
|
||||
pc_delitem(sd,i,1,0,0);
|
||||
pc_delitem(sd,i,1,0,0,LOG_TYPE_OTHER);
|
||||
} else {
|
||||
pet_data_init(sd,p);
|
||||
if(sd->pd && sd->bl.prev != NULL) {
|
||||
@ -566,7 +566,7 @@ int pet_get_egg(int account_id,int pet_id,int flag)
|
||||
tmp_item.card[1] = GetWord(pet_id,0);
|
||||
tmp_item.card[2] = GetWord(pet_id,1);
|
||||
tmp_item.card[3] = 0; //New pets are not named.
|
||||
if((ret = pc_additem(sd,&tmp_item,1))) {
|
||||
if((ret = pc_additem(sd,&tmp_item,1,LOG_TYPE_PICKDROP_PLAYER))) {
|
||||
clif_additem(sd,0,0,ret);
|
||||
map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -662,7 +662,7 @@ int pet_equipitem(struct map_session_data *sd,int index)
|
||||
return 1;
|
||||
}
|
||||
|
||||
pc_delitem(sd,index,1,0,0);
|
||||
pc_delitem(sd,index,1,0,0,LOG_TYPE_OTHER);
|
||||
pd->pet.equip = nameid;
|
||||
status_set_viewdata(&pd->bl, pd->pet.class_); //Updates view_data.
|
||||
clif_pet_equip_area(pd);
|
||||
@ -698,7 +698,7 @@ static int pet_unequipitem(struct map_session_data *sd, struct pet_data *pd)
|
||||
memset(&tmp_item,0,sizeof(tmp_item));
|
||||
tmp_item.nameid = nameid;
|
||||
tmp_item.identify = 1;
|
||||
if((flag = pc_additem(sd,&tmp_item,1))) {
|
||||
if((flag = pc_additem(sd,&tmp_item,1,LOG_TYPE_OTHER))) {
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&tmp_item,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -737,7 +737,7 @@ static int pet_food(struct map_session_data *sd, struct pet_data *pd)
|
||||
clif_pet_food(sd,k,0);
|
||||
return 1;
|
||||
}
|
||||
pc_delitem(sd,i,1,0,0);
|
||||
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
|
||||
|
||||
if( pd->pet.hungry > 90 )
|
||||
pet_set_intimate(pd, pd->pet.intimate - pd->petDB->r_full);
|
||||
@ -1010,14 +1010,13 @@ int pet_lootitem_drop(struct pet_data *pd,struct map_session_data *sd)
|
||||
for(i=0;i<pd->loot->count;i++) {
|
||||
it = &pd->loot->item[i];
|
||||
if(sd){
|
||||
if((flag = pc_additem(sd,it,it->amount))){
|
||||
if((flag = pc_additem(sd,it,it->amount,LOG_TYPE_PICKDROP_PLAYER))){
|
||||
clif_additem(sd,0,0,flag);
|
||||
ditem = ers_alloc(item_drop_ers, struct item_drop);
|
||||
memcpy(&ditem->item_data, it, sizeof(struct item));
|
||||
ditem->next = dlist->item;
|
||||
dlist->item = ditem;
|
||||
} else
|
||||
log_pick_pc(sd, LOG_TYPE_PICKDROP_PLAYER, it->nameid, it->amount, it);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ditem = ers_alloc(item_drop_ers, struct item_drop);
|
||||
|
@ -5689,17 +5689,14 @@ BUILDIN_FUNC(getitem)
|
||||
// if not pet egg
|
||||
if (!pet_create_egg(sd, nameid))
|
||||
{
|
||||
if ((flag = pc_additem(sd, &it, get_count)))
|
||||
if ((flag = pc_additem(sd, &it, get_count, LOG_TYPE_SCRIPT)))
|
||||
{
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
if( pc_candrop(sd,&it) )
|
||||
map_addflooritem(&it,get_count,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, nameid, amount, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -5790,7 +5787,7 @@ BUILDIN_FUNC(getitem2)
|
||||
// if not pet egg
|
||||
if (!pet_create_egg(sd, nameid))
|
||||
{
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count)))
|
||||
if ((flag = pc_additem(sd, &item_tmp, get_count, LOG_TYPE_SCRIPT)))
|
||||
{
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
if( pc_candrop(sd,&item_tmp) )
|
||||
@ -5798,9 +5795,6 @@ BUILDIN_FUNC(getitem2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, nameid, amount, &item_tmp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -5856,7 +5850,7 @@ BUILDIN_FUNC(rentitem)
|
||||
it.identify = 1;
|
||||
it.expire_time = (unsigned int)(time(NULL) + seconds);
|
||||
|
||||
if( (flag = pc_additem(sd, &it, 1)) )
|
||||
if( (flag = pc_additem(sd, &it, 1, LOG_TYPE_SCRIPT)) )
|
||||
{
|
||||
clif_additem(sd, 0, 0, flag);
|
||||
return 1;
|
||||
@ -5864,8 +5858,6 @@ BUILDIN_FUNC(rentitem)
|
||||
|
||||
clif_rental_time(sd->fd, nameid, seconds);
|
||||
pc_inventory_rental_add(sd, seconds);
|
||||
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, nameid, 1, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -5930,14 +5922,11 @@ BUILDIN_FUNC(getnameditem)
|
||||
item_tmp.card[0]=CARD0_CREATE; //we don't use 255! because for example SIGNED WEAPON shouldn't get TOP10 BS Fame bonus [Lupus]
|
||||
item_tmp.card[2]=tsd->status.char_id;
|
||||
item_tmp.card[3]=tsd->status.char_id >> 16;
|
||||
if(pc_additem(sd,&item_tmp,1)) {
|
||||
if(pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT)) {
|
||||
script_pushint(st,0);
|
||||
return 0; //Failed to add item, we will not drop if they don't fit
|
||||
}
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, item_tmp.nameid, item_tmp.amount, &item_tmp);
|
||||
|
||||
script_pushint(st,1);
|
||||
return 0;
|
||||
}
|
||||
@ -6028,12 +6017,7 @@ static void buildin_delitem_delete(struct map_session_data* sd, int idx, int* am
|
||||
{// delete associated pet
|
||||
intif_delete_petdata(MakeDWord(inv->card[1], inv->card[2]));
|
||||
}
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, inv->nameid, -delamount, inv);
|
||||
//Logs
|
||||
|
||||
pc_delitem(sd, idx, delamount, 0, 0);
|
||||
pc_delitem(sd, idx, delamount, 0, 0, LOG_TYPE_SCRIPT);
|
||||
}
|
||||
|
||||
amount[0]-= delamount;
|
||||
@ -6977,15 +6961,12 @@ BUILDIN_FUNC(failedrefitem)
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0) {
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);
|
||||
|
||||
sd->status.inventory[i].refine = 0;
|
||||
pc_unequipitem(sd,i,3);
|
||||
// 精錬失敗エフェクトのパケット
|
||||
clif_refine(sd->fd,1,i,sd->status.inventory[i].refine);
|
||||
|
||||
pc_delitem(sd,i,1,0,2);
|
||||
pc_delitem(sd,i,1,0,2,LOG_TYPE_SCRIPT);
|
||||
// 他の人にも失敗を通知
|
||||
clif_misceffect(&sd->bl,2);
|
||||
}
|
||||
@ -10342,10 +10323,7 @@ BUILDIN_FUNC(successremovecards)
|
||||
for (j = 0; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=0;
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, item_tmp.nameid, 1, NULL);
|
||||
|
||||
if((flag=pc_additem(sd,&item_tmp,1))){ // 持てないならドロップ
|
||||
if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){ // 持てないならドロップ
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -10364,15 +10342,8 @@ BUILDIN_FUNC(successremovecards)
|
||||
for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=sd->status.inventory[i].card[j];
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);
|
||||
|
||||
pc_delitem(sd,i,1,0,3);
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, item_tmp.nameid, 1, &item_tmp);
|
||||
|
||||
if((flag=pc_additem(sd,&item_tmp,1))){ // もてないならドロップ
|
||||
pc_delitem(sd,i,1,0,3,LOG_TYPE_SCRIPT);
|
||||
if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){ // もてないならドロップ
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -10421,10 +10392,7 @@ BUILDIN_FUNC(failedremovecards)
|
||||
for (j = 0; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=0;
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, item_tmp.nameid, 1, NULL);
|
||||
|
||||
if((flag=pc_additem(sd,&item_tmp,1))){
|
||||
if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -10435,10 +10403,7 @@ BUILDIN_FUNC(failedremovecards)
|
||||
if(cardflag == 1)
|
||||
{
|
||||
if(typefail == 0 || typefail == 2){ // 武具損失
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);
|
||||
|
||||
pc_delitem(sd,i,1,0,2);
|
||||
pc_delitem(sd,i,1,0,2,LOG_TYPE_SCRIPT);
|
||||
}
|
||||
if(typefail == 1){ // カードのみ損失(武具を返す)
|
||||
int flag;
|
||||
@ -10447,19 +10412,13 @@ BUILDIN_FUNC(failedremovecards)
|
||||
item_tmp.equip=0,item_tmp.identify=1,item_tmp.refine=sd->status.inventory[i].refine;
|
||||
item_tmp.attribute=sd->status.inventory[i].attribute,item_tmp.expire_time=sd->status.inventory[i].expire_time;
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -1, &sd->status.inventory[i]);
|
||||
|
||||
for (j = 0; j < sd->inventory_data[i]->slot; j++)
|
||||
item_tmp.card[j]=0;
|
||||
for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++)
|
||||
item_tmp.card[j]=sd->status.inventory[i].card[j];
|
||||
pc_delitem(sd,i,1,0,2);
|
||||
pc_delitem(sd,i,1,0,2,LOG_TYPE_SCRIPT);
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, item_tmp.nameid, 1, &item_tmp);
|
||||
|
||||
if((flag=pc_additem(sd,&item_tmp,1))){
|
||||
if((flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_SCRIPT))){
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -11124,11 +11083,7 @@ BUILDIN_FUNC(clearitem)
|
||||
if(sd==NULL) return 0;
|
||||
for (i=0; i<MAX_INVENTORY; i++) {
|
||||
if (sd->status.inventory[i].amount) {
|
||||
|
||||
//Logs items, got from (N)PC scripts [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_SCRIPT, sd->status.inventory[i].nameid, -sd->status.inventory[i].amount, &sd->status.inventory[i]);
|
||||
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0);
|
||||
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_SCRIPT);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
@ -1991,7 +1991,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
|
||||
{ //Consume one Fragment per hit of the casted skill? [Skotlex]
|
||||
type = tsd?pc_search_inventory (tsd, 7321):0;
|
||||
if (type >= 0) {
|
||||
if ( tsd ) pc_delitem(tsd, type, 1, 0, 1);
|
||||
if ( tsd ) pc_delitem(tsd, type, 1, 0, 1, LOG_TYPE_CONSUME);
|
||||
dmg.damage = dmg.damage2 = 0;
|
||||
dmg.dmg_lv = ATK_MISS;
|
||||
sc->data[SC_SPIRIT]->val3 = skillid;
|
||||
@ -2691,7 +2691,7 @@ static int skill_check_condition_mercenary(struct block_list *bl, int skill, int
|
||||
// Consume items
|
||||
for( i = 0; i < ARRAYLENGTH(itemid); i++ )
|
||||
{
|
||||
if( index[i] >= 0 ) pc_delitem(sd, index[i], amount[i], 0, 1);
|
||||
if( index[i] >= 0 ) pc_delitem(sd, index[i], amount[i], 0, 1, LOG_TYPE_CONSUME);
|
||||
}
|
||||
|
||||
if( type&2 )
|
||||
@ -5467,7 +5467,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
item_tmp.identify = 1;
|
||||
tbl.id = 0;
|
||||
clif_takeitem(&sd->bl,&tbl);
|
||||
eflag = pc_additem(sd,&item_tmp,1);
|
||||
eflag = pc_additem(sd,&item_tmp,1,LOG_TYPE_PRODUCE);
|
||||
if(eflag) {
|
||||
clif_additem(sd,0,0,eflag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
@ -6149,7 +6149,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
memset(&item_tmp,0,sizeof(item_tmp));
|
||||
item_tmp.nameid = skill_db[su->group->skill_id].itemid[i];
|
||||
item_tmp.identify = 1;
|
||||
if( item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,skill_db[su->group->skill_id].amount[i])) )
|
||||
if( item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,skill_db[su->group->skill_id].amount[i],LOG_TYPE_OTHER)) )
|
||||
{
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,skill_db[su->group->skill_id].amount[i],sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
@ -6163,7 +6163,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
||||
memset(&item_tmp,0,sizeof(item_tmp));
|
||||
item_tmp.nameid = ITEMID_TRAP;
|
||||
item_tmp.identify = 1;
|
||||
if( item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,1)) )
|
||||
if( item_tmp.nameid && (flag=pc_additem(sd,&item_tmp,1,LOG_TYPE_OTHER)) )
|
||||
{
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&item_tmp,1,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
@ -10348,7 +10348,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
|
||||
if( skill == WZ_EARTHSPIKE && sc && sc->data[SC_EARTHSCROLL] && rand()%100 > sc->data[SC_EARTHSCROLL]->val2 ) // [marquis007]
|
||||
; //Do not consume item.
|
||||
else if( sd->status.inventory[i].expire_time == 0 )
|
||||
pc_delitem(sd,i,1,0,0); // Rental usable items are not consumed until expiration
|
||||
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME); // Rental usable items are not consumed until expiration
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
@ -11140,7 +11140,7 @@ int skill_consume_requirement( struct map_session_data *sd, short skill, short l
|
||||
continue; //Gemstones are checked, but not substracted from inventory.
|
||||
|
||||
if( (n = pc_search_inventory(sd,req.itemid[i])) >= 0 )
|
||||
pc_delitem(sd,n,req.amount[i],0,1);
|
||||
pc_delitem(sd,n,req.amount[i],0,1,LOG_TYPE_CONSUME);
|
||||
}
|
||||
}
|
||||
|
||||
@ -11724,7 +11724,7 @@ void skill_repairweapon (struct map_session_data *sd, int idx)
|
||||
clif_skill_nodamage(&sd->bl,&target_sd->bl,sd->menuskill_id,1,1);
|
||||
item->attribute=0;
|
||||
clif_equiplist(target_sd);
|
||||
pc_delitem(sd,pc_search_inventory(sd,material),1,0,0);
|
||||
pc_delitem(sd,pc_search_inventory(sd,material),1,0,0,LOG_TYPE_CONSUME);
|
||||
clif_item_repaireffect(sd,item->nameid,0);
|
||||
if(sd!=target_sd)
|
||||
clif_item_repaireffect(target_sd,item->nameid,0);
|
||||
@ -11778,9 +11778,11 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
|
||||
per = percentrefinery [ditem->wlv][(int)item->refine];
|
||||
per += (((signed int)sd->status.job_level)-50)/2; //Updated per the new kro descriptions. [Skotlex]
|
||||
|
||||
pc_delitem(sd, i, 1, 0, 0);
|
||||
pc_delitem(sd, i, 1, 0, 0, LOG_TYPE_OTHER);
|
||||
if (per > rand() % 100) {
|
||||
log_pick_pc(sd, LOG_TYPE_OTHER, item->nameid, -1, item);
|
||||
item->refine++;
|
||||
log_pick_pc(sd, LOG_TYPE_OTHER, item->nameid, 1, item);
|
||||
if(item->equip) {
|
||||
ep = item->equip;
|
||||
pc_unequipitem(sd,idx,3);
|
||||
@ -11812,7 +11814,7 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
|
||||
if(item->equip)
|
||||
pc_unequipitem(sd,idx,3);
|
||||
clif_refine(sd->fd,1,idx,item->refine);
|
||||
pc_delitem(sd,idx,1,0,2);
|
||||
pc_delitem(sd,idx,1,0,2, LOG_TYPE_OTHER);
|
||||
clif_misceffect(&sd->bl,2);
|
||||
clif_emotion(&sd->bl, E_OMG);
|
||||
}
|
||||
@ -13372,12 +13374,12 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
|
||||
if(j < 0)
|
||||
continue;
|
||||
if(slot[i]==1000){ /* Star Crumb */
|
||||
pc_delitem(sd,j,1,1,0);
|
||||
pc_delitem(sd,j,1,1,0,LOG_TYPE_PRODUCE);
|
||||
sc++;
|
||||
}
|
||||
if(slot[i]>=994 && slot[i]<=997 && ele==0){ /* Flame Heart . . . Great Nature */
|
||||
static const int ele_table[4]={3,1,4,2};
|
||||
pc_delitem(sd,j,1,1,0);
|
||||
pc_delitem(sd,j,1,1,0,LOG_TYPE_PRODUCE);
|
||||
ele=ele_table[slot[i]-994];
|
||||
}
|
||||
}
|
||||
@ -13417,7 +13419,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
|
||||
if(j >= 0){
|
||||
y = sd->status.inventory[j].amount;
|
||||
if(y>x)y=x;
|
||||
pc_delitem(sd,j,y,0,0);
|
||||
pc_delitem(sd,j,y,0,0,LOG_TYPE_PRODUCE);
|
||||
} else
|
||||
ShowError("skill_produce_mix: material item error\n");
|
||||
|
||||
@ -13688,7 +13690,7 @@ int skill_produce_mix (struct map_session_data *sd, int skill_id, int nameid, in
|
||||
}
|
||||
}
|
||||
if (tmp_item.amount) { //Success
|
||||
if((flag = pc_additem(sd,&tmp_item,tmp_item.amount))) {
|
||||
if((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -13757,7 +13759,7 @@ int skill_arrow_create (struct map_session_data *sd, int nameid)
|
||||
if(index < 0 || (j = pc_search_inventory(sd,nameid)) < 0)
|
||||
return 1;
|
||||
|
||||
pc_delitem(sd,j,1,0,0);
|
||||
pc_delitem(sd,j,1,0,0,LOG_TYPE_PRODUCE);
|
||||
for(i=0;i<MAX_ARROW_RESOURCE;i++) {
|
||||
memset(&tmp_item,0,sizeof(tmp_item));
|
||||
tmp_item.identify = 1;
|
||||
@ -13771,7 +13773,7 @@ int skill_arrow_create (struct map_session_data *sd, int nameid)
|
||||
}
|
||||
if(tmp_item.nameid <= 0 || tmp_item.amount <= 0)
|
||||
continue;
|
||||
if((flag = pc_additem(sd,&tmp_item,tmp_item.amount))) {
|
||||
if((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
|
||||
clif_additem(sd,0,0,flag);
|
||||
map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
|
||||
}
|
||||
@ -13783,7 +13785,7 @@ int skill_poisoningweapon( struct map_session_data *sd, int nameid) {
|
||||
sc_type type;
|
||||
int t_lv = 0, chance, i;
|
||||
nullpo_ret(sd);
|
||||
if( nameid <= 0 || (i = pc_search_inventory(sd,nameid)) < 0 || pc_delitem(sd,i,1,0,0) ) {
|
||||
if( nameid <= 0 || (i = pc_search_inventory(sd,nameid)) < 0 || pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME) ) {
|
||||
clif_skill_fail(sd,GC_POISONINGWEAPON,0,0);
|
||||
return 0;
|
||||
}
|
||||
@ -13813,14 +13815,14 @@ int skill_magicdecoy(struct map_session_data *sd, int nameid) {
|
||||
nullpo_ret(sd);
|
||||
skill = sd->menuskill_val;
|
||||
|
||||
if( nameid <= 0 || !itemdb_is_element(nameid) || (i = pc_search_inventory(sd,nameid)) < 0 || !skill || pc_delitem(sd,i,1,0,0) )
|
||||
if( nameid <= 0 || !itemdb_is_element(nameid) || (i = pc_search_inventory(sd,nameid)) < 0 || !skill || pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME) )
|
||||
{
|
||||
clif_skill_fail(sd,NC_MAGICDECOY,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Spawn Position
|
||||
pc_delitem(sd,i,1,0,0);
|
||||
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME);
|
||||
x = sd->sc.comet_x;
|
||||
y = sd->sc.comet_y;
|
||||
sd->sc.comet_x = sd->sc.comet_y = 0;
|
||||
|
@ -154,7 +154,6 @@ static int storage_additem(struct map_session_data* sd, struct item* item_data,
|
||||
return 1;
|
||||
stor->items[i].amount += amount;
|
||||
clif_storageitemadded(sd,&stor->items[i],i,amount);
|
||||
log_pick_pc(sd, LOG_TYPE_STORAGE, item_data->nameid, -amount, item_data);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -171,7 +170,6 @@ static int storage_additem(struct map_session_data* sd, struct item* item_data,
|
||||
stor->items[i].amount = amount;
|
||||
clif_storageitemadded(sd,&stor->items[i],i,amount);
|
||||
clif_updatestorageamount(sd,stor->storage_amount);
|
||||
log_pick_pc(sd, LOG_TYPE_STORAGE, item_data->nameid, -amount, item_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -185,9 +183,6 @@ int storage_delitem(struct map_session_data* sd, int n, int amount)
|
||||
return 1;
|
||||
|
||||
sd->status.storage.items[n].amount -= amount;
|
||||
|
||||
log_pick_pc(sd, LOG_TYPE_STORAGE, sd->status.storage.items[n].nameid, amount, &sd->status.storage.items[n]);
|
||||
|
||||
if( sd->status.storage.items[n].amount == 0 )
|
||||
{
|
||||
memset(&sd->status.storage.items[n],0,sizeof(sd->status.storage.items[0]));
|
||||
@ -218,7 +213,7 @@ int storage_storageadd(struct map_session_data* sd, int index, int amount)
|
||||
return 0;
|
||||
|
||||
if( storage_additem(sd,&sd->status.inventory[index],amount) == 0 )
|
||||
pc_delitem(sd,index,amount,0,4);
|
||||
pc_delitem(sd,index,amount,0,4,LOG_TYPE_STORAGE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -239,7 +234,7 @@ int storage_storageget(struct map_session_data* sd, int index, int amount)
|
||||
if( amount < 1 || amount > sd->status.storage.items[index].amount )
|
||||
return 0;
|
||||
|
||||
if( (flag = pc_additem(sd,&sd->status.storage.items[index],amount)) == 0 )
|
||||
if( (flag = pc_additem(sd,&sd->status.storage.items[index],amount,LOG_TYPE_STORAGE)) == 0 )
|
||||
storage_delitem(sd,index,amount);
|
||||
else
|
||||
clif_additem(sd,0,0,flag);
|
||||
@ -267,7 +262,7 @@ int storage_storageaddfromcart(struct map_session_data* sd, int index, int amoun
|
||||
return 0;
|
||||
|
||||
if( storage_additem(sd,&sd->status.cart[index],amount) == 0 )
|
||||
pc_cart_delitem(sd,index,amount,0);
|
||||
pc_cart_delitem(sd,index,amount,0,LOG_TYPE_STORAGE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -288,7 +283,7 @@ int storage_storagegettocart(struct map_session_data* sd, int index, int amount)
|
||||
if( amount < 1 || amount > sd->status.storage.items[index].amount )
|
||||
return 0;
|
||||
|
||||
if( pc_cart_additem(sd,&sd->status.storage.items[index],amount) == 0 )
|
||||
if( pc_cart_additem(sd,&sd->status.storage.items[index],amount,LOG_TYPE_STORAGE) == 0 )
|
||||
storage_delitem(sd,index,amount);
|
||||
|
||||
return 1;
|
||||
@ -410,7 +405,6 @@ int guild_storage_additem(struct map_session_data* sd, struct guild_storage* sto
|
||||
stor->items[i].amount+=amount;
|
||||
clif_storageitemadded(sd,&stor->items[i],i,amount);
|
||||
stor->dirty = 1;
|
||||
log_pick_pc(sd, LOG_TYPE_GSTORAGE, item_data->nameid, -amount, item_data);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@ -427,7 +421,6 @@ int guild_storage_additem(struct map_session_data* sd, struct guild_storage* sto
|
||||
clif_storageitemadded(sd,&stor->items[i],i,amount);
|
||||
clif_updateguildstorageamount(sd,stor->storage_amount);
|
||||
stor->dirty = 1;
|
||||
log_pick_pc(sd, LOG_TYPE_GSTORAGE, item_data->nameid, -amount, item_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -440,7 +433,6 @@ int guild_storage_delitem(struct map_session_data* sd, struct guild_storage* sto
|
||||
return 1;
|
||||
|
||||
stor->items[n].amount-=amount;
|
||||
log_pick_pc(sd, LOG_TYPE_GSTORAGE, stor->items[n].nameid, amount, &stor->items[n]);
|
||||
if(stor->items[n].amount==0){
|
||||
memset(&stor->items[n],0,sizeof(stor->items[0]));
|
||||
stor->storage_amount--;
|
||||
@ -470,9 +462,8 @@ int storage_guild_storageadd(struct map_session_data* sd, int index, int amount)
|
||||
if( amount < 1 || amount > sd->status.inventory[index].amount )
|
||||
return 0;
|
||||
|
||||
// log_tostorage(sd, index, 1);
|
||||
if(guild_storage_additem(sd,stor,&sd->status.inventory[index],amount)==0)
|
||||
pc_delitem(sd,index,amount,0,4);
|
||||
pc_delitem(sd,index,amount,0,4,LOG_TYPE_GSTORAGE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -497,7 +488,7 @@ int storage_guild_storageget(struct map_session_data* sd, int index, int amount)
|
||||
if(amount < 1 || amount > stor->items[index].amount)
|
||||
return 0;
|
||||
|
||||
if((flag = pc_additem(sd,&stor->items[index],amount)) == 0)
|
||||
if((flag = pc_additem(sd,&stor->items[index],amount,LOG_TYPE_GSTORAGE)) == 0)
|
||||
guild_storage_delitem(sd,stor,index,amount);
|
||||
else
|
||||
clif_additem(sd,0,0,flag);
|
||||
@ -526,7 +517,7 @@ int storage_guild_storageaddfromcart(struct map_session_data* sd, int index, int
|
||||
return 0;
|
||||
|
||||
if(guild_storage_additem(sd,stor,&sd->status.cart[index],amount)==0)
|
||||
pc_cart_delitem(sd,index,amount,0);
|
||||
pc_cart_delitem(sd,index,amount,0,LOG_TYPE_GSTORAGE);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -550,7 +541,7 @@ int storage_guild_storagegettocart(struct map_session_data* sd, int index, int a
|
||||
if(amount < 1 || amount > stor->items[index].amount)
|
||||
return 0;
|
||||
|
||||
if(pc_cart_additem(sd,&stor->items[index],amount)==0)
|
||||
if(pc_cart_additem(sd,&stor->items[index],amount,LOG_TYPE_GSTORAGE)==0)
|
||||
guild_storage_delitem(sd,stor,index,amount);
|
||||
|
||||
return 1;
|
||||
|
@ -550,14 +550,10 @@ void trade_tradecommit(struct map_session_data *sd)
|
||||
{
|
||||
n = sd->deal.item[trade_i].index;
|
||||
|
||||
flag = pc_additem(tsd, &sd->status.inventory[n], sd->deal.item[trade_i].amount);
|
||||
flag = pc_additem(tsd, &sd->status.inventory[n], sd->deal.item[trade_i].amount,LOG_TYPE_TRADE);
|
||||
if (flag == 0)
|
||||
{
|
||||
//Logs (T)rade [Lupus]
|
||||
log_pick_pc(sd, LOG_TYPE_TRADE, sd->status.inventory[n].nameid, -(sd->deal.item[trade_i].amount), &sd->status.inventory[n]);
|
||||
log_pick_pc(tsd, LOG_TYPE_TRADE, sd->status.inventory[n].nameid, sd->deal.item[trade_i].amount, &sd->status.inventory[n]);
|
||||
pc_delitem(sd, n, sd->deal.item[trade_i].amount, 1, 6);
|
||||
} else
|
||||
pc_delitem(sd, n, sd->deal.item[trade_i].amount, 1, 6, LOG_TYPE_TRADE);
|
||||
else
|
||||
clif_additem(sd, n, sd->deal.item[trade_i].amount, 0);
|
||||
sd->deal.item[trade_i].index = 0;
|
||||
sd->deal.item[trade_i].amount = 0;
|
||||
@ -566,14 +562,10 @@ void trade_tradecommit(struct map_session_data *sd)
|
||||
{
|
||||
n = tsd->deal.item[trade_i].index;
|
||||
|
||||
flag = pc_additem(sd, &tsd->status.inventory[n], tsd->deal.item[trade_i].amount);
|
||||
flag = pc_additem(sd, &tsd->status.inventory[n], tsd->deal.item[trade_i].amount,LOG_TYPE_TRADE);
|
||||
if (flag == 0)
|
||||
{
|
||||
//Logs (T)rade [Lupus]
|
||||
log_pick_pc(tsd, LOG_TYPE_TRADE, tsd->status.inventory[n].nameid, -(tsd->deal.item[trade_i].amount), &tsd->status.inventory[n]);
|
||||
log_pick_pc(sd, LOG_TYPE_TRADE, tsd->status.inventory[n].nameid, tsd->deal.item[trade_i].amount, &tsd->status.inventory[n]);
|
||||
pc_delitem(tsd, n, tsd->deal.item[trade_i].amount, 1, 6);
|
||||
} else
|
||||
pc_delitem(tsd, n, tsd->deal.item[trade_i].amount, 1, 6, LOG_TYPE_TRADE);
|
||||
else
|
||||
clif_additem(tsd, n, tsd->deal.item[trade_i].amount, 0);
|
||||
tsd->deal.item[trade_i].index = 0;
|
||||
tsd->deal.item[trade_i].amount = 0;
|
||||
|
@ -181,14 +181,10 @@ void vending_purchasereq(struct map_session_data* sd, int aid, int uid, const ui
|
||||
short idx = *(uint16*)(data + 4*i + 2);
|
||||
idx -= 2;
|
||||
|
||||
//Logs sold (V)ending items [Lupus]
|
||||
log_pick_pc(vsd, LOG_TYPE_VENDING, vsd->status.cart[idx].nameid, -amount, &vsd->status.cart[idx]);
|
||||
log_pick_pc( sd, LOG_TYPE_VENDING, vsd->status.cart[idx].nameid, amount, &vsd->status.cart[idx]);
|
||||
|
||||
// vending item
|
||||
pc_additem(sd, &vsd->status.cart[idx], amount);
|
||||
pc_additem(sd, &vsd->status.cart[idx], amount, LOG_TYPE_VENDING);
|
||||
vsd->vending[vend_list[i]].amount -= amount;
|
||||
pc_cart_delitem(vsd, idx, amount, 0);
|
||||
pc_cart_delitem(vsd, idx, amount, 0, LOG_TYPE_VENDING);
|
||||
clif_vendingreport(vsd, idx, amount);
|
||||
|
||||
//print buyer's name
|
||||
|
Loading…
x
Reference in New Issue
Block a user