Jump to content

Question

Posted

How i can make Delevel Manager With request item for delevel + reward for delevel?

Was something with L2ItemInstance, but i don;t know how.  

I want to take from players 1 kk adena and give 1 apiga. Thank you !

Recommended Posts

  • 0
Posted (edited)

Do you want do it as command or npc?

You want the level to go down by 1 or more than 1 or the player to specify how much he wants to go down

Edited by TGSLineage2
  • 0
Posted (edited)

I guess it would be something like that:

if(activeChar.getInventory().getAdena() >= 1000000){
                    activeChar.getInventory().destroyItemByItemId("Delevel manager", 57, 1000000, activeChar, activeChar);
                    activeChar.getInventory().addItem("Delevel manager", itemApigaId, itemApigaAmount, activeChar, activeChar);
                    activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(itemApigaId).addInt(itemApigaAmount));
                    activeChar.sendPacket(new ItemList(activeChar, true));
                }else{
                    activeChar.sendMessage("You dont have enough Adena");
                }

 

That you must put in the method where you make the delevel and include the code of the delevel inside the condition adena> 1kk

Edited by TGSLineage2
  • 0
Posted

                    *UPDATE*

 

No work, i don;t know how to fix this:

- Player when have lv 85 to perform delevel;

- Item request for delevel;

- Item reward after delevel;

- Exp from level 85 - 55 decrease;

L2j-Sunrise. Thank you

 

  • 0
Posted
4 minutes ago, 0flee said:

                    *UPDATE*

 

No work, i don;t know how to fix this:

- Player when have lv 85 to perform delevel;

- Item request for delevel;

- Item reward after delevel;

- Exp from level 85 - 55 decrease;

L2j-Sunrise. Thank you

 

I have a question, did it work or did it not work?

  • 0
Posted

Also, i have a code, but i don;t want to be this and i want to edit. 

Spoiler

package ai.sunriseNpc.DelevelManager;

import l2r.gameserver.data.xml.impl.ExperienceData;
import l2r.gameserver.data.xml.impl.ItemData;
import l2r.gameserver.model.actor.L2Npc;
import l2r.gameserver.model.actor.instance.L2PcInstance;
import l2r.gameserver.network.SystemMessageId;
import l2r.gameserver.network.serverpackets.NpcHtmlMessage;

import gr.sr.configsEngine.configs.impl.CustomNpcsConfigs;

import ai.npc.AbstractNpcAI;

/**
 * @author L2jSunrise Team
 * @Website www.l2jsunrise.com
 */
public class DelevelManager extends AbstractNpcAI
{
    private static final int NPC = CustomNpcsConfigs.DELEVEL_NPC_ID;
    private static final int ITEM_ID = CustomNpcsConfigs.DELEVEL_ITEM_ID;
    private static final int ITEM_COUNT_PER_LEVEL = CustomNpcsConfigs.DELEVEL_ITEM_AMOUNT;
    private static final boolean DYNAMIC_PRICES = CustomNpcsConfigs.DELEVEL_DYNAMIC_PRICE;
    private static final int MINLVL = CustomNpcsConfigs.DELEVEL_REQUIRED_LEVEL;
    
    private int getDelevelPrice(final L2PcInstance player)
    {
        return DYNAMIC_PRICES ? ITEM_COUNT_PER_LEVEL * player.getLevel() : ITEM_COUNT_PER_LEVEL;
    }
    
    public DelevelManager()
    {
        super(DelevelManager.class.getSimpleName(), "ai/sunriseNpc");
        addStartNpc(NPC);
        addFirstTalkId(NPC);
        addTalkId(NPC);
    }
    
    @Override
    public String onAdvEvent(final String event, final L2Npc npc, final L2PcInstance player)
    {
        if (!CustomNpcsConfigs.ENABLE_DELEVEL_MANAGER)
        {
            player.sendMessage("Delevel manager npc is disabled by admin");
            sendMainHtmlWindow(player, npc);
            return "";
        }
        
        if (event.equalsIgnoreCase("level"))
        {
            if (player.getLevel() <= MINLVL)
            {
                player.sendMessage("Your level is too low to use this function, you must be at least " + MINLVL + 1 + " level.");
                sendMainHtmlWindow(player, npc);
                return "";
            }
            
            if (player.isInCombat())
            {
                player.sendMessage("Cannot use while in combat.");
                sendMainHtmlWindow(player, npc);
                return "";
            }
            
            if (player.getKarma() > 0)
            {
                player.sendMessage("Cannot use while hava karma.");
                sendMainHtmlWindow(player, npc);
                return "";
            }
            
            if (player.isEnchanting())
            {
                player.sendMessage("Cannot use while Enchanting.");
                sendMainHtmlWindow(player, npc);
                return "";
            }
            
            if (player.isAlikeDead())
            {
                player.sendMessage("Cannot use while Dead or Fake Death.");
                sendMainHtmlWindow(player, npc);
                return "";
            }
            
            if (player.destroyItemByItemId("Delevel", ITEM_ID, getDelevelPrice(player), player, true))
            {
                player.setExp(player.getStat().getExpForLevel(player.getLevel()));
                // sets exp to 0%, if you don't like people abusing this by
                // deleveling at 99% exp, comment the previous line
                player.removeExpAndSp(player.getExp() - ExperienceData.getInstance().getExpForLevel(player.getLevel() - 1), 0);
                player.rewardSkills();
                player.sendMessage("Your level has been decreased.");
            }
            else
            {
                player.sendPacket(SystemMessageId.INCORRECT_ITEM_COUNT);
            }
            
            sendMainHtmlWindow(player, npc);
            return "";
        }
        return "";
    }
    
    @Override
    public String onFirstTalk(final L2Npc npc, final L2PcInstance player)
    {
        sendMainHtmlWindow(player, npc);
        return "";
    }
    
    private void sendMainHtmlWindow(L2PcInstance player, L2Npc npc)
    {
        final NpcHtmlMessage html = getHtmlPacket(player, npc, "main.htm");
        html.replace("%MINLVL%", String.valueOf(MINLVL + 1));
        html.replace("%PLAYER%", player.getName());
        html.replace("%DELEVEL_PRICE%", String.valueOf(getDelevelPrice(player)));
        html.replace("%ITEM_NAME%", ItemData.getInstance().getTemplate(ITEM_ID).getName());
        
        player.sendPacket(html);
    }
    
    private NpcHtmlMessage getHtmlPacket(L2PcInstance player, L2Npc npc, String htmlFile)
    {
        final NpcHtmlMessage packet = new NpcHtmlMessage(npc.getObjectId());
        packet.setHtml(getHtm(player.getHtmlPrefix(), htmlFile));
        return packet;
    }
}
 

 

  • 0
Posted
1 minute ago, TGSLineage2 said:

I have a question, did it work or did it not work?

No work. I get some errors in Eclipse.

  • 0
Posted (edited)
if (activeChar.getInventory().getAdena() >= 1000000) {
            activeChar.getInventory().destroyItemByItemId("Delevel manager", 57, 1000000, activeChar, activeChar);
            activeChar.getInventory().addItem ("Delevel manager", itemApigaId, itemApigaAmount, activeChar, activeChar);
            activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(itemApigaId).addInt(itemApigaAmount));
            activeChar.sendPacket(new ItemList(activeChar, true));
        } else {
            activeChar.sendMessage("You don't have enought Adena");
        }

Just as this does not give me errors in the acis, I would only have to replace itemApigaId by the identification of that item and itemApigaAmount by the quantity.

Edited by TGSLineage2
  • 0
Posted (edited)

The answer is on the question.

Since i dont have your sources and i cant know the name of your methods, try to follow the next steps

 

First of all, get the line where the admin set level in a player instance and see how the delevel works

for example

player.removeExpAndSp(xp,sp);

then , if your destroyitem method returns boolean, check it without even check the item count. 

for example

player.destoryItemByItemId("delevel",57,1000,null,true)

the boolean 'true' should inform the player if the item couldn't be destroyed. By doing that, you dont even need to send new message to that player about incorrect item count.

 

then, add your reward

for example

player.addItem("delevel-reward",7575,1,null,true)

 

finally, a complete code should be like that:

if (player.destroyItemByItemId("delevel",57,1000,null,true)
{
	player.removeExpAndSp(xp,sp);
	player.addItem("delevel-reward",7575,1,null,true);
}

 

Edited by melron
  • 0
Posted
12 minutes ago, melron said:

The answer is on the question.

Since i dont have your sources and i cant know the name of your methods, try to follow the next steps

 

First of all, get the line where the admin set level in a player instance and see how the delevel works

for example


player.removeExpAndSp(xp,sp);

then , if your destroyitem method returns boolean, check it without even check the item count. 

for example


player.destoryItemByItemId("delevel",57,1000,null,true)

the boolean 'true' should inform the player if the item couldn't be destroyed. By doing that, you dont even need to send new message to that player about incorrect item count.

 

then, add your reward

for example


player.addItem("delevel-reward",7575,1,null,true)

 

finally, a complete code should be like that:


if (player.destroyItemByItemId("delevel",57,1000,null,true)
{
	player.removeExpAndSp(xp,sp);
	player.addItem("delevel-reward",7575,1,null,true);
}

 

Well, thank you @melron for your effort to write here.

btu is a bit hard to understand (for me) how it;s work that xp, sp to decrease. Cuz i want just XP to decrease, not sp. i don;t know numbers for level 55.

  • 0
Posted
14 minutes ago, melron said:

The answer is on the question.

Since i dont have your sources and i cant know the name of your methods, try to follow the next steps

 

First of all, get the line where the admin set level in a player instance and see how the delevel works

for example


player.removeExpAndSp(xp,sp);

then , if your destroyitem method returns boolean, check it without even check the item count. 

for example


player.destoryItemByItemId("delevel",57,1000,null,true)

the boolean 'true' should inform the player if the item couldn't be destroyed. By doing that, you dont even need to send new message to that player about incorrect item count.

 

then, add your reward

for example


player.addItem("delevel-reward",7575,1,null,true)

 

finally, a complete code should be like that:


if (player.destroyItemByItemId("delevel",57,1000,null,true)
{
	player.removeExpAndSp(xp,sp);
	player.addItem("delevel-reward",7575,1,null,true);
}

 

Well it seems that if it is better coded.

  • 0
Posted (edited)

I have complete with my code and this is final code, idk if it's works cuz i compile again and replace core.

Spoiler

if (player.destroyItemByItemId("delevel", 57, 1000, null, true))
            {
                player.removeExpAndSp(player.getExp() - ExperienceData.getInstance().getExpForLevel(player.getLevel() - 1), 0);
                player.addItem("delevel-reward", 7575, 1, null, true);
            }

Also, i do not understand to explain this line and what he do exactly

 

 

ExperienceData.getInstance().getExpForLevel(player.getLevel() - 1), 0);

Edited by 0flee

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • L2 Kings    Stage 1 – The Awakening Dynasty and Moirai Level Cap: 83 Gear: Dynasty -Moirai & Weapons (Shop for Adena + Drop from mobs/instances ) Masterwork System: Available (Neolithics S required with neolithics u can do armor parts foundation aswell) Class Cloaks: Level 1 - Masterwork sets such us moirai/dynasty stats are boosted also vesper(stage 2) Olf T-Shirt: +6 (fails don’t reset) safe is +2 Dolls: Level 1 Belts: Low & Medium Enchant: Safe +3 / Max +8 / Attribution Easy in Moirai-Dynasty . Main Zones: Varka Outpost: Easy farm, Adena, EXP for new players = > 80- 100kk hour Dragon Valley: Main farm zone — , 100–120kk/hour Weapon Weakness System active (all classes can farm efficiently) Archers get vampiric auto-hits vs mobs Dragon Valley Center: Main Party Zone — boosted drops (Blessed enchants, Neolithics chance) => farm like 150-200kk per hour. Dragon Valley North: Spoil Zone (Asofe + crafting materials for MW) Primeval Isle: Safe autofarm zone (low adena for casual players) ==> 50kk per hour Forge of the Gods & Imperial Tomb: Available from Stage 1 (lower Adena reward in compare with Dragon Valley) Hellbound also avaliable from stage 1 In few words all zones opened but MAIN farm zone with boosted adena and drops is Dragon valley also has more mobs Instances: Zaken (24h Reuse) → Instead of Vespers drop Moirai , 100% chance to drop 1 of 9 dolls lvl 1, Zaken 7-Day Jewelry Raid Bosses (7 RBs): Drop Moirai Parts + Neolithic S grade instead of Vespers parts that has 7 Rb Quest give Icarus Weapons Special Feature 7rb bosses level up soul crystals aswell. Closed Areas : Monaster of SIlence, LOA, ( It wont have mobs) / Mahum Quest/Lizardmen off) Grand Epics: Unlocked on Day 4 of Stage 1 → Antharas, Valakas, Baium, AQ, etc ================================================================================= Stage 2 – Rise of Vespers Level Cap: 85 Gear: Moirai Armors (Adena GM SHOP / Craft/ Drop) Weapons: Icarus Cloaks: Level 2 Olf: +8 Dolls: Level 2 Belts: High & Top Enchant: Safe +3 / Max +8 Masterwork can be with Neolithics S84 aswell but higher so craft will be usefull aswell. 7 Raid Boss Quest Updated: Now works retail give vesper weapons 7rb Bosses Drops : Vespers Instances: Zaken : Drops to retail vespers + the dolls and the extra items that we added on stage 1 New Freya Instance: Added — drops vespers and instead of mid s84 weapons will drop vespers . Extra drops Blessed Bottle of Freya - drops 100% chance 1 of 9 dolls. Farm Areas Dragon Valley remains main farm New Zone : Lair of Antharas (mobs nerfed and added drop Noble stone so solo players can farm too) New Party Zone : LOA Circle   ============================================================================   Stage 3 – The Vorpal ERA Gear: Vorpal Unclock Cloaks: Level 3 Olf: +10 (max cap) Dolls: Level 3 Enchant: Safe +3 / Max +12 Farm Zones : Dragon Valley Center Scorpions becomes a normal solo zone (no longer party zone) Drops:   LOA & Knorik → Mid Weapons avaliable in drop New Party Zone Kariks Instances: Easy Freya Drops Mid Weapons Frintezza Release =================================================================================     Stage 4 – Elegia Era (Final Stage) Elegia Unlock Gear: Elegia Weapons: Elegia TOP s84 ( farmed via H-Freya/ Drops ) Cloaks: Level 5 Dolls: Level 3 (final bonuses) Enchant: Safe +6 / Max +16 Instances: Hard Freya → Drops Elegia Weapons + => The Instance will drop 2-3 parts for sure and also will be able to Join with 7 people . Party Zone will have also drop chances for elegia armor parts and weapons but small   Events (Hourly): Win: 50 Event Medals + 3 GCM + morewards Lose: 25 Medals + 1 GCM + more rewards Tie: 30 Medals + 2 GCM + more rewards   ================================================================================ Epic Fragments Currency Participating in Daily Bosses mass rewarding all players Participating in Instances (zaken freya frintezza etc) all players get reward ================================================================================ Adena - Main server currency (all items in gm shop require adena ) Event Medals (Festival Adena) - Event shop currency Donation coins you can buy with them dressme,cosmetics and premium account Epic Fragments you can buy with them fake epic jewels Olympiad Tokens you can buy many items from olympiad shop (Hero Coin even items that are on next stages) Olympiad Win = 1000 Tokens / Lose = 500 Tokens ================================================================================= Offline Autofarm Allows limited Offline farming requires offline autofarm ticket that you get by voting etc ================================================================================= Grand Epics have Specific Custom NPC that can spawn Epics EU/LATIN TIME ZONE ================================================================================= First Olympiad Day 19 December First Heroes 22 December ( 21 December Last day of 1st Period) After that olympiad will be weekly. ================================================================================= Item price and economy Since adena is main coin of server and NOT donation coins we will always add new items in gm shop with adena in order to burn the adena of server and not be inflation . =================================================================================        
    • Hello, I'd like to change a title color for custom npc.  I created custom NPC, cloned existing. I put unique id for it in npcname-e, npcgrp and database. I have "0" to serverSideName in db, so that it would use npcname-e, but instead it has "NoNameNPC"and no title color change.
    • Trusted Guy 100% ,  I asked him for some work and he did it right away.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock