Browse Source

Applied suggestion in tid:74775. Added script command cleanmap and cleanarea script commands. Also modified @cleanmap to properly clean the entire map and added @cleanarea to clean an specified area. A documentation will be done in shortly.
Automagically copy files from import-tmpl to import folder on Windows after building the project (only works with rAthena-10 and rAthena-12) (tid:74635).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16971 54d463be-8e91-2dee-dedb-b68131a5f0ec

momacabu 12 years ago
parent
commit
fbd6003be0
5 changed files with 87 additions and 6 deletions
  1. 1 0
      conf/groups.conf
  2. 22 5
      src/map/atcommand.c
  3. 42 1
      src/map/script.c
  4. 11 0
      vcproj-10/map-server_sql.vcxproj
  5. 11 0
      vcproj-12/map-server_sql.vcxproj

+ 1 - 0
conf/groups.conf

@@ -188,6 +188,7 @@ groups: (
 		monsterbig: true
 		monsterbig: true
 		killmonster2: true
 		killmonster2: true
 		cleanmap: true
 		cleanmap: true
+        cleanarea: true
 		item: [true, true]
 		item: [true, true]
 		zeny: [true, true]
 		zeny: [true, true]
 		disguise: [true, true]
 		disguise: [true, true]

+ 22 - 5
src/map/atcommand.c

@@ -6100,8 +6100,9 @@ ACMD_FUNC(mobsearch)
 
 
 /*==========================================
 /*==========================================
  * @cleanmap - cleans items on the ground
  * @cleanmap - cleans items on the ground
+ * @cleanarea - cleans items on the ground within an specified area
  *------------------------------------------*/
  *------------------------------------------*/
-static int atcommand_cleanmap_sub(struct block_list *bl, va_list ap)
+static int atcommand_cleanfloor_sub(struct block_list *bl, va_list ap)
 {
 {
     nullpo_ret(bl);
     nullpo_ret(bl);
     map_clearflooritem(bl);
     map_clearflooritem(bl);
@@ -6111,10 +6112,25 @@ static int atcommand_cleanmap_sub(struct block_list *bl, va_list ap)
 
 
 ACMD_FUNC(cleanmap)
 ACMD_FUNC(cleanmap)
 {
 {
-    map_foreachinarea(atcommand_cleanmap_sub, sd->bl.m,
-                      sd->bl.x-AREA_SIZE*2, sd->bl.y-AREA_SIZE*2,
-                      sd->bl.x+AREA_SIZE*2, sd->bl.y+AREA_SIZE*2,
-                      BL_ITEM);
+    map_foreachinmap(atcommand_cleanfloor_sub, sd->bl.m, BL_ITEM);
+    clif_displaymessage(fd, msg_txt(1221)); // All dropped items have been cleaned up.
+    return 0;
+}
+
+ACMD_FUNC(cleanarea)
+{
+    int x0 = 0, y0 = 0, x1 = 0, y1 = 0;
+
+    if (!message || !*message || sscanf(message, "%d %d %d %d", &x0, &y0, &x1, &y1) < 1) {
+        map_foreachinarea(atcommand_cleanfloor_sub, sd->bl.m, sd->bl.x - (AREA_SIZE * 2), sd->bl.y - (AREA_SIZE * 2), sd->bl.x + (AREA_SIZE * 2), sd->bl.y + (AREA_SIZE * 2), BL_ITEM);
+    }
+    else if (sscanf(message, "%d %d %d %d", &x0, &y0, &x1, &y1) == 1) {
+        map_foreachinarea(atcommand_cleanfloor_sub, sd->bl.m, sd->bl.x - x0, sd->bl.y - x0, sd->bl.x + x0, sd->bl.y + x0, BL_ITEM);
+    }
+    else if (sscanf(message, "%d %d %d %d", &x0, &y0, &x1, &y1) == 4) {
+        map_foreachinarea(atcommand_cleanfloor_sub, sd->bl.m, x0, y0, x1, y1, BL_ITEM);
+    }
+
     clif_displaymessage(fd, msg_txt(1221)); // All dropped items have been cleaned up.
     clif_displaymessage(fd, msg_txt(1221)); // All dropped items have been cleaned up.
     return 0;
     return 0;
 }
 }
@@ -8931,6 +8947,7 @@ void atcommand_basecommands(void)
         ACMD_DEF(misceffect),
         ACMD_DEF(misceffect),
         ACMD_DEF(mobsearch),
         ACMD_DEF(mobsearch),
         ACMD_DEF(cleanmap),
         ACMD_DEF(cleanmap),
+        ACMD_DEF(cleanarea),
         ACMD_DEF(npctalk),
         ACMD_DEF(npctalk),
         ACMD_DEF(pettalk),
         ACMD_DEF(pettalk),
         ACMD_DEF(users),
         ACMD_DEF(users),

+ 42 - 1
src/map/script.c

@@ -14233,7 +14233,7 @@ BUILDIN_FUNC(strpos)
     else
     else
         i = 0;
         i = 0;
 
 
-    if (strlen(needle) == 0) {
+    if (needle[0] == '\0') {
         script_pushint(st, -1);
         script_pushint(st, -1);
         return 0;
         return 0;
     }
     }
@@ -17350,6 +17350,45 @@ BUILDIN_FUNC(getrandgroupitem)
     return 0;
     return 0;
 }
 }
 
 
+/* cleanmap <map_name>;
+ * cleanfloor <map_name, <x0>, <y0>, <x1>, <y1>; */
+static int atcommand_cleanfloor_sub(struct block_list *bl, va_list ap)
+{
+    nullpo_ret(bl);
+    map_clearflooritem(bl);
+
+    return 0;
+}
+
+BUILDIN_FUNC(cleanmap)
+{
+    const char *map;
+    int m, index;
+    short x0, y0, x1, y1;
+    
+    map = script_getstr(st, 2);
+    index = mapindex_name2id(map);
+    if (index)
+        m = map_mapindex2mapid(index);
+ 
+    if ((script_lastdata(st) - 2) < 4) {
+        map_foreachinmap(atcommand_cleanfloor_sub, m, BL_ITEM);
+    } else {
+        x0 = script_getnum(st, 3);
+		y0 = script_getnum(st, 4);
+		x1 = script_getnum(st, 5);
+		y1 = script_getnum(st, 6);
+        if (x0 > 0 && y0 > 0 && x1 > 0 && y1 > 0) {
+            map_foreachinarea(atcommand_cleanfloor_sub, m, x0, y0, x1, y1, BL_ITEM);
+        } else {
+            ShowError("cleanarea: invalid coordinate defined!\n");
+            return 1;
+        }
+    }
+    
+    return 0;
+}
+
 
 
 // declarations that were supposed to be exported from npc_chat.c
 // declarations that were supposed to be exported from npc_chat.c
 #ifdef PCRE_SUPPORT
 #ifdef PCRE_SUPPORT
@@ -17791,6 +17830,8 @@ struct script_function buildin_func[] = {
     BUILDIN_DEF(get_revision,""),
     BUILDIN_DEF(get_revision,""),
     BUILDIN_DEF(freeloop,"i"),
     BUILDIN_DEF(freeloop,"i"),
     BUILDIN_DEF(getrandgroupitem, "ii"),
     BUILDIN_DEF(getrandgroupitem, "ii"),
+    BUILDIN_DEF(cleanmap, "s"),
+    BUILDIN_DEF2(cleanmap, "cleanarea", "siiii"),
     /**
     /**
      * @commands (script based)
      * @commands (script based)
      **/
      **/

+ 11 - 0
vcproj-10/map-server_sql.vcxproj

@@ -269,4 +269,15 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
   </ImportGroup>
+  <Target Name="AfterBuild">
+    <Copy SourceFiles="..\conf\import-tmpl\battle_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\char_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\inter_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\log_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />	
+    <Copy SourceFiles="..\conf\import-tmpl\login_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\map_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\msg_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\packet_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\script_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+  </Target>
 </Project>
 </Project>

+ 11 - 0
vcproj-12/map-server_sql.vcxproj

@@ -273,4 +273,15 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
   </ImportGroup>
+  <Target Name="AfterBuild">
+    <Copy SourceFiles="..\conf\import-tmpl\battle_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\char_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\inter_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\log_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />	
+    <Copy SourceFiles="..\conf\import-tmpl\login_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\map_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\msg_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\packet_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+    <Copy SourceFiles="..\conf\import-tmpl\script_conf.txt" DestinationFolder="..\conf\import\" ContinueOnError="true" />
+  </Target>
 </Project>
 </Project>