EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Bug Reports (https://www.eqemulator.org/forums/forumdisplay.php?f=591)
-   -   Secrets of Faydwer - Bug Tracking (https://www.eqemulator.org/forums/showthread.php?t=27600)

trevius 03-02-2009 08:19 PM

Secrets of Faydwer - Bug Tracking
 
This post is created to allow us to track bug reports with Secrets of Faydwer. A current list of the known issues for development tracking can be seen here:

http://www.eqemulator.net/forums/showthread.php?t=27429

If you find a bug that is not already on that list, please post it in this thread (not the development thread linked above) and I will get it added to that list. The list is updated regularly, so check back for current status and updates on bug reports and resolutions.

Here is a list of some of the known issues/bugs with SoF and what is known about them:
1. /who - /who actually works almost perfectly now. But, if you search for /who <name> or use /whotarget, it returns all players in the current zone.
2. Item Trading - Appears trading items may not always work perfectly. This is almost certainly a slot issue with the trade window and can probably be corrected with an adjustment to the encode/decode of it.

Unverified Bug Reports:
1. Disciplines Failing - Reports of some disciplines failing to execute. I think this happens on all clients.

SoF Bugs with the client iself:
1. Highhold Keep - From the brief testing I did on this, it appears that trying to enter the old HHK zone causes the client to crash and it needs to be moved out of the zone for them to be able to log in again. The old HHK zone was removed from the newer clients, and so they cannot access that zone.


Fixed Bugs from this post:
1. Fast Food/Drink Consumption - Food and Drink now get consumed at the proper rate.
2. Throwing/Ranged Animation - The throwing animation is now working (thanks Derision!)
3. Animation - All Animation issues are now resolved (thanks Derision!)
4. Drakkin Corpses - Drakkin corpses (as well as Froglok corpses) now show properly even after a zone dump occurs (thanks Derision!)
5. Spell Fizzles - After fizzling a spell, there is an especially long delay before the spell can be recast. It appears that there may be different ways of handling spell fizzles in SoF. In Titanium, I believe it was treated like a normal spell interrupt.
6. Disconnect on Death - You are no longer disconnected on Death in SoF.
7. Potion Belt - Potion belt appears to function correctly now.
8. Total Spent AAs - This is now reported correctly for all clients including SoF and SoD.

I will add more to this list later.

Zeice 03-09-2009 04:10 PM

I was messing around on my 30 days that came with SoF, and this would go under new systems. There appears to be the rest system now. Once a player leaves combat a 30 second timer begins, once that 30 second timer is up the player can med/regen 2x faster while sitting. I didn't see it on the list so figured I'd throw it out there.

cubber 03-25-2009 09:17 AM

What's with the bind traps? Human guys with "Bind Trap" for a name. There is one near the bank in POK.

Andrew80k 03-25-2009 02:25 PM

Quote:

Originally Posted by cubber (Post 166257)
What's with the bind traps? Human guys with "Bind Trap" for a name. There is one near the bank in POK.

Yeah, I was going to ask about this. They showed up a couple of rev's ago. Anyone know what they are?

kedobin 04-17-2009 04:22 AM

If this clutters this thread too badly, feel free to move it to its own thread.

Besides the things like the bind traps in pok, or the shortened item link text, I've noticed a number of things that either haven't been mentioned, or have been talked about a bit but not the same symptoms I found.

Quick info: using rev408-bots (binaries). DB and quests aren't newest, but merely a few days old (April 8th?). Most testing done in sof, some comparisons done in titanium, all done with minilogin.
In previous sessions, I've had issues with zone going to sleep when I'm zoning, so set up a boot3zones.bat to test if issue's with launcher or zone.

Quicker stuff first:
Code:

Every time enter a new zone, sound effect of closing backpack plays.
Don't remember this  in Titanium, but wasn't paying enough attention to be
certain it wasn't there.

After resting mouse over item in inventory:
Error: Server found no item in slot 203 (->-6315), Deleting Item!
Attempted to repeat, but resting mouse over items didn't repeat it. 
Text was in-game with red text.  No known items actually removed.

Another time, in same zone, some time later (15 min+?)
Error: Server found no item in slot 11018 (->-6315), Deleting Item!
No known provocations.  On a related note, in some earlier sof revisions,
these occurred almost non-stop but with slots in lower number range.

Every time zoning occurs, a very large number of
[Debug] [NET__ERROR] XXXX: xx xx xx xx xx ... strings appear, where XXXX is
some number, and xx is some hex value.  Later quickly tested in Titanium - net
errors didn't occur.  Noticed that during time net errors occur, client doesn't
zone, or if already in zone then client goes ld.  Basically, no waiting
for client to try zoning in Titanium, but may take 1-3 minutes before
client responds to zoning request in SoF.

Looted a decaying skeleton, had 2 bone chips, 1 skeleton tibia, 1 cloth sleeves. 
Upon looting sleeves, they turned into bone chips on cursor. 
Upon looting 2nd bone chips, turned into cloth sleeves. 
Forgot to write order of items in loot screen, except in [1,1] showed sleeves
and [2,2] showed bone chips (where [X,Y] is coords of loot window). 
These 2, when looted, were what swapped.

Killed and looted a grass snake.  Showed Fang, Scales, Fang. 
When looted, fang in [1,1] changed into scales, and scales in [1,2]
turned into fang.  Fang in [2,1] remained a fang.

Monk skill issue: monk starts with Tiger Claw, Eagle Strike, Dragon Punch
at level 1.  Fail upon using unless train at guildmaster.  Upon training, still
at level 1, TC gets 10 skill, ES gets 20, and DP gets 25.
Tested on new monk in Titanium client: skills require level 10, 20, and 25
respectively in order to train.


kedobin 04-17-2009 04:27 AM

Now the larger part, with clips of feedback from world and zone windows.
Code:

Books don't work.  Attempt to open book, prevents mouse from interacting with
npcs and objects (doors, etc).  Mouse look and manipulating ui still possible. 
Inventory buttons function, but items do not react to mouse.
Inventory window can close, but cannot be reopened, whether by pressing I or
pressing button in window selector.  Other than inventory button, Keyboard
has full functionality, including target nearest npc (F8), consider (c),
and use (u).

Previous session, zoning failed.  Tested using boot3zones.bat. 
Failed on character zoning from North Qeynos to PoK.  Both zone files go
into sleeping mode and leave client hanging.  After several minutes
client proceeds to login screen.


World.exe, from first enter NQ, to end of output.

       
Code:

       
[Debug] [WORLD__CLIENT] mini: Attempting autobootup of qeynos2 (2)
[Debug] [WORLD__ZONE] [3] Setting to 'qeynos2' (2)
[Debug] [WORLD__CLIENT] mini: Entering zone qeynos2 (2)
[Debug] [WORLD__ZONE] [3] [qeynos2] Broadcasting a world time update
[Debug] [WORLD__ZONE] [3] [qeynos2] Setting to 'qeynos2' (2)
[Debug] [WORLD__CLIENT] mini: Sending client to zone qeynos2 (2) at 127.0.0.1:70
00
[Debug] [WORLD__CLIENT] mini: Client disconnected (not active in process)
[Debug] [WORLD__ZONE] [3] [qeynos2] ZoneToZone request for Virecita current zone
 2 req zone 202

[Debug] [WORLD__ZONE] [3] [qeynos2] Processing ZTZ for egress from zone for clie
nt Virecita

[Debug] [WORLD__ZONE] Successfully booted a zone for Virecita

[Debug] [WORLD__CLIENT] New connection from 127.0.0.1:1383
[Debug] [NET__IDENT_TRACE] 127.0.0.1:1383: First opcode 0x6c3c did not match exp
ected 0x2792
... ... ...
... ... ...
[Debug] [NET__IDENTIFY] Identified stream 127.0.0.1:1383 with signature SoF_worl
d
[Debug] [WORLD__CLIENT] Checking inbound connection 127.0.0.1 against BannedIPs
table
[Debug] [WORLD__CLIENT] Connection 127.0.0.1 PASSED banned IPs check.  Processin
g connection.
[Debug] [WORLD__CLIENT] mini: Logged in. Mode=(Zoning)
[Debug] [WORLD__CLIENT] mini: MiniLogin Account #1
[Debug] [WORLD__CLIENT] mini: Telling client to continue session.
Unable to get group id, char not found!
[Debug] [WORLD__CLIENT] mini: Zoning to poknowledge (202)
[Debug] [WORLD__CLIENT] mini: Sending client to zone poknowledge (202) at 127.0.
0.1:7001
[Debug] [WORLD__CLIENT] mini: Client disconnected (not active in process)
[Debug] [WORLD__ZONE] [2] Setting to 'poknowledge' (202)
[Debug] [WORLD__ZONE] [2] [poknowledge] Broadcasting a world time update
[Debug] [WORLD__ZONE] [2] [poknowledge] ZoneToZone request for Virecita current
zone 2 req zone 202

[Debug] [WORLD__ZONE] [2] [poknowledge] Processing ZTZ for ingress to zone for c
lient Virecita

[Debug] [WORLD__ZONE] [2] [poknowledge] Setting to 'poknowledge' (202)




kedobin 04-17-2009 04:34 AM

Qeynos Zone:
Code:

[Debug] Unable to convert EQ opcode 0x66c8 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x66c8) Size=4]
  0: 08 00 00 00                                        | ....
[Debug] Unable to convert EQ opcode 0x10e3 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x10e3) Size=4]
  0: 19 00 00 00                                        | ....
[Debug] Unable to convert EQ opcode 0x4db4 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x4db4) Size=8260]
Dump limited to 1000 characters:
  0: 18 49 00 00 4E 6F 74 65 - 20 77 69 74 68 20 46 69  | .I..Note with Fi
  16: 73 74 20 49 6E 73 69 67 - 6E 69 61 00 00 00 00 00  | st Insignia.....
  32: EA F3 60 00 AA 18 2F 49 - 06 00 00 00 06 00 00 00  | ..`.../I........
  48: 40 86 82 05 64 DD 12 00 - 00 00 00 00 4D 49 58 45  | @...d.......MIXE
  64: 52 5F 6D 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | R_m.............
  80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
  96: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
 112: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
... ... ...
... ... ...
 992: 00 00 00 00 00 00 00 00                            | ........
[Debug] Unable to convert EQ opcode 0x4db4 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x4db4) Size=8260]
Dump limited to 1000 characters:
  0: 18 49 00 00 4E 6F 74 65 - 20 77 69 74 68 20 46 69  | .I..Note with Fi
  16: 73 74 20 49 6E 73 69 67 - 6E 69 61 00 00 DB 30 49  | st Insignia...0I
  32: 19 00 00 00 3F EB 65 00 - 40 C1 12 00 00 DB 30 49  | ....?.e.@.....0I
  48: DC E7 12 00 D4 D5 6A 00 - 48 C8 71 00 FF FF FF FF  | ......j.H.q.....
  64: 66 85 6A 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | f.j.............
  80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
... ... ...
... ... ...
 992: 00 00 00 00 00 00 00 00                            | ........
[Error] No book to send, (yy<--)
[Debug] Unable to convert EQ opcode 0x4db4 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x4db4) Size=8260]
Dump limited to 1000 characters:
  0: 18 49 00 00 4E 6F 74 65 - 20 77 69 74 68 20 46 69  | .I..Note with Fi
  16: 73 74 20 49 6E 73 69 67 - 6E 69 61 00 00 00 00 00  | st Insignia.....
  32: EA F3 60 00 AA 18 2F 49 - 06 00 00 00 06 00 00 00  | ..`.../I........
  48: 40 86 82 05 64 DD 12 00 - 00 00 00 00 4D 49 58 45  | @...d.......MIXE
  64: 52 5F 6D 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | R_m.............
  80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
... ... ...
... ... ...
 992: 00 00 00 00 00 00 00 00                            | ........
[Debug] Unable to convert EQ opcode 0x4db4 to an Application opcode.
[Debug] [CLIENT__NET_ERR] Virecita: Unhandled incoming opcode: [OpCode OP_Unknow
n (0x4db4) Size=8260]
Dump limited to 1000 characters:
  0: 18 49 00 00 4E 6F 74 65 - 20 77 69 74 68 20 46 69  | .I..Note with Fi
  16: 73 74 20 49 6E 73 69 67 - 6E 69 61 00 DC E7 12 00  | st Insignia.....
  32: 08 3A 6D 00 FF FF FF FF - 96 B7 4B 00 04 00 00 00  | .:m.......K.....
  48: C8 2A 39 49 16 20 00 00 - C4 E1 12 00 80 4E 88 12  | .*9I. .......N..
  64: 49 FF 4B 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | I.K.............
  80: 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00  | ................
... ... ...
... ... ...
 992: 00 00 00 00 00 00 00 00                            | ........
Message: Hail, gnoll dung
[Debug] Player Virecita has requested a zoning to LOC x=-289.000000, y=147.00000
0, z=-157.000000, heading=383.000000 in zoneid=202
[Debug] Zone request from Virecita
  0: 56 69 72 65 63 69 74 61 - 00 00 00 00 01 00 00 00  | Virecita........
  16: 62 F1 6A 01 BC 01 77 01 - 00 00 00 00 00 00 00 00  | b.j...w.........
  32: D4 01 77 01 BC 01 77 01 - 00 00 00 00 00 00 00 00  | ..w...w.........
  48: 62 F1 6A 01 BC 01 77 01 - 84 00 00 00 C8 C6 27 18  | b.j...w.......'.
  64: CA 00 00 00 00 00 13 43 - 00 80 90 C3 00 00 1D C3  | .......C........
  80: 01 00 00 00 00 00 00 00                            | ........
[Status] Zoning 'Virecita' to: poknowledge (202) x=-289.000000, y=147.000000, z=
-157.000000
[Debug] Client::AddMoneyToPP() Virecita should have:  plat:0 gold:0 silver:0 cop
per:0
Dropping client: Process=false, ip=127.0.0.1, port=1382
[Status] Zone Shutdown: qeynos2 (2)
[Normal] Zone shutdown: going to sleep

PoK Zone:
Code:

[Status] Booting poknowledge
Map header: 105078 faces, 1201 nodes, 158626 facelists
Loaded map: 315234 vertices, 105078 faces
Map BB: (-408.00 -> 1560.00, -984.00 -> 984.00, -216.00 -> 720.00)
Map ./Maps/poknowledge.map loaded.
Water region map has 3603 nodes.
Water Map ./Maps/poknowledge.wtr loaded.
Path File ./Maps/poknowledge.path not found.
[Debug] The next weather check for zone: poknowledge will be in 12282 seconds.
[Status] Loading spawn conditions...
[Status] Loading static zone points...
[Status] Loading spawn groups...
[Status] Loading spawn2 points...
... ... ...
... ... ...
[Status] Init Finished: ZoneID = 202, Time Offset = 0
[Debug] Zone: poknowledge has weather of type 1.
[Debug] Zone: poknowledge(202) has weather type = 1. The weather timer has been
enabled.
[Normal] Starting Log: logs/eqemu_zone_3212.log
[Normal] ---- Zone server poknowledge, listening on port:7001 ----
[Status] Zone Bootup: poknowledge (202)
[Debug] [WORLD__CLIENT] New connection from 127.0.0.1:1385
Received Message SyncWorldTime
Time Broadcast Packet: EQTime [06:33 pm]
[Debug] [NET__IDENTIFY] Unable to identify stream from 127.0.0.1:1385 before tim
eout.
[Status] Zone Shutdown: poknowledge (202)
[Normal] Zone shutdown: going to sleep

Tested note again, in Nexus. Again locked up mouse and prevents inventory screen from opening. Zoned into shadowhaven. Zoned in ok, mouse usable again, but went linkdead after trying to consider a guard.
Ran Titanium client, created nearly identical character, read note, no issues.

Upon linkdeath in shadowhaven, debug net errors occurred again, preventing access to feedback in zone screen due to the number of these errors.


World feedback:
Code:

[Debug] [WORLD__CLIENT] mini: Logged in. Mode=(Zoning)
[Debug] [WORLD__CLIENT] mini: MiniLogin Account #1
[Debug] [WORLD__CLIENT] mini: Telling client to continue session.
Unable to get group id, char not found!
[Debug] [WORLD__CLIENT] mini: Zoning to shadowhaven (150)
[Debug] [WORLD__CLIENT] mini: Sending client to zone shadowhaven (150) at 127.0.
0.1:7001
[Debug] [WORLD__CLIENT] mini: Client disconnected (not active in process)
[Debug] [WORLD__ZONE] [2] Setting to 'shadowhaven' (150)
[Debug] [WORLD__ZONE] [2] [shadowhaven] Broadcasting a world time update
[Debug] [WORLD__ZONE] [2] [shadowhaven] ZoneToZone request for Virecita current
zone 152 req zone 150

[Debug] [WORLD__ZONE] [2] [shadowhaven] Processing ZTZ for ingress to zone for c
lient Virecita

[Debug] [WORLD__ZONE] [2] [shadowhaven] Setting to 'shadowhaven' (150)


trevius 04-17-2009 04:39 AM

Thanks for the reports, but remember when testing SoF and reporting issues, it is very important that you are using the absolute latest updates from the SVN. While the binaries try to stay somewhat current, they can get behind fairly quickly considering how quickly the SoF updates come in at times.

Almost every issue you mentioned has already been corrected as of Revision 432, which is the current one ( quite a few updates since R408 ). See the change list here for recent updates:

http://code.google.com/p/projecteqemu/source/list

I think the only issue you mentioned that hasn't been addressed yet is the issue with books. I haven't even tested them yet personally, but I would guess that we probably need to adjust the structure for them to work properly.

As for the hex you are seeing in your log files, that can be any number of things. Most of the stuff you see in there atm should be perfectly normal.

I think the bind traps are something specific to the new PEQ database updates. I am not exactly sure what they are, but I would guess they are something similar to the Illusionist I have set on Storm Haven. Basically, I use that NPC to move players from their spawn point so you don't get 20 characters all piling up on top of each other. Otherwise, it can get characters stuck and also causes heavy position updates to be sent out wasting a ton of bandwidth. I dunno if PEQ has them set to be invisible in Titanium, but if so, they might need to do something different to make them invisible in SoF. I think race 240 works fine for invisible NPCs no matter what client. Also, I think that the invis field in the spawn structure for SoF isn't found yet, but that is on the todo list.

cavedude 04-17-2009 09:58 AM

Quote:

Originally Posted by trevius (Post 167767)
I think the bind traps are something specific to the new PEQ database updates. I am not exactly sure what they are, but I would guess they are something similar to the Illusionist I have set on Storm Haven. Basically, I use that NPC to move players from their spawn point so you don't get 20 characters all piling up on top of each other. Otherwise, it can get characters stuck and also causes heavy position updates to be sent out wasting a ton of bandwidth. I dunno if PEQ has them set to be invisible in Titanium, but if so, they might need to do something different to make them invisible in SoF. I think race 240 works fine for invisible NPCs no matter what client. Also, I think that the invis field in the spawn structure for SoF isn't found yet, but that is on the todo list.

Bind Traps were collecting from Live. We don't use them on PEQ, as we're not sure what they are used for. However, they and I noticed many other "trigger" type NPCs are visible using SoF and are not using 0.6.2 and Titanium. I figure that will be ironed out eventually :)

cubber 04-21-2009 12:51 PM

Couple things I noticed while playing on my server using SoF client. My server is at rev 437 using PEQ svn 4

Spell fizzles:

If you fizzle a spell the recast time on it seems extra long.

Bags:

If you purchase more bags from a vendor than you have open slots bags will start going into other bags.

Now please note I have not played on live in like 5 years and have been playing on the titanium client since it was first supported by the eqemu project. So that is pretty much what I know, and I am not sure if these are legit changes per live, or if they are bugs.

Animations:

Iksar monks have no throwing animation. Not sure if this applies to other races or not.

Congdar 04-24-2009 02:25 PM

Arrow
 
For archery, the archery animation works, but the arrow animation doesn't show. I do see the arrow in the Titanium client so maybe the SoF client doesn't recognize the SendItemAnimation()? Code from special_attacks.cpp:
Code:

void Client::RangedAttack(Mob* other) {
...
        DoAnim(animShootBow);
        SendItemAnimation(target, AmmoItem);
...
}


cubber 04-24-2009 08:53 PM

A few more bugs I have noticed:

Items such as "Silver Moon Wrist Wraps" that have a long cast time do not show the casting progress bar decrease until there is a few seconds left on the timer. This particular item has a 25 second cast timer and it does not start decreasing the timer until about 20 seconds into the cast.

Right clickable items that are labeled "Must Equip" are castable from inventory. You should have to put them into a slot to use them.

Secrets 04-25-2009 04:37 PM

Disciplines don't seem to be working from my limited testing. They say I need to be out of combat, regardless if I am in combat or not.

KLS 04-26-2009 05:21 AM

That seems odd since many are designed specifically for being used in combat.

trevius 04-26-2009 06:00 AM

That may be a spell file issue. It probably depends on how you have your server setup. If you use a custom spell file, you probably need to create one to use for SoF as well so they match up. They seem to work fine for me after I did that.

What you should do is use the new import/export scripts that AndMetal made. You can import your custom Titanium spell file into the database using them. Then, export it back into the same file. What that will do is add all of the extra spell fields that are required for SoF. Otherwise, if you try to use a plain Titanium spell file on SoF, it crashes the client. But, by doing the import and export, the spell file will then work for both clients. The file is always backwards compatible (as far as I know), but it is not forwards compatible.

I may need to do more testing on Discs, but so far they seem fine to me.

Secrets 04-26-2009 02:45 PM

Quote:

Originally Posted by trevius (Post 168316)
That may be a spell file issue. It probably depends on how you have your server setup. If you use a custom spell file, you probably need to create one to use for SoF as well so they match up. They seem to work fine for me after I did that.

What you should do is use the new import/export scripts that AndMetal made. You can import your custom Titanium spell file into the database using them. Then, export it back into the same file. What that will do is add all of the extra spell fields that are required for SoF. Otherwise, if you try to use a plain Titanium spell file on SoF, it crashes the client. But, by doing the import and export, the spell file will then work for both clients. The file is always backwards compatible (as far as I know), but it is not forwards compatible.

I may need to do more testing on Discs, but so far they seem fine to me.

It's probably the disc type, since all of the spells on KMRA were hand-made and it would seem in SoF some of them are hardcoded to have a specific disc re-use as out of combat only. I'll try and get the number on the one that doesn't work, but some discs do work, some don't... i'm willing to bet it's spell file dependant.

Secrets 05-04-2009 07:27 AM

Quote:

Originally Posted by Secrets (Post 168334)
It's probably the disc type, since all of the spells on KMRA were hand-made and it would seem in SoF some of them are hardcoded to have a specific disc re-use as out of combat only. I'll try and get the number on the one that doesn't work, but some discs do work, some don't... i'm willing to bet it's spell file dependant.

Just an update on this, for reference:

I ended up importing the spells, exporting them, and some spells were working because the number of fields was correct for titanium. Some of the older spells Raid Addicts has did *not* have all the required fields for titanium, however the titanium client still read the spell. When I converted this over to SoF with the import/export technique, those spells got corrupted. I ended up taking my broken file and opening it up in Ailia's Spell Editor, and then save it without doing any changes, and that added the missing fields.

It's a good thing to know, because if I didn't have those fields, they would have got parsed incorrectly into the DB (which they did initially) and then broken in the end SoF client. So, I imported and exported again after saving the spell file again, and this time it made a very nice Secrets of Faydwer compatable spell file.

Just wanted to post my progress on this for reference.

Shendare 05-10-2009 03:53 AM

I'm sure this is a low priority, but I notice that with the SoF client and rev488 codebase, the npc_types fields luclin_hairstyle, luclin_haircolor, luclin_beard, and luclin_beardcolor are not being recognized.

All Luclin-model playable-race NPCs display the defaults for these values, regardless of the database's settings.

The Titanium client appears to be able to work with the aforementioned fields' values, and both clients are able to acknowledge face, luclin_eyecolor, and luclin_eyecolor2.

trevius 05-10-2009 05:05 AM

Thanks for the report, Shendare, but that is already a known issue as posted here:

http://www.eqemulator.net/forums/showthread.php?t=27429

Quote:

Cosmetic Work:
1. Spawn Structure - The spawn structure could use a few more fields to be identified (hair/beard color, hair, other facial features, sneak, and invis).
That post is updated regularly, so please make sure to check there as well as the first page in this thread before posting new bug reports.

Shendare 05-10-2009 12:52 PM

I totally missed that while looking over the list. Sorry about that! Feel free to delete my post!

warhawk 05-10-2009 05:09 PM

Potion belt bug
 
Hi

I've noticed a bug with the potion belt using the SOF client. If i have a stack of 6 potions it shows 36 in the potion belt icon. Also ,when clicked it gives the error message Error: item not found in inventory slot 272..

This is on PEQ using version 491

trevius 05-10-2009 07:06 PM

Sounds like we need to set a slot encode for the potion belt as well. The whole slot change thing from Titanium to SoF is probably one of the biggest pains of anything lol. I will add that to the list of bugs and try to take a look at it later tonight. Thanks for the report.

Edit: After checking on this a bit, it seems that the slot problem is caused by OP_CastSpell. Looks like we just need to set an encode to convert all of the inventory slots (including inside bags) from Titanium to SoF, since almost all slot numbers changed. This should be a fairly simple change. I am not sure what else is going to need to be done to allow potions to be cast while inside bags as that might be a restriction by castspell itself. If so, I am sure we can correct it, but it will probably mean doing some type of check for if the item is a potion or not, because normal clicky items shouldn't be clickable from inside bags.

kimura0715 07-02-2009 11:43 AM

not sure if its reported yet, but on my server, if using SoF, some of the augs are invisible....if u do link all on the mob's corpse it will show an aug, but its invisible...i can even loot it and put it in a bag, but just cant see it

ojamajoe 09-13-2009 08:48 PM

Variables:expansions
 
The SOF client seems to ignore the value set in the database under variables: expansions. Hardly earth-shattering, but some people like to use this to limit features.

Davood 09-21-2009 02:56 AM

The SoF client seems to display hp strangely above level 75, it doesn't show the base HP and the stamina/wis/int calculated HPs/Mana (IE a naked level 76 toon would have like 50 hp/mana). Items and such work fine;

Could we send a higher hp value to the client as a work around? Is this even a client problem? SoF client should be doing calculations properly until level 80 right?

Davood 09-22-2009 10:44 AM

ok after some testing;

it looks like the BASE HP and the HP from stamina is not being sent to the client when the cilent is over 75. The hp on the server side is fine however....

is the client handling the hp differently over 75?!?!

Keep in mind, we are talking SoF client

trevius 09-28-2009 10:15 PM

Yeah, it is the SoF client, but the eqgame.exe version that was used for SoF was actually released on Live over a month before SoF actually came out. So, since the cap was still level 75 at that time, maybe they had the client limited to not calculate base HPs/Mana/End above that level yet. I am guessing they have some if statement in there that says:

Code:

if (level > 75)
{
  BaseHP = 5;
  BaseEnd = 5;
  BaseMana = 5;
}

That is my guess as to what the client is doing, NOT what the EQEmu server is doing. The EQEmu server calculates stats just fine for post 75, but the SoF client isn't so friendly about it. So, while SoF fixed the issue with skills rolling over when higher than the level cap (like Titanium has an issue with), they introduced a new issue with HP/Mana/End not being calculated properly.

I am sure there is more than 1 way around it, but one idea would be to just pick a common slot and send the base hp/mana/end of the char for the item in that slot if they are over level 75. So, if your base HP should be 2000, and we are putting it on a charm that has 50HPs on it already, the charm would actually display as having 2050HPs for chars over level 75. This would all still be calculated the normal way server-side, but would just be a work-around hack to trick the client. It would actually be fairly simple to do this change, I think.

Secrets 09-28-2009 10:56 PM

You could always make a function to send a fake item to a weird slot on the player. That way, the player equips it, and gets the statistics from it, but doesn't actually see it.

trevius 09-28-2009 11:23 PM

If the player can't see it, neither can the client, unfortunately. The only option I can think of that would be similar to that would be to force the Power Source slot to always be equipped and for that slot to handle the level 76+ base hp/mana/end.

Secrets 09-29-2009 02:10 AM

Quote:

Originally Posted by trevius (Post 179393)
If the player can't see it, neither can the client, unfortunately. The only option I can think of that would be similar to that would be to force the Power Source slot to always be equipped and for that slot to handle the level 76+ base hp/mana/end.

Incorrect; the player cannot see tribute slots, which are invisible slots. Could always add it to the base of the tribute items + the tribute effects.

Take a look at the Client::SendItemPacket function. This shows an example of how this is done in tributes.

Secrets 09-29-2009 02:17 AM

I'll actually code this just so we can get this working, instead of arguing it pointlessly :P

KLS 09-29-2009 03:02 AM

He's right, here's some very simple code demonstrating the concept:

Code:

void command_optest(Client *c, const Seperator *sep)
{
        if(sep->IsNumber(1))
        {
                switch(atoi(sep->arg[1]))
                {
                        case 1:
                                {
                                        const ItemInst* inst = c->GetInv().GetItem(29);
                                        if(inst)
                                        {
                                                uint32 slot_id = atoi(sep->arg[2]);
                                                if(slot_id >= 400 && slot_id <= 404)
                                                {
                                                        c->SendItemPacket(slot_id, inst, ItemPacketTributeItem);
                                                }
                                        }
                                }
                                break;
                        default:
                        {               
                                break;
                        }
                }
        }
}

Makes the client gain the stats of the item in your lower right inventory slot without equiping it. It's somewhat complicated in terms of a client hack but in theory yes it could certainly work.

trevius 09-29-2009 05:08 AM

Awesome! I forgot about tribute being invisible item slots. That should work perfectly, and as far as hacks go, at least that would be a fairly clean one as far as the client is concerned.

ChaosSlayerZ 09-29-2009 11:23 AM

this not gonna screw up the actual tribute in anyway? Not that I care much for tribute, but I am just curious.
Also - since this is a fix for SoF - will people running T be adversely affected?
Since post 75 T client shows hp correctly already.

Davood 09-29-2009 01:47 PM

Quote:

Originally Posted by ChaosSlayerZ (Post 179411)
this not gonna screw up the actual tribute in anyway? Not that I care much for tribute, but I am just curious.
Also - since this is a fix for SoF - will people running T be adversely affected?
Since post 75 T client shows hp correctly already.

Well in the sever handshake; the server knows if the client is running titanium or SoF; therefore you can run the extra code just for the SoF clients.

KLS 09-29-2009 05:21 PM

That or you can not be lazy and I don't know account for the tribute in there too. That's what I meant by somewhat complicated.

Secrets 10-19-2009 11:20 PM

I hacked up the tribute code and came up with this.

tribute.cpp, replaced the entire function

Code:

void Client::DoTributeUpdate() {
       
        const Item_Struct* myitem = database.GetItem(1001);
        Item_Struct* item = (Item_Struct*) malloc(sizeof(Item_Struct));
        memcpy(item, myitem, sizeof(Item_Struct));

        if(GetLevel() >= 76 && this->GetClientVersion() == EQClientSoF)
        {
                item->HP += (CalcBaseHP() - 5);
                item->Mana += (CalcMaxMana() - 5);
                item->Endur += (this->max_end - 5);
        }


        const Item_Struct* item2 = item;
        ItemInst* myinst = database.CreateBaseItem(item2);
        SendFakeItem(400, myinst, ItemPacketTributeItem);
                        return;
                       
}

inventory.cpp, new function

Code:

void Client::SendFakeItem(sint16 slot_id, ItemInst* inst, ItemPacketType packet_type)
{

        if (!inst)
                return;
       
        // Serialize item into |-delimited string
        string packet = inst->Serialize(slot_id);
       
        EmuOpcode opcode = OP_Unknown;
        EQApplicationPacket* outapp = NULL;
        ItemPacket_Struct* itempacket = NULL;
       
        // Construct packet
        opcode = (packet_type==ItemPacketViewLink) ? OP_ItemLinkResponse : OP_ItemPacket;
        outapp = new EQApplicationPacket(opcode, packet.length()+sizeof(ItemPacket_Struct));
        itempacket = (ItemPacket_Struct*)outapp->pBuffer;
        memcpy(itempacket->SerializedItem, packet.c_str(), packet.length());
        itempacket->PacketType = packet_type;
       
#if EQDEBUG >= 9
                DumpPacket(outapp);
#endif
        //DumpPacket(outapp);
        FastQueuePacket(&outapp);

}

and the corresponding header function in Client.h

Code:

void        SendFakeItem(sint16 slot_id, ItemInst* inst, ItemPacketType packet_type);
and lastly, make it so every time a player gains a level that it recalculates tributes & sends a new item, effectively granting the player a new stat, exp.cpp:

Code:

                DoTributeUpdate();
near

Code:

CalcBonuses();
        if(!RuleB(Character, HealOnLevel))
        {
                int mhp = CalcMaxHP();
                if(GetHP() > mhp)
                        SetHP(mhp);
        }
        else
        {
                SetHP(CalcMaxHP());            // Why not, lets give them a free heal
        }
                DoTributeUpdate();
        SendHPUpdate();
        SetMana(CalcMaxMana());
        UpdateWho();
        Save();

that should do it. most of the hard work is done.

Also, I would change 1001 to a blank item, or use a non-used ID like 10 for the item. That will resolve adding AC to the client.

Other than that, it works.

Secrets 10-19-2009 11:26 PM

Quote:

Originally Posted by Secrets (Post 180283)
and lastly, make it so every time a player gains a level that it recalculates tributes & sends a new item, effectively granting the player a new stat, exp.cpp:

I would actually add it into CalcBonuses(); near the end, since that's the most logical place for it, seeing as it needs to be updated every time your hp/mana/end is changed, now that I think about it :p

Secrets 10-19-2009 11:42 PM

As per KLS' suggestion, I should use new instead of malloc(), so I am going to. I should also free memory :P

Code:

void Client::DoTributeUpdate() {
       
        const Item_Struct* myitem = database.GetItem(1001);
        Item_Struct* item = new Item_Struct;
        memcpy(item, myitem, sizeof(Item_Struct));

        if(GetLevel() >= 76 && this->GetClientVersion() == EQClientSoF)
        {
                item->HP += (CalcBaseHP() - 5);
                item->Mana += (CalcMaxMana() - 5);
                item->Endur += (this->max_end - 5);
        }


        const Item_Struct* item2 = item;
        ItemInst* myinst = database.CreateBaseItem(item2);
        SendFakeItem(400, myinst, ItemPacketTributeItem);
        delete item;
        delete myinst;
        return;
                       
}


KLS 10-20-2009 02:57 PM

I'm pretty sure this kills some tribute functionality which isn't acceptable but based on what's here we can rewrite this to be more consistent with our codebase:

Code:

void Client::DoTributeUpdate()
{
        const Item_Struct* myitem = database.GetItem(1001);
        Item_Struct* item = new Item_Struct(*myitem);

        if(GetLevel() >= 76 && this->GetClientVersion() == EQClientSoF)
        {
                item->HP += (CalcBaseHP() - 5);
                item->Mana += (CalcMaxMana() - 5);
                item->Endur += (this->max_end - 5);
        }

        ItemInst* myinst = database.CreateBaseItem((const Item_Struct*)item);
        SendItemPacket(400, myinst, ItemPacketTributeItem);
        safe_delete(item);
        safe_delete(myinst);
}

And there isn't a point in making a SendFakeItem() when it copies SendItemPacket word for word. All that said I think it's an acceptable proof of concept and I think we can put it into action. =p


All times are GMT -4. The time now is 03:10 PM.

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