Jump to content

Recommended Posts

Posted (edited)

well all u know the special effects that gm's have.

the effect to dance when u are stunning and the effect of stun with a fire in the ground

so i was thinking about some new skills on bd and i remembered that effect of the stunning dance so i thought that it will be cool a skill like dat ;D

anyway lets start ;D

 

create in gameserver/skills/effects this

/*
 * 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 com.l2jfrozen.gameserver.skills.effects;

import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2Effect;
import com.l2jfrozen.gameserver.skills.Env;

final class EffectStunDance extends L2Effect
{

	public EffectStunDance(Env env, EffectTemplate template)
	{
		super(env, template);
	}

	@Override
	public EffectType getEffectType()
	{
		return EffectType.STUNDANCE;
	}

	@Override
	public void onStart()
	{
		getEffected().stopMove(null);
		getEffected().startAbnormalEffect(L2Character.ABNORMAL_EFFECT_DANCE_STUNNED);
		getEffected().setIsParalyzed(true);
	}

	@Override
	public void onExit()
	{
		getEffected().stopAbnormalEffect(L2Character.ABNORMAL_EFFECT_DANCE_STUNNED);
		getEffected().setIsParalyzed(false);
	}

	@Override
	public boolean onActionTime()
	{
		return false;
	}
}

and this 

/*
 * 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 com.l2jfrozen.gameserver.skills.effects;

import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2Effect;
import com.l2jfrozen.gameserver.skills.Env;

final class EffectStunFireRoot extends L2Effect
{

	public EffectStunFireRoot(Env env, EffectTemplate template)
	{
		super(env, template);
	}

	@Override
	public EffectType getEffectType()
	{
		return EffectType.FIREROOT;
	}

	@Override
	public void onStart()
	{
		getEffected().stopMove(null);
		getEffected().startAbnormalEffect(L2Character.ABNORMAL_EFFECT_FIREROOT_STUN);
		getEffected().setIsParalyzed(true);
	}

	@Override
	public void onExit()
	{
		getEffected().stopAbnormalEffect(L2Character.ABNORMAL_EFFECT_FIREROOT_STUN);
		getEffected().setIsParalyzed(false);
	}

	@Override
	public boolean onActionTime()
	{
		return false;
	}
}

now in model/L2Effect.java

find this

NEGATE,

and below add these

		STUNDANCE,
		FIREROOT, 

now in model/L2Character.java

find this

public static final int ABNORMAL_EFFECT_GROW = 0x010000;

and add below these

 

/** The Constant ABNORMAL_EFFECT_DANCE_STUNNED. */
public static final int ABNORMAL_EFFECT_DANCE_STUNNED = 0x040000;


/** The Constant ABNORMAL_EFFECT_FIREROOT_STUN. */
public static final int ABNORMAL_EFFECT_FIREROOT_STUN = 0x080000;

and last in gameserver/skills/DocumentBase.java

find this

			else if(abn.equals("stealth"))
			{
				abnormal = L2Character.ABNORMAL_EFFECT_STEALTH;
			}

and below add these

			else if(abn.equals("dance"))
			{
				abnormal = L2Character.ABNORMAL_EFFECT_DANCE_STUNNED;
			}
			else if(abn.equals("fireroot"))
			{
				abnormal = L2Character.ABNORMAL_EFFECT_FIREROOT_STUN;
			}

now u can add new skills with these effects ;D

example:

 

<skill id="367" levels="1" name="Dance of Medusa">
<set name="magicLvl" val="77"/>
<set name="mpConsume" val="53"/>
<set name="weaponsAllowed" val="512"/>
<set name="power" val="80"/>
<set name="saveVs" val="MEN"/>
<set name="skillRadius" val="150"/>
<set name="target" val="TARGET_AURA"/>
<set name="skillType" val="PARALYZE"/>
<set name="operateType" val="OP_ACTIVE"/>
<set name="hitTime" val="2000"/>
<set name="reuseDelay" val="120000"/>
<set name="isDebuff" val="true"/>
<set name="element" val="4"/>
<!-- Earth -->
<set name="lvlDepend" val="1"/>
<for>
<!-- <effect count="1" name="Petrification" time="30" val="0"/> -->
<!-- The player that will "eat" the debuff will get stunned and start dancing for 30sec. the dancing effect doesnt work in monster -->
<effect count="1" name="StunDance" time="30" val="0"/>
</for>
</skill>
<skill id="402" levels="10" name="Arrest" enchantLevels1="30" enchantLevels2="30">
  <table name="#enchantMagicLvl">76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85</table>
  <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
  <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
  <table name="#power">80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100</table>
  <table name="#chance">80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100</table>
  <table name="#mpConsume">25 27 28 29 30 31 32 33 34 34</table>
  <set name="mpConsume" val="#mpConsume"/>
  <set name="power" val="125"/>
  <set name="saveVs" val="MEN"/>
  <set name="lvlDepend" val="2"/>
  <set name="target" val="TARGET_ONE"/>
  <set name="reuseDelay" val="16000"/>
  <set name="hitTime" val="2000"/>
  <set name="skillType" val="ROOT"/>
  <set name="operateType" val="OP_ACTIVE"/>
  <set name="castRange" val="150"/>
  <set name="effectRange" val="650"/>
  <set name="isDebuff" val="true" />
  <enchant1 name="power" val="#power"/>
  <enchant2 name="power" val="#chance"/>
  <for>
  <!--  <effect count="1" name="Root" time="7" val="0" stackOrder="1" stackType="Root"/> -->
<!-- The player that will "eat" the debuff will get stunned and shows a fire arrest him for 7sec. the fire effect doesnt work in monster -->
         <effect count="1" name="StunFireRoot" time="7" val="0" stackOrder="1" stackType="Root"/>
  </for>
</skill>

thats for the effects ;p

 

now the conditions.

the conditions are taken from client gracia++ i dont even know ;D

it works like the restorations skills of kamael.

u need to have a effect on u so u can use another skill

 

gameserver/skills/conditions.java

create new files

/*
 * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 */
package com.l2jfrozen.gameserver.skills.conditions;

import com.l2jfrozen.gameserver.model.L2Effect;
import com.l2jfrozen.gameserver.skills.Env;

public class ConditionTargetActiveEffectId extends Condition
{
    
    private final int _effectId;
    
    public ConditionTargetActiveEffectId(int effectId)
    {
        _effectId = effectId;
    }
    
    @Override
    public boolean testImpl(Env env)
    {
        for (L2Effect e : env.target.getAllEffects())
        {
            if (e != null)
            {
                if (e.getSkill().getId() == _effectId)
                    return true;
            }
        }
        return false;
    }
}

/*
 * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
 */
package com.l2jfrozen.gameserver.skills.conditions;

import com.l2jfrozen.gameserver.model.L2Skill;
import com.l2jfrozen.gameserver.skills.Env;

public class ConditionTargetActiveSkillId extends Condition
{
    
    private final int _skillId;
    
    public ConditionTargetActiveSkillId(int skillId)
    {
        _skillId = skillId;
    }
    
    @Override
    public boolean testImpl(Env env)
    {
        for (L2Skill sk : env.target.getAllSkills())
        {
            if (sk != null)
            {
                if (sk.getId() == _skillId)
                    return true;
            }
        }
        return false;
    }
}

/*
 * 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 com.l2jfrozen.gameserver.skills.conditions;

import com.l2jfrozen.gameserver.skills.Env;

/**
 * @author mkizub
 */
public class ConditionTargetSkill extends Condition
{

	private final int _skill;

	public ConditionTargetSkill(int skillId)
	{
		_skill = skillId;
	}

	@Override
	public boolean testImpl(Env env)
	{
		if(env.target == null)
			return false;
		return env.target.getAbnormalEffect() == _skill;
	}
}

thats it now in gameserver/skills/DocumentBase.java

find this

import com.l2jfrozen.gameserver.skills.conditions.ConditionPlayerState;

and add these below

import com.l2jfrozen.gameserver.skills.conditions.ConditionTargetActiveEffectId;
import com.l2jfrozen.gameserver.skills.conditions.ConditionTargetActiveSkillId;

now find this

			else if("class_id_restriction".equalsIgnoreCase(a.getNodeName()))
			{
				FastList<Integer> array = new FastList<Integer>();
				StringTokenizer st = new StringTokenizer(a.getNodeValue(), ",");
				while(st.hasMoreTokens())
				{
					String item = st.nextToken().trim();
					array.add(Integer.decode(getValue(item, null)));
				}
				cond = joinAnd(cond, new ConditionTargetClassIdRestriction(array));
			}

and below add these

            else if ("active_effect_id".equalsIgnoreCase(a.getNodeName()))
            {
                int effect_id = Integer.decode(getValue(a.getNodeValue(), template));
            	cond = joinAnd(cond, new ConditionTargetActiveEffectId(effect_id));
            }
            else if ("active_skill_id".equalsIgnoreCase(a.getNodeName()))
            {
                int skill_id = Integer.decode(getValue(a.getNodeValue(), template));
                cond = joinAnd(cond, new ConditionTargetActiveSkillId(skill_id));
            }

thats it ;D finished.

example

 

create this (its spoil skill transformed into restoration)

	<skill id="254" levels="8" name="Restoration">
		<table name="#mpConsume_Init"> 21 25 14 16 17 19 20 20 </table>
		<table name="#mpConsume"> 49 57 34 38 41 43 45 48 </table>
		<table name="#hot"> 45 54 66 75 81 87 90 96 </table>
		<table name="#ench1Heal"> 96 99 99 102 105 108 111 114 114 117 120 123 126 126 129 132 135 138 141 141 144 147 150 153 153 156 159 162 165 168 </table>
		<table name="#ench2Count"> 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 40 41 42 43 44 45 </table>
		<table name="#ench2mpInitialConsume"> 13 13 13 12 12 12 12 12 11 11 11 11 10 10 10 10 9 9 9 9 9 8 8 8 8 7 7 7 7 7 </table>
		<table name="#ench2mpConsume"> 53 52 50 50 49 48 48 46 46 45 44 42 42 41 40 38 38 38 37 36 34 34 33 32 30 30 29 29 28 26 </table>
		<set name="mpInitialConsume" val="#mpConsume_Init" />
		<set name="mpConsume" val="#mpConsume" />
		<set name="hitTime" val="2500" />
		<set name="operateType" val="OP_ACTIVE" />
		<set name="isMagic" val="true" />
		<set name="target" val="TARGET_ONE" />
		<set name="skillType" val="HOT" />
		<set name="castRange" val="600" />
		<set name="effectRange" val="1100" />
		<set name="reuseDelay" val="3000" />
		<enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume" />
		<enchant2 name="mpConsume" val="#ench2mpConsume" />
		<for>
			<effect count="5" name="HealOverTime" time="3" val="#hot" stackOrder="1" stackType="touch_of_life">
			</effect>
		</for>
	</skill>
	<skill id="302" levels="3" name="Restoration Impact" enchantGroup1="1">
		<table name="#mpConsume_Init"> 7 8 10 </table>
		<table name="#mpConsume"> 16 20 23 </table>
		<table name="#power"> 10 15 20 </table>
		<table name="#ench1Power"> 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 </table>
		<set name="aggroPoints" val="#power" />
		<set name="mpInitialConsume" val="#mpConsume_Init" />
		<set name="mpConsume" val="#mpConsume" />
		<set name="power" val="#power" />
		<set name="hitTime" val="1000" />
		<set name="operateType" val="OP_ACTIVE" />
		<set name="isMagic" val="true" />
		<set name="target" val="TARGET_ONE" />
		<set name="skillType" val="HEAL_PERCENT" />
		<set name="castRange" val="600" />
		<set name="effectRange" val="1100" />
		<set name="reuseDelay" val="15000" />
		<set name="negateId" val="254" />
		<enchant1 name="power" val="#ench1Power" />
		<cond msg="You must use Restoration first">
			<target active_effect_id="254" />
		</cond>
		<for>
			<effect name="Negate" val="0" noicon="1" effectType="NEGATE" />
		</for>
	</skill>

so in order to use Restoration Impact u need the effect of "<target active_effect_id="254" />" 254 = Restoration

and u're done ;D u will be able to use Restoration Impact only if u have the effect of Restoration on you :)

Edited by te0x

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...