Jump to content

Gotisch

Members
  • Posts

    69
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Everything posted by Gotisch

  1. Anyone got this to compile under linux? edit: here are neo's changes and changes to make it compile under linux (just some includes missing) Not sure if this will work, since it just silently fails for me gotisch@gotisch-desktop:~/programmieren/MoveMaps/Debug/src/generator$ ./mmap-generator 0 51 29 1 gotisch@gotisch-desktop:~/programmieren/MoveMaps/Debug/src/generator$ But hopefully that is just because i dont have vmaps anywhere atm. diff: http://pastebin.ca/1828118 edit2: ok compiles, generation works and viewer works. can someone maybe explain again what is red dots and blue lines? in viewer? This doesnt look right anyway you look at it (if image not allowed pleases delete, and sorry :eek:) the house is below red dots. edit 12312 (feels like it ) Here is image of movemaps + vmaps in stormwind (where they where correctly generated) and on right is a path + visited zones. Looking at generated zones, paths, and visited zones during pathfinding. Imho work still first needs to be done on two things: generation of mmaps, and with that correct generation of zones. The fewer zones the better imo. fewer zones will also result in faster pathfinding. and less memory usage.What algorithm is later chosen to do actualy finding of path is not so important at the moment imo. In case someone wanted to hear my opinion
  2. how about example of crashlog you have problem with? i can only show you example from one of our crashdumps: nice -n 19 gdb $srv_dir/bin/mangos-worldd --core $f --batch --quiet -ex "info threads" -ex "thread apply all bt full" -ex "quit" &> $log_file && rm $f results in warning: Can't read pathname for load map: Input/output error. Core was generated by `/home/gcuser/gc_mangos/mangos_server/bin/mangos-worldd'. Program terminated with signal 6, Aborted. [New process 24998] [New process 25003] [New process 25002] [New process 25001] [New process 25000] [New process 24999] [New process 24756] [New process 24760] [New process 24759] [New process 24758] #0 0x00007f65e255ff55 in raise () from /lib/libc.so.6 10 process 24758 0x00007f65e3035131 in nanosleep () from /lib/libpthread.so.0 9 process 24759 0x00007f65e3035131 in nanosleep () from /lib/libpthread.so.0 8 process 24760 0x00007f65e3035131 in nanosleep () from /lib/libpthread.so.0 7 process 24756 0x00007f65e302e99d in pthread_join () from /lib/libpthread.so.0 6 process 24999 0x00007f65e25cac91 in nanosleep () from /lib/libc.so.6 5 process 25000 0x00007f65e25f2f82 in select () from /lib/libc.so.6 4 process 25001 0x00007f65e3035131 in nanosleep () from /lib/libpthread.so.0 3 process 25002 0x00007f65e25f9cd8 in epoll_wait () from /lib/libc.so.6 2 process 25003 0x00007f65e25f9cd8 in epoll_wait () from /lib/libc.so.6 * 1 process 24998 0x00007f65e255ff55 in raise () from /lib/libc.so.6 ... a lot more text ... the numbered list shows all running processes and what method they are currently in. * shows you where the crash occured. so in rest of dump only is interesting what happens in process 1 (24998) So you scroll through file until you get to Thread 1 (process 24998): #0 0x00007f65e255ff55 in raise () from /lib/libc.so.6 No symbol table info available. #1 0x00007f65e2562d90 in abort () from /lib/libc.so.6 No symbol table info available. #2 0x00007f65e255907a in __assert_fail () from /lib/libc.so.6 No symbol table info available. #3 0x00000000004fbcce in Map::getNGrid (this=<value optimized out>, x=<value optimized out>, y=<value optimized out>) at ../../../src/game/Map.h:451 st = {static SYMBUFSIZ = 4096, buf_ = "/home/gcuser/gc_mangos/mangos_server/bin/mangos-worldd(_ZNK3Map9GetHeightEfffb+0x8f) [0x5fbaff]\\n/home/gcuser/gc_mangos/mangos_server/bin/mangos-worldd(_ZNK11WorldObject21UpdateGroundPositionZEffRf+0x4"..., buflen_ = 1754, static UNSUPPORTED = 0x7f65e46075e0 "<stack traces unsupported platform>", static UNABLE_TO_GET_TRACE = 0x7f65e4607610 "<unable to get trace>"} __FUNCTION__ = "getNGrid" __PRETTY_FUNCTION__ = "NGridType* Map::getNGrid(uint32, uint32) const" #4 0x00000000005f9c4a in Map::EnsureGridCreated (this=0x60b4, p=@0x7f65d92afae0) at ../../../src/game/Map.cpp:354 No locals. #5 0x00000000005fbaff in Map::GetHeight (this=0x60b4, x=-nan(0x400000), y=-nan(0x400000), z=110.864998, pUseVmaps=true) at ../../../src/game/Map.cpp:1639 gmap = <value optimized out> mapHeight = <value optimized out> vmapHeight = <value optimized out> #6 0x000000000061ef42 in WorldObject::UpdateGroundPositionZ ( this=<value optimized out>, x=-nan(0x400000), y=-nan(0x400000), z=@0x7f65d92afbdc) at ../../../src/game/Object.cpp:1467 new_z = 9.14767638e-41 #7 0x000000000076d6cd in Unit::KnockBackFrom (this=0x7f65bf674d60, target=<value optimized out>, horizontalSpeed=0, verticalSpeed=0) at ../../../src/game/Unit.cpp:14069 fx = -nan(0x400000) fz = 110.864998 fy2 = nan(0x400000) dis = <value optimized out> fy = -nan(0x400000) fx2 = nan(0x400000) fz2 = 0 angle = <value optimized out> #8 0x00000000006ffa9a in Spell::DoSpellHitOnUnit (this=0x7f65b64711f0, unit=0x7f65bf674d60, effectMask=1) at ../../../src/game/Spell.cpp:1162 effectNumber = 0 realCaster = (class Unit *) 0x7f65bf6773f0 #9 0x000000000070013b in Spell::DoAllEffectOnTarget (this=0x7f65b64711f0, target=0x7f65b64036e0) at ../../../src/game/Spell.cpp:961 mask = 6 unit = (class Unit *) 0x7f65bf674d60 real_caster = (class Unit *) 0x7f65bf6773f0 caster = (class Unit *) 0x7f65bf6773f0 missInfo = SPELL_MISS_NONE procAttacker = 256 procVictim = 512 procEx = <value optimized out> #10 0x000000000070ed6c in Spell::handle_delayed (this=0x7f65b64711f0, t_offset=850) at ../../../src/game/Spell.cpp:2825 next_time = 0 #11 0x000000000070fa5e in SpellEvent::Execute (this=0x7f65c02b4950, e_time=121621, p_time=<value optimized out>) at ../../../src/game/Spell.cpp:6271 n_offset = <value optimized out> #12 0x00000000008484ef in EventProcessor::Update (this=0x7f65bf677500, p_time=101) at ../../../src/framework/Utilities/EventProcessor.cpp:47 Event = (BasicEvent *) 0x7f65c02b4950 #13 0x000000000076cc5c in Unit::Update (this=0x7f65bf6773f0, p_time=101) at ../../../src/game/Unit.cpp:319 No locals. #14 0x0000000000538cdb in Creature::Update (this=0x7f65bf6773f0, diff=101) at ../../../src/game/Creature.cpp:468 No locals. #15 0x00000000006092a6 in VisitorHelper<MaNGOS::ObjectUpdater, Creature> ( v=@0x7f65d92aff90, c=<value optimized out>) at ../../../src/game/GridNotifiersImpl.h:48 No locals. #16 0x000000000060839c in Map::Update (this=0x7f65ddc07a40, t_diff=@0x7f65d92affec) at ../../../src/game/../framework/GameSystem/TypeContainerVisitor.h:53 cell = {data = {Part = {grid_x = 24, grid_y = 36, cell_x = 3, cell_y = 0, nocreate = 1, reserved = 16}, All = 553662744}} y = 288 x = 195 plr = <value optimized out> area = {right_offset = 2, left_offset = 1, upper_offset = 1, lower_offset = 2} updater = {i_timeDiff = 101} grid_object_update = {i_visitor = @0x7f65d92aff90} world_object_update = {i_visitor = @0x7f65d92aff90} __PRETTY_FUNCTION__ = "virtual void Map::Update(const uint32&)" #17 0x0000000000612967 in MapManager::Update (this=0x7f65ddbd3790, diff=<value optimized out>) at ../../../src/game/MapManager.cpp:258 No locals. #18 0x000000000078c5c4 in World::Update (this=0x7f65dc0193f0, diff=39) at ../../../src/game/World.cpp:1416 No locals. #19 0x00000000004f1a51 in WorldRunnable::run (this=<value optimized out>) at ../../../src/mangosd/WorldRunnable.cpp:60 diff = 39 realCurrTime = 4154334358 realPrevTime = <value optimized out> prevSleepTime = 37 #20 0x000000000082d75c in ACE_Based::Thread::ThreadTask (param=0x60b4) at ../../../src/shared/Threading.cpp:183 _task = (class ACE_Based::Runnable *) 0x7f65de8becd0 #21 0x00007f65e302d73a in start_thread () from /lib/libpthread.so.0 No symbol table info available. #22 0x00007f65e25f969d in clone () from /lib/libc.so.6 No symbol table info available. #23 0x0000000000000000 in ?? () No symbol table info available. This is a stacktrace. Shows you the calling three of current execution. The error occurs in item furthest down, here: raise(). This is just helper function though to raise a exception. First real mangos method found in three (going upwards) is #3 0x00000000004fbcce in Map::getNGrid (this=<value optimized out>, x=<value optimized out>, y=<value optimized out>) Since all is optimized out it doesn't help much. But more upwards we can see what methods called this one and by who they where called. Finally we get to #5 0x00000000005fbaff in Map::GetHeight (this=0x60b4, x=-nan(0x400000), y=-nan(0x400000), z=110.864998, pUseVmaps=true) at ../../../src/game/Map.cpp:1639 This looks weird, why should mangos try to getHeight with a not avaible x and y value? if we look further up we find #7 0x000000000076d6cd in Unit::KnockBackFrom (this=0x7f65bf674d60, target=<value optimized out>, horizontalSpeed=0, verticalSpeed=0) at ../../../src/game/Unit.cpp:14069 fx = -nan(0x400000) fz = 110.864998 fy2 = nan(0x400000) dis = <value optimized out> fy = -nan(0x400000) fx2 = nan(0x400000) fz2 = 0 angle = <value optimized out> And see here that in line 14069 of file unit.cpp the method further down callstack is called and local variables are already NaN. // line 14052 to 14074 float g = 19.23f;// seems that physic constant g(earth's gravity) in world of warcraft is about 2 times larger than real float dh = verticalSpeed*verticalSpeed / (2*g); // maximum parabola height float time = sqrtf(dh/(0.124976 * verticalSpeed)); //full move time in seconds // should be time = 2*Vert_speed/g, but.. float dis = time * horizontalSpeed; float ox, oy, oz; GetPosition(ox, oy, oz); float fx = ox + dis * vcos; float fy = oy + dis * vsin; float fz = oz; float fx2, fy2, fz2; // getObjectHitPos overwrite last args in any result case if(VMAP::VMapFactory::createOrGetVMapManager()->getObjectHitPos(GetMapId(), ox,oy,oz+0.5f, fx,fy,oz+0.5f,fx2,fy2,fz2, -0.5f)) { fx = fx2; fy = fy2; fz = fz2; } then you just need to find what is actually wrong and then lastly you finally fix bug and everyone is happy: http://github.com/gc/mangos/commit/a235c807651f65f377aa11e85fa5e974dcfb2bf6 hope that helps
  3. Why is this needed? is old network code not performant enough? or is it just to make everything use ace library?
  4. I made some documentation for the mail.cpp mail.h files to test out doxygen and to check out how "documented" mangos code would look. Please tell me your opinion and if its worth it. Some comments: 1. i used the @params syntax because some other files already where using the @ syntax. 2. Everything is a sentence and thus finishes by a . (this is opinion, maybe do it otherwise?) 3. I tried to comment stuff where it is implemented, not necessarly just mentioned. Questions are: What should be documented in header files, what in cpp files? I currently went after commenting everything where the actual code is. so mostly constructor in header methods in cpp. What should we do for this? etc. i think much needs to be answered before documentation can be done, else there will be much need to refracture. and more ... here is diff of changed files: http://pastebin.com/m183f6d1a and resulting documentation files can be found here: http://78.47.254.221/tmp/html/group__mailing.html (its documentation of clean mangos with just the two files edited.) (edit: i see that i accidently have /*** at 2 items or such so documentation is not generated for those. but you get the idea)
  5. even with import from trinitycore the mirrors have the wrong name. can anyone really confirm it works with correct (the players) name on npcs?
  6. well even if you send the smsg_mirrorimage_data the npcs still are called MirrorImage (or whatever they are called) although they take on appearance of player.
  7. anyone knows what is to send to get correct naming of the mirror images? i.e. name of the player and not "mirror image". i dont think this works on trinity. from videos floating around it looks like an aura
  8. is there github/svn for your work too?
  9. i agree, the RA isnt really good. and whole system doesnt even support something like transaction ID so you cant even catch the reply to your "command" and of course only 1 connection possible.
  10. If you have high pings due to the limits of the internet connections only optimization is to send less stuff to players. To test out what effect increased compression really has one should do the following: start server with compression off connect with one player and enter a highly populated area. And of course record all traffic created. then do the same with compression set to 9. comparing the ammount of data sent to the client should be lower with compression set to 9, i wonder by how much though.
  11. still dunno why you guys all want lua there are so many good established (and sometimes fast) scripting languages out there. just because lua is used in the client gui scripting isnt really a reasono to use it here.
  12. Hello, could someone explain to me how the gameeventmgr idea works? what i dont understand is the spawning part. i always though all items in for example the gameobject table have already spawned at server start. But since game_event_gameobjects links to guid of those objects, how does server know what to spawn (add to world) and what not? for example if i want one object to be added at event start, how do i have to add it to database so that it is not spawned until event starts?
  13. we have this enabled. Its just a matter of adding code to access gameserver database at 3-4 places max. most of it are in ucp/ folder. well thats for the phpbb -> mangos version for the mangos -> phpbb version you would probably need, dunno some more changes?
  14. Does this actually work? i read somewhere it doesnt work for already loaded script but you have to rename the compiled script and then load it. Well i could be wrong dunno how up to date that topic was
  15. if you have an error in it it crashes server you cant (easily) reload it while server is running is probably something people would say. (i really like the c++ way. although restarting all the time when testing is a bit of a hassle ^^)
  16. where do you get 0.20 from? wowwiki says 0.14 for 3.1.0 and 0.16 on 3.0.8 i highly doubt they changed it to 0.20 in 3.0.9? wowhead just says 0.14 for 3.1.0
  17. well thats what all sources i can find tell me "unmodified weapon damage" + "ammo damage" + X + "RAP*0.1" iirc.
  18. you still use normalized damage for spell though float(base)/m_caster->GetAttackTime(RANGED_ATTACK)*2800 i dont see why you do that.
  19. else if(m_spellInfo->SpellFamilyFlags & 0x100000000LL) { int32 base = irand((int32)m_caster->GetWeaponDamageRange(RANGED_ATTACK, MINDAMAGE), (int32)m_caster->GetWeaponDamageRange(RANGED_ATTACK, MAXDAMAGE)); if(m_caster->GetTypeId()==TYPEID_PLAYER) base += ((Player*)m_caster)->GetAmmoDPS() * m_caster->GetAttackTime(RANGED_ATTACK)/1000; damage += int32(float(base) + m_caster->GetTotalAttackPowerValue(RANGED_ATTACK)*0.1f); } I think damage calculations for steadyshot should be like this. Since it takes into account ammo damage. I dont know why before the base damage was normalized. this shouldnt be. It seems the dazed effect doesnt work either, alhtough in code its there. and of course it breaks autoshot. Also missing seems to be the impact of hast effects and such on casting time. Anyway it looks a bit like a hack because from logic there are two spell effects: the dummy effect and scool damage effect. Imo shool damage effect should have the fixed falue per level (no need for custom calculations here) and all the rest (damage from ammo/eventual damage because of dazed/ect.) should be done in dummy effect. or i could be totally wrong
×
×
  • 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