2014年6月3日 星期二

【Java教學】任務性道具 ( 接任務才打得到 )

限制任務性道具的掉落<<接任務才打得到>>



(11/26)修正重登才能取得道具的問題,終於完成啦!!~>w<
------------------------
取消對L1Character的修改,紅色刪除部分。

public L1Character() {
        _level = 1;
        _currentState = 0;//add 實裝 牛 豬 雞 鴨 對話 use srwh code 1/2
        _dropQuest = new DropTable(this);//限制任務掉落1/2
}
//限制任務掉落2/2
        public DropTable getDpQuest() {
                return _dropQuest;
        }
        private DropTable _dropQuest;
        //end 2008.10.5




-------------------------
※底下的 DropTable.java 也有被改過!!
-------------------------
但是,照著這樣改會有一種情況,
L1NpcInstance.onNpcAI()無法與L1MonsterInstance.onNpcAI(L1Character cha)連結的情況,
如果前者不連到後者的話,會遁地或飛行的怪物一出現就會在原地發呆......
直到你砍它時,他才會開始反擊
所以修改的最後,最好在L1NpcInstance加入public void onNpcAI(L1Character cha) {

}
複製代碼然後同在L1NpcInstance內尋找onNpcAI()的相關位置,
也加入onNpcAI(_target);
-------------------------


花了不少時間做這個冏
如果只要在接任務的時候,才能取得的道具,也許可以減少許多困擾吧~


修改的檔案:
L1SummonInstance.java、
L1MonsterInstance.java、
L1Drop.java、
DropTable.java
L1SummonInstance.java


尋找
public L1SummonInstance(L1NpcInstance target, L1Character master,
boolean createZombie) {......
if (target instanceof L1MonsterInstance
        && !((L1MonsterInstance) target).is_storeDroped()) {......
DropTable.getInstance().setDrop(target, target.getInventory());

改成
DropTable.getInstance().setDrop(master, target, target.getInventory());//限制任務掉落



複製代碼L1MonsterInstance.java

尋找
public void onPerceive(L1PcInstance perceivedFrom) {...
onNpcAI();

改成
onNpcAI(perceivedFrom);//限制任務掉落1/5


複製代碼  找到
public void onNpcAI() {

改成
public void onNpcAI(L1Character cha) {


複製代碼下一個
DropTable.getInstance().setDrop(this, getInventory());

改成
DropTable.getInstance().setDrop(cha, this, getInventory());//限制任務掉落2/5


複製代碼  找到
public void ReceiveManaDamage(L1Character attacker, int mpDamage) {...
onNpcAI();

改成
onNpcAI(attacker);//限制任務掉落3/5

複製代碼  找到
public void receiveDamage(L1Character attacker, int damage) {...
onNpcAI();

改成
onNpcAI(attacker);//限制任務掉落4/5

複製代碼最下面
protected void transform(int transformId) {...
DropTable.getInstance().setDrop(this, getInventory());

改成
L1Character cha=(L1Character)_target;

DropTable.getInstance().setDrop(cha, this, getInventory());//限制任務掉落5/5

複製代碼
L1Drop.java

新增

//限制任務掉落by13630020

int questId;

     

public int get_questId() {

        return questId;

}



public void set_questId(int quest_id) {

        this.questId = quest_id;

}



int questStep;

     

public int get_step() {

        return questStep;

}



public void set_step(int quest_step) {

        this.questStep = quest_step;

}

//end        2008.10.4


複製代碼
DropTable.java

最重要的部份...
找到
l1drop.setChance(rs.getInt("chance"));

往下加入.

//限制任務掉落1/3

l1drop.set_questId(rs.getInt("quest_id"));

l1drop.set_step(rs.getInt("quest_step"));

//end 2008.10.5

複製代碼

public void setDrop(L1Character cha, L1NpcInstance npc, L1Inventory inventory) {...
for (L1Drop drop : dropList) {...
往下加入.


//        限制任務掉落2/3

boolean isQueat = false;

int quest_id = drop.get_questId();

int quest_step = drop.get_step();

if(quest_id==0 && quest_step==0){ //通常預設

        isQueat = true;

}else{

        if(quest_id != 0){

                if(cha instanceof L1PcInstance){

                        L1PcInstance pc = (L1PcInstance) cha;

                        if(pc.getQuest().get_step(quest_id) == quest_step){

                                isQueat = true;

                        }

                }

        }

}

// end


複製代碼然後找到

item = ItemTable.getInstance().createItem(itemId);
item.setCount(itemCount);if(isQueat){//限制任務掉落3/3

※包覆在這個括弧裡面

}
複製代碼補充:加完之後,有些會出現尚未設定初始值,大概有兩個,分別打上(null)
L1ItemInstance item = null;
private HashMap<Integer, ArrayList<L1Drop>> _droplists = null ;

droplist.sql
在最後面新增 quest_id 和 quest_step 欄位quest_id int 10 0

quest_step int 10 0

預設值"0"
複製代碼這樣就OK了。排得有點亂@@,希望沒打漏的!~~




沒有留言:

張貼留言