summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt4
-rw-r--r--conf/Changelog.txt2
-rw-r--r--conf/msg_athena.conf2
-rw-r--r--src/map/atcommand.c4
-rw-r--r--src/map/buyingstore.c28
-rw-r--r--src/map/status.c3
6 files changed, 39 insertions, 4 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 4a52af4ec..a3e4ffc97 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -1,6 +1,10 @@
Date Added
2011/02/23
+ * Updates to various custom stuff that buying stores might/are expected to support (follow up to r14713). [Ai4rei]
+ - Buying store no longer works on novending maps/cells (bugreport:4778).
+ - MANNER_NOROOM mute flag now affects buying stores as well (like vending).
+ - Enabled @autotrade for buying stores.
* Fixed whispering to NPCs (::OnWhisperGlobal) not working for NPCs whose unique name is different from the display name (bugreport:4776, since r2624). [Ai4rei]
2011/02/20
* Fixed SP regen not stopping when Maximize Power (BS_MAXIMIZE) is in effect. [Ai4rei]
diff --git a/conf/Changelog.txt b/conf/Changelog.txt
index e7af03e4e..1fb5392dd 100644
--- a/conf/Changelog.txt
+++ b/conf/Changelog.txt
@@ -1,5 +1,7 @@
Date Added
+2011/02/23
+ * Rev. 14724 Made autotrade error message store type-neutral, as it is used for buying stores now as well. [Ai4rei]
2011/02/19
* Rev. 14713 Added map-server feature settings file 'battle/feature.conf'. [Ai4rei]
- Added setting 'feature.buying_store' to enable/disable the buying store system.
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf
index 1c9b994c0..a186426e3 100644
--- a/conf/msg_athena.conf
+++ b/conf/msg_athena.conf
@@ -455,7 +455,7 @@
//542: %.0s%.0sSomeone stole %s
// 543~548 are not used (previously @away messages)
// @Autotrade
-549: You should be vending to use @autotrade.
+549: You should have a shop open to use @autotrade.
//550 -> 650: Job Names
550: Novice
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 6abee5223..ab55e952c 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -5945,8 +5945,8 @@ ACMD_FUNC(autotrade)
return -1;
}
- if( !sd->vender_id ) { //check if player is vending
- clif_displaymessage(fd, msg_txt(549)); // You should be vending to use @Autotrade.
+ if( !sd->vender_id && !sd->state.buyingstore ) { //check if player is vending or buying
+ clif_displaymessage(fd, msg_txt(549)); // "You should have a shop open to use @autotrade."
return -1;
}
diff --git a/src/map/buyingstore.c b/src/map/buyingstore.c
index 6871797c8..cf40b0231 100644
--- a/src/map/buyingstore.c
+++ b/src/map/buyingstore.c
@@ -50,6 +50,17 @@ bool buyingstore_setup(struct map_session_data* sd, unsigned char slots)
return false;
}
+ if( sd->sc.data[SC_NOCHAT] && (sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM) )
+ {// custom: mute limitation
+ return false;
+ }
+
+ if( map[sd->bl.m].flag.novending || map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
+ {// custom: no vending maps/cells
+ clif_displaymessage(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
+ return false;
+ }
+
if( slots > MAX_BUYINGSTORE_SLOTS )
{
ShowWarning("buyingstore_setup: Requested %d slots, but server supports only %d slots.\n", (int)slots, MAX_BUYINGSTORE_SLOTS);
@@ -88,6 +99,17 @@ void buyingstore_create(struct map_session_data* sd, int zenylimit, unsigned cha
return;
}
+ if( sd->sc.data[SC_NOCHAT] && (sd->sc.data[SC_NOCHAT]->val1&MANNER_NOROOM) )
+ {// custom: mute limitation
+ return;
+ }
+
+ if( map[sd->bl.m].flag.novending || map_getcell(sd->bl.m, sd->bl.x, sd->bl.y, CELL_CHKNOVENDING) )
+ {// custom: no vending maps/cells
+ clif_displaymessage(sd->fd, msg_txt(276)); // "You can't open a shop on this map"
+ return;
+ }
+
weight = sd->weight;
// check item list
@@ -171,6 +193,12 @@ void buyingstore_close(struct map_session_data* sd)
// notify other players
clif_buyingstore_disappear_entry(sd);
+
+ // remove auto-trader
+ if( sd->state.autotrade )
+ {
+ map_quit(sd);
+ }
}
}
diff --git a/src/map/status.c b/src/map/status.c
index a44fbdd44..33da5fb14 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -6747,7 +6747,8 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid)
case SC_AUTOTRADE:
if (tid == INVALID_TIMER)
break;
- vending_closevending(sd);
+ // Note: vending/buying is closed by unit_remove_map, no
+ // need to do it here.
map_quit(sd);
// Because map_quit calls status_change_end with tid -1
// from here it's not neccesary to continue