📄 l1pcinstance.java
字号:
_gmInvis = flag;
}
public int getCurrentWeapon() {
return _currentWeapon;
}
public void setCurrentWeapon(int i) {
_currentWeapon = i;
}
public int getType() {
return _type;
}
public void setType(int i) {
_type = i;
}
public short getAccessLevel() {
return _accessLevel;
}
public void setAccessLevel(short i) {
_accessLevel = i;
}
public int getClassId() {
return _classId;
}
public void setClassId(int i) {
_classId = i;
_classFeature = L1ClassFeature.newClassFeature(i);
}
private L1ClassFeature _classFeature = null;
public L1ClassFeature getClassFeature() {
return _classFeature;
}
@Override
public synchronized int getExp() {
return _exp;
}
@Override
public synchronized void setExp(int i) {
_exp = i;
}
private int _PKcount; // ● PKカウント
public int get_PKcount() {
return _PKcount;
}
public void set_PKcount(int i) {
_PKcount = i;
}
private int _clanid; // ● クランID
public int getClanid() {
return _clanid;
}
public void setClanid(int i) {
_clanid = i;
}
private String clanname; // ● クラン名
public String getClanname() {
return clanname;
}
public void setClanname(String s) {
clanname = s;
}
// 参照を持つようにしたほうがいいかもしれない
public L1Clan getClan() {
return L1World.getInstance().getClan(getClanname());
}
private int _clanRank; // ● クラン内のランク(血盟君主、ガーディアン、一般、見習い)
public int getClanRank() {
return _clanRank;
}
public void setClanRank(int i) {
_clanRank = i;
}
private byte _sex; // ● 性別
public byte get_sex() {
return _sex;
}
public void set_sex(int i) {
_sex = (byte) i;
}
public boolean isGm() {
return _gm;
}
public void setGm(boolean flag) {
_gm = flag;
}
public boolean isMonitor() {
return _monitor;
}
public void setMonitor(boolean flag) {
_monitor = flag;
}
private L1PcInstance getStat() {
return null;
}
public void reduceCurrentHp(double d, L1Character l1character) {
getStat().reduceCurrentHp(d, l1character);
}
/**
* 指定されたプレイヤー群にログアウトしたことを通知する
*
* @param playersList
* 通知するプレイヤーの配列
*/
private void notifyPlayersLogout(List<L1PcInstance> playersArray) {
for (L1PcInstance player : playersArray) {
if (player.knownsObject(this)) {
player.removeKnownObject(this);
player.sendPackets(new S_RemoveObject(this));
}
}
}
public void logout() {
L1World world = L1World.getInstance();
if (getClanid() != 0) // クラン所属
{
L1Clan clan = world.getClan(getClanname());
if (clan != null) {
if (clan.getWarehouseUsingChar() == getId()) // 自キャラがクラン倉庫使用中
{
clan.setWarehouseUsingChar(0); // クラン倉庫のロックを解除
}
}
}
notifyPlayersLogout(getKnownPlayers());
world.removeVisibleObject(this);
world.removeObject(this);
notifyPlayersLogout(world.getRecognizePlayer(this));
_inventory.clearItems();
_dwarf.clearItems();
removeAllKnownObjects();
stopHpRegeneration();
stopMpRegeneration();
setDead(true); // 使い方おかしいかもしれないけど、NPCに消滅したことをわからせるため
setNetConnection(null);
setPacketOutput(null);
l1j.eric.gui.J_Main.getInstance().delPlayerTable(getName());//GUI
}
public ClientThread getNetConnection() {
return _netConnection;
}
public void setNetConnection(ClientThread clientthread) {
_netConnection = clientthread;
}
public boolean isInParty() {
return getParty() != null;
}
public L1Party getParty() {
return _party;
}
public void setParty(L1Party p) {
_party = p;
}
public boolean isInChatParty() {
return getChatParty() != null;
}
public L1ChatParty getChatParty() {
return _chatParty;
}
public void setChatParty(L1ChatParty cp) {
_chatParty = cp;
}
public int getPartyID() {
return _partyID;
}
public void setPartyID(int partyID) {
_partyID = partyID;
}
public int getTradeID() {
return _tradeID;
}
public void setTradeID(int tradeID) {
_tradeID = tradeID;
}
public void setTradeOk(boolean tradeOk) {
_tradeOk = tradeOk;
}
public boolean getTradeOk() {
return _tradeOk;
}
public int getTempID() {
return _tempID;
}
public void setTempID(int tempID) {
_tempID = tempID;
}
public boolean isTeleport() {
return _isTeleport;
}
public void setTeleport(boolean flag) {
_isTeleport = flag;
}
public boolean isDrink() {
return _isDrink;
}
public void setDrink(boolean flag) {
_isDrink = flag;
}
public boolean isGres() {
return _isGres;
}
public void setGres(boolean flag) {
_isGres = flag;
}
public boolean isPinkName() {
return _isPinkName;
}
public void setPinkName(boolean flag) {
_isPinkName = flag;
}
private ArrayList<L1PrivateShopSellList> _sellList = new ArrayList<L1PrivateShopSellList>();
public ArrayList getSellList() {
return _sellList;
}
private ArrayList<L1PrivateShopBuyList> _buyList = new ArrayList<L1PrivateShopBuyList>();
public ArrayList getBuyList() {
return _buyList;
}
private byte[] _shopChat;
public void setShopChat(byte[] chat) {
_shopChat = chat;
}
public byte[] getShopChat() {
return _shopChat;
}
private boolean _isPrivateShop = false;
public boolean isPrivateShop() {
return _isPrivateShop;
}
public void setPrivateShop(boolean flag) {
_isPrivateShop = flag;
}
private boolean _isTradingInPrivateShop = false;
public boolean isTradingInPrivateShop() {
return _isTradingInPrivateShop;
}
public void setTradingInPrivateShop(boolean flag) {
_isTradingInPrivateShop = flag;
}
private int _partnersPrivateShopItemCount = 0; // 閲覧中の個人商店のアイテム数
public int getPartnersPrivateShopItemCount() {
return _partnersPrivateShopItemCount;
}
public void setPartnersPrivateShopItemCount(int i) {
_partnersPrivateShopItemCount = i;
}
private PacketOutput _out;
public void setPacketOutput(PacketOutput out) {
_out = out;
}
public void sendPackets(ServerBasePacket serverbasepacket) {
if (_out == null) {
return;
}
try {
_out.sendPacket(serverbasepacket);
} catch (Exception e) {
}
}
@Override
public void onAction(L1PcInstance attacker) {
// XXX:NullPointerException回避。onActionの引数の型はL1Characterのほうが良い?
if (attacker == null) {
return;
}
// テレポート処理中
if (isTeleport()) {
return;
}
// 攻撃される側または攻撃する側がセーフティーゾーン
if (getZoneType() == 1 || attacker.getZoneType() == 1) {
// 攻撃モーション送信
L1Attack attack_mortion = new L1Attack(attacker, this);
attack_mortion.action();
return;
}
if (checkNonPvP(this, attacker) == true) {
return;
}
if (getCurrentHp() > 0 && !isDead()) {
attacker.delInvis();
boolean isCounterBarrier = false;
L1Attack attack = new L1Attack(attacker, this);
if (attack.calcHit()) {
if (hasSkillEffect(L1SkillId.COUNTER_BARRIER)) {
L1Magic magic = new L1Magic(this, attacker);
boolean isProbability = magic
.calcProbabilityMagic(L1SkillId.COUNTER_BARRIER);
boolean isShortDistance = attack.isShortDistance();
if (isProbability && isShortDistance) {
isCounterBarrier = true;
}
}
if (!isCounterBarrier) {
attacker.setPetTarget(this);
attack.calcDamage();
attack.calcStaffOfMana();
attack.addPcPoisonAttack(attacker, this);
}
}
if (isCounterBarrier) {
attack.actionCounterBarrier();
attack.commitCounterBarrier();
} else {
attack.action();
attack.commit();
}
}
}
public boolean checkNonPvP(L1PcInstance pc, L1Character target) {
L1PcInstance targetpc = null;
if (target instanceof L1PcInstance) {
targetpc = (L1PcInstance) target;
} else if (target instanceof L1PetInstance) {
targetpc = (L1PcInstance) ((L1PetInstance) target).getMaster();
} else if (target instanceof L1SummonInstance) {
targetpc = (L1PcInstance) ((L1SummonInstance) target).getMaster();
}
if (targetpc == null) {
return false; // 相手がPC、サモン、ペット以外
}
if (!Config.ALT_NONPVP) { // Non-PvP設定
if (getMap().isCombatZone(getLocation())) {
return false;
}
// 全戦争リストを取得
for (L1War war : L1World.getInstance().getWarList()) {
if (pc.getClanid() != 0 && targetpc.getClanid() != 0) { // 共にクラン所属中
boolean same_war = war.CheckClanInSameWar(pc.getClanname(),
targetpc.getClanname());
if (same_war == true) { // 同じ戦争に参加中
return false;
}
}
}
// Non-PvP設定でも戦争中は布告なしで攻撃可能
if (target instanceof L1PcInstance) {
L1PcInstance targetPc = (L1PcInstance) target;
if (isInWarAreaAndWarTime(pc, targetPc)) {
return false;
}
}
return true;
} else {
return false;
}
}
private boolean isInWarAreaAndWarTime(L1PcInstance pc, L1PcInstance target) {
// pcとtargetが戦争中に戦争エリアに居るか
int castleId = L1CastleLocation.getCastleIdByArea(pc);
int targetCastleId = L1CastleLocation.getCastleIdByArea(target);
if (castleId != 0 && targetCastleId != 0 && castleId == targetCastleId) {
if (WarTimeController.getInstance().isNowWar(castleId)) {
return true;
}
}
return false;
}
public void setPetTarget(L1Character target) {
Object[] petList = getPetList().values().toArray();
for (Object pet : petList) {
if (pet instanceof L1PetInstance) {
L1PetInstance pets = (L1PetInstance) pet;
pets.setMasterTarget(target);
} else if (pet instanceof L1SummonInstance) {
L1SummonInstance summon = (L1SummonInstance) pet;
summon.setMasterTarget(target);
}
}
}
public void delInvis() {
// 魔法接続時間内はこちらを利用
if (hasSkillEffect(L1SkillId.INVISIBILITY)) { // インビジビリティ
killSkillEffectTimer(L1SkillId.INVISIBILITY);
sendPackets(new S_Invis(getId(), 0));
broadcastPacket(new S_OtherCharPacks(this));
}
if (hasSkillEffect(L1SkillId.BLIND_HIDING)) { // ブラインド ハイディング
killSkillEffectTimer(L1SkillId.BLIND_HIDING);
sendPackets(new S_Invis(getId(), 0));
broadcastPacket(new S_OtherCharPacks(this));
}
}
public void delBlindHiding() {
// 魔法接続時間終了はこちら
killSkillEffectTimer(L1SkillId.BLIND_HIDING);
sendPackets(new S_Invis(getId(), 0));
broadcastPacket(new S_OtherCharPacks(this));
}
// 魔法のダメージの場合はここを使用 (ここで魔法ダメージ軽減処理) attr:0.無属性魔法,1.地魔法,2.火魔法,3.水魔法,4.風魔法
public void receiveDamage(L1Character attacker, int damage, int attr) {
Random random = new Random();
int player_mr = getMr();
int rnd = random.nextInt(100) + 1;
if (player_mr >= rnd) {
damage /= 2;
}
receiveDamage(attacker, damage);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -