darknessneo
Members-
Posts
137 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Articles
Profiles
Forums
Store
Everything posted by darknessneo
-
its can be nice in my server, i try it sunday on my epilogue server and edit my post for say if he works.
-
[Share] Wolverine's Claw (*T2*3/EP/FREYA) !
darknessneo replied to Chandy's topic in Client Development Discussion
nice share, im going to adapt them for epilogue ^^ -
[share]Custom Tattoo like DN - Epilogue
darknessneo replied to darknessneo's topic in Client Development Discussion
As far as I know, stats are equivalent to DN. Same bonus, same penalty, same lvl. But anyway, just change the stats in the file to customize the skill tattoos. hm, i dont have client 2.3, but if you give me all files needed to edit for this, i can try (without check of course). -
server Shirya : rates exp 15, sp 17, drop 1, spoil 15, quest 15 The website Features : # All monsters to level 40 may drop "Class Coin". This special currency to buy items quest for change of occupation lvl 20 and lvl 40. This money can only be destroyed. The drop rate for this item is 5%. # A laboratory situated in Ivory Tower can create potions and scrolls Summoning. If certain potions are sold in conventional stores, others are more advanced. The creation of these potions is available for class healer. The creation of Summoning scrolls are available for summoner class. The ingredients for the manufacture of these various items that drop on some monsters. # A system of Tattoo will increase certain stats of your character. These tattoos have different bonuses and penalties depending on the type chosen and their power. You can buy two different kinds of tattoos that will place respectively at the location belt or underwear. # Some Raid Boss drop letters. These items can then be exchanged at the NPC Event cons of different items such scrolls to buff a period of one hour or more pieces of armor or weapons. # A love boss is present somewhere in the world Shirya. This allows for pieces of heart that will be exchanged against a special recipe. You can also find monsters that drop items needed for the recipe. You have to find all these monsters. # The events to be organized by the GM relate to players of Event Coin. This is the only currency accepted at the NPC Event. # Baium custom drop ! # A bakery located in Giran offers different items style 'baguette'. To purchase these items you will need "ECU". This currency can be obtained by exchanging materials from the merchant located next to the baker. # An NPC for weddings in front of the church of Giran. This marriage can teleport directly to that partner. # It is possible to subclass stackable with your main class or retail class. To do this you need a quest item that is on the raid boss Golkonda. This subclass can not be exchanged or deleted. # Each class at lvl 10 can learn a skill that increase the weight limit. Beta closed started, all player is welcome.
-
[Share]L2 Updaters + Guide by darknessneo
darknessneo replied to CriticalError's topic in Client Development Discussion
just perfect, i needed to learn how he works, but now, works like a charm ^^ very thx for this nice share! -
stack a tattoo with a shirt
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
well, finaly i leave my tattoo as they works now. If ppl wan tattoo, they need to make a choose with other stuff. Its better like stack stuff. -
Hi all, here is my prob : A maked a love boss. For this boss, i wanted a custom title color. But the color its all the time the same with all custom mobs i created. The title is only green... In the npcname file i used the same color like raid boss : 40011 a,Love Queen\0 a,Love Boss\0 3F 8B FE -1 40012 a,Love King\0 a,Love Boss\0 3F 8B FE -1 But the color title of my boss don't change...
-
UPDATED - 26 06 2010 Hi all, i dlled a lot of files here. So here is my contribution. This my works, and my first addon on my server. Its maybe not perfect, but im open for all comments. I know, we have a lot of custom tattoo here, but not like DN server. (or i dont found him :-[ ) They use 2 slots : One for the belt, and the other for the underwear. You can conbinate a tattoo for cast in belt with a tattoo for P.atk in the underwear. How they works ? Ok, somes screens : And here somes tattoos of my shop : For Epilogue : Tattoo like DN server New : All multisell shops for a system of upgrading tattoos (using soul crystal and tattoos with 1 lvl down) Credit... myself
-
[Reshare][CT2.4] Castle Cloaks!
darknessneo replied to LauQ's topic in Client Development Discussion
thx for this share, they look very nice and restriction are a good idea. -
[Share]Freya jewels for Epilogue
darknessneo replied to Legend™'s topic in Client Development Discussion
nice share, thx ^^ -
[Share] Freya mobs adapted for Epilogue
darknessneo replied to Legend™'s topic in Client Development Discussion
thx for this share, but i have a bug with somes mobs : only bigs mobs, i dont see them. When i aggro them they come of the ground... -
[share]Wings for Epilogue [CT 2.4]
darknessneo replied to darren's topic in Client Development Discussion
perfrct with epilogue, thx for this share ^^ I think, im going to make them with a duration for event =) EDIT : just needed to edit the sql requet like this : INSERT INTO `armor` VALUES ('40013', 'Valakas Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40014', 'Angel Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40015', 'Fallen Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40016', 'Gargoyle Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40017', 'Chaos Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40018', 'Eva Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40019', 'Netherworld Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40020', 'Succubus Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40021', 'Pixie Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40022', 'Kamael Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); INSERT INTO `armor` VALUES ('40023', 'War Wings', '', 'face', 'false', 'none', '10', 'wood', 'none', '0', '-1', '-1', '0', '0', '0', '500000', '0', 'false', 'false', 'true', 'false', 'true', '0-0', '0-0;'); -
woot ! very nice update, specialy for auto reboot char ^^ realy nice works. I wan to know the command for check the classid of the char, cuz, i wan to give acces to the class blade dancer for swordsinger, and swordsinger for make bladedancer. So i wan add a condition for them. And, for the last one : nice share, a love it !
-
Bug when i start the gameserver
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
Here is my code of this file. Anyone can help me for find the problem ? /* * 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.l2jserver.gameserver.model.actor.instance; import static com.l2jserver.gameserver.ai.CtrlIntention.AI_INTENTION_IDLE; import java.util.concurrent.Future; import com.l2jserver.gameserver.ThreadPoolManager; import com.l2jserver.gameserver.ai.CtrlIntention; import com.l2jserver.gameserver.datatables.SkillTable; import com.l2jserver.gameserver.model.L2ItemInstance; import com.l2jserver.gameserver.model.L2Object; import com.l2jserver.gameserver.model.L2Skill; import com.l2jserver.gameserver.model.actor.L2Character; import com.l2jserver.gameserver.network.serverpackets.AbstractNpcInfo; import com.l2jserver.gameserver.network.serverpackets.StopMove; import com.l2jserver.gameserver.templates.chars.L2NpcTemplate; import com.l2jserver.gameserver.templates.skills.L2SkillType; import com.l2jserver.util.Point3D; import com.l2jserver.util.Rnd; import javolution.util.FastMap; // While a tamed beast behaves a lot like a pet (ingame) and does have // an owner, in all other aspects, it acts like a mob. // In addition, it can be fed in order to increase its duration. // This class handles the running tasks, AI, and feed of the mob. // The (mostly optional) AI on feeding the spawn is handled by the datapack ai script public final class L2TamedBeastInstance extends L2FeedableBeastInstance { private int _foodSkillId; private static final int MAX_DISTANCE_FROM_HOME = 30000; private static final int MAX_DISTANCE_FROM_OWNER = 2000; private static final int MAX_DURATION = 1200000; // 20 minutes private static final int DURATION_CHECK_INTERVAL = 60000; // 1 minute private static final int DURATION_INCREASE_INTERVAL = 20000; // 20 secs (gained upon feeding) private static final int BUFF_INTERVAL = 5000; // 5 seconds private int _remainingTime = MAX_DURATION; private int _homeX, _homeY, _homeZ; private L2PcInstance _owner; private Future<?> _buffTask = null; private Future<?> _durationCheckTask = null; public L2TamedBeastInstance(int objectId, L2NpcTemplate template) { super(objectId, template); setInstanceType(InstanceType.L2TamedBeastInstance); setHome(this); } public L2TamedBeastInstance(int objectId, L2NpcTemplate template, L2PcInstance owner, int foodSkillId, int x, int y, int z) { super(objectId, template); setInstanceType(InstanceType.L2TamedBeastInstance); setCurrentHp(getMaxHp()); setCurrentMp(getMaxMp()); setOwner(owner); setFoodType(foodSkillId); setHome(x,y,z); this.spawnMe(x, y, z); } public void onReceiveFood() { // Eating food extends the duration by 20secs, to a max of 20minutes _remainingTime = _remainingTime + DURATION_INCREASE_INTERVAL; if (_remainingTime > MAX_DURATION) _remainingTime = MAX_DURATION; } public Point3D getHome() { return new Point3D(_homeX, _homeY, _homeZ); } public void setHome(int x, int y, int z) { _homeX = x; _homeY = y; _homeZ = z; } public void setHome(L2Character c) { setHome(c.getX(), c.getY(), c.getZ()); } public int getRemainingTime() { return _remainingTime; } public void setRemainingTime(int duration) { _remainingTime = duration; } public int getFoodType() { return _foodSkillId; } public void setFoodType(int foodItemId) { if (foodItemId > 0) { _foodSkillId = foodItemId; // start the duration checks // start the buff tasks if (_durationCheckTask != null) _durationCheckTask.cancel(true); _durationCheckTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckDuration(this), DURATION_CHECK_INTERVAL, DURATION_CHECK_INTERVAL); } } @Override public boolean doDie(L2Character killer) { if (!super.doDie(killer)) return false; getAI().stopFollow(); if (_buffTask != null) _buffTask.cancel(true); if (_durationCheckTask != null) _durationCheckTask.cancel(true); // clean up variables if (_owner != null) _owner.setTrainedBeast(null); _buffTask = null; _durationCheckTask = null; _owner = null; _foodSkillId = 0; _remainingTime = 0; return true; } public L2PcInstance getOwner() { return _owner; } public void setOwner(L2PcInstance owner) { if (owner != null) { _owner = owner; setTitle(owner.getName()); // broadcast the new title broadcastPacket( new AbstractNpcInfo.NpcInfo(this, owner) ); owner.setTrainedBeast(this); // always and automatically follow the owner. getAI().startFollow(_owner,100); // instead of calculating this value each time, let's get this now and pass it on int totalBuffsAvailable = 0; for (L2Skill skill: getTemplate().getSkills().values()) { // if the skill is a buff, check if the owner has it already [ owner.getEffect(L2Skill skill) ] if (skill.getSkillType() == L2SkillType.BUFF) totalBuffsAvailable++; } // start the buff tasks if (_buffTask !=null) _buffTask.cancel(true); _buffTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new CheckOwnerBuffs(this, totalBuffsAvailable), BUFF_INTERVAL, BUFF_INTERVAL); } else { deleteMe(); // despawn if no owner } } public boolean isTooFarFromHome() { return !(this.isInsideRadius(_homeX, _homeY, _homeZ, MAX_DISTANCE_FROM_HOME, true, true)); } @Override public void deleteMe() { // stop running tasks getAI().stopFollow(); _buffTask.cancel(true); _durationCheckTask.cancel(true); stopHpMpRegeneration(); // clean up variables if (_owner != null) _owner.setTrainedBeast(null); setTarget(null); _buffTask = null; _durationCheckTask = null; _owner = null; _foodSkillId = 0; _remainingTime = 0; // remove the spawn super.deleteMe(); } // notification triggered by the owner when the owner is attacked. // tamed mobs will heal/recharge or debuff the enemy according to their skills public void onOwnerGotAttacked(L2Character attacker) { // check if the owner is no longer around...if so, despawn if ((_owner == null) || (_owner.isOnline()==0) ) { deleteMe(); return; } // if the owner is too far away, stop anything else and immediately run towards the owner. if (!_owner.isInsideRadius(this, MAX_DISTANCE_FROM_OWNER, true, true)) { getAI().startFollow(_owner); return; } // if the owner is dead, do nothing... if (_owner.isDead()) return; // if the tamed beast is currently in the middle of casting, let it complete its skill... if(isCastingNow()) return; float HPRatio = ((float) _owner.getCurrentHp())/_owner.getMaxHp(); // if the owner has a lot of HP, then debuff the enemy with a random debuff among the available skills // use of more than one debuff at this moment is acceptable if (HPRatio >= 0.8) { FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) getTemplate().getSkills(); for (L2Skill skill: skills.values()) { // if the skill is a debuff, check if the attacker has it already [ attacker.getEffect(L2Skill skill) ] if ((skill.getSkillType() == L2SkillType.DEBUFF) && Rnd.get(3) < 1 && (attacker != null && attacker.getFirstEffect(skill) != null)) { sitCastAndFollow(skill, attacker); } } } // for HP levels between 80% and 50%, do not react to attack events (so that MP can regenerate a bit) // for lower HP ranges, heal or recharge the owner with 1 skill use per attack. else if (HPRatio < 0.5) { int chance = 1; if (HPRatio < 0.25 ) chance = 2; // if the owner has a lot of HP, then debuff the enemy with a random debuff among the available skills FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) getTemplate().getSkills(); for (L2Skill skill: skills.values()) { // if the skill is a buff, check if the owner has it already [ owner.getEffect(L2Skill skill) ] if ( (Rnd.get(5) < chance) && ((skill.getSkillType() == L2SkillType.HEAL) || (skill.getSkillType() == L2SkillType.HOT) || (skill.getSkillType() == L2SkillType.BALANCE_LIFE) || (skill.getSkillType() == L2SkillType.HEAL_PERCENT) || (skill.getSkillType() == L2SkillType.HEAL_STATIC) || (skill.getSkillType() == L2SkillType.COMBATPOINTHEAL) || (skill.getSkillType() == L2SkillType.CPHOT) || (skill.getSkillType() == L2SkillType.MANAHEAL) || (skill.getSkillType() == L2SkillType.MANA_BY_LEVEL) || (skill.getSkillType() == L2SkillType.MANAHEAL_PERCENT) || (skill.getSkillType() == L2SkillType.MANARECHARGE) || (skill.getSkillType() == L2SkillType.MPHOT) ) ) { sitCastAndFollow(skill, _owner); return; } } } } /** * Prepare and cast a skill: * First smoothly prepare the beast for casting, by abandoning other actions * Next, call super.doCast(skill) in order to actually cast the spell * Finally, return to auto-following the owner. * * @see com.l2jserver.gameserver.model.actor.L2Character#doCast(com.l2jserver.gameserver.model.L2Skill) */ protected void sitCastAndFollow(L2Skill skill, L2Character target) { stopMove(null); broadcastPacket(new StopMove(this)); getAI().setIntention(AI_INTENTION_IDLE); setTarget(target); doCast(skill); getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, _owner); } private class CheckDuration implements Runnable { private L2TamedBeastInstance _tamedBeast; CheckDuration(L2TamedBeastInstance tamedBeast) { _tamedBeast = tamedBeast; } public void run() { int foodTypeSkillId = _tamedBeast.getFoodType(); L2PcInstance owner = _tamedBeast.getOwner(); _tamedBeast.setRemainingTime(_tamedBeast.getRemainingTime() - DURATION_CHECK_INTERVAL); // I tried to avoid this as much as possible...but it seems I can't avoid hardcoding // ids further, except by carrying an additional variable just for these two lines... // Find which food item needs to be consumed. L2ItemInstance item = null; if (foodTypeSkillId == 2188) item = owner.getInventory().getItemByItemId(6643); else if (foodTypeSkillId == 2189) item = owner.getInventory().getItemByItemId(6644); // if the owner has enough food, call the item handler (use the food and triffer all necessary actions) if (item != null && item.getCount() >= 1) { L2Object oldTarget = owner.getTarget(); owner.setTarget(_tamedBeast); L2Object[] targets = {_tamedBeast}; // emulate a call to the owner using food, but bypass all checks for range, etc // this also causes a call to the AI tasks handling feeding, which may call onReceiveFood as required. owner.callSkill(SkillTable.getInstance().getInfo(foodTypeSkillId, 1), targets); owner.setTarget(oldTarget); } else { // if the owner has no food, the beast immediately despawns, except when it was only // newly spawned. Newly spawned beasts can last up to 5 minutes if (_tamedBeast.getRemainingTime() < MAX_DURATION - 300000) _tamedBeast.setRemainingTime(-1); } /* There are too many conflicting reports about whether distance from home should * be taken into consideration. Disabled for now. * if (_tamedBeast.isTooFarFromHome()) _tamedBeast.setRemainingTime(-1); */ if (_tamedBeast.getRemainingTime() <= 0) _tamedBeast.deleteMe(); } } private class CheckOwnerBuffs implements Runnable { private L2TamedBeastInstance _tamedBeast; private int _numBuffs; CheckOwnerBuffs(L2TamedBeastInstance tamedBeast, int numBuffs) { _tamedBeast = tamedBeast; _numBuffs = numBuffs; } public void run() { L2PcInstance owner = _tamedBeast.getOwner(); // check if the owner is no longer around...if so, despawn if ((owner == null) || (owner.isOnline()==0) ) { deleteMe(); return; } // if the owner is too far away, stop anything else and immediately run towards the owner. if (!isInsideRadius(owner, MAX_DISTANCE_FROM_OWNER, true, true)) { getAI().startFollow(owner); return; } // if the owner is dead, do nothing... if (owner.isDead()) return; // if the tamed beast is currently casting a spell, do not interfere (do not attempt to cast anything new yet). if (isCastingNow()) return; int totalBuffsOnOwner = 0; int i=0; int rand = Rnd.get(_numBuffs); L2Skill buffToGive = null; // get this npc's skills: getSkills() FastMap<Integer, L2Skill> skills = (FastMap<Integer, L2Skill>) _tamedBeast.getTemplate().getSkills(); for (L2Skill skill: skills.values()) { // if the skill is a buff, check if the owner has it already [ owner.getEffect(L2Skill skill) ] if (skill.getSkillType() == L2SkillType.BUFF) { if (i++==rand) buffToGive = skill; if(owner.getFirstEffect(skill) != null) { totalBuffsOnOwner++; } } } // if the owner has less than 60% of this beast's available buff, cast a random buff if (_numBuffs*2/3 > totalBuffsOnOwner) { _tamedBeast.sitCastAndFollow(buffToGive, owner); } getAI().setIntention(CtrlIntention.AI_INTENTION_FOLLOW, _tamedBeast.getOwner()); } } } -
Bug when i start the gameserver
darknessneo posted a question in Request Server Development Help [L2J]
L2J version 4086 L2JDP version 7279 Screen : All is on the screen. The code for the lign error : L2TamedBeastInstance oldTrained = player.getTrainedBeast(); if (oldTrained != null) { oldTrained.doDespawn(); } -
[Share] Epic Equipment For CT2.4
darknessneo replied to varo's topic in Client Development Discussion
hello, nice share, i like it. ^^ And weapons roxx ^^ -
scroll summon : how give a weapon to the pet
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
i used the orginal weapon of the mob. And yes, i checked before post here. -
scroll summon : how give a weapon to the pet
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
first post edited. -
[Guide]How to make custom pets
darknessneo replied to Jimaras22's topic in Server Development Discussion [L2J]
hi, in first time, thx very much for your share. I maked a pet with a death lord ^^ but he dont have weapon... Strange.. On my database, i checked if he have someone in rhand or lhand, and all its ok, but... i see nothing... How we can make weapon for custom pet ? -
scroll summon : how give a weapon to the pet
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
Edit : well, finaly, i found something. For the skill attack for custom pet we need to edit actionname-e.dat. But i can't edit it correctly. When i dont have a error when i save the file, my skill dont here. And all other time, i cant save the file... Someone can help me about edit this file ? -
stack a tattoo with a shirt
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
thx, but its not the solution of by problem. I maked 2 specials tattoo, one for belt, another for underwear. But if i equip my tattoo, my item in belt or underwear going to be disarm. And i wan my tattoo stacking with my stuff. -
scroll summon : how give a weapon to the pet
darknessneo posted a question in Request Server Development Help [L2J]
Ok, hello all, i edited this post, so here all news infos : L2J version 4086 L2JDP version 7279 Gracia epilogue. I maked a custom scroll for summon a mob as a pet. But my pet dont have weapon and skill for attacking. For the skill i know is in the actionname-e.dat, but i dont know how to edit it (i have a error all the time or no change in the pet interface). For the weapon... dont know... in my DB, he have a weapon in the lhand. So why he dont have it... Any help is welcome. -
stack a tattoo with a shirt
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
Euh, new question (so new reply... sorry) how can i stack my tattoo with the shirt ? My tattoo go on the shirt items and disarm it. -
stack a tattoo with a shirt
darknessneo replied to darknessneo's question in Request Server Development Help [L2J]
Ah, great, i added a wrong id (copy/paste to fast), you right. Thx a lot, my mistake...
