/*========================================== * Attempt to open guild storage for sd * return * 0 : success (open or req to create a new one) * 1 : fail * 2 : no guild for sd *------------------------------------------*/ 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(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->storage_status) return 1; if( gstor->lock ) 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; }
/** * Open premium storage * @param sd Player **/ void storage_premiumStorage_open(struct map_session_data *sd) { nullpo_retv(sd); if (!&sd->premiumStorage) return; sd->state.storage_flag = 3; storage_sortitem(sd->premiumStorage.u.items_storage, sd->premiumStorage.max_amount); clif_storagelist(sd, sd->premiumStorage.u.items_storage, sd->premiumStorage.max_amount, storage_getName(sd->premiumStorage.stor_id)); clif_updatestorageamount(sd, sd->premiumStorage.amount, sd->premiumStorage.max_amount); }
/** * Player attempt tp open his storage. * @param sd : player * @return 0 : success, 1 : fail */ int storage_storageopen(struct map_session_data *sd) { nullpo_ret(sd); if (sd->state.storage_flag) return 1; //Already open? if (!pc_can_give_items(sd)) { //Check is this GM level is allowed to put items to storage clif_displaymessage(sd->fd, msg_txt(246)); return 1; } sd->state.storage_flag = 1; storage_sortitem(sd->status.storage.items, ARRAYLENGTH(sd->status.storage.items)); clif_storagelist(sd, sd->status.storage.items, ARRAYLENGTH(sd->status.storage.items)); clif_updatestorageamount(sd, sd->status.storage.storage_amount, sd->storage_size); return 0; }
/*========================================== * ギルド倉庫データの受信 *------------------------------------------ */ int storage_guild_storageload(int account_id, int guild_id, struct guild_storage *s) { struct map_session_data *sd; struct guild_storage *gstor; nullpo_retr(1, s); if(guild_id <= 0) return 0; sd = map_id2sd(account_id); if(sd == NULL || sd->state.waitingdisconnect) { if(battle_config.error_log && sd == NULL) printf("storage_guild_storageload: user not found %d\n", account_id); intif_unlock_guild_storage(guild_id); return 1; } // 既に倉庫を開いてないかチェック if(sd->state.storage_flag == 2) return 0; if(sd->state.storage_flag == 1) storage_storageclose(sd); gstor = guild2storage(guild_id); if(!gstor) { if(battle_config.error_log) printf("storage_guild_storageload: error guild_id %d not exist\n", guild_id); return 1; } if(battle_config.save_log) printf("guild_storageload: %d\n", account_id); memcpy(gstor, s, sizeof(struct guild_storage)); storage_sortitem(gstor->store_item, MAX_GUILD_STORAGE, &gstor->sortkey, battle_config.guild_storage_sort); gstor->storage_status = 1; sd->state.storage_flag = 2; clif_guildstorageitemlist(sd,gstor); clif_guildstorageequiplist(sd,gstor); clif_updateguildstorageamount(sd,gstor); return 0; }
int ext_storage_open(struct map_session_data *sd) { nullpo_ret(sd); if(sd->state.storage_flag) return 1; if( !pc_can_give_items(pc_isGM(sd)) ) { //check is this GM level is allowed to put items to storage clif_displaymessage(sd->fd, msg_txt(246)); return 1; } sd->state.storage_flag = 3; storage_sortitem(sd->status.ext_storage.items, ARRAYLENGTH(sd->status.ext_storage.items)); clif_storagelist(sd, sd->status.ext_storage.items, ARRAYLENGTH(sd->status.ext_storage.items)); clif_updateextrastorageamount(sd,sd->status.ext_storage.storage_amount); return 0; }
/** * Player attempt tp open his storage. * @param sd : player * @return 0:success, 1:fail */ int storage_storageopen(struct map_session_data *sd) { nullpo_ret(sd); if(sd->state.storage_flag) return 1; //Already open? if( !pc_can_give_items(sd) ) { // check is this GM level is allowed to put items to storage clif_displaymessage(sd->fd, msg_txt(sd,246)); return 1; } sd->state.storage_flag = 1; storage_sortitem(sd->storage.u.items_storage, sd->storage.max_amount); clif_storagelist(sd, sd->storage.u.items_storage, sd->storage.max_amount, storage_getName(0)); clif_updatestorageamount(sd, sd->storage.amount, sd->storage.max_amount); return 0; }
/*========================================== * カプラ倉庫を閉じて保存 *------------------------------------------ */ void storage_storageclose(struct map_session_data *sd) { struct storage *stor; nullpo_retv(sd); nullpo_retv(stor = (struct storage *)numdb_search(storage_db,sd->status.account_id)); if(stor->dirty) { storage_sortitem(stor->store_item, MAX_STORAGE, &stor->sortkey, battle_config.personal_storage_sort); intif_send_storage(stor); if(battle_config.save_player_when_storage_closed) { chrif_save(sd,0); } stor->dirty = 0; } stor->storage_status = 0; sd->state.storage_flag = 0; clif_storageclose(sd); return; }
/*========================================== * カプラ倉庫データの受信 *------------------------------------------ */ int storage_storageload(int account_id, struct storage *s) { struct map_session_data *sd; struct storage *stor; nullpo_retr(1, s); sd = map_id2sd(account_id); if(sd == NULL || sd->state.waitingdisconnect) { if(battle_config.error_log && sd == NULL) printf("storage_storageload: user not found %d\n", account_id); storage_delete(account_id); return 1; } // 既に倉庫を開いてないかチェック if(sd->state.storage_flag == 1) return 0; if(sd->state.storage_flag == 2) storage_guild_storageclose(sd); stor = account2storage(account_id); if(battle_config.save_log) printf("storageload: %d\n", account_id); memcpy(stor, s, sizeof(struct storage)); storage_sortitem(stor->store_item, MAX_STORAGE, &stor->sortkey, battle_config.personal_storage_sort); stor->storage_status = 1; sd->state.storage_flag = 1; clif_storageitemlist(sd,stor); clif_storageequiplist(sd,stor); clif_updatestorageamount(sd,stor); return 0; }