door postern

Section Française de l'emulateur Dawn of light.

Moderators: Support Team, Other Language Team

door postern

Postby snoopydo » Sun Mar 30, 2014 4:55 pm

Bonjour dol,

j'ai un petit problème avec les téléportation des portes d'en haut d'un fort (pas encore essayé dans une tour)
est se que le z est la hauteur dans gamekeepdoor.cs?
en gros, les portes a casser fonctionnent bien les postern door en bas aussi.
mais en haut faudrait élever le point de téléportation.
avez vous une idée svp?
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Sun Mar 30, 2014 10:02 pm

rebonsoir, alors j'ai trouvé ou modifier ça ! me reste a trouver les bonne valeur :)
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby Graveen » Mon Mar 31, 2014 7:23 am

Cool ! Si c'est un bug du core DOL, tu peux proposer un patch :)
Image
* pm me to contribute in Dawn of Light: code, database *
User avatar
Graveen
Project Leader
 
Posts: 12660
Joined: Fri Oct 19, 2007 9:22 pm
Location: France

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 10:11 am

ok je mettrais le code quand j'aurais trouvé les valeur.
j'ai créé un z pour chaque porte :)
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 10:18 am

Code: Select all
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); } } } }
la valeur a modifier pour le z est celle ci
Code: Select all
pos.ZOff = player.Z - component.Z + 40;

je cherche encore les bonne valeur pour chaque porte :)
p-s: a placer dans positionmanager.cs derniere class.
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby HunabKu » Mon Mar 31, 2014 4:15 pm

Cool Snoopydo
"C'est l'ignorance qui apporte le chaos, pas la connaissance."
Scarlett Johansson dans "Lucy" de Luc Besson
-------------------------------------------------------------------------------
"Ignorance brings chaos, not knowledge."
Scarlett Johansson on "Lucy" by Luc Besson
User avatar
HunabKu
Developer
 
Posts: 1905
Joined: Sat Jun 18, 2011 4:48 am

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 5:10 pm

Code: Select all
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) } }
ca c'est a mettre dans GameKeepDoor.cs et ca permet de modifier la distance de chaque porte grace a l'id !
p-s: si quelqu'un trouve les bons reglages bah suis prenant :)
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 6:04 pm

gros P-S: remplacer les templateid par les bons
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 8:34 pm

Code: Select all
/*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); }
version améliorée du z en séparant 3 et 5 :)
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Mon Mar 31, 2014 9:28 pm

petite expliquation quand meme.
le z pour etre modifié doit etre recreer.
la distance par contre peut etre modifiée a tout moment du moment que y'a les bon templateID .
les templateID change a chaque delete et recreation d'une porte.
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Tue Apr 01, 2014 4:27 pm

me reste deux porte et je me demande si je peux vraiment modifier les valeurs lol
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby snoopydo » Tue Apr 01, 2014 5:10 pm

mon code finale a vous de juger :)
donc utiliser /door show pour rentrer les portes.
ensuite placer les templateID des portes trouvé dans keepposition dans le code source.
et tout est censé fonctionner sans bug :)
enjoy !
Attachments
Position Manager.cs
(21.66 KiB) Downloaded 24 times
GameKeepDoor.cs
(22.63 KiB) Downloaded 25 times
snoopydo
DOL Freak
 
Posts: 578
Joined: Mon Jan 02, 2006 12:48 pm

Re: door postern

Postby Graveen » Wed Apr 02, 2014 9:55 am

Thank you Snoopy ! je regarderais ca merci !
Image
* pm me to contribute in Dawn of Light: code, database *
User avatar
Graveen
Project Leader
 
Posts: 12660
Joined: Fri Oct 19, 2007 9:22 pm
Location: France


Return to “%s” Français

Who is online

Users browsing this forum: No registered users and 1 guest