Official CH Değiştirme Sistemi

'C++ / C# / Python' forumunda revo tarafından 13 Haziran 2018 tarihinde açılan konu

  1. revo

    revo Kayıtlı Üye Üye

    44
    0
    6
    22 Mayıs 2018
    Erkek
    uigameoptions.py
    Açılır ve aratılır:

    Kod:
    self.showsalesTextButtonList.append(GetObject("salestext_off_button"))
    
    Altına eklenir:

    Kod:
              
                self.ChangeChannelButtonList.append(GetObject("ch1"))
                self.ChangeChannelButtonList.append(GetObject("ch2"))
                self.ChangeChannelButtonList.append(GetObject("ch3"))
                self.ChangeChannelButtonList.append(GetObject("ch4"))
    
    Aratılır:

    Kod:
    self.showsalesTextButtonList[1].SAFE_SetEvent(self.__OnClickSalesTextOffButton)
    
    Altına Eklenir:

    Kod:
            self.ChangeChannelButtonList[0].SetEvent(ui.__mem_func__(self.Degistir), 1)
            self.ChangeChannelButtonList[1].SetEvent(ui.__mem_func__(self.Degistir), 2)
            self.ChangeChannelButtonList[2].SetEvent(ui.__mem_func__(self.Degistir), 3)
            self.ChangeChannelButtonList[3].SetEvent(ui.__mem_func__(self.Degistir), 4)
    
    En sona eklenir:

    Kod:
        def protect_maps(self):#Engellemek istediğiniz mapları ekleyin.
            import background
            protect_list = [
                "season99/new_map_ox",
                "maps_dungeon/devils_zone",
            ]
            if str(background.GetCurrentMapName()) in protect_list:
                return True
            return False
           
        def Degistir(self, ch):
            import time
            if self.protect_maps():
                chat.AppendChat(1, "Bu Haritada Kanal Değiştiremezsin !")
                return   
            elif time.clock() >= constInfo.change_time:           
                self.Close()
                net.SetServerInfo("Kanal %d" % int(ch + 1))
                chat.AppendChat(chat.CHAT_TYPE_INFO, "Kanal Değiştirme İşlemi Başarılı !")
                net.SendChatPacket("/ch %d" % int(ch + 1))
                constInfo.change_time = time.clock() + 10
            else:
                chat.AppendChat(chat.CHAT_TYPE_INFO, "10 Saniyede Bir Kanal Değiştirebilirsin !")
    
    Aratılır:

    Kod:
    self.showsalesTextButtonList = []
    
    Altına eklenir:

    Kod:
    self.ChangeChannelButtonList = []
    
    constInfo.py

    açılır ve herhangi bir yere eklenir:

    Kod:
    change_time = 0
    
    uiscript/gameoptiondialog.py

    Açılır ve aratılır:

    Kod:
    TEMPORARY_X = +13
    
    Değiştirilir:

    Kod:
    TEMPORARY_X = +14
    
    Aratılır:

    Kod:
        {
                        "name" : "titlebar",
                        "type" : "titlebar",
                        "style" : ("attach",),
    
                        "x" : 8,
                        "y" : 8,
    
                        "width" : 284,
                        "color" : "gray",
    
                        "children" :
                        (
                            { "name":"titlename", "type":"text", "x":0, "y":3,
                            "text" : uiScriptLocale.GAMEOPTION_TITLE,
                            "horizontal_align":"center", "text_horizontal_align":"center" },
                        ),
                    },
    Altına Eklenir:

    Burdan alın

    Aratılır 2 kere:

    Kod:
    "height" : 25*11+8,
    
    Değiştirilir 2 kere:

    Kod:
    "height" : 25*11+8+25,
    
    Server/game/src/cmd.cpp

    Açılır ve aratılır:

    Kod:
    ACMD(do_item);
    
    Altına Eklenir:

    Kod:
    ACMD(do_ch);
    
    Aratılır:

    Kod:
        { "pvp",        do_pvp,            0,            POS_DEAD,    GM_PLAYER    },
    
    Altına Eklenir:

    Kod:
        { "ch",        do_ch,        0,            POS_DEAD,    GM_PLAYER    },
    
    cmd_general.cpp açılır
    Aratılır:

    Kod:
    ACMD(do_set_walk_mode)
    {
        ch->SetNowWalking(true);
        ch->SetWalking(true);
    }
    Altına Eklenir:

    Kod:
    ACMD(do_ch)
    {
        char arg1[256];
        one_argument(argument, arg1, sizeof(arg1));
    
        if (!*arg1)
            return;
        int new_ch;
        str_to_number(new_ch, arg1);
    
        if( new_ch <1 || new_ch >4)
            return;
    
        if (!ch->IsPC())
            return;
    
        ch->ChannelSwitch(new_ch);
    }
    char.h

    Açılır ve Aratılır

    Kod:
            void                StartWarpNPCEvent();
    
    Altına Eklenir:

    Kod:
            void                ChannelSwitch(int new_ch);
    
    char.cpp

    Açılır ve aratılır:

    Kod:
    EVENTFUNC(warp_npc_event)
    {
        char_event_info* info = dynamic_cast<char_event_info*>( event->info );
        if ( info == NULL )
        {
            sys_err( "warp_npc_event> <Factor> Null pointer" );
            return 0;
        }
    
        LPCHARACTER    ch = info->ch;
    
        if (ch == NULL) { // <Factor>
            return 0;
        }
    
        if (!ch->GetSectree())
        {
            ch->m_pkWarpNPCEvent = NULL;
            return 0;
        }
    
        FuncCheckWarp f(ch);
        if (f.Valid())
            ch->GetSectree()->ForEachAround(f);
    
        return passes_per_sec / 2;
    }
    Altına Eklenir:

    Kod:
    void CHARACTER::ChannelSwitch(int iNewChannel)
    {
    
        long lAddr;
        long lMapIndex;
        WORD wPort;
        long x = this->GetX();
        long y = this->GetY();
    
        if (!CMapLocation::instance().Get(x, y, lMapIndex, lAddr, wPort))
        {
            return;
        }
    
        if(lMapIndex >= 10000){
            return;
        }
    
        std::map<WORD, int>ch;
    
        for(int i = 0; i < 4; i++)
        {
           for(int i2 = 1; i2 < 9; i2++)
           {
               ch[29*1000 + i*100 + i2] = i+1;
           }
       }
       int chan;
       if(ch.find(wPort) != ch.end())
       {
           chan = ch[wPort];
       }
       else
       {
            return;
       }
       Stop();
       Save();
    
       if(GetSectree())
       {
           GetSectree()->RemoveEntity(this);
            ViewCleanup();
    
            EncodeRemovePacket(this);
        }
    
        TPacketGCWarp p;
        p.bHeader    = HEADER_GC_WARP;
        p.lX    = x;
        p.lY    = y;
        p.lAddr    = lAddr;
        p.wPort    = (wPort - 100*(chan-1) + 100*(iNewChannel-1));
    
        GetDesc()->Packet(&p, sizeof(TPacketGCWarp));
    }
    ÖRNEK PORT DAĞILIMI:

    Kod:
    CH1:
    Core1: 29001
    Core2: 29002
    Core3: 29003
    Core4: 29004
    
    CH2:
    Core1: 29101
    Core2: 29102
    Core3: 29103
    Core4: 29104
    
    CH3:
    Core1: 29201
    Core2: 29202
    Core3: 29203
    Core4: 29204
    Kod:
    for(int i = 0; i < 4; i++)
    
    4 ü ch sayınıza göre değiştiriniz ...


    Oyun seçeneklerine eklemek isten olabilir o yüzden kaldırmadım.



    VT

    Link

    Alternatif Link

    Gelelim şu port dağılımlarına:

    Eğer portlarınız 13000,16000,19000 ise:

    For döngüsünü böyle değiştirin:

    Kod:
     for(int i = 0; i < 4; i++)
        {
            ch[(13 * 1000) + (i * 3000)] = i + 1;
            if (i == 3)
                ch[(13 * 1000) + ((i * 3000) - 1000)] = i + 1;
        }
    Kod:
        p.wPort    = (wPort - 100*(chan-1) + 100*(iNewChannel-1));
    
    Bu kısmıda bu şekilde değiştirin:

    Kod:
        p.wPort    = (wPort - 3000*(chan-1) + 3000*(iNewChannel-1));
    
    Bu kısım portlarınızın kaç arttığıdır ona göre düzenleyin.

    Hata alırsanız veya port kısmını yapamazsanız yorum olarak atabilirsiniz.
     

Bu Sayfayı Paylaş