public static void CreateDoor(int doorID, GamePlayer player)
{
int ownerKeepId = (doorID / 100000) % 1000;
int towerNum = (doorID / 10000) % 10;
int keepID = ownerKeepId + towerNum * 256;
int componentID = (doorID / 100) % 100;
int doorIndex = doorID % 10;
AbstractGameKeep keep = GameServer.KeepManager.GetKeepByID(keepID);
if (keep == null)
{
player.Out.SendMessage("Cannot create door as keep is null!", eChatType.CT_System, eChatLoc.CL_SystemWindow);
return;
}
GameKeepComponent component = null;
foreach (GameKeepComponent c in keep.KeepComponents)
{
if (c.ID == componentID)
{
component = c;
break;
}
}
if (component == null)
{
player.Out.SendMessage("Cannot create door as component is null!", eChatType.CT_System, eChatLoc.CL_SystemWindow);
return;
}
/*Porte en haut gauche et droite*/
if (doorIndex == 3 || doorIndex == 5)
{ DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 40;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte en haut.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
/*Porte tout en haut*/
if (doorIndex == 2)
{
DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 30;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte tout en haut.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
/*porte en bas interieur*/
if (doorIndex == 4 ||doorIndex == 6)
{
DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 77;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte en bas Interieur.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
/* porte sans recto verso*/
if (doorIndex == 1)
{
DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 50;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte sans recto verso.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
}
}
}
pos.ZOff = player.Z - component.Z + 40;
if (!GameServer.KeepManager.IsEnemy(this, player) || player.Client.Account.PrivLevel != 1)
{
int keepz = Z, distance = 0;
//calculate distance
//normal door
/* if (DoorIndex == 1)
distance = 200;
//side or internal door
else
distance = 210;*/
//template id de la porte 3 et 5 porte en haut !
if (Flag == 4 || TemplateID == "537bee45-d9f5-42e0-bd59-b5f0318405bd" || TemplateID == "81171b91-3958-4a3f-a8a9-1d336597a719" || TemplateID == "d80e8c31-ffd0-4c39-a82a-0acb6b2cb195" || TemplateID == "c0b94459-baae-4b31-beb7-edcf6f8f3fdb")
distance = 300;
//template id de la porte 4 et 6 porte en bas intérieur !
if (Flag == 4 || TemplateID == "7aae8768-5218-4843-b1eb-4d906fbf14b8" || TemplateID == "a1e88e57-0ce2-4649-8782-1e7e0e9cbb47" || TemplateID == "143622d7-f29c-49c4-87d3-fd03d0173d64" || TemplateID == "82e8204e-41f8-417d-baa8-62594198727e")
distance = 300;
//template id de la porte 2 porte tout en haut !
if (Flag == 4 || TemplateID == "983f9c6a-b470-4267-9a32-93f25a191f95" || TemplateID == "194b8909-5524-4bd6-a0cf-738136be6083")
distance = 230;
// template id de la porte porte portail et mur exterieur!
if (Flag == 4 || TemplateID == "f82ae852-ec91-4a4a-8d2d-ce0ae3b00ddf" || TemplateID == "035b5fd7-111e-4d78-8818-39d3698441a3" || TemplateID == "0992bd0e-cfff-4254-9990-2bd3ffd69382")
distance = 250;
//calculate Z
if (this.Component.Keep is GameKeepTower && !this.Component.Keep.IsPortalKeep)
{
//when entering a tower, we need to raise Z
//portal keeps are considered towers too, so we check component count(83)
if (IsObjectInFront(player, 180, false) && DoorIndex == 1)
{
keepz = Z + 83;
}
}
else
{
//when entering a keeps inner door, we need to raise Z
if (IsObjectInFront(player, 180, false))
{
//To find out if a door is the keeps inner door, we compare the distance between
//the component for the keep and the component for the gate
int keepdistance = int.MaxValue;
int gatedistance = int.MaxValue;
foreach (GameKeepComponent c in this.Component.Keep.KeepComponents)
{
if ((GameKeepComponent.eComponentSkin)c.Skin == GameKeepComponent.eComponentSkin.Keep)
{
keepdistance = GetDistanceTo(c);
}
if ((GameKeepComponent.eComponentSkin)c.Skin == GameKeepComponent.eComponentSkin.Gate)
{
gatedistance = GetDistanceTo(c);
}
//when these are filled we can stop the search
if (keepdistance != int.MaxValue && gatedistance != int.MaxValue)
break;
}
if (DoorIndex == 1 && keepdistance < gatedistance)
keepz = Z + 92;//checked in game with lvl 1 keep(92)
}
}
/*Porte en haut gauche et droite extérieur vers intérieur*/
if (doorIndex == 3)
{
DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 25;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte en haut extérieur vers intérieur.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
/*Porte en haut gauche et droite intérieur vers extérieur*/
if (doorIndex == 5)
{
DBKeepPosition pos = new DBKeepPosition();
pos.ClassType = "DOL.GS.Keeps.GameKeepDoor";
pos.TemplateType = doorIndex;
pos.ComponentSkin = component.Skin;
pos.ComponentRotation = component.ComponentHeading;
pos.TemplateID = Guid.NewGuid().ToString();
int x, y;
SaveXY(component, player.X, player.Y, out x, out y);
pos.XOff = x;
pos.YOff = y;
pos.ZOff = player.Z - component.Z + 50;
pos.HOff = player.Heading - component.Heading;
GameServer.Database.AddObject(pos);
player.Out.SendMessage("Porte en haut intérieur vers extérieur.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
}
Users browsing this forum: No registered users and 1 guest