Jump to content

[DEV] Dungeon Finder


Recommended Posts

it is quite easy: achievements have nothing to do with DF and DF has nothing to do with achievements - keep it that simple.

spp only used achievements to trigger DF-changes, because both "actions" are _sometimes_ triggered on same event (encounter finished)

In my view it is a very bad idea to use something that is not fully working to implement something independend on top of it, but well it partly get's the job working, and as long as I don't need to work with it, I just advise to think of _any_ other way to handle this better :P

Link to comment
Share on other sites

  • Replies 288
  • Created
  • Last Reply

Top Posters In This Topic

achievements have nothing to do with DF and DF has nothing to do with achievements

Iam ok with this.

@Mizuni

Ok but in your exemple, the LFG reward is send when Herald Volazj is killed only? Is this a normal functionality?

In other word, what is the requirement to gain reward? Only kill final boss?

I think all we need is in dungeonEncouters.

For your exemple :

212    619    0    0        0    Ancien Nadox            0
259    619    1    0        0    Ancien Nadox            0
213    619    0    1000    1    Prince Taldaram            0
260    619    1    1000    1    Prince Taldaram            0
214    619    0    2000    2    Jedoga Cherchelombre    0
261    619    1    2000    2    Jedoga Cherchelombre    0
215    619    0    3000    3    Héraut Volazj            0
262    619    1    3000    3    Amanitar                0
263    619    1    4000    4    Héraut Volazj            0

2e Field is map but don't know what is the first.

Do you think there is missing boss in this dbc?

Link to comment
Share on other sites

achievements have nothing to do with DF and DF has nothing to do with achievements

Iam ok with this.

@Mizuni

Ok but in your exemple, the LFG reward is send when Herald Volazj is killed only? Is this a normal functionality?

In other word, what is the requirement to gain reward? Only kill final boss?

I think all we need is in dungeonEncouters.

For your exemple :

212    619    0    0        0    Ancien Nadox            0
259    619    1    0        0    Ancien Nadox            0
213    619    0    1000    1    Prince Taldaram            0
260    619    1    1000    1    Prince Taldaram            0
214    619    0    2000    2    Jedoga Cherchelombre    0
261    619    1    2000    2    Jedoga Cherchelombre    0
215    619    0    3000    3    Héraut Volazj            0
262    619    1    3000    3    Amanitar                0
263    619    1    4000    4    Héraut Volazj            0

2e Field is map but don't know what is the first.

Do you think there is missing boss in this dbc?

From my experience yes, the only requirement is kill the last boss. In almost all dungeons you need to kill all mobs before you get to the last boss so it's nothing exploitable. Even wowpedia says in the table with dungeon list "Required boss" with only one boss per dungeon / wing (Looks like Scarlet Monastery have 4 entries in Dungeon Finder one for each wing (I was already high level when they implemented the Dungeon Finder))

EDIT:

Ok. With a DK (lvl 55) I can see different wings of the same Dungeon in the list. Blackrock Depths is listed like two separated dungeons

Link to comment
Share on other sites

no, my idea should be basicly working as follows:

DungeonEncounter lists every "important" encounter of any instance.

every encounter (independend from difficulty) has a unique key (map, encounter-position)

In SD2 we store (some) encounters in an array, which is saved to a string like

"v_1 v_2 .. v_n" where each value of v_i represents the state of the encounter (usally 3=finished)

so, if we would change sd2 to represent (and in order) every encounter of DungeonEncounter.dbc then this instance string would be a valid representation of finished encounter.

The key (mapId, difficulty, position) identifies any encounter - I don't know if there is anymore information needed then.

But well, that is just an idea

Yes, that is good idea, but do not forget to bosses without SD2 script, for example Krystalus in Halls of Stone, you need some generic solution for them, too (although that could be done by some EventAI action, but kill credits usually have not any script). As you say, your way would also require lot of work in sd2. That is why I think some more flexible solution, at least partly via DB, is better.

BTW, LfgDungeons.dbc has field, in which is some string ID of dungeon (maybe because dungeons has no id like creature or so), maybe thats the way offi recognize in which dungeon you are...

//char* unk3; // 29

BTW2: Yes, all you need to complete DF is to kill last boss, not all, confirmed from offi :)

Link to comment
Share on other sites

Iam trying to understaind last modification done by Ambal.

For what i understaind for each map loaded we can store some info.

My idea

- Load map.

- Load his entry from dbc counter if exist.

- Set NPC Entry according to boss name (no matter way for now, perhaps some table or sql querries if it's possible)

- Moddify existed holder to update map info if entry is killed.

So the new map system will be completly autonome and the info of it will be readable by LFG anytime.

It's only idea i need understaind how map work before. (not an easy task if you have some link or info please show it :) )

About my code:

LFG class is implemented for now, i can only group individual char and group is set has lfg. Teleport out/in is working.

Iam still far of SPP work but it's price for complete rewrite :) (except some little part)

Mainly for any first release i must add all possible verification like "player is in combat/ player is already grouped / player is already in LFGGroup /..."

Greetings

Link to comment
Share on other sites

I think a good step would be, to start with only grouping players without or with the same id.

This way you can implement a solid framework, and won't have to worry about these nasty things of how to mess around with bindings, creature->encounter state, etc

And if you have a solid (smaller) patch the chances are way better that this is to be accepted ;)

Link to comment
Share on other sites

Ok but in your exemple, the LFG reward is send when Herald Volazj is killed only? Is this a normal functionality?

In other word, what is the requirement to gain reward? Only kill final boss?

I think all we need is in dungeonEncouters.

For your exemple :

212    619    0    0        0    Ancien Nadox            0
259    619    1    0        0    Ancien Nadox            0
213    619    0    1000    1    Prince Taldaram            0
260    619    1    1000    1    Prince Taldaram            0
214    619    0    2000    2    Jedoga Cherchelombre    0
261    619    1    2000    2    Jedoga Cherchelombre    0
215    619    0    3000    3    Héraut Volazj            0
262    619    1    3000    3    Amanitar                0
263    619    1    4000    4    Héraut Volazj            0

(...)

note that last boss is not necesarily the one with the highest "4th column" even tho its almost always the case (except from Ulduar in which Algalon is after yogg)

Link to comment
Share on other sites

I think a good step would be, to start with only grouping players without or with the same id.

This way you can implement a solid framework, and won't have to worry about these nasty things of how to mess around with bindings, creature->encounter state, etc

And if you have a solid (smaller) patch the chances are way better that this is to be accepted ;)

Already more than 2000 lines coded for DF and i am not at 50% of implementation... So for little patch i will try another time :D

Link to comment
Share on other sites

cyberium, about your implementation there's a couple of things (info i got from retail players)

regarding patch 4.0.x (i believe this has been used before) to do some dungeons using the dungeon finder tool you must meet the dungeonfinder-instance-itemlevel requirements.

the item-level of a player is calculated every time a player obtains a piece of gear or equips an item from his bag, note that this average will not lower when you unequip gear, it should be stored in DB and will always be the max-average of your gear, this is the system retail matches groups even for BGs (you dont usually do BGs with ppl with an "Extreme gear gap" compared to yours)

Link to comment
Share on other sites

cyberium, about your implementation there's a couple of things (info i got from retail players)

regarding patch 4.0.x (i believe this has been used before) to do some dungeons using the dungeon finder tool you must meet the dungeonfinder-instance-itemlevel requirements.

the item-level of a player is calculated every time a player obtains a piece of gear or equips an item from his bag, note that this average will not lower when you unequip gear, it should be stored in DB and will always be the max-average of your gear, this is the system retail matches groups even for BGs (you dont usually do BGs with ppl with an "Extreme gear gap" compared to yours)

The message: " You must obtain a better gear " was there before patch 4.0.x .

And yeah you will not be put in a BG where you have GS like 4.8 with players that have GS 5.7+

If you need more information about the retail please tell me and i can inform you ;)

Link to comment
Share on other sites

It's a good discution but in my logical and priority :

1- have a functional and bug free queue system

2- have a functional and bug free LFG group system

3- have a functional and bug free reward system

4- add optionnal functionality

1 and 2 are near to be functionnal, but need to be tested to cleanup bug.

Only basic thing are for now implemented. (you will see what i mean)

You talk about point "4" in my opinion anyway it's not bad because i can have it on my mind to make easy implementation in future.

This week i was not implemented lot of thing due to lack of time.

I hope release first version before next week because i need feedback to get these 2 first point much stable as possible.

I olso must remind you i never used "DungeonFinder" before "i stopped to play in Wow some time after BC" so you i count on you to help me make my code work like retail :)

Actualy work on

- Queue system

I must add some lock when member is in BG, have deserter dot and other things not beeing identified.

I need to add faction system (actually work only with one faction)

- LFG Group

I don't understaind "LFG_STATUS" of the group. Actualy status "LFG_STATUS_NOT_SAVED" do the job but when i must modify this value?

The group are now completly independant when it will be created. All the needed objects are declared in the Group Class but i must verify if it's enought.

Some new object will be needed in the future in group class but i am focused to an light working patch for now.

- Reward and last point are not implemented for now. Only some analyse are done to help me implement actual code according this next step.

I changed my mind about the class implementation, i must implement class heritage in place of some individual class.

My actual scheme

LfgGroup class

LfgQueue class <- LfgDungeon class

My future sheme

LfgGroup class <-LfgQueue class <-LfgDungeon class

Ok for now you know enought about the situation of the code :)

I do not promise anything but i will do my best to release code asap.

Greetings

Link to comment
Share on other sites

- LFG Group

I don't understaind "LFG_STATUS" of the group. Actualy status "LFG_STATUS_NOT_SAVED" do the job but when i must modify this value?

The group are now completly independant when it will be created. All the needed objects are declared in the Group Class but i must verify if it's enought.

Some new object will be needed in the future in group class but i am focused to an light working patch for now.

This changes when you get instance bind and on reward. I think LFG_STATUS_NOT_SAVED do the thing right now, no need to change it.

Link to comment
Share on other sites

One more info:

If you queue in the dungeon finder, then you get a level and that level makes you go past the maximum level of that dungeon, you stay in the queue without any problem (and do the dungeon), but the dungeon finder no longer show those dungeons.

In short, the dungeon finder don't recheck the level limit if the player level up.

Link to comment
Share on other sites

(...)

212    619    0    0        0    Ancien Nadox            0
259    619    1    0        0    Ancien Nadox            0
213    619    0    1000    1    Prince Taldaram            0
260    619    1    1000    1    Prince Taldaram            0
214    619    0    2000    2    Jedoga Cherchelombre    0
261    619    1    2000    2    Jedoga Cherchelombre    0
215    619    0    3000    3    Héraut Volazj            0
262    619    1    3000    3    Amanitar                0
263    619    1    4000    4    Héraut Volazj            0

2e Field is map but don't know what is the first.

Do you think there is missing boss in this dbc?

first field goes in order (if you havent noticed b4) each boss has its own unique ID per difficulty, try grouping bosses by diff / map / order and you get a nice ordered boss UID

u could add a column to creature_template on boss entries and match this ID and use it as "event message" to the LFG on kill

Link to comment
Share on other sites

first field goes in order (if you havent noticed b4) each boss has its own unique ID per difficulty, try grouping bosses by diff / map / order and you get a nice ordered boss UID

u could add a column to creature_template on boss entries and match this ID and use it as "event message" to the LFG on kill

Definitly the best idea i seen. But i am still not at this stage.

Actualy iam faced some trouble with group joining queue.

Hope this time when group implementation done the code will be releasable.

Still no reward and need some additional check to secure the code.

Greetings

Link to comment
Share on other sites

@vladex, forbiddenn

Only to help you :)

LFGMgr.cpp: line 1003
- if (plr->GetSocial()->HasIgnore((*itPlayer)->GetGUIDLow()) || (*itPlayer)->GetSocial()->HasIgnore(plr->GetGUIDLow()))
+ if (plr->GetSocial()->HasIgnore((*itPlayer)->GetObjectGuid()) || (*itPlayer)->GetSocial()->HasIgnore(plr->GetObjectGuid()))

multi-npc encounters.

summoned boss you are hopeless to get the state in reload cases.

(no corpse -> no respawntimer which you could check)

Theses Encounters doesn't exist in original Dungeon Finder system. Or iam wrong?

If iam wrong does any one can point me theses special case from DBC dungeonEncounters?

Link to comment
Share on other sites

i believe multi-boss encounters like... "Blood Prince Council" "Iron Council" "Illidari Council" ? or I'm wrong?

as for the "summoned boss" i believe the easy way to prevent that "reload" case is: not summon it but phase it in (if you know what im talking bout) have the "summoned mob" spawned by default, just phased out...

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy Terms of Use