Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 06-14-2008, 03:17 PM
Angelox
AX Classic Developer
 
Join Date: May 2006
Location: filler
Posts: 2,049
Default

Toxxulia Forest (tox) has that problem; npcs in the buildings there are waist-deep in the floor, would be great to see that fixed.

Thanks for you fixes!
Reply With Quote
  #2  
Old 06-14-2008, 03:42 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by Angelox View Post
Toxxulia Forest (tox) has that problem; npcs in the buildings there are waist-deep in the floor, would be great to see that fixed.
Here you go, try this one:

http://www.rama.demon.co.uk/tox.rar

It includes the geometry for three extra models (I threw the bridge in as a bonus )

HUT4_DMSPRITEDEF
ERHOUSE_DMSPRITEDEF
TBRIDGE_DMSPRITEDEF

I tested one building before and after and it seemed to have done the trick.

If anyone has any more requests, I likely won't get to them until tomorrow.
Reply With Quote
  #3  
Old 06-14-2008, 03:58 PM
Angelox
AX Classic Developer
 
Join Date: May 2006
Location: filler
Posts: 2,049
Default

Thanks again - I'll be testing shortly, before you go, I was wanting to give you something else to think about which may be related to your work; The boats.
Only one of them is not fall through , the rest are , the most needed ship is the SirensBane (butcher > freeporte boat), and it is totally transparent. We actually have a fully functional system for boats to run on schedule dynamic zone or not. but really can't use it to its best or properly, unless we can get a boat thats not so large as the one we have now.
I'm about to make a detailed post on how we did this, but really, the SirensBane is very needed - it appears in many zones, and fits the areas perfectly.
Reply With Quote
  #4  
Old 06-21-2008, 03:10 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

This is a reply to Scorp from another thread where the subject of azone was brought up. Thought I would put the reply here rather than cluttering up the other thread, or starting a new one.

Quote:
Originally Posted by Scorpious2k View Post

I hope you are including the code that makes it work under windows too.

Also as a future enhancement, we should see if we can get it to identify PvP areas like it does water. Then we could add code that makes those areas work. This probably deserves it's own thread in the appropriate forum area.
Yes, the new azone and also awater compile under windows. (awater has no new functionality, at present).

Regarding the PVP areas, I just logged into the old arena zone, and also went to the PVP arena in Freeport.

If you issue the #bestz command in the pvp part of the arena zone, it tells you you are in water. Likewise, in the pvp arena in Freeport, it tells you that you are in an unknown area, so it seems that these pvp areas are defined as special, but just not being handled correctly. I'll look into it some more.

Given that I can only pull out the special areas from S3Ds, and not EQGs. What other S3D zones have pvp areas (and where abouts in the zone are they) ?

Thanks
Reply With Quote
  #5  
Old 06-21-2008, 03:50 PM
Scorpious2k's Avatar
Scorpious2k
Demi-God
 
Join Date: Mar 2003
Location: USA
Posts: 1,067
Default

Halas has one, and this may help: OpenZone can create them.

I have a zone I made with one, and can give you the file.

Because, OZ will successfully create the area (recognized by the client) you might want to either look at the OZ source or (probably quicker) ask Windcatcher about it.

EDIT...

My thought on this subject, btw, is that once we can identify the area and if a player and/or target is in it, we can add code to where it checks to see if attack is allowed against another player and allow/deny it depending on if they are in it.

Probably with a rule so the serverOp can turn it on or off. This would actually be a pretty simple add-on once we can determine the PvP area and a client's position in or out of it.
__________________
Maybe I should try making one of these servers...

Last edited by Scorpious2k; 06-21-2008 at 11:54 PM..
Reply With Quote
  #6  
Old 06-21-2008, 04:12 PM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

Quote:
Originally Posted by Scorpious2k View Post
you might want to either look at the OZ source or (probably quicker) ask Windcatcher about it.
I looked at the OpenZone source (which has helped me a lot in the past while
working with S3Ds) and also Windcatcher's WLD format document, and
the PVP areas should be defined in the S3D with a name beginning 'DRP_ZONE':

Quote:


0x29 — Region Flag — PLAIN

Notes
This fragment lets you flag certain regions (as defined by 0x22 BSP Region fragments) in a particular way.
The flagging is done by setting the name of this fragment to a particular “magic” value.
The possible values are:

WT_ZONE........................................... .....Flag all regions in the list as underwater regions.
LA_ZONE........................................... ......Flag all regions in the list as lava regions.
DRP_ZONE.......................................... ....Flag all regions in the list as PvP regions.
DRNTP##########_ZONE.............Flag all regions in the list as zone point regions.

The ####’s are actually numbers and hyphens that somehow tell the client the zone destination.
This method of setting zone points may or may not be obsolete.
Reply With Quote
  #7  
Old 06-22-2008, 08:25 AM
Derision
Developer
 
Join Date: Feb 2004
Location: UK
Posts: 1,540
Default

I got the PVP areas figured out correctly. There are PVP areas in the following zones:

Arena, Cabwest, citymist, freportw, Kael, mischiefplane, neriaka, neriakb, paineel, qeynos, sseru, thurgadina

I could't find one in Halas. There is an area called 'The Pit Of Doom' which looks a bit like a mini-arena, but
there is nothing in the S3D file to flag it as such, and I don't get the client message when I go in there.

My ISP is doing maintenance which means my webspace is down at the moment, but when it comes back up I will post
the water maps for the zones above with the PVP areas tagged correctly.

I also wrote a patch for the server to detect the PVP areas (bool WaterMap::InPVPArea) and added some output into
the #bestz command to show whether you were in a PVP area or not, however it still requires someone to modify the
attack code to call InPVPArea to perform the check. (I'll let someone else do that).

Here is the zone patch. I'll post the maps later when my webspace is back up. The modified version of awater to
produce the .wtr maps tagged with PVP areas will come with my modified azone when that is done and tested.

Code:
diff -u --recursive /tmp/EQEmu-0.7.0-1115/zone/command.cpp ./command.cpp
--- /tmp/EQEmu-0.7.0-1115/zone/command.cpp	2008-06-19 13:49:00.000000000 +0100
+++ ./command.cpp	2008-06-22 12:25:18.000000000 +0100
@@ -6455,13 +6455,15 @@
 			RegionType = zone->watermap->BSPReturnRegionType(1,  c->GetTarget()->GetX(), c->GetTarget()->GetY(), z);
 			c->Message(0,"InWater returns %d", zone->watermap->InWater(c->GetTarget()->GetX(), c->GetTarget()->GetY(), z));
 			c->Message(0,"InLava returns %d", zone->watermap->InLava(c->GetTarget()->GetX(), c->GetTarget()->GetY(), z));
+			c->Message(0,"InPVPArea returns %d", zone->watermap->InPVPArea(c->GetTarget()->GetX(), c->GetTarget()->GetY(), z));
 									 
 		}
 		else {
 			z=c->GetZ();
 			RegionType = zone->watermap->BSPReturnRegionType(1, c->GetX(), c->GetY(),z);
 			c->Message(0,"InWater returns %d", zone->watermap->InWater(c->GetX(), c->GetY(), z));
-					c->Message(0,"InLava returns %d", zone->watermap->InLava(c->GetX(), c->GetY(), z));
+			c->Message(0,"InLava returns %d", zone->watermap->InLava(c->GetX(), c->GetY(), z));
+			c->Message(0,"InPVPArea returns %d", zone->watermap->InPVPArea(c->GetX(), c->GetY(), z));
 	
 		}
 	
@@ -6469,6 +6471,10 @@
 			case RegionTypeNormal:	{ c->Message(0,"There is nothing special about the region you are in!"); break; }
 			case RegionTypeWater:	{ c->Message(0,"You/your target are in Water."); break; }
 			case RegionTypeLava:	{ c->Message(0,"You/your target are in Lava."); break; }
+			case RegionTypePVP:	{ c->Message(0,"You/your target are in a PVP area."); break; }
+			case RegionTypeSlime:	{ c->Message(0,"You/your target are in a Slime area."); break; }
+			case RegionTypeIce:	{ c->Message(0,"You/your target are in an Ice area."); break; }
+			case RegionTypeVWater:	{ c->Message(0,"You/your target are in a VWATER area."); break; }
 			default:  c->Message(0,"You/your target are in an unknown region type."); 
 		}
 	}
diff -u --recursive /tmp/EQEmu-0.7.0-1115/zone/watermap.cpp ./watermap.cpp
--- /tmp/EQEmu-0.7.0-1115/zone/watermap.cpp	2008-01-14 02:42:37.000000000 +0000
+++ ./watermap.cpp	2008-06-22 12:22:12.000000000 +0100
@@ -99,6 +99,12 @@
 	return(BSPReturnRegionType(1, y, x, z) == RegionTypeLava);
 }
 
+bool WaterMap::InPVPArea(float y, float x, float z) const {
+	if(BSP_Root == NULL) {
+		return false;
+	}
+	return(BSPReturnRegionType(1, y, x, z) == RegionTypePVP);
+}
 
 WaterMap* WaterMap::LoadWaterMapfile(const char* in_zonename, const char *directory) {
 	FILE *fp;
diff -u --recursive /tmp/EQEmu-0.7.0-1115/zone/watermap.h ./watermap.h
--- /tmp/EQEmu-0.7.0-1115/zone/watermap.h	2008-01-14 02:42:37.000000000 +0000
+++ ./watermap.h	2008-06-22 12:21:19.000000000 +0100
@@ -30,15 +30,21 @@
 } ZBSP_Node;
 #pragma pack()
 
+
 typedef enum {
 	RegionTypeUnsupported = -2,
 	RegionTypeUntagged = -1,
         RegionTypeNormal = 0,
         RegionTypeWater = 1,
         RegionTypeLava = 2,
-	RegionTypeZoneLine = 3
+	RegionTypeZoneLine = 3,
+	RegionTypePVP = 4,
+	RegionTypeSlime  = 5,
+	RegionTypeIce = 6,
+	RegionTypeVWater =7 
 } WaterRegionType;
 
+
 class WaterMap {
 
 public:
@@ -46,6 +52,7 @@
         WaterRegionType BSPReturnRegionType(long node_number, float y, float x, float z) const;
         bool InWater(float y, float x, float z) const;
         bool InLava(float y, float x, float z) const;
+        bool InPVPArea(float y, float x, float z) const;
 
 	WaterMap();
 	~WaterMap();
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 01:57 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3