Jump to content

Suggestion: Enforce class hierarchy on jobchange


Wildcard

Recommended Posts


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  28
  • Reputation:   20
  • Joined:  01/22/12
  • Last Seen:  

Summary

I would like to propose a modification to the job change system that deals with cases that are not supposed to happen in regular gameplay. By using @job, or just a haphazard jobchange npc, it is possible to create characters that never went through the right job order, and thus lack skill points/cannot skill certain skills/exhibit other flaws especially revolving around the NV_BASIC skill. My modification would force the code to go back to novice and walk the job tree all the way, and provide the right amount of skill points along with a skill reset. In essence, it is supposed to give GMs cleaner scenarios when testing jobs.

Motivation

There is a large number of would-be bugs and generally random/undesirable effects in the current system (see this bug) that this change would address. In light of r15625, where I removed a couple of clumsy workarounds in the source that sort of dealt with the issues(but really only masked them), The fact that I need to use @skpoint to fix such characters is also something that has been personally bugging me since the first time I ever used @job on *Athena. I want to commit this more than anything. However, since it is a rather substantial modification, I thought I would run it by everyone before committing the changeset. Are there any objections or concerns on your side? Anything I may have missed?

Proposed Solution

This diff also includes a couple of related fixes to what I can only believe to be oversights on the authors. I should probably commit those regardless of what we decide on this issue. Testing is still ongoing on my end as well.

pc_jc.patch

  • Upvote 5
Link to comment
Share on other sites

  • 1 month later...

  • Group:  Members
  • Topic Count:  169
  • Topics Per Day:  0.04
  • Content Count:  1260
  • Reputation:   750
  • Joined:  11/19/11
  • Last Seen:  

I don't get why this remained with 0 posts so far. it's totally worth imo

  • Upvote 1
Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  75
  • Topics Per Day:  0.02
  • Content Count:  2223
  • Reputation:   593
  • Joined:  10/26/11
  • Last Seen:  

I didn't see it before :D

I vote yes also.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  91
  • Reputation:   25
  • Joined:  11/28/11
  • Last Seen:  

++++++1

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  47
  • Topics Per Day:  0.01
  • Content Count:  633
  • Reputation:   78
  • Joined:  11/14/11
  • Last Seen:  

I agree with this.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  28
  • Topics Per Day:  0.01
  • Content Count:  562
  • Reputation:   152
  • Joined:  02/21/12
  • Last Seen:  

+1

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  12
  • Topics Per Day:  0.00
  • Content Count:  117
  • Reputation:   167
  • Joined:  11/10/11
  • Last Seen:  

I don't have a real issue with this. Something just needs addressing in the patch though:

+ (sd->class_&JOBL_THIRD) && !(b_class&JOBL_THIRD) || // changing back from 3rd class

Should have brackets around it? That && is a segregate operator for the || operators before hand so this operation should really have brackets around it. As long as this has been tested and is confirmed working, +1 for implementation.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  27
  • Topics Per Day:  0.01
  • Content Count:  319
  • Reputation:   198
  • Joined:  11/14/11
  • Last Seen:  

Looks nice. I have a small question....

if ((b_class&JOBL_2) && dst_2nd != MAPID_SUPER_NOVICE) // super novices have no 1st job

Is this because the server is treating the Super Novice as the 2-1 job of the Novice and using Novice as a base? Just wondering since ill be added the Extended Super Novice job in soon and it uses both the 2-1 and THIRD. Also how will the system know how many skill points to give? Does it check for the set max job level? I didn't look over the entire code, just parts of it.

Link to comment
Share on other sites

  • 1 month later...

  • Group:  Members
  • Topic Count:  146
  • Topics Per Day:  0.03
  • Content Count:  1195
  • Reputation:   467
  • Joined:  11/15/11
  • Last Seen:  

+1

Link to comment
Share on other sites

  • 2 weeks later...

  • Group:  Members
  • Topic Count:  169
  • Topics Per Day:  0.04
  • Content Count:  1260
  • Reputation:   750
  • Joined:  11/19/11
  • Last Seen:  

bapti-bipti-bump'o.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  28
  • Reputation:   20
  • Joined:  01/22/12
  • Last Seen:  

Oh look a dead topic resurrected! :o I will re-furbish the code a little, torture test it some more, adress the concerns voiced and commit it as soon as I get my internet back at home (hopefully this thursday, or else!)

<3

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.00
  • Content Count:  554
  • Reputation:   70
  • Joined:  04/04/12
  • Last Seen:  

+1 for this...

I think this would fix bug like this : bugreport:5764

I already have an idea how to fix it but when I read this topic this almost make the package to such issue....

so if you mind to add in your idea the mechanism in updating 'jobchange_level/change_level_2nd' and 'jobchange_level_3rd/change_level_2rd'....

Thanks....

Link to comment
Share on other sites

  • 3 weeks later...

  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  28
  • Reputation:   20
  • Joined:  01/22/12
  • Last Seen:  

Alright, time for some Q&A!

I don't have a real issue with this. Something just needs addressing in the patch though:

+ (sd->class_&JOBL_THIRD) && !(b_class&JOBL_THIRD) || // changing back from 3rd class

Should have brackets around it? That && is a segregate operator for the || operators before hand so this operation should really have brackets around it. As long as this has been tested and is confirmed working, +1 for implementation.

In my most recent version, just changing away from 3rd class constitutes a break from the class hierarchy, as well it should. Thanks for pointing it out!

Looks nice. I have a small question....

if ((b_class&JOBL_2) && dst_2nd != MAPID_SUPER_NOVICE) // super novices have no 1st job

Is this because the server is treating the Super Novice as the 2-1 job of the Novice and using Novice as a base? Just wondering since ill be added the Extended Super Novice job in soon and it uses both the 2-1 and THIRD. Also how will the system know how many skill points to give? Does it check for the set max job level? I didn't look over the entire code, just parts of it.

Super novice is a bit ugly because for all intents and purposes, it's a 2nd job, but it has no 1st job associated with it. It thus needs special handling in many parts of the source. And yes, the code will read the max job level for the current job from the db. An argument could be made to not give the maximum number of skill points for any job that has a jobchange_level associated with it, though. I'm still brooding over this, since I don't want to make life harder for custom max job levels.

+1 for this...

I think this would fix bug like this : bugreport:5764

I already have an idea how to fix it but when I read this topic this almost make the package to such issue....

so if you mind to add in your idea the mechanism in updating 'jobchange_level/change_level_2nd' and 'jobchange_level_3rd/change_level_2rd'....

Thanks....

As I stated in the bug report itself, that issue is unrelated, and will be fixed as soon as we implement the feature I described. It's rather ugly to do with the current source, though. (the code zeroes skill ids you are not allowed to put skill points into, durrr.)

Sorry for the slow progress on this, it will be rather busy for me still until mid-august.

Link to comment
Share on other sites


  • Group:  Members
  • Topic Count:  27
  • Topics Per Day:  0.01
  • Content Count:  319
  • Reputation:   198
  • Joined:  11/14/11
  • Last Seen:  

I don't like how the Super Novice is being handled in the code. Yes it was done so to use the Novice as a base, but do you know how looooooooooong ago this was done? Super Novice may have the same permissions as a Novice, but should be treated as a 1st class. Heck even changing to the job places all the skills in the 1st class tab. I should probely work on a update that will make the Super Novice a 1st job and the Expanded Super Novice a 2nd job. I had to make Kagerou and Oboro a 2nd job even tho their stat limits are different. Hmmmm.....that means ill have to add to the max_per setting check. ill also have to update every single existing Super Novice check out there.

So much work ahead of me if I do this.

Link to comment
Share on other sites

  • 2 months later...

  • Group:  Members
  • Topic Count:  169
  • Topics Per Day:  0.04
  • Content Count:  1260
  • Reputation:   750
  • Joined:  11/19/11
  • Last Seen:  

bapti-bipti-bump! this would be most helpful when debugging as well

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...