Сообщений: 25
Тем: 5
Зарегистрирован: Nov 2010
Репутация:
83
Всем привет.
ребята подскажите плз как исправить это чудо
после того как переродился маги перестают юзать SpiritShot.
А именно они их юзают ток на пару скилов а в остальном случае юзают SoulShot.
Бред какой то
Сборка f w-tm.ru 2.1
Скажите кто знает где искать и какой примерно фрагмент кода за это отвечает.
ps залазил в PHP код: <?php
gameserver\data\scripts\handler\items\SpiritShot.java
PHP код: <?php
gameserver\data\scripts\handler\items\SoulShots.java
там вроде все пучком.
Вот файлы.
spirit shot
PHP код: <?php
package handler.items;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.Playable;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.serverpackets.ExAutoSoulShot;
import l2p.gameserver.serverpackets.MagicSkillUse;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.templates.item.WeaponTemplate;
public class SpiritShot extends ScriptItemHandler {
// all the items ids that this handler knowns
private static final int[] _itemIds = {5790, 2509, 2510, 2511, 2512, 2513, 2514, 19441, 22077, 22078, 22079, 22080, 22081, 19441, 33787};
private static final int[] _skillIds = {2061, 2155, 2156, 2157, 2158, 2159, 9194};
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl) {
if (playable == null || !playable.isPlayer())
return false;
Player player = (Player) playable;
ItemInstance weaponInst = player.getActiveWeaponInstance();
WeaponTemplate weaponItem = player.getActiveWeaponItem();
int SoulshotId = item.getItemId();
boolean isAutoSoulShot = false;
if (player.getAutoSoulShot().contains(SoulshotId))
isAutoSoulShot = true;
if (weaponInst == null) {
if (!isAutoSoulShot)
player.sendPacket(Msg.CANNOT_USE_SPIRITSHOTS);
return false;
}
// spiritshot is already active
if (weaponInst.getChargedSpiritshot() != ItemInstance.CHARGED_NONE)
return false;
int SpiritshotId = item.getItemId();
int grade = weaponItem.getCrystalType().externalOrdinal;
int soulSpiritConsumption = weaponItem.getSpiritShotCount();
long count = item.getCount();
if (soulSpiritConsumption == 0) {
// Can't use Spiritshots
if (isAutoSoulShot) {
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(SoulshotId));
return false;
}
player.sendPacket(Msg.CANNOT_USE_SPIRITSHOTS);
return false;
}
if (grade == 0 && SpiritshotId != 5790 && SpiritshotId != 2509 // NG
|| grade == 1 && SpiritshotId != 2510 && SpiritshotId != 22077 // D
|| grade == 2 && SpiritshotId != 2511 && SpiritshotId != 22078 // C
|| grade == 3 && SpiritshotId != 2512 && SpiritshotId != 22079 // B
|| grade == 4 && SpiritshotId != 2513 && SpiritshotId != 22080 // A
|| grade == 5 && SpiritshotId != 2514 && SpiritshotId != 22081 // S
|| grade == 6 && SpiritshotId != 19441 && SpiritshotId != 33787 // R
) {
// wrong grade for weapon
if (isAutoSoulShot)
return false;
player.sendPacket(Msg.SPIRITSHOT_DOES_NOT_MATCH_WEAPON_GRADE);
return false;
}
if (count < soulSpiritConsumption) {
if (isAutoSoulShot) {
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(SoulshotId));
return false;
}
player.sendPacket(Msg.NOT_ENOUGH_SPIRITSHOTS);
return false;
}
if (player.getInventory().destroyItem(item, soulSpiritConsumption)) {
weaponInst.setChargedSpiritshot(ItemInstance.CHARGED_SPIRITSHOT);
player.sendPacket(Msg.POWER_OF_MANA_ENABLED);
player.broadcastPacket(new MagicSkillUse(player, player, 0, _skillIds[grade], 1, 0, 0, -1));
}
return true;
}
@Override
public final int[] getItemIds() {
return _itemIds;
}
}
Blesed spirit shot
PHP код: <?php
package handler.items;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.Playable;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.serverpackets.ExAutoSoulShot;
import l2p.gameserver.serverpackets.MagicSkillUse;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.templates.item.WeaponTemplate;
public class SpiritShot extends ScriptItemHandler {
// all the items ids that this handler knowns
private static final int[] _itemIds = {5790, 2509, 2510, 2511, 2512, 2513, 2514, 19441, 22077, 22078, 22079, 22080, 22081, 19441, 33787};
private static final int[] _skillIds = {2061, 2155, 2156, 2157, 2158, 2159, 9194};
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl) {
if (playable == null || !playable.isPlayer())
return false;
Player player = (Player) playable;
ItemInstance weaponInst = player.getActiveWeaponInstance();
WeaponTemplate weaponItem = player.getActiveWeaponItem();
int SoulshotId = item.getItemId();
boolean isAutoSoulShot = false;
if (player.getAutoSoulShot().contains(SoulshotId))
isAutoSoulShot = true;
if (weaponInst == null) {
if (!isAutoSoulShot)
player.sendPacket(Msg.CANNOT_USE_SPIRITSHOTS);
return false;
}
// spiritshot is already active
if (weaponInst.getChargedSpiritshot() != ItemInstance.CHARGED_NONE)
return false;
int SpiritshotId = item.getItemId();
int grade = weaponItem.getCrystalType().externalOrdinal;
int soulSpiritConsumption = weaponItem.getSpiritShotCount();
long count = item.getCount();
if (soulSpiritConsumption == 0) {
// Can't use Spiritshots
if (isAutoSoulShot) {
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(SoulshotId));
return false;
}
player.sendPacket(Msg.CANNOT_USE_SPIRITSHOTS);
return false;
}
if (grade == 0 && SpiritshotId != 5790 && SpiritshotId != 2509 // NG
|| grade == 1 && SpiritshotId != 2510 && SpiritshotId != 22077 // D
|| grade == 2 && SpiritshotId != 2511 && SpiritshotId != 22078 // C
|| grade == 3 && SpiritshotId != 2512 && SpiritshotId != 22079 // B
|| grade == 4 && SpiritshotId != 2513 && SpiritshotId != 22080 // A
|| grade == 5 && SpiritshotId != 2514 && SpiritshotId != 22081 // S
|| grade == 6 && SpiritshotId != 19441 && SpiritshotId != 33787 // R
) {
// wrong grade for weapon
if (isAutoSoulShot)
return false;
player.sendPacket(Msg.SPIRITSHOT_DOES_NOT_MATCH_WEAPON_GRADE);
return false;
}
if (count < soulSpiritConsumption) {
if (isAutoSoulShot) {
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(SoulshotId));
return false;
}
player.sendPacket(Msg.NOT_ENOUGH_SPIRITSHOTS);
return false;
}
if (player.getInventory().destroyItem(item, soulSpiritConsumption)) {
weaponInst.setChargedSpiritshot(ItemInstance.CHARGED_SPIRITSHOT);
player.sendPacket(Msg.POWER_OF_MANA_ENABLED);
player.broadcastPacket(new MagicSkillUse(player, player, 0, _skillIds[grade], 1, 0, 0, -1));
}
return true;
}
@Override
public final int[] getItemIds() {
return _itemIds;
}
}
Соул шот
PHP код: <?php
package handler.items;
import l2p.commons.util.Rnd;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.Playable;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.serverpackets.ExAutoSoulShot;
import l2p.gameserver.serverpackets.MagicSkillUse;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.stats.Stats;
import l2p.gameserver.templates.item.WeaponTemplate;
import l2p.gameserver.templates.item.WeaponTemplate.WeaponType;
public class SoulShots extends ScriptItemHandler {
private static final int[] _itemIds = {5789, 1835, 1463, 1464, 1465, 1466, 1467, 13037, 13045, 13055, 22082, 22083, 22084, 22085, 22086, 17754, 33780};
private static final int[] _skillIds = {2039, 2150, 2151, 2152, 2153, 2154, 9193};
@Override
public boolean useItem(Playable playable, ItemInstance item, boolean ctrl) {
if (playable == null || !playable.isPlayer())
return false;
Player player = (Player) playable;
WeaponTemplate weaponItem = player.getActiveWeaponItem();
ItemInstance weaponInst = player.getActiveWeaponInstance();
int SoulshotId = item.getItemId();
boolean isAutoSoulShot = false;
if (player.getAutoSoulShot().contains(SoulshotId))
isAutoSoulShot = true;
if (weaponInst == null) {
if (!isAutoSoulShot)
player.sendPacket(Msg.CANNOT_USE_SOULSHOTS);
return false;
}
// soulshot is already active
if (weaponInst.getChargedSoulshot() != ItemInstance.CHARGED_NONE)
return false;
int grade = weaponItem.getCrystalType().externalOrdinal;
int soulShotConsumption = weaponItem.getSoulShotCount();
if (soulShotConsumption == 0) {
// Can't use soulshots
if (isAutoSoulShot) {
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(SoulshotId));
return false;
}
player.sendPacket(Msg.CANNOT_USE_SOULSHOTS);
return false;
}
if (grade == 0 && SoulshotId != 5789 && SoulshotId != 1835 // NG
|| grade == 1 && SoulshotId != 1463 && SoulshotId != 22082 && SoulshotId != 13037 // D
|| grade == 2 && SoulshotId != 1464 && SoulshotId != 22083 && SoulshotId != 13045 // C
|| grade == 3 && SoulshotId != 1465 && SoulshotId != 22084 // B
|| grade == 4 && SoulshotId != 1466 && SoulshotId != 22085 && SoulshotId != 13055 // A
|| grade == 5 && SoulshotId != 1467 && SoulshotId != 22086 // S
|| grade == 6 && SoulshotId != 17754 && SoulshotId != 33780 // R
) {
// wrong grade for weapon
if (isAutoSoulShot)
return false;
player.sendPacket(Msg.SOULSHOT_DOES_NOT_MATCH_WEAPON_GRADE);
return false;
}
if (weaponItem.getItemType() == WeaponType.BOW || weaponItem.getItemType() == WeaponType.CROSSBOW) {
int newSS = (int) player.calcStat(Stats.SS_USE_BOW, soulShotConsumption, null, null);
if (newSS < soulShotConsumption && Rnd.chance(player.calcStat(Stats.SS_USE_BOW_CHANCE, soulShotConsumption, null, null)))
soulShotConsumption = newSS;
}
if (!player.getInventory().destroyItem(item, soulShotConsumption)) {
player.sendPacket(Msg.NOT_ENOUGH_SOULSHOTS);
return false;
}
weaponInst.setChargedSoulshot(ItemInstance.CHARGED_SOULSHOT);
player.sendPacket(Msg.POWER_OF_THE_SPIRITS_ENABLED);
player.broadcastPacket(new MagicSkillUse(player, player, 0, _skillIds[grade], 1, 0, 0, -1));
return true;
}
@Override
public final int[] getItemIds() {
return _itemIds;
}
}
за ранее спасибо
Сообщений: 5,670
Тем: 145
Зарегистрирован: Nov 2008
Репутация:
33,771
SpiritShots.java, BlessedSpiritShots.java и SoulShots.java
Сообщений: 25
Тем: 5
Зарегистрирован: Nov 2010
Репутация:
83
08-17-2012, 11:02 AM
(Сообщение последний раз редактировалось: 08-17-2012, 05:52 PM SkyMD.)
[STIGMATED];217557 Написал:SpiritShots.java, BlessedSpiritShots.java и SoulShots.java
Добавил BlessedSpiritShots.
Они практически эдентичные
Добавлено через 6 часов 50 минут
Ребят какие мысли есть? - Может дело в скилах?
Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
скиллы копать, как вариант магические скиллы обявлены как физические
Сообщений: 25
Тем: 5
Зарегистрирован: Nov 2010
Репутация:
83
08-17-2012, 09:13 PM
(Сообщение последний раз редактировалось: 08-17-2012, 09:14 PM SkyMD.)
[STIGMATED];217557 Написал:SpiritShots.java, BlessedSpiritShots.java и SoulShots.java
Добавил в конфиг переменную булевую
и сделал проверку результата не дало
PHP код: <?php
if (Config.ADD_REDUCE_SHOT){
if(!player.getInventory().destroyItem(item,blessedsoulSpiritConsumption))
{
if(isAutoSoulShot)
{
player.removeAutoSoulShot(SoulshotId);
player.sendPacket(new ExAutoSoulShot(SoulshotId, false), new SystemMessage(SystemMessage.THE_AUTOMATIC_USE_OF_S1_WILL_NOW_BE_CANCELLED).addItemName(spiritshotId));
return false;
}
player.sendPacket(Msg.NOT_ENOUGH_SPIRITSHOTS);
return false;
}
}
Добавлено через 41 секунду
Gaikotsu Написал:скиллы копать, как вариант магические скиллы обявлены как физические
Подскажи в каком месте плз
Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
копай где у тебя данные о скиллах объявлены, в бд или хмлках - уж не знаю где именно у тебя в сборке.
параметр там должен быть на эту тему, что-то типа isMagic, is_magic и т.п.
Сообщений: 25
Тем: 5
Зарегистрирован: Nov 2010
Репутация:
83
Gaikotsu Написал:копай где у тебя данные о скиллах объявлены, в бд или хмлках - уж не знаю где именно у тебя в сборке.
параметр там должен быть на эту тему, что-то типа isMagic, is_magic и т.п.
Хранится в хмл!
Вы оказались правы я тоже начал грешить на скилы
в итоге к не юзающей магии нужно было добавить тег (он там отсутствовал)
PHP код: <?php
<set name="magicType" val="MAGIC"/>
Спасибками про ставился.
Задача решена.
Спасибо огромное
|