Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Aion Recharger Install

Junior Spellweaver
Joined
Mar 2, 2023
Messages
196
Reaction score
326
Hi. I searched Google for information on installing a recharge and found only a person who sells it for $6 (LOL)
I don't pretend to be the author of this code, I found it in some assembly, I don't remember exactly...

Java:
package ai.worlds;

import ai.ActionItemNpcAI2;
import com.aionemu.gameserver.ai2.AI2Actions;
import com.aionemu.gameserver.ai2.AIName;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK_STATUS;
import com.aionemu.gameserver.network.aion.serverpackets.SM_SKILL_COOLDOWN;
import com.aionemu.gameserver.skillengine.model.SkillTargetSlot;
import com.aionemu.gameserver.utils.PacketSendUtility;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@AIName("recharger")
public class RechargerAI2 extends ActionItemNpcAI2 {

    @Override
    protected void handleUseItemFinish(Player player) {
        switch (getNpcId()){
            case 730397:
                reseter(player);
                super.handleUseItemFinish(player);
                break;
        }
    }

    @Override
    protected void handleDied() {
        AI2Actions.deleteOwner(this);
    }

    public void reseter(Player player){
        player.getLifeStats().increaseHp(SM_ATTACK_STATUS.TYPE.HP, player.getLifeStats().getMaxHp() + 1);
        player.getLifeStats().increaseMp(SM_ATTACK_STATUS.TYPE.MP, player.getLifeStats().getMaxMp() + 1);
        player.getEffectController().removeAbnormalEffectsByTargetSlot(SkillTargetSlot.SPEC2);

        List<Integer> delayIds = new ArrayList<Integer>();
        if (player.getSkillCoolDowns() != null) {
            long currentTime = System.currentTimeMillis();
            for (Map.Entry<Integer, Long> en : player.getSkillCoolDowns().entrySet()) {
                delayIds.add(en.getKey());
                if(delayIds.contains(11885) || delayIds.contains(11886) || delayIds.contains(11887) || delayIds.contains(11888) || delayIds.contains(11889) ||
                        delayIds.contains(11890) || delayIds.contains(11891) || delayIds.contains(11892) || delayIds.contains(11893) || delayIds.contains(11894)){
                    delayIds.remove(en.getKey());
                }
            }

            for (Integer delayId : delayIds) {
                player.setSkillCoolDown(delayId, currentTime);
            }

            delayIds.clear();
            PacketSendUtility.sendPacket(player, new SM_SKILL_COOLDOWN(player.getSkillCoolDowns()));
        }
    }
}

Creating a file RechargerAI2.java with the code specified above..
We put it in the folder "AionGameLibs\data\scripts\system\handlers\ai\worlds"
And we prescribe ai to the necessary NPC

In this code - this npc "730397"


XML:
    <npcTemplate npc_id="730397" level="1" name="Recharger" name_id="371763" name_desc="IDStation_EnergyCharger" height="2.0" rank="DISCIPLINED" rating="NORMAL" tribe="USEALL" type="GENERAL" ai="recharger" srange="50" adelay="2000" hpgauge="3">
        <npc_stats maxHp="172" maxXp="106" main_hand_attack="20" main_hand_accuracy="187" pdef="100" mresist="187" power="23" evasion="187" accuracy="93"/>
        <bound_radius front="0.5" side="0.7" upper="2.0"/>
        <talk_info distance="5" delay="3"/>
    </npcTemplate>
 
Skilled Illusionist
Joined
Apr 1, 2022
Messages
359
Reaction score
399
Same here:
Java:
package ai;

import com.aionemu.gameserver.ai2.AIName;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.siege.FortressLocation;
import com.aionemu.gameserver.network.aion.serverpackets.S_HIT_POINT_OTHER.TYPE;
import com.aionemu.gameserver.network.aion.serverpackets.S_LOAD_SKILL_COOLTIME;
import com.aionemu.gameserver.services.SiegeService;
import com.aionemu.gameserver.utils.PacketSendUtility;

import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;

/**
 * @author BeckUp.Media
 */
@AIName("DuelRecharger")
public class DuelRecharger extends GeneralNpcAI2
{
    //TODO Dialog
    @Override
    protected void handleDialogStart(Player player)
    {
        if (!siegeIsRunning()) {
            HealonTalk(player);
            RemoveCDonTalk(player);
        }
    }

    public void HealonTalk(Player player)
    {
        player.getLifeStats().increaseHp(TYPE.HP, player.getLifeStats().getMaxHp() + 1);
        player.getLifeStats().increaseMp(TYPE.MP, player.getLifeStats().getMaxMp() + 1);
    }

    public void RemoveCDonTalk(Player player)
    {
        //TODO No Dp Skill and Trans Skill
        List<Integer> delayIds = new ArrayList<Integer>();
        if (player.getSkillCoolDowns() != null) {
            long currentTime = System.currentTimeMillis();
            for (Entry<Integer, Long> en : player.getSkillCoolDowns().entrySet())
                delayIds.add(en.getKey());

            for (Integer delayId : delayIds)
                player.setSkillCoolDown(delayId, currentTime);

            delayIds.clear();
            PacketSendUtility.sendPacket(player, new S_LOAD_SKILL_COOLTIME(player.getSkillCoolDowns()));
        }
    }

    public boolean siegeIsRunning()
    {
        for (FortressLocation f : SiegeService.getInstance().getFortresses().values()) {
            if (f.isVulnerable())
                return true;
        }
        return false;
    }
}


Maybe someone need this ;)
 
Newbie Spellweaver
Joined
Apr 10, 2023
Messages
47
Reaction score
10
JavaScript:
package ai.optimus;

import com.aionemu.gameserver.ai2.AIName;
import com.aionemu.gameserver.ai2.NpcAI2;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler;
import com.aionemu.gameserver.network.aion.serverpackets.SM_ITEM_USAGE_ANIMATION;
import com.aionemu.gameserver.network.aion.serverpackets.SM_QUESTION_WINDOW;
import com.aionemu.gameserver.model.gameobjects.Creature;
import com.aionemu.gameserver.services.CubeExpandService;
import com.aionemu.gameserver.services.SkillLearnService;


@AIName("skills_npc")
public class Skills extends NpcAI2 {
    
    private static int[] elyosStigmaQuests = {1929, 3930, 3931, 3932, 11049, 11276, 11550, 30217};
    private static int[] asmodianStigmaQuests = {2900, 4934, 4935, 4936, 21049, 21278, 21550, 30317};
    
    @Override
    protected void handleDialogStart(final Player player) {
        RequestResponseHandler responseHandler = new RequestResponseHandler(player) {
                @Override
                public void acceptRequest(Creature p2, Player player) {
                SkillLearnService.addMissingSkills(player);
                player.getSkillList().addSkill(player, 30001, 49); //
                player.getSkillList().addSkill(player, 30002, 500); // Vita
                player.getSkillList().addSkill(player, 30003, 500); // Ether
                player.getSkillList().addSkill(player, 40001, 500); // Cuisine
                player.getSkillList().addSkill(player, 40002, 500); // Armes
                player.getSkillList().addSkill(player, 40003, 500); // Armure
                player.getSkillList().addSkill(player, 40004, 500); // Couture
                player.getSkillList().addSkill(player, 40007, 500); // Alchimie
                player.getSkillList().addSkill(player, 40008, 500); // Artisanat
                player.getSkillList().addSkill(player, 40010, 500); // Artisanat
                player.getSkillList().addSkill(player, 40011, 549); // Craft 5.8
                PacketSendUtility.sendYellowMessageOnCenter(player, "Success For Fix Your Craft Skills & Unlock Your Cube. Have Fun ^.^");
                
                if (player.getNpcExpands() >= 15) {
                return;
                }
                while (player.getNpcExpands() < 15) {
                CubeExpandService.expand(player, true);
                }
            }
            @Override
            public void denyRequest(Creature p2, Player player) {
            }
            
        };

        boolean requested = player.getResponseRequester().putRequest(902247, responseHandler);
        if (requested){
            PacketSendUtility.sendPacket(player, new SM_QUESTION_WINDOW(902247, 0, 0, "Fix Your Skill ?"));
        }
    }
}

Maybe someone need this for fixing missing skill and open the slot stigma + add skill for craft
 
Back
Top