Quellcode durchsuchen

Added a mapflag to block RODEX (#6291)

Fixes #6286

Thanks to @gabrieldosprazeres
Lemongrass3110 vor 3 Jahren
Ursprung
Commit
f9d4eeb4a1
5 geänderte Dateien mit 32 neuen und 2 gelöschten Zeilen
  1. 4 1
      conf/msg_conf/map_msg.conf
  2. 20 0
      src/map/clif.cpp
  3. 6 1
      src/map/mail.cpp
  4. 1 0
      src/map/map.hpp
  5. 1 0
      src/map/script_constants.hpp

+ 4 - 1
conf/msg_conf/map_msg.conf

@@ -871,7 +871,10 @@
 // @reloadattendancedb
 795: Attendance database has been reloaded.
 
-//796-899 free
+// NoRODEX Mapflag
+796: You cannot use RODEX on this map.
+
+//797-899 free
 
 //------------------------------------
 // More atcommands message

+ 20 - 0
src/map/clif.cpp

@@ -15820,6 +15820,10 @@ void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type typ
 /// 0ac0 <mail id>.Q <unknown>.16B (CZ_OPEN_MAILBOX2)
 /// 0ac1 <mail id>.Q <unknown>.16B (CZ_REQ_REFRESH_MAIL_LIST2)
 void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){
+	if( mail_invalid_operation( sd ) ){
+		return;
+	}
+
 #if PACKETVER < 20150513
 	struct mail_data* md = &sd->mail.inbox;
 
@@ -16034,6 +16038,10 @@ void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){
 
 	safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH);
 
+	if( mail_invalid_operation( sd ) ){
+		return;
+	}
+
 	if( sd->state.storage_flag || sd->state.mail_writing || sd->trade_partner ){
 		clif_send_Mail_beginwrite_ack(sd, name, false);
 		return;
@@ -16072,6 +16080,10 @@ void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short
 void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) {
 	static char name[NAME_LENGTH];
 
+	if( mail_invalid_operation( sd ) ){
+		return;
+	}
+
 	safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH);
 
 	intif_mail_checkreceiver(sd, name);
@@ -16270,6 +16282,10 @@ void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){
 	if (sd->inventory_data[server_index(idx)] == nullptr)
 		return;
 
+	if( mail_invalid_operation( sd ) ){
+		return;
+	}
+
 	flag = mail_setitem(sd, idx, amount);
 
 	if( flag == MAIL_ATTACH_EQUIPSWITCH ){
@@ -16352,6 +16368,10 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd){
 		return;
 	}
 
+	if( mail_invalid_operation( sd ) ){
+		return;
+	}
+
 	// Forged request without a begin writing packet?
 	if( !sd->state.mail_writing ){
 		return; // Ignore it

+ 6 - 1
src/map/mail.cpp

@@ -396,9 +396,14 @@ bool mail_invalid_operation(struct map_session_data *sd)
 		ShowWarning("clif_parse_Mail: char '%s' trying to do invalid mail operations.\n", sd->status.name);
 		return true;
 	}
-#endif
+#else
+	if( map_getmapflag( sd->bl.m, MF_NORODEX ) ){
+		clif_displaymessage( sd->fd, msg_txt( sd, 796 ) ); // You cannot use RODEX on this map.
+		return true;
+	}
 
 	return false;
+#endif
 }
 
 /**

+ 1 - 0
src/map/map.hpp

@@ -610,6 +610,7 @@ enum e_mapflag : int16 {
 	MF_PRIVATEAIRSHIP_DESTINATION,
 	MF_SKILL_DURATION,
 	MF_NOCASHSHOP,
+	MF_NORODEX,
 	MF_MAX
 };
 

+ 1 - 0
src/map/script_constants.hpp

@@ -479,6 +479,7 @@
 	export_constant(MF_PRIVATEAIRSHIP_DESTINATION);
 	export_constant(MF_SKILL_DURATION);
 	export_constant(MF_NOCASHSHOP);
+	export_constant(MF_NORODEX);
 
 	/* setcell types */
 	export_constant(CELL_WALKABLE);