Сообщений: 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,484 
	Тем: 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. Правильно ли я рассуждаю?
	 
	
	
	
	
 
 
	
	
	
		
	Сообщений: 855 
	Тем: 9 
	Зарегистрирован: Jul 2011
	
 Репутация: 
 2,852
	 
 
	
	
		Может быть трейд с заданными заранее параметрами?
	 
	
	
	
	
 
 
	
	
	
		
	Сообщений: 5,862 
	Тем: 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. Я далеко не уверен в выше написанном, но думаю "раскопку" стоит начать именно от сюда. Здесь происходит расчет координат и спавн купола, как я понял.
	  
	
	
	
	
 
 
	 
 |