Support for new pledge member statuses.

This commit is contained in:
MobiusDevelopment
2019-03-17 14:59:41 +00:00
parent 104e56cab8
commit fb1ceb841e
105 changed files with 381 additions and 2244 deletions

View File

@@ -4,7 +4,4 @@
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12.htm">"I'd like to manage my Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13.htm">"I want to manage my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14.htm">"I want to manage my Order of Knights."</Button>
</body></html> </body></html>

View File

@@ -1,3 +0,0 @@
<html><body><br><br>
You are not the leader of this clan. You may not raise the level of it.
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
The clan level can be raised. Raising clan level requires the following:<br>
Level 1 - SP : 20,000 Adena : 650,000<br>
Level 2 - SP: 100,000 / Adena: 2,500,000<br>
Level 3 - SP: 350,000 / Item: Blood Mark<br>
Level 4 - SP: 1,000,000 / Item: Alliance Manifesto<br>
Level 5 - SP: 2,500,000 / Item: Seal of Aspiration<br>
Level 6 - Clan Fame: 5,000 / Clan Member: More than 30<br>
Level 7 - Clan Fame: 10,000 / Clan Member: More than 50<br>
Level 8 - Clan Fame: 20,000 / Clan Member: More than 80<br>
Level 9 - Clan Fame: 40,000 / Clan Member: More than 120 / Item: 150 Blood Oaths<br>
Level 10 - Clan Fame: 40,000 / Clan Member: More than 140 / Item: 5 Blood Alliance<br>
Level 11 - Clan Fame: 75,000 / Clan Member: More than 170 / Must be Territory Owner<br>
You can obtain a Blood Mark by killing a Bloody Queen. They are located in Watcher's Tomb or around the Forbidden Gateway.<br>
To obtain an Alliance Manifesto, meet sir Christopher Rodemai of Giran Castle Town.<br>
To obtain a Seal of Aspiration, see Sir Gustav Athebaldt in the Town of Oren.<br>
To obtain Blood Oath, acquire a fortress and prove that the territories are being protected.<br>
To obtain the Determination of Blood, possess a castle and prove that the territories are being protected and citizens are being taken care of.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-16.htm">How to obtain Clan Fame</Button>
<button value="Level Up" action="bypass -h npc_%objectId%_increase_clan_level" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
</body></html>

View File

@@ -1,11 +0,0 @@
<html><body> Clans Lv. 5 or above can found an Academy.<br>
You can enroll in an Academy if your main and subclasses are all below Lv. 85 and have not Awakened. If an Academy member Awakens, they automatically graduate.<br>
Up to 20 members may enroll at an Academy. The amount of Reputation a clan receives when a member graduates varies depending on the member's level upon entry.<br>
When a clan founds an Academy, its clan leader gains buffs for the benefit of the members.<br>
Academy members can use their Academy Circlets to efficiently power-up their character.<br>
The leader can appoint a clan member to sponsor an Academy member, which gives the sponsor buffs to use on the sponsored member. They're a bit weaker than the clan leader's buffs, however.<br>
In addition, sponsors can help their partners carry out Academy quests, and check their login status.<br>
Academy members can do Academy quests with their sponsors at Lv. 70. Upon success, the clan, sponsor, and Academy member are all rewarded.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12a.htm">"I'd like to found an Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12b.htm">"I'd like to change my Academy's name."</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Create Academy:<br>
Enter Academy Name:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_academy $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename the existing Academy:<br>
Enter new name for Academy:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge -1 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>Clans Lv. 6 or above may create Royal Guards with 5,000 Clan Reputation points.<br>
You can create up to 2 Royal Guards. Each can have up to 20 clan members. A clan that reaches Lv. 11 may increase the number of its Royal Guard members with 7,500 Clan Reputation points.<br>
Upon creation of a Royal Guard, 1 Royal Guard Captain must be appointed from among the clan members. The social class of the newly-appointed Royal Guard Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13a.htm">"I want to create a Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Royal Guard. [NOT DONE]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13b.htm">"I want to rename my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-15.htm">"I want to change Royal Guard Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Royal Guard Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_royal $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,4 +0,0 @@
<body><html>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13c.htm">Rename the First Royal Guard.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13d.htm">Rename the Second Royal Guard.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename First Royal Guard:<br>
Enter new name for First Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 100 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename Second Royal Guard:<br>
Enter new name for Second Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 200 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,10 +0,0 @@
<html><body>A clan Lv. 7 or above may establish an Order of Knights with 10,000 Clan Reputation points.<br>
You can create up to 4 Orders of Knights. Each can have up to 10 clan members.<br>
A clan that reaches Lv. 9 may increase the number of members in its Orders of Knights with 5,000 Clan Reputation points. Up to Lv. 10, they can do so for 2 Orders of Knights.<br>
Upon creation of an Order of Knights, 1 Captain must be appointed from among its members. The social class of the newly-appointed Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14a.htm">"I want to create an Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Order of Knights. [not done]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14b.htm">"I want to change the name of my Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to change Knight Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Order of Knights Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_knight $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14c.htm">Rename First Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14d.htm">Rename Second Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14e.htm">Rename Third Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14f.htm">Rename Fourth Order of Knights.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename first Order of Knights:<br>
Enter new name for first Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename second Order of Knights:<br>
Enter new name for second Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename third Order of Knights:<br>
Enter new name for third Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename fourth Order of Knights:<br>
Enter new name for fourth Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Assign new sub-unit leader:<br>
Enter unit name:<br>
<edit var="name" width=120><br>
Enter new unit leader name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_assign_subpl_leader $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
<font color="FF9900">[Acquiring Clan Fame]</font><br>
1. A new clan member who completes the Second Class Transfer through an academy will add from <font color="00FFFF">190 points</font> to <font color="00FFFF">650 points</font> to the clan's fame, depending on their level when joining the academy.<br>
2. If a castle is captured following a siege, <font color="00FFFF">1500 points</font> are added. (<font color="00FFFF">1500 points</font> are added even if the defenders are NPCs.)<br>
3. If a clan maintains possession of a castle for 2 consecutive weeks, <font color="00FFFF">750 points</font> are added.<br>
4. When the clan acquires a battle-type hideout, <font color="00FFFF">500 points</font> are added; if the hide-out was captured from another clan, <font color="00FFFF">500 points</font> are taken from their score.<br>
5. If a clan member maintains possession of a battle-type hideout for 2 consecutive weeks, <font color="00FFFF">250 points</font>are added.<br>
6. If a clan member is also a member of the party that wins first place in the Festival of Darkness, <font color="00FFFF">200 points</font> are added.<br>
7. If a clan member is reborn as a hero, up to <font color="00FFFF">1000 points</font> are added (depending on the number of members).<br>
8. Fame can also be increased through special clan quests.<br>
9. If your clan defeats an enemy clan member during clan war (dual declared state) or a castle siege, <font color="00FFFF">1 points</font> per clan member is added from the enemy clan.<br>
*If the other clan is below level 5 or its fame is less than 0, your clan cannot acquire its fame.<br>
10. If a fortress is captured following a siege, <font color="00FFFF">200 points</font> are added.<br>
11. If your clan demolished the ballistas inside a fortress, <font color="00FFFF">30 points</font> are added.<br>
<font color="FF9900">[Losing Clan Fame]</font><br>
1. If you fail to defend a castle or fortress in a siege, up to <font color="00FFFF">3000 points</font> can be lost.<br>
2. If you lose a battle-type hideout to another clan, up to <font color="00FFFF">1000 points</font> can be lost.<br>
3. If an allied clan member is killed by an enemy clan member during a clan war (dual declared state) or a castle siege, <font color="00FFFF">1 point</font> is lost per clan member.<br>
4. Fame points can be used to purchase items to help raise the clan's level, or to acquire clan skills.<br>
*Fame is not lost if the clan is below level 5 or its fame is less than 0.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-03.htm">Back</Button>
</body></html>

View File

@@ -64,13 +64,6 @@ public final class Clan extends AbstractNpcAI
LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm"); LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm");
LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm"); LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm");
LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm"); LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-15.htm", "9000-07-no.htm");
} }
private Clan() private Clan()

View File

@@ -39,11 +39,59 @@ public class ClanLevelData
27300000, 27300000,
36400000, 36400000,
46410000, 46410000,
0 // Max level (15). 0
};
private final static int[] COMMON_CLAN_MEMBER_LIMIT =
{
10,
15,
20,
30,
40,
42,
68,
85,
94,
102,
111,
120,
128,
137,
145,
171
};
private final static int[] ELITE_CLAN_MEMBER_LIMIT =
{
0,
0,
0,
0,
0,
8,
12,
15,
16,
18,
19,
20,
22,
23,
25,
29
}; };
public static int getLevelRequirement(int clanLevel) public static int getLevelRequirement(int clanLevel)
{ {
return CLAN_LEVEL_REQUIREMENTS[clanLevel]; return CLAN_LEVEL_REQUIREMENTS[clanLevel];
} }
public static int getCommonMemberLimit(int clanLevel)
{
return COMMON_CLAN_MEMBER_LIMIT[clanLevel];
}
public static int getEliteMemberLimit(int clanLevel)
{
return ELITE_CLAN_MEMBER_LIMIT[clanLevel];
}
} }

View File

@@ -67,7 +67,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd; import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
import com.l2jmobius.gameserver.network.serverpackets.PledgeReceiveSubPledgeCreated;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll;
@@ -99,21 +98,10 @@ public class L2Clan implements IIdentifiable, INamable
public static final int PENALTY_TYPE_DISMISS_CLAN = 3; public static final int PENALTY_TYPE_DISMISS_CLAN = 3;
/** Leader clan dissolve ally */ /** Leader clan dissolve ally */
public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4; public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4;
// Sub-unit types
/** Clan subunit type of Academy */ // Pledge types
public static final int SUBUNIT_ACADEMY = -1; public static final int PLEDGE_CLASS_COMMON = 0;
/** Clan subunit type of Royal Guard A */ public static final int PLEDGE_CLASS_ELITE = 100;
public static final int SUBUNIT_ROYAL1 = 100;
/** Clan subunit type of Royal Guard B */
public static final int SUBUNIT_ROYAL2 = 200;
/** Clan subunit type of Order of Knights A-1 */
public static final int SUBUNIT_KNIGHT1 = 1001;
/** Clan subunit type of Order of Knights A-2 */
public static final int SUBUNIT_KNIGHT2 = 1002;
/** Clan subunit type of Order of Knights B-1 */
public static final int SUBUNIT_KNIGHT3 = 2001;
/** Clan subunit type of Order of Knights B-2 */
public static final int SUBUNIT_KNIGHT4 = 2002;
private String _name; private String _name;
private int _clanId; private int _clanId;
@@ -289,14 +277,14 @@ public class L2Clan implements IIdentifiable, INamable
if (exLeader != null) if (exLeader != null)
{ {
exLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(exLeader)); exLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
exLeader.broadcastUserInfo(); exLeader.broadcastUserInfo();
exLeader.checkItemRestriction(); exLeader.checkItemRestriction();
} }
if (newLeader != null) if (newLeader != null)
{ {
newLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(newLeader)); newLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
newLeader.getClanPrivileges().setAll(); newLeader.getClanPrivileges().setAll();
if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel()) if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel())
@@ -377,7 +365,7 @@ public class L2Clan implements IIdentifiable, INamable
addClanMember(member); addClanMember(member);
member.setPlayerInstance(player); member.setPlayerInstance(player);
player.setClan(this); player.setClan(this);
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player)); player.setPledgeClass(PLEDGE_CLASS_COMMON);
player.sendPacket(new PledgeShowMemberListUpdate(player)); player.sendPacket(new PledgeShowMemberListUpdate(player));
player.sendPacket(new PledgeSkillList(this)); player.sendPacket(new PledgeSkillList(this));
@@ -526,7 +514,6 @@ public class L2Clan implements IIdentifiable, INamable
player.setClanJoinExpiryTime(clanJoinExpiryTime); player.setClanJoinExpiryTime(clanJoinExpiryTime);
} }
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
player.broadcastUserInfo(); player.broadcastUserInfo();
// disable clan tab // disable clan tab
player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET); player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET);
@@ -563,102 +550,6 @@ public class L2Clan implements IIdentifiable, INamable
return result; return result;
} }
/**
* @param pledgeType the Id of the pledge type.
* @return the maximum number of members allowed for a given {@code pledgeType}.
*/
public int getMaxNrOfMembers(int pledgeType)
{
int limit = 0;
switch (pledgeType)
{
case 0:
{
switch (_level)
{
case 3:
{
limit = 30;
break;
}
case 2:
{
limit = 20;
break;
}
case 1:
{
limit = 15;
break;
}
case 0:
{
limit = 10;
break;
}
default:
{
limit = 40;
break;
}
}
break;
}
case -1:
{
limit = 20;
break;
}
case 100:
case 200:
{
switch (_level)
{
case 11:
{
limit = 30;
break;
}
default:
{
limit = 20;
break;
}
}
break;
}
case 1001:
case 1002:
case 2001:
case 2002:
{
switch (_level)
{
case 9:
case 10:
case 11:
{
limit = 25;
break;
}
default:
{
limit = 10;
break;
}
}
break;
}
default:
{
break;
}
}
return limit;
}
/** /**
* @param exclude the object Id to exclude from list. * @param exclude the object Id to exclude from list.
* @return all online members excluding the one with object id {code exclude}. * @return all online members excluding the one with object id {code exclude}.
@@ -1841,35 +1732,15 @@ public class L2Clan implements IIdentifiable, INamable
return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]); return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]);
} }
public SubPledge createSubPledge(L2PcInstance player, int pledgeType, int leaderId, String subPledgeName) public SubPledge createSubPledge(int pledgeType)
{ {
SubPledge subPledge = null; if ((_subPledges == null) || (_subPledges.get(pledgeType) != null))
pledgeType = getAvailablePledgeTypes(pledgeType);
if (pledgeType == 0)
{ {
if (pledgeType == SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.YOUR_CLAN_HAS_ALREADY_ESTABLISHED_A_CLAN_ACADEMY);
}
else
{
player.sendMessage("You can't create any more sub-units of this type");
}
return null;
}
if (_leader.getObjectId() == leaderId)
{
player.sendMessage("Leader is not correct");
return null; return null;
} }
// Royal Guard 5000 points per each final String subPledgeName = pledgeType == PLEDGE_CLASS_COMMON ? "COMMON" : "ELITE";
// Order of Knights 10000 points per each SubPledge subPledge = null;
if ((pledgeType != -1) && (((_reputationScore < Config.ROYAL_GUARD_COST) && (pledgeType < SUBUNIT_KNIGHT1)) || ((_reputationScore < Config.KNIGHT_UNIT_COST) && (pledgeType > SUBUNIT_ROYAL2))))
{
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
return null;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)")) PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)"))
@@ -1877,81 +1748,22 @@ public class L2Clan implements IIdentifiable, INamable
ps.setInt(1, _clanId); ps.setInt(1, _clanId);
ps.setInt(2, pledgeType); ps.setInt(2, pledgeType);
ps.setString(3, subPledgeName); ps.setString(3, subPledgeName);
ps.setInt(4, pledgeType != -1 ? leaderId : 0); ps.setInt(4, _leader.getObjectId());
ps.execute(); ps.execute();
subPledge = new SubPledge(pledgeType, subPledgeName, leaderId); subPledge = new SubPledge(pledgeType, subPledgeName, _leader.getObjectId());
_subPledges.put(pledgeType, subPledge); _subPledges.put(pledgeType, subPledge);
if (pledgeType != -1)
{
// Royal Guard 5000 points per each
// Order of Knights 10000 points per each
if (pledgeType < SUBUNIT_KNIGHT1)
{
setReputationScore(_reputationScore - Config.ROYAL_GUARD_COST, true);
}
else
{
setReputationScore(_reputationScore - Config.KNIGHT_UNIT_COST, true);
// TODO: clan lvl9 or more can reinforce knights cheaper if first knight unit already created, use Config.KNIGHT_REINFORCE_COST
}
}
} }
catch (Exception e) catch (Exception e)
{ {
LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e); LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e);
} }
broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan())); // broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan()));
broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan())); // broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan()));
return subPledge; return subPledge;
} }
public int getAvailablePledgeTypes(int pledgeType)
{
if (_subPledges.get(pledgeType) != null)
{
// LOGGER.warning("found sub-unit with id: "+pledgeType);
switch (pledgeType)
{
case SUBUNIT_ACADEMY:
{
return 0;
}
case SUBUNIT_ROYAL1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_ROYAL2);
break;
}
case SUBUNIT_ROYAL2:
{
return 0;
}
case SUBUNIT_KNIGHT1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT2);
break;
}
case SUBUNIT_KNIGHT2:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT3);
break;
}
case SUBUNIT_KNIGHT3:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT4);
break;
}
case SUBUNIT_KNIGHT4:
{
return 0;
}
}
}
return pledgeType;
}
public void updateSubPledgeInDB(int pledgeType) public void updateSubPledgeInDB(int pledgeType)
{ {
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
@@ -2243,18 +2055,11 @@ public class L2Clan implements IIdentifiable, INamable
activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS); activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS);
return false; return false;
} }
if (getSubPledgeMembersCount(pledgeType) >= getMaxNrOfMembers(pledgeType)) if (getSubPledgeMembersCount(pledgeType) >= (pledgeType == 0 ? ClanLevelData.getCommonMemberLimit(_level) : ClanLevelData.getEliteMemberLimit(_level)))
{ {
if (pledgeType == 0) final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
{ sm.addString(_name);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME); activeChar.sendPacket(sm);
sm.addString(_name);
activeChar.sendPacket(sm);
}
else
{
activeChar.sendPacket(SystemMessageId.THIS_CLAN_IS_FULL_AND_CANNOT_ACCEPT_NEW_MEMBERS_AT_THIS_TIME);
}
return false; return false;
} }
return true; return true;

View File

@@ -714,6 +714,10 @@ public class L2ClanMember
break; break;
} }
case 11: case 11:
case 12:
case 13:
case 14:
case 15:
{ {
switch (player.getPledgeType()) switch (player.getPledgeType())
{ {

View File

@@ -1040,25 +1040,22 @@ public final class L2PcInstance extends L2Playable
} }
if ((clan != null) && (targetClan != null)) if ((clan != null) && (targetClan != null))
{ {
if ((target.getPledgeType() != L2Clan.SUBUNIT_ACADEMY) && (getPledgeType() != L2Clan.SUBUNIT_ACADEMY)) ClanWar war = clan.getWarWith(target.getClan().getId());
if (war != null)
{ {
ClanWar war = clan.getWarWith(target.getClan().getId()); switch (war.getState())
if (war != null)
{ {
switch (war.getState()) case DECLARATION:
case BLOOD_DECLARATION:
{ {
case DECLARATION: result |= RelationChanged.RELATION_DECLARED_WAR;
case BLOOD_DECLARATION: break;
{ }
result |= RelationChanged.RELATION_DECLARED_WAR; case MUTUAL:
break; {
} result |= RelationChanged.RELATION_DECLARED_WAR;
case MUTUAL: result |= RelationChanged.RELATION_MUTUAL_WAR;
{ break;
result |= RelationChanged.RELATION_DECLARED_WAR;
result |= RelationChanged.RELATION_MUTUAL_WAR;
break;
}
} }
} }
} }
@@ -9036,6 +9033,10 @@ public final class L2PcInstance extends L2Playable
public void setPledgeType(int typeId) public void setPledgeType(int typeId)
{ {
if (_clan != null)
{
_clan.createSubPledge(typeId);
}
_pledgeType = typeId; _pledgeType = typeId;
} }

View File

@@ -30,7 +30,6 @@ import com.l2jmobius.gameserver.instancemanager.FortManager;
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager; import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import com.l2jmobius.gameserver.instancemanager.SiegeManager; import com.l2jmobius.gameserver.instancemanager.SiegeManager;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2Clan.SubPledge;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.L2SkillLearn; import com.l2jmobius.gameserver.model.L2SkillLearn;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -46,8 +45,6 @@ import com.l2jmobius.gameserver.network.serverpackets.MagicSkillLaunched;
import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
import com.l2jmobius.gameserver.util.Util;
/** /**
* This class ... * This class ...
@@ -124,51 +121,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
ClanTable.getInstance().createClan(player, cmdParams); ClanTable.getInstance().createClan(player, cmdParams);
} }
else if (actualCommand.equalsIgnoreCase("create_academy"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5);
}
else if (actualCommand.equalsIgnoreCase("rename_pledge"))
{
if (cmdParams.isEmpty() || cmdParams2.isEmpty())
{
return;
}
renameSubPledge(player, Integer.parseInt(cmdParams), cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_royal"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6);
}
else if (actualCommand.equalsIgnoreCase("create_knight"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7);
}
else if (actualCommand.equalsIgnoreCase("assign_subpl_leader"))
{
if (cmdParams.isEmpty())
{
return;
}
assignSubPledgeLeader(player, cmdParams, cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_ally")) else if (actualCommand.equalsIgnoreCase("create_ally"))
{ {
if (cmdParams.isEmpty()) if (cmdParams.isEmpty())
@@ -371,207 +323,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
clan.updateClanInDB(); clan.updateClanInDB();
} }
private static void createSubPledge(L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
if (clan.getLevel() < minClanLvl)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.TO_ESTABLISH_A_CLAN_ACADEMY_YOUR_CLAN_MUST_BE_LEVEL_5_OR_HIGHER);
}
else
{
player.sendPacket(SystemMessageId.THE_CONDITIONS_NECESSARY_TO_CREATE_A_MILITARY_UNIT_HAVE_NOT_BEEN_MET);
}
return;
}
if (!Util.isAlphaNumeric(clanName) || !isValidName(clanName) || (2 > clanName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (clanName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
for (L2Clan tempClan : ClanTable.getInstance().getClans())
{
if (tempClan.getSubPledge(clanName) != null)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_EXISTS);
sm.addString(clanName);
player.sendPacket(sm);
}
else
{
player.sendPacket(SystemMessageId.ANOTHER_MILITARY_UNIT_IS_ALREADY_USING_THAT_NAME_PLEASE_ENTER_A_DIFFERENT_NAME);
}
return;
}
}
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
}
final int leaderId = pledgeType != L2Clan.SUBUNIT_ACADEMY ? clan.getClanMember(leaderName).getObjectId() : 0;
if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null)
{
return;
}
SystemMessage sm;
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.CONGRATULATIONS_THE_S1_S_CLAN_ACADEMY_HAS_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_CLAN_HAS_BEEN_CREATED);
}
player.sendPacket(sm);
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
}
}
private static void renameSubPledge(L2PcInstance player, int pledgeType, String pledgeName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(pledgeType);
if (subPledge == null)
{
player.sendMessage("Pledge don't exists.");
return;
}
if (!Util.isAlphaNumeric(pledgeName) || !isValidName(pledgeName) || (2 > pledgeName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (pledgeName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
subPledge.setName(pledgeName);
clan.updateSubPledgeInDB(subPledge.getId());
clan.broadcastClanStatus();
player.sendMessage("Pledge name changed.");
}
private static void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
if (leaderName.length() > 16)
{
player.sendPacket(SystemMessageId.YOUR_TITLE_CANNOT_EXCEED_16_CHARACTERS_IN_LENGTH_PLEASE_TRY_AGAIN);
return;
}
if (player.getName().equals(leaderName))
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(clanName);
if ((null == subPledge) || (subPledge.getId() == L2Clan.SUBUNIT_ACADEMY))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
subPledge.setLeaderId(clan.getClanMember(leaderName).getObjectId());
clan.updateSubPledgeInDB(subPledge.getId());
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
clan.broadcastClanStatus();
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_THE_CAPTAIN_OF_S2);
sm.addString(leaderName);
sm.addString(clanName);
clan.broadcastToOnlineMembers(sm);
}
/** /**
* this displays PledgeSkillList to the player. * this displays PledgeSkillList to the player.
* @param player * @param player

View File

@@ -98,7 +98,7 @@ public final class RequestAnswerJoinPledge implements IClientIncomingPacket
activeChar.sendPacket(new JoinPledge(requestor.getClanId())); activeChar.sendPacket(new JoinPledge(requestor.getClanId()));
activeChar.setPledgeType(pledgeType); activeChar.setPledgeType(pledgeType);
if (pledgeType == L2Clan.SUBUNIT_ACADEMY) if (pledgeType == -1) // Academy - Removed.
{ {
activeChar.setPowerGrade(9); // academy activeChar.setPowerGrade(9); // academy
activeChar.setLvlJoinedAcademy(activeChar.getLevel()); activeChar.setLvlJoinedAcademy(activeChar.getLevel());

View File

@@ -17,11 +17,14 @@
package com.l2jmobius.gameserver.network.clientpackets; package com.l2jmobius.gameserver.network.clientpackets;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.data.xml.impl.ClanLevelData;
import com.l2jmobius.gameserver.model.ClanPrivilege; import com.l2jmobius.gameserver.model.ClanPrivilege;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
/** /**
* Format: (ch) dSdS * Format: (ch) dSdS
@@ -29,29 +32,22 @@ import com.l2jmobius.gameserver.network.L2GameClient;
*/ */
public final class RequestPledgeReorganizeMember implements IClientIncomingPacket public final class RequestPledgeReorganizeMember implements IClientIncomingPacket
{ {
private int _isMemberSelected;
private String _memberName; private String _memberName;
private int _newPledgeType; private int _newPledgeType;
private String _selectedMember;
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_isMemberSelected = packet.readD(); packet.readD(); // _isMemberSelected
_memberName = packet.readS(); _memberName = packet.readS();
_newPledgeType = packet.readD(); _newPledgeType = packet.readD();
_selectedMember = packet.readS(); packet.readS(); // _selectedMember
return true; return true;
} }
@Override @Override
public void run(L2GameClient client) public void run(L2GameClient client)
{ {
if (_isMemberSelected == 0)
{
return;
}
final L2PcInstance activeChar = client.getActiveChar(); final L2PcInstance activeChar = client.getActiveChar();
if (activeChar == null) if (activeChar == null)
{ {
@@ -75,21 +71,21 @@ public final class RequestPledgeReorganizeMember implements IClientIncomingPacke
return; return;
} }
final L2ClanMember member2 = clan.getClanMember(_selectedMember);
if ((member2 == null) || (member2.getObjectId() == clan.getLeaderId()))
{
return;
}
final int oldPledgeType = member1.getPledgeType(); final int oldPledgeType = member1.getPledgeType();
if (oldPledgeType == _newPledgeType) if (oldPledgeType == _newPledgeType)
{ {
return; return;
} }
if (clan.getSubPledgeMembersCount(_newPledgeType) >= (_newPledgeType == 0 ? ClanLevelData.getCommonMemberLimit(clan.getLevel()) : ClanLevelData.getEliteMemberLimit(clan.getLevel())))
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
sm.addString(_newPledgeType == 0 ? "Common Members" : "Elite Members");
activeChar.sendPacket(sm);
return;
}
member1.setPledgeType(_newPledgeType); member1.setPledgeType(_newPledgeType);
member2.setPledgeType(oldPledgeType);
clan.broadcastClanStatus(); clan.broadcastClanStatus();
} }
} }

View File

@@ -69,7 +69,7 @@ public final class RequestPledgeSetAcademyMaster implements IClientIncomingPacke
L2ClanMember apprenticeMember; L2ClanMember apprenticeMember;
L2ClanMember sponsorMember; L2ClanMember sponsorMember;
if (currentMember.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (currentMember.getPledgeType() == -1) // Academy - Removed.
{ {
apprenticeMember = currentMember; apprenticeMember = currentMember;
sponsorMember = targetMember; sponsorMember = targetMember;

View File

@@ -74,7 +74,7 @@ public final class RequestPledgeSetMemberPowerGrade implements IClientIncomingPa
return; return;
} }
if (member.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (member.getPledgeType() == -1) // Academy - Removed.
{ {
// also checked from client side // also checked from client side
activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER); activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER);

View File

@@ -41,17 +41,7 @@ public class PledgeReceiveMemberInfo implements IClientOutgoingPacket
packet.writeS(_member.getName()); packet.writeS(_member.getName());
packet.writeS(_member.getTitle()); // title packet.writeS(_member.getTitle()); // title
packet.writeD(_member.getPowerGrade()); // power packet.writeD(_member.getPowerGrade()); // power
packet.writeS(_member.getClan().getName());
// clan or subpledge name
if (_member.getPledgeType() != 0)
{
packet.writeS((_member.getClan().getSubPledge(_member.getPledgeType())).getName());
}
else
{
packet.writeS(_member.getClan().getName());
}
packet.writeS(_member.getApprenticeOrSponsorName()); // name of this member's apprentice/sponsor packet.writeS(_member.getApprenticeOrSponsorName()); // name of this member's apprentice/sponsor
return true; return true;
} }

View File

@@ -50,7 +50,7 @@ public class PledgeReceiveSubPledgeCreated implements IClientOutgoingPacket
private String getLeaderName() private String getLeaderName()
{ {
final int LeaderId = _subPledge.getLeaderId(); final int LeaderId = _subPledge.getLeaderId();
if ((_subPledge.getId() == L2Clan.SUBUNIT_ACADEMY) || (LeaderId == 0)) if ((_subPledge.getId() == -1) || (LeaderId == 0))
{ {
return ""; return "";
} }

View File

@@ -20,9 +20,7 @@ import java.util.Collection;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.CharNameTable;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2Clan.SubPledge;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -30,34 +28,28 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public class PledgeShowMemberListAll implements IClientOutgoingPacket public class PledgeShowMemberListAll implements IClientOutgoingPacket
{ {
private final L2Clan _clan; private final L2Clan _clan;
private final SubPledge _pledge;
private final String _name; private final String _name;
private final String _leaderName; private final String _leaderName;
private final Collection<L2ClanMember> _members; private final Collection<L2ClanMember> _members;
private final int _pledgeId;
private final boolean _isSubPledge;
private PledgeShowMemberListAll(L2Clan clan, SubPledge pledge, boolean isSubPledge) private PledgeShowMemberListAll(L2Clan clan, boolean isSubPledge)
{ {
_clan = clan; _clan = clan;
_pledge = pledge; _leaderName = clan.getLeaderName();
_pledgeId = _pledge == null ? 0x00 : _pledge.getId(); _name = clan.getName();
_leaderName = pledge == null ? clan.getLeaderName() : CharNameTable.getInstance().getNameById(pledge.getLeaderId());
_name = pledge == null ? clan.getName() : pledge.getName();
_members = _clan.getMembers(); _members = _clan.getMembers();
_isSubPledge = isSubPledge;
} }
public static void sendAllTo(L2PcInstance player) public static void sendAllTo(L2PcInstance player)
{ {
final L2Clan clan = player.getClan(); final L2Clan clan = player.getClan();
if (clan != null) player.sendPacket(new PledgeShowMemberListAll(clan, true));
for (L2PcInstance member : clan.getOnlineMembers(0))
{ {
for (SubPledge subPledge : clan.getAllSubPledges()) if (member.getPledgeType() != L2Clan.PLEDGE_CLASS_COMMON)
{ {
player.sendPacket(new PledgeShowMemberListAll(clan, subPledge, false)); player.sendPacket(new PledgeShowMemberListUpdate(member));
} }
player.sendPacket(new PledgeShowMemberListAll(clan, null, true));
} }
} }
@@ -66,10 +58,10 @@ public class PledgeShowMemberListAll implements IClientOutgoingPacket
{ {
OutgoingPackets.PLEDGE_SHOW_MEMBER_LIST_ALL.writeId(packet); OutgoingPackets.PLEDGE_SHOW_MEMBER_LIST_ALL.writeId(packet);
packet.writeD(_isSubPledge ? 0x00 : 0x01); packet.writeD(0x00); // _isSubPledge
packet.writeD(_clan.getId()); packet.writeD(_clan.getId());
packet.writeD(Config.SERVER_ID); packet.writeD(Config.SERVER_ID);
packet.writeD(_pledgeId); packet.writeD(0x00);
packet.writeS(_name); packet.writeS(_name);
packet.writeS(_leaderName); packet.writeS(_leaderName);
@@ -88,30 +80,17 @@ public class PledgeShowMemberListAll implements IClientOutgoingPacket
packet.writeD(_clan.getAllyCrestId()); packet.writeD(_clan.getAllyCrestId());
packet.writeD(_clan.isAtWar() ? 1 : 0); // new c3 packet.writeD(_clan.isAtWar() ? 1 : 0); // new c3
packet.writeD(0x00); // Territory castle ID packet.writeD(0x00); // Territory castle ID
packet.writeD(_clan.getSubPledgeMembersCount(_pledgeId));
packet.writeD(_members.size());
for (L2ClanMember m : _members) for (L2ClanMember m : _members)
{ {
if (m.getPledgeType() != _pledgeId)
{
continue;
}
packet.writeS(m.getName()); packet.writeS(m.getName());
packet.writeD(m.getLevel()); packet.writeD(m.getLevel());
packet.writeD(m.getClassId()); packet.writeD(m.getClassId());
final L2PcInstance player = m.getPlayerInstance(); packet.writeD(0); // sex
if (player != null) packet.writeD(0); // race
{
packet.writeD(player.getAppearance().getSex() ? 1 : 0); // no visible effect
packet.writeD(player.getRace().ordinal()); // packet.writeD(1);
}
else
{
packet.writeD(0x01); // no visible effect
packet.writeD(0x01); // packet.writeD(1);
}
packet.writeD(m.isOnline() ? m.getObjectId() : 0); // objectId = online 0 = offline packet.writeD(m.isOnline() ? m.getObjectId() : 0); // objectId = online 0 = offline
packet.writeD(m.getSponsor() != 0 ? 1 : 0); packet.writeD(0);
packet.writeC(m.getOnlineStatus()); packet.writeC(m.getOnlineStatus());
} }
return true; return true;

View File

@@ -17,7 +17,6 @@
package com.l2jmobius.gameserver.network.serverpackets; package com.l2jmobius.gameserver.network.serverpackets;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -28,14 +27,11 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
{ {
private final int _pledgeType; private final int _pledgeType;
private int _hasSponsor;
private final String _name; private final String _name;
private final int _level; private final int _level;
private final int _classId; private final int _classId;
private final int _objectId; private final int _objectId;
private final int _onlineStatus; private final int _onlineStatus;
private final int _race;
private final int _sex;
public PledgeShowMemberListUpdate(L2PcInstance player) public PledgeShowMemberListUpdate(L2PcInstance player)
{ {
@@ -49,17 +45,7 @@ public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
_classId = member.getClassId(); _classId = member.getClassId();
_objectId = member.getObjectId(); _objectId = member.getObjectId();
_pledgeType = member.getPledgeType(); _pledgeType = member.getPledgeType();
_race = member.getRaceOrdinal();
_sex = member.getSex() ? 1 : 0;
_onlineStatus = member.getOnlineStatus(); _onlineStatus = member.getOnlineStatus();
if (_pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
_hasSponsor = member.getSponsor() != 0 ? 1 : 0;
}
else
{
_hasSponsor = 0;
}
} }
@Override @Override
@@ -70,20 +56,11 @@ public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
packet.writeS(_name); packet.writeS(_name);
packet.writeD(_level); packet.writeD(_level);
packet.writeD(_classId); packet.writeD(_classId);
packet.writeD(_sex); packet.writeD(0); // _sex
packet.writeD(_race); packet.writeD(0); // _race
if (_onlineStatus > 0) packet.writeD(_objectId);
{ packet.writeD(_pledgeType);
packet.writeD(_objectId); packet.writeD(0); // _hasSponsor
packet.writeD(_pledgeType);
}
else
{
// when going offline send as 0
packet.writeD(0);
packet.writeD(0);
}
packet.writeD(_hasSponsor);
packet.writeC(_onlineStatus); packet.writeC(_onlineStatus);
return true; return true;
} }

View File

@@ -47,8 +47,8 @@ public class ExPledgeShowInfoUpdate extends AbstractItemPacket
OutgoingPackets.EX_PLEDGE_SHOW_INFO_UPDATE.writeId(packet); OutgoingPackets.EX_PLEDGE_SHOW_INFO_UPDATE.writeId(packet);
packet.writeD(clan.getId()); // Pledge ID packet.writeD(clan.getId()); // Pledge ID
packet.writeD(ClanLevelData.getLevelRequirement(clan.getLevel())); // Next level cost packet.writeD(ClanLevelData.getLevelRequirement(clan.getLevel())); // Next level cost
packet.writeD(0); // Max pledge members packet.writeD(ClanLevelData.getCommonMemberLimit(clan.getLevel())); // Max pledge members
packet.writeD(0); // Max elite members packet.writeD(ClanLevelData.getEliteMemberLimit(clan.getLevel())); // Max elite members
return true; return true;
} }
} }

View File

@@ -4,7 +4,4 @@
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12.htm">"I'd like to manage my Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13.htm">"I want to manage my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14.htm">"I want to manage my Order of Knights."</Button>
</body></html> </body></html>

View File

@@ -1,3 +0,0 @@
<html><body><br><br>
You are not the leader of this clan. You may not raise the level of it.
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
The clan level can be raised. Raising clan level requires the following:<br>
Level 1 - SP : 20,000 Adena : 650,000<br>
Level 2 - SP: 100,000 / Adena: 2,500,000<br>
Level 3 - SP: 350,000 / Item: Blood Mark<br>
Level 4 - SP: 1,000,000 / Item: Alliance Manifesto<br>
Level 5 - SP: 2,500,000 / Item: Seal of Aspiration<br>
Level 6 - Clan Fame: 5,000 / Clan Member: More than 30<br>
Level 7 - Clan Fame: 10,000 / Clan Member: More than 50<br>
Level 8 - Clan Fame: 20,000 / Clan Member: More than 80<br>
Level 9 - Clan Fame: 40,000 / Clan Member: More than 120 / Item: 150 Blood Oaths<br>
Level 10 - Clan Fame: 40,000 / Clan Member: More than 140 / Item: 5 Blood Alliance<br>
Level 11 - Clan Fame: 75,000 / Clan Member: More than 170 / Must be Territory Owner<br>
You can obtain a Blood Mark by killing a Bloody Queen. They are located in Watcher's Tomb or around the Forbidden Gateway.<br>
To obtain an Alliance Manifesto, meet sir Christopher Rodemai of Giran Castle Town.<br>
To obtain a Seal of Aspiration, see Sir Gustav Athebaldt in the Town of Oren.<br>
To obtain Blood Oath, acquire a fortress and prove that the territories are being protected.<br>
To obtain the Determination of Blood, possess a castle and prove that the territories are being protected and citizens are being taken care of.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-16.htm">How to obtain Clan Fame</Button>
<button value="Level Up" action="bypass -h npc_%objectId%_increase_clan_level" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
</body></html>

View File

@@ -1,11 +0,0 @@
<html><body> Clans Lv. 5 or above can found an Academy.<br>
You can enroll in an Academy if your main and subclasses are all below Lv. 85 and have not Awakened. If an Academy member Awakens, they automatically graduate.<br>
Up to 20 members may enroll at an Academy. The amount of Reputation a clan receives when a member graduates varies depending on the member's level upon entry.<br>
When a clan founds an Academy, its clan leader gains buffs for the benefit of the members.<br>
Academy members can use their Academy Circlets to efficiently power-up their character.<br>
The leader can appoint a clan member to sponsor an Academy member, which gives the sponsor buffs to use on the sponsored member. They're a bit weaker than the clan leader's buffs, however.<br>
In addition, sponsors can help their partners carry out Academy quests, and check their login status.<br>
Academy members can do Academy quests with their sponsors at Lv. 70. Upon success, the clan, sponsor, and Academy member are all rewarded.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12a.htm">"I'd like to found an Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12b.htm">"I'd like to change my Academy's name."</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Create Academy:<br>
Enter Academy Name:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_academy $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename the existing Academy:<br>
Enter new name for Academy:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge -1 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>Clans Lv. 6 or above may create Royal Guards with 5,000 Clan Reputation points.<br>
You can create up to 2 Royal Guards. Each can have up to 20 clan members. A clan that reaches Lv. 11 may increase the number of its Royal Guard members with 7,500 Clan Reputation points.<br>
Upon creation of a Royal Guard, 1 Royal Guard Captain must be appointed from among the clan members. The social class of the newly-appointed Royal Guard Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13a.htm">"I want to create a Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Royal Guard. [NOT DONE]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13b.htm">"I want to rename my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-15.htm">"I want to change Royal Guard Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Royal Guard Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_royal $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,4 +0,0 @@
<body><html>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13c.htm">Rename the First Royal Guard.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13d.htm">Rename the Second Royal Guard.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename First Royal Guard:<br>
Enter new name for First Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 100 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename Second Royal Guard:<br>
Enter new name for Second Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 200 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,10 +0,0 @@
<html><body>A clan Lv. 7 or above may establish an Order of Knights with 10,000 Clan Reputation points.<br>
You can create up to 4 Orders of Knights. Each can have up to 10 clan members.<br>
A clan that reaches Lv. 9 may increase the number of members in its Orders of Knights with 5,000 Clan Reputation points. Up to Lv. 10, they can do so for 2 Orders of Knights.<br>
Upon creation of an Order of Knights, 1 Captain must be appointed from among its members. The social class of the newly-appointed Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14a.htm">"I want to create an Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Order of Knights. [not done]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14b.htm">"I want to change the name of my Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to change Knight Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Order of Knights Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_knight $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14c.htm">Rename First Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14d.htm">Rename Second Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14e.htm">Rename Third Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14f.htm">Rename Fourth Order of Knights.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename first Order of Knights:<br>
Enter new name for first Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename second Order of Knights:<br>
Enter new name for second Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename third Order of Knights:<br>
Enter new name for third Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename fourth Order of Knights:<br>
Enter new name for fourth Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Assign new sub-unit leader:<br>
Enter unit name:<br>
<edit var="name" width=120><br>
Enter new unit leader name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_assign_subpl_leader $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
<font color="FF9900">[Acquiring Clan Fame]</font><br>
1. A new clan member who completes the Second Class Transfer through an academy will add from <font color="00FFFF">190 points</font> to <font color="00FFFF">650 points</font> to the clan's fame, depending on their level when joining the academy.<br>
2. If a castle is captured following a siege, <font color="00FFFF">1500 points</font> are added. (<font color="00FFFF">1500 points</font> are added even if the defenders are NPCs.)<br>
3. If a clan maintains possession of a castle for 2 consecutive weeks, <font color="00FFFF">750 points</font> are added.<br>
4. When the clan acquires a battle-type hideout, <font color="00FFFF">500 points</font> are added; if the hide-out was captured from another clan, <font color="00FFFF">500 points</font> are taken from their score.<br>
5. If a clan member maintains possession of a battle-type hideout for 2 consecutive weeks, <font color="00FFFF">250 points</font>are added.<br>
6. If a clan member is also a member of the party that wins first place in the Festival of Darkness, <font color="00FFFF">200 points</font> are added.<br>
7. If a clan member is reborn as a hero, up to <font color="00FFFF">1000 points</font> are added (depending on the number of members).<br>
8. Fame can also be increased through special clan quests.<br>
9. If your clan defeats an enemy clan member during clan war (dual declared state) or a castle siege, <font color="00FFFF">1 points</font> per clan member is added from the enemy clan.<br>
*If the other clan is below level 5 or its fame is less than 0, your clan cannot acquire its fame.<br>
10. If a fortress is captured following a siege, <font color="00FFFF">200 points</font> are added.<br>
11. If your clan demolished the ballistas inside a fortress, <font color="00FFFF">30 points</font> are added.<br>
<font color="FF9900">[Losing Clan Fame]</font><br>
1. If you fail to defend a castle or fortress in a siege, up to <font color="00FFFF">3000 points</font> can be lost.<br>
2. If you lose a battle-type hideout to another clan, up to <font color="00FFFF">1000 points</font> can be lost.<br>
3. If an allied clan member is killed by an enemy clan member during a clan war (dual declared state) or a castle siege, <font color="00FFFF">1 point</font> is lost per clan member.<br>
4. Fame points can be used to purchase items to help raise the clan's level, or to acquire clan skills.<br>
*Fame is not lost if the clan is below level 5 or its fame is less than 0.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-03.htm">Back</Button>
</body></html>

View File

@@ -64,13 +64,6 @@ public final class Clan extends AbstractNpcAI
LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm"); LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm");
LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm"); LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm");
LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm"); LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-15.htm", "9000-07-no.htm");
} }
private Clan() private Clan()

View File

@@ -39,11 +39,59 @@ public class ClanLevelData
27300000, 27300000,
36400000, 36400000,
46410000, 46410000,
0 // Max level (15). 0
};
private final static int[] COMMON_CLAN_MEMBER_LIMIT =
{
10,
15,
20,
30,
40,
42,
68,
85,
94,
102,
111,
120,
128,
137,
145,
171
};
private final static int[] ELITE_CLAN_MEMBER_LIMIT =
{
0,
0,
0,
0,
0,
8,
12,
15,
16,
18,
19,
20,
22,
23,
25,
29
}; };
public static int getLevelRequirement(int clanLevel) public static int getLevelRequirement(int clanLevel)
{ {
return CLAN_LEVEL_REQUIREMENTS[clanLevel]; return CLAN_LEVEL_REQUIREMENTS[clanLevel];
} }
public static int getCommonMemberLimit(int clanLevel)
{
return COMMON_CLAN_MEMBER_LIMIT[clanLevel];
}
public static int getEliteMemberLimit(int clanLevel)
{
return ELITE_CLAN_MEMBER_LIMIT[clanLevel];
}
} }

View File

@@ -67,7 +67,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd; import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
import com.l2jmobius.gameserver.network.serverpackets.PledgeReceiveSubPledgeCreated;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll;
@@ -99,21 +98,10 @@ public class L2Clan implements IIdentifiable, INamable
public static final int PENALTY_TYPE_DISMISS_CLAN = 3; public static final int PENALTY_TYPE_DISMISS_CLAN = 3;
/** Leader clan dissolve ally */ /** Leader clan dissolve ally */
public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4; public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4;
// Sub-unit types
/** Clan subunit type of Academy */ // Pledge types
public static final int SUBUNIT_ACADEMY = -1; public static final int PLEDGE_CLASS_COMMON = 0;
/** Clan subunit type of Royal Guard A */ public static final int PLEDGE_CLASS_ELITE = 100;
public static final int SUBUNIT_ROYAL1 = 100;
/** Clan subunit type of Royal Guard B */
public static final int SUBUNIT_ROYAL2 = 200;
/** Clan subunit type of Order of Knights A-1 */
public static final int SUBUNIT_KNIGHT1 = 1001;
/** Clan subunit type of Order of Knights A-2 */
public static final int SUBUNIT_KNIGHT2 = 1002;
/** Clan subunit type of Order of Knights B-1 */
public static final int SUBUNIT_KNIGHT3 = 2001;
/** Clan subunit type of Order of Knights B-2 */
public static final int SUBUNIT_KNIGHT4 = 2002;
private String _name; private String _name;
private int _clanId; private int _clanId;
@@ -289,14 +277,14 @@ public class L2Clan implements IIdentifiable, INamable
if (exLeader != null) if (exLeader != null)
{ {
exLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(exLeader)); exLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
exLeader.broadcastUserInfo(); exLeader.broadcastUserInfo();
exLeader.checkItemRestriction(); exLeader.checkItemRestriction();
} }
if (newLeader != null) if (newLeader != null)
{ {
newLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(newLeader)); newLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
newLeader.getClanPrivileges().setAll(); newLeader.getClanPrivileges().setAll();
if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel()) if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel())
@@ -377,7 +365,7 @@ public class L2Clan implements IIdentifiable, INamable
addClanMember(member); addClanMember(member);
member.setPlayerInstance(player); member.setPlayerInstance(player);
player.setClan(this); player.setClan(this);
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player)); player.setPledgeClass(PLEDGE_CLASS_COMMON);
player.sendPacket(new PledgeShowMemberListUpdate(player)); player.sendPacket(new PledgeShowMemberListUpdate(player));
player.sendPacket(new PledgeSkillList(this)); player.sendPacket(new PledgeSkillList(this));
@@ -526,7 +514,6 @@ public class L2Clan implements IIdentifiable, INamable
player.setClanJoinExpiryTime(clanJoinExpiryTime); player.setClanJoinExpiryTime(clanJoinExpiryTime);
} }
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
player.broadcastUserInfo(); player.broadcastUserInfo();
// disable clan tab // disable clan tab
player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET); player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET);
@@ -563,102 +550,6 @@ public class L2Clan implements IIdentifiable, INamable
return result; return result;
} }
/**
* @param pledgeType the Id of the pledge type.
* @return the maximum number of members allowed for a given {@code pledgeType}.
*/
public int getMaxNrOfMembers(int pledgeType)
{
int limit = 0;
switch (pledgeType)
{
case 0:
{
switch (_level)
{
case 3:
{
limit = 30;
break;
}
case 2:
{
limit = 20;
break;
}
case 1:
{
limit = 15;
break;
}
case 0:
{
limit = 10;
break;
}
default:
{
limit = 40;
break;
}
}
break;
}
case -1:
{
limit = 20;
break;
}
case 100:
case 200:
{
switch (_level)
{
case 11:
{
limit = 30;
break;
}
default:
{
limit = 20;
break;
}
}
break;
}
case 1001:
case 1002:
case 2001:
case 2002:
{
switch (_level)
{
case 9:
case 10:
case 11:
{
limit = 25;
break;
}
default:
{
limit = 10;
break;
}
}
break;
}
default:
{
break;
}
}
return limit;
}
/** /**
* @param exclude the object Id to exclude from list. * @param exclude the object Id to exclude from list.
* @return all online members excluding the one with object id {code exclude}. * @return all online members excluding the one with object id {code exclude}.
@@ -1841,35 +1732,15 @@ public class L2Clan implements IIdentifiable, INamable
return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]); return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]);
} }
public SubPledge createSubPledge(L2PcInstance player, int pledgeType, int leaderId, String subPledgeName) public SubPledge createSubPledge(int pledgeType)
{ {
SubPledge subPledge = null; if ((_subPledges == null) || (_subPledges.get(pledgeType) != null))
pledgeType = getAvailablePledgeTypes(pledgeType);
if (pledgeType == 0)
{ {
if (pledgeType == SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.YOUR_CLAN_HAS_ALREADY_ESTABLISHED_A_CLAN_ACADEMY);
}
else
{
player.sendMessage("You can't create any more sub-units of this type");
}
return null;
}
if (_leader.getObjectId() == leaderId)
{
player.sendMessage("Leader is not correct");
return null; return null;
} }
// Royal Guard 5000 points per each final String subPledgeName = pledgeType == PLEDGE_CLASS_COMMON ? "COMMON" : "ELITE";
// Order of Knights 10000 points per each SubPledge subPledge = null;
if ((pledgeType != -1) && (((_reputationScore < Config.ROYAL_GUARD_COST) && (pledgeType < SUBUNIT_KNIGHT1)) || ((_reputationScore < Config.KNIGHT_UNIT_COST) && (pledgeType > SUBUNIT_ROYAL2))))
{
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
return null;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)")) PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)"))
@@ -1877,81 +1748,22 @@ public class L2Clan implements IIdentifiable, INamable
ps.setInt(1, _clanId); ps.setInt(1, _clanId);
ps.setInt(2, pledgeType); ps.setInt(2, pledgeType);
ps.setString(3, subPledgeName); ps.setString(3, subPledgeName);
ps.setInt(4, pledgeType != -1 ? leaderId : 0); ps.setInt(4, _leader.getObjectId());
ps.execute(); ps.execute();
subPledge = new SubPledge(pledgeType, subPledgeName, leaderId); subPledge = new SubPledge(pledgeType, subPledgeName, _leader.getObjectId());
_subPledges.put(pledgeType, subPledge); _subPledges.put(pledgeType, subPledge);
if (pledgeType != -1)
{
// Royal Guard 5000 points per each
// Order of Knights 10000 points per each
if (pledgeType < SUBUNIT_KNIGHT1)
{
setReputationScore(_reputationScore - Config.ROYAL_GUARD_COST, true);
}
else
{
setReputationScore(_reputationScore - Config.KNIGHT_UNIT_COST, true);
// TODO: clan lvl9 or more can reinforce knights cheaper if first knight unit already created, use Config.KNIGHT_REINFORCE_COST
}
}
} }
catch (Exception e) catch (Exception e)
{ {
LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e); LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e);
} }
broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan())); // broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan()));
broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan())); // broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan()));
return subPledge; return subPledge;
} }
public int getAvailablePledgeTypes(int pledgeType)
{
if (_subPledges.get(pledgeType) != null)
{
// LOGGER.warning("found sub-unit with id: "+pledgeType);
switch (pledgeType)
{
case SUBUNIT_ACADEMY:
{
return 0;
}
case SUBUNIT_ROYAL1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_ROYAL2);
break;
}
case SUBUNIT_ROYAL2:
{
return 0;
}
case SUBUNIT_KNIGHT1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT2);
break;
}
case SUBUNIT_KNIGHT2:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT3);
break;
}
case SUBUNIT_KNIGHT3:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT4);
break;
}
case SUBUNIT_KNIGHT4:
{
return 0;
}
}
}
return pledgeType;
}
public void updateSubPledgeInDB(int pledgeType) public void updateSubPledgeInDB(int pledgeType)
{ {
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
@@ -2243,18 +2055,11 @@ public class L2Clan implements IIdentifiable, INamable
activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS); activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS);
return false; return false;
} }
if (getSubPledgeMembersCount(pledgeType) >= getMaxNrOfMembers(pledgeType)) if (getSubPledgeMembersCount(pledgeType) >= (pledgeType == 0 ? ClanLevelData.getCommonMemberLimit(_level) : ClanLevelData.getEliteMemberLimit(_level)))
{ {
if (pledgeType == 0) final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
{ sm.addString(_name);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME); activeChar.sendPacket(sm);
sm.addString(_name);
activeChar.sendPacket(sm);
}
else
{
activeChar.sendPacket(SystemMessageId.THIS_CLAN_IS_FULL_AND_CANNOT_ACCEPT_NEW_MEMBERS_AT_THIS_TIME);
}
return false; return false;
} }
return true; return true;

View File

@@ -714,6 +714,10 @@ public class L2ClanMember
break; break;
} }
case 11: case 11:
case 12:
case 13:
case 14:
case 15:
{ {
switch (player.getPledgeType()) switch (player.getPledgeType())
{ {

View File

@@ -1040,25 +1040,22 @@ public final class L2PcInstance extends L2Playable
} }
if ((clan != null) && (targetClan != null)) if ((clan != null) && (targetClan != null))
{ {
if ((target.getPledgeType() != L2Clan.SUBUNIT_ACADEMY) && (getPledgeType() != L2Clan.SUBUNIT_ACADEMY)) ClanWar war = clan.getWarWith(target.getClan().getId());
if (war != null)
{ {
ClanWar war = clan.getWarWith(target.getClan().getId()); switch (war.getState())
if (war != null)
{ {
switch (war.getState()) case DECLARATION:
case BLOOD_DECLARATION:
{ {
case DECLARATION: result |= RelationChanged.RELATION_DECLARED_WAR;
case BLOOD_DECLARATION: break;
{ }
result |= RelationChanged.RELATION_DECLARED_WAR; case MUTUAL:
break; {
} result |= RelationChanged.RELATION_DECLARED_WAR;
case MUTUAL: result |= RelationChanged.RELATION_MUTUAL_WAR;
{ break;
result |= RelationChanged.RELATION_DECLARED_WAR;
result |= RelationChanged.RELATION_MUTUAL_WAR;
break;
}
} }
} }
} }
@@ -9036,6 +9033,10 @@ public final class L2PcInstance extends L2Playable
public void setPledgeType(int typeId) public void setPledgeType(int typeId)
{ {
if (_clan != null)
{
_clan.createSubPledge(typeId);
}
_pledgeType = typeId; _pledgeType = typeId;
} }

View File

@@ -30,7 +30,6 @@ import com.l2jmobius.gameserver.instancemanager.FortManager;
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager; import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import com.l2jmobius.gameserver.instancemanager.SiegeManager; import com.l2jmobius.gameserver.instancemanager.SiegeManager;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2Clan.SubPledge;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.L2SkillLearn; import com.l2jmobius.gameserver.model.L2SkillLearn;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -46,8 +45,6 @@ import com.l2jmobius.gameserver.network.serverpackets.MagicSkillLaunched;
import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
import com.l2jmobius.gameserver.util.Util;
/** /**
* This class ... * This class ...
@@ -124,51 +121,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
ClanTable.getInstance().createClan(player, cmdParams); ClanTable.getInstance().createClan(player, cmdParams);
} }
else if (actualCommand.equalsIgnoreCase("create_academy"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5);
}
else if (actualCommand.equalsIgnoreCase("rename_pledge"))
{
if (cmdParams.isEmpty() || cmdParams2.isEmpty())
{
return;
}
renameSubPledge(player, Integer.parseInt(cmdParams), cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_royal"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6);
}
else if (actualCommand.equalsIgnoreCase("create_knight"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7);
}
else if (actualCommand.equalsIgnoreCase("assign_subpl_leader"))
{
if (cmdParams.isEmpty())
{
return;
}
assignSubPledgeLeader(player, cmdParams, cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_ally")) else if (actualCommand.equalsIgnoreCase("create_ally"))
{ {
if (cmdParams.isEmpty()) if (cmdParams.isEmpty())
@@ -371,207 +323,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
clan.updateClanInDB(); clan.updateClanInDB();
} }
private static void createSubPledge(L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
if (clan.getLevel() < minClanLvl)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.TO_ESTABLISH_A_CLAN_ACADEMY_YOUR_CLAN_MUST_BE_LEVEL_5_OR_HIGHER);
}
else
{
player.sendPacket(SystemMessageId.THE_CONDITIONS_NECESSARY_TO_CREATE_A_MILITARY_UNIT_HAVE_NOT_BEEN_MET);
}
return;
}
if (!Util.isAlphaNumeric(clanName) || !isValidName(clanName) || (2 > clanName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (clanName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
for (L2Clan tempClan : ClanTable.getInstance().getClans())
{
if (tempClan.getSubPledge(clanName) != null)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_EXISTS);
sm.addString(clanName);
player.sendPacket(sm);
}
else
{
player.sendPacket(SystemMessageId.ANOTHER_MILITARY_UNIT_IS_ALREADY_USING_THAT_NAME_PLEASE_ENTER_A_DIFFERENT_NAME);
}
return;
}
}
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
}
final int leaderId = pledgeType != L2Clan.SUBUNIT_ACADEMY ? clan.getClanMember(leaderName).getObjectId() : 0;
if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null)
{
return;
}
SystemMessage sm;
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.CONGRATULATIONS_THE_S1_S_CLAN_ACADEMY_HAS_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_CLAN_HAS_BEEN_CREATED);
}
player.sendPacket(sm);
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
}
}
private static void renameSubPledge(L2PcInstance player, int pledgeType, String pledgeName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(pledgeType);
if (subPledge == null)
{
player.sendMessage("Pledge don't exists.");
return;
}
if (!Util.isAlphaNumeric(pledgeName) || !isValidName(pledgeName) || (2 > pledgeName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (pledgeName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
subPledge.setName(pledgeName);
clan.updateSubPledgeInDB(subPledge.getId());
clan.broadcastClanStatus();
player.sendMessage("Pledge name changed.");
}
private static void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
if (leaderName.length() > 16)
{
player.sendPacket(SystemMessageId.YOUR_TITLE_CANNOT_EXCEED_16_CHARACTERS_IN_LENGTH_PLEASE_TRY_AGAIN);
return;
}
if (player.getName().equals(leaderName))
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(clanName);
if ((null == subPledge) || (subPledge.getId() == L2Clan.SUBUNIT_ACADEMY))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
subPledge.setLeaderId(clan.getClanMember(leaderName).getObjectId());
clan.updateSubPledgeInDB(subPledge.getId());
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
clan.broadcastClanStatus();
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_THE_CAPTAIN_OF_S2);
sm.addString(leaderName);
sm.addString(clanName);
clan.broadcastToOnlineMembers(sm);
}
/** /**
* this displays PledgeSkillList to the player. * this displays PledgeSkillList to the player.
* @param player * @param player

View File

@@ -98,7 +98,7 @@ public final class RequestAnswerJoinPledge implements IClientIncomingPacket
activeChar.sendPacket(new JoinPledge(requestor.getClanId())); activeChar.sendPacket(new JoinPledge(requestor.getClanId()));
activeChar.setPledgeType(pledgeType); activeChar.setPledgeType(pledgeType);
if (pledgeType == L2Clan.SUBUNIT_ACADEMY) if (pledgeType == -1) // Academy - Removed.
{ {
activeChar.setPowerGrade(9); // academy activeChar.setPowerGrade(9); // academy
activeChar.setLvlJoinedAcademy(activeChar.getLevel()); activeChar.setLvlJoinedAcademy(activeChar.getLevel());

View File

@@ -17,11 +17,14 @@
package com.l2jmobius.gameserver.network.clientpackets; package com.l2jmobius.gameserver.network.clientpackets;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.data.xml.impl.ClanLevelData;
import com.l2jmobius.gameserver.model.ClanPrivilege; import com.l2jmobius.gameserver.model.ClanPrivilege;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
/** /**
* Format: (ch) dSdS * Format: (ch) dSdS
@@ -29,29 +32,22 @@ import com.l2jmobius.gameserver.network.L2GameClient;
*/ */
public final class RequestPledgeReorganizeMember implements IClientIncomingPacket public final class RequestPledgeReorganizeMember implements IClientIncomingPacket
{ {
private int _isMemberSelected;
private String _memberName; private String _memberName;
private int _newPledgeType; private int _newPledgeType;
private String _selectedMember;
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_isMemberSelected = packet.readD(); packet.readD(); // _isMemberSelected
_memberName = packet.readS(); _memberName = packet.readS();
_newPledgeType = packet.readD(); _newPledgeType = packet.readD();
_selectedMember = packet.readS(); packet.readS(); // _selectedMember
return true; return true;
} }
@Override @Override
public void run(L2GameClient client) public void run(L2GameClient client)
{ {
if (_isMemberSelected == 0)
{
return;
}
final L2PcInstance activeChar = client.getActiveChar(); final L2PcInstance activeChar = client.getActiveChar();
if (activeChar == null) if (activeChar == null)
{ {
@@ -75,21 +71,21 @@ public final class RequestPledgeReorganizeMember implements IClientIncomingPacke
return; return;
} }
final L2ClanMember member2 = clan.getClanMember(_selectedMember);
if ((member2 == null) || (member2.getObjectId() == clan.getLeaderId()))
{
return;
}
final int oldPledgeType = member1.getPledgeType(); final int oldPledgeType = member1.getPledgeType();
if (oldPledgeType == _newPledgeType) if (oldPledgeType == _newPledgeType)
{ {
return; return;
} }
if (clan.getSubPledgeMembersCount(_newPledgeType) >= (_newPledgeType == 0 ? ClanLevelData.getCommonMemberLimit(clan.getLevel()) : ClanLevelData.getEliteMemberLimit(clan.getLevel())))
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
sm.addString(_newPledgeType == 0 ? "Common Members" : "Elite Members");
activeChar.sendPacket(sm);
return;
}
member1.setPledgeType(_newPledgeType); member1.setPledgeType(_newPledgeType);
member2.setPledgeType(oldPledgeType);
clan.broadcastClanStatus(); clan.broadcastClanStatus();
} }
} }

View File

@@ -69,7 +69,7 @@ public final class RequestPledgeSetAcademyMaster implements IClientIncomingPacke
L2ClanMember apprenticeMember; L2ClanMember apprenticeMember;
L2ClanMember sponsorMember; L2ClanMember sponsorMember;
if (currentMember.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (currentMember.getPledgeType() == -1) // Academy - Removed.
{ {
apprenticeMember = currentMember; apprenticeMember = currentMember;
sponsorMember = targetMember; sponsorMember = targetMember;

View File

@@ -74,7 +74,7 @@ public final class RequestPledgeSetMemberPowerGrade implements IClientIncomingPa
return; return;
} }
if (member.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (member.getPledgeType() == -1) // Academy - Removed.
{ {
// also checked from client side // also checked from client side
activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER); activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER);

View File

@@ -41,17 +41,7 @@ public class PledgeReceiveMemberInfo implements IClientOutgoingPacket
packet.writeS(_member.getName()); packet.writeS(_member.getName());
packet.writeS(_member.getTitle()); // title packet.writeS(_member.getTitle()); // title
packet.writeD(_member.getPowerGrade()); // power packet.writeD(_member.getPowerGrade()); // power
packet.writeS(_member.getClan().getName());
// clan or subpledge name
if (_member.getPledgeType() != 0)
{
packet.writeS((_member.getClan().getSubPledge(_member.getPledgeType())).getName());
}
else
{
packet.writeS(_member.getClan().getName());
}
packet.writeS(_member.getApprenticeOrSponsorName()); // name of this member's apprentice/sponsor packet.writeS(_member.getApprenticeOrSponsorName()); // name of this member's apprentice/sponsor
return true; return true;
} }

View File

@@ -50,7 +50,7 @@ public class PledgeReceiveSubPledgeCreated implements IClientOutgoingPacket
private String getLeaderName() private String getLeaderName()
{ {
final int LeaderId = _subPledge.getLeaderId(); final int LeaderId = _subPledge.getLeaderId();
if ((_subPledge.getId() == L2Clan.SUBUNIT_ACADEMY) || (LeaderId == 0)) if ((_subPledge.getId() == -1) || (LeaderId == 0))
{ {
return ""; return "";
} }

View File

@@ -20,9 +20,7 @@ import java.util.Collection;
import com.l2jmobius.Config; import com.l2jmobius.Config;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.data.sql.impl.CharNameTable;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2Clan.SubPledge;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -30,34 +28,28 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public class PledgeShowMemberListAll implements IClientOutgoingPacket public class PledgeShowMemberListAll implements IClientOutgoingPacket
{ {
private final L2Clan _clan; private final L2Clan _clan;
private final SubPledge _pledge;
private final String _name; private final String _name;
private final String _leaderName; private final String _leaderName;
private final Collection<L2ClanMember> _members; private final Collection<L2ClanMember> _members;
private final int _pledgeId;
private final boolean _isSubPledge;
private PledgeShowMemberListAll(L2Clan clan, SubPledge pledge, boolean isSubPledge) private PledgeShowMemberListAll(L2Clan clan, boolean isSubPledge)
{ {
_clan = clan; _clan = clan;
_pledge = pledge; _leaderName = clan.getLeaderName();
_pledgeId = _pledge == null ? 0x00 : _pledge.getId(); _name = clan.getName();
_leaderName = pledge == null ? clan.getLeaderName() : CharNameTable.getInstance().getNameById(pledge.getLeaderId());
_name = pledge == null ? clan.getName() : pledge.getName();
_members = _clan.getMembers(); _members = _clan.getMembers();
_isSubPledge = isSubPledge;
} }
public static void sendAllTo(L2PcInstance player) public static void sendAllTo(L2PcInstance player)
{ {
final L2Clan clan = player.getClan(); final L2Clan clan = player.getClan();
if (clan != null) player.sendPacket(new PledgeShowMemberListAll(clan, true));
for (L2PcInstance member : clan.getOnlineMembers(0))
{ {
for (SubPledge subPledge : clan.getAllSubPledges()) if (member.getPledgeType() != L2Clan.PLEDGE_CLASS_COMMON)
{ {
player.sendPacket(new PledgeShowMemberListAll(clan, subPledge, false)); player.sendPacket(new PledgeShowMemberListUpdate(member));
} }
player.sendPacket(new PledgeShowMemberListAll(clan, null, true));
} }
} }
@@ -66,10 +58,10 @@ public class PledgeShowMemberListAll implements IClientOutgoingPacket
{ {
OutgoingPackets.PLEDGE_SHOW_MEMBER_LIST_ALL.writeId(packet); OutgoingPackets.PLEDGE_SHOW_MEMBER_LIST_ALL.writeId(packet);
packet.writeD(_isSubPledge ? 0x00 : 0x01); packet.writeD(0x00); // _isSubPledge
packet.writeD(_clan.getId()); packet.writeD(_clan.getId());
packet.writeD(Config.SERVER_ID); packet.writeD(Config.SERVER_ID);
packet.writeD(_pledgeId); packet.writeD(0x00);
packet.writeS(_name); packet.writeS(_name);
packet.writeS(_leaderName); packet.writeS(_leaderName);
@@ -88,30 +80,17 @@ public class PledgeShowMemberListAll implements IClientOutgoingPacket
packet.writeD(_clan.getAllyCrestId()); packet.writeD(_clan.getAllyCrestId());
packet.writeD(_clan.isAtWar() ? 1 : 0); // new c3 packet.writeD(_clan.isAtWar() ? 1 : 0); // new c3
packet.writeD(0x00); // Territory castle ID packet.writeD(0x00); // Territory castle ID
packet.writeD(_clan.getSubPledgeMembersCount(_pledgeId));
packet.writeD(_members.size());
for (L2ClanMember m : _members) for (L2ClanMember m : _members)
{ {
if (m.getPledgeType() != _pledgeId)
{
continue;
}
packet.writeS(m.getName()); packet.writeS(m.getName());
packet.writeD(m.getLevel()); packet.writeD(m.getLevel());
packet.writeD(m.getClassId()); packet.writeD(m.getClassId());
final L2PcInstance player = m.getPlayerInstance(); packet.writeD(0); // sex
if (player != null) packet.writeD(0); // race
{
packet.writeD(player.getAppearance().getSex() ? 1 : 0); // no visible effect
packet.writeD(player.getRace().ordinal()); // packet.writeD(1);
}
else
{
packet.writeD(0x01); // no visible effect
packet.writeD(0x01); // packet.writeD(1);
}
packet.writeD(m.isOnline() ? m.getObjectId() : 0); // objectId = online 0 = offline packet.writeD(m.isOnline() ? m.getObjectId() : 0); // objectId = online 0 = offline
packet.writeD(m.getSponsor() != 0 ? 1 : 0); packet.writeD(0);
packet.writeC(m.getOnlineStatus()); packet.writeC(m.getOnlineStatus());
} }
return true; return true;

View File

@@ -17,7 +17,6 @@
package com.l2jmobius.gameserver.network.serverpackets; package com.l2jmobius.gameserver.network.serverpackets;
import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.commons.network.PacketWriter;
import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.OutgoingPackets; import com.l2jmobius.gameserver.network.OutgoingPackets;
@@ -28,14 +27,11 @@ import com.l2jmobius.gameserver.network.OutgoingPackets;
public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
{ {
private final int _pledgeType; private final int _pledgeType;
private int _hasSponsor;
private final String _name; private final String _name;
private final int _level; private final int _level;
private final int _classId; private final int _classId;
private final int _objectId; private final int _objectId;
private final int _onlineStatus; private final int _onlineStatus;
private final int _race;
private final int _sex;
public PledgeShowMemberListUpdate(L2PcInstance player) public PledgeShowMemberListUpdate(L2PcInstance player)
{ {
@@ -49,17 +45,7 @@ public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
_classId = member.getClassId(); _classId = member.getClassId();
_objectId = member.getObjectId(); _objectId = member.getObjectId();
_pledgeType = member.getPledgeType(); _pledgeType = member.getPledgeType();
_race = member.getRaceOrdinal();
_sex = member.getSex() ? 1 : 0;
_onlineStatus = member.getOnlineStatus(); _onlineStatus = member.getOnlineStatus();
if (_pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
_hasSponsor = member.getSponsor() != 0 ? 1 : 0;
}
else
{
_hasSponsor = 0;
}
} }
@Override @Override
@@ -70,20 +56,11 @@ public final class PledgeShowMemberListUpdate implements IClientOutgoingPacket
packet.writeS(_name); packet.writeS(_name);
packet.writeD(_level); packet.writeD(_level);
packet.writeD(_classId); packet.writeD(_classId);
packet.writeD(_sex); packet.writeD(0); // _sex
packet.writeD(_race); packet.writeD(0); // _race
if (_onlineStatus > 0) packet.writeD(_objectId);
{ packet.writeD(_pledgeType);
packet.writeD(_objectId); packet.writeD(0); // _hasSponsor
packet.writeD(_pledgeType);
}
else
{
// when going offline send as 0
packet.writeD(0);
packet.writeD(0);
}
packet.writeD(_hasSponsor);
packet.writeC(_onlineStatus); packet.writeC(_onlineStatus);
return true; return true;
} }

View File

@@ -47,8 +47,8 @@ public class ExPledgeShowInfoUpdate extends AbstractItemPacket
OutgoingPackets.EX_PLEDGE_SHOW_INFO_UPDATE.writeId(packet); OutgoingPackets.EX_PLEDGE_SHOW_INFO_UPDATE.writeId(packet);
packet.writeD(clan.getId()); // Pledge ID packet.writeD(clan.getId()); // Pledge ID
packet.writeD(ClanLevelData.getLevelRequirement(clan.getLevel())); // Next level cost packet.writeD(ClanLevelData.getLevelRequirement(clan.getLevel())); // Next level cost
packet.writeD(0); // Max pledge members packet.writeD(ClanLevelData.getCommonMemberLimit(clan.getLevel())); // Max pledge members
packet.writeD(0); // Max elite members packet.writeD(ClanLevelData.getEliteMemberLimit(clan.getLevel())); // Max elite members
return true; return true;
} }
} }

View File

@@ -4,7 +4,4 @@
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-05.htm">"I'd like to restore my clan."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_learn_clan_skills">"Can you teach me some clan skills?"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button> <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-06.htm">"I want to transfer clan leader authority."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12.htm">"I'd like to manage my Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13.htm">"I want to manage my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14.htm">"I want to manage my Order of Knights."</Button>
</body></html> </body></html>

View File

@@ -1,3 +0,0 @@
<html><body><br><br>
You are not the leader of this clan. You may not raise the level of it.
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
The clan level can be raised. Raising clan level requires the following:<br>
Level 1 - SP : 20,000 Adena : 650,000<br>
Level 2 - SP: 100,000 / Adena: 2,500,000<br>
Level 3 - SP: 350,000 / Item: Blood Mark<br>
Level 4 - SP: 1,000,000 / Item: Alliance Manifesto<br>
Level 5 - SP: 2,500,000 / Item: Seal of Aspiration<br>
Level 6 - Clan Fame: 5,000 / Clan Member: More than 30<br>
Level 7 - Clan Fame: 10,000 / Clan Member: More than 50<br>
Level 8 - Clan Fame: 20,000 / Clan Member: More than 80<br>
Level 9 - Clan Fame: 40,000 / Clan Member: More than 120 / Item: 150 Blood Oaths<br>
Level 10 - Clan Fame: 40,000 / Clan Member: More than 140 / Item: 5 Blood Alliance<br>
Level 11 - Clan Fame: 75,000 / Clan Member: More than 170 / Must be Territory Owner<br>
You can obtain a Blood Mark by killing a Bloody Queen. They are located in Watcher's Tomb or around the Forbidden Gateway.<br>
To obtain an Alliance Manifesto, meet sir Christopher Rodemai of Giran Castle Town.<br>
To obtain a Seal of Aspiration, see Sir Gustav Athebaldt in the Town of Oren.<br>
To obtain Blood Oath, acquire a fortress and prove that the territories are being protected.<br>
To obtain the Determination of Blood, possess a castle and prove that the territories are being protected and citizens are being taken care of.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-16.htm">How to obtain Clan Fame</Button>
<button value="Level Up" action="bypass -h npc_%objectId%_increase_clan_level" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF">
</body></html>

View File

@@ -1,11 +0,0 @@
<html><body> Clans Lv. 5 or above can found an Academy.<br>
You can enroll in an Academy if your main and subclasses are all below Lv. 85 and have not Awakened. If an Academy member Awakens, they automatically graduate.<br>
Up to 20 members may enroll at an Academy. The amount of Reputation a clan receives when a member graduates varies depending on the member's level upon entry.<br>
When a clan founds an Academy, its clan leader gains buffs for the benefit of the members.<br>
Academy members can use their Academy Circlets to efficiently power-up their character.<br>
The leader can appoint a clan member to sponsor an Academy member, which gives the sponsor buffs to use on the sponsored member. They're a bit weaker than the clan leader's buffs, however.<br>
In addition, sponsors can help their partners carry out Academy quests, and check their login status.<br>
Academy members can do Academy quests with their sponsors at Lv. 70. Upon success, the clan, sponsor, and Academy member are all rewarded.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12a.htm">"I'd like to found an Academy."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-12b.htm">"I'd like to change my Academy's name."</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Create Academy:<br>
Enter Academy Name:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_academy $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename the existing Academy:<br>
Enter new name for Academy:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge -1 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>Clans Lv. 6 or above may create Royal Guards with 5,000 Clan Reputation points.<br>
You can create up to 2 Royal Guards. Each can have up to 20 clan members. A clan that reaches Lv. 11 may increase the number of its Royal Guard members with 7,500 Clan Reputation points.<br>
Upon creation of a Royal Guard, 1 Royal Guard Captain must be appointed from among the clan members. The social class of the newly-appointed Royal Guard Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13a.htm">"I want to create a Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Royal Guard. [NOT DONE]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13b.htm">"I want to rename my Royal Guard."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-15.htm">"I want to change Royal Guard Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Royal Guard Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_royal $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,4 +0,0 @@
<body><html>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13c.htm">Rename the First Royal Guard.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-13d.htm">Rename the Second Royal Guard.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename First Royal Guard:<br>
Enter new name for First Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 100 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename Second Royal Guard:<br>
Enter new name for Second Royal Guard:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 200 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,10 +0,0 @@
<html><body>A clan Lv. 7 or above may establish an Order of Knights with 10,000 Clan Reputation points.<br>
You can create up to 4 Orders of Knights. Each can have up to 10 clan members.<br>
A clan that reaches Lv. 9 may increase the number of members in its Orders of Knights with 5,000 Clan Reputation points. Up to Lv. 10, they can do so for 2 Orders of Knights.<br>
Upon creation of an Order of Knights, 1 Captain must be appointed from among its members. The social class of the newly-appointed Captain will go up.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14a.htm">"I want to create an Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to reinforce my Order of Knights. [not done]"</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14b.htm">"I want to change the name of my Order of Knights."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-01.htm">"I want to change Knight Captains."</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest Clan 9000-01.htm">Back</Button>
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Create Order of Knights Unit:<br>
Enter Unit Name:<br>
<edit var="name" width=120><br>
Enter Unit Leader Name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_create_knight $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14c.htm">Rename First Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14d.htm">Rename Second Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14e.htm">Rename Third Order of Knights.</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-14f.htm">Rename Fourth Order of Knights.</Button>
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename first Order of Knights:<br>
Enter new name for first Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename second Order of Knights:<br>
Enter new name for second Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 1002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename third Order of Knights:<br>
Enter new name for third Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2001 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,6 +0,0 @@
<html><body>Rename fourth Order of Knights:<br>
Enter new name for fourth Order of Knights:<br>
<edit var="name" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_rename_pledge 2002 $name" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,9 +0,0 @@
<html><body>
Assign new sub-unit leader:<br>
Enter unit name:<br>
<edit var="name" width=120><br>
Enter new unit leader name:<br>
<edit var="lname" width=120><br>
<button value="Enter" action="bypass -h npc_%objectId%_assign_subpl_leader $name $lname" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
<button value="Cancel" action="bypass -h Quest Clan 9000-01.htm" width=80 height=27 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
</body></html>

View File

@@ -1,22 +0,0 @@
<html><body>
<font color="FF9900">[Acquiring Clan Fame]</font><br>
1. A new clan member who completes the Second Class Transfer through an academy will add from <font color="00FFFF">190 points</font> to <font color="00FFFF">650 points</font> to the clan's fame, depending on their level when joining the academy.<br>
2. If a castle is captured following a siege, <font color="00FFFF">1500 points</font> are added. (<font color="00FFFF">1500 points</font> are added even if the defenders are NPCs.)<br>
3. If a clan maintains possession of a castle for 2 consecutive weeks, <font color="00FFFF">750 points</font> are added.<br>
4. When the clan acquires a battle-type hideout, <font color="00FFFF">500 points</font> are added; if the hide-out was captured from another clan, <font color="00FFFF">500 points</font> are taken from their score.<br>
5. If a clan member maintains possession of a battle-type hideout for 2 consecutive weeks, <font color="00FFFF">250 points</font>are added.<br>
6. If a clan member is also a member of the party that wins first place in the Festival of Darkness, <font color="00FFFF">200 points</font> are added.<br>
7. If a clan member is reborn as a hero, up to <font color="00FFFF">1000 points</font> are added (depending on the number of members).<br>
8. Fame can also be increased through special clan quests.<br>
9. If your clan defeats an enemy clan member during clan war (dual declared state) or a castle siege, <font color="00FFFF">1 points</font> per clan member is added from the enemy clan.<br>
*If the other clan is below level 5 or its fame is less than 0, your clan cannot acquire its fame.<br>
10. If a fortress is captured following a siege, <font color="00FFFF">200 points</font> are added.<br>
11. If your clan demolished the ballistas inside a fortress, <font color="00FFFF">30 points</font> are added.<br>
<font color="FF9900">[Losing Clan Fame]</font><br>
1. If you fail to defend a castle or fortress in a siege, up to <font color="00FFFF">3000 points</font> can be lost.<br>
2. If you lose a battle-type hideout to another clan, up to <font color="00FFFF">1000 points</font> can be lost.<br>
3. If an allied clan member is killed by an enemy clan member during a clan war (dual declared state) or a castle siege, <font color="00FFFF">1 point</font> is lost per clan member.<br>
4. Fame points can be used to purchase items to help raise the clan's level, or to acquire clan skills.<br>
*Fame is not lost if the clan is below level 5 or its fame is less than 0.<br><br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Clan 9000-03.htm">Back</Button>
</body></html>

View File

@@ -64,13 +64,6 @@ public final class Clan extends AbstractNpcAI
LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm"); LEADER_REQUIRED.put("9000-04.htm", "9000-04-no.htm");
LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm"); LEADER_REQUIRED.put("9000-05.htm", "9000-05-no.htm");
LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm"); LEADER_REQUIRED.put("9000-07.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-12b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-13b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14a.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-14b.htm", "9000-07-no.htm");
LEADER_REQUIRED.put("9000-15.htm", "9000-07-no.htm");
} }
private Clan() private Clan()

View File

@@ -39,11 +39,59 @@ public class ClanLevelData
27300000, 27300000,
36400000, 36400000,
46410000, 46410000,
0 // Max level (15). 0
};
private final static int[] COMMON_CLAN_MEMBER_LIMIT =
{
10,
15,
20,
30,
40,
42,
68,
85,
94,
102,
111,
120,
128,
137,
145,
171
};
private final static int[] ELITE_CLAN_MEMBER_LIMIT =
{
0,
0,
0,
0,
0,
8,
12,
15,
16,
18,
19,
20,
22,
23,
25,
29
}; };
public static int getLevelRequirement(int clanLevel) public static int getLevelRequirement(int clanLevel)
{ {
return CLAN_LEVEL_REQUIREMENTS[clanLevel]; return CLAN_LEVEL_REQUIREMENTS[clanLevel];
} }
public static int getCommonMemberLimit(int clanLevel)
{
return COMMON_CLAN_MEMBER_LIMIT[clanLevel];
}
public static int getEliteMemberLimit(int clanLevel)
{
return ELITE_CLAN_MEMBER_LIMIT[clanLevel];
}
} }

View File

@@ -67,7 +67,6 @@ import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.CreatureSay; import com.l2jmobius.gameserver.network.serverpackets.CreatureSay;
import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd; import com.l2jmobius.gameserver.network.serverpackets.ExSubPledgeSkillAdd;
import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
import com.l2jmobius.gameserver.network.serverpackets.PledgeReceiveSubPledgeCreated;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowInfoUpdate;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListAll;
import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll; import com.l2jmobius.gameserver.network.serverpackets.PledgeShowMemberListDeleteAll;
@@ -99,21 +98,10 @@ public class L2Clan implements IIdentifiable, INamable
public static final int PENALTY_TYPE_DISMISS_CLAN = 3; public static final int PENALTY_TYPE_DISMISS_CLAN = 3;
/** Leader clan dissolve ally */ /** Leader clan dissolve ally */
public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4; public static final int PENALTY_TYPE_DISSOLVE_ALLY = 4;
// Sub-unit types
/** Clan subunit type of Academy */ // Pledge types
public static final int SUBUNIT_ACADEMY = -1; public static final int PLEDGE_CLASS_COMMON = 0;
/** Clan subunit type of Royal Guard A */ public static final int PLEDGE_CLASS_ELITE = 100;
public static final int SUBUNIT_ROYAL1 = 100;
/** Clan subunit type of Royal Guard B */
public static final int SUBUNIT_ROYAL2 = 200;
/** Clan subunit type of Order of Knights A-1 */
public static final int SUBUNIT_KNIGHT1 = 1001;
/** Clan subunit type of Order of Knights A-2 */
public static final int SUBUNIT_KNIGHT2 = 1002;
/** Clan subunit type of Order of Knights B-1 */
public static final int SUBUNIT_KNIGHT3 = 2001;
/** Clan subunit type of Order of Knights B-2 */
public static final int SUBUNIT_KNIGHT4 = 2002;
private String _name; private String _name;
private int _clanId; private int _clanId;
@@ -289,14 +277,14 @@ public class L2Clan implements IIdentifiable, INamable
if (exLeader != null) if (exLeader != null)
{ {
exLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(exLeader)); exLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
exLeader.broadcastUserInfo(); exLeader.broadcastUserInfo();
exLeader.checkItemRestriction(); exLeader.checkItemRestriction();
} }
if (newLeader != null) if (newLeader != null)
{ {
newLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(newLeader)); newLeader.setPledgeClass(PLEDGE_CLASS_COMMON);
newLeader.getClanPrivileges().setAll(); newLeader.getClanPrivileges().setAll();
if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel()) if (getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel())
@@ -377,7 +365,7 @@ public class L2Clan implements IIdentifiable, INamable
addClanMember(member); addClanMember(member);
member.setPlayerInstance(player); member.setPlayerInstance(player);
player.setClan(this); player.setClan(this);
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player)); player.setPledgeClass(PLEDGE_CLASS_COMMON);
player.sendPacket(new PledgeShowMemberListUpdate(player)); player.sendPacket(new PledgeShowMemberListUpdate(player));
player.sendPacket(new PledgeSkillList(this)); player.sendPacket(new PledgeSkillList(this));
@@ -526,7 +514,6 @@ public class L2Clan implements IIdentifiable, INamable
player.setClanJoinExpiryTime(clanJoinExpiryTime); player.setClanJoinExpiryTime(clanJoinExpiryTime);
} }
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
player.broadcastUserInfo(); player.broadcastUserInfo();
// disable clan tab // disable clan tab
player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET); player.sendPacket(PledgeShowMemberListDeleteAll.STATIC_PACKET);
@@ -563,102 +550,6 @@ public class L2Clan implements IIdentifiable, INamable
return result; return result;
} }
/**
* @param pledgeType the Id of the pledge type.
* @return the maximum number of members allowed for a given {@code pledgeType}.
*/
public int getMaxNrOfMembers(int pledgeType)
{
int limit = 0;
switch (pledgeType)
{
case 0:
{
switch (_level)
{
case 3:
{
limit = 30;
break;
}
case 2:
{
limit = 20;
break;
}
case 1:
{
limit = 15;
break;
}
case 0:
{
limit = 10;
break;
}
default:
{
limit = 40;
break;
}
}
break;
}
case -1:
{
limit = 20;
break;
}
case 100:
case 200:
{
switch (_level)
{
case 11:
{
limit = 30;
break;
}
default:
{
limit = 20;
break;
}
}
break;
}
case 1001:
case 1002:
case 2001:
case 2002:
{
switch (_level)
{
case 9:
case 10:
case 11:
{
limit = 25;
break;
}
default:
{
limit = 10;
break;
}
}
break;
}
default:
{
break;
}
}
return limit;
}
/** /**
* @param exclude the object Id to exclude from list. * @param exclude the object Id to exclude from list.
* @return all online members excluding the one with object id {code exclude}. * @return all online members excluding the one with object id {code exclude}.
@@ -1841,35 +1732,15 @@ public class L2Clan implements IIdentifiable, INamable
return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]); return _subPledges.values().toArray(new SubPledge[_subPledges.values().size()]);
} }
public SubPledge createSubPledge(L2PcInstance player, int pledgeType, int leaderId, String subPledgeName) public SubPledge createSubPledge(int pledgeType)
{ {
SubPledge subPledge = null; if ((_subPledges == null) || (_subPledges.get(pledgeType) != null))
pledgeType = getAvailablePledgeTypes(pledgeType);
if (pledgeType == 0)
{ {
if (pledgeType == SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.YOUR_CLAN_HAS_ALREADY_ESTABLISHED_A_CLAN_ACADEMY);
}
else
{
player.sendMessage("You can't create any more sub-units of this type");
}
return null;
}
if (_leader.getObjectId() == leaderId)
{
player.sendMessage("Leader is not correct");
return null; return null;
} }
// Royal Guard 5000 points per each final String subPledgeName = pledgeType == PLEDGE_CLASS_COMMON ? "COMMON" : "ELITE";
// Order of Knights 10000 points per each SubPledge subPledge = null;
if ((pledgeType != -1) && (((_reputationScore < Config.ROYAL_GUARD_COST) && (pledgeType < SUBUNIT_KNIGHT1)) || ((_reputationScore < Config.KNIGHT_UNIT_COST) && (pledgeType > SUBUNIT_ROYAL2))))
{
player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW);
return null;
}
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)")) PreparedStatement ps = con.prepareStatement("INSERT INTO clan_subpledges (clan_id,sub_pledge_id,name,leader_id) values (?,?,?,?)"))
@@ -1877,81 +1748,22 @@ public class L2Clan implements IIdentifiable, INamable
ps.setInt(1, _clanId); ps.setInt(1, _clanId);
ps.setInt(2, pledgeType); ps.setInt(2, pledgeType);
ps.setString(3, subPledgeName); ps.setString(3, subPledgeName);
ps.setInt(4, pledgeType != -1 ? leaderId : 0); ps.setInt(4, _leader.getObjectId());
ps.execute(); ps.execute();
subPledge = new SubPledge(pledgeType, subPledgeName, leaderId); subPledge = new SubPledge(pledgeType, subPledgeName, _leader.getObjectId());
_subPledges.put(pledgeType, subPledge); _subPledges.put(pledgeType, subPledge);
if (pledgeType != -1)
{
// Royal Guard 5000 points per each
// Order of Knights 10000 points per each
if (pledgeType < SUBUNIT_KNIGHT1)
{
setReputationScore(_reputationScore - Config.ROYAL_GUARD_COST, true);
}
else
{
setReputationScore(_reputationScore - Config.KNIGHT_UNIT_COST, true);
// TODO: clan lvl9 or more can reinforce knights cheaper if first knight unit already created, use Config.KNIGHT_REINFORCE_COST
}
}
} }
catch (Exception e) catch (Exception e)
{ {
LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e); LOGGER.log(Level.SEVERE, "Error saving sub clan data: " + e.getMessage(), e);
} }
broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan())); // broadcastToOnlineMembers(new PledgeShowInfoUpdate(_leader.getClan()));
broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan())); // broadcastToOnlineMembers(new PledgeReceiveSubPledgeCreated(subPledge, _leader.getClan()));
return subPledge; return subPledge;
} }
public int getAvailablePledgeTypes(int pledgeType)
{
if (_subPledges.get(pledgeType) != null)
{
// LOGGER.warning("found sub-unit with id: "+pledgeType);
switch (pledgeType)
{
case SUBUNIT_ACADEMY:
{
return 0;
}
case SUBUNIT_ROYAL1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_ROYAL2);
break;
}
case SUBUNIT_ROYAL2:
{
return 0;
}
case SUBUNIT_KNIGHT1:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT2);
break;
}
case SUBUNIT_KNIGHT2:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT3);
break;
}
case SUBUNIT_KNIGHT3:
{
pledgeType = getAvailablePledgeTypes(SUBUNIT_KNIGHT4);
break;
}
case SUBUNIT_KNIGHT4:
{
return 0;
}
}
}
return pledgeType;
}
public void updateSubPledgeInDB(int pledgeType) public void updateSubPledgeInDB(int pledgeType)
{ {
try (Connection con = DatabaseFactory.getConnection(); try (Connection con = DatabaseFactory.getConnection();
@@ -2243,18 +2055,11 @@ public class L2Clan implements IIdentifiable, INamable
activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS); activeChar.sendPacket(SystemMessageId.IN_ORDER_TO_JOIN_THE_CLAN_ACADEMY_YOU_MUST_BE_UNAFFILIATED_WITH_A_CLAN_AND_BE_AN_UNAWAKENED_CHARACTER_LV_84_OR_BELOW_FPR_BOTH_MAIN_AND_SUBCLASS);
return false; return false;
} }
if (getSubPledgeMembersCount(pledgeType) >= getMaxNrOfMembers(pledgeType)) if (getSubPledgeMembersCount(pledgeType) >= (pledgeType == 0 ? ClanLevelData.getCommonMemberLimit(_level) : ClanLevelData.getEliteMemberLimit(_level)))
{ {
if (pledgeType == 0) final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
{ sm.addString(_name);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME); activeChar.sendPacket(sm);
sm.addString(_name);
activeChar.sendPacket(sm);
}
else
{
activeChar.sendPacket(SystemMessageId.THIS_CLAN_IS_FULL_AND_CANNOT_ACCEPT_NEW_MEMBERS_AT_THIS_TIME);
}
return false; return false;
} }
return true; return true;

View File

@@ -714,6 +714,10 @@ public class L2ClanMember
break; break;
} }
case 11: case 11:
case 12:
case 13:
case 14:
case 15:
{ {
switch (player.getPledgeType()) switch (player.getPledgeType())
{ {

View File

@@ -1040,25 +1040,22 @@ public final class L2PcInstance extends L2Playable
} }
if ((clan != null) && (targetClan != null)) if ((clan != null) && (targetClan != null))
{ {
if ((target.getPledgeType() != L2Clan.SUBUNIT_ACADEMY) && (getPledgeType() != L2Clan.SUBUNIT_ACADEMY)) ClanWar war = clan.getWarWith(target.getClan().getId());
if (war != null)
{ {
ClanWar war = clan.getWarWith(target.getClan().getId()); switch (war.getState())
if (war != null)
{ {
switch (war.getState()) case DECLARATION:
case BLOOD_DECLARATION:
{ {
case DECLARATION: result |= RelationChanged.RELATION_DECLARED_WAR;
case BLOOD_DECLARATION: break;
{ }
result |= RelationChanged.RELATION_DECLARED_WAR; case MUTUAL:
break; {
} result |= RelationChanged.RELATION_DECLARED_WAR;
case MUTUAL: result |= RelationChanged.RELATION_MUTUAL_WAR;
{ break;
result |= RelationChanged.RELATION_DECLARED_WAR;
result |= RelationChanged.RELATION_MUTUAL_WAR;
break;
}
} }
} }
} }
@@ -9036,6 +9033,10 @@ public final class L2PcInstance extends L2Playable
public void setPledgeType(int typeId) public void setPledgeType(int typeId)
{ {
if (_clan != null)
{
_clan.createSubPledge(typeId);
}
_pledgeType = typeId; _pledgeType = typeId;
} }

View File

@@ -30,7 +30,6 @@ import com.l2jmobius.gameserver.instancemanager.FortManager;
import com.l2jmobius.gameserver.instancemanager.FortSiegeManager; import com.l2jmobius.gameserver.instancemanager.FortSiegeManager;
import com.l2jmobius.gameserver.instancemanager.SiegeManager; import com.l2jmobius.gameserver.instancemanager.SiegeManager;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2Clan.SubPledge;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.L2SkillLearn; import com.l2jmobius.gameserver.model.L2SkillLearn;
import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.L2Character;
@@ -46,8 +45,6 @@ import com.l2jmobius.gameserver.network.serverpackets.MagicSkillLaunched;
import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse; import com.l2jmobius.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import com.l2jmobius.gameserver.network.serverpackets.UserInfo;
import com.l2jmobius.gameserver.util.Util;
/** /**
* This class ... * This class ...
@@ -124,51 +121,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
ClanTable.getInstance().createClan(player, cmdParams); ClanTable.getInstance().createClan(player, cmdParams);
} }
else if (actualCommand.equalsIgnoreCase("create_academy"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, null, L2Clan.SUBUNIT_ACADEMY, 5);
}
else if (actualCommand.equalsIgnoreCase("rename_pledge"))
{
if (cmdParams.isEmpty() || cmdParams2.isEmpty())
{
return;
}
renameSubPledge(player, Integer.parseInt(cmdParams), cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_royal"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_ROYAL1, 6);
}
else if (actualCommand.equalsIgnoreCase("create_knight"))
{
if (cmdParams.isEmpty())
{
return;
}
createSubPledge(player, cmdParams, cmdParams2, L2Clan.SUBUNIT_KNIGHT1, 7);
}
else if (actualCommand.equalsIgnoreCase("assign_subpl_leader"))
{
if (cmdParams.isEmpty())
{
return;
}
assignSubPledgeLeader(player, cmdParams, cmdParams2);
}
else if (actualCommand.equalsIgnoreCase("create_ally")) else if (actualCommand.equalsIgnoreCase("create_ally"))
{ {
if (cmdParams.isEmpty()) if (cmdParams.isEmpty())
@@ -371,207 +323,6 @@ public class L2VillageMasterInstance extends L2NpcInstance
clan.updateClanInDB(); clan.updateClanInDB();
} }
private static void createSubPledge(L2PcInstance player, String clanName, String leaderName, int pledgeType, int minClanLvl)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
if (clan.getLevel() < minClanLvl)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
player.sendPacket(SystemMessageId.TO_ESTABLISH_A_CLAN_ACADEMY_YOUR_CLAN_MUST_BE_LEVEL_5_OR_HIGHER);
}
else
{
player.sendPacket(SystemMessageId.THE_CONDITIONS_NECESSARY_TO_CREATE_A_MILITARY_UNIT_HAVE_NOT_BEEN_MET);
}
return;
}
if (!Util.isAlphaNumeric(clanName) || !isValidName(clanName) || (2 > clanName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (clanName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
for (L2Clan tempClan : ClanTable.getInstance().getClans())
{
if (tempClan.getSubPledge(clanName) != null)
{
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_ALREADY_EXISTS);
sm.addString(clanName);
player.sendPacket(sm);
}
else
{
player.sendPacket(SystemMessageId.ANOTHER_MILITARY_UNIT_IS_ALREADY_USING_THAT_NAME_PLEASE_ENTER_A_DIFFERENT_NAME);
}
return;
}
}
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
}
final int leaderId = pledgeType != L2Clan.SUBUNIT_ACADEMY ? clan.getClanMember(leaderName).getObjectId() : 0;
if (clan.createSubPledge(player, pledgeType, leaderId, clanName) == null)
{
return;
}
SystemMessage sm;
if (pledgeType == L2Clan.SUBUNIT_ACADEMY)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.CONGRATULATIONS_THE_S1_S_CLAN_ACADEMY_HAS_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_KNIGHT1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_KNIGHTS_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else if (pledgeType >= L2Clan.SUBUNIT_ROYAL1)
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_ROYAL_GUARD_OF_S1_HAVE_BEEN_CREATED);
sm.addString(player.getClan().getName());
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_CLAN_HAS_BEEN_CREATED);
}
player.sendPacket(sm);
if (pledgeType != L2Clan.SUBUNIT_ACADEMY)
{
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
}
}
private static void renameSubPledge(L2PcInstance player, int pledgeType, String pledgeName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(pledgeType);
if (subPledge == null)
{
player.sendMessage("Pledge don't exists.");
return;
}
if (!Util.isAlphaNumeric(pledgeName) || !isValidName(pledgeName) || (2 > pledgeName.length()))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if (pledgeName.length() > 16)
{
player.sendPacket(SystemMessageId.CLAN_NAME_S_LENGTH_IS_INCORRECT);
return;
}
subPledge.setName(pledgeName);
clan.updateSubPledgeInDB(subPledge.getId());
clan.broadcastClanStatus();
player.sendMessage("Pledge name changed.");
}
private static void assignSubPledgeLeader(L2PcInstance player, String clanName, String leaderName)
{
if (!player.isClanLeader())
{
player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
return;
}
if (leaderName.length() > 16)
{
player.sendPacket(SystemMessageId.YOUR_TITLE_MUST_BE_AT_LEAST_1_CHARACTER_AND_CANNOT_EXCEED_16_CHARACTERS_IN_LENGTH_PLEASE_TRY_AGAIN);
return;
}
if (player.getName().equals(leaderName))
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
return;
}
final L2Clan clan = player.getClan();
final SubPledge subPledge = player.getClan().getSubPledge(clanName);
if ((null == subPledge) || (subPledge.getId() == L2Clan.SUBUNIT_ACADEMY))
{
player.sendPacket(SystemMessageId.CLAN_NAME_IS_INVALID);
return;
}
if ((clan.getClanMember(leaderName) == null) || (clan.getClanMember(leaderName).getPledgeType() != 0))
{
if (subPledge.getId() >= L2Clan.SUBUNIT_KNIGHT1)
{
player.sendPacket(SystemMessageId.THE_CAPTAIN_OF_THE_ORDER_OF_KNIGHTS_CANNOT_BE_APPOINTED);
}
else if (subPledge.getId() >= L2Clan.SUBUNIT_ROYAL1)
{
player.sendPacket(SystemMessageId.THE_ROYAL_GUARD_CAPTAIN_CANNOT_BE_APPOINTED);
}
return;
}
subPledge.setLeaderId(clan.getClanMember(leaderName).getObjectId());
clan.updateSubPledgeInDB(subPledge.getId());
final L2ClanMember leaderSubPledge = clan.getClanMember(leaderName);
final L2PcInstance leaderPlayer = leaderSubPledge.getPlayerInstance();
if (leaderPlayer != null)
{
leaderPlayer.setPledgeClass(L2ClanMember.calculatePledgeClass(leaderPlayer));
leaderPlayer.sendPacket(new UserInfo(leaderPlayer));
}
clan.broadcastClanStatus();
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_BEEN_SELECTED_AS_THE_CAPTAIN_OF_S2);
sm.addString(leaderName);
sm.addString(clanName);
clan.broadcastToOnlineMembers(sm);
}
/** /**
* this displays PledgeSkillList to the player. * this displays PledgeSkillList to the player.
* @param player * @param player

View File

@@ -98,7 +98,7 @@ public final class RequestAnswerJoinPledge implements IClientIncomingPacket
activeChar.sendPacket(new JoinPledge(requestor.getClanId())); activeChar.sendPacket(new JoinPledge(requestor.getClanId()));
activeChar.setPledgeType(pledgeType); activeChar.setPledgeType(pledgeType);
if (pledgeType == L2Clan.SUBUNIT_ACADEMY) if (pledgeType == -1) // Academy - Removed.
{ {
activeChar.setPowerGrade(9); // academy activeChar.setPowerGrade(9); // academy
activeChar.setLvlJoinedAcademy(activeChar.getLevel()); activeChar.setLvlJoinedAcademy(activeChar.getLevel());

View File

@@ -17,11 +17,14 @@
package com.l2jmobius.gameserver.network.clientpackets; package com.l2jmobius.gameserver.network.clientpackets;
import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.commons.network.PacketReader;
import com.l2jmobius.gameserver.data.xml.impl.ClanLevelData;
import com.l2jmobius.gameserver.model.ClanPrivilege; import com.l2jmobius.gameserver.model.ClanPrivilege;
import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.L2Clan;
import com.l2jmobius.gameserver.model.L2ClanMember; import com.l2jmobius.gameserver.model.L2ClanMember;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.L2GameClient;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
/** /**
* Format: (ch) dSdS * Format: (ch) dSdS
@@ -29,29 +32,22 @@ import com.l2jmobius.gameserver.network.L2GameClient;
*/ */
public final class RequestPledgeReorganizeMember implements IClientIncomingPacket public final class RequestPledgeReorganizeMember implements IClientIncomingPacket
{ {
private int _isMemberSelected;
private String _memberName; private String _memberName;
private int _newPledgeType; private int _newPledgeType;
private String _selectedMember;
@Override @Override
public boolean read(L2GameClient client, PacketReader packet) public boolean read(L2GameClient client, PacketReader packet)
{ {
_isMemberSelected = packet.readD(); packet.readD(); // _isMemberSelected
_memberName = packet.readS(); _memberName = packet.readS();
_newPledgeType = packet.readD(); _newPledgeType = packet.readD();
_selectedMember = packet.readS(); packet.readS(); // _selectedMember
return true; return true;
} }
@Override @Override
public void run(L2GameClient client) public void run(L2GameClient client)
{ {
if (_isMemberSelected == 0)
{
return;
}
final L2PcInstance activeChar = client.getActiveChar(); final L2PcInstance activeChar = client.getActiveChar();
if (activeChar == null) if (activeChar == null)
{ {
@@ -75,21 +71,21 @@ public final class RequestPledgeReorganizeMember implements IClientIncomingPacke
return; return;
} }
final L2ClanMember member2 = clan.getClanMember(_selectedMember);
if ((member2 == null) || (member2.getObjectId() == clan.getLeaderId()))
{
return;
}
final int oldPledgeType = member1.getPledgeType(); final int oldPledgeType = member1.getPledgeType();
if (oldPledgeType == _newPledgeType) if (oldPledgeType == _newPledgeType)
{ {
return; return;
} }
if (clan.getSubPledgeMembersCount(_newPledgeType) >= (_newPledgeType == 0 ? ClanLevelData.getCommonMemberLimit(clan.getLevel()) : ClanLevelData.getEliteMemberLimit(clan.getLevel())))
{
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_FULL_AND_CANNOT_ACCEPT_ADDITIONAL_CLAN_MEMBERS_AT_THIS_TIME);
sm.addString(_newPledgeType == 0 ? "Common Members" : "Elite Members");
activeChar.sendPacket(sm);
return;
}
member1.setPledgeType(_newPledgeType); member1.setPledgeType(_newPledgeType);
member2.setPledgeType(oldPledgeType);
clan.broadcastClanStatus(); clan.broadcastClanStatus();
} }
} }

View File

@@ -69,7 +69,7 @@ public final class RequestPledgeSetAcademyMaster implements IClientIncomingPacke
L2ClanMember apprenticeMember; L2ClanMember apprenticeMember;
L2ClanMember sponsorMember; L2ClanMember sponsorMember;
if (currentMember.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (currentMember.getPledgeType() == -1) // Academy - Removed.
{ {
apprenticeMember = currentMember; apprenticeMember = currentMember;
sponsorMember = targetMember; sponsorMember = targetMember;

View File

@@ -74,7 +74,7 @@ public final class RequestPledgeSetMemberPowerGrade implements IClientIncomingPa
return; return;
} }
if (member.getPledgeType() == L2Clan.SUBUNIT_ACADEMY) if (member.getPledgeType() == -1) // Academy - Removed.
{ {
// also checked from client side // also checked from client side
activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER); activeChar.sendPacket(SystemMessageId.THAT_PRIVILEGE_CANNOT_BE_GRANTED_TO_A_CLAN_ACADEMY_MEMBER);

Some files were not shown because too many files have changed in this diff Show More