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

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..

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.




  • Posts

    • 我们计划在我们的Telegram频道为3000名订阅者举办大型竞赛和抽奖活动。 订阅并获取我们项目的最新消息、更新和变动:竞赛、抽奖、新产品、折扣、优惠码以及更多内容! 在我们的竞赛和抽奖活动中,顶级合作伙伴也可以参与,这一定会引起您的关注! ➡ Telegram频道: https://t.me/accsforyou_shop✅ 链接: 数字商品商店 (网站): 前往 购买Telegram Stars的Telegram机器人: 前往 SMM面板: 前往 – 推广您的社交媒体账户。 商店Telegram机器人: 前往 我们为您呈现在本平台购买产品和服务的最新促销与特别优惠: 1. 使用促销码OCTOBER2025(8%折扣)即可在10月通过我们的网站或机器人购物!您也可以使用促销码SOCNET(15%折扣)完成首次购买。 2. 注册后只需按照以下模板写下您的用户名即可获得1美元账户余额或10–20%的折扣:"SEND ME BONUS, MY USERNAME IS..." – 需要在我们的论坛帖子中发布! 3. 第一次试用SMM面板即可获得1美元:只需在我们的网站(支持)提交主题为“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 ✅ ➡ ✉ 邮箱: solomonbog@socnet.store ✅
    • 我们计划在我们的Telegram频道为3000名订阅者举办大型竞赛和抽奖活动。 订阅并获取我们项目的最新消息、更新和变动:竞赛、抽奖、新产品、折扣、优惠码以及更多内容! 在我们的竞赛和抽奖活动中,顶级合作伙伴也可以参与,这一定会引起您的关注! ➡ Telegram频道: https://t.me/accsforyou_shop✅ 链接: 数字商品商店 (网站): 前往 购买Telegram Stars的Telegram机器人: 前往 SMM面板: 前往 – 推广您的社交媒体账户。 商店Telegram机器人: 前往 我们为您呈现在本平台购买产品和服务的最新促销与特别优惠: 1. 使用促销码OCTOBER2025(8%折扣)即可在10月通过我们的网站或机器人购物!您也可以使用促销码SOCNET(15%折扣)完成首次购买。 2. 注册后只需按照以下模板写下您的用户名即可获得1美元账户余额或10–20%的折扣:"SEND ME BONUS, MY USERNAME IS..." – 需要在我们的论坛帖子中发布! 3. 第一次试用SMM面板即可获得1美元:只需在我们的网站(支持)提交主题为“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 ✅ ➡ ✉ 邮箱: solomonbog@socnet.store ✅
    • 我们计划在我们的Telegram频道为3000名订阅者举办大型竞赛和抽奖活动。 订阅并获取我们项目的最新消息、更新和变动:竞赛、抽奖、新产品、折扣、优惠码以及更多内容! 在我们的竞赛和抽奖活动中,顶级合作伙伴也可以参与,这一定会引起您的关注! ➡ Telegram频道: https://t.me/accsforyou_shop✅ 链接: 数字商品商店 (网站): 前往 购买Telegram Stars的Telegram机器人: 前往 SMM面板: 前往 – 推广您的社交媒体账户。 商店Telegram机器人: 前往 我们为您呈现在本平台购买产品和服务的最新促销与特别优惠: 1. 使用促销码OCTOBER2025(8%折扣)即可在10月通过我们的网站或机器人购物!您也可以使用促销码SOCNET(15%折扣)完成首次购买。 2. 注册后只需按照以下模板写下您的用户名即可获得1美元账户余额或10–20%的折扣:"SEND ME BONUS, MY USERNAME IS..." – 需要在我们的论坛帖子中发布! 3. 第一次试用SMM面板即可获得1美元:只需在我们的网站(支持)提交主题为“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 ✅ ➡ ✉ 邮箱: solomonbog@socnet.store ✅
    • 我们计划在我们的Telegram频道为3000名订阅者举办大型竞赛和抽奖活动。 订阅并获取我们项目的最新消息、更新和变动:竞赛、抽奖、新产品、折扣、优惠码以及更多内容! 在我们的竞赛和抽奖活动中,顶级合作伙伴也可以参与,这一定会引起您的关注! ➡ Telegram频道: https://t.me/accsforyou_shop✅ 链接: 数字商品商店 (网站): 前往 购买Telegram Stars的Telegram机器人: 前往 SMM面板: 前往 – 推广您的社交媒体账户。 商店Telegram机器人: 前往 我们为您呈现在本平台购买产品和服务的最新促销与特别优惠: 1. 使用促销码OCTOBER2025(8%折扣)即可在10月通过我们的网站或机器人购物!您也可以使用促销码SOCNET(15%折扣)完成首次购买。 2. 注册后只需按照以下模板写下您的用户名即可获得1美元账户余额或10–20%的折扣:"SEND ME BONUS, MY USERNAME IS..." – 需要在我们的论坛帖子中发布! 3. 第一次试用SMM面板即可获得1美元:只需在我们的网站(支持)提交主题为“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 ✅ ➡ ✉ 邮箱: 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