/**
* License
* THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS
* CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE").
* THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.
* ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR
* COPYRIGHT LAW IS PROHIBITED.
*
* BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND
* AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE
* MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED
* HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
*
*/
package l1j.server.server.model.item.action;
import static l1j.server.server.model.skill.L1SkillId.*;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.identity.L1ItemId;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_HPUpdate;
import l1j.server.server.serverpackets.S_SkillSound;
import l1j.server.server.serverpackets.S_MPUpdate;
import l1j.server.server.serverpackets.S_SPMR;
public class Effect {
public static void useEffectItem(L1PcInstance pc, L1ItemInstance item) {
if (pc.hasSkillEffect(DECAY_POTION)) { //
pc.sendPackets(new S_ServerMessage(698)); //
return;
}
int itemId = item.getItem().getItemId();
int skillId = 0;
int time = 0;
int gfxid = 0;
switch(itemId) {
case L1ItemId.POTION_OF_EXP_150: // 150%
case L1ItemId.POTION_OF_EXP_175: // 175%
case L1ItemId.POTION_OF_EXP_200: // 200%
case L1ItemId.POTION_OF_EXP_225: // 225%
case L1ItemId.POTION_OF_EXP_250: // 250%
skillId = itemId - 42999;
time = 900;
gfxid = itemId - 39699;
deleteRepeatedSkills(pc, skillId); //
pc.sendPackets(new S_ServerMessage(1292)); //
break;
case L1ItemId.BLESS_OF_MAZU: //
skillId = EFFECT_BLESS_OF_MAZU;
time = 2400;
gfxid = 7321;
deleteRepeatedSkills(pc, skillId); //
break;
case L1ItemId.POTION_OF_BATTLE: //
skillId = EFFECT_POTION_OF_BATTLE;
time = 3600;
gfxid = 7013;
deleteRepeatedSkills(pc, skillId); //
break;
case L1ItemId.SCROLL_FOR_STRENGTHENING_HP: //
case L1ItemId.SCROLL_FOR_STRENGTHENING_MP: //
case L1ItemId.SCROLL_FOR_ENCHANTING_BATTLE: //
skillId = itemId - 42999;
time = 3600;
gfxid = itemId - 40014;
deleteRepeatedSkills(pc, skillId);
break;
default:
pc.sendPackets(new S_ServerMessage(79)); //
return;
}
if (pc.hasSkillEffect(skillId)) {
pc.removeSkillEffect(skillId);
}
pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
useEffect(pc, skillId, time);
pc.getInventory().removeItem(item, 1);
}
public static void useEffect(L1PcInstance pc, int skillId, int time) {
if (!pc.hasSkillEffect(skillId)) {
switch(skillId) {
case EFFECT_BLESS_OF_MAZU: //
pc.addHitup(3); // +3
pc.addDmgup(3); // +3
break;
case EFFECT_ENCHANTING_BATTLE: //
pc.addHitup(3); // +3
pc.addDmgup(3); // +3
pc.addBowHitup(3); // +3
pc.addBowDmgup(3); // +3
pc.addSp(3); // +3
pc.sendPackets(new S_SPMR(pc));
break;
case EFFECT_STRENGTHENING_HP: //
pc.addMaxHp(50);
pc.sendPackets(new S_HPUpdate(pc.getCurrentHp(), pc.getMaxHp()));
if (pc.isInParty()) { //
pc.getParty().updateMiniHP(pc);
}
break;
case EFFECT_STRENGTHENING_MP: //
pc.addMaxMp(40);
pc.sendPackets(new S_MPUpdate(pc.getCurrentMp(), pc.getMaxMp()));
break;
default:
break;
}
}
pc.setSkillEffect(skillId, time * 1000);
}
//
public static void deleteRepeatedSkills(L1PcInstance pc, int skillId) {
final int[][] repeatedSkills =
{
//
{ EFFECT_POTION_OF_EXP_150, EFFECT_POTION_OF_EXP_175, EFFECT_POTION_OF_EXP_200,
EFFECT_POTION_OF_EXP_225, EFFECT_POTION_OF_EXP_250, EFFECT_POTION_OF_BATTLE },
//
{ EFFECT_STRENGTHENING_HP, EFFECT_STRENGTHENING_MP, EFFECT_ENCHANTING_BATTLE },
//
{ FIRE_WEAPON, WIND_SHOT, FIRE_BLESS, STORM_EYE, BURNING_WEAPON, STORM_SHOT, EFFECT_BLESS_OF_MAZU }
};
for (int[] skills : repeatedSkills) {
for (int id : skills) {
if (id == skillId) {
stopSkillList(pc, skillId, skills);
}
}
}
}
//
private static void stopSkillList(L1PcInstance pc, int _skillId, int[] repeat_skill) {
for (int skillId : repeat_skill) {
if (skillId != _skillId) {
pc.removeSkillEffect(skillId);
}
}
}
}
|