ESHK
ESHK->shoproom = roomno;
ESHK->shoplevel = dlevel;
ESHK->shd = doors[sh];
ESHK->shk.x = sx;
ESHK->shk.y = sy;
ESHK->robbed = 0;
ESHK->visitct = 0;
ESHK->following = 0;
ESHK->billct = 0;
findname(ESHK->shknam, sizeof ESHK->shknam, let);
uondoor = (u.ux == ESHK(shkp)->shd.x &&
u.uy == ESHK(shkp)->shd.y);
if(ESHK(shkp)->billct)
if(((!ESHK(shkp)->robbed && !ESHK(shkp)->billct) || avoid)
|| shkroom != ESHK(shkp)->shoproom
|| ESHK(shkp)->following) {
|| (mtmp->isshk && ESHK(mtmp)->following)
return(ESHK(mtmp)->shknam);
struct eshk *eshk = ESHK(mtmp);
bill = &(ESHK(shopkeeper)->bill[0]);
ESHK(shopkeeper)->billct = 0;
int ct = ESHK(shopkeeper)->billct;
if(ESHK(shopkeeper)->billct) {
ESHK(shopkeeper)->robbed += total;
if((rooms[ESHK(shopkeeper)->shoproom].rtype == GENERAL)
ESHK(shopkeeper)->following = 1;
|| ESHK(shopkeeper)->shoproom != roomno)
if(!ESHK(shopkeeper)->visitct ||
strncmp(ESHK(shopkeeper)->customer, plname, PL_NSIZ)){
ESHK(shopkeeper)->visitct = 0;
ESHK(shopkeeper)->following = 0;
(void) strlcpy(ESHK(shopkeeper)->customer,plname,PL_NSIZ);
if(!ESHK(shopkeeper)->following) {
ESHK(shopkeeper)->visitct++ ? " again" : "",
shopnam[rooms[ESHK(shopkeeper)->shoproom].rtype - 8] );
if(mtmp->isshk && ESHK(mtmp)->shoproom == roomno
&& ESHK(mtmp)->shoplevel == dlevel) {
bill = &(ESHK(shopkeeper)->bill[0]);
strncmp(ESHK(shopkeeper)->customer,plname,PL_NSIZ))
for(bp = bill; bp < &bill[ESHK(shopkeeper)->billct]; bp++)
ESHK(shopkeeper)->billct--;
*bp = bill[ESHK(shopkeeper)->billct];
long robbed = ESHK(shkp)->robbed;
ESHK(shkp)->robbed = robbed;
inroom(shopkeeper->mx,shopkeeper->my) == ESHK(shopkeeper)->shoproom)
ltmp = ESHK(shkp)->robbed;
ESHK(shkp)->robbed = 0;
ESHK(shkp)->following = 0;
if(ESHK(shkp)->shoplevel != dlevel) {
if(!ESHK(shkp)->billct){
if(ESHK(shkp)->robbed){
(u.ugold < ESHK(shkp)->robbed) ? "partially " : "",
pay(min(u.ugold, ESHK(shkp)->robbed), shkp);
ESHK(shkp)->robbed = 0;
if(strncmp(ESHK(shkp)->customer, plname, PL_NSIZ)
while(tmp < ESHK(shopkeeper)->billct) {
bill[tmp] = bill[--ESHK(shopkeeper)->billct];
shopnam[rooms[ESHK(shopkeeper)->shoproom].rtype - 8]);
if(shlevel == dlevel && shopkeeper && ESHK(shopkeeper)->billct){
(u.ux == ESHK(shopkeeper)->shk.x && u.uy == ESHK(shopkeeper)->shk.y) ||
(u.ux == ESHK(shopkeeper)->shd.x && u.uy == ESHK(shopkeeper)->shd.y) ||
if(ESHK(shopkeeper)->billct == BILLSZ){
bp = &bill[ESHK(shopkeeper)->billct];
ESHK(shopkeeper)->billct++;
if(ESHK(shopkeeper)->billct == BILLSZ) otmp->unpaid = 0;
bp = &bill[ESHK(shopkeeper)->billct];
ESHK(shopkeeper)->billct++;
if(!inshop() || (u.ux == ESHK(shopkeeper)->shk.x && u.uy == ESHK(shopkeeper)->shk.y) ||
(u.ux == ESHK(shopkeeper)->shd.x && u.uy == ESHK(shopkeeper)->shd.y))
ESHK(shopkeeper)->billct--;
*bp = bill[ESHK(shopkeeper)->billct];
inroom(shopkeeper->mx,shopkeeper->my) != ESHK(shopkeeper)->shoproom)
if(ESHK(shopkeeper)->billct == BILLSZ ||
((tmp = shtypes[rooms[ESHK(shopkeeper)->shoproom].rtype-8]) && tmp != obj->olet)
if(ESHK(shopkeeper)->robbed){
if((ESHK(shopkeeper)->robbed -= ltmp) < 0)
ESHK(shopkeeper)->robbed = 0;
for(bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++)
for(bp = bill; bp - bill < ESHK(shopkeeper)->billct; bp++) {
shkp->mx == ESHK(shkp)->shk.x && shkp->my == ESHK(shkp)->shk.y &&
u.ux == ESHK(shkp)->shd.x && u.uy == ESHK(shkp)->shd.y) {
if(ESHK(shkp)->following) {
if(strncmp(ESHK(shkp)->customer, plname, PL_NSIZ)){
plname, ESHK(shkp)->customer);
ESHK(shkp)->following = 0;
if(!ESHK(shkp)->robbed) { /* impossible? */
ESHK(shkp)->following = 0;
gx = ESHK(shkp)->shk.x;
gy = ESHK(shkp)->shk.y;
if(ESHK(shkp)->following || ((z = holetime()) >= 0 && z*z <= udist)){