Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Серверная часть (https://forum.zone-game.info/forumdisplay.php?f=148)
-   -   Баг при осадах креп и артефактов (https://forum.zone-game.info/showthread.php?t=11977)

Mandrecke 11.01.2011 10:26

Баг при осадах креп и артефактов
 
Сборка AE 276, сейчас её как основу взяли AC!
Возникла проблема =( при захвате крепы или артефакта, гварды своей расы агряться, бьються и при том не хило отвечают! В npc_temlates.xml по ID NPC с такими параметрами npc_type="NON_ATTACKABLE" rank="HERO" race="ELYOS" tribe="GUARD"...я тоже Элиец!Если смотреть в tribe_relations.xml то все ровно должно быть, но нет! Может кто-нибудь знает решение проблемы или направление в котором нудно искать решение проблемы.

Wolfas 17.01.2011 08:52

Re: Баг при осадах креп и артефактов
 
Код:

Index: main/java/com/aionemu/gameserver/controllers/MonsterController.java
===================================================================
--- main/java/com/aionemu/gameserver/controllers/MonsterController.java        (revision 267)
+++ main/java/com/aionemu/gameserver/controllers/MonsterController.java        (working copy)
@@ -16,19 +16,8 @@
  */
 package com.aionemu.gameserver.controllers;
 
-import com.aionemu.gameserver.model.alliance.PlayerAlliance;
-import com.aionemu.gameserver.model.gameobjects.AionObject;
 import com.aionemu.gameserver.model.gameobjects.Monster;
-import com.aionemu.gameserver.model.gameobjects.player.Player;
-import com.aionemu.gameserver.model.group.PlayerGroup;
-import com.aionemu.gameserver.questEngine.QuestEngine;
-import com.aionemu.gameserver.questEngine.model.QuestEnv;
-import com.aionemu.gameserver.services.AllianceService;
 import com.aionemu.gameserver.services.DropService;
-import com.aionemu.gameserver.services.GroupService;
-import com.aionemu.gameserver.utils.stats.StatFunctions;
-import com.aionemu.gameserver.world.World;
-import com.aionemu.gameserver.world.WorldType;
 
 /**
  * @author ATracer, Sarynth
@@ -36,58 +25,6 @@
 public class MonsterController extends NpcController
 {
        @Override
-        public void doReward()
-        {
-                AionObject winner = getOwner().getAggroList().getMostDamage();
-               
-                if(winner == null)
-                        return;
-               
-                // TODO: Split the EXP based on overall damage.
-               
-                if (winner instanceof PlayerAlliance)
-                {
-                        AllianceService.getInstance().doReward((PlayerAlliance)winner, getOwner());
-                }
-                else if (winner instanceof PlayerGroup)
-                {
-                        GroupService.getInstance().doReward((PlayerGroup)winner, getOwner());
-                }
-                else if (((Player)winner).isInGroup())
-                {
-                        GroupService.getInstance().doReward(((Player)winner).getPlayerGroup(), getOwner());
-                }
-                else
-                {
-                        super.doReward();
-                       
-                        Player player = (Player)winner;
-                       
-                        // Exp reward
-                        long expReward = StatFunctions.calculateSoloExperienceReward(player, getOwner());
-                        player.getCommonData().addExp(expReward);
-
-                        // DP reward
-                        int currentDp = player.getCommonData().getDp();
-                        int dpReward = StatFunctions.calculateSoloDPReward(player, getOwner());
-                        player.getCommonData().setDp(dpReward + currentDp);
-                       
-                        // AP reward
-                        WorldType worldType = World.getInstance().getWorldMap(player.getWorldId()).getWorldType();
-                        if(worldType == WorldType.ABYSS)
-                        {
-                                int apReward = StatFunctions.calculateSoloAPReward(player, getOwner());
-                                player.getCommonData().addAp(apReward);
-                        }
-                       
-                        QuestEngine.getInstance().onKill(new QuestEnv(getOwner(), player, 0 , 0));
-                       
-                        // Give Drop
-                        DropService.getInstance().registerDrop(getOwner() , player, player.getLevel());                       
-                }
-        }
-       
-        @Override
        public void onRespawn()
        {
                super.onRespawn();
Index: main/java/com/aionemu/gameserver/controllers/NpcController.java
===================================================================
--- main/java/com/aionemu/gameserver/controllers/NpcController.java        (revision 267)
+++ main/java/com/aionemu/gameserver/controllers/NpcController.java        (working copy)
@@ -30,6 +30,8 @@
 import com.aionemu.gameserver.model.ChatType;
 import com.aionemu.gameserver.model.EmotionType;
 import com.aionemu.gameserver.model.TaskId;
+import com.aionemu.gameserver.model.alliance.PlayerAlliance;
+import com.aionemu.gameserver.model.gameobjects.AionObject;
 import com.aionemu.gameserver.model.gameobjects.Creature;
 import com.aionemu.gameserver.model.gameobjects.Npc;
 import com.aionemu.gameserver.model.gameobjects.Summon;
@@ -38,6 +40,7 @@
 import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler;
 import com.aionemu.gameserver.model.gameobjects.state.CreatureState;
 import com.aionemu.gameserver.model.gameobjects.stats.NpcGameStats;
+import com.aionemu.gameserver.model.group.PlayerGroup;
 import com.aionemu.gameserver.model.templates.TradeListTemplate;
 import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK;
 import com.aionemu.gameserver.network.aion.serverpackets.SM_ATTACK_STATUS;
@@ -53,8 +56,11 @@
 import com.aionemu.gameserver.questEngine.QuestEngine;
 import com.aionemu.gameserver.questEngine.model.QuestEnv;
 import com.aionemu.gameserver.restrictions.RestrictionsManager;
+import com.aionemu.gameserver.services.AllianceService;
 import com.aionemu.gameserver.services.CraftSkillUpdateService;
 import com.aionemu.gameserver.services.CubeExpandService;
+import com.aionemu.gameserver.services.DropService;
+import com.aionemu.gameserver.services.GroupService;
 import com.aionemu.gameserver.services.ItemService;
 import com.aionemu.gameserver.services.LegionService;
 import com.aionemu.gameserver.services.RespawnService;
@@ -63,7 +69,9 @@
 import com.aionemu.gameserver.services.WarehouseService;
 import com.aionemu.gameserver.utils.MathUtil;
 import com.aionemu.gameserver.utils.PacketSendUtility;
+import com.aionemu.gameserver.utils.stats.StatFunctions;
 import com.aionemu.gameserver.world.World;
+import com.aionemu.gameserver.world.WorldType;
 
 /**
  * This class is for controlling Npc's
@@ -103,6 +111,58 @@
        }
 
        @Override
+        public void doReward()
+        {
+                AionObject winner = getOwner().getAggroList().getMostDamage();
+
+                if(winner == null)
+                        return;
+
+                // TODO: Split the EXP based on overall damage.
+
+                if (winner instanceof PlayerAlliance)
+                {
+                        AllianceService.getInstance().doReward((PlayerAlliance)winner, getOwner());
+                }
+                else if (winner instanceof PlayerGroup)
+                {
+                        GroupService.getInstance().doReward((PlayerGroup)winner, getOwner());
+                }
+                else if (((Player)winner).isInGroup())
+                {
+                        GroupService.getInstance().doReward(((Player)winner).getPlayerGroup(), getOwner());
+                }
+                else
+                {
+                        super.doReward();
+
+                        Player player = (Player)winner;
+
+                        // Exp reward
+                        long expReward = StatFunctions.calculateSoloExperienceReward(player, getOwner());
+                        player.getCommonData().addExp(expReward);
+
+                        // DP reward
+                        int currentDp = player.getCommonData().getDp();
+                        int dpReward = StatFunctions.calculateSoloDPReward(player, getOwner());
+                        player.getCommonData().setDp(dpReward + currentDp);
+
+                        // AP reward
+                        WorldType worldType = World.getInstance().getWorldMap(player.getWorldId()).getWorldType();
+                        if(worldType == WorldType.ABYSS)
+                        {
+                                int apReward = StatFunctions.calculateSoloAPReward(player, getOwner());
+                                player.getCommonData().addAp(apReward);
+                        }
+
+                        QuestEngine.getInstance().onKill(new QuestEnv(getOwner(), player, 0 , 0));
+
+                        // Give Drop
+                        DropService.getInstance().registerDrop(getOwner() , player, player.getLevel());
+                }
+        }
+
+        @Override
        public void onRespawn()
        {
                super.onRespawn();
Index: main/java/com/aionemu/gameserver/services/AllianceService.java
===================================================================
--- main/java/com/aionemu/gameserver/services/AllianceService.java        (revision 267)
+++ main/java/com/aionemu/gameserver/services/AllianceService.java        (working copy)
@@ -29,7 +29,7 @@
 import com.aionemu.gameserver.model.alliance.PlayerAllianceEvent;
 import com.aionemu.gameserver.model.alliance.PlayerAllianceMember;
 import com.aionemu.gameserver.model.gameobjects.Creature;
-import com.aionemu.gameserver.model.gameobjects.Monster;
+import com.aionemu.gameserver.model.gameobjects.Npc;
 import com.aionemu.gameserver.model.gameobjects.player.Player;
 import com.aionemu.gameserver.model.gameobjects.player.RequestResponseHandler;
 import com.aionemu.gameserver.model.group.PlayerGroup;
@@ -580,7 +580,7 @@
          * @param winner
          * @param owner
          */
-        public void doReward(PlayerAlliance alliance, Monster owner)
+        public void doReward(PlayerAlliance alliance, Npc owner)
        {
                // TODO: Merge with group type do-reward. (Near identical to GroupService doReward code.)
                // Plus complete rewrite of drop system and exp system.
Index: main/java/com/aionemu/gameserver/services/GroupService.java
===================================================================
--- main/java/com/aionemu/gameserver/services/GroupService.java        (revision 267)
+++ main/java/com/aionemu/gameserver/services/GroupService.java        (working copy)
@@ -259,7 +259,7 @@
          *
          * @param player
          */
-        public void doReward(PlayerGroup group, Monster owner)
+        public void doReward(PlayerGroup group, Npc owner)
        {
                // Find Group Members and Determine Highest Level
                List<Player> players = new ArrayList<Player>();
Index: main/java/com/aionemu/gameserver/world/WorldMapType.java
===================================================================
--- main/java/com/aionemu/gameserver/world/WorldMapType.java        (revision 267)
+++ main/java/com/aionemu/gameserver/world/WorldMapType.java        (working copy)
@@ -20,6 +20,7 @@
 {
        // Asmodea
        PANDAEMONIUM(120010000),
+        MARCHUTAN(120020000),
        ISHALGEN(220010000),
        MORHEIM(220020000),
        ALTGARD(220030000),
@@ -28,14 +29,21 @@
 
        // Elysia
        SANCTUM(110010000),
+        KAISINEL(110020000),
        POETA(210010000),
        VERTERON(210030000),
        ELTNEN(210020000),
        HEIRON(210040000),
        THEOMOBOS(210060000),
+       
+        // Balaurea
+        INGGISON(210050000),
+        GELKMAROS(220070000),       
+        SILENTERA_CANYON(600010000),
 
        // Prison
        PRISON(510010000),
+        DF_PRISON(520010000),
 
        RESHANTA(400010000),
 
@@ -60,7 +68,27 @@
        DRAUPNIR_CAVE(320080000),
        FIRE_TEMPLE(320100000),
        ALQUIMIA(320110000),
-        ADMA_STRONGHOLD(320130000);
+        ADMA_STRONGHOLD(320130000),
+        TEMPLE_UP(300150000),
+        TEMPLE_LOW (300160000),
+        CATACOMBS(300170000),
+        ELIM (300190000),
+        NOVICE(300200000),
+        DREDGION_02(300210000),
+        DEBRIS_OF_ABYSS(300220000),
+        CROMEDE(300230000),
+        ABPROD3(320140000),
+        DF1B(320060000),
+        SPACE(320070000),
+        DC1_ARENA(320090000),
+        DC1_ARENA_3F(320120000),
+       
+        //Test Map
+        TEST_BASIC(900020000),
+        TEST_SERVER(900030000),
+        TEST_GIANTMONSTER(900100000),
+        HOUSING_BARRACK(900110000);
+       
 
        private final int worldId;
 
Index: main/java/com/aionemu/gameserver/world/WorldType.java
===================================================================
--- main/java/com/aionemu/gameserver/world/WorldType.java        (revision 267)
+++ main/java/com/aionemu/gameserver/world/WorldType.java        (working copy)
@@ -24,6 +24,7 @@
 {
        ASMODAE,
        ELYSEA,
+        BALAUREA,
        ABYSS,
        PRISON,
        NONE

Вот капайте, объясню взять и применить нельзя, патч не для этой сборки..

Но разобрать можно

x714 22.01.2011 19:24

Re: Баг при осадах креп и артефактов
 
Спасибо Wolfas за информацию.

Благодаря вашему посту, внес изменения в AE276. Однако как агрились гварды так и агрятся.

Брал уже npc_temlates.xml и tribe_relations.xml от сборок где все нормально, но все безуспешно.

Буду очень признателен, если укажите направления куда теперь копать.

flashman 22.01.2011 21:08

Re: Баг при осадах креп и артефактов
 
Дело не в ядре, а в файле спавна осад, там прописывается спавн для двух режимов в которых может находится крепость:
- осада возможна (тег в файле siege_guard)
- осада невозможна ( тег в файле peace_guard)
Плюс ко всему, все мобы которые спавняться в обоих режимах должны имень тип NON_ATTACKABLE в файле npc_templates.xml, кроме мобов(гвардов) которые спавняться если крепость пренадлежит баллаурам, все гварды баллауров должны быть ATTACKABLE, иначе крепость на захватить.
Как определить кто для какой рассы спавнится:
- тег npcid_dr - спавн гвардов для баллауров
- тег npcid_da - спавн гвардов для асмо
- тег npcid_li - спавн гвардов для элийцев
А также не все мобы подходят для спавна в определённых режимах (хз почему), тут надо опытным путём определить какие мобы подходят.
Вот можете попробовать:
часть кода для крепы Серного дерева:
Свернуть ↑Развернуть ↓

Для проверки сделайте резрвную копию своего файла, потом по id крепы найдите в файле siege_spawns.xml (gameserver\data\static_data\siege) и замените на код. Да и что бы всё работало необходимо как я уже говорил чтобы все гварды кроме гвардов баллауров имели тип NON_ATTACKABLE.


Текущее время: 11:54. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot