summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-11-27 21:11:19 +0300
committerAndrei Karas <akaras@inbox.ru>2014-11-27 21:11:19 +0300
commitb87137d73e40be12dbca7ba5fc6c66f1bc8571de (patch)
treefbffc6e504f6ef3de423b1153be751d111691948
parent8befbfe358915a6ee19b9c4be64d3473c98a70f4 (diff)
downloadevol-hercules-b87137d73e40be12dbca7ba5fc6c66f1bc8571de.tar.gz
evol-hercules-b87137d73e40be12dbca7ba5fc6c66f1bc8571de.tar.bz2
evol-hercules-b87137d73e40be12dbca7ba5fc6c66f1bc8571de.tar.xz
evol-hercules-b87137d73e40be12dbca7ba5fc6c66f1bc8571de.zip
Impliment invisible map flag.
-rw-r--r--src/map/clif.c38
-rw-r--r--src/map/clif.h5
-rw-r--r--src/map/init.c3
-rw-r--r--src/map/mapd.c38
-rw-r--r--src/map/mapd.h12
-rw-r--r--src/map/mapdext.h12
6 files changed, 107 insertions, 1 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 68edd81..c4766dc 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -17,6 +17,8 @@
#include "map/clif.h"
#include "map/lang.h"
+#include "map/mapd.h"
+#include "map/mapdext.h"
#include "map/send.h"
void eclif_quest_send_list(struct map_session_data *sd)
@@ -115,6 +117,9 @@ static void eclif_send_additional_slots(struct map_session_data* sd, struct map_
struct item_data *item;
short equip;
+ struct MapdExt *data = mapd_get(sd->bl.m);
+ if (data->invisible)
+ return;
equipPos(EQI_HEAD_LOW, LOOK_HEAD_BOTTOM);
equipPos(EQI_HEAD_TOP, LOOK_HEAD_TOP);
@@ -131,7 +136,6 @@ static void eclif_send_additional_slots(struct map_session_data* sd, struct map_
void eclif_getareachar_unit_post(struct map_session_data* sd, struct block_list *bl)
{
- // need replace it to _post
if (bl->type == BL_PC)
{
eclif_send_additional_slots(sd, (struct map_session_data *)bl);
@@ -143,3 +147,35 @@ void eclif_authok_post(struct map_session_data *sd)
{
eclif_send_additional_slots(sd, sd);
}
+
+void eclif_handle_invisible_map(struct block_list *bl, enum send_target target)
+{
+ if (!bl || bl->type != BL_PC)
+ return;
+ struct MapdExt *data = mapd_get(bl->m);
+ if (data->invisible)
+ hookStop();
+}
+
+void eclif_sendlook(struct block_list *bl, int *id, int *type, int *val, int *val2, enum send_target *target)
+{
+ if (*target == SELF)
+ return;
+ eclif_handle_invisible_map(bl, *target);
+}
+
+bool eclif_send(const void* buf, int *len, struct block_list* bl, enum send_target *type)
+{
+ if (*type == SELF)
+ return;
+ eclif_handle_invisible_map(bl, *type);
+ return true;
+}
+
+void eclif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd, enum send_target *target)
+{
+ if (tsd && bl && bl->id == tsd->bl.id && *target == SELF)
+ return;
+
+ eclif_handle_invisible_map(bl, *target);
+}
diff --git a/src/map/clif.h b/src/map/clif.h
index 190df21..3180919 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -9,5 +9,10 @@ void eclif_quest_add(struct map_session_data *sd, struct quest *qd);
void eclif_charnameack(int *fdPtr, struct block_list *bl);
void eclif_getareachar_unit_post(struct map_session_data* sd, struct block_list *bl);
void eclif_authok_post(struct map_session_data *sd);
+void eclif_sendlook(struct block_list *bl, int *id, int *type,
+ int *val, int *val2, enum send_target *target);
+bool eclif_send(const void* buf, int *len, struct block_list* bl, enum send_target *type);
+void eclif_set_unit_idle(struct block_list* bl, struct map_session_data *tsd,
+ enum send_target *target);
#endif // EVOL_MAP_CLIF
diff --git a/src/map/init.c b/src/map/init.c
index 030e02d..cd0a5ed 100644
--- a/src/map/init.c
+++ b/src/map/init.c
@@ -87,6 +87,9 @@ HPExport void plugin_init (void)
addHookPre("clif->quest_send_list", eclif_quest_send_list);
addHookPre("clif->quest_add", eclif_quest_add);
addHookPre("clif->charnameack", eclif_charnameack);
+ addHookPre("clif->sendlook", eclif_sendlook);
+ addHookPre("clif->send", eclif_send);
+ addHookPre("clif->set_unit_idle", eclif_set_unit_idle);
addHookPost("clif->getareachar_unit", eclif_getareachar_unit_post);
addHookPost("clif->authok", eclif_authok_post);
diff --git a/src/map/mapd.c b/src/map/mapd.c
new file mode 100644
index 0000000..2783f83
--- /dev/null
+++ b/src/map/mapd.c
@@ -0,0 +1,38 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 Evol developers
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "../../../common/HPMi.h"
+#include "../../../common/malloc.h"
+#include "../../../common/mmo.h"
+#include "../../../common/socket.h"
+#include "../../../common/strlib.h"
+#include "../../../map/map.h"
+
+#include "map/mapd.h"
+#include "map/mapdext.h"
+
+struct MapdExt *mapd_get(int m)
+{
+ struct map_data *md = &map->list[m];
+ struct MapdExt *data = getFromMAPD(md, 0);
+ if (!data)
+ {
+ data = mapd_create();
+ addToMAPD(md, data, 0, true);
+ }
+ return data;
+}
+
+struct MapdExt *mapd_create(void)
+{
+ struct MapdExt *data = NULL;
+ CREATE(data, struct MapdExt, 1);
+ if (!data)
+ return NULL;
+ data->invisible = false;
+ return data;
+}
diff --git a/src/map/mapd.h b/src/map/mapd.h
new file mode 100644
index 0000000..a0878ae
--- /dev/null
+++ b/src/map/mapd.h
@@ -0,0 +1,12 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 Evol developers
+
+#ifndef EVOL_MAP_MAPD
+#define EVOL_MAP_MAPD
+
+struct MapdExt;
+
+struct MapdExt *mapd_get(int fd);
+struct MapdExt *mapd_create(void);
+
+#endif // EVOL_MAP_MAPD
diff --git a/src/map/mapdext.h b/src/map/mapdext.h
new file mode 100644
index 0000000..77d56f9
--- /dev/null
+++ b/src/map/mapdext.h
@@ -0,0 +1,12 @@
+// Copyright (c) Copyright (c) Hercules Dev Team, licensed under GNU GPL.
+// Copyright (c) 2014 Evol developers
+
+#ifndef EVOL_MAP_MAPDEXT
+#define EVOL_MAP_MAPDEXT
+
+struct MapdExt
+{
+ bool invisible;
+};
+
+#endif // EVOL_MAP_MAPDEXT