int storage_guild_storagesave(int account_id, int guild_id, int flag) { struct guild_storage *stor = guild2storage2(guild_id); if(stor) { if (flag) //Char quitting, close it. stor->storage_status = 0; if (stor->dirty) intif_send_guild_storage(account_id,stor); return 1; } return 0; }
int storage_guild_storagesaved(int guild_id) { struct guild_storage *stor; if((stor=guild2storage2(guild_id)) != NULL) { if (stor->dirty && stor->storage_status == 0) { //Storage has been correctly saved. stor->dirty = 0; storage_gsortitem(stor); } return 1; } return 0; }
/** * Request to save guild storage * @param account_id : account requesting the save * @param guild_id : guild to take the guild_storage * @param flag : 1=char quitting, close the storage * @return False : fail (no storage), True : success (requested) */ bool storage_guild_storagesave(uint32 account_id, int guild_id, int flag) { struct s_storage *stor = guild2storage2(guild_id); if (stor) { if (flag) //Char quitting, close it. stor->status = false; if (stor->dirty) intif_send_guild_storage(account_id,stor); return true; } return false; }
/** * Close storage for player then save it * @param sd : player */ void storage_guild_storageclose(struct map_session_data* sd) { struct s_storage *stor; nullpo_retv(sd); nullpo_retv(stor = guild2storage2(sd->status.guild_id)); clif_storageclose(sd); if (stor->status) { if (save_settings&CHARSAVE_STORAGE) chrif_save(sd, 0); //This one also saves the storage. [Skotlex] else storage_guild_storagesave(sd->status.account_id, sd->status.guild_id,0); stor->status = false; } sd->state.storage_flag = 0; }
//Close storage for sd and save it int storage_guild_storageclose(struct map_session_data* sd) { struct guild_storage *stor; nullpo_ret(sd); nullpo_ret(stor=guild2storage2(sd->status.guild_id)); clif_storageclose(sd); if (stor->storage_status) { if (save_settings&4) chrif_save(sd, 0); //This one also saves the storage. [Skotlex] else storage_guild_storagesave(sd->status.account_id, sd->status.guild_id,0); stor->storage_status=0; } sd->state.storage_flag = 0; return 0; }
int storage_guild_storageopen(struct map_session_data* sd) { struct guild_storage *gstor; nullpo_ret(sd); if(sd->status.guild_id <= 0) return 2; if(sd->state.storage_flag) return 1; //Can't open both storages at a time. if( !pc_can_give_items(pc_isGM(sd)) ) { //check is this GM level can open guild storage and store items [Lupus] clif_displaymessage(sd->fd, msg_txt(246)); return 1; } if( map[sd->bl.m].flag.noguildstorage ) { clif_displaymessage(sd->fd, msg_txt(912)); return 1; } if((gstor = guild2storage2(sd->status.guild_id)) == NULL) { intif_request_guild_storage(sd->status.account_id,sd->status.guild_id); return 0; } if(gstor->storage_status) return 1; gstor->storage_status = 1; sd->state.storage_flag = 2; storage_sortitem(gstor->items, ARRAYLENGTH(gstor->items)); clif_storagelist(sd, gstor->items, ARRAYLENGTH(gstor->items)); clif_updatestorageamount(sd, gstor->storage_amount, MAX_GUILD_STORAGE); return 0; }
/*========================================== * Attempt to retrieve an item from guild storage to cart, then refresh it * @index : storage idx * return * 0 : fail * 1 : succes *------------------------------------------*/ int storage_guild_storagegettocart(struct map_session_data* sd, int index, int amount) { struct guild_storage *stor; nullpo_ret(sd); nullpo_ret(stor=guild2storage2(sd->status.guild_id)); if(!stor->storage_status) return 0; if(index<0 || index>=MAX_GUILD_STORAGE) return 0; if(stor->items[index].nameid<=0) return 0; if(amount < 1 || amount > stor->items[index].amount) return 0; if(pc_cart_additem(sd,&stor->items[index],amount,LOG_TYPE_GSTORAGE)==0) guild_storage_delitem(sd,stor,index,amount); return 1; }
/*========================================== * Attempt to add an item in guild storage from cart, then refresh it * @index : cart inventory idx * return * 0 : fail * 1 : succes *------------------------------------------*/ int storage_guild_storageaddfromcart(struct map_session_data* sd, int index, int amount) { struct guild_storage *stor; nullpo_ret(sd); nullpo_ret(stor=guild2storage2(sd->status.guild_id)); if( !stor->storage_status || stor->storage_amount > MAX_GUILD_STORAGE ) return 0; if( index < 0 || index >= MAX_CART ) return 0; if( sd->status.cart[index].nameid <= 0 ) return 0; if( amount < 1 || amount > sd->status.cart[index].amount ) return 0; if(guild_storage_additem(sd,stor,&sd->status.cart[index],amount)==0) pc_cart_delitem(sd,index,amount,0,LOG_TYPE_GSTORAGE); return 1; }
/** * Attempt to open guild storage for player * @param sd : player * @return 0 : success, 1 : fail, 2 : no guild found */ char storage_guild_storageopen(struct map_session_data* sd) { struct s_storage *gstor; nullpo_ret(sd); if(sd->status.guild_id <= 0) return 2; if(sd->state.storage_flag) return 1; //Can't open both storages at a time. if( !pc_can_give_items(sd) ) { //check is this GM level can open guild storage and store items [Lupus] clif_displaymessage(sd->fd, msg_txt(sd,246)); return 1; } if((gstor = guild2storage2(sd->status.guild_id)) == NULL) { intif_request_guild_storage(sd->status.account_id,sd->status.guild_id); return 0; } if(gstor->status) return 1; if( gstor->lock ) return 1; gstor->status = true; sd->state.storage_flag = 2; storage_sortitem(gstor->u.items_guild, ARRAYLENGTH(gstor->u.items_guild)); clif_storagelist(sd, gstor->u.items_guild, ARRAYLENGTH(gstor->u.items_guild), "Guild Storage"); clif_updatestorageamount(sd, gstor->amount, MAX_GUILD_STORAGE); return 0; }