Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
11-25-2012, 03:35 PM
(Сообщение последний раз редактировалось: 11-25-2012, 03:36 PM DiagoD.)
Visor Написал:У вас проблема в гейме с памятью и нагрузкой на процессор отнють не от таких маленьких тасков.
Там маленький таск, тут маленький таск, и сюда можно его, он же маленький, а потом еще вот тут и там и если нужно будет то чуть-чуть маленького и сюда...
А потом в общей сумме из этих маленьких вырастает ОГРОМНАЯ куча дерьма, да без условно при 500 рыл онлайна оно не заметно вообще и не страшно, но когда у вас будет живой онлайн хотя бы 1800-2000 то я хотел бы посмотреть как сборка будет кушать 2-3г часов за 20 хотя бы)
Если есть более легкая(в плане кушанья ресурсов при работе) альтернатива реализации того или иного механизма, то нужно использовать ее не зависимо от того как красиво и фраерно выглядит ваш код.
Выше сказанное относится к общей политике реализации механизмов.
В случае с ТСом, таски не будут помехой.
Добавлено через 1 минуту
finfan Написал:Прошу вас господа, только не в этой теме, я создавал её для вопросов-ответов, хватит бессмысленных холи варов... хотябы не здесь. :ep:
Это же ЗГ, от этого здесь не спрячешься
P.S. Я уже дома)))
open-team.ru - Freya, HighFive...
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
DiagoD Написал:Там маленький таск, тут маленький таск, и сюда можно его, он же маленький, а потом еще вот тут и там и если нужно будет то чуть-чуть маленького и сюда...
А потом в общей сумме из этих маленьких вырастает ОГРОМНАЯ куча дерьма, да без условно при 500 рыл онлайна оно не заметно вообще и не страшно, но когда у вас будет живой онлайн хотя бы 1800-2000 то я хотел бы посмотреть как сборка будет кушать 2-3г часов за 20 хотя бы)
Если есть более легкая(в плане кушанья ресурсов при работе) альтернатива реализации того или иного механизма, то нужно использовать ее не зависимо от того как красиво и фраерно выглядит ваш код. Куда нам всем до Визора :mol::mol::mol:
DiagoD Написал:В случае с ТСом, таски не будут помехой я всё таки считаю, что в предложенном им варианте, отдельный таск который создаётся каждые 500ms вовсе не обязателен и ту же проверку можно делать в методе onActionTime(). Это конечно самый просто для ТС'а вариант.
Сообщений: 1,485
Тем: 12
Зарегистрирован: Mar 2010
Репутация:
2,994
11-25-2012, 03:46 PM
(Сообщение последний раз редактировалось: 11-25-2012, 03:54 PM Visor.)
bloodshed Написал:Хоть бы один аргумент написали, а то просто пустой трёп. Если не согласны с точкой зрения, умейте аргументировать свою.
Вы я смотрю хорошо осведомлены о каких то "проблемах", без доказательств это клевета, что правилами запрещено. Я единственный, кто в теме предложил варианты и написал пример, так что язычок можно и спрятать, а не лезть тут рассказывать всякий чес про то как напряжется GC от мелкого таска.
Я осведомлен, потому что код фени/овера знаю, и соответственно вытекающие проблемы, и есть вероятность 95-99% что так оно и осталось у вас. А когда шанс настолько высок, можно говорить что это вероятнее всего имеет место быть. О чем я и написал.
Поэтому тут не нужно никаких доказательств в принципе, можете не выкручиваться.
То что я не предложил вам варианты решения ваших проблем, это не значить что их нет.
Добавлено через 4 минуты
bloodshed Написал:Куда нам всем до Визора :mol::mol::mol:
я всё таки считаю, что в предложенном им варианте, отдельный таск который создаётся каждые 500ms вовсе не обязателен и ту же проверку можно делать в методе onActionTime(). Это конечно самый просто для ТС'а вариант. Я предложил еще более правильный вариант - это в событиях проверять и снимать эффект, с позиции модели протекания событий на чаре наиболее правильно. Но насчет onActionTime() я как раз первый написал решение - намекнув что действует 1 раз и соответственно если поставить больше, то и проверять будет больше. Поэтому ваше высказывание выглядит следующим образом
"я считаю, что что предложенный им вариант отдельный таск не обязателен, а можно взять другой предложенный им вариант onActionTime()"
ТС же может выбрать любой вариант, какой ему будет понятнее, проще или на его взгляд лучше.
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
Visor Написал:Я единственный, кто в теме предложил варианты и написал пример, так что язычок можно и спрятать, а не лезть тут рассказывать всякий чес про то как напряждется GC от мелкого таска.
Я осведомлен, потому что код фени/овера знаю, и соответственно вытекающие проблемы, и есть вероятность 95-99% что так оно и осталось у вас. А когда шанс настолько высок, можно говорить что это вероятнее всего имеет место быть. О чем я и написал.
Поэтому тут не нужно никаких доказательств в принципе, может не выкручиваться.
Добавлено через 4 минуты
Я предложил еще более правильный вариант - это в событиях проверять и снимать эффект, с позиции модели протекания событий на чаре наиболее правильно. Но насчет onActionTime() я как раз первый написал решение - намекнув что действует 1 раз и соответственно если поставить больше. Поэтому ваше высказывание выглядит следующим образом
"я считаю, что что предложенный им вариант отдельный таск не обязателен, а можно взять другой предложенный им вариант onActionTime()"
ТС же может выбрать любой вариант, какой ему будет понятнее, проще или на его взгляд лучше. Вы вообще с головой дружите?
1 - Моя сборка основана не на фениксах и не на оверах.
2 - Вероятность видимо подсчитывается с учётом вашего самомнения и с убеждением о том, что все остальные хуже вас)
3 - Выкручиваетесь вы, так как опять не можете ответить за свои слова. Сначала утверждаете что-то, а потом ссылаетесь на какие-то свои догадки и предположения.
Сообщений: 1,058
Тем: 129
Зарегистрирован: May 2009
Репутация:
11,626
Итак, следующий вопрос.
Кто видел или играл в BSFG наверняка помнит способность "Украсть", персонаж воровал у мертвого персонажа %адены находящийся в инвентаре жертвы.
Первым в мою голову почему-то полезла способность sweep (SPoiler) как аналог, возможно ли что-то сварганить из нее?
Я думаю сделать хэндлер, похожий на хэндлер sweep. Правильно ли я рассуждаю?
Сообщений: 856
Тем: 9
Зарегистрирован: Jul 2011
Репутация:
2,852
Может быть трейд с заданными заранее параметрами?
Сообщений: 5,863
Тем: 105
Зарегистрирован: Sep 2010
Репутация:
13,014
Проверка мертв ли персонаж (аналог свипа только для мобов). При проверке - отнятие % бабла и какой-то флаг, чтобы нельзя было еще раз забрать деньги.
Сообщений: 1,058
Тем: 129
Зарегистрирован: May 2009
Репутация:
11,626
11-26-2012, 06:57 PM
(Сообщение последний раз редактировалось: 11-27-2012, 02:11 PM finfan.)
К воровским утехам я ещё вернусь, спасибо откликнувшимся.
Теперь интересует другой вопрос:
Эффект Signet грубо говоря не работает, появляется купол и все как положенно, но почему-то сама способность (на которую операется сей эффект) не накладывается на цели, которые входят в радиус действия купола.
Уже и переписывал сам эффект, толку 0, я немогу понять почему он не накладывает сеё дерьмо...
Где я ошибся...
код
Код: package net.sf.l2j.gameserver.skills.effects;
import javolution.util.FastList;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Effect;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.instance.L2EffectPointInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.skills.Env;
import net.sf.l2j.gameserver.skills.l2skills.L2SkillSignet;
import net.sf.l2j.gameserver.skills.l2skills.L2SkillSignetCasttime;
import net.sf.l2j.gameserver.templates.skills.L2EffectType;
public class EffectSignet extends L2Effect
{
private L2Skill _skill;
private L2EffectPointInstance _actor;
public EffectSignet(Env env, EffectTemplate template)
{
super(env, template);
}
/**
*
* @see com.l2dc.gameserver.model.L2Effect#getEffectType()
*/
@Override
public L2EffectType getEffectType()
{
return L2EffectType.SIGNET_EFFECT;
}
/**
*
* @see com.l2dc.gameserver.model.L2Effect#onStart()
*/
@Override
public boolean onStart()
{
if (getSkill() instanceof L2SkillSignet)
_skill = SkillTable.getInstance().getInfo(((L2SkillSignet) getSkill()).effectId, getLevel());
else if (getSkill() instanceof L2SkillSignetCasttime)
_skill = SkillTable.getInstance().getInfo(((L2SkillSignetCasttime) getSkill()).effectId, getLevel());
_actor = (L2EffectPointInstance) getEffected();
return true;
}
/**
*
* @see com.l2dc.gameserver.model.L2Effect#onActionTime()
*/
@Override
public boolean onActionTime()
{
if (_skill == null)
return true;
int mpConsume = _skill.getMpConsume();
if (mpConsume > getEffector().getCurrentMp())
{
getEffector().sendPacket(new SystemMessage(SystemMessageId.SKILL_REMOVED_DUE_LACK_MP));
return false;
}
else
getEffector().reduceCurrentMp(mpConsume);
for (L2Character cha : _actor.getKnownList().getKnownCharactersInRadius(getSkill().getSkillRadius()))
{
if (cha == null)
continue;
boolean isAffected = true;
if (cha instanceof L2PcInstance)
{
L2PcInstance player = (L2PcInstance) getEffector();
L2PcInstance target = (L2PcInstance) cha;
if (target.getPvpFlag() > 0)
{
if (player.getParty() != null)
{
if (!player.getParty().getPartyMembers().contains(target))
isAffected = false;
else if (player.getParty().getCommandChannel() != null)
{
if (!player.getParty().getCommandChannel().getMembers().contains(target))
isAffected = false;
}
}
if (player.getClan() != null && !player.isInsideZone(L2Character.ZONE_PVP))
{
if (!player.getClan().isMember(target.getObjectId()))
isAffected = false;
if (player.getAllyId() > 0 && target.getAllyId() > 0)
{
if (player.getAllyId() != target.getAllyId())
isAffected = false;
}
}
if (target.getParty() == null)
isAffected = false;
}
if (target.getPvpFlag() == 0)
{
if (player.getClan() != null && target.getClan() != null)
{
if (player.getClan().isAtWarWith(target.getClanId()))
isAffected = false;
}
}
}
if (cha instanceof L2Summon)
{
L2PcInstance player = (L2PcInstance) getEffector();
L2PcInstance owner = ((L2Summon) cha).getOwner();
if (owner.getPvpFlag() > 0)
{
if (player.getParty() != null)
{
if (!player.getParty().getPartyMembers().contains(owner))
isAffected = false;
else if (player.getParty().getCommandChannel() != null)
{
if (!player.getParty().getCommandChannel().getMembers().contains(owner))
isAffected = false;
}
}
if (player.getClan() != null && !player.isInsideZone(L2Character.ZONE_PVP))
{
if (!player.getClan().isMember(owner.getObjectId()))
isAffected = false;
if (player.getAllyId() > 0 && owner.getAllyId() > 0)
{
if (player.getAllyId() != owner.getAllyId())
isAffected = false;
}
}
if (owner.getParty() == null)
isAffected = false;
}
if (owner.getPvpFlag() == 0)
{
if (player.getClan() != null && owner.getClan() != null)
{
if (player.getClan().isAtWarWith(owner.getClanId()))
isAffected = false;
}
}
}
if (cha instanceof L2Npc)
isAffected = true;
if (isAffected)
{
_skill.getEffects(_actor, cha);
// there doesn't seem to be a visible effect with MagicSkillLaunched packet...
_actor.broadcastPacket(new MagicSkillUse(_actor, cha, _skill.getId(), _skill.getLevel(), 0, 0));
}
}
return true;
}
/**
*
* @see com.l2dc.gameserver.model.L2Effect#onExit()
*/
@Override
public void onExit()
{
if (_actor != null)
_actor.deleteMe();
}
}
Добавлено через 19 часов 13 минут
:ep:
Сообщений: 1,058
Тем: 129
Зарегистрирован: May 2009
Репутация:
11,626
До сих пор маюсь с эффектом Signet T_T кто-нибудь... хоть кто-нибудь... :ep:
Сообщений: 53
Тем: 7
Зарегистрирован: Nov 2012
Репутация:
104
finfan Написал:До сих пор маюсь с эффектом Signet T_T кто-нибудь... хоть кто-нибудь... :ep:
На сколько я понимаю - это только эффект скилла с типом сигнет, копай сам тип:
http://svn.l2jserver.com/branches/L2_Gam...ignet.java
Сам эффект можешь вытащить с L2RT, там рабочий сигнет за исключением одной детали - идет поражение радиуса всех, даже союзников.
P.S. Я далеко не уверен в выше написанном, но думаю "раскопку" стоит начать именно от сюда. Здесь происходит расчет координат и спавн купола, как я понял.
|