Jump to content

Marik

Members
  • Posts

    28
  • Joined

  • Last visited

    Never
  • Donations

    0.00 GBP 

Posts posted by Marik

  1. Hi,

    my mangos server is running on an debian 64-bit dedicated server.

    To start my process I use this script:

    #!/bin/sh
    screen -dmS mangos-worldd-restarter ./restarter_debug_bin.sh
    screen -dmS mangos-realmd ./mangos-realmd

    Which calles:

    #!/bin/sh
    
    ###############
    # About: Auto restart mangos-worldd on crash & generate crash report into crash_log_(DATE_TIME).log
    ###############
    # 1. Compile MaNGOS with parameter: --with-debug-info
    # 2. Put auto_restarter.sh into compiled mangos directory (where folders: bin/, lib/, etc/)
    # 3. (Only once): chmod +x auto_restarter.sh
    # 4. Usage: ./auto_restarter.sh -c etc/mangosd.conf
    # p.s. Make sure you have "gdb" installed.
    ###############
    
    # config:
    # path to mangos-worldd binary
    daemon=./mangos-worldd
    # system
    export LD_LIBRARY_PATH=.:lib:$LD_LIBRARY_PATH
    
    if [ "`ulimit -c`" -eq 0 ]; then
       ulimit -c unlimited
    fi
    
    
    while true
       do 
       MANGOS=`ps -el | grep mangos-worldd`
       $daemon $*
       if [ -z "$MANGOS" ]; then
           dte=`date +%F_%H-%M-%S`
           gdb $daemon core.* --batch --eval-command="bt ful" > ../logs/crash/crash_log_$dte.log
           mv crash_log_$dte.log gdb/crash_log_$dte.log
           mv log/Server.log dc/Server-$dte.log
           gzip dc/*.log --best
           rm core.*
       fi
       sleep 5
    done

    Anyway, this was pretty nice untill i reinstalled my server (the whole debian server, not just mangos ;) ).

    Now I get with every crash an 0 Byte Crashlog.

    First, I thought it was because of missing rights, but I granted the logs folder all rights.

    Notice that the process creates the crashlogs corectly, but does not write anything to the file.

    drwxrwxrwx 4 root root 4096 12. Dez 10:46 logs
    

    Does somebody has an idea?

    Thanks in advice

    Marik

  2. Hi Folks,

    I've investigated my Problem.

    Pls correct me, if i am wrong.

    #if PLATFORM == PLATFORM_WINDOWS
    inline uint32 getMSTime() { return GetTickCount(); }
    #else
    inline uint32 getMSTime()
    {
       struct timeval tv;
       struct timezone tz;
       gettimeofday( &tv, &tz );
       return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
    }
    #endif

    Let's start with windows.

    It is called the GetTickCount() method from the WinAPI. (http://msdn.microsoft.com/en-us/library/ms724408(VS.85).aspx)

    Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.

    So in the case of my windows computer the Value was in the test something like 5000 0000 --> apr. 5000 seconds --> 83 minutes. 5000 0000 is a relative small number and fits in a unit32 without problems.

    So now Linux.

        gettimeofday( &tv, &tz );
       return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);

    gettimeofday( &tv, &tz ); Calculates the seconds (and milliseconds) from the 1.1.1970.

    Let's Calculate.

    Appr. more than 40 Years = 40 * 365 days * 24 hour * 3600 seconds = 1.261.440.000

    Ok this wouldn't overflow an uint32 (2^32 = 0-4.294.967.295)

    But you return:

    return (tv.tv_sec * 1000) + (tv.tv_usec / 1000);

    Ok, it makes sense, because we want the milliseconds, but now it ist 1.261.440.000 * 1.000 = 1.261.440.000.000 what definitively overflows the uint32 (2^32 = 0-4.294.967.295).

    The result from getMSTime() is used for the Updates in the world since this commit. That's new.

    Why I am telling you?

    I just want my totems back @ linux :(

    I don't now whether I am right.

    And even if all the points, I mentioned are correct, I do not know how it could falsify the system. I mean, so what? the milliseconds overflows the data bounds, but there would be some kind of modulo operation. Timeimillisec % 2^32, would'n it?

    The easiest way, would be, that some please test this commit @ a platform which is not windows.

    Thus, nobody seams to have my totem Problem, I think all my considerations are void :(

    Anyway, Good night Everybody!

    Marik :)

    Small Addition: With this Commit I had very weird crashes in some scripts. In one script its crashed at three different Codelines (Play sound A, Play sound B, change flag --> Easy stuff). Before this commit I haven't got problems with this crash. And now, I am on one Commit before this, I've tested the same script and no crashes. I don't now whether it is all linked together, but it is problably.

  3. fix only related use "bind to account items" in part ignore reputation req at use.

    But you still need required level for use.

    I assumed that.

    First Char bought the Item, because this char has enough reputation.

    Second Char is at level 80, but have not enough reputation.

    Now i thought, the fix, solves this Problem.

    I mean, that my second character can use (enchant) the item despite of his missing reputation.

    Where is my error in reasoning?

    By the way: I dont now why Blizzard has exactly two items of one enchant. Maybe the item which is sold, is the one with the reputation. And after sending the item via mail, or even earlier, after you buy it, it will transform to the item without reputation. That would make sense.

  4. Hi,

    how it is supposed to work?

    I've pulled the current Mangos version and bought me with a char http://www.wowhead.com/item=50335 (this char has max reputation).

    The Sending to another char (reputation hatefull) on my account works, but the reputation font is still read and right klick on the item tells me, that i cannot use this item.

    Is there some kind of flag, I've forgotten to set @ Database?

    Thanks in Advice

    Marik

  5. diff --git a/src/game/Item.h b/src/game/Item.h
    index 6b87604..b470564 100644
    --- a/src/game/Item.h
    +++ b/src/game/Item.h
    @@ -359,6 +359,7 @@ class MANGOS_DLL_SPEC Item : public Object
            void SetLootState(ItemLootUpdateState state);
            bool HasGeneratedLoot() const { return m_lootState != ITEM_LOOT_NONE && m_lootState != ITEM_LOOT_REMOVED; }
            bool HasSavedLoot() const { return m_lootState != ITEM_LOOT_NONE && m_lootState != ITEM_LOOT_NEW && m_lootState != ITEM_LOOT_TEMPORARY; }
    +        bool IsTemporaryLoot() const { return m_lootState == ITEM_LOOT_TEMPORARY; }
    
            // Update States
            ItemUpdateState GetState() const { return uState; }
    diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp
    diff --git a/src/game/Player.cpp b/src/game/Player.cpp
    index 1daeabd..c92bf9f 100644
    --- a/src/game/Player.cpp
    +++ b/src/game/Player.cpp
    @@ -7900,7 +7900,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type)
    
                loot = &item->loot;
    
    -            if (!item->HasGeneratedLoot())
    +            if (!item->HasGeneratedLoot() || item->IsTemporaryLoot())
                {
                    item->loot.clear();
    
    

    That would fix the problem. I've tested it.

    Whether it is good code style, you have to decide.

    Maybe you prefer to combinte this two method calls to one new: !item->HasGeneratedLoot() || item->IsTemporaryLoot()

    Thats implementation details.

    I hope, I could help.

    Marik

  6. I think the problem lies in hier:

    if (!item->HasGeneratedLoot())
               {
                   item->loot.clear();
    
                   switch(loot_type)
                   {
                       case LOOT_DISENCHANTING:
                           loot->FillLoot(item->GetProto()->DisenchantID, LootTemplates_Disenchant, this,true);
                           item->SetLootState(ITEM_LOOT_TEMPORARY);
                           break;
                       case LOOT_PROSPECTING:
                           loot->FillLoot(item->GetEntry(), LootTemplates_Prospecting, this,true);
                           item->SetLootState(ITEM_LOOT_TEMPORARY);
                           break;
                       case LOOT_MILLING:
                           loot->FillLoot(item->GetEntry(), LootTemplates_Milling, this,true);
                           item->SetLootState(ITEM_LOOT_TEMPORARY);
                           break;
                       default:
                           loot->FillLoot(item->GetEntry(), LootTemplates_Item, this,true);
                           loot->generateMoneyLoot(item->GetProto()->MinMoneyLoot,item->GetProto()->MaxMoneyLoot);
                           item->SetLootState(ITEM_LOOT_CHANGED);
                           break;
                   }
               }
               break;
           }

    In the first round u can fullfill if (!item->HasGeneratedLoot()).

    But then you set item->SetLootState(ITEM_LOOT_TEMPORARY);

    Now item->HasGeneratedLoot() returns true and if (!item->HasGeneratedLoot()) is false.

    Therefore the programm does not acces the above code and does not create the new loot.

    Greetz Marik

  7. Mangos Version: [10675]

    Custom Patches: None

    SD2 Version: None

    Database Name and Version: Current PSMDB

    The Problem: Since the implementation of partly item looting (http://github.com/mangos/mangos/commit/be120e8800e7b090fbe450bb9c7dabb8c5ba640d), it is not possible to get some loot from Miling and Prospecting.

    I.E.: First time i mile or prospect i get a loot. The next x-times the loot is empty

    Greetz Marik

  8. Hello,

    Since the new ACE version http://github.com/mangos/mangos/commit/3c0f8c0efca896fd900adc7bc4cce6ec6360086c my server crashes really often:

    Core was generated by `./mangos-worldd'.

    Program terminated with signal 11, Segmentation fault.

    [New process 14287]

    [New process 14271]

    [New process 14286]

    [New process 14285]

    [New process 14284]

    [New process 14283]

    [New process 14282]

    [New process 14281]

    [New process 14280]

    [New process 14279]

    [New process 14278]

    [New process 14277]

    [New process 14276]

    [New process 14274]

    [New process 14273]

    [New process 14272]

    #0 0x00007f09243349bc in ACE_Message_Block::total_size_and_length (

    this=0x7f08ea26d0d0, mb_size=@0x4780ce40, mb_length=@0x4780ce38)

    at ../../../../dep/ACE_wrappers/ace/Message_Block.cpp:264

    264 mb_size += i->size ();

    #0 0x00007f09243349bc in ACE_Message_Block::total_size_and_length (

    this=0x7f08ea26d0d0, mb_size=@0x4780ce40, mb_length=@0x4780ce38)

    at ../../../../dep/ACE_wrappers/ace/Message_Block.cpp:264

    i = (const ACE_Message_Block *) 0x7f08ea26d0d0

    #1 0x00000000005189af in ACE_Message_Queue<ACE_NULL_SYNCH>::dequeue_head_i (

    this=0x7f08f3917ba0, first_item=@0x4780cea0)

    at ../../../dep/ACE_wrappers/ace/Message_Queue_T.cpp:1461

    mb_bytes = 0

    mb_length = 0

    #2 0x0000000000517ffc in ACE_Message_Queue<ACE_NULL_SYNCH>::dequeue_head (

    this=0x7f08f3917ba0, first_item=@0x4780cea0, timeout=<value optimized out>)

    at ../../../dep/ACE_wrappers/ace/Message_Queue_T.cpp:1941

    ace_mon = {<No data fields>}

    #3 0x000000000081f1bb in WorldSocket::handle_output_queue (

    this=0x7f08f3935d00, g=@0x4780ced0)

    at ../../../src/game/WorldSocket.cpp:375

    mblk = <value optimized out>

    send_len = <value optimized out>

    n = <value optimized out>

    #4 0x000000000081fa22 in WorldSocket::handle_output (this=0x7f08f3935d00)

    at ../../../src/game/WorldSocket.cpp:362

    Guard = {lock_ = 0x7f08f3936020, owner_ = 0}

    send_len = 0

    n = 4294967295

    #5 0x00007f0924318fbf in ACE_Dev_Poll_Reactor::dispatch_io_event (

    this=0x7f08f3a90a00, guard=@0x4780cfe0)

    at ../../../../dep/ACE_wrappers/ace/Dev_Poll_Reactor.inl:86

    eh_guard = {eh_ = 0x7f08f3935d00, refcounted_ = true}

    info = <value optimized out>

    disp_mask = 2

    eh = (class ACE_Event_Handler *) 0x7f08f3935d00

    status = 2

    handle = 32

    revents = <value optimized out>

    #6 0x00007f09243197ce in ACE_Dev_Poll_Reactor::handle_events (

    this=0x7f08f3a90a00, max_wait_time=0x4780e090)

    at ../../../../dep/ACE_wrappers/ace/Dev_Poll_Reactor.cpp:1015

    countdown = {<ACE_Copy_Disabled> = {<No data fields>},

    max_wait_time_ = 0x4780e090, start_time_ = {static zero = {

    static zero = <same as static member of an already seen type>,

    static max_time = {

    static zero = <same as static member of an already seen type>,

    static max_time = <same as static member of an already seen type>,

    tv_ = {tv_sec = 9223372036854775807, tv_usec = 999999}}, tv_ = {

    tv_sec = 0, tv_usec = 0}},

    static max_time = <same as static member of an already seen type>, tv_ = {

    tv_sec = 1288385317, tv_usec = 361021}}, stopped_ = false}

    guard = {token_ = @0x7f08f3a90a78, owner_ = 0}

    result = -1

    #7 0x00007f092437023d in ACE_Reactor::run_reactor_event_loop (

    this=0x7f091ee21900, tv=@0x4780e090, eh=0)

    at ../../../../dep/ACE_wrappers/ace/Reactor.cpp:267

    result = -206437520

    #8 0x0000000000824fa1 in ReactorRunnable::svc (this=0x7f08f3b202c0)

    at ../../../src/game/WorldSocketMgr.cpp:167

    interval = {static zero = {

    static zero = <same as static member of an already seen type>,

    static max_time = {

    static zero = <same as static member of an already seen type>,

    static max_time = <same as static member of an already seen type>,

    tv_ = {tv_sec = 9223372036854775807, tv_usec = 999999}}, tv_ = {

    tv_sec = 0, tv_usec = 0}},

    static max_time = <same as static member of an already seen type>, tv_ = {

    tv_sec = 0, tv_usec = 10000}}

    __FUNCTION__ = "svc"

    __PRETTY_FUNCTION__ = "virtual int ReactorRunnable::svc()"

    #9 0x00007f0924395207 in ACE_Task_Base::svc_run (args=<value optimized out>)

    at ../../../../dep/ACE_wrappers/ace/Task.cpp:271

    t = (ACE_Task_Base *) 0x7f08f3b202c0

    svc_status = <value optimized out>

    #10 0x00007f09243968b5 in ACE_Thread_Adapter::invoke (this=0x7f08f3acce80)

    at ../../../../dep/ACE_wrappers/ace/Thread_Adapter.cpp:94

    exit_hook_instance = <value optimized out>

    exit_hook_maybe = {instance_ = 0x0}

    exit_hook_ptr = <value optimized out>

    #11 0x00007f0922a16fc7 in start_thread () from /lib/libpthread.so.0

    No symbol table info available.

    #12 0x00007f0921fe659d in clone () from /lib/libc.so.6

    No symbol table info available.

    #13 0x0000000000000000 in ?? ()

    No symbol table info available.

  9. Hi,

    I've a small aesthetic thing. It's not so bad I hope.

    Anyway, I get sometimes an Database Error:

    SQL: DELETE FROM creature_respawn WHERE guid = '113185' AND instance = '0&

    2010-10-27 01:43:28 SQL ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0&' at line 1

    The only function in the code, which creates such a SQL Query is the follow:

    void ObjectMgr::SaveCreatureRespawnTime(uint32 loguid, uint32 instance, time_t t)

    {

    mCreatureRespawnTimes[MAKE_PAIR64(loguid,instance)] = t;

    CharacterDatabase.PExecute("DELETE FROM creature_respawn WHERE guid = '%u' AND instance = '%u'", loguid, instance);

    if(t)

    CharacterDatabase.PExecute("INSERT INTO creature_respawn VALUES

    ( '%u', '" UI64FMTD "', '%u' )", loguid, uint64(t), instance);

    }

    Does somebody have an idea how it comes, that the uint32 in combination with the %u flag can be "0&"?

    Isn't that mysterious somehow?

    Greeting Marik

  10. I've taken the liberty of creating a patch for your typo an add another.

    diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in
    index b326354..235b42a 100644
    --- a/src/mangosd/mangosd.conf.dist.in
    +++ b/src/mangosd/mangosd.conf.dist.in
    @@ -953,8 +953,8 @@ ListenRange.Yell = 300
    #        Chat protection from creating fake messages using a lot spaces (other invisible symbols),
    #        not applied to addon language messages, but can prevent working old addons
    #        that use normal languages for sending data to another clients.
    -#        Default: 0 (disible fake messages preventing)
    -#                 1 (enabled fake messages preventing)
    +#        Default: 0 (disable fake messages preventing)
    +#                 1 (enable fake messages preventing)
    #
    #    ChatStrictLinkChecking.Severity
    #        Check chat messages for ingame links to spells, items, quests, achievements etc.
    

  11. Hi folks,

    I've tried the modified ScriptDev2 from RSA (http://github.com/rsa/scriptdev2/commits/master), where the spells are saved in a table.

    The framework loads all spellentrys at runtime.

    Unfortunatelly, sometimes (i cannot find some kind of order, it just happens sometimes [maybe the server runs for a too long time?]) i get an mysql error:

    2010-10-11 11:16:39 SQL: SELECT entry, spellID_N10, spellID_N25, spellID_H10, spellID_H25, timerMin_N10, timerMin_N25, timerMin_H10, timerMin_H25, timerMax_N10, timerMax_N25, timerMax_H10, timerMax_H25, data1, data2, data3, data4, locData_x, locData_y, locData_z, varData, StageMask_N, StageMask_H, CastType, isVisualEffect, isBugged, textEntry FROM `boss_spell_table` WHERE entry = 34796;

    2010-10-11 11:16:39 query ERROR: MySQL server has gone away

    The server runs without other errors.

    If i type the query in a mysql console (e.g. navicat), the query works fine.

    The reason, why i've created a thread in this forum, is because the framework from RSA uses the standard database access from mangos. So I expect the error in the mangos software not in the scriptdev framework.

    Maybe someone has an Idea.

    Thanks in Advice

    Marik

    Edit: I Use the standard Mangos Core with some Modification to run rsa's sd2:

    http://www.file-upload.net/download-2882159/muh.patch.html

  12. Hello,

    i am not sure, whether it is truly a bug or just some caching problem or something like that.

    Anyway, I sometimes cannot teleport to players in an Instance. To be exact no Gamemaster can.

    If you try, you will be portet to the nearest graveyard.

    However, the problem is not appearing always.

    For instance there are two groups with different IDs, it is possible to teleport to one group whereas the other group reveals the bug.

    Thanks in Advice

    Marik(23)

×
×
  • 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