* For your fragging desire, damage enabled land works, but watch out!, life does not regenerate until you're dead!
parent
07167c9a3f
commit
e8acb49fef
|
@ -259,6 +259,19 @@ namespace OpenSim.Framework.Communications
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public string UUIDNameRequestString(LLUUID uuid)
|
||||||
|
{
|
||||||
|
UserProfileData profileData = m_userService.GetUserProfile(uuid);
|
||||||
|
if (profileData != null)
|
||||||
|
{
|
||||||
|
//LLUUID profileId = profileData.ID;
|
||||||
|
string firstname = profileData.FirstName;
|
||||||
|
string lastname = profileData.SurName;
|
||||||
|
|
||||||
|
return firstname + " " + lastname;
|
||||||
|
}
|
||||||
|
return "(hippos)";
|
||||||
|
}
|
||||||
|
|
||||||
public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(LLUUID queryID, string query)
|
public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(LLUUID queryID, string query)
|
||||||
{
|
{
|
||||||
|
|
|
@ -729,6 +729,7 @@ namespace OpenSim.Framework
|
||||||
uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID);
|
uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID);
|
||||||
|
|
||||||
void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question);
|
void SendScriptQuestion(LLUUID taskID, string taskName, string ownerName, LLUUID itemID, int question);
|
||||||
|
void SendHealth(float health);
|
||||||
|
|
||||||
byte[] GetThrottlesPacked(float multiplier);
|
byte[] GetThrottlesPacked(float multiplier);
|
||||||
|
|
||||||
|
|
|
@ -4849,6 +4849,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
OutPacket(logReply, ThrottleOutPacketType.Task);
|
OutPacket(logReply, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
public void SendHealth(float health)
|
||||||
|
{
|
||||||
|
HealthMessagePacket healthpacket = (HealthMessagePacket)PacketPool.Instance.GetPacket(PacketType.HealthMessage);
|
||||||
|
healthpacket.HealthData.Health = health;
|
||||||
|
OutPacket(healthpacket, ThrottleOutPacketType.Task);
|
||||||
|
}
|
||||||
|
|
||||||
public ClientInfo GetClientInfo()
|
public ClientInfo GetClientInfo()
|
||||||
{
|
{
|
||||||
|
|
|
@ -186,6 +186,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
scene.EventManager.OnClientClosed += ClientLoggedOut;
|
scene.EventManager.OnClientClosed += ClientLoggedOut;
|
||||||
scene.EventManager.OnValidateLandBuy += ValidateLandBuy;
|
scene.EventManager.OnValidateLandBuy += ValidateLandBuy;
|
||||||
scene.EventManager.OnLandBuy += processLandBuy;
|
scene.EventManager.OnLandBuy += processLandBuy;
|
||||||
|
scene.EventManager.OnAvatarKilled += KillAvatar;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1390,7 +1391,11 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
if (avatar.Scene.RegionInfo.originRegionID != m_rootAgents[avatar.UUID])
|
if (avatar.Scene.RegionInfo.originRegionID != m_rootAgents[avatar.UUID])
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
m_rootAgents[avatar.UUID] = avatar.Scene.RegionInfo.originRegionID;
|
m_rootAgents[avatar.UUID] = avatar.Scene.RegionInfo.originRegionID;
|
||||||
|
|
||||||
|
|
||||||
//m_log.Info("[MONEY]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + ".");
|
//m_log.Info("[MONEY]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + ".");
|
||||||
// Claim User! my user! Mine mine mine!
|
// Claim User! my user! Mine mine mine!
|
||||||
if (m_MoneyAddress.Length > 0)
|
if (m_MoneyAddress.Length > 0)
|
||||||
|
@ -1400,12 +1405,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
{
|
{
|
||||||
Hashtable hresult =
|
Hashtable hresult =
|
||||||
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret);
|
||||||
if ((bool) hresult["success"] == true)
|
if ((bool)hresult["success"] == true)
|
||||||
{
|
{
|
||||||
int funds = 0;
|
int funds = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
funds = (Int32) hresult["funds"];
|
funds = (Int32)hresult["funds"];
|
||||||
}
|
}
|
||||||
catch (InvalidCastException)
|
catch (InvalidCastException)
|
||||||
{
|
{
|
||||||
|
@ -1414,11 +1419,23 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.SendAgentAlertMessage((string) hresult["errorMessage"], true);
|
avatar.ControllingClient.SendAgentAlertMessage((string)hresult["errorMessage"], true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ILandObject obj = avatar.Scene.LandChannel.getLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y);
|
||||||
|
if ((obj.landData.landFlags & (uint)Parcel.ParcelFlags.AllowDamage) != 0)
|
||||||
|
{
|
||||||
|
avatar.Invulnerable = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
avatar.Invulnerable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1457,6 +1474,60 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
|
||||||
//m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString());
|
//m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void KillAvatar(uint killerObjectLocalID, ScenePresence DeadAvatar)
|
||||||
|
{
|
||||||
|
if (killerObjectLocalID == 0)
|
||||||
|
DeadAvatar.ControllingClient.SendAgentAlertMessage("You committed suicide!", true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bool foundResult = false;
|
||||||
|
string resultstring = "";
|
||||||
|
List<ScenePresence> allav = DeadAvatar.Scene.GetScenePresences();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (ScenePresence av in allav)
|
||||||
|
{
|
||||||
|
if (av.LocalId == killerObjectLocalID)
|
||||||
|
{
|
||||||
|
av.ControllingClient.SendAlertMessage("You fragged " + DeadAvatar.Firstname + " " + DeadAvatar.Lastname);
|
||||||
|
resultstring = av.Firstname + " " + av.Lastname;
|
||||||
|
foundResult = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (System.InvalidOperationException)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!foundResult)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = DeadAvatar.Scene.GetSceneObjectPart(killerObjectLocalID);
|
||||||
|
if (part != null)
|
||||||
|
{
|
||||||
|
ScenePresence av = DeadAvatar.Scene.GetScenePresence(part.OwnerID);
|
||||||
|
if (av != null)
|
||||||
|
{
|
||||||
|
av.ControllingClient.SendAlertMessage("You fragged " + DeadAvatar.Firstname + " " + DeadAvatar.Lastname);
|
||||||
|
resultstring = av.Firstname + " " + av.Lastname;
|
||||||
|
DeadAvatar.ControllingClient.SendAgentAlertMessage("You got killed by " + resultstring + "!", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string killer = DeadAvatar.Scene.CommsManager.UUIDNameRequestString(part.OwnerID);
|
||||||
|
DeadAvatar.ControllingClient.SendAgentAlertMessage("You impailed yourself on " + part.Name + " owned by " + killer +"!", true);
|
||||||
|
}
|
||||||
|
//DeadAvatar.Scene. part.ObjectOwner
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DeadAvatar.ControllingClient.SendAgentAlertMessage("You died!", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DeadAvatar.Health = 100;
|
||||||
|
DeadAvatar.Scene.TeleportClientHome(DeadAvatar.UUID, DeadAvatar.ControllingClient);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -336,6 +336,11 @@ namespace OpenSim.Region.Environment.Modules.World.Land
|
||||||
{
|
{
|
||||||
if (over.landData.localID == landData.localID)
|
if (over.landData.localID == landData.localID)
|
||||||
{
|
{
|
||||||
|
if ((over.landData.landFlags & (uint)Parcel.ParcelFlags.AllowDamage) != 0)
|
||||||
|
avatars[i].Invulnerable = false;
|
||||||
|
else
|
||||||
|
avatars[i].Invulnerable = true;
|
||||||
|
|
||||||
sendLandUpdateToClient(avatars[i].ControllingClient);
|
sendLandUpdateToClient(avatars[i].ControllingClient);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,10 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
public event NewInventoryItemUploadComplete OnNewInventoryItemUploadComplete;
|
||||||
|
|
||||||
|
public delegate void AvatarKillData(uint KillerLocalID, ScenePresence avatar);
|
||||||
|
|
||||||
|
public event AvatarKillData OnAvatarKilled;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// RegisterCapsEvent is called by Scene after the Caps object
|
/// RegisterCapsEvent is called by Scene after the Caps object
|
||||||
/// has been instantiated and before it is return to the
|
/// has been instantiated and before it is return to the
|
||||||
|
@ -267,6 +271,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null;
|
private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null;
|
||||||
private LandBuy handlerLandBuy = null;
|
private LandBuy handlerLandBuy = null;
|
||||||
private LandBuy handlerValidateLandBuy = null;
|
private LandBuy handlerValidateLandBuy = null;
|
||||||
|
private AvatarKillData handlerAvatarKill = null;
|
||||||
|
|
||||||
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
||||||
{
|
{
|
||||||
|
@ -574,5 +579,13 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
handlerScriptNotAtTargetEvent(localID);
|
handlerScriptNotAtTargetEvent(localID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void TriggerAvatarKill(uint KillerObjectLocalID, ScenePresence DeadAvatar)
|
||||||
|
{
|
||||||
|
handlerAvatarKill = OnAvatarKilled;
|
||||||
|
if (handlerAvatarKill != null)
|
||||||
|
{
|
||||||
|
handlerAvatarKill(KillerObjectLocalID, DeadAvatar);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private LLVector3 m_requestedSitOffset = new LLVector3();
|
private LLVector3 m_requestedSitOffset = new LLVector3();
|
||||||
private float m_sitAvatarHeight = 2.0f;
|
private float m_sitAvatarHeight = 2.0f;
|
||||||
private float m_godlevel = 0;
|
private float m_godlevel = 0;
|
||||||
|
|
||||||
|
private bool m_invulnerable = true;
|
||||||
|
|
||||||
private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3();
|
private LLVector3 m_LastChildAgentUpdatePosition = new LLVector3();
|
||||||
|
|
||||||
private int m_perfMonMS = 0;
|
private int m_perfMonMS = 0;
|
||||||
|
@ -83,6 +86,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private bool m_newForce = false;
|
private bool m_newForce = false;
|
||||||
private bool m_newCoarseLocations = true;
|
private bool m_newCoarseLocations = true;
|
||||||
private bool m_gotAllObjectsInScene = false;
|
private bool m_gotAllObjectsInScene = false;
|
||||||
|
private float m_health = 100f;
|
||||||
|
|
||||||
private LLVector3 m_lastVelocity = LLVector3.Zero;
|
private LLVector3 m_lastVelocity = LLVector3.Zero;
|
||||||
|
|
||||||
|
@ -183,6 +187,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
set { m_updateflag = value; }
|
set { m_updateflag = value; }
|
||||||
get { return m_updateflag; }
|
get { return m_updateflag; }
|
||||||
}
|
}
|
||||||
|
public bool Invulnerable
|
||||||
|
{
|
||||||
|
set { m_invulnerable = value; }
|
||||||
|
get { return m_invulnerable; }
|
||||||
|
}
|
||||||
|
|
||||||
private readonly ulong m_regionHandle;
|
private readonly ulong m_regionHandle;
|
||||||
|
|
||||||
|
@ -334,6 +343,11 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
get { return m_parentID; }
|
get { return m_parentID; }
|
||||||
set { m_parentID = value; }
|
set { m_parentID = value; }
|
||||||
}
|
}
|
||||||
|
public float Health
|
||||||
|
{
|
||||||
|
get { return m_health; }
|
||||||
|
set { m_health = value; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// These are the region handles known by the avatar.
|
/// These are the region handles known by the avatar.
|
||||||
|
@ -602,6 +616,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
{
|
{
|
||||||
m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
|
m_scene.PhysicsScene.RemoveAvatar(PhysicsActor);
|
||||||
m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
|
m_physicsActor.OnRequestTerseUpdate -= SendTerseUpdateToAllClients;
|
||||||
|
m_physicsActor.UnSubscribeEvents();
|
||||||
m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
|
m_physicsActor.OnCollisionUpdate -= PhysicsCollisionUpdate;
|
||||||
PhysicsActor = null;
|
PhysicsActor = null;
|
||||||
}
|
}
|
||||||
|
@ -1894,16 +1909,55 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
//m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
|
//m_physicsActor.OnRequestTerseUpdate += SendTerseUpdateToAllClients;
|
||||||
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
m_physicsActor.OnCollisionUpdate += PhysicsCollisionUpdate;
|
||||||
|
m_physicsActor.SubscribeEvents(1000);
|
||||||
m_physicsActor.LocalID = LocalId;
|
m_physicsActor.LocalID = LocalId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Event called by the physics plugin to tell the avatar about a collision.
|
// Event called by the physics plugin to tell the avatar about a collision.
|
||||||
private void PhysicsCollisionUpdate(EventArgs e)
|
private void PhysicsCollisionUpdate(EventArgs e)
|
||||||
{
|
{
|
||||||
|
if (e == null)
|
||||||
|
return;
|
||||||
|
CollisionEventUpdate collisionData = (CollisionEventUpdate)e;
|
||||||
|
Dictionary<uint, float> coldata = collisionData.m_objCollisionList;
|
||||||
|
float starthealth = Health;
|
||||||
|
uint killerObj = 0;
|
||||||
|
foreach (uint localid in coldata.Keys)
|
||||||
|
{
|
||||||
|
if (coldata[localid] <= 0.10f || m_invulnerable)
|
||||||
|
continue;
|
||||||
|
//if (localid == 0)
|
||||||
|
//continue;
|
||||||
|
|
||||||
|
Health -= coldata[localid] * 5;
|
||||||
|
|
||||||
|
if (Health <= 0)
|
||||||
|
{
|
||||||
|
if (localid != 0)
|
||||||
|
killerObj = localid;
|
||||||
|
}
|
||||||
|
//m_log.Debug("[AVATAR]: Collision with localid: " + localid.ToString() + " at depth: " + coldata[localid].ToString());
|
||||||
|
}
|
||||||
|
//Health = 100;
|
||||||
|
if (!m_invulnerable)
|
||||||
|
{
|
||||||
|
if (starthealth != Health)
|
||||||
|
{
|
||||||
|
ControllingClient.SendHealth(Health);
|
||||||
|
}
|
||||||
|
if (m_health <= 0)
|
||||||
|
m_scene.EventManager.TriggerAvatarKill(killerObj, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0;
|
bool isUserMoving = Velocity.X > 0 || Velocity.Y > 0;
|
||||||
UpdateMovementAnimations(isUserMoving);
|
UpdateMovementAnimations(isUserMoving);
|
||||||
}
|
}
|
||||||
|
public void setHealthWithUpdate(float health)
|
||||||
|
{
|
||||||
|
Health = health;
|
||||||
|
ControllingClient.SendHealth(Health);
|
||||||
|
}
|
||||||
internal void Close()
|
internal void Close()
|
||||||
{
|
{
|
||||||
lock (m_attachments)
|
lock (m_attachments)
|
||||||
|
|
|
@ -615,5 +615,8 @@ namespace OpenSim.Region.Examples.SimpleModule
|
||||||
public void SendScriptQuestion(LLUUID objectID, string taskName, string ownerName, LLUUID itemID, int question)
|
public void SendScriptQuestion(LLUUID objectID, string taskName, string ownerName, LLUUID itemID, int question)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
public void SendHealth(float health)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public bool collidelock = false;
|
public bool collidelock = false;
|
||||||
|
|
||||||
public int m_eventsubscription = 0;
|
public int m_eventsubscription = 0;
|
||||||
private CollisionEventUpdate CollisionEventsThisFrame = null;
|
private CollisionEventUpdate CollisionEventsThisFrame = new CollisionEventUpdate();
|
||||||
|
|
||||||
public OdeCharacter(String avName, OdeScene parent_scene, PhysicsVector pos, CollisionLocker dode, PhysicsVector size)
|
public OdeCharacter(String avName, OdeScene parent_scene, PhysicsVector pos, CollisionLocker dode, PhysicsVector size)
|
||||||
{
|
{
|
||||||
|
@ -869,9 +869,11 @@ namespace OpenSim.Region.Physics.OdePlugin
|
||||||
public override void SubscribeEvents(int ms)
|
public override void SubscribeEvents(int ms)
|
||||||
{
|
{
|
||||||
m_eventsubscription = ms;
|
m_eventsubscription = ms;
|
||||||
|
_parent_scene.addCollisionEventReporting(this);
|
||||||
}
|
}
|
||||||
public override void UnSubscribeEvents()
|
public override void UnSubscribeEvents()
|
||||||
{
|
{
|
||||||
|
_parent_scene.remCollisionEventReporting(this);
|
||||||
m_eventsubscription = 0;
|
m_eventsubscription = 0;
|
||||||
}
|
}
|
||||||
public void AddCollisionEvent(uint CollidedWith, float depth)
|
public void AddCollisionEvent(uint CollidedWith, float depth)
|
||||||
|
|
Loading…
Reference in New Issue