*반짝이는비늘과 진귀한거북이 획득시 자동낚시 종료!
*반짝이는비늘과 상자물고기는 자신의팩에맞게 번호수정!
*깨진아이템들 주석처리했습니다.
*상자물고기를만드신후 트려져박스에 상자물고기에서 물에젖은아이템
나오게 하면됩니다.
*인벤이미지:반짝이는 비늘(3863)
물고기 상자(3611)
물에 젖은 후드(3610)
물에 젖은 모자(3609)
Opcodes.java
public static final int C_OPCODE_FISHCLICK = 30; // 낚시 입질 클릭
C_Fight.java
(내용통으로)
package l1j.server.server.clientpackets;
import java.util.logging.Level;
import java.util.logging.Logger;
import l1j.server.Config;
import l1j.server.server.ClientThread;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_Message_YN;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.utils.FaceToFace;
// Referenced classes of package l1j.server.server.clientpackets:
// ClientBasePacket
public class C_Fight extends ClientBasePacket {
private static final String C_FIGHT = "[C] C_Fight";
private static Logger _log = Logger.getLogger(C_Fight.class.getName());
public C_Fight(byte abyte0[], ClientThread client)
throws Exception {
super(abyte0);
L1PcInstance pc = client.getActiveChar();
if (pc.isGhost()) {
return;
}
L1PcInstance target = FaceToFace.faceToFace(pc);
if (target != null) {
if (!target.isParalyzed()) {
if (pc.getFightId() != 0) {
pc.sendPackets(new S_ServerMessage(633)); // \f1당신은 벌써 다른 사람과 결투중입니다.
return;
} else if (target.getFightId() != 0) {
target.sendPackets(new S_ServerMessage(634)); // \f1 벌써 다른 사람과 결투중입니다.
return;
}
pc.setFightId(target.getId());
target.setFightId(pc.getId());
target.sendPackets(new S_Message_YN(630, pc.getName())); // %0%s가 당신과 결투를 바라고 있습니다.응합니까? (Y/N)
}
}
}
@Override
public String getType() {
return C_FIGHT;
}
}
C_FishClick.java
(내용통으로)
package l1j.server.server.clientpackets;
import java.util.logging.Logger;
import java.util.Random;
import l1j.server.server.ClientThread;
import l1j.server.server.FishingTimeController;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.L1World;
import l1j.server.server.serverpackets.S_CharVisualUpdate;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.model.L1Inventory;
// Referenced classes of package l1j.server.server.clientpackets:
// ClientBasePacket
public class C_FishClick extends ClientBasePacket {
private static final String C_FISHCLICK = "[C] C_FishClick";
private static Logger _log = Logger.getLogger(C_FishClick.class.getName());
private static Random _random = new Random();
public C_FishClick(byte abyte0[], ClientThread clientthread) throws Exception {
super(abyte0);
L1PcInstance pc = clientthread.getActiveChar();
pc.setFishingTime(0);
pc.setFishingReady(false);
pc.setFishing(false);
pc.sendPackets(new S_CharVisualUpdate(pc));
pc.broadcastPacket(new S_CharVisualUpdate(pc));
FishingTimeController.getInstance().removeMember(pc);
}
@Override
public String getType() {
return C_FISHCLICK;
}
}
FishingTimeController.java
(내용통으로)
package l1j.server.server;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.logging.Logger;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.model.Broadcaster;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.serverpackets.S_CharVisualUpdate;
import l1j.server.server.serverpackets.S_PacketBox;
import l1j.server.server.serverpackets.S_ServerMessage;
public class FishingTimeController implements Runnable {
private static FishingTimeController _instance;
private final List
new ArrayList
private static Random _random = new Random(System.nanoTime());
public static FishingTimeController getInstance() {
if (_instance == null) {
_instance = new FishingTimeController();
}
return _instance;
}
@Override
public void run() {
try {
while (true) {
Thread.sleep(300);
fishing();
}
} catch (Exception e1) {
}
}
public void addMember(L1PcInstance pc) {
if (pc == null
_fishingList.contains(pc)) {
return;
}
_fishingList.add(pc);
}
public void removeMember(L1PcInstance pc) {
if (pc == null
!_fishingList.contains(pc)) {
return;
}
_fishingList.remove(pc);
}
private void fishing() {
if (_fishingList.size() > 0) {
long currentTime = System.currentTimeMillis();
L1PcInstance pc = null;
for (int i = 0; i < _fishingList.size(); i++) {
pc = _fishingList.get(i);
if (pc.isFishing()) {
long time = pc.getFishingTime();
if (currentTime <= (time + 1000)
&& currentTime >= (time - 1000)
&& !pc.isFishingReady()) {
pc.setFishingReady(true);
// pc.sendPackets(new S_Fishing());
pc.sendPackets(new S_PacketBox(S_PacketBox.FISHING));
} else if ( currentTime > (time + 100)
){
int chance = _random.nextInt(200) + 1;
if (chance < 50) {
successFishing(pc, 41298, "$5256"); // 25%어린 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2); //낚시시간 될려주기
} else if (chance < 65) {
successFishing(pc, 41300, "$5258"); // 7.5% 강한 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 80) {
successFishing(pc, 41299, "$5257"); // 7.5%재빠른 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 90) {
successFishing(pc, 41296, "$5249"); // 5%붕어
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 100) {
successFishing(pc, 41297, "$5250"); // 5%잉어
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 105) {
successFishing(pc, 41301, "$5259"); // 2.5%붉은 빛 나는 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 110) {
successFishing(pc, 41302, "$5260"); // 2.5%초록 빛 나는 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 115) {
successFishing(pc, 41303, "$5261"); // 2.5%파란 빛 나는 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 120) {
successFishing(pc, 41304, "$5262"); // 2.5%흰 빛 나는 물고기
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
/* } else if (chance < 123) {
successFishing(pc, 41306, "$5263"); // 1.5%깨진 반지
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 126) {
successFishing(pc, 41307, "$5265"); // 1.5%깨진 목걸이
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 129) {
successFishing(pc, 41305, "$5264"); // 1.5%깨진 귀걸이
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 134) {
successFishing(pc, 21051, "$5269"); // 2.5%물에 젖은 투구
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 139) {
successFishing(pc, 21052, "$5270"); // 2.5%물에 젖은 망토
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 144) {
successFishing(pc, 21053, "$5271"); // 2.5%물에 젖은 갑옷
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 159) {
successFishing(pc, 21054, "$5272"); // 2.5%물에 젖은 장갑
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);*/
} else if (chance < 161) {
successFishing(pc, 41252, " 진귀한 거북이 (1) 개"); // 1%
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 163) {
successFishing(pc, 555129, "상자 물고기 (1) 개"); // 1% //아이템번호
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
} else if (chance < 164) {
successFishing(pc, 555128, "반짝이는 비늘 (1) 개"); //0.5% //아이템번호
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2); //낚시시간 될려주기
} else if (chance < 172) { //4퍼 비늘나오게
successFishing(pc, 555128, "반짝이는 비늘 (1) 개"); // 1.0% //아이템번호
successFishing(pc, 41252, " 진귀한 거북이 (1) 개"); // 1%
pc.setFishingTime(0);
pc.setFishingReady(false);
pc.setFishing(false);
pc.sendPackets(new S_CharVisualUpdate(pc));
Broadcaster.broadcastPacket(pc, new S_CharVisualUpdate(pc));
pc.sendPackets(new S_ServerMessage(1163, "")); // 낚시가 종료했습니다.
removeMember(pc);
}else {
pc.sendPackets(new S_ServerMessage(1136, "")); // 낚시해에 실패했습니다.
pc.getInventory().consumeItem(41295, 1); //실패시 삭제
long time2 = System.currentTimeMillis() + 10000 + _random.nextInt(6) * 1000;
pc.setFishingTime(time2);
}
}
}
}
}
}
private void successFishing(L1PcInstance pc, int itemId, String message) {
L1ItemInstance item = ItemTable.getInstance().createItem(itemId);
item.startItemOwnerTimer(pc);
pc.getInventory().storeItem(item);
pc.getInventory().consumeItem(41295, 1); //먹이
pc.sendPackets(new S_ServerMessage(1185, message));//낚시에 성공했습니다.
if (!pc.getInventory().checkItem(41295)) { //먹이
pc.setFishingTime(0);
pc.setFishingReady(false);
pc.setFishing(false);
pc.sendPackets(new S_CharVisualUpdate(pc));
Broadcaster.broadcastPacket(pc, new S_CharVisualUpdate(pc));
pc.sendPackets(new S_ServerMessage(1137)); //낚시를하기 위해선 먹이가 필요합니다.
removeMember(pc);
}
}
}
C_ItemUSe.java
private void startFishing(L1PcInstance pc, int itemId, int fishX, int fishY) { //검색추가
if (pc.getMapId() != 5302
fishX <= 32704
fishX >= 32831
fishY <= 32768
fishY >= 32895) {
// 여기에 낚싯대를 던질 수 없습니다.
pc.sendPackets(new S_ServerMessage(1138));
return;
}
더 많은 자료는 http://www.sofree.co.kr
댓글 없음:
댓글 쓰기