Old Wiki:ModuleManager Conversations with Luck

From EVEmu Wiki
Jump to navigation Jump to search

Conversations with Luck on Module Manager design:

PART I

11:15  Aknor|working   ah, so we need to supply a crateID
11:15   Aknor|working   so, we do not use item->Move()
11:15   Almamu  yes
11:15   Aknor|working   it is insufficient
11:15   Aknor|working   we need to make a new function for contracts that handles this stuff
11:15   Aknor|working   hmmmm
11:15   Almamu  the problem is, how can i create a "crate" and what type is it ?
11:15   Almamu  hmmmm
11:16   Almamu  wait a sec, i will search in the db for something related
11:16   Aknor|working   it's an object... it's not a game object
11:17   Aknor|working   something behind the scenes
11:17   Aknor|working   it is not in invTypes
11:17   Aknor|working   its not like a ship or cargo container
11:17   Aknor|working   they do the same thing for trades
11:17   Aknor|working   there is a tradeContainerID i think
11:17   Aknor|working   this is gonna take us some work to make this work right
11:18   Almamu  the stations are like "items" at the entity table, why not handle crates like them ?
11:18   Aknor|working   well.... since i haven't seen the whole progression of packets from the start of creating one, adding items to it, and then finishing it... i'm not sure what to do at this point
11:19   Aknor|working   well, yeah, we can... put "crates" in the entity table
11:19   Almamu  and the items can have locationID = crateID
11:19   Aknor|working   and then they have their own ID, so we have a crateID, then we change locationID for all items in the contract to that crateID
11:19   Almamu  so i can delete one more table from the DB( contract_items )
11:19   Aknor|working   but, there is way more... we need to send that packet instead of that OnItemChange packet that gets sent when you do Move()
11:19   Aknor|working   i would say so... did you add that?
11:19   Almamu  maybe its cause the new client
11:20   Almamu  let me search for OnItemChange
11:20   Almamu  on the capture
11:20       *** Code_Red joined #evemu
11:20       +++ ChanServ has given op to Code_Red
11:20   Aknor|working   i have no idea if its because of the new client... i've never seen packet logs of contracts stuff for apoc, so... idk
11:20   Aknor|working   o/ Code_Red
11:20   Code_Red    \o
11:20   Almamu  hey!
11:20   Almamu  ok, OnItemChange is not in the packet
11:20   Almamu  so it will be cause the client version
11:21   Almamu  or something
11:21   Code_Red    so whats new
11:21   Almamu  trying to work in contracts system
11:21   Almamu  *on
11:21   Code_Red    kewl
11:21   Aknor|working   yeah... this is getting pretty complicated, Almamu
11:22   Almamu  yeah, i know
11:22   Aknor|working   we still need a contract class, contract manager class
11:22   Almamu  and maybe some caching for them too
11:23   Almamu  if the contract list is too big it will take a while for the server to fetch it -.-"
11:23   Aknor|working   and then when you make a contract, it makes a new contract class object, makes a new contractID, a new crateID, then when you start adding things to the contract, the right stuff happens, moves items to that container from your station items, then sends that right packet to the client with the new crateID and contractID
11:23   Aknor|working   yeah
11:23   Aknor|working   um, dont worry about caching...
11:23   Aknor|working   why caching?
11:24   Aknor|working   oh, i see why... right
11:24   Aknor|working   but we dont have that now, so dont worry about it
11:24   Almamu  ok
11:24   Aknor|working   we dont have caching of the market either, but it is also very inefficient packing the sql query, so, that's not of our concern right now
11:25   Aknor|working   this is educational, not like we're trying to make a server that serves 100's or 1000's or more... c'mon
11:25   Aknor|working   we'll make a cache later to learn about cache systems and stuff
11:25   Almamu  thats what i was trying to talk about
11:25   Aknor|working   ok
11:26   Aknor|working   man.... we have some bubble/warping issues... we have contract work going on.... we need to work on module manager....
11:26   Almamu  -.-"
11:27   Almamu  the next time i will try to fix something that is already here
11:27   Almamu  xD
11:27   Aknor|working   hmm... well, i gotta fix the warping/bubble stuff first, then decide whether to work on module manager or help you with contracts
11:27   Aknor|working   hahaha
11:27   Aknor|working   yeah
11:27   Almamu  module manager would be better
11:27   Aknor|working   well, it will take longer than contracts i bet
11:27   Almamu  woking on*
11:27   Aknor|working   contracts might only be a couple weeks
11:28   Aknor|working   and luck and captnoord are kinda inactive right now, even though luck has popped back in
11:28   Aknor|working   i really dont wanna work on the MM without both of them
11:28   Almamu  xD
11:29   Aknor|working   sooooo..... let's do contracts, and then let's take a look at private trades
11:29       *** Luck joined #evemu
11:29       +++ ChanServ has given op to Luck
11:29   Aknor|working   O.O
11:29   Luck    oh hi
11:29   Almamu  hey!
11:29   Aknor|working   Code_Red, stop fooling around
11:29   Luck    lol
11:29   Almamu  xDDDD
11:29   Code_Red    hiya luck
11:29   Aknor|working   right.....
11:29   Luck    hey man
11:29   Luck    quick question aknor
11:30   Luck    you did your attribute patch against 1049 right?
11:30   Aknor|working   ok, "Luck", what chemicals did you mention to me the other night?
11:30   Luck    hf and h2so4
11:30   Code_Red    he thinks your me kev LOLOLOL
11:30   Luck    :p
11:30       Aknor|working hears ChanServ announce "Luck Identity Confirmed"
11:30   Code_Red    noob manuver
11:30   Aknor|working   ok
11:30   Luck    lol
11:30   Luck    anyways
11:30   Luck    you did your patch against 1049 right?
11:30   Aknor|working   dude, there's been soooooo many impersonators of Luck in here....
11:30   Aknor|working   ok, yeah
11:31   Luck    hmm
11:31   Aknor|working   trying to remember what that was... Celestial stuff?
11:31   Luck    the attribute merge
11:31   Code_Red    i haven't impersonated luck ever
11:31   Aknor|working   wait... what patch?
11:31   Luck    http://forum.evemu.org/viewtopic.php?f=8&t=507
11:31   Aknor|working   attribute merge is already committed
11:31   Luck    ah
11:31   Luck    i didn't see that it was committed
11:31   Luck    my fault
11:31   Luck    that would explain a lot
11:32   Luck    :p
11:32   Aknor|working   HAHAHAHAHAHA
11:32   Aknor|working   ok, i see i said r1049, but we're on r1078 now
11:32   Luck    yea
11:32   Luck    that's why i was a little confused
11:32   Aknor|working   and it pretty much works dude!
11:32   Luck    it was also 4 am
11:32   Aknor|working   LMAO
11:32   Luck    so that might have had something to do with it too
11:32       Code_Red continues his minecraft
11:32   Luck    :)
11:32   Luck    okay then
11:32   Aknor|working   i was sleeping in my computer chair at 4am
11:32   Aknor|working   >_>
11:33   Almamu  O.o
11:33   Luck    so i can just checkout and program for the mm then
11:33   Luck    cool
11:33   Luck    makes my life easier
11:33   Aknor|working   yep
11:33   Aknor|working   OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
11:33   Aknor|working   he said MM !!!!
11:33   Luck    yes i did
11:33   Almamu  lol
11:33   Aknor|working   HE SAID MM !!!!!!!!
11:33   Luck    :)
11:33   Luck    no promises
11:33   Almamu  aknor, youre crazy!
11:33   Almamu  xD
11:33   Aknor|working   so, you have a newer version than what's in SVN now?
11:33   Aknor|working   cuz i re-enabled some stuff that captnoord had disabled in his attribute branch
11:34   Aknor|working   just to try stuff out
11:34   Luck    not that will work with the new attribute system
11:34   Aknor|working   this morning, i fitted a microwarpdrive and a pulse laser and a cloaking device to an Ashimmu and undocked
11:34   Luck    i'm probably just gonna start from scratch
11:34   Luck    nice
11:34   Aknor|working   i got a couple exceptions from the client when i fitted the laser
11:34   Aknor|working   the ship did not disappear after undocking
11:34   Luck    did your ship go invisible?
11:34   Luck    really?
11:34   Aknor|working   however, it DID disappear when i re-docked
11:34   Aknor|working   XD
11:34   Luck    ah
11:34   Aknor|working   you'll see the client exceptions
11:34   Almamu  xD
11:34   Aknor|working   one was about turrets
11:35   Luck    yea
11:35   Luck    yep
11:35   Luck    that's the old one
11:35       Code_Red hates creepers
11:35   Aknor|working   see, i can help code up features on the server side, but i really have ZERO clue what kinds of packets and info need to go back to the clients when stuff gets changed on the fitting or module usage
11:35   Aknor|working   oh ok
11:37   Luck    yea
11:37   Luck    there's some update that needs to be sent to the client
11:37   Luck    to tell it to update the render of the ship
11:37   Luck    but it's not being sent
11:37   Luck    so it stops rendering the ship
11:37   Luck    at least that's what I think happenes
11:37   Luck    *happens
11:38   Aknor|working   ok... well, i've been thinking about the client, mm, ship, modules OOD....
11:38   Luck    :)
11:38       Code_Red bobs head in TS
11:38   Aknor|working   it makes sense now that the MM is owned by the client, not the ship
11:38   Aknor|working   but the MM should have a direct reference to whatever ship it is "managing"
11:38       *** Code_Red is now known as Code_Red|TS3
11:38   Luck    cool
11:39   Luck    that was what I was thinking
11:39   Aknor|working   but the ship owns the modules, not the module manager
11:39   Aknor|working   the module manager needs access to them but does not own them
11:39   Luck    yea
11:39   Aknor|working   the existing MM i've seen has its own containers for modules
11:40   Luck    yea
11:40   Aknor|working   actually, i've been thinking we'd want std::map<> not std::vector<> containers, and separate ones for low, medium, high, rig, and subsystems
11:40   Luck    so we need to rewrite ship, and the mm
11:40   Luck    yea
11:40   Luck    probably a good idea
11:40   Luck    separating them makes sense
11:40   Aknor|working   so, we should put those containers into the Ship class then provide functions on the Ship class that fit/unfit modules
11:41   Luck    yea
11:41   Aknor|working   and also Get module references so we can then Activate, Deactivate, Reload/Unload charges
11:41   Aknor|working   see, each module should also be an object
11:41   Luck    i feel like the fit/unfit should go though the mm
11:41   Aknor|working   ShipModule base class
11:41   Aknor|working   then derive ActiveModule and PassiveModule and SubsystemModule
11:42   Luck    yea
11:42   Aknor|working   then derive ArmorRepairerModule from ActiveModule, HullUpgradeModule from PassiveModule
11:42   Luck    yea
11:43   Aknor|working   they inherit proper routines like Activate() or Deactivate() that would only come from ActiveModule, but not from PassiveModule
11:43   Aknor|working   Subsystems are more complicated because they actually modify the slot configuration
11:43   Aknor|working   THAT should be managed INSIDE the ship object
11:43   Aknor|working   this is too funny... i'm making a lot of sense now and all this is just coalescing right now, actually XD
11:43   Luck    yea
11:43   Luck    probably
11:43   Luck    :)
11:44   Aknor|working   :D
11:44   Mobbel  hey luck
11:44   Luck    so which part do you want to write?
11:44   Luck    :p
11:44   Aknor|working   hmm....
11:44   Luck    hey mobbel
11:44   Mobbel  how are you???
11:44   Luck    pretty good man
11:44   Aknor|working   how about i start modifying the Ship class to contain the module containers
11:44   Luck    done with school for the semester
11:44   Luck    taking a break
11:44   Luck    kk
11:45   Luck    i will look at reworking the mm class
11:45   Aknor|working   ok
11:45   Aknor|working   i think we need a separate Modules.h/.cpp file set
11:45   Aknor|working   to pull ShipModule and other stuff OUT of ModuleManager.h/.cpp
11:46   Aknor|working   ok, and i'll pull a lot of stuff out of ShipModule and make that the abstract base class
11:46   Luck    kk
11:46   Aknor|working   and start deriving the different module child classes off that
11:46   Luck    i'm basically trashing the mm as it exists in 1078
11:46   Aknor|working   HAHA, ok
11:46   Luck    since most of it is redundant/in the wrong place
11:47   Mobbel  looks like luck is back for doing great things :D
11:48   Aknor|working   ok, so here's my list:
11:48   Aknor|working   1) expand Ship class to contain module containers, module reference Get(module_slot_flag), FitModule(), UnfitModule(), RigInstall(), RigRemove(), SubSystemInstall(), SubSystemRemove()
11:48   Aknor|working   i'll leave those mostly empty for now
11:49   Aknor|working   2) move ShipModule into Modules.h/.cpp, clean it out, make it abstract, and start deriving child classes for the various specific modules we need
11:49   Luck    yea
11:49   Aknor|working   that will allow us to do polymorphism on ship->GetModule(slot_flag)->Activate()
11:50   Luck    atm i have an empty ShipModule class and an empty ModuleManager class
11:50   Aknor|working   and it will just work
11:50   Aknor|working   :D
11:50   Aknor|working   k
11:50   Luck    yea
11:50   Luck    thank god
11:50   Luck    so lets see
11:50   Luck    the constructor for the module manager
11:50   Luck    should get a reference from the client
11:50   Aknor|working   for the ship, yeah
11:50   Aknor|working   AND the client
11:51   Aknor|working   that's the thing that had me frustrated
11:51   Aknor|working   you reference all the way down to these lower objects and then you need info from one of the higher ones, but there's no reference BACK
11:51   Aknor|working   client->Destiny()->GotoDirection() and then you're inside DestinyManager with NO access to the Client object, LOL
11:51   Luck    lol
11:51   Luck    wonderful
11:52   Aknor|working   but, that might be because not all the info needed by DestinyManager() was provided... idk
11:52   Aknor|working   anyway, got a meeting, talk to you chaps later
11:52   Luck    kk



PART II

[13:47] <+Luck> okay aknor
[13:47] <+Luck> so
[13:47] <+Luck> base classes
[13:47] <+Luck> module, subsystem
[13:48] <+Luck> h/o
[13:48] <+Luck> im gonna draw it up
[13:48] <+Luck> i have to to get it in my head :p
[13:48] <+Aknor> oh hey
[13:48] <+Luck> figured we could talk in here
[13:49] <+Luck> since it will be less busy or w/e
[13:57] <+Nick> r1079 on linux x64 doesn't build Aknor
[13:57] <+Aknor> heh, "less" busy... but, i cant talk much anymore for a while.. .got stuff to do
[13:57] <+Nick> http://pastebin.com/LT5zbkHm
[13:57] <+Aknor> i'll be back tonight i think
[13:57] <+Luck> kk
[13:57] <+Luck> im gonna work on some of the modules then
[13:57] <+Nick> is the tonight op still in place?
[13:57] <+Aknor> i'm planning on it... we'll see
[13:58] <+Aknor> each time is play by ear
[13:58] <+Nick> it'll be 4 am for me
[13:58] <+Nick> i need to know :))
[13:58] <+Aknor> haha, you dont have to
[13:58] <+Aknor> just sleep man
[13:58] <+Aknor> idk why evilnumber won't build
[13:58] <+Nick> well if it is on i'll be there
[13:58] <+Aknor> on linux 64
[13:59] <+Aknor> so, luck, before i go, you understand the whole deal with that proposed architecture?
[13:59] <+Luck> yea
[13:59] <+Luck> i believe so
[13:59] <+Aknor> how all the attribute mods are done deep in the module classes themselves
[13:59] <+Luck> yea
[13:59] <+Aknor> keeps everything separate so the "real" knowledge of what effects mod what attributes is hidden in each module group class
[14:00] <+Luck> yea
[14:00] <+Aknor> so, we need to pass a copy of ship attributes down into the module class calls along with the character skills
[14:01] <+Aknor> oh... just realized... how about if the ModuleManager figures out if online/activate/load charge/fit module can even happen BEFORE those functions are called on the actual module classes?
[14:02] <+Luck> yea
[14:02] <+Aknor> then we dont need those ConfirmFitModule etc calls
[14:02] <+Aknor> that seemed ugly to me
[14:02] <+Luck> i wasn't sure where you were going with those anyways
[14:02] <+Luck> :p
[14:02] <+Aknor> well, i just talked myself back into it again
[14:02] <+Aknor> how does the MM know if a module CAN be onlined?
[14:03] <+Aknor> only the module knows that info
[14:03] <+Aknor> cpu load/power load/capacitor need/ etc
[14:03] <+Aknor> unless we breakout just that stuff up into the MM
[14:03] <+Luck> the mm has access to the ship attributes and the module attributes?
[14:03] <+Luck> or just the ship
[14:03] <+Aknor> the rest, like effect specific mods go on only inside the module class
[14:04] <+Luck> well the mm needs info on the module itself
[14:04] <+Aknor> mmmm
[14:04] <+Luck> so it can check skills and such
[14:04] <+Aknor> well, but the modules themselves know about what skills are needed
[14:04] <+Luck> hmm
[14:04] <+Aknor> so we get a DogmaIMBound::Handle_Activate() call
[14:05] <+Aknor> it calls client->ModuleManager()->ActivateModule(moduleID)
[14:06] <+Aknor> which, calls m_shipRef->GetModule(moduleID)->Activate(charSkillList, shipAttribList, &externalAction)
[14:06] <+Aknor> hmm
[14:07] <+Aknor> yeah, there seems to be some things that we just cant take out of the MM
[14:07] <+Luck> i feel like the mm should check skills/pg/cpu
[14:07] <+Aknor> i'm trying to find a way to keep the MM from becoming this giant super class that has all knowledge of all things and does all things to every thing
[14:07] <+Aknor> hmmm, sounds like that would be right
[14:08] <+Luck> lol
[14:08] <+Luck> it is going to need access to the character, the ship and the module
[14:08] <+Luck> pretty much any way you do it
[14:08] <+Aknor> right
[14:08] <+Luck> unless each of the modules become superclasses that have like 8 arguments
[14:08] <+Luck> :p
[14:08] <+Aknor> access to module goes through the new Ship::GetModule(uint32 moduleFlag) that i will write
[14:09] <+Luck> you'll need more than a access by flag
[14:09] <+Aknor> pulls the module from the right container and returns the ShipModuleRef
[14:09] <+Luck> you need access by itemID
[14:09] <+Aknor> nope
[14:09] <+Luck> yes
[14:09] <+Aknor> there is a unique flag for every low slot, medium slot, and high slot, rig slot and subsystem slot, i think
[14:09] <+Luck> the client sends a itemID packet to reference a module
[14:09] <+Luck> when it's activated
[14:09] <+Luck> so there has to be a bridge between the itemID and the module
[14:10] <+Aknor> well...ok, then we just do m_shipRef->GetModule(moduleItemID), and that returns a ShipModuleRef
[14:10] <+Luck> yea
[14:10] <+Luck> that's fine
[14:10] <+Luck> im just saying that in order to handle the packet we have to have a way to look up by id
[14:10] <+Aknor> that, through polymorphism calls the right specific derived class functions
[14:11] <+Aknor> yeah the other way would have required using the itemID to get the flag and then using the flag in that GetModule() function
[14:11] <+Luck> yea
[14:11] <+Aknor> would work either way because i was planning on making the five std::map<> containers using the flag as the key, not itemID
[14:12] <+Luck> that's fine
[14:12] <+Luck> and probably easier to understand
[14:12] <+Aknor> this is why:  how do you know which itemID of the module adjacent to the one you just overloaded and is causing heat damage to the adjacent modules?
[14:12] <+Aknor> you dont.. all you know is the itemID and flag of the module you just overloaded
[14:13] <+Luck> m_ShipRef->GetModuleByItemID(itemID)->GetFlag()
[14:13] <+Aknor> so when the m_ship->GetModule(moduleItemID)->Overload() function modifies its externalAction class object
[14:13] <+Luck> hmm
[14:13] <+Luck> overloading is gonna be a bitch
[14:14] <+Aknor> nah
[14:14] <+Aknor> when the externalAction class has overload damage asserted in it, we just apply it to the adjacent modules
[14:15] <+Aknor> using this:  m_shipRef->GetModule(moduleFlag +/- 1)->OverloadDamage(blah)
[14:15] <+Aknor> or something like that
[14:15] <+Aknor> so if the only way you can access a module via the Ship::GetModule() function is by 'flag' instead of itemID , then this makes accessing the right slot easier
[14:15] <+Aknor> we can easily get the flag of the module we're working with from the itemID
[14:16] <+Aknor> it just fits... would be more clunky if we had containers for the modules where the keys were itemIDs instead of flags
[14:16] <+Luck> yea
[14:16] <+Aknor> then ya gotta iterate through each module in the container looking for the right flags
[14:17] <+Aknor> in paket_types.h there are flags for every unique slot
[14:17] <+Aknor> so that will work
[14:17] <+Luck> sounds fine to me
[14:17] <+Luck> i was just pointing out that we needed a search by itemID function
[14:17] <+Luck> :)
[14:17] <+Aknor> we can even have Ship::FitModule(moduleID) that returns 0 or 1 based on whether the slot was occupied
[14:18] <+Aknor> oh.. gotta pass the flag in as well
[14:18] <+Aknor> but, then it's already part of the InventoryItem of that module
[14:18] <+Aknor> hmmm
[14:18] <+Aknor> i've used the GetItem from ItemFactory
[14:18] <+Aknor> but that might be too inefficient
[14:18] <+Aknor> i dont think there is any other way
[14:19] <+Aknor> except query the DB
[14:19] <+Aknor> does this already exist?   m_ShipRef->GetModuleByItemID(itemID)->GetFlag()
[14:19] <+Luck> i believe so
[14:21] <+Aknor> nope. nowhere in the source
[14:21] <+Luck> hmm
[14:22] <+Aknor> ItemFactory:    InventoryItemRef GetItem(uint32 itemID);
[14:23] <+Aknor> ItemFactory is a singleton for the entire server
[14:23] <+Luck> lol
[14:23] <+Aknor> it holds a std::map<uint32, InventoryItemRef>
[14:23] <+Aknor> THAT has EVERY item ever created in the entire game universe
[14:23] <+Aknor> and THAT is how ALL items are "found" throughout the server code, so far as i can tell
[14:24] <+Luck> lol
[14:24] <+Aknor> so, InventoryItemRef GetItem(uint32 itemID)  just does m_items.find( itemID )
[14:24] <+Luck> i can see that getting pretty bogged down
[14:24] <+Aknor> m_items is the private std::map<uint32, InventoryItemRef> container
[14:24] <+Aknor> well, i have no idea how to do it better
[14:24] <+Aknor> distributed containers?
[14:24] <+Aknor> idk
[14:25] <+Luck> multi-thred it
[14:25] <+Aknor> yeah
[14:25] <+Luck> more than 1 container
[14:25] <+Aknor> eve-server is single thread single process
[14:25] <+Luck> more memory usage
[14:25] <+Aknor> yeah
[14:25] <+Luck> much faster execution
[14:25] <+Aknor> yeha
[14:25] <+Luck> w/e
[14:25] <+Luck> it's not a big deal now
[14:25] <+Aknor> well, cant fix that now... ha, yeah
[14:25] <+Luck> lol
[14:26] <+Aknor> so... almost every major class has access to the singleton ItemFactory object somehow, so all it does is m_factory->GetItem(itemID)->GetFlag()
[14:26] <+Aknor> boom, got the item flag
[14:27] <+Aknor> ah, it's just "flag()" not "GetFlag()"
[14:27] <+Luck> :)
[14:27] <+Aknor> so, what do you think so far?    Ship class gets some new functions to fit/unfit modules, provide a way to get the pointer to module classes by flag...
[14:28] <+Luck> yep
[14:28] <+Aknor> then the rest is done on the module classes themselves with their methods
[14:28] <+Aknor> all inside the MM
[14:28] <+Luck> do you agree with the mm checking skills?
[14:28] <+Aknor> so, then the MM will check cpu/power grid, right?
[14:28] <+Luck> or do you think that should be done inside the modules themselves
[14:28] <+Aknor> cpu/power grid, definitely
[14:28] <+Luck> what about skills though?
[14:28] <+Aknor> so that leaves skills, right?  nothing else to check?
[14:28] <+Luck> yea
[14:29] <+Luck> pg/cpu/skills
[14:29] <+Luck> oh
[14:29] <+Aknor> ok, so what skills and check them for what exactly?
[14:29] <+Luck> actually
[14:29] <+Luck> it has to check certain ship attributes as well
[14:29] <+Aknor> hmmm, well
[14:29] <+Luck> i did some of this in the old mm
[14:29] <+Luck> basically it has to check spaceship command skills
[14:29] <+Aknor> like i asked, for what reasons exactly do you think the MM needs to check things like skills and some ship attributes?
[14:29] <+Luck> and gunnery skills
[14:30] <+Aknor> to determine what exactly?
[14:30] <+Luck> because it seems weird
[14:30] <+Aknor> whether they can even be fitted?
[14:30] <+Luck> to split up the fit checks
[14:30] <+Luck> between the mm and the modules themselves
[14:30] <+Luck> yes
[14:30] <+Luck> because otherwise you have a situation where you have the pg and cpu to fit it
[14:30] <+Luck> so the module manager fits it
[14:30] <+Luck> then the module says NOPE from the skils
[14:30] <+Luck> so it unfits it
[14:30] <+Aknor> hmmm
[14:31] <+Luck> it seems odd to me to split up the checks
[14:31] <+Luck> mm does checks
[14:31] <+Luck> modules do effects
[14:31] <+Luck> makes more sense to me
[14:31] <+Aknor> but you know that it requires knowledge of specific needs and requirements of modules to be embedded in the MM itself
[14:31] <+Luck> if you have a ShipRef you already have all of that
[14:31] <+Aknor> so each time we add a module group, you gotta add more specific knowlege of how that module is used to the MM
[14:31] <+Luck> you need a ShipRef and a ClientRef
[14:32] <+Luck> ShipRef gives you ModuleRef which gives you it's attributes
[14:32] <+Luck> you need the ShipRef for the cpu and pg
[14:32] <+Luck> so you already have a ptr to the modules
[14:33] <+Aknor> right
[14:34] <+Luck> idk does that make sense?
[14:34] <+Aknor> but you see what i mean about specific knowledge of modules having to be in the MM?
[14:34] <+Aknor> if we had a ValidateOnline() function for each module
[14:34] <+Aknor> that could do all the checks
[14:34] <+Luck> so pg/cpu/skills
[14:34] <+Luck> all inside the module
[14:35] <+Aknor> because each module knows what skills, ship attributes, etc are required to fit/online/overload/ etc
[14:35] <+Aknor> sounds crazy i know
[14:35] <+Luck> yea
[14:35] <+Luck> lol
[14:35] <+Luck> no it doesn't
[14:35] <+Aknor> well, otherwise, i think the MM becomes some super class
[14:35] <+Luck> so what your suggesting is that the module manaager really is only an barebones interface
[14:35] <+Aknor> hehehehe, almost like the modules manage themselves, eh?
[14:36] <+Luck> between the ship modules and the client class
[14:36] <+Luck> lol
[14:36] <+Aknor> HA, but not really
[14:36] <+Luck> yea
[14:36] <+Luck> no that makes sense
[14:36] <+Luck> okay
[14:36] <+Luck> im with you on this
[14:36] <+Luck> that makes sense
[14:36] <+Aknor> well, the MM would still take the results of the ValidateXXX() calls and make decisions
[14:36] <+Luck> yea
[14:37] <+Luck> kk
[14:37] <+Aknor> it would take the modified externalAction class object that has the overload info, target effect info, whatever, and act on that
[14:37] <+Luck> yea
[14:38] <+Aknor> ok, well i gotta go.. this was good discussion.... hope ya dont think i'm trying to take over around here >_>
[14:38] <+Luck> lol
[14:38] <+Luck> i don't
[14:38] <+Luck> and even if you were
[14:38] <+Luck> i'd be more happy that things were getting done
[14:38] <+Aknor> LOL
[14:39] <+Aknor> well, so just think about this stuff i proposed some more.. see if it makes sense and in the meantime i'll start working on the Ship class, adding the std::map containers, the GetModule(flag) function, FitModule(moduleID), UnfitModule(moduleID), same for rigs and subsystems
[14:40] <+Aknor> by then we'll have had more discussion and brainstorming
[14:40] <+Luck> lol
[14:40] <+Luck> sounds good
[14:40] <+Aknor> ok, cool
[14:41] <+Aknor> as you most likely know way more than i do about the packets for all this module stuff (i know zilch), maybe you could handle that stuff?
[14:41] <+Aknor> and then i'm sure as we're integrating this stuff and actually trying to use it, i'll be examining the packets myself and learning how that part of it works
[14:41] <+Luck> yea
[14:41] <+Luck> there aren't that many we have to worry about
[14:42] <+Luck> most of the packets are for graphics stuff
[14:42] <+Aknor> for instance, how does the client handle packets for grouped modules?
[14:42] <+Luck> well that I haven't looked at yet
[14:42] <+Aknor> one packet sent if you activate the group?
[14:42] <+Luck> since i never had any info on it
[14:42] <+Aknor> haha
[14:42] <+Aknor> so, the MM might need to retain some info about module 'groups'
[14:42] <+Luck> possibly
[14:42] <+Aknor> then inside the MM, it makes the iterative calls to all the modules in that group
[14:43] <+Aknor> unless the client just sends rapid-fire activate packets for all modules in the group, OR it attaches all the itemIDs of the modules in the group inside the activate packet
[14:43] <+Aknor> bah... we'll figure it out
[14:43] <+Luck> yea
[14:43] <+Aknor> anyway. got to go, so i'll talk to you later dude
[14:43] <+Luck> it could just expand the tuple
[14:43] <+Luck> k
[14:44] <+Aknor> yeah
[14:44] <+Luck> ttyl man
[14:44] <+Aknor> ok
[14:44] ->> You are now known as Aknor|afk



PART III

[00:15] <+oza> hey hey Luck
[00:15] <@Luck> hey
[00:15] <@Luck> what's up
[00:15] <+oza> just been logging with aknor
[00:15] <+Aknor> hey
[00:15] <@Luck> hey
[00:15] <+Aknor> logging buy/sell orders
[00:15] <+oza> apart from that tring to get a stupid local vm fixed
[00:16] <@Luck> lol
[00:16] <@Luck> less log more code :p
[00:16] <@Luck> jk
[00:16] <+oza> lol
[00:16] <+oza> less chat more code
[00:16] <@Luck> lol
[00:16] * oza whips luck
[00:16] <@Luck> :(
[00:16] <+oza> :P
[00:16] <@Luck> lol
[00:17] <@Luck> aknor any progress on the ship modules?
[00:17] <+Aknor> nah
[00:17] <@Luck> lol
[00:17] <+Aknor> haven't worked on them at all
[00:17] <@Luck> ...
[00:17] <+Aknor> today was mother's day so was away all day
[00:17] <@Luck> ah
[00:17] <+Aknor> yesterday had stuff to do
[00:17] <@Luck> i understand being busy :p
[00:18] <+Aknor> i'll be doing some writing of that stuff soon :)
[00:18] <+Aknor> you waiting on them?
[00:18] <@Luck> well
[00:18] <@Luck> somewhat
[00:18] <+Aknor> hahah
[00:18] <@Luck> i want to see what your base class looks like
[00:18] <+Aknor> ah
[00:18] <@Luck> so i can A) derive more of the 138
[00:18] <+Aknor> ooooo
[00:18] <@Luck> and B) work on the mm
[00:18] <+Aknor> ok
[00:19] <+oza> 138?
[00:19] <@Luck> 138 module types
[00:19] <+Aknor> LOL
[00:19] <+Aknor> not types, groups
[00:19] <+oza> 0.0
[00:19] <@Luck> well
[00:19] <@Luck> yea
[00:19] <@Luck> oh
[00:19] <@Luck> and
[00:19] <@Luck> one more thing that's gonna make our life a little bit more of a pain in the ass
[00:19] <+Aknor> \o/
[00:19] <+oza> WAIT FOR IT
[00:19] <@Luck> we may have to include a gfx function in the derived classes
[00:19] <@Luck> as some of them are different
[00:19] <@Luck> *very different
[00:19] <+Aknor> what does that do?
[00:19] <@Luck> to send the correct graphics packets
[00:20] <+Aknor> send a gfx packet to the client(s) ?
[00:20] <@Luck> tell it what type of graphics to display
[00:20] <+oza> wouldn't it jsut be an id
[00:20] <+Aknor> ok
[00:20] <@Luck> for something like turrets yes
[00:20] <@Luck> but it may get a little screwy with boosters and shields and such
[00:20] <+Aknor> only active modules have that gfx function yeah?
[00:20] <@Luck> yes
[00:20] <@Luck> and they don't vary much between the major types of modules
[00:21] <+Aknor> ok, so that would be virtual void SendGraphicsPacket() = 0;
[00:21] <+Aknor> in the ActiveModules class
[00:21] <@Luck> something like that yea
[00:21] <+Aknor> then all of the active modules inherit it and then have to implement it on their own
[00:21] <@Luck> yea
[00:21] <+Aknor> and that would just use one of the Client send packet functions?
[00:21] <@Luck> yep
[00:21] <+Aknor> ok, so we could do this one of two ways
[00:22] <@Luck> you just create the packet, encode it and send it on it's way
[00:22] <+Aknor> one, we have this separate SendGraphicsPacket() function in EACH module class
[00:22] <+Aknor> OR, the MM does every one of them
[00:22] <@Luck> i was just about to suggest that
[00:22] <+Aknor> but, i gotta ask, it's module specific info that goes in there?
[00:22] <@Luck> what I did before was write a really general one that took a buch of input from the particular module
[00:22] <@Luck> umm
[00:22] <@Luck> more like group specific
[00:23] <+Aknor> ok
[00:23] <+Aknor> fair enough
[00:23] <@Luck> like laser turrets do laser effects
[00:23] <@Luck> etc
[00:23] <@Luck> h/o one second
[00:23] * Luck searches for table
[00:23] <+Aknor> remember that "externalAction" class thingy i suggested that we would create in the MM then pass into the module functions Activate/Online/etc that the module class would modify?
[00:23] <+Aknor> we could just put the packet to be sent in there
[00:24] <@Luck> yea
[00:24] <@Luck> that could work
[00:24] <+Aknor> then the MM would just use some CheckForGFXPacketToSend()... returns boolean
[00:24] <+Aknor> then sends the packet because the MM has access to Client object, module classes do not
[00:24] <+Aknor> so, we get best of both worlds
[00:24] <@Luck> yea
[00:24] <@Luck> or
[00:24] <@Luck> wait
[00:24] <+Aknor> module classes make the packet and send it up to MM
[00:24] <@Luck> lol
[00:24] <@Luck> nvm
[00:25] <+Aknor> then MM sends it out using Client object reference
[00:25] <@Luck> yea
[00:25] <+Aknor> but there's something else here
[00:25] <+Aknor> it's not just the client who owns that module that gets these packets right?
[00:25] <@Luck> the client doesn't own the module...
[00:25] <@Luck> im not sure i understand what you mean
[00:26] <+Aknor> ok, ok... i mean the client that owns the ship that owns the module being activated or whatever
[00:26] <+oza> wow what a headfuck
[00:26] <@Luck> lol
[00:26] <@Luck> :p
[00:26] <+Aknor> player X activates module Y, right?
[00:26] <@Luck> yes
[00:26] <+Aknor> MM calles Activate() for module X
[00:26] <+Aknor> MM then sees a GFX packet goes out
[00:26] <+oza> module Y*
[00:26] <@Luck> :)
[00:27] <@Luck> yes
[00:27] <+Aknor> but player X is in a bubble with players A, B, and C
[00:27] <+Aknor> don't all players A, B, C, and X get that gfx packet?
[00:27] <@Luck> h/o
[00:27] <+Aknor> ok
[00:27] <+oza> log and u shall see
[00:27] <+Aknor> i know, i know
[00:27] <+oza> :P
[00:27] <+Aknor> haven't gottn there yet ;)
[00:28] <@Luck> i had it working in the old one, just checking the source
[00:28] <@Luck> trac seems to be very slow
[00:29] <+Aknor> i assumed all clients in the "bubble" need to receive the gfx packet for just one ship activating a module that had an external effect like an armor repairer, so that all clients would "see" the gfx effect
[00:29] <+oza> you would think so
[00:29] <+oza> or they wouldn't get all effects
[00:29] <+Aknor> so, it needs some kind of multicast, but this might already be handled through the bubblemanager
[00:30] <@Luck> yea
[00:30] <@Luck> i only remember sending a destiny update packet
[00:30] <@Luck> and i believe that the destiny manager handled it internally
[00:30] <+Aknor> ok, so maybe that is already handling sending the packet to all clients in the bubble and the MM does not need to know HOW to do that
[00:30] <@Luck> i don't believe it does
[00:30] <@Luck> and in any case
[00:30] <@Luck> it shouldn't
[00:30] <+Aknor> it just tells the bubblemanager or whatever class does it, then it gets done
[00:30] <+Aknor> which is what makes sense
[00:30] <@Luck> that should be handled elsewhere
[00:31] <@Luck> yea
[00:31] <+Aknor> right, encapsulated elsewhere
[00:35] <@Luck> ah
[00:35] <@Luck> okay
[00:35] <@Luck> found it
[00:35] <@Luck> in dgmeffects
[00:35] <@Luck> the guid column
[00:35] <@Luck> effects.whatever
[00:35] <@Luck> that's basically what is unique about what is sent
[00:35] <@Luck> most of the time at least
[00:36] <@Luck> except effects.Laser doesn't work
[00:36] <@Luck> idk why :(
[00:39] <+Aknor> huh, weird
[00:39] <+oza> does that send it to all clients?
[00:41] <@Luck> does what send it to all clients?
[00:41] <+oza> the effects
[00:41] <+oza> dgmeffects
[00:42] <+oza> or are you jsut sayign thats where the id for it is
[00:42] <@Luck> that's where the info is
[00:42] <+oza> k
[00:45] <+Aknor> so, luck, do you think that makes sense?  have the module classes encode the gfx packet then attach it to that externalAction class instance passed into the module functions?
[00:46] <+Aknor> then the MM takes that packet, when present, and sends it out?
[00:46] <@Luck> yea
[00:46] <+Aknor> ok
[00:46] <@Luck> should be relatively simple
[00:47] <+Aknor> i haven't thought of all that would go into this externalAction class, but since it's a class object, we can add to it later without breaking what's already there
[00:47] <@Luck> the mm just does client->send(m_shipRef->GetModule(flag)->encodeGFXPacket()) or w/e
[00:47] <+Aknor> yeah, kinda
[00:47] <@Luck> i guess that's not really how i'd work if your wrapping all that up in a different class
[00:48] <@Luck> i'm kind of thinking of it as a function inside the mm kind of way
[00:48] <+Aknor> my idea was we make this ModuleAction class, that holds things like overload info on what slots get damaged due to overload and how much, this gfx packet, whatever else we need
[00:48] <@Luck> which isn't necessarily the way it should be done
[00:48] <@Luck> yea
[00:48] <+Aknor> kind of a way for the modules to "tell" the MM what needs to happen now that the module has been Onlined or Activated or Overloaded or the reverse
[00:48] <@Luck> i feel like that should be owned by the mm
[00:48] <+Aknor> yes
[00:49] <@Luck> kk
[00:49] <+Aknor> so, when dogmaIMBound calls ModuleManager->Activate(moduleID)
[00:49] <+Aknor> inside there, the MM makes a new instance of the ModuleAction class, and passes it into the module's Activate or w/e
[00:49] <+Aknor> then the Module class modifies that instance
[00:50] <+Aknor> and when the execution returns to the MM, it checks the instance of the ModuleAction class object for what's new/changed
[00:50] <+Aknor> and takes action on it, whether it's sending out the gfx packet or applying overload damage to adjacent slots' modules
[00:50] <@Luck> yea
[00:50] <@Luck> everytime i think about handling overload damage my head hurts
[00:51] <+Aknor> LOL
[00:52] <+Aknor> when we make this design functional, the design itself should make it rather easy since the modules themselves will calculate heat damage
[00:52] <@Luck> i hope so
[00:52] <+Aknor> then the MM can take that from the modified ModuleAction class object passed into the module class and apply the damage to adjacent modules according to those formulas you mentioned
[00:53] <+Aknor> where have you seen those formulas for overload damage?
[00:53] <@Luck> im looking for the forum post right now
[00:53] <@Luck> but you can read this while i search if you want
[00:53] <+Aknor> you know, again, overload stuff is another thing that EFT does
[00:53] <+Aknor> ok
[00:53] <@Luck> it goes over it from a higher level point of view
[00:53] <@Luck> yea that's true
[00:53] <+Aknor> im gonna head to bed soon, so...
[00:53] <@Luck> http://wiki.eveonline.com/en/wiki/Heat_(Game_mechanic)
[00:53] <+Aknor> ah
[00:54] <+Aknor> figured it be on evelopedia
[00:54] <@Luck> i love this
[00:54] <@Luck> i makes me want to kill the ccp devs
[00:54] <@Luck> Offline modules and empty module slots function as heat sinks, reducing the heat damage taken over time both locally (nearby overloaded module(s) on same rack) and globally (whole ship). Hence such heat dispersion slots will give you middle-term overload as trade-off.
[00:55] <+Aknor> makes sense
[00:55] <@Luck> yea
[00:55] <+Aknor> just not easy to simulate
[00:55] <@Luck> but it's a pain in the ass
[00:55] <@Luck> lol
[00:55] <+Aknor> but again, the module itself knows how much heat will be generated when overloaded, so it just returns that in the ModuleAction class
[00:56] <+Aknor> then the MM is responsible for checking adjacent module slots and assigning or sinking heat damage
[00:57] <@Luck> yea
[00:57] <@Luck> the more we talk about it the less of a pain it seems
[00:57] <@Luck> but it's still a pain :p
[00:58] <+oza> everything is still a pain
[01:01] <@Luck> okay
[01:01] <@Luck> so no one knows the exact formula
[01:01] <@Luck> afaik
[01:01] <+oza> which one?
[01:02] <@Luck> for overload damage
[01:03] <@Luck> im gonna write up what I know on overheating in the wiki
[01:03] <@Luck> so we can attempt to put together a formula
[01:03] * Luck hopes he still has wiki access
[01:03] <+Aknor> Luck, it's in EFT... has to be
[01:03] <+Aknor> LOL
[01:03] <@Luck> it is in eft
[01:03] <+Aknor> i just hate VB, LOL
[01:03] <+Aknor> but i can read it
[01:04] <@Luck> but all the people on the eve forums, including the mods say not to put much stock in his formula for that because the math is unkown
[01:04] <@Luck> that his overload formulas are just his best guess
[01:04] <+oza> why doesn't ccp release the formulas then
[01:04] <@Luck> because they're weird about that
[01:04] <@Luck> they don't release many formulas at all
[01:04] <@Luck> most are figured out by the community
[01:04] <@Luck> with a shitload of data points and excel :p
[01:05] <+oza> if u log enough packets you could come up with soemthign close ?
[01:05] <+oza> or still not close enough
[01:05] <@Luck> logging the packets is probably overkill
[01:05] <@Luck> we just need somone to spend a bunch of time breaking items with overloading and recording the time it takes to break them
[01:05] <@Luck> and the specific configuration
[01:06] <@Luck> and how different configurations affect the time
[01:06] <@Luck> etc
[01:06] <+oza> :S
[01:06] <+oza> where is hur :P
[01:06] <+oza> give him something to do
[01:06] <+oza> hehe
[01:06] <@Luck> :p