共享个自助加入血盟系统脚本
发表于 : 2018-03-10 15:53
代码: 全选
#已经测试可以用,脚本来自网络,原作者不知!
<div class="blockcode"><blockquote>import sys
from com.l2jserver.gameserver.model.quest import State
from com.l2jserver.gameserver.model.quest import QuestState
from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
from com.l2jserver.gameserver.datatables import ClanTable
from com.l2jserver.gameserver.network.serverpackets import JoinPledge
from com.l2jserver.gameserver.network.serverpackets import SystemMessage
from com.l2jserver.gameserver.model import L2Clan
from com.l2jserver.gameserver.network import SystemMessageId
from com.l2jserver.gameserver.instancemanager import CastleManager
from com.l2jserver.gameserver.instancemanager import FortManager
from com.l2jserver.gameserver.network.serverpackets import PledgeShowMemberListAdd
from com.l2jserver.gameserver.network.serverpackets import PledgeShowInfoUpdate
from com.l2jserver.gameserver.network.serverpackets import PledgeShowMemberListAll
from java.lang import System
class Quest(JQuest):
qID = -1
qn = "AutoJoinClan"
qDesc = "custom"
NPCID = [790100]
show_can_self_join_only = True #是否只显示 已设有可自行加入的血盟
htm_header = "<html><title>自助加入血盟系统</title><body>"
htm_footer = "</body></html>"
htm_first_into = "简介
在这里你可以选择你想要加入的血盟,血盟老大可以登记或者关闭血盟自助收人系统
"
htm_first_clanlist = "<a action=\"bypass -h Quest " + qn + " list\">血盟列表</a>
"
htm_first_leader_setting = "<a action=\"bypass -h Quest " + qn + " leader_setting\">盟主设定</a>
"
htm_first = htm_first_into + htm_first_clanlist + htm_first_leader_setting
htm_leader_auto_on = "<a action=\"bypass -h Quest " + qn + " auto_on\">设定自动加入血盟功能开</a>
"
htm_leader_auto_off = "<a action=\"bypass -h Quest " + qn + " auto_off\">设定自动加入血盟功能关</a>
"
htm_leader = htm_leader_auto_on + htm_leader_auto_off
htm_not_leader = "你不是血盟盟主 没有权限设定"
htm_cannot_join = "未能加入. 条件不符"
#加入者 将会被加入到血盟的那一队, 但考虑到 可能血盟还没有亲卫队, 骑士团 所以暂时设定为加入直属血盟
#pledgeType = 0 #0=直属, 100=亲卫队1, 200=亲卫队2, 1001=骑士团1, 1002=骑士团2, 2001=骑士团3, 2002=骑士团4
# // Sub-unit types
# /** Clan subunit type of Academy */
# public static final int SUBUNIT_ACADEMY = -1;
# /** Clan subunit type of Royal Guard A */
# 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;
def __init__(self, id = qID, name = qn, descr = qDesc):
JQuest.__init__(self, id, name, descr)
for id in self.NPCID:
self.addStartNpc(id)
self.addFirstTalkId(id)
self.addTalkId(id)
print "Init:" + self.qn + " loaded"
def isLeader(self, player):
clan = player.getClan()
if not clan: return False
if clan.getLeaderId() != player.getObjectId(): return False
return True
def showClanList(self, player):
r = "<table><tr><td width=150>血盟名称</td><td width=150>盟主</td><td width=100></td><td width=10></td></tr>"
for clan in ClanTable.getInstance().getClans():
link = ""
auto_join = clan.getNotice() == "auto_join"
if self.show_can_self_join_only and auto_join == False:
continue
if auto_join:
link = '<a action="bypass -h Quest %s select_pt %d">点击加入</a>' % (self.qn, clan.getClanId())
if player.isGM():
delete = '<a action="bypass -h Quest %s unset_pt %d">X</a>' % (self.qn, clan.getClanId())
else:
delete = ""
r += "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" % (clan.getName(), clan.getLeaderName(), link, delete)
r += "</table>"
return self.htm_header + r + self.htm_footer
def showSelectPledgeType(self, clanid):
clan = ClanTable.getInstance().getClan(clanid)
r = "请选择加入哪一队
"
r += "加入血盟 %s
" % clan.getName()
r += '<a action="bypass -h Quest %s apply %d %d">%s</a>
' % (self.qn, clan.getClanId(), 0, "直属血盟")
for sp in clan.getAllSubPledges():
r += '<a action="bypass -h Quest %s apply %d %d">%s</a>
' % (self.qn, clan.getClanId(), sp.getId(), sp.getName())
return self.htm_header + r + self.htm_footer
def showLeaderSetting(self):
return self.htm_header + self.htm_leader + self.htm_footer
def canMeJoin(self, player, clanid, pledgeType):
clan = ClanTable.getInstance().getClan(clanid)
if not clan: return False
if clan.getCharPenaltyExpiryTime() > System.currentTimeMillis():
player.sendPacket(SystemMessageId.YOU_MUST_WAIT_BEFORE_ACCEPTING_A_NEW_MEMBER)
return False
if player.getClanId() != 0:
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WORKING_WITH_ANOTHER_CLAN)
sm.addString(player.getName())
player.sendPacket(sm)
return False
if player.getClanJoinExpiryTime() > System.currentTimeMillis():
sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MUST_WAIT_BEFORE_JOINING_ANOTHER_CLAN)
sm.addString(player.getName())
player.sendPacket(sm)
return False
if player.getLevel() > 40 or player.getClassId().level() >= 2:
if pledgeType == -1:
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DOESNOT_MEET_REQUIREMENTS_TO_JOIN_ACADEMY)
sm.addString(player.getName())
player.sendPacket(sm)
player.sendPacket(SystemMessageId.ACADEMY_REQUIREMENTS)
return False
if clan.getSubPledgeMembersCount(pledgeType) >= clan.getMaxNrOfMembers(pledgeType):
if pledgeType == 0:
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_IS_FULL)
sm.addString(clan.getName())
player.sendPacket(sm)
else:
player.sendPacket(SystemMessageId.SUBCLAN_IS_FULL)
return False
return True
def myJoinClan(self, player, clanid, pledgeType):
clan = ClanTable.getInstance().getClan(clanid)
if clan:
player.sendPacket(JoinPledge(clanid))
# player.setPledgeType(L2Clan.SUBUNIT_ROYAL1)
player.setPledgeType(pledgeType)
if pledgeType == L2Clan.SUBUNIT_ACADEMY:
player.setPowerGrade(9)
player.setLvlJoinedAcademy(player.getLevel())
else:
player.setPowerGrade(5)
clan.addClanMember(player)
player.setClanPrivileges(clan.getRankPrivs(5))
player.sendPacket(SystemMessageId.ENTERED_THE_CLAN)
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_JOINED_CLAN)
sm.addString(player.getName())
clan.broadcastToOnlineMembers(sm)
try:
#GS 879 以后
if player.getClan().getCastleId() > 0:
CastleManager.getInstance().getCastleByOwner(player.getClan()).giveResidentialSkills(player)
if player.getClan().getFortId() > 0:
FortManager.getInstance().getFortByOwner(player.getClan()).giveResidentialSkills(player)
except:
#GS 879 之前
if player.getClan().getHasCastle() > 0:
CastleManager.getInstance().getCastleByOwner(player.getClan()).giveResidentialSkills(player)
if player.getClan().getHasFort() > 0:
FortManager.getInstance().getFortByOwner(player.getClan()).giveResidentialSkills(player)
player.sendSkillList()
clan.broadcastToOtherOnlineMembers(PledgeShowMemberListAdd(player), player)
clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan))
player.sendPacket(PledgeShowMemberListAll(clan, player))
player.setClanJoinExpiryTime(0)
player.broadcastUserInfo()
def onAdvEvent(self, event, npc, player):
if not event: return self.onFirstTalk()
if event == "list":
return self.showClanList(player)
elif event.startswith("unset_pt "):
try:
clanid = int(event[9:])
except:
return self.htm_header + "unset_pt 参数错误 *" + event + "*" + self.htm_footer
if player.isGM():
clan = ClanTable.getInstance().getClan(clanid)
clan.setNotice("")
elif event == "leader_setting":
if self.isLeader(player):
return self.showLeaderSetting()
else:
return self.htm_header + self.htm_not_leader + self.htm_footer
elif event == "auto_on":
if self.isLeader(player):
player.getClan().setNotice("auto_join")
elif event == "auto_off":
if self.isLeader(player):
player.getClan().setNotice("")
elif event.startswith("select_pt "):
try:
clanid = int(event[10:])
except:
return self.htm_header + "select_pt 参数错误 *" + event + "*" + self.htm_footer
return self.showSelectPledgeType(clanid)
elif event.startswith("apply "):
p = event[6:].split()
if len(p) != 2 or p[1] not in ["-1","0","100","200","1001","1002","2001","2002"]:
return self.htm_header + "参数错误 *" + event + "*" + self.htm_footer
try:
clanid = int(p[0])
except:
return self.htm_header + "apply 参数错误 *" + event + "*" + self.htm_footer
if self.canMeJoin(player, clanid, int(p[1])):
self.myJoinClan(player, clanid, int(p[1]))
else:
return self.htm_header + self.htm_cannot_join + self.htm_footer
return self.onFirstTalk(npc, player)
def onFirstTalk(self, npc, player):
st = player.getQuestState(self.qn)
if not st:
st = self.newQuestState(player)
st.setState(State.STARTED)
return self.htm_header + self.htm_first + self.htm_footer
Quest()