Clan packet rework.

Contributed by rocknowx.
This commit is contained in:
MobiusDev
2015-11-26 09:09:44 +00:00
parent 70303485f0
commit 20e11faffc
9 changed files with 131 additions and 48 deletions

View File

@ -163,7 +163,7 @@ public class EnterWorld extends L2GameClientPacket
}
else
{
int instanceId = InstanceManager.getInstance().getPlayerInstance(activeChar.getObjectId());
final int instanceId = InstanceManager.getInstance().getPlayerInstance(activeChar.getObjectId());
if (instanceId > 0)
{
InstanceManager.getInstance().getInstance(instanceId).removePlayer(activeChar.getObjectId());
@ -277,9 +277,8 @@ public class EnterWorld extends L2GameClientPacket
if (activeChar.getClan() != null)
{
final L2Clan clan = activeChar.getClan();
clan.broadcastToOnlineMembers(new PledgeShowMemberListUpdate(activeChar));
activeChar.sendPacket(new PledgeShowMemberListUpdate(activeChar));
sendPacket(new PledgeShowMemberListAll(clan));
clan.broadcastToOnlineMembers(new ExPledgeCount(clan));
activeChar.sendPacket(new PledgeSkillList(clan));
}
else
@ -727,6 +726,7 @@ public class EnterWorld extends L2GameClientPacket
msg.addString(activeChar.getName());
clan.broadcastToOtherOnlineMembers(msg, activeChar);
clan.broadcastToOtherOnlineMembers(new PledgeShowMemberListUpdate(activeChar), activeChar);
clan.broadcastToOnlineMembers(new ExPledgeCount(clan));
}
}

View File

@ -22,7 +22,6 @@ import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2ClanMember;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.PledgeReceiveMemberInfo;
import com.l2jserver.gameserver.network.serverpackets.PledgeSkillList;
/**
* Format: (ch) dS
@ -64,8 +63,6 @@ public final class RequestPledgeMemberInfo extends L2GameClientPacket
return;
}
activeChar.sendPacket(new PledgeReceiveMemberInfo(member));
activeChar.sendPacket(new PledgeSkillList(clan));
activeChar.broadcastUserInfo();
}
@Override

View File

@ -18,7 +18,6 @@
*/
package com.l2jserver.gameserver.network.clientpackets;
import com.l2jserver.gameserver.model.ClanPrivilege;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.ManagePledgePower;
@ -49,33 +48,20 @@ public final class RequestPledgePower extends L2GameClientPacket
protected void runImpl()
{
final L2PcInstance player = getClient().getActiveChar();
if (player == null)
if ((player == null) || !player.isClanLeader())
{
return;
}
if (_action == 2)
{
if (player.isClanLeader())
{
if (_rank == 9)
{
// The rights below cannot be bestowed upon Academy members:
// Join a clan or be dismissed
// Title management, crest management, master management, level management,
// bulletin board administration
// Clan war, right to dismiss, set functions
// Auction, manage taxes, attack/defend registration, mercenary management
// => Leaves only CP_CL_VIEW_WAREHOUSE, CP_CH_OPEN_DOOR, CP_CS_OPEN_DOOR?
_privs &= ClanPrivilege.CL_VIEW_WAREHOUSE.getBitmask() | ClanPrivilege.CH_OPEN_DOOR.getBitmask() | ClanPrivilege.CS_OPEN_DOOR.getBitmask();
}
player.getClan().setRankPrivs(_rank, _privs);
}
player.getClan().setRankPrivs(_rank, _privs);
}
else
{
player.sendPacket(new ManagePledgePower(getClient().getActiveChar().getClan(), _action, _rank));
player.getClan().updateRankPrivs(_rank, player.getClan().getRankPrivs(_rank).getBitmask());
}
player.sendPacket(new ManagePledgePower(player.getClan(), _action, _rank));
}
@Override

View File

@ -22,6 +22,8 @@ import com.l2jserver.gameserver.model.ClanPrivilege;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2ClanMember;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.serverpackets.PledgeReceiveMemberInfo;
import com.l2jserver.gameserver.network.serverpackets.PledgeReceiveUpdatePower;
/**
* Format: (ch) Sd
@ -79,7 +81,8 @@ public final class RequestPledgeSetMemberPowerGrade extends L2GameClientPacket
}
member.setPowerGrade(_powerGrade);
clan.broadcastClanStatus();
member.getPlayerInstance().sendPacket(new PledgeReceiveUpdatePower(member.getClan().getRankPrivs(_powerGrade).getBitmask()));
clan.broadcastToOnlineMembers(new PledgeReceiveMemberInfo(member));
}
@Override

View File

@ -22,7 +22,6 @@ import com.l2jserver.gameserver.model.L2Clan;
public class ManagePledgePower extends L2GameServerPacket
{
private final int _action;
private final L2Clan _clan;
private final int _rank;
@ -37,12 +36,9 @@ public class ManagePledgePower extends L2GameServerPacket
@Override
protected final void writeImpl()
{
if (_action == 1)
{
writeC(0x2A);
writeD(_rank);
writeD(_action);
writeD(_clan.getRankPrivs(_rank).getBitmask());
}
writeC(0x2A);
writeD(_rank);
writeD(_action);
writeD(_clan.getRankPrivs(_rank).getBitmask());
}
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (C) 2004-2015 L2J Server
*
* This file is part of L2J Server.
*
* L2J Server is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* L2J Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jserver.gameserver.network.serverpackets;
/**
* @author Mobius
*/
public class PledgeReceiveUpdatePower extends L2GameServerPacket
{
private final int _level;
public PledgeReceiveUpdatePower(int level)
{
_level = level;
}
@Override
protected final void writeImpl()
{
writeC(0xFE);
writeH(0x43);
writeD(_level);
}
}

View File

@ -24,45 +24,71 @@ import com.l2jserver.Config;
import com.l2jserver.gameserver.model.L2Clan;
import com.l2jserver.gameserver.model.L2Clan.SubPledge;
import com.l2jserver.gameserver.model.L2ClanMember;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
public class PledgeShowMemberListAll extends L2GameServerPacket
{
private final L2Clan _clan;
private final SubPledge _subPledge;
private final Collection<L2ClanMember> _members;
private int _pledgeType;
public PledgeShowMemberListAll(L2Clan clan)
{
_clan = clan;
_subPledge = null;
_members = _clan.getMembers();
}
public PledgeShowMemberListAll(L2Clan clan, SubPledge subPledge)
{
_clan = clan;
_subPledge = subPledge;
_members = _clan.getMembers();
}
@Override
protected final void writeImpl()
{
// write main Clan
writePledge(null, _clan.getLeaderName());
for (SubPledge subPledge : _clan.getAllSubPledges())
if (_subPledge == null)
{
L2PcInstance pLeader = L2World.getInstance().getPlayer(subPledge.getLeaderId());
writePledge(subPledge, (pLeader == null ? "" : pLeader.getName()));
// write main Clan
writePledge(null, _clan.getName(), _clan.getLeaderName());
for (SubPledge subPledge : _clan.getAllSubPledges())
{
getClient().sendPacket(new PledgeShowMemberListAll(_clan, subPledge));
}
}
else
{
writePledge(_subPledge, _subPledge.getName(), getLeaderName());
}
}
private void writePledge(SubPledge pledge, String name)
private void writePledge(SubPledge pledge, String name, String ldname)
{
final int pledgeId = (pledge == null ? 0x00 : pledge.getId());
_pledgeType = (pledge == null ? 0x00 : pledge.getId());
writeC(0x5a);
writeD(pledge == null ? 0 : 1);
String _name = "";
for (SubPledge subPledge : _clan.getAllSubPledges())
{
_name = subPledge.getName();
}
if ((_name == "") || (_name == name))
{
writeD(0);
}
else
{
writeD(1);
}
writeD(_clan.getId());
writeD(Config.SERVER_ID);
writeD(pledgeId);
writeS(_clan.getName());
writeS(_clan.getLeaderName());
writeD(_pledgeType);
writeS(name);
writeS(ldname);
writeD(_clan.getCrestId()); // crest id .. is used again
writeD(_clan.getLevel());
@ -103,6 +129,25 @@ public class PledgeShowMemberListAll extends L2GameServerPacket
}
writeD(m.isOnline() ? m.getObjectId() : 0); // objectId = online 0 = offline
writeD(m.getSponsor() != 0 ? 1 : 0);
writeC(0x00);
}
}
private String getLeaderName()
{
int LeaderId = _subPledge.getLeaderId();
if ((_subPledge.getId() == L2Clan.SUBUNIT_ACADEMY) || (LeaderId == 0))
{
return "";
}
else if (_clan.getClanMember(LeaderId) == null)
{
_log.warning("SubPledgeLeader: " + LeaderId + " is missing from clan: " + _clan.getName() + "[" + _clan.getId() + "]");
return "";
}
else
{
return _clan.getClanMember(LeaderId).getName();
}
}
}

View File

@ -98,5 +98,6 @@ public final class PledgeShowMemberListUpdate extends L2GameServerPacket
writeD(0);
}
writeD(_hasSponsor);
writeC(0);
}
}