From 1a444e3861985b53ac3abf0d95d94471d5eb261f Mon Sep 17 00:00:00 2001
From: mekolat <mekolat@users.noreply.github.com>
Date: Sun, 31 May 2015 16:39:53 -0400
Subject: send pvp channel and rank to client

---
 src/map/clif.cpp | 15 +++++++++++++++
 src/map/clif.hpp |  1 +
 src/map/map.hpp  |  1 +
 src/map/pc.cpp   |  5 +++++
 4 files changed, 22 insertions(+)

(limited to 'src')

diff --git a/src/map/clif.cpp b/src/map/clif.cpp
index 248f74a..fbca96a 100644
--- a/src/map/clif.cpp
+++ b/src/map/clif.cpp
@@ -930,6 +930,8 @@ int clif_spawnpc(dumb_ptr<map_session_data> sd)
 
     clif_send(buf, sd, SendWho::AREA_WOS);
 
+    clif_pvpstatus(sd);
+
     if (sd->bl_m->flag.get(MapFlag::SNOW))
         clif_specialeffect(sd, 162, 1);
     if (sd->bl_m->flag.get(MapFlag::FOG))
@@ -2048,6 +2050,19 @@ int clif_misceffect(dumb_ptr<block_list> bl, int type)
     return 0;
 }
 
+void clif_pvpstatus(dumb_ptr<map_session_data> sd)
+{
+    nullpo_retv(sd);
+
+    Packet_Fixed<0x019a> fixed_19a;
+    fixed_19a.block_id = sd->bl_id;
+    fixed_19a.rank = sd->state.pvp_rank;
+    fixed_19a.channel = sd->state.pvpchannel;
+    Buffer buf = create_fpacket<0x019a, 14>(fixed_19a);
+
+    clif_send(buf, sd, SendWho::AREA);
+}
+
 /*==========================================
  * 表示オプション変更
  *------------------------------------------
diff --git a/src/map/clif.hpp b/src/map/clif.hpp
index 3cc308c..63d3d6a 100644
--- a/src/map/clif.hpp
+++ b/src/map/clif.hpp
@@ -92,6 +92,7 @@ int clif_statusupack(dumb_ptr<map_session_data>, SP, int, int);   // self
 int clif_equipitemack(dumb_ptr<map_session_data>, IOff0, EPOS, int);  // self
 int clif_unequipitemack(dumb_ptr<map_session_data>, IOff0, EPOS, int);    // self
 int clif_misceffect(dumb_ptr<block_list>, int);    // area
+void clif_pvpstatus(dumb_ptr<map_session_data>); // area
 int clif_changeoption(dumb_ptr<block_list>);   // area
 int clif_useitemack(dumb_ptr<map_session_data>, IOff0, int, int);    // self
 
diff --git a/src/map/map.hpp b/src/map/map.hpp
index aac646b..2b638d4 100644
--- a/src/map/map.hpp
+++ b/src/map/map.hpp
@@ -143,6 +143,7 @@ struct map_session_data : block_list, SessionData
         unsigned shroud_disappears_on_talk:1;
         unsigned seen_motd:1;
         unsigned pvpchannel;
+        unsigned pvp_rank;
     } state;
     struct
     {
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index d2b2f44..ebe8bca 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -3313,6 +3313,11 @@ int pc_damage(dumb_ptr<block_list> src, dumb_ptr<map_session_data> sd,
         };
         npc_event_doall_l(stringish<ScriptLabel>("OnPCKilledEvent"_s), sd->bl_id, arg);
         npc_event_doall_l(stringish<ScriptLabel>("OnPCKillEvent"_s), src->bl_id, arg);
+
+        sd->state.pvp_rank = 0;
+        src->is_player()->state.pvp_rank++;
+        clif_pvpstatus(sd);
+        clif_pvpstatus(src->is_player());
     }
     npc_event_doall_l(stringish<ScriptLabel>("OnPCDieEvent"_s), sd->bl_id, nullptr);
 
-- 
cgit v1.2.3-70-g09d2