代码chaid_l1weaponskill.java 源代码在线查看 - 网络游戏天堂1的java源代码。。。。。 资源下载 虫虫电子下载站...

这是一个关于网络游戏天堂1的L1WeaponSkill类的Java源代码,包含武器技能模板、概率计算、伤害计算等功能。该代码遵循GNU General Public License,并涉及角色、怪物、NPC和玩家之间的攻击交互,包括技能效果、伤害判定和范围攻击。
摘要由CSDN通过智能技术生成

/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * * http://www.gnu.org/copyleft/gpl.html */package l1j.server.server.model;import java.util.Random;import java.util.logging.Logger;import l1j.server.server.ActionCodes;import l1j.server.server.datatables.SkillsTable;import l1j.server.server.datatables.WeaponSkillTable;import l1j.server.server.model.L1Character;import l1j.server.server.model.Instance.L1ItemInstance;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.model.Instance.L1PetInstance;import l1j.server.server.model.Instance.L1SummonInstance;import l1j.server.server.model.skill.L1SkillUse;import l1j.server.server.serverpackets.S_DoActionGFX;import l1j.server.server.serverpackets.S_EffectLocation;import l1j.server.server.serverpackets.S_Paralysis;import l1j.server.server.serverpackets.S_ServerMessage;import l1j.server.server.serverpackets.S_SkillSound;import l1j.server.server.serverpackets.S_UseAttackSkill;import l1j.server.server.templates.L1Skills;import static l1j.server.server.model.skill.L1SkillId.*;// Referenced classes of package l1j.server.server.model:// L1PcInstancepublic class L1WeaponSkill {private static Logger _log = Logger.getLogger(L1WeaponSkill.class.getName());private static Random _random = new Random();private int _weaponId;private int _probability;private int _fixDamage;private int _randomDamage;private int _area;private int _skillId;private int _skillTime;private int _effectId;private int _effectTarget; // エフェクトの対象 0:相手 1:自分private boolean _isArrowType;private int _attr;//修改weapon_skill table 增加顯示圖案private int _gfxId;private boolean _gfxIdTarget;public int getGfxId() {return _gfxId;}public boolean getGfxIdTarget() {return _gfxIdTarget;}public L1WeaponSkill(int weaponId, int probability, int fixDamage,int randomDamage, int area, int skillId, int skillTime,int effectId, int effectTarget, boolean isArrowType, int attr,int gfxId,boolean gfxIdTarget) {_gfxId=gfxId;_gfxIdTarget=gfxIdTarget;//~修改weapon_skill table 增加顯示圖案_weaponId = weaponId;_probability = probability;_fixDamage = fixDamage;_randomDamage = randomDamage;_area = area;_skillId = skillId;_skillTime = skillTime;_effectId = effectId;_effectTarget = effectTarget;_isArrowType = isArrowType;_attr = attr;}public int getWeaponId() {return _weaponId;}public int getProbability() {return _probability;}public int getFixDamage() {return _fixDamage;}public int getRandomDamage() {return _randomDamage;}public int getArea() {return _area;}public int getSkillId() {return _skillId;}public int getSkillTime() {return _skillTime;}public int getEffectId() {return _effectId;}public int getEffectTarget() {return _effectTarget;}public boolean isArrowType() {return _isArrowType;}public int getAttr() {return _attr;}public static double getWeaponSkillDamage(L1PcInstance pc, L1Character cha,int weaponId) {L1WeaponSkill weaponSkill = WeaponSkillTable.getInstance().getTemplate(weaponId);if (pc == null || cha == null || weaponSkill == null) {return 0;}int chance = _random.nextInt(100) + 1;if (weaponSkill.getProbability() < chance) {return 0;}int skillId = weaponSkill.getSkillId();if (skillId != 0) {L1Skills skill = SkillsTable.getInstance().getTemplate(skillId);if (skill != null && skill.getTarget().equals("buff")) {if (!isFreeze(cha)) { // 凍結状態orカウンターマジック中cha.setSkillEffect(skillId, weaponSkill.getSkillTime() * 1000);}}}int effectId = weaponSkill.getEffectId();if (effectId != 0) {int chaId = 0;if (weaponSkill.getEffectTarget() == 0) {chaId = cha.getId();} else {chaId = pc.getId();}boolean isArrowType = weaponSkill.isArrowType(); if (!isArrowType) {pc.sendPackets(new S_SkillSound(chaId, effectId));pc.broadcastPacket(new S_SkillSound(chaId, effectId));} else {S_UseAttackSkill packet = new S_UseAttackSkill(pc, cha.getId(),effectId, cha.getX(), cha.getY(), ActionCodes.ACTION_Attack, false);pc.sendPackets(packet);pc.broadcastPacket(packet);}}double damage = 0;int randomDamage = weaponSkill.getRandomDamage();if (randomDamage != 0) {damage = _random.nextInt(randomDamage);}damage += weaponSkill.getFixDamage();int area = weaponSkill.getArea();if (area > 0 || area == -1) { // 範囲の場合for (L1Object object : L1World.getInstance().getVisibleObjects(cha, area)) {if (object == null) {continue;}if (!(object instanceof L1Character)) {continue;}if (object.getId() == pc.getId()) {continue;}if (object.getId() == cha.getId()) { // 攻撃対象はL1Attackで処理するため除外continue;}// 攻撃対象がMOBの場合は、範囲内のMOBにのみ当たる// 攻撃対象がPC,Summon,Petの場合は、範囲内のPC,Summon,Pet,MOBに当たるif (cha instanceof L1MonsterInstance) {if (!(object instanceof L1MonsterInstance)) {continue;}}if (cha instanceof L1PcInstance|| cha instanceof L1SummonInstance|| cha instanceof L1PetInstance) {if (!(object instanceof L1PcInstance|| object instanceof L1SummonInstance|| object instanceof L1PetInstance|| object instanceof L1MonsterInstance)) {continue;}}damage = calcDamageReduction((L1Character) object, damage,weaponSkill.getAttr());if (damage continue;}if (object instanceof L1PcInstance) {L1PcInstance targetPc = (L1PcInstance) object;targetPc.sendPackets(new S_DoActionGFX(targetPc.getId(),ActionCodes.ACTION_Damage));targetPc.broadcastPacket(new S_DoActionGFX(targetPc.getId(),ActionCodes.ACTION_Damage));targetPc.receiveDamage(pc, (int) damage);} else if (object instanceof L1SummonInstance|| object instanceof L1PetInstance|| object instanceof L1MonsterInstance) {L1NpcInstance targetNpc = (L1NpcInstance) object;targetNpc.broadcastPacket(new S_DoActionGFX(targetNpc.getId(), ActionCodes.ACTION_Damage));targetNpc.receiveDamage(pc, (int) damage);}}}//修改weapon_skill table 增加顯示圖案if (weaponSkill.getGfxId() != 0) {if (weaponSkill.getGfxIdTarget()) {// 目標顯示pc.sendPackets(new S_SkillSound(cha.getId(), weaponSkill.getGfxId()));pc.broadcastPacket(new S_SkillSound(cha.getId(), weaponSkill.getGfxId()));} else {// 自己身上顯示pc.sendPackets(new S_SkillSound(pc.getId(), weaponSkill.getGfxId()));pc.broadcastPacket(new S_SkillSound(pc.getId(), weaponSkill.getGfxId()));}}//~修改weapon_skill table 增加顯示圖案return calcDamageReduction(cha, damage, weaponSkill.getAttr());}public static double getBaphometStaffDamage(L1PcInstance pc,L1Character cha) {double dmg = 0;int chance = _random.nextInt(100) + 1;if (14 >= chance) {int locx = cha.getX();int locy = cha.getY();int sp = pc.getSp();int intel = pc.getInt();double bsk = 0;if (pc.hasSkillEffect(BERSERKERS)) {bsk = 0.2;}dmg = (intel + sp) * (1.8 + bsk) + _random.nextInt(intel + sp)* 1.8;S_EffectLocation packet = new S_EffectLocation(locx, locy, 129);pc.sendPackets(packet);pc.broadcastPacket(packet);}return calcDamageReduction(cha, dmg, L1Skills.ATTR_EARTH);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值