Autor Tema: [MOD - EventCooperative] - Error  (Leído 49 veces)

canonmagic

  • Newbie
  • *
  • Mensajes: 39
  • Karma: +0/-0
    • Ver Perfil
[MOD - EventCooperative] - Error
« en: Julio 10, 2018, 01:12:58 pm »
Buenas, hoy estuve andando un poco con los eventos cooperativos "TVT,CTF,DM,etc"; encontre que al momento de que terminara el timer y lanzara el evento este no realiza el teletransporte de los inscritos al evento "ninguno de ellos". Dentro del codigo hay un "World.add(ph), (El comentario dice que es el encargado del teleport)" Pero no comprendo del todo la creacion de los Worlds asi que no pude analizar mas a fondo si estaba alli el error. Y pues sucede que al realizarse el chequeo de los jugadores dentro del evento como no hay jugadores en la zona el world se elimina automaticamente y el jugador es eliminado del array de "PlayersInEvent".

Nota: El metodo de la revision de IP tenia un pequeño error el cual aun dejando el config de CheckIp como false seguia rechazando la inscripcion. Y en el config de FlagHolder habia un numero faltante en el ID. Aqui dejo el diff

Código
### Eclipse Workspace Patch 1.0
#P C4_Mods
Index: src/main/engine/events/cooperative/EventCooperativeManager.java
===================================================================
--- src/main/engine/events/cooperative/EventCooperativeManager.java (revision 1100)
+++ src/main/engine/events/cooperative/EventCooperativeManager.java (working copy)
@@ -228,7 +228,8 @@
 
  if (isRegisterPlayerIp(ph, false))
  {
- return false;
+ registerPlayers.add(ph.getObjectId());
+ return true;
  }
 
  registerPlayers.add(ph.getObjectId());
@@ -276,7 +277,7 @@
  */
  public static boolean isRegisterPlayerIp(PlayerHolder ph, boolean removeOffline)
  {
- if (ConfigData.COOPERATIVE_CHECK_PLAYER_IP)
+ if (ConfigData.COOPERATIVE_CHECK_PLAYER_IP == false)
  {
  return false;
  }

Código
### Eclipse Workspace Patch 1.0
#P C4_GameServer
Index: dist/game/config/engine/EventsCooperative.properties
===================================================================
--- dist/game/config/engine/EventsCooperative.properties (revision 1100)
+++ dist/game/config/engine/EventsCooperative.properties (working copy)
@@ -76,7 +76,7 @@
 CtF_FlagId = 60018
 
 # Holder npc id
-Ctf_HolderId = 6001
+Ctf_HolderId = 60019
 
 # Points deliver flag
 Ctf_DeliverFlag = 30

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 144
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #1 en: Julio 10, 2018, 03:06:57 pm »
los worlds tienen un purge q se ejecuta cada 10 min, es muy loco pensar q se ejecuta justo en esos 5 seg q demora entre q se crea y se envia los players pero en alguna ocacion puede pasar, asique cambie para q no esos no se purgen y te dejoa lgun q otro cambio.

Código
Index: src/main/engine/events/cooperative/AbstractCooperative.java
===================================================================
--- src/main/engine/events/cooperative/AbstractCooperative.java (revision 1121)
+++ src/main/engine/events/cooperative/AbstractCooperative.java (working copy)
@@ -132,7 +132,7 @@
  }
  case PREPARE_TO_TELEPORT:
  {
- world = WorldData.create(WORLD_ID, true);
+ world = WorldData.create(WORLD_ID, false);
  // Create doors
  addSpawnDoor(24190001);
  addSpawnDoor(24190002);
Index: src/main/engine/events/cooperative/EventCooperativeManager.java
===================================================================
--- src/main/engine/events/cooperative/EventCooperativeManager.java (revision 1121)
+++ src/main/engine/events/cooperative/EventCooperativeManager.java (working copy)
@@ -257,31 +257,31 @@
  * <li>We check that all registered players are online.</li>
  * <li>Check the player's ip with the others registered.</li>
  * @param ph
- * @param removeOffline -> remove offline players from {@link #_registerPlayers}
+ * @param removeOffline -> remove offline players from {@link #registerPlayers}
  * @return
  */
  public static boolean isRegisterPlayerIp(PlayerHolder ph, boolean removeOffline)
  {
- if (ConfigData.COOPERATIVE_CHECK_PLAYER_IP)
+ if (removeOffline)
  {
- return false;
+ checkPlayerRegister();
  }
 
- if (removeOffline)
+ if (!ConfigData.COOPERATIVE_CHECK_PLAYER_IP)
  {
- checkPlayerRegister();
+ return false;
  }
 
  for (var objId : registerPlayers)
  {
- var pc = L2World.getInstance().getPlayer(objId);
-
  // Do not check the ip of the same player in case it was already registered
- if (ph.getObjectId() == pc.getObjectId())
+ if (ph.getObjectId() == objId)
  {
  continue;
  }
 
+ var pc = L2World.getInstance().getPlayer(objId);
+
  if (pc.getConnection().getIP().equals(ph.getInstance().getConnection().getIP()))
  {
  return true;

si no funciona tendre q sentarme a testearlo yo :s

canonmagic

  • Newbie
  • *
  • Mensajes: 39
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #2 en: Julio 12, 2018, 04:59:19 pm »
Disculpa por la tardanza anduve sin internet un par de dias... Bueno aplique el diff y nada el problema sigue igual, pero un dato que se me olvido mencionarte es que yo en medio de los chequeos que le hize introduje un print que me mandara el array de los playersOnEvent dentro del CTF al momento en que spawnea las flags. Y este me mostraba que el array en ese punto llegaba vacio; El array dudo mucho que funcione mal debido a que en el NPC al registrar va funcionando bien. Lo unico que deduzco es que el teleport al World no esta funcionando correctamente. Aun eliminando el autodelete el evento realiza un proceso de Chequeo de playersOnEvent y este al no encontrar al personaje dentro de la zona world lo asume inmediatamente como si estuviece desconectado o fuera del evento por lo cual lo elimina de la lista y debido a esto el evento queda a medias. Incluso active el evento y fui al coliseo y las puertas estaban generadas y cerradas como deberia ser. Pero las banderas de CTF o los mob de Survive no estaban spawneados... Nose si esto te servira de algo.

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 144
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #3 en: Julio 13, 2018, 12:42:23 am »
Código
Index: .
===================================================================
--- . (revision 1121)
+++ . (working copy)

Property changes on: .
___________________________________________________________________
Modified: svn:ignore
## -1 +1,2 ##
+bin
 build
Index: dist/game/config/engine/EventsCooperative.properties
===================================================================
--- dist/game/config/engine/EventsCooperative.properties (revision 1121)
+++ dist/game/config/engine/EventsCooperative.properties (working copy)
@@ -76,7 +76,7 @@
 CtF_FlagId = 60018
 
 # Holder npc id
-Ctf_HolderId = 6001
+Ctf_HolderId = 60019
 
 # Points deliver flag
 Ctf_DeliverFlag = 30
Index: src/main/data/ConfigData.java
===================================================================
--- src/main/data/ConfigData.java (revision 1121)
+++ src/main/data/ConfigData.java (working copy)
@@ -282,7 +282,7 @@
  loadPvpReward();
  loadSpreeKills();
  loadSubclassAcumulatives();
- loadCoperative();
+ loadCooperative();
  loadRandoms();
  }
 
@@ -307,7 +307,7 @@
  ALL_FLAGS_Enabled = config.getProperty("Flags_Enabled", true);
  }
 
- private static void loadCoperative()
+ private static void loadCooperative()
  {
  UtilProperties config = load(COOPERATIVE_FILE);
 
Index: src/main/engine/events/cooperative/AbstractCooperative.java
===================================================================
--- src/main/engine/events/cooperative/AbstractCooperative.java (revision 1121)
+++ src/main/engine/events/cooperative/AbstractCooperative.java (working copy)
@@ -115,9 +115,9 @@
  /**
  * Launch the events and their times.
  */
- public void start(List<Integer> playersInEvent)
+ public void start(List<Integer> list)
  {
- playersInEvent.addAll(playersInEvent);
+ playersInEvent.addAll(list);
 
  start = ThreadPoolManager.getInstance().scheduleAtFixedRate(() ->
  {
@@ -132,7 +132,7 @@
  }
  case PREPARE_TO_TELEPORT:
  {
- world = WorldData.create(WORLD_ID, true);
+ world = WorldData.create(WORLD_ID, false);
  // Create doors
  addSpawnDoor(24190001);
  addSpawnDoor(24190002);
@@ -172,12 +172,14 @@
  giveBuff(ph);
  });
 
+ // The characters are sent to a custom world
+ getPlayersInEvent().forEach(ph -> world.add(ph));
+
  // Create teams.
  createTeams();
+ // Create partys.
+ createParty();
 
- // The characters are sent to a custom world
- getPlayersInEvent().forEach(ph -> world.add(ph));
-
  // Define the next state
  setEventState(EventState.PREPARE_TO_FIGHT);
  break;
@@ -204,7 +206,6 @@
  setEventState(EventState.START);
  }
 
- createParty();
  break;
  }
  case START:
@@ -472,8 +473,9 @@
  {
  // prevent memory leak
  ph.setTeam(TeamType.NONE);
+ // remove from custom world
  world.remove(ph);
-
+ // sql query from new xyz
  removeOfflinePlayer(objId);
  }
  else
@@ -481,7 +483,7 @@
  players.add(ph);
  }
  });
-
+ players.forEach(id -> System.out.println(id.getName() + ";"));
  return players;
  }
 
@@ -534,9 +536,9 @@
  */
  public boolean playerInEvent(CharacterHolder... players)
  {
- for (var player : players)
+ for (var p : players)
  {
- if (!playersInEvent.contains(player.getObjectId()))
+ if (!playersInEvent.contains(p.getObjectId()))
  {
  return false;
  }
Index: src/main/engine/events/cooperative/EventCooperativeManager.java
===================================================================
--- src/main/engine/events/cooperative/EventCooperativeManager.java (revision 1121)
+++ src/main/engine/events/cooperative/EventCooperativeManager.java (working copy)
@@ -257,31 +257,31 @@
  * <li>We check that all registered players are online.</li>
  * <li>Check the player's ip with the others registered.</li>
  * @param ph
- * @param removeOffline -> remove offline players from {@link #_registerPlayers}
+ * @param removeOffline -> remove offline players from {@link #registerPlayers}
  * @return
  */
  public static boolean isRegisterPlayerIp(PlayerHolder ph, boolean removeOffline)
  {
- if (ConfigData.COOPERATIVE_CHECK_PLAYER_IP)
+ if (removeOffline)
  {
- return false;
+ checkPlayerRegister();
  }
 
- if (removeOffline)
+ if (!ConfigData.COOPERATIVE_CHECK_PLAYER_IP)
  {
- checkPlayerRegister();
+ return false;
  }
 
  for (var objId : registerPlayers)
  {
- var pc = L2World.getInstance().getPlayer(objId);
-
  // Do not check the ip of the same player in case it was already registered
- if (ph.getObjectId() == pc.getObjectId())
+ if (ph.getObjectId() == objId)
  {
  continue;
  }
 
+ var pc = L2World.getInstance().getPlayer(objId);
+
  if (pc.getConnection().getIP().equals(ph.getInstance().getConnection().getIP()))
  {
  return true;
@@ -299,7 +299,7 @@
  // Check the characters offline
  List<Integer> aux = registerPlayers.stream().filter(objId -> L2World.getInstance().getPlayer(objId) == null).collect(Collectors.toList());
  // Remove offline players from the registry
- aux.forEach(objId -> registerPlayers.remove(Integer.valueOf(objId)));
+ aux.forEach(objId -> registerPlayers.remove(objId));
  }
 
  // XXX VOTE -------------------------------------------------------------------------------------------------------------------
Index: src/main/engine/events/cooperative/npc/RegisterNpc.java
===================================================================
--- src/main/engine/events/cooperative/npc/RegisterNpc.java (revision 1121)
+++ src/main/engine/events/cooperative/npc/RegisterNpc.java (working copy)
@@ -74,7 +74,7 @@
  {
  var hb = new HtmlBuilder(HtmlType.HTML);
  hb.append(Html.START);
- hb.append(Html.head("COPERATIVE EVENTS"));
+ hb.append(Html.head("COOPERATIVE EVENTS"));
  hb.append("<center>");
  hb.append("<br><br><br><br>");
  if (EventCooperativeManager.unRegister(ph))
@@ -95,7 +95,7 @@
  {
  var hb = new HtmlBuilder(HtmlType.HTML);
  hb.append(Html.START);
- hb.append(Html.head("COPERATIVE EVENTS"));
+ hb.append(Html.head("COOPERATIVE EVENTS"));
  hb.append("<center>");
  hb.append("<br><br><br><br>");
 
@@ -132,7 +132,7 @@
  {
  var hb = new HtmlBuilder(HtmlType.HTML);
  hb.append(Html.START);
- hb.append(Html.head("COPERATIVE EVENTS"));
+ hb.append(Html.head("COOPERATIVE EVENTS"));
  hb.append("<center>");
  hb.append("<br><br><br><br>");
 
@@ -169,7 +169,7 @@
  {
  var hb = new HtmlBuilder(HtmlType.HTML);
  hb.append(Html.START);
- hb.append(Html.head("COPERATIVE EVENTS"));
+ hb.append(Html.head("COOPERATIVE EVENTS"));
  hb.append("<center>");
  hb.append("<br>");
 

bueno ya esta aca el fix, lo que si al finalizar el evento no me dio el reward, chequealo y me contas.

canonmagic

  • Newbie
  • *
  • Mensajes: 39
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #4 en: Julio 13, 2018, 06:20:27 pm »
Bueno ahora si lanzo bien el TP, acerca de los rewards estos solo son entregados cuando hay mas de 1 player "No tendria sentido un cooperative de 1 player  ::)", estuve probandolo y va bien hasta cierto punto, eso si... parece que el problema de el evento era por el checkafk debido a que ahora si envia al coliseo pero yo le configure 60 segs del anti-afks y me saca del evento inclusive moviendo al char en esos 60 segs, desactive el anti-afk y ya no sucedia mas ese problema "creo que es otro detalle entre los true/false". Aparte de unos detalles en los eventos como que las banderas se buguearon cuando sali del evento con ella y al deletearla en la mochila  fuera del evento causo que en el otro evento se bugueasen las banderas y dropeaba banderas cada vez que moria "Aun sin tenerla xD" pero las banderas quedaban como NPC y no pickeables ademas de que el spawn de la 2da bandera "Creo que era la red" no estaba... Yo en un rato que me desocupe reviso si puedo arreglarlo y te mando el fix

canonmagic

  • Newbie
  • *
  • Mensajes: 39
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #5 en: Julio 13, 2018, 07:23:50 pm »
Bueno, anduve echandole un ojo y ni idea ya que desconozco como funcionan los worlds, pero coloque un print nuevamente para que me devolviera los Location durante el inicializado del Anti-afk y antes de que teletransportara al evento y me di cuenta que al momento en que te envia al world no cambian los location al moverte "Queda la localizacion antes de teletransportarte"  :o, esta es la razon de que kickeara del evento  el anti afk aun moviendose dentro del coliseo

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 144
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #6 en: Julio 13, 2018, 07:33:15 pm »
Buen test...revisare los temas apena este frente a mi pc

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 144
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #7 en: Julio 14, 2018, 12:04:58 pm »
Bueno ahora si lanzo bien el TP, acerca de los rewards estos solo son entregados cuando hay mas de 1 player "No tendria sentido un cooperative de 1 player  ::)", estuve probandolo y va bien hasta cierto punto, eso si... parece que el problema de el evento era por el checkafk debido a que ahora si envia al coliseo pero yo le configure 60 segs del anti-afks y me saca del evento inclusive moviendo al char en esos 60 segs, desactive el anti-afk y ya no sucedia mas ese problema "creo que es otro detalle entre los true/false". Aparte de unos detalles en los eventos como que las banderas se buguearon cuando sali del evento con ella y al deletearla en la mochila  fuera del evento causo que en el otro evento se bugueasen las banderas y dropeaba banderas cada vez que moria "Aun sin tenerla xD" pero las banderas quedaban como NPC y no pickeables ademas de que el spawn de la 2da bandera "Creo que era la red" no estaba... Yo en un rato que me desocupe reviso si puedo arreglarlo y te mando el fix

como has salido del evento?

aca un pequeño fix para quitarte la bandera....sin test obvio xD

Código
Index: src/main/engine/events/cooperative/types/CaptureTheFlag.java
===================================================================
--- src/main/engine/events/cooperative/types/CaptureTheFlag.java (revision 1121)
+++ src/main/engine/events/cooperative/types/CaptureTheFlag.java (working copy)
@@ -22,7 +22,9 @@
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.model.actor.instance.enums.TeamType;
 import net.sf.l2j.gameserver.model.items.enums.ParpedollType;
+import net.sf.l2j.gameserver.model.items.enums.SlotType;
 import net.sf.l2j.gameserver.model.party.Party;
+import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
 
 /**
  * @author fissban
@@ -490,7 +492,12 @@
  var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);
  if (flag != null)
  {
- ph.getInstance().getInventory().equipItem(flag);
+ SlotType slot = ph.getInstance().getInventory().getSlotFromItem(flag);
+ var items = ph.getInstance().getInventory().unEquipItemInBodySlotAndRecord(slot);
+
+ InventoryUpdate iu = new InventoryUpdate();
+ iu.addItems(items);
+ ph.getInstance().sendPacket(iu);
  }
 
  var teamType = ph.getTeam();
« Última modificación: Julio 14, 2018, 12:16:43 pm por fissban »

fissban

  • Administrador
  • Full Member
  • *
  • Mensajes: 144
  • Karma: +0/-0
    • Ver Perfil
Re:[MOD - EventCooperative] - Error
« Respuesta #8 en: Julio 15, 2018, 12:08:03 pm »
ya subi todos los fix que se han echo y algun que otro que no se discutio aqui.
https://sourceforge.net/p/l2jadminsc4/code/1126/

Gracias