Mensajes recientes

Páginas: [1] 2 3 4 5 6 ... 10
1
Issues / Re:[Skill - Treasure Chest Key] - Error
« Último mensaje por canonmagic en Hoy a las 02:35:15 am »
Bueno, despues de un rato me consegui que tambien habia un error en todos los skills que consumen items; asi que comenze a buscar por alli y logre solucionarlo y voila; las llaves ahora si funcionan bien... dos pajaros de un tiro ;D; dejo el diff:

Esto estaba sobrando
Código
### Eclipse Workspace Patch 1.0
#P C4_GameServer
Index: java/net/sf/l2j/gameserver/handler/item/ItemChestKey.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/item/ItemChestKey.java (revision 1100)
+++ java/net/sf/l2j/gameserver/handler/item/ItemChestKey.java (working copy)
@@ -78,8 +78,6 @@
  return;
  }
 
- // destroy key
- activeChar.getInventory().destroyItem("open chest", item, activeChar, false);
  // box key skill
  activeChar.useMagic(SkillData.getInstance().getSkill(2229, item.getId() - 6664), false, false);
  }

Aqui esta el error en el consumo de items
Código
### Eclipse Workspace Patch 1.0
#P C4_GameServer
Index: java/net/sf/l2j/gameserver/model/actor/L2Character.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/L2Character.java (revision 1100)
+++ java/net/sf/l2j/gameserver/model/actor/L2Character.java (working copy)
@@ -4225,11 +4225,11 @@
  }
 
  // Consume Items if necessary and Send the Server->Client packet InventoryUpdate with Item modification to all the L2Character
- if ((skill.getItemConsume() > 0) && (skill.getItemConsume() > 0) && (this instanceof L2PcInstance))
+ if (skill.getItemConsume() > 0 && this instanceof L2PcInstance)
  {
  L2PcInstance p = (L2PcInstance) this;
-
- p.getInventory().destroyItemByItemId("Consume", skill.getItemConsume(), skill.getItemConsume(), null, false);
+ p.getInventory().destroyItemByItemId("Consume", skill.getItemConsumeId(), skill.getItemConsume(), null, false);
  }
 
  // Launch the magic skill in order to calculate its effects
2
Issues / [Skill - Treasure Chest Key] - Error
« Último mensaje por canonmagic en Julio 18, 2018, 07:28:43 pm »
Buenas, hace rato que ando buscando como solucionarlo pero no llego al punto donde sucede el error. Este skill encargado de activar los Treasure chest para que estos cambien su ID y den los drops especiales no esta funcionando, al utilizarla independientemente de la cantidad de llaves que se tenga y de que sea o no del nivel del cofre; al usar la llave envia un mensaje con "Incorrect Item Count", consumiendose todas las llaves que tengas. Estuve revisandolo un buen rato y parece que el problema no es directamente sobre su handler ni en el AI del cofre y quizas tampoco en las "Checkcondition" ya que aqui no hay ninguna respuesta con este tipo de mensaje pienso que quiza este en un punto intermedio entre estos "El cual desconozco".
3
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por canonmagic en Julio 18, 2018, 03:44:37 pm »
Bueno, hoy tuve un poco de tiempo libre y pude revisar mas cuidadosamente el script del evento CTF, encontre los problemas de los spawns y alguna que otra cosa y logre solucionarlo y ya esta funcional la adicion que le hize de la posibilidad de recuperar la bandera "si un enemigo la toma del spawn y este es asesinado dropea la bandera; y luego alguien del mismo equipo de la bandera dropeada podra interactuar con ella y que regrese al spawn". Aqui te dejo el diff

Código
### Eclipse Workspace Patch 1.0
#P C4_Mods
Index: src/main/engine/events/cooperative/types/CaptureTheFlag.java
===================================================================
--- src/main/engine/events/cooperative/types/CaptureTheFlag.java (revision 1100)
+++ src/main/engine/events/cooperative/types/CaptureTheFlag.java (working copy)
@@ -1,16 +1,3 @@
-/*
- * L2J_EngineMods
- * Engine developed by Fissban.
- *
- * This software is not free and you do not have permission
- * to distribute without the permission of its owner.
- *
- * This software is distributed only under the rule
- * of www.devsadmins.com.
- *
- * Contact us with any questions by the media
- * provided by our web or email marco.faccio@gmail.com
- */
 package main.engine.events.cooperative.types;
 
 import java.util.HashMap;
@@ -36,6 +23,7 @@
 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.party.Party;
+import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
 
 /**
  * @author fissban
@@ -52,6 +40,9 @@
  private static Map<String, Integer> playerPoints = new ConcurrentHashMap<>();
  /** Flags and holders instances */
  private static Map<Integer, NpcHolder> flagAndHolders = new HashMap<>();
+ /** Flag position changes */
+ private static boolean FlagMovedBlue = false;
+ private static boolean FlagMovedRed = false;
 
  public CaptureTheFlag()
  {
@@ -326,8 +317,65 @@
  if (ph.getTeam() != flag.getTeam())
  {
  equipFlag(ph, flag);
+ switch (ph.getTeam())
+ {
+ case BLUE:
+ setFlagMovedRed(true);
+ break;
+ case RED:
+ setFlagMovedBlue(true);
+ break;
+ }
  return true;
  }
+ if (ph.getTeam() == flag.getTeam())
+ {
+ switch (ph.getTeam())
+ {
+ case RED:
+ if (FlagMovedRed == true)
+ {
+ flagAndHolders.remove(flag.getObjectId());
+ // stop flag respawn
+ if (flag.getInstance().getSpawn() != null)
+ {
+ flag.getInstance().getSpawn().stopRespawn();
+ }
+ // remove flag from world
+ flag.getInstance().deleteMe();
+
+ // now the red team flag its returned to his spawn
+ var xRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getX();
+ var yRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
+ var zRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();
+ addSpawnNpc(ConfigData.CTF_FLAG_ID, xRed, yRed, zRed, 0, 0, 0, TeamType.RED);
+ UtilMessage.sendAnnounceMsg("The red team flag has been returned!", getPlayersInEvent());
+ setFlagMovedRed(false);
+ }
+ break;
+ case BLUE:
+ if (FlagMovedBlue == true)
+ {
+ flagAndHolders.remove(flag.getObjectId());
+ // stop flag respawn
+ if (flag.getInstance().getSpawn() != null)
+ {
+ flag.getInstance().getSpawn().stopRespawn();
+ }
+ // remove flag from world
+ flag.getInstance().deleteMe();
+
+ // now the blue team flag its returned to his spawn
+ var xBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getX();
+ var yBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getY();
+ var zBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getZ();
+ addSpawnNpc(ConfigData.CTF_FLAG_ID, xBlue, yBlue, zBlue, 0, 0, 0, TeamType.BLUE);
+ UtilMessage.sendAnnounceMsg("The blue team flag has been returned!", getPlayersInEvent());
+ setFlagMovedBlue(false);
+ }
+ break;
+ }
+ }
  return false;
  }
 
@@ -339,6 +387,15 @@
  {
  unequipFlag(ph, false);
 
+ switch (ph.getTeam())
+ {
+ case BLUE:
+ setFlagMovedRed(false);
+ break;
+ case RED:
+ setFlagMovedBlue(false);
+ break;
+ }
  increasePlayerPoint(ph, ConfigData.CTF_POINT_DELIVER_FLAG);
 
  switch (ph.getTeam())
@@ -361,6 +418,22 @@
  return true;
  }
 
+ @Override
+ public void onUnequip(CharacterHolder player)
+ {
+ if (player instanceof PlayerHolder)
+ {
+ var ph = (PlayerHolder) player;
+ var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);
+
+ if (flag == null && ph.hasFlag())
+ {
+ // drop flag
+ unequipFlag(ph, true);
+ }
+ }
+ }
+
  // XXX MISC ------------------------------------------------------------------------------------------------------------
 
  @Override
@@ -370,9 +443,9 @@
  var yRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
  var zRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();
 
- var xBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getX();
- var yBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
- var zBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();
+ var xBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getX();
+ var yBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getY();
+ var zBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getZ();
 
  // Flag spawn
  addSpawnNpc(ConfigData.CTF_FLAG_ID, xBlue, yBlue, zBlue, 0, 0, 0, TeamType.BLUE);
@@ -389,7 +462,16 @@
  getPlayersInEvent().stream().filter(ph -> ph.getInstance().getParty() != null).forEach(ph -> ph.getInstance().getParty().removePartyMember(ph.getInstance(), true));
 
  // Unspawn all flags and holders
- flagAndHolders.values().stream().filter(npc -> npc.getInstance() != null).forEach(npc -> npc.getInstance().deleteMe());
+ flagAndHolders.values().stream().filter(npc -> npc.getInstance() != null).forEach(npc ->
+ {
+ // stop respawn
+ if (npc.getInstance().getSpawn() != null)
+ {
+ npc.getInstance().getSpawn().stopRespawn();
+ }
+ // remove from world
+ npc.getInstance().deleteMe();
+ });
 
  // Generate ranking
  var pointsOrdered = new LinkedHashMap<String, Integer>();
@@ -397,10 +479,7 @@
  // Send html showing the points of each player
  // order the list according to your scores
  var LIMIT = 10;
- playerPoints.entrySet().stream().sorted(Entry.<String, Integer> comparingByValue().reversed()).limit(LIMIT).forEach(e ->
- {
- pointsOrdered.put(e.getKey(), e.getValue());
- });
+ playerPoints.entrySet().stream().sorted(Entry.<String, Integer> comparingByValue().reversed()).limit(LIMIT).forEach(e -> pointsOrdered.put(e.getKey(), e.getValue()));
 
  // Generate the html of the ranking
  var hb = Html.eventRanking(pointsOrdered);
@@ -462,16 +541,23 @@
  {
  var teamType = ph.getTeam();
 
- flagAndHolders.get(npc.getObjectId()).getInstance().deleteMe();
- flagAndHolders.remove(npc.getObjectId());
+ // get and remove flag from memory
+ var flag = flagAndHolders.remove(npc.getObjectId());
+ // stop flag respawn
+ if (flag.getInstance().getSpawn() != null)
+ {
+ flag.getInstance().getSpawn().stopRespawn();
+ }
+ // remove flag from world
+ flag.getInstance().deleteMe();
 
- ph.setHasFlag(true);
  // Equip flag
  var flagItem = ItemData.getInstance().createItem("", FLAG_ITEM, 1, ph.getInstance(), null);
  if (flagItem != null)
  {
  ph.getInstance().getInventory().equipItem(flagItem);
  }
+ ph.setHasFlag(true);
  // Send Message
  UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " team has taken the flag!", getPlayersInEvent());
  }
@@ -482,6 +568,7 @@
  */
  private void unequipFlag(PlayerHolder ph, boolean drop)
  {
+ ph.setHasFlag(false);
  // Create new spawn
  switch (ph.getTeam())
  {
@@ -503,13 +590,16 @@
  var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);
  if (flag != null)
  {
- ph.getInstance().getInventory().equipItem(flag);
+ var items = ph.getInstance().getInventory().unEquipItemInSlotAndRecord(ParpedollType.RHAND);
+
+ var iu = new InventoryUpdate();
+ iu.addItems(items);
+ ph.getInstance().sendPacket(iu);
  }
-
  var teamType = ph.getTeam();
  if (drop)
  {
- UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " has drop flag!", getPlayersInEvent());
+ UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " team has drop flag!", getPlayersInEvent());
  }
  else
  {
@@ -532,4 +622,16 @@
  {
  UtilMessage.sendAnnounceMsg("BLUE " + pointsBlue + " | " + pointsRed + " RED", getPlayersInEvent());
  }
-}
+
+ private static void setFlagMovedBlue(boolean bool)
+ {
+ FlagMovedBlue = bool;
+ return;
+ }
+
+ private static void setFlagMovedRed(boolean bool)
+ {
+ FlagMovedRed = bool;
+ return;
+ }
+}
\ No newline at end of file

Lo unico que quedaria pendiente es la funcionalidad del anti-afk y su problema de la recuperacion de locations.
4
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por fissban en Julio 17, 2018, 01:31:08 pm »
Creo que tendre que sentarme a testearlo yo no? jeje

Aqui te dejo como lo tengo yo actualmente al ctf.

Código
package main.engine.events.cooperative.types;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

import main.data.ConfigData;
import main.engine.events.cooperative.AbstractCooperative;
import main.holders.objects.CharacterHolder;
import main.holders.objects.NpcHolder;
import main.holders.objects.PlayerHolder;
import main.util.Util;
import main.util.UtilInventory;
import main.util.UtilMessage;
import main.util.builders.html.Html;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.data.ItemData;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.L2Playable;
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.party.Party;
import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;

/**
 * @author fissban
 */
public class CaptureTheFlag extends AbstractCooperative
{
/** FlagItem */
private static final int FLAG_ITEM = 6718;
/** Points of blue team */
private static volatile int pointsBlue = 0;
/** Points of red team */
private static volatile int pointsRed = 0;
/** Points of each player */
private static Map<String, Integer> playerPoints = new ConcurrentHashMap<>();
/** Flags and holders instances */
private static Map<Integer, NpcHolder> flagAndHolders = new HashMap<>();

public CaptureTheFlag()
{
super();
}

@Override
public boolean canAttack(CharacterHolder attacker, CharacterHolder victim)
{
if (Util.areObjectType(L2PcInstance.class, attacker, victim))
{
// Check if the 2 players are participating in the event.
if (playerInEvent(attacker, victim))
{
// Check the team of each character.
if (attacker.getTeam() != victim.getTeam())
{
return true;
}
}
}

return false;
}

@Override
public void createParty()
{
// Leader Party Blue
PlayerHolder lpb = null;
// Leader Party Red
PlayerHolder lpr = null;

if (getPlayersInEvent().size() <= 3)
{
return;
}

for (var ph : getPlayersInEvent())
{
if (ph == null)
{
continue;
}

// Remove from old party
if (ph.getInstance().getParty() != null)
{
ph.getInstance().getParty().removePartyMember(ph.getInstance(), true);
}

PlayerHolder leader = null;

switch (ph.getTeam())
{
case BLUE:
leader = lpb;
break;
case RED:
leader = lpr;
break;
}

// If there is no leader yet, we assign one
if (leader == null)
{
leader = ph;
continue;
}

// If the party exceeds the limit of members we start the creation of a new one
if (leader != null && leader.getInstance().getParty() != null && leader.getInstance().getParty().getMemberCount() >= 7)
{
switch (ph.getTeam())
{
case BLUE:
lpb = ph;
continue;
case RED:
lpr = ph;
continue;
}
}

// Created the party
if (leader.getInstance().getParty() == null)
{
Party party = new Party(leader.getInstance());
party.addPartyMember(ph.getInstance());
}
// Added a new party member
else
{
leader.getInstance().getParty().addPartyMember(ph.getInstance());
}
}
}

@Override
public void createTeams()
{
var lastTeam = TeamType.BLUE;

for (var ph : getPlayersInEvent())
{
// Save the character's location before being sent to the event.
ph.setLastLoc(ph.getInstance().getX(), ph.getInstance().getY(), ph.getInstance().getZ());

switch (lastTeam)
{
case RED:
// Teleport
ph.getInstance().teleToLocation(ConfigData.TVT_SPAWN_TEAM_BLUE, ConfigData.TVT_RADIUS_SPAWN);
// Set team
ph.setTeam(TeamType.BLUE);
// Set last team
lastTeam = TeamType.BLUE;
break;
case BLUE:
// Teleport
ph.getInstance().teleToLocation(ConfigData.TVT_SPAWN_TEAM_RED, ConfigData.TVT_RADIUS_SPAWN);
// Set el team
ph.setTeam(TeamType.RED);
// Set last team
lastTeam = TeamType.RED;
break;
default:
// Never happens!
break;
}
}
}

@Override
public void giveRewards()
{
// Check the winning team.
var teamWinner = TeamType.NONE;

// Tied teams
if (pointsBlue == pointsRed)
{
//
}
else if (pointsBlue > pointsRed)
{
teamWinner = TeamType.BLUE;
}
else
{
teamWinner = TeamType.RED;
}

if (teamWinner == TeamType.NONE)
{
UtilMessage.sendAnnounceMsg("The event ends in a draw!", getPlayersInEvent());
}
else
{
UtilMessage.sendAnnounceMsg("The team " + teamWinner.name() + " was the winner!", getPlayersInEvent());

for (var ph : getPlayersInEvent())
{
// Prizes are awarded to the winning team.
if (ph.getTeam() == teamWinner)
{
ConfigData.TVT_REWARDS.forEach(rh -> UtilInventory.giveItems(ph, rh.getRewardId(), rh.getRewardCount(), 0));
}
}
}
}

// LISTENERS -----------------------------------------------------------------------------------------

/**
* @param ph
* @return
*/
@Override
public boolean onExitWorld(PlayerHolder ph)
{
if (ph.hasFlag())
{
unequipFlag(ph, true);
}

return super.onExitWorld(ph);
}

@Override
public void onDeath(CharacterHolder character)
{
// Check if the character is inside the event
if (!playerInEvent(character))
{
return;
}

var ph = character.getActingPlayer();

if (ph.hasFlag())
{
unequipFlag(ph, true);
}

var death = ThreadPoolManager.getInstance().schedule(() ->
{
deathTasks.remove(character.getObjectId());

// Revive
revivePlayer(ph);
// Heal
healToMax(ph);
// Buff
giveBuff(ph);

}, 10 * 1000); // 10 sec

deathTasks.put(character.getObjectId(), death);
}

@Override
public void onKill(CharacterHolder killer, CharacterHolder victim, boolean isPet)
{
if (Util.areObjectType(L2Playable.class, killer, victim))
{
var killerPc = killer.getActingPlayer();
var victimPc = victim.getActingPlayer();

if (playerInEvent(killerPc, victimPc))
{
// Increase the points of each team
if (killerPc.getTeam() == TeamType.BLUE)
{
pointsBlue += ConfigData.CTF_POINT_KILL_PLAYER;
}
else
{
pointsRed += ConfigData.CTF_POINT_KILL_PLAYER;
}

// Send all the characters of the event the amount of points.
sendPointsToAllParticipant();
// Increase the points of each player
increasePlayerPoint(killerPc, ConfigData.CTF_POINT_KILL_PLAYER);
}
}
}

@Override
public boolean onInteract(PlayerHolder ph, CharacterHolder character)
{
if (!Util.areObjectType(L2Npc.class, character))
{
return false;
}

// Check if the player participates in the event.
if (!playerInEvent(ph))
{
return false;
}

var flag = (NpcHolder) character;

if (flag.getId() == ConfigData.CTF_FLAG_ID)
{
if (ph.hasFlag())
{
return false;
}
if (ph.getTeam() != flag.getTeam())
{
equipFlag(ph, flag);
return true;
}
return false;
}

if (flag.getId() == ConfigData.CTF_HOLDER_ID)
{
if (ph.hasFlag())
{
if (ph.getTeam() == flag.getTeam())
{
unequipFlag(ph, false);

increasePlayerPoint(ph, ConfigData.CTF_POINT_DELIVER_FLAG);

switch (ph.getTeam())
{
case BLUE:
pointsBlue += ConfigData.CTF_POINT_DELIVER_FLAG;
break;
case RED:
pointsRed += ConfigData.CTF_POINT_DELIVER_FLAG;
break;
}

sendPointsToAllParticipant();
return true;
}
}
return false;
}

return true;
}

@Override
public void onUnequip(CharacterHolder player)
{
if (player instanceof PlayerHolder)
{
var ph = (PlayerHolder) player;
var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);

if (flag == null && ph.hasFlag())
{
// drop flag
unequipFlag(ph, true);
}
}
}

// XXX MISC ------------------------------------------------------------------------------------------------------------

@Override
public void onStart()
{
var xRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getX();
var yRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
var zRed = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();

var xBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getX();
var yBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
var zBlue = ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();

// Flag spawn
addSpawnNpc(ConfigData.CTF_FLAG_ID, xBlue, yBlue, zBlue, 0, 0, 0, TeamType.BLUE);
addSpawnNpc(ConfigData.CTF_FLAG_ID, xRed, yRed, zRed, 0, 0, 0, TeamType.RED);
// Holder spawn
addSpawnNpc(ConfigData.CTF_HOLDER_ID, xBlue - 100, yBlue, zBlue, 0, 0, 0, TeamType.BLUE);// FIXME chequear el -100 si queda bien
addSpawnNpc(ConfigData.CTF_HOLDER_ID, xRed - 100, yRed, zRed, 0, 0, 0, TeamType.RED);// FIXME chequear el -100 si queda bien
}

@Override
public void onEnd()
{
// Cancel party
getPlayersInEvent().stream().filter(ph -> ph.getInstance().getParty() != null).forEach(ph -> ph.getInstance().getParty().removePartyMember(ph.getInstance(), true));

// Unspawn all flags and holders
flagAndHolders.values().stream().filter(npc -> npc.getInstance() != null).forEach(npc ->
{
// stop respawn
if (npc.getInstance().getSpawn() != null)
{
npc.getInstance().getSpawn().stopRespawn();
}
// remove from world
npc.getInstance().deleteMe();
});

// Generate ranking
var pointsOrdered = new LinkedHashMap<String, Integer>();

// Send html showing the points of each player
// order the list according to your scores
var LIMIT = 10;
playerPoints.entrySet().stream().sorted(Entry.<String, Integer> comparingByValue().reversed()).limit(LIMIT).forEach(e -> pointsOrdered.put(e.getKey(), e.getValue()));

// Generate the html of the ranking
var hb = Html.eventRanking(pointsOrdered);
// Send the html to each character in the event
sendHtml(null, hb, getPlayersInEvent());

// Clear
flagAndHolders.clear();
playerPoints.clear();
pointsBlue = 0;
pointsRed = 0;
}

/**
* Revive a character and send it to the spawn point according to his team
* @param ph
*/
private void revivePlayer(PlayerHolder ph)
{
if (!ph.getInstance().isDead())
{
return;
}

ph.getInstance().doRevive();

switch (ph.getTeam())
{
case BLUE:
ph.getInstance().teleToLocation(ConfigData.CTF_SPAWN_TEAM_BLUE, ConfigData.CTF_RADIUS_SPAWN);
break;
case RED:
ph.getInstance().teleToLocation(ConfigData.CTF_SPAWN_TEAM_RED, ConfigData.CTF_RADIUS_SPAWN);
break;
}
}

/**
* Increase by 1 the number of points of a character
* @param ph
*/
private static void increasePlayerPoint(PlayerHolder ph, int p)
{
if (!playerPoints.containsKey(ph.getName()))
{
playerPoints.put(ph.getName(), 0);
}

int points = playerPoints.get(ph.getName()) + p;
playerPoints.put(ph.getName(), points);
}

/**
* Equip a character with a flag.
* @param ph
* @param flagTeam
*/
private static void equipFlag(PlayerHolder ph, NpcHolder npc)
{
var teamType = ph.getTeam();

// get and remove flag from memory
var flag = flagAndHolders.remove(npc.getObjectId());
// stop flag respawn
if (flag.getInstance().getSpawn() != null)
{
flag.getInstance().getSpawn().stopRespawn();
}
// remove flag from world
flag.getInstance().deleteMe();

ph.setHasFlag(true);
// Equip flag
var flagItem = ItemData.getInstance().createItem("", FLAG_ITEM, 1, ph.getInstance(), null);
if (flagItem != null)
{
ph.getInstance().getInventory().equipItem(flagItem);
}
// Send Message
UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " team has taken the flag!", getPlayersInEvent());
}

/**
* We remove the flag of a character.
* @param ph
*/
private void unequipFlag(PlayerHolder ph, boolean drop)
{
// Create new spawn
switch (ph.getTeam())
{
case BLUE:
var xRed = drop ? ph.getInstance().getX() : ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getX();
var yRed = drop ? ph.getInstance().getY() : ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getY();
var zRed = drop ? ph.getInstance().getZ() : ConfigData.CTF_FLAG_SPAWN_TEAM_RED.getZ();
addSpawnNpc(ConfigData.CTF_FLAG_ID, xRed, yRed, zRed, 0, 0, 0, TeamType.RED);
break;
case RED:
var xBlue = drop ? ph.getInstance().getX() : ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getX();
var yBlue = drop ? ph.getInstance().getY() : ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getY();
var zBlue = drop ? ph.getInstance().getZ() : ConfigData.CTF_FLAG_SPAWN_TEAM_BLUE.getZ();
addSpawnNpc(ConfigData.CTF_FLAG_ID, xBlue, yBlue, zBlue, 0, 0, 0, TeamType.BLUE);
break;
}

// Unequip flag
var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);
if (flag != null)
{
var items = ph.getInstance().getInventory().unEquipItemInSlotAndRecord(ParpedollType.RHAND);

var iu = new InventoryUpdate();
iu.addItems(items);
ph.getInstance().sendPacket(iu);
}

var teamType = ph.getTeam();
if (drop)
{
UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " has drop flag!", getPlayersInEvent());
}
else
{
UtilMessage.sendAnnounceMsg("The " + teamType.name().toLowerCase() + " team has delivered the flag!", getPlayersInEvent());
}
}

@Override
public NpcHolder addSpawnNpc(int npcId, int x, int y, int z, int heading, int randomOffset, long despawnDelay, TeamType teamType)
{
var npc = super.addSpawnNpc(npcId, x, y, z, heading, randomOffset, despawnDelay, teamType);
flagAndHolders.put(npc.getObjectId(), npc);
return npc;
}

/**
* Send all the characters a message on the screen showing the points of each team
*/
private static void sendPointsToAllParticipant()
{
UtilMessage.sendAnnounceMsg("BLUE " + pointsBlue + " | " + pointsRed + " RED", getPlayersInEvent());
}
}


Aqui habia agregado apra evitar que se desequipen la bandera.

Código
	@Override
public void onUnequip(CharacterHolder player)
{
if (player instanceof PlayerHolder)
{
var ph = (PlayerHolder) player;
var flag = ph.getInstance().getInventory().getPaperdollItem(ParpedollType.RHAND);

if (flag == null && ph.hasFlag())
{
// drop flag
unequipFlag(ph, true);
}
}
}

pero quizas herre aqui
Código
if (flag == null && ph.hasFlag())
5
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por canonmagic en Julio 17, 2018, 07:43:34 am »
Bueno... El problema persistio  :-\, el anti-afk sigue sacando a uno pasado el timer de 240 segundos sin importar que... Y ahora que estoy dandole a la cabeza con el CTF encontre que tiene bastante por delante. Le añadi una funcion adicional para recuperar la bandera de tu propio equipo. Si esta es tomada por un enemigo y este muere dejandola dropeada y alguien de su propio equipo interactua con ella es devuelta a su lugar original; y tambien un pequeño error que causaba que la bandera y holder roja no se spawneara. Pero aqui viene lo importante:

1.- Al tomar la bandera enemiga, la bandera se des-spawnea "Como deberia ser", pero en un par de segundos despues vuelve a aparecer.

2.- Al morir la bandera cae... Yo hize que si es interactuada por un aliado esta desaparezca, pero aun asi vuelve a aparecer al igual. "Quedando al reaparecer visualmente en el mapa, pero si intentabas targetearla o algo no sucedia nada  :o"

3.- Al entregar la bandera enemiga en tu holder la bandera es dropeada al lado del PJ y puede ser pickeada nuevamente.

4.- Hay algunos detalles, todavia no he podido chequearlos bien pero parece que visualmente la persona al entregar la bandera "Y esta ser desequipada" sigue viendose como si se llevara "Creo que incluso se mantenia en la mochila y podia ser desequipada (Quedando bugueada)"

Este evento esta dando bastantes problemas, tendremos que ir poco a poco con el.
6
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por fissban 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
7
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por fissban 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();
8
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por fissban en Julio 13, 2018, 07:33:15 pm »
Buen test...revisare los temas apena este frente a mi pc
9
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por canonmagic 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
10
Issues / Re:[MOD - EventCooperative] - Error
« Último mensaje por canonmagic 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
Páginas: [1] 2 3 4 5 6 ... 10