/* * Free up the whole shop structure and it's content. */ void free_shop(struct shop_data *shop) { free_shop_strings(shop); free_type_list(&(S_NAMELISTS(shop))); free(S_ROOMS(shop)); free(S_PRODUCTS(shop)); free(shop); }
int add_shop(struct shop_data *nshp) { shop_rnum rshop; int found = 0; zone_rnum rznum = real_zone_by_thing(S_NUM(nshp)); /* * The shop already exists, just update it. */ if ((rshop = real_shop(S_NUM(nshp))) != NOWHERE) { free_shop_strings(&shop_index[rshop]); copy_shop(&shop_index[rshop], nshp); if (rznum != NOWHERE) add_to_save_list(zone_table[rznum].number, SL_SHP); else mudlog("SYSERR: GenOLC: Cannot determine shop zone.", BRF, LVL_BUILDER, TRUE); return rshop; } top_shop++; RECREATE(shop_index, struct shop_data, top_shop + 1); for (rshop = top_shop; rshop > 0; rshop--) { if (nshp->vnum > SHOP_NUM(rshop - 1)) { found = rshop; /* Make a "nofree" variant and remove these later. */ shop_index[rshop].in_room = NULL; shop_index[rshop].producing = NULL; shop_index[rshop].type = NULL; copy_shop(&shop_index[rshop], nshp); break; } shop_index[rshop] = shop_index[rshop - 1]; } if (!found) { /* Make a "nofree" variant and remove these later. */ shop_index[rshop].in_room = NULL; shop_index[rshop].producing = NULL; shop_index[rshop].type = NULL; copy_shop(&shop_index[0], nshp); } if (rznum != NOWHERE) add_to_save_list(zone_table[rznum].number, SL_SHP); else mudlog("SYSERR: GenOLC: Cannot determine shop zone.", BRF, LVL_BUILDER, TRUE); return rshop; }
void copy_shop(struct shop_data *tshop, struct shop_data *fshop) { /* * Copy basic information over. */ S_NUM(tshop) = S_NUM(fshop); S_KEEPER(tshop) = S_KEEPER(fshop); S_OPEN1(tshop) = S_OPEN1(fshop); S_CLOSE1(tshop) = S_CLOSE1(fshop); S_OPEN2(tshop) = S_OPEN2(fshop); S_CLOSE2(tshop) = S_CLOSE2(fshop); S_BANK(tshop) = S_BANK(fshop); S_BROKE_TEMPER(tshop) = S_BROKE_TEMPER(fshop); S_BITVECTOR(tshop) = S_BITVECTOR(fshop); S_NOTRADE(tshop) = S_NOTRADE(fshop); S_SORT(tshop) = S_SORT(fshop); S_BUYPROFIT(tshop) = S_BUYPROFIT(fshop); S_SELLPROFIT(tshop) = S_SELLPROFIT(fshop); S_FUNC(tshop) = S_FUNC(fshop); /* * Copy lists over. */ copy_list(&(S_ROOMS(tshop)), S_ROOMS(fshop)); copy_list(&(S_PRODUCTS(tshop)), S_PRODUCTS(fshop)); copy_type_list(&(tshop->type), fshop->type); /* * Copy notification strings over. */ free_shop_strings(tshop); S_NOITEM1(tshop) = str_dup(S_NOITEM1(fshop)); S_NOITEM2(tshop) = str_dup(S_NOITEM2(fshop)); S_NOCASH1(tshop) = str_dup(S_NOCASH1(fshop)); S_NOCASH2(tshop) = str_dup(S_NOCASH2(fshop)); S_NOBUY(tshop) = str_dup(S_NOBUY(fshop)); S_BUY(tshop) = str_dup(S_BUY(fshop)); S_SELL(tshop) = str_dup(S_SELL(fshop)); S_PROPRIETARIO(tshop) = S_PROPRIETARIO(fshop); S_CLAN(tshop) = S_CLAN(fshop); S_VALORE(tshop) = S_VALORE(fshop); S_VALORE1(tshop) = S_VALORE1(fshop); S_VALORE2(tshop) = S_VALORE2(fshop); S_VALORE3(tshop) = S_VALORE3(fshop); S_VALORE4(tshop) = S_VALORE4(fshop); S_VALORE5(tshop) = S_VALORE5(fshop); }