底比斯天堂
瘋天堂私服發佈網站廣告欄位!
害怕天堂私服倒閉嗎?快使用天堂分析師!
天堂私服抽獎扭蛋物品及機率測試器
天堂私服稱號顏色製造器
瘋天堂私服發佈網站教您註冊推文收藏私服!
天堂私服血量魔力計算器
瘋天堂私服發布網站廣告贊助及爆料私服客服
教您如何不用註冊也可以推文天堂私服!
天堂私服270怪物查詢掉落資料庫
天堂私服盟徽製造器
test0428
2009-02-21 18:13

天堂boss道館的java寫法!

在C_NPCAction
底下找到 else if (((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 80074)

底下新增

else if(((L1NpcInstance)obj).getNpcTemplate().get_npcId() == 1111)

{

if(s.equalsIgnoreCase("BOSSPK"))

htmlid = BossRoom.getInstance().enterBossRoom(pc);

}


這是對話檔

<html>
<body>
<font fg=ffffff><p align=left> <name>:</p></font>
<a action="enterboos">我想挑戰BOSS</a><br>
<
;/body& gt;
</html>


我們在新增一個src底下新增一個william的資料夾 新增一個
BossRoom.java
在這JAVA檔底下新增以下文字

package l1j.william;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import l1j.server.L1DatabaseFactory;
import l1j.server.server.ActionCodes;
import l1j.server.server.GeneralThreadPool;
import l1j.server.server.IdFactory;
import l1j.server.server.datatables.NpcTable;
import l1j.server.server.model.L1Inventory;
import l1j.server.server.model.L1Teleport;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1MonsterInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_BlueMessage;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_SystemMessage;
import l1j.server.server.utils.SQLUtil;

public class BossRoom {

/*
* boss館 by 431200
*
* 遊戲開始後 中途死亡離開boss館
* 還可以再找NPC進入
*
* 遊戲開始後 還沒參加過的玩家不可進入
*/

private final ArrayList<L1PcInstance> _members = new ArrayList<L1PcInstance>();

private static BossRoom _instance;

public static BossRoom getInstance() {
if (_instance == null) {
_instance = new BossRoom();
}
return _instance;
}

public static final int STATUS_NONE = 0; //閒置
public static final int STATUS_READY = 1; //等待中
public static final int STATUS_PLAYING = 2; //遊戲開始
public static final int STATUS_CLEANING = 4; //清潔中

private static final int _minPlayer = 5; //最少玩家數
private static final int _maxPlayer = 20; //最多玩家數

private static final int _readytime = 80 * 1000; //等待時間 80秒 + 倒數 = 總共90秒
private static final int _cleartime = 5 * 60000; //清潔時間 五分鐘

private static final int _bossId1 = 1;//NPC編號
private static final int _bossId2 = 2;
//NPC編號
private static final int _bossId3 = 3;
//NPC編號
private static final int _bossId4 = 4;
//NPC編號
private static final int _bossId5 = 5;
//NPC編號
private static final int _bossId6 = 6;
//NPC編號
private static final int _bossId7 = 7;
//NPC編號
private static final int _bossId8 = 8;
//NPC編號
private static final int _bossId9 = 9;
//NPC編號
private static final int _bossId10 = 10;
//NPC編號

private static final int _adena = 1000000; //扣除金幣數量

public String enterBossRoom(L1PcInstance pc) {

if (BossRoom.getInstance().getBossRoomStatus() == BossRoom.STATUS_CLEANING) {
pc.sendPackets(new S_SystemMessage("目前BOSS館正在清潔中。"));
return "";
}

if (BossRoom.getInstance().getBossRoomStatus() == BossRoom.STATUS_PLAYING
&& !isMember(pc)) {
pc.sendPackets(new S_ServerMessage(1182)); //遊戲已經開始了。
return "";
}

if (getMembersCount() >= _maxPlayer && !isMember(pc)) {
pc.sendPackets(new S_SystemMessage("BOSS館已經到達飽和的狀態了。"));
return "";
}

if (!pc.getInventory().checkItem(40308,_adena) && !isMember(pc)){
pc.sendPackets(new S_ServerMessage(189)); //金幣不足
return "";
}

L1Teleport.teleport(pc, 32842, 32761, (short) 4941, pc.getHeading(), true);
addMember(pc);
return "";
}

private void addMember(L1PcInstance pc) {
if (!_members.contains(pc)) {
_members.add(pc);
pc.getInventory().consumeItem(40308,_adena);
}
if (getMembersCount() == 1 && getBossRoomStatus() == STATUS_NONE) {
GeneralThreadPool.getInstance().execute(new runBossRoom());
}
}

private class runBossRoom implements Runnable {

public void run() {

try {

setBossRoomStatus(STATUS_READY);
sendMessage("90秒後開始遊戲");
Thread.sleep(_readytime);

sendMessage("倒數10秒");
Thread.sleep(5 * 1000);

sendMessage("倒數5秒");
Thread.sleep(1000);

sendMessage("4秒");
Thread.sleep(1000);

sendMessage("3秒");
Thread.sleep(1000);

sendMessage("2秒");
Thread.sleep(1000);

sendMessage("1秒");
Thread.sleep(1000);

if (checkPlayerCount()) {

setBossRoomStatus(STATUS_PLAYING);
spawnBoss(_bossId1,"1","2");
Thread.sleep(2 * 60000);

spawnBoss(_bossId2,"2","3");
Thread.sleep(2 * 60000);

spawnBoss(_bossId3,"3","4");
Thread.sleep(2 * 60000);

spawnBoss(_bossId4,"4","5");
Thread.sleep(2 * 60000);

spawnBoss(_bossId5,"5","6");
Thread.sleep(2 * 60000);

spawnBoss(_bossId6,"6","7");
Thread.sleep(2 * 60000);

spawnBoss(_bossId7,"7","8");
Thread.sleep(2 * 60000);

spawnBoss(_bossId8,"8","9");
Thread.sleep(2 * 60000);

spawnBoss(_bossId9,"9","10");
Thread.sleep(5 * 60000);

spawnBoss(_bossId10,"10",null);
Thread.sleep(5 * 60000);

endBossRoom();
}

Thread.sleep(_cleartime);

setBossRoomStatus(STATUS_NONE);

} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

private boolean checkPlayerCount() {
if (getMembersCount() < _minPlayer){
setBossRoomStatus(STATUS_CLEANING);
sendMessage("人數不足 "+_minPlayer+" 人,所以強制關閉遊戲");
for (L1PcInstance pc : getMembersArray()) {
pc.getInventory().storeItem(40308,_adena);
pc.sendPackets(new S_SystemMessage("BOSS館退還金幣("+_adena+")。"));
L1Teleport.teleport(pc, 33442, 32797, (short) 4, pc.getHeading(), true);
}
clearMembers();
return false;
}
return true;
}

private void endBossRoom() {
setBossRoomStatus(STATUS_CLEANING);
sendMessage("BOSS館遊戲結束,請下次再來");
for (L1PcInstance pc : getMembersArray()) {
L1Teleport.teleport(pc, 33442, 32797, (short) 4, pc.getHeading(), true); //結束傳送的地方
}
clearMembers();
clearColosseum();
}

private void clearColosseum() {
for (Object obj : L1World.getInstance().getVisibleObjects(4941).values()) {
if (obj instanceof L1MonsterInstance) {
L1MonsterInstance mob = (L1MonsterInstance) obj;
if (!mob.isDead()) {
mob.setDead(true);
mob.setStatus(ActionCodes.ACTION_Die);
mob.setCurrentHpDirect(0);
mob.deleteMe();
}
} else if (obj instanceof L1Inventory) {
L1Inventory inventory = (L1Inventory) obj;
inventory.clearItems();
}
}
}

private void spawnBoss(int npcid, String msg1, String msg2) {
if (msg1.equalsIgnoreCase("9")){
sendMessage("第 "+msg1+" 關 ["+ getBossName(npcid) +"] 5分後開始第 "+msg2+" 關");
} else if (msg1.equalsIgnoreCase("10")){
sendMessage("最後一關 ["+ getBossName(npcid) +"] 請努力撐下去,5分鐘後結束BOSS館");
} else {
sendMessage("第 "+msg1+" 關 ["+ getBossName(npcid) +"] 2分後開始第 "+msg2+" 關");
}
spawn(npcid);
}

private void spawn(int npcid) {
try {
L1NpcInstance npc = NpcTable.getInstance().newNpcInstance(npcid);
npc.setId(IdFactory.getInstance().nextId());
npc.setMap((short)4941);
npc.setX(32842);
npc.setY(32761);
Thread.sleep(1);
npc.setHomeX(npc.getX());
npc.setHomeY(npc.getY());
npc.setHeading(4);

L1World.getInstance().storeObject(npc);
L1World.getInstance().addVisibleObject(npc);
npc.turnOnOffLight();
npc.startChat(L1NpcInstance.CHAT_TIMING_APPEARANCE);

} catch (Exception e) {
}
}

private String getBossName(int npcId) {
String BossName = null;
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
try {
con = L1DatabaseFactory.getInstance().getConnection();
pstm = con.prepareStatement("select name from npc where npcid = ?");
pstm.setInt(1, npcId);
rs = pstm.executeQuery();
if (rs.next()) {
BossName = rs.getString("name");
}
} catch (SQLException e) {
} finally {
SQLUtil.close(rs);
SQLUtil.close(pstm);
SQLUtil.close(con);
}
return BossName;
}

private void sendMessage(String msg) {
for (L1PcInstance pc : getMembersArray()) {
if (pc.getMapId() == 4941){
pc.sendPackets(new S_BlueMessage(166,"\\f3" + msg)); //夜小空 創意廣播
}
}
}

private int _BossRoomStatus = STATUS_NONE;

private void setBossRoomStatus(int i) {
_BossRoomStatus = i;
}

private int getBossRoomStatus() {
return _BossRoomStatus;
}

private void clearMembers() {
_members.clear();
}

private boolean isMember(L1PcInstance pc) {
return _members.contains(pc);
}

private L1PcInstance[] getMembersArray() {
return _members.toArray(new L1PcInstance[_members.size()]);
}

private int getMembersCount() {
return _members.size();
}

}



上一篇文章:天堂依薇召喚bug和無限回魔的bug!
下一篇文章:天堂雙刀鋼爪暴擊直接改SPR檔方式!

分享文章:分享到微博! 分享到臉書! 分享到噗浪! 分享到維特! 分享到Google+! 分享到LINE!