Fixed invisible NPCs spawned by scripts.
This commit is contained in:
+5
-1
@@ -2200,7 +2200,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2225,6 +2224,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2240,6 +2240,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2200,7 +2200,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2225,6 +2224,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2240,6 +2240,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2201,7 +2201,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2226,6 +2225,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2241,6 +2241,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+3
-6
@@ -1839,7 +1839,7 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
{
|
{
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.log(Level.SEVERE, "addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1878,11 +1878,8 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure info is broadcasted in instances
|
// Fixes invisible NPCs spawned by script.
|
||||||
if (npc.getInstanceId() > 0)
|
npc.broadcastInfo();
|
||||||
{
|
|
||||||
npc.broadcastInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -1865,7 +1865,7 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
{
|
{
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.log(Level.SEVERE, "addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1904,11 +1904,8 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure info is broadcasted in instances
|
// Fixes invisible NPCs spawned by script.
|
||||||
if (npc.getInstanceId() > 0)
|
npc.broadcastInfo();
|
||||||
{
|
|
||||||
npc.broadcastInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-6
@@ -1865,7 +1865,7 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
{
|
{
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.log(Level.SEVERE, "addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1904,11 +1904,8 @@ public abstract class AbstractScript extends ManagedScript
|
|||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure info is broadcasted in instances
|
// Fixes invisible NPCs spawned by script.
|
||||||
if (npc.getInstanceId() > 0)
|
npc.broadcastInfo();
|
||||||
{
|
|
||||||
npc.broadcastInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
+5
-1
@@ -2175,7 +2175,6 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Spawn spawn = new Spawn(npcId);
|
|
||||||
if ((xValue == 0) && (yValue == 0))
|
if ((xValue == 0) && (yValue == 0))
|
||||||
{
|
{
|
||||||
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
LOGGER.severe("addSpawn(): invalid spawn coordinates for NPC #" + npcId + "!");
|
||||||
@@ -2200,6 +2199,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
y += offset;
|
y += offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final Spawn spawn = new Spawn(npcId);
|
||||||
spawn.setInstanceId(instance);
|
spawn.setInstanceId(instance);
|
||||||
spawn.setHeading(heading);
|
spawn.setHeading(heading);
|
||||||
spawn.setXYZ(x, y, zValue);
|
spawn.setXYZ(x, y, zValue);
|
||||||
@@ -2215,6 +2215,10 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime
|
|||||||
{
|
{
|
||||||
summoner.addSummonedNpc(npc);
|
summoner.addSummonedNpc(npc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fixes invisible NPCs spawned by script.
|
||||||
|
npc.broadcastInfo();
|
||||||
|
|
||||||
return npc;
|
return npc;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|||||||
Reference in New Issue
Block a user