Jump to content

Recommended Posts

Posted (edited)

Creditos: Bluur

### Eclipse Workspace Patch 1.0
Index: java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java    (revision 1)
+++ java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java    (working copy)
@@ -62,6 +62,7 @@
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSiege;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSkill;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSpawn;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminStriderRace;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminUnblockIp;
@@ -127,6 +128,8 @@
         registerAdminCommandHandler(new AdminTeleport());
         registerAdminCommandHandler(new AdminUnblockIp());
         registerAdminCommandHandler(new AdminZone());
+        //custom
+        registerAdminCommandHandler(new AdminStriderRace());
     }
     
     public void registerAdminCommandHandler(IAdminCommandHandler handler)
Index: java/net/sf/l2j/gameserver/custom/striderrace/StriderRace.java
===================================================================
--- java/net/sf/l2j/gameserver/custom/striderrace/StriderRace.java    (revision 0)
+++ java/net/sf/l2j/gameserver/custom/striderrace/StriderRace.java    (working copy)
@@ -0,0 +1,236 @@
+/*
+ * 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 net.sf.l2j.gameserver.custom.striderrace;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.datatables.MapRegionTable;
+import net.sf.l2j.gameserver.datatables.NpcTable;
+import net.sf.l2j.gameserver.datatables.SpawnTable;
+import net.sf.l2j.gameserver.model.L2Spawn;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
+import net.sf.l2j.gameserver.skills.AbnormalEffect;
+import net.sf.l2j.gameserver.util.Broadcast;
+
+/**
+ * @author Bluur
+ * @version 1.1
+ */
+public class StriderRace
+{
+    private static StriderRace INSTANCE;
+    private StriderRaceState srState = StriderRaceState.DESACTIVED;
+    private List<L2PcInstance> players = new ArrayList<>();
+    
+    private StriderRace(){}
+    
+    public void startEvent()
+    {
+        srState = StriderRaceState.REGISTER;
+        announceEvent("The event started! Commands .joinsr or .leavesr");
+        announceEvent("Registration time: 5 minutes!");
+        sleep(60);
+        announceEvent("[4] minutes to the end of the record!");
+        sleep(60);
+        announceEvent("[3] minutes to the end of the record!");
+        sleep(60);
+        announceEvent("[2] minutes to the end of the record!");
+        sleep(60);
+        announceEvent("[1] minutes to the end of the record!");
+        sleep(60);
+        if (!minPlayers())
+        {
+            abortEvent();
+            return;
+        }    
+        srState = StriderRaceState.WAIT;
+        announceEvent("closed registration! Total number of registered players: "+ players.size());
+        announceEvent("The players will be teleported in 10 seconds!");
+        sleep(10);
+        teleportPlayers();
+        mountPlayer(true);
+        paralizedPlayer(true);
+        announceEvent("The event will start in 15 seconds!");
+        sleep(15);
+        srState = StriderRaceState.ATIVED;
+        announceEvent("The race is on! Go Go Go!");
+        spawnNpc();
+        paralizedPlayer(false);
+        sleep(300); // duração do evento em segundos
+        if (srState == StriderRaceState.ATIVED)
+            finishEvent();
+    }
+    
+    private void paralizedPlayer(boolean value)
+    {
+        if (value)
+        {
+            for (L2PcInstance player : players)
+            {
+                player.setIsParalyzed(true);
+                player.startAbnormalEffect(AbnormalEffect.HOLD_2);
+            }
+        }
+        else
+        {
+            for (L2PcInstance player : players)
+            {
+                player.setIsParalyzed(false);
+                player.stopAbnormalEffect(AbnormalEffect.HOLD_2);
+            }
+        }
+    }
+    
+    private void mountPlayer(boolean value)
+    {
+        if (value)
+        {
+            for (L2PcInstance player : players)
+            {
+                if (player != null)
+                {                
+                    player.getRadar().addMarker(Config.EVENT_SR_LOC_ARRIVAL_X, Config.EVENT_SR_LOC_ARRIVAL_Y, Config.EVENT_SR_LOC_ARRIVAL_Z);
+                    player.mount(12526, 0, false);
+                }
+            }
+        }
+        else
+        {
+            for (L2PcInstance player : players)
+            {
+                if (player != null)
+                {
+                    player.getRadar().removeMarker(Config.EVENT_SR_LOC_ARRIVAL_X, Config.EVENT_SR_LOC_ARRIVAL_Y, Config.EVENT_SR_LOC_ARRIVAL_Z);
+                    player.dismount();                    
+                }
+            }
+        }
+    }
+        
+    private void abortEvent()
+    {
+        srState = StriderRaceState.DESACTIVED;
+        announceEvent("The event was terminated for lack of participants!");
+        players.clear();
+    }
+    
+    public void finishEvent()
+    {
+        srState = StriderRaceState.DESACTIVED;
+        announceEvent("The event duration time is up! Thank all...");
+        teleportPlayersToTown();
+        mountPlayer(false);
+        players.clear();
+    }
+    
+    private static void announceEvent(String sendMessage)
+    {
+        Broadcast.announceToOnlinePlayers("[Strider Race]: " + sendMessage, true);
+    }
+    
+    private void teleportPlayers()
+    {
+        for (L2PcInstance player : players)    
+            player.teleToLocation(Config.EVENT_SR_LOC_PLAYER_X, Config.EVENT_SR_LOC_PLAYER_Y, Config.EVENT_SR_LOC_PLAYER_Z, 60);    
+    }
+    
+    private void teleportPlayersToTown()
+    {
+        for (L2PcInstance player : players)
+            player.teleToLocation(MapRegionTable.TeleportWhereType.Town);
+    }
+        
+    private boolean minPlayers()
+    {
+        if (players.size() < Config.EVENT_SR_MINIMUM_PLAYERS)
+           return false;
+        
+        return true;
+    }
+    
+    public boolean maxPlayers()
+    {        
+        if (players.size() >= Config.EVENT_SR_MAXIMUM_PLAYERS)
+           return false;
+
+        return true;    
+    }
+    
+    public boolean containsPlayer(L2PcInstance player)
+    {
+        return players.contains(player);
+    }
+    
+    public void registerPlayer(L2PcInstance player)
+    {
+        players.add(player);
+    }
+    
+    public void removePlayer(L2PcInstance player)
+    {
+        players.remove(player);
+    }
+
+    private static void spawnNpc()
+    {    
+        NpcTemplate tp = NpcTable.getInstance().getTemplate(Config.EVENT_SR_LOC_ID_NPC);    
+        try
+        {
+            L2Spawn spawn = null;
+        
+            spawn = new L2Spawn(tp);
+            spawn.setLocx(Config.EVENT_SR_LOC_ARRIVAL_X);
+            spawn.setLocy(Config.EVENT_SR_LOC_ARRIVAL_Y);
+            spawn.setLocz(Config.EVENT_SR_LOC_ARRIVAL_Z);
+            spawn.setHeading(0);
+            
+            SpawnTable.getInstance().addNewSpawn(spawn, false);
+            spawn.init();
+            spawn.stopRespawn();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+        
+    public StriderRaceState getStriderRaceState()
+    {
+        return srState;
+    }
+    
+    private static void sleep(int value)
+    {
+        try
+        {
+            Thread.sleep(1000 * value);
+        }
+        catch (InterruptedException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    public static StriderRace getInstance()
+    {
+        if (INSTANCE == null)
+            INSTANCE = new StriderRace();
+        
+        return INSTANCE;
+    }
+}
Index: java/net/sf/l2j/gameserver/network/clientpackets/Logout.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/Logout.java    (revision 1)
+++ java/net/sf/l2j/gameserver/network/clientpackets/Logout.java    (working copy)
@@ -15,6 +15,8 @@
 package net.sf.l2j.gameserver.network.clientpackets;
 
 import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
 import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
 import net.sf.l2j.gameserver.model.L2Party;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
@@ -44,6 +46,16 @@
             return;
         }
         
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.ATIVED)
+        {
+            if (StriderRace.getInstance().containsPlayer(player))
+            {
+                player.sendMessage("[Strider Race]: You can't logout in strider race!");
+                player.sendPacket(ActionFailed.STATIC_PACKET);
+                return;
+            }
+        }
+        
         if (player.isLocked())
         {
             if (Config.DEBUG)
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java    (revision 1)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java    (working copy)
@@ -50,6 +50,8 @@
 import net.sf.l2j.gameserver.ai.NextAction.NextActionCallback;
 import net.sf.l2j.gameserver.communitybbs.BB.Forum;
 import net.sf.l2j.gameserver.communitybbs.Manager.ForumsBBSManager;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
 import net.sf.l2j.gameserver.datatables.AccessLevels;
 import net.sf.l2j.gameserver.datatables.CharNameTable;
 import net.sf.l2j.gameserver.datatables.CharTemplateTable;
@@ -5012,6 +5014,16 @@
     {
         sendPacket(new SetupGauge(3, 0, 0));
         int petId = _mountNpcId;
+        
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.ATIVED)
+        {
+            if (petId == 12526 && StriderRace.getInstance().containsPlayer(this))
+            {
+                sendMessage("[Strider Race]: You can't unmount in strider race!");
+                return false;
+            }
+        }
+        
         if (setMount(0, 0, 0))
         {
             stopFeed();
Index: java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java    (revision 1)
+++ java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java    (working copy)
@@ -15,6 +15,8 @@
 package net.sf.l2j.gameserver.model.actor.stat;
 
 import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
 import net.sf.l2j.gameserver.datatables.NpcTable;
 import net.sf.l2j.gameserver.datatables.PetDataTable;
 import net.sf.l2j.gameserver.model.actor.L2Character;
@@ -334,6 +336,9 @@
         if (penalty > 0)
             val *= Math.pow(0.84, penalty);
         
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.ATIVED && StriderRace.getInstance().containsPlayer(getActiveChar()))        
+            val *= Config.EVENT_SR_SPEED;
+        
         return val;
     }
Index: java/net/sf/l2j/Config.java
===================================================================
--- java/net/sf/l2j/Config.java    (revision 1)
+++ java/net/sf/l2j/Config.java    (working copy)
@@ -226,6 +226,20 @@
     public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
     public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;
     
+    /** Strider Race */
+    public static int EVENT_SR_MINIMUM_PLAYERS;
+    public static int EVENT_SR_MAXIMUM_PLAYERS;
+    public static int[][] EVENT_SR_REWARD_TOP1;
+    public static int[][] EVENT_SR_REWARD_TOP2;
+    public static int[][] EVENT_SR_REWARD_TOP3;
+    public static double EVENT_SR_SPEED;
+    public static int EVENT_SR_REWARD_COUNT;
+    public static int EVENT_SR_LOC_ARRIVAL_X;
+    public static int EVENT_SR_LOC_ARRIVAL_Y;
+    public static int EVENT_SR_LOC_ARRIVAL_Z;
+    public static int EVENT_SR_LOC_PLAYER_X;
+    public static int EVENT_SR_LOC_PLAYER_Y;
+    public static int EVENT_SR_LOC_PLAYER_Z;
+    public static int EVENT_SR_LOC_ID_NPC;
+    
     // --------------------------------------------------
     // HexID
     // --------------------------------------------------
@@ -879,6 +893,18 @@
             ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000);
             ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000);
             
+            EVENT_SR_LOC_ID_NPC = events.getProperty("EventSRnpcID", 10);
+            EVENT_SR_MINIMUM_PLAYERS = events.getProperty("EventSRminimumPlayers", 2);
+            EVENT_SR_MAXIMUM_PLAYERS = events.getProperty("EventSRmaximumPlayers", 2);
+            EVENT_SR_REWARD_TOP1 = parseItemsList(events.getProperty("EventSRrewardsTop1", "57,300"));
+            EVENT_SR_REWARD_TOP2 = parseItemsList(events.getProperty("EventSRrewardsTop2", "57,200"));
+            EVENT_SR_REWARD_TOP3 = parseItemsList(events.getProperty("EventSRrewardsTop3", "57,100"));
+            EVENT_SR_SPEED = events.getProperty("EventSRspeedBoost", 1.0);
+            EVENT_SR_LOC_PLAYER_X = events.getProperty("EventSRlocPlayerX", 0);
+            EVENT_SR_LOC_PLAYER_Y = events.getProperty("EventSRlocPlayerY", 0);
+            EVENT_SR_LOC_PLAYER_Z = events.getProperty("EventSRlocPlayerZ", 0);
+            EVENT_SR_LOC_ARRIVAL_X = events.getProperty("EventSRlocArrivalX", 0);
+            EVENT_SR_LOC_ARRIVAL_Y = events.getProperty("EventSRlocArrivalY", 0);
+            EVENT_SR_LOC_ARRIVAL_Z = events.getProperty("EventSRlocArrivalZ", 0);
Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminStriderRace.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminStriderRace.java    (revision 0)
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminStriderRace.java    (working copy)
@@ -0,0 +1,60 @@
+/*
+ * 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 net.sf.l2j.gameserver.handler.admincommandhandlers;
+
+import net.sf.l2j.gameserver.ThreadPoolManager;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
+import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * @author Bluur
+ *
+ */
+public class AdminStriderRace implements IAdminCommandHandler
+{
+    private static final String[] ADMIN_COMMANDS = {"admin_startsr"};
+
+    @Override
+    public boolean useAdminCommand(String command, L2PcInstance activeChar)
+    {
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.DESACTIVED)        
+            initEvent();        
+        else
+            activeChar.sendMessage("[Strider Race]: The event this already in progress!");
+    
+        return true;
+    }
+
+    private static void initEvent()
+    {
+        ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()            
+        {               
+            @Override                    
+            public void run()                    
+            {                        
+                StriderRace.getInstance().startEvent();      
+            }
+         
+        }, 1);
+    }
+    
+    @Override
+    public String[] getAdminCommandList()
+    {
+        return ADMIN_COMMANDS;
+    }
+}
Index: java/net/sf/l2j/gameserver/custom/striderrace/StriderRaceState.java
===================================================================
--- java/net/sf/l2j/gameserver/custom/striderrace/StriderRaceState.java    (revision 0)
+++ java/net/sf/l2j/gameserver/custom/striderrace/StriderRaceState.java    (working copy)
@@ -0,0 +1,27 @@
+/*
+ * 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 net.sf.l2j.gameserver.custom.striderrace;
+
+/**
+ * @author Bluur
+ *
+ */
+public enum StriderRaceState
+{
+    DESACTIVED,
+    REGISTER,
+    WAIT,
+    ATIVED;
+}
Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java    (revision 1)
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java    (working copy)
@@ -15,6 +15,8 @@
 package net.sf.l2j.gameserver.network.clientpackets;
 
 import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
 import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
 import net.sf.l2j.gameserver.model.L2Party;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
@@ -47,6 +49,16 @@
             return;
         }
         
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.ATIVED)
+        {
+            if (StriderRace.getInstance().containsPlayer(player))
+            {
+                player.sendMessage("[Strider Race]: You can't restart in strider race!");
+                sendPacket(RestartResponse.valueOf(false));
+                return;
+            }
+        }
+        
         if (player.isLocked())
         {
             sendPacket(RestartResponse.valueOf(false));
Index: java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/RegStriderRace.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/RegStriderRace.java    (revision 0)
+++ java/net/sf/l2j/gameserver/handler/voicedcommandhandlers/RegStriderRace.java    (working copy)
@@ -0,0 +1,83 @@
+/*
+ * 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 net.sf.l2j.gameserver.handler.voicedcommandhandlers;
+
+import net.sf.l2j.gameserver.custom.striderrace.StriderRace;
+import net.sf.l2j.gameserver.custom.striderrace.StriderRaceState;
+import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * @author Bluur
+ */
+public class RegStriderRace implements IVoicedCommandHandler
+{
+    private static final String[] voiced_commands =
+    {
+        "joinsr",
+        "leavesr"
+    };
+    
+    @Override
+    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
+    {
+        if (command.equals("joinsr"))
+        {
+            if (register(activeChar))
+            {
+                StriderRace.getInstance().registerPlayer(activeChar);
+                activeChar.sendMessage("[Strider Race]: You have been successfully registered!");
+            }
+        }
+        else if (command.equals("leavesr"))
+        {
+            remove(activeChar);
+        }
+        return true;
+    }
+    
+    private static boolean register(L2PcInstance p)
+    {
+        if (!StriderRace.getInstance().maxPlayers())
+        {
+            p.sendMessage("[Strider Race]: Limit of players was reached.");
+            return false;
+        }
+        else if (StriderRace.getInstance().getStriderRaceState() != StriderRaceState.REGISTER || p.getKarma() > 0 || p.isInCombat() || p.isInOlympiadMode() || p.inObserverMode() || StriderRace.getInstance().containsPlayer(p))
+        {
+            p.sendMessage("[Strider Race]: conditions for registration are inappropriate !!!");
+            return false;
+        }
+        
+        return true;
+    }
+    
+    private static boolean remove(L2PcInstance p)
+    {
+        if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.REGISTER && StriderRace.getInstance().containsPlayer(p))
+        {
+            StriderRace.getInstance().removePlayer(p);
+            p.sendMessage("[Strider Race]: you have been successfully removed!");
+        }
+        
+        return true;
+    }
+    
+    @Override
+    public String[] getVoicedCommandList()
+    {
+        return voiced_commands;
+    }
+}
Index: java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java    (revision 0)
+++ java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java    (working copy)

import java.util.Map;

+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.RegStriderRace;

    protected VoicedCommandHandler()
    {
+        registerVoicedCommandHandler(new RegStriderRace());

\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2StriderRaceEventInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2StriderRaceEventInstance.java    (revision 0)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2StriderRaceEventInstance.java    (working copy)
@@ -0,0 +1,102 @@
+/*
+ * 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 net.sf.l2j.gameserver.model.actor.instance;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.ai.CtrlIntention;
+import net.sf.l2j.gameserver.datatables.MapRegionTable;
+import net.sf.l2j.gameserver.datatables.SpawnTable;
+import net.sf.l2j.gameserver.model.L2Object;
+import net.sf.l2j.gameserver.model.L2Spawn;
+import net.sf.l2j.gameserver.model.actor.L2Npc;
+import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
+import net.sf.l2j.gameserver.model.striderrace.StriderRace;
+import net.sf.l2j.gameserver.model.striderrace.StriderRaceState;
+import net.sf.l2j.gameserver.util.Broadcast;
+
+public class L2StriderRaceEventInstance extends L2NpcInstance
+{
+    public L2StriderRaceEventInstance(int objectId, NpcTemplate template)
+    {
+        super(objectId, template);
+    }
+    
+    private static int rankPlayer = 0;
+    
+    @Override
+    public void onAction(L2PcInstance player)
+    {
+        if (player.getTarget() != this)
+            player.setTarget(this);
+        else
+        {
+            if (!canInteract(player))
+                player.getAI().setIntention(CtrlIntention.INTERACT, this);
+            else
+            {
+                if (StriderRace.getInstance().getStriderRaceState() == StriderRaceState.ATIVED && StriderRace.getInstance().containsPlayer(player))
+                {
+                    if (rankPlayer < 2)
+                    {
+                        rankPlayer++;
+                        Broadcast.announceToOnlinePlayers("[Strider Race]: [" + rankPlayer + "] to arrive was -> " + player.getName(), true);
+                        rewardPlayer(player);
+                        StriderRace.getInstance().removePlayer(player);
+                        player.teleToLocation(MapRegionTable.TeleportWhereType.Town);
+                        player.dismount();                        
+                        return;
+                    }
+                    rankPlayer += 1;
+                    Broadcast.announceToOnlinePlayers("[Strider Race]: [3] to arrive was -> " + player.getName(), true);
+                    rewardPlayer(player);
+                    StriderRace.getInstance().finishEvent();
+                    rankPlayer = 0;
+                    
+                    L2Object obj = player.getTarget();
+                    if (obj != null && obj instanceof L2Npc)
+                    {
+                        L2Npc target = (L2Npc) obj;
+                        target.deleteMe();
+                        
+                        L2Spawn spawn = target.getSpawn();
+                        if (spawn != null)
+                        {
+                            spawn.stopRespawn();
+                            SpawnTable.getInstance().deleteSpawn(spawn, true);
+                        }
+                    }
+                }
+            }
+        }
+    }
+    
+    private static void rewardPlayer(L2PcInstance player)
+    {
+        switch (rankPlayer)
+        {
+            case 1:
+                for (int[] item : Config.EVENT_SR_REWARD_TOP1)
+                    player.addItem("", item[0], item[1], player, true);
+                break;
+            case 2:
+                for (int[] item : Config.EVENT_SR_REWARD_TOP2)
+                    player.addItem("", item[0], item[1], player, true);
+                break;
+            default:
+                for (int[] item : Config.EVENT_SR_REWARD_TOP3)
+                    player.addItem("", item[0], item[1], player, true);
+        }
+    }
+}

Index: config/events.properties
===================================================================
--- config/events.properties    (revision 1)
+++ config/events.properties    (working copy)
gameserver/data/xml/admin_commands_rights.xml

+ <aCar name="admin_startsr" accessLevel="1" />
 
gameserver/data/xml/npcs
 
    <npc id="9106" idTemplate="35062" name="Strider Race Event" title="[ARRIVAL HERE]">
        <set name="level" val="75"/>
        <set name="radius" val="10"/>
        <set name="height" val="80"/>
        <set name="rHand" val="0"/>
        <set name="lHand" val="0"/>
        <set name="type" val="L2StriderRaceEvent"/>
        <set name="exp" val="0"/>
        <set name="sp" val="10"/>
        <set name="hp" val="2676.65854"/>
        <set name="mp" val="1507.8"/>
        <set name="hpRegen" val="8.5"/>
        <set name="mpRegen" val="3"/>
        <set name="pAtk" val="794.70901"/>
        <set name="pDef" val="319.24623"/>
        <set name="mAtk" val="542.68324"/>
        <set name="mDef" val="233.61053"/>
        <set name="crit" val="4"/>
        <set name="atkSpd" val="253"/>
        <set name="str" val="40"/>
        <set name="int" val="21"/>
        <set name="dex" val="30"/>
        <set name="wit" val="20"/>
        <set name="con" val="43"/>
        <set name="men" val="20"/>
        <set name="corpseTime" val="7"/>
        <set name="walkSpd" val="50"/>
        <set name="runSpd" val="120"/>
        <set name="dropHerbGroup" val="0"/>
        <set name="attackRange" val="40"/>
        <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" clan="door_clan;dion_siege_clan" clanRange="600" canMove="false" seedable="false"/>
        <skills>
            <skill id="4045" level="1"/>
            <skill id="4416" level="19"/>
        </skills>
    </npc>
Broadcast.announceToOnlinePlayers("[Strider Race]: The event ends with the winner -> " +player.getName(), true);
                                     Broadcast.announceToOnlinePlayers("[Strider Race]: " + sendMessage, true);
Edited by valentin
Posted

well I didn't see strider race for aCis su high give, UPTOP :D ty dude

i hope you're just trolling :P this even is more old and more shared than Xdem's bad comment

Posted

i didnt notice that he made like 10 topics  in row, i withdraw the stuff i said, shame on u dude. 

back on topic: does it work on acis 330-340? :D

Posted

i didnt notice that he made like 10 topics  in row, i withdraw the stuff i said, shame on u dude. 

back on topic: does it work on acis 330-340? :D

afcourse it does just need 1-2 adjustments.

PS SweetS its the best <3

Posted (edited)

sleep(60);  :happyforever:

Yeah, and

 

ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
{
  @Override
  public void run()
  {
    StriderRace.getInstance().startEvent();
  }
}, 1);

 

10/10

 

OP made my year

Edited by _dev_
Posted

admit it the sleep(60) is epic.. come on admit it 

nobody would ever think this

See what i would love is you sharing this code refactored by you. Then we're talking :)

Posted

See what i would love is you sharing this code refactored by you. Then we're talking :)

No my fear elfo, if you want see good codes pm me and we speak with images im not going to waste not even 1 minute of my life to sit and remake a code just to prove you.

What you think i am bot?

Posted

No my fear elfo, if you want see good codes pm me and we speak with images im not going to waste not even 1 minute of my life to sit and remake a code just to prove you.

What you think i am bot?

Go for it then, send some pictures. Cuz all your posts and insults and all your topics are stupid noob questions so something is wrong here.

Posted

Go for it then, send some pictures. Cuz all your posts and insults and all your topics are stupid noob questions so something is wrong here.

Yeap i learned and about my post was a question that is not that simple smart-ass

about my insults afcourse ill be mean to people who ask the same over and over or re-post 10 times in row copy paste topics..

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

    • Hello guys, gh0t from gh0tstudio here. This time we are putting to sale this beafitul landing page for your next server. Lineage 2 Server Landing Page Template u can check it here LINEAGE 2 DEMO SITE   Technology Stack - React 18 with TypeScript - Tailwind CSS for styling - Framer Motion for animations - Vite for fast development and builds - Multi-language support (i18n ready) Responsive Design The template is fully responsive and optimized for all screen sizes. Desktop, tablet, and mobile layouts have been carefully crafted to provide the best user experience on any device. The mobile version includes a unique notch-style hero design with custom clip paths. What is Included - Complete landing page source code - Hero section with parallax scroll effect - Server information section with animated cards - Character classes showcase with interactive gallery - Registration form (frontend only, styled and validated) - Donation packages display section - Download section for game client - Sticky navigation with transparency effects - Footer with social links - Multi-language system (Spanish/English ready) - All animations and transitions - Clean, documented code structure - Easy to customize colors and content   What is Not Included - Backend server or API - User registration panel/dashboard - Payment processing system for donations - Database integration - Connection to L2 game server - Online player counter module - Account management system - Hosting or domain   The template provides the complete frontend experience.  Price: $150 USD     Contact For purchase inquiries or questions about the template, please reach out directly.
    • 流量套利 + SMM 面板 — 强大的增长组合. 通过社交信号加强推广活动,提高信任度和转化率,加速扩张。 为套利专员和 SMM 提供的所有工具 — 在一个地方. 有效链接: SMM 面板: 前往 – 推广您的社交媒体账户。 其他服务和产品: 数字商品商店(网站): 前往 商店 Telegram 机器人: 前往 – 通过 Telegram 信使方便访问商店。 虚拟号码服务: 前往 用于购买 Telegram Stars 的 Telegram 机器人: 前往 – 在 Telegram 中快速且优惠地购买 Stars。 SMM 面板: 前往 – 推广您的社交媒体账户。 我们想向您展示当前促销和特别优惠列表,用于购买我们服务的产品和服务: 1. 您可以在首次购买时使用促销代码:SOCNET(15% 折扣) 2. 获取 $1 商店余额或 10–20% 折扣——只需在我们网站注册后按以下模板填写您的用户名:"SEND ME BONUS, MY USERNAME IS..." ——您需要在我们的论坛主题中发布! 3. SMM 面板首次试用可获得 $1:只需在我们的网站(Support)提交主题为 “Get Trial Bonus” 的工单。 4. 我们的 Telegram 频道和 Stars 购买机器人中每周都会赠送 Telegram Stars! 新闻: ➡ Telegram 频道: https://t.me/accsforyou_shop ➡ WhatsApp 频道: https://chat.whatsapp.com/K8rBy500nA73z27PxgaJUw?mode=ems_copy_t ➡ Discord 服务器: https://discord.gg/y9AStFFsrh 联系方式和支持: ➡ Telegram: https://t.me/socnet_support ➡ WhatsApp: https://wa.me/79051904467 ➡ Discord: socnet_support ➡ ✉ Email: solomonbog@socnet.store
  • 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