EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Archive::Database/World Building (https://www.eqemulator.org/forums/forumdisplay.php?f=625)
-   -   MW_052_053_alpha2 (released 12-21-03) (https://www.eqemulator.org/forums/showthread.php?t=10928)

mattmeck 01-05-2004 07:51 AM

what happens when you right click on them? and are you running
the newest DB with the NPCID fixxes in it?

Shawn319 01-05-2004 08:07 AM

[quote=mollymillions]There are a lot of duplicated spawns in the DB, they may be intentional but I wanted to get rid of them. e.g.

SELECT zone, x, y, z, left(npc_types.name,32) AS Name, count(spawn2.id) AS SpawnCount
FROM spawn2, spawnentry, npc_types
WHERE spawn2.spawngroupID = spawnentry.spawngroupID
AND spawnentry.npcID = npc_types.ID
AND spawn2.pathgrid = 0
GROUP by zone, x, y, z, npc_types.name
HAVING SpawnCount > 1
ORDER BY zone, x, y, z, npc_types.name

Here's a query to construct a query to delete the last spawn added for each replicated spawn (i didn

grues0me 01-05-2004 08:33 AM

Quote:

Originally Posted by mattmeck
what happens when you right click on them? and are you running
the newest DB with the NPCID fixxes in it?

I am using live eq with Emu5.3Dr2 and mw_052_053_alpha2.

Right clicking opens a merchant window with no items in it.

The fix...i am not sure which you mean, but if you meant the classfix.sql...i gonna try it now.

mattmeck 01-05-2004 08:50 AM

I "think" thats what you need, with the last SOE patch they changed the class ID #'s, so it through everything off.

grues0me 01-05-2004 09:29 AM

Thanks that fix did it. My only problems now are now:

1. Health bars of the mob never decrease. I copied the fix i found on the board into the mob.cpp, no help.

2. The crash-on-dying bug. I realize it must have to do with the 400 damage some mob do, but i didnt found a fix on the board, except the global change of the max damage via sql commands.

farce 01-05-2004 09:42 AM

both of those issues are fixable.. LD on death is a one liner, mob HP stuff is a couple lines... the fixes work fine.

grues0me 01-05-2004 09:48 AM

For the Health bar:

void Mob::CreateHPPacket(APPLAYER* app)
{
this->IsFullHP=(cur_hp>=max_hp);

app->opcode = OP_HPUpdate;
app->size = sizeof(SpawnHPUpdate_Struct);
app->pBuffer = new uchar[app->size];
memset(app->pBuffer, 0, sizeof(SpawnHPUpdate_Struct));
SpawnHPUpdate_Struct* ds = (SpawnHPUpdate_Struct*)app->pBuffer;
ds->spawn_id = GetID();

if(IsClient())
{
ds->max_hp=max_hp;
ds->cur_hp=GetHP()-itembonuses->HP;
ds->cur_hp=ds->cur_hp>30000?30000:ds->cur_hp;
}
else
{
ds->cur_hp=IsNPC()?(sint32)GetHPRatio():cur_hp;
ds->max_hp=100;
}
}

Replacing the former lines in the mob.cpp doesnt work for me.


For the LD fix on player death i would like to see the one-liner that fixes the problem. Thanks

Badil 01-05-2004 10:04 AM

Quote:

Originally Posted by grues0me

For the LD fix on player death i would like to see the one-liner that fixes the problem. Thanks

I think the fix in the second post in this thread is what is being referred to.

http://www.eqemulator.net/forums/viewtopic.php?t=11922

grues0me 01-05-2004 10:13 AM

Thanks! Gonna try that immediately.

Edit: I must be doing something wrong. Wether pasting the LD fix to the attack.cpp nor pasting the health bar fix to mob.cpp doesnt change ANYTHING. Is there anything else to be done after editing the files? What can be done wrong???

Badil 01-05-2004 11:23 AM

Quote:

Originally Posted by grues0me

Edit: I must be doing something wrong. Wether pasting the LD fix to the attack.cpp nor pasting the health bar fix to mob.cpp doesnt change ANYTHING. Is there anything else to be done after editing the files? What can be done wrong???

You need to recompile the source code with either VS .NET/VC++ under Windows, or with GCC under Linux ...

Shawn319 01-05-2004 12:02 PM

Quote:

Originally Posted by grues0me
Thanks that fix did it. My only problems now are now:

1. Health bars of the mob never decrease. I copied the fix i found on the board into the mob.cpp, no help.

2. The crash-on-dying bug. I realize it must have to do with the 400 damage some mob do, but i didnt found a fix on the board, except the global change of the max damage via sql commands.

Both these problems are fixed in 0.5.3-DR2(3)+ (the new ones).

you can get a pre-release version from http://Shawn319.eqemulator.net/cvs

grues0me 01-05-2004 12:41 PM

Thanks!

MacLeod 01-11-2004 10:33 AM

Where is this classfix.sql? It's been a while since I visited the warrior trainers in Halas, but I think the ones I'm r-clicking on are supposed to be trainers...

Lurker_005 01-11-2004 09:37 PM

Second page of this thread. http://www.eqemulator.net/forums/vie...c&start=22 for the exact post.

MacLeod 01-12-2004 01:40 AM

Don't know how I missed it, I've read through this whole thread 3-4 times. I gotta get these reading skills up. :lol: Thank you.

Lurker_005 01-12-2004 07:38 PM

Takes a good 5 times thru this thread to get one reading skill up! Dang slow skill improvments! ;)

MacLeod 01-14-2004 01:32 PM

Is there a fix yet for more than one mob spawning on one spot? The second mob is generally the wrong type as well.

Like in EverFrost, where there should be one Ice Giant, there are 2 Ice Giants except one has the Cyclops model. It is like this at all three Ice Giant spawn points in Everfrost.

And then in Vox's chamber, there are more Cyclops hanging out sharing a spawn point with other Giants.

And in Blackburrow, there are splitpaw gnolls running around but with Blackburrow gnoll names.

I tried the duplicate spawn removal and that didn't fix this. Is there any easy way to fix this?

*EDIT*
Forgot to mention, it looked like there were 2 groups of spawns in the DB so I tried deleting the spawns from spawn2 where their ids were very high since there seemed to be a good dividing line but it also got rid of some of the spawns that were supposed to be there.

Just looking at this it would be possible to order by x, y, and z coordinates and just delete one of the spawns if it resides on approximately the same point although that would take a while. I don't know sql that well, so if anyone has any suggestions. :)

a_Guest03 01-15-2004 04:48 AM

These are database problems and not code problems. If it's wrong, nobody has cleaned up that section of the database in the copy that you have.

MacLeod 01-15-2004 07:07 AM

Yeah, I know they are database problems. But I have the version linked on the first post of this thread, which should be the newest.

Just wondering if anyone else has these problems, and if they found an easier way to fix it than going through and manually deleting any mobs that were in almost the same x,y,z coordinates.

j_illmatik 01-15-2004 12:09 PM

Quote:

Originally Posted by Kroeg
is this query built to delete anything other than the duplicate spawns? If so, hold off.. the My World team is tackling this problem (and has been for a few days) already.

When we merged data from another worldbuilder's sources, the transition wasn't entirely seemless =P but we're cleaning it up now. The id #s for the duplicate npcs are far too high, and contain strange lootdrop entries. Next DB release should contain a fix to this problem, but don't quote me. Sometimes we release the DBs before they're ready just to satisfy worldbuilders and serverops.. although I'm pretty sure this is the basis of our next release :D

Looks like they are aware and working on this one already.

masticism 01-25-2004 08:13 PM

Further DB Cleaning of Duplicates
 
I did this mainly to get rid of the duplicate NPC's in paineel (they were starting to annoy me). They may be there for a reason but until the "proper" update gets finished, this will at least get rid of them. No gaurantees though. There is most likely intentional duplicates that are being removed as well...


Adapted from molly's SQL:

1) First, verify that there are duplicates that we want removed:

Code:

SELECT
  `spawn2`.`x`,
  `spawn2`.`y`,
  `spawn2`.`z`,
  `spawn2`.`zone`,
  `npc_types`.`name`,
  count(`spawn2`.`id`) AS `SpawnCount`
FROM
  `npc_types`
  INNER JOIN `spawnentry` ON (`npc_types`.`id` = `spawnentry`.`npcID`)
  INNER JOIN `spawn2` ON (`spawnentry`.`spawngroupID` = `spawn2`.`spawngroupID`)
WHERE
  spawn2.pathgrid = 0
GROUP BY
  `spawn2`.`x`,
  `spawn2`.`y`,
  `spawn2`.`z`,
  `spawn2`.`zone`
HAVING
  (`SpawnCount` = 2)
ORDER BY
  `spawn2`.`zone`,
  `spawn2`.`x`,
  `spawn2`.`y`,
  `spawn2`.`z`

2) Next, for the deletion, we just reuse pieces from above:

Code:

SELECT CONCAT('delete from spawn2 WHERE id = ', max(spawn2.id),';DELETE FROM spawnentry WHERE spawngroupID = ', max(spawn2.spawngroupID),';') Query
FROM
  `npc_types`
  INNER JOIN `spawnentry` ON (`npc_types`.`id` = `spawnentry`.`npcID`)
  INNER JOIN `spawn2` ON (`spawnentry`.`spawngroupID` = `spawn2`.`spawngroupID`)
WHERE
  spawn2.pathgrid = 0
GROUP BY
  `spawn2`.`x`,
  `spawn2`.`y`,
  `spawn2`.`z`,
  `spawn2`.`zone`
HAVING
  COUNT(spawn2.id) =2
ORDER BY
  `spawn2`.`zone`,
  `spawn2`.`x`,
  `spawn2`.`y`,
  `spawn2`.`z`

3) This will give several SQL statements that will delete the highest ID of the duplicate entry.

Again no gaurantees on this, use at your own risk etc.

Thanks to molly for the great inspiration for this!!!

MacLeod 01-26-2004 02:28 AM

Does this actually delete entries? It didn't say any rows were affected. I'd figure it out but my knowledge of SQL is limited, so the code is a bit too complicated.

Also, part of the problem is that many of these double spawns are offset in either of the x,y, or z planes by a couple units instead of on the same spot exactly.

Kroeg 01-26-2004 03:04 AM

There's nothing to figure out... it's the product of 2 DB's sloppily merged together, nothing more.. nothing deeper.

The npcs with the higher range are incorrect (duped) and the ones with the lower range and no lootdrop are the ones that were originally there (and thusly correspond to quest files).

masticism 01-26-2004 04:31 AM

The first step I listed above just generates the results of duplicate entries according to zone, x, y, z entries with the count of duplicates equal to 2. I skipped over all entries that have more than 2 duplicates because I figured these spawns were intentionally there as part of a group. There are other duplicates that are offset by small amounts of x, y or z values. This SQL statement will not handle these.

The second step creates a list of short DELELTE sql queries. The second query when run will not effect any rows directly. You need to take the resulting list of individual queries and run them to actually delete the rows.

I didn't test anything about Loot Drops for the spawns that are left after running these queries. As I said, I was mainly targeting duplicate merchants, gaurds etc. in paineel and this is only meant as something temporary until the real fix comes.

MacLeod 01-26-2004 04:37 PM

Well, it shouldn't affect drops because only the lower numbers will have any drops.

Thanks for the temp fix in any case.

Monrezz 01-31-2004 02:48 PM

Quote:

Originally Posted by mollymillions
SELECT CONCAT('delete from spawn2 WHERE id = ', max(spawn2.id),'; DELETE FROM spawnentry WHERE spawngroupID = ', max(spawn2.spawngroupID),';') Query
FROM spawn2, spawnentry, npc_types
WHERE spawn2.spawngroupID = spawnentry.spawngroupID
AND spawnentry.npcID = npc_types.ID
AND spawn2.pathgrid = 0
GROUP by zone, x, y, z, npc_types.name
HAVING COUNT(spawn2.id) > 1
ORDER BY zone, x, y, z, npc_types.name

The above gives a huge list of deletes...but it doens't do them. Do you have to manually type them into mySQL?

If so, can't you dump the results into an sql file that you could source? There are 1200 results from that query :/

Thanks,

Monrezz

farce 01-31-2004 06:23 PM

bah didnt work...

mollymillions 01-31-2004 10:07 PM

Quote:

Originally Posted by monrezz
If so, can't you dump the results into an sql file that you could source?

Yes that's the idea, redirect the output of the query to a file and then source it. Be warned that i am not an expert at setting up spawns and there may be fundamental flaws with this query? Also its only designed to delete spawns that have the same name and and spawn in the same zone at exactly the same location. A lot of the replicated spawns have '_00' suffixed to the NPC name - the query is not matching these (but it could i.e. GROUP by zone, x, y, z, REPLACE(npc_types.name,'_00','') or similar).

Monrezz 01-31-2004 10:16 PM

How do you redirect the output of the query?

I'm not worried about having a few spawns removed by it, if it means it gets rid of most dupe spawns. If it removed anyone too important I can add them in by hand later. Simply changing to:

SELECT CONCAT('delete from spawn2 WHERE id = ', max(spawn2.id),'; DELETE FROM spawnentry WHERE spawngroupID = ', max(spawn2.spawngroupID),';') Query
FROM spawn2, spawnentry, npc_types
WHERE spawn2.spawngroupID = spawnentry.spawngroupID
AND spawnentry.npcID = npc_types.ID
AND spawn2.pathgrid = 0
GROUP by zone, x, y, z, REPLACE(npc_types.name,'_00','')
HAVING COUNT(spawn2.id) > 1
ORDER BY zone, x, y, z, npc_types.name

...will do it (after sourcing)?

Thanks,

Monrezz

mollymillions 02-01-2004 12:13 AM

Regarding removing all the duplicated spawns, this depends on how you define a duplicated spawn. If you define a duplicated spawn as any that spawn within close vicinity of another then it won't (this is possible but probably not desirable). It only removes spawns that have the same name and spawn in the same zone at exactly the same location.

That query will probably run as is, you will have to test it (i am not very familiar with how MYSQL will handle this, my experience is really limited to Oracle and MSSQL DBMS's). I may even be wrong about the '00' NPC's altogether, i hav'nt really looked that closely, so you should check this first (also including the underscore was misinformation, just use '00').

Check the help that comes with MySQL or the tool you are using to find out how to dump query output to a file (I have been payed out for giving half-assed support in the past, so i will leave it to the offical helpers to give you the low down).

The world building team had asked that we (me?) hold off on posting these types of mods, personally I would just wait for the next DB release. Good luck anyway.

Monrezz 02-01-2004 01:16 AM

I'm not worried about it removing things it shouldn't, I can put all the important ones in by hand.

Could you please tell me how to get it to dump the query into an sql file though, please? had a look on www.mysql.com can't find out how...

Thanks,

Monrezz

masticism 02-01-2004 06:09 AM

Because this groups by only zone, x, y and z (i.e. not name) it should handle any duplicates that have different trailing names. For example, bat00 and bat01 if at the same zone, x, y and z position will have bat01 deleted (assuming it has the higher id number).

I've run this query and deleted a large portion of the duplicates. As I said in the original post, I only targeted duplicates that are equal to 2. I found alot of instances where there were large groups (> 2) in the same location and I figured these were there for a reason.

There are still other dupes that weren't caught by this however mainly because of the fact (as mollymillions mentioned) that there are duplicated entries with small offsets in the x, y and z directions.

I did this as a temporary fiix until the update comes out. At that time I plan to dump my entire database and source in the new one. So if this deletes anything extra I don't mind at this point.

As far as getting the results of a query to dump to a file, it all depends on which mysql client you are using. I'm using a commercial one that shows me the results in its own window and lets me run the query directly from there.

MacLeod 02-01-2004 07:55 AM

If you use Mysql-Front, once the results come up right click on them and click copy as CSV data and then paste them into the query and run it.


All times are GMT -4. The time now is 05:08 AM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.