2009年10月2日金曜日

クラン員重複join処理

join要請してきたプレイヤーが同じアカウントでクランにいたら人数制限を受けずに加入できるよるようにする方法

C_Attr,javaの120行目から下記のように変更or追記してください

//アカウント名取得処理******************


Connection con = null;

PreparedStatement pstm = null;

ResultSet rs = null;

ArrayList membersAccountName = new ArrayList();



try {

con = L1DatabaseFactory.getInstance().getConnection();

pstm = con

.prepareStatement("SELECT DISTINCT account_name FROM characters WHERE ClanID = ?");

pstm.setInt(1, pc.getClanid());

rs = pstm.executeQuery();



//クランメンバーアカウントネームアレイに追加(重複は除く)

while (rs.next()) {

if (!membersAccountName.contains(rs.getString(1))) {

membersAccountName.add(rs.getString(1));

}

}

} catch (SQLException e) {

_log.log(Level.SEVERE, e.getLocalizedMessage(), e);

} finally {

SQLUtil.close(rs);

SQLUtil.close(pstm);

SQLUtil.close(con);

}



//取得したアカウント名がクラン内にあるかどうか調査

boolean joinFlag = false; //Join可能かどうかのフラグ

for(String acNam : membersAccountName){

if(joinPc.getAccountName().equals(acNam)){

joinFlag = true;

break;

}

}



if (maxMember <= membersAccountName.size() &&

joinFlag == false) { // 空きがないし新入クラン員である

joinPc.sendPackets( // %0はあなたを血盟員として受け入れることができません。

new S_ServerMessage(188, pc.getName()));

return;

}

for (L1PcInstance clanMembers : clan

.getOnlineClanMember()) {

clanMembers.sendPackets(new S_ServerMessage(94,

joinPc.getName())); // \f1%0が血盟の一員として受け入れられました。

}

joinPc.setClanid(clan_id);

joinPc.setClanname(clanName);

joinPc.setClanRank(L1Clan.CLAN_RANK_PUBLIC);

joinPc.setTitle("");

joinPc.sendPackets(new S_CharTitle(joinPc.getId(), ""));

joinPc.broadcastPacket(new S_CharTitle(joinPc

.getId(), ""));

joinPc.save(); // DBにキャラクター情報を書き込む

clan.addMemberName(joinPc.getName());

joinPc.sendPackets(new S_ServerMessage(95,

clanName)); // \f1%0血盟に加入しました。

} else { // クラン加入済み(クラン連合)

if (Config.CLAN_ALLIANCE) {

changeClan(clientthread, pc, joinPc, maxMember);

} else {

joinPc.sendPackets(new S_ServerMessage(89)); // \f1あなたはすでに血盟に加入しています。

}

}

}

}

}

break;
 
 
念のためソースを置いておこう・・・
http://www7b.biglobe.ne.jp/~umisaka/C_Attr.java
リビジョン2021に追加を加えたものなんで、C_Attrクラスに独自で変更を入れている人は注意
なお、テストまったく まーーーーーーーーーったくしてないんでバグってる確率125%!
(友達がいないうしこ)
念のためバックアップその他してね\kv

2 コメント:

匿名 さんのコメント...

牛子さん、エミュのマジックドールってアクション起こさせるように(エルダーだと雷に撃たれるとか)は出来ないんですか?
可愛さ半減です!なんとかして><

がんばって!

Usiko さんのコメント...

日本語でおk

エフェクトを表示させる事は可能だが意味あるのか・・・