All pastes #394698 Raw Edit

Someone

public text v1 · immutable
·published 2007-03-14 14:57 UTC
rendered paste body
--- MiscHandler.cpp 2007-03-07 20:24:37.000000000 +0700
+++ ../MiscHandler.cpp 2007-03-07 20:28:15.000000000 +0700
@@ -344,6 +344,10 @@
GetPlayer()->pvpInfo.endTimer = time(NULL); // start toggle-off
}
}
+#define ZONE_GURUBASHI 33
+#define ZONE_DIREMAUL 2557
+#define AREA_GURUBASHI 2177
+#define AREA_DIREMAUL 3217

void WorldSession::HandleZoneUpdateOpcode( WorldPacket & recv_data )
{
@@ -353,6 +357,14 @@
recv_data >> newZone;

sLog.outDetail("WORLD: Recvd ZONE_UPDATE: %u", newZone);
+ const AreaTableEntry* const area = GetAreaEntryByAreaID(newZone);
+if(area && newZone == ZONE_GURUBASHI && GetPlayer()->GetAreaId() == AREA_GURUBASHI && GetPlayer()->GetInArena() != 1){
+ GetPlayer()->SetPvPFFA(true, 1);
+}else if(area && newZone == ZONE_DIREMAUL && GetPlayer()->GetAreaId() == AREA_DIREMAUL){
+ GetPlayer()->SetPvPFFA(true, 2);
+}else if(area && GetPlayer()->GetInArena() != 0){
+ GetPlayer()->SetPvPFFACounter(time(NULL));
+}

GetPlayer()->UpdateZone();
}
--- MovementHandler.cpp 2007-03-07 20:30:20.000000000 +0700
+++ ../MovementHandler.cpp 2007-03-07 20:33:22.000000000 +0700
@@ -48,7 +48,7 @@
return;

/* extract packet */
- uint32 flags, time, fallTime;
+ uint32 flags, time2, fallTime;
float x, y, z, orientation;

uint32 t_GUIDl, t_GUIDh;
@@ -56,8 +56,9 @@
float s_angle;
float j_unk1, j_sinAngle, j_cosAngle, j_xyspeed;

- recv_data >> flags >> time;
- recv_data >> x >> y >> z >> orientation;
+
+recv_data >> flags >> time2;
+recv_data >> x >> y >> z >> orientation;
if (flags & MOVEMENTFLAG_ONTRANSPORT)
{
// recheck
@@ -161,6 +162,9 @@

GetPlayer()->SetPosition(x, y, z, orientation);
GetPlayer()->SetMovementFlags(flags);
+ if(GetPlayer()->GetInArena() == 2 && GetPlayer()->GetPositionY() > float(1135.5))
+ GetPlayer()->SetPvPFFACounter(time(NULL));
+
}

void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
--- Player.cpp 2007-03-07 20:33:35.000000000 +0700
+++ ../Player.cpp 2007-03-07 20:38:07.000000000 +0700
@@ -135,6 +135,8 @@
m_lastManaUse = 0;
m_deathTimer = 0;
m_resurrectingSicknessExpire = 0;
+ m_pvpffa_count = 0;
+m_inArena = false;

m_DetectInvTimer = 1000;
m_DiscoveredPj = 0;
@@ -647,7 +649,7 @@
time_t now = time (NULL);

UpdatePvPFlag(time(NULL));
-
+ UpdatePVPFFAFlag(time(NULL));
UpdateDuelFlag(time(NULL));

CheckDuelDistance(time(NULL));
@@ -11059,6 +11061,16 @@

UpdatePvP(false);
}
+void Player::UpdatePVPFFAFlag(time_t currTime)
+{
+ if(m_pvpffa_count == 0) return;
+ if( isInCombatWithPlayer() )
+ SetPvPFFACounter(time(NULL));
+ if((m_pvpffa_count+30) > currTime) return;
+
+ SetPvPFFA(false);
+}
+

void Player::UpdateDuelFlag(time_t currTime)
{
--- Player.h 2007-03-07 20:38:20.000000000 +0700
+++ ../Player.h 2007-03-07 20:40:43.000000000 +0700
@@ -278,6 +278,7 @@
PLAYER_FLAGS_GM = 0x00000008,
PLAYER_FLAGS_GHOST = 0x00000010,
PLAYER_FLAGS_RESTING = 0x00000020,
+ PLAYER_FLAGS_IN_PVP_FFA = 0x00000080,
PLAYER_FLAGS_IN_PVP = 0x00000200,
PLAYER_FLAGS_HIDE_HELM = 0x00000400,
PLAYER_FLAGS_HIDE_CLOAK = 0x00000800,
@@ -914,6 +915,22 @@
}
void UpdateZone();
void UpdatePvPFlag(time_t currTime);
+ void UpdatePVPFFAFlag(time_t currTime);
+void SetPvPFFA(bool b, uint8 arena=0)
+{
+ if( b ){
+ SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP_FFA);
+ SetInArena(arena);
+ }else{
+ RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP_FFA);
+ SetInArena(0);
+ }
+ SetPvPFFACounter(0);
+}
+void SetPvPFFACounter(time_t count) { m_pvpffa_count = count; }
+uint8 GetInArena() { return m_inArena; }
+void SetInArena(uint8 arena) { m_inArena = arena; }
+

/** todo: -maybe move UpdateDuelFlag+DuelComplete to independent DuelHandler.. **/
DuelInfo *duel;
@@ -1330,6 +1347,9 @@
time_t m_resurrectingSicknessExpire;

uint32 m_restTime;
+ time_t m_pvpffa_count;
+ uint8 m_inArena;
+

uint32 m_BlockValue;
uint32 m_soulStoneSpell;