Jump to content

Verflucht

Banned
  • Posts

    27
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Verflucht

  1. Go to your binary source > EterPythonLib > PythonGridSlotWindow.cpp

    Search this :

    DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();

     

    Add under :

    		if (dwSlotNumber > 44)
    		{
    			if (dwSlotNumber < 90)
    			{
    				dwSlotNumber -= 45;
    			}
    			else if(dwSlotNumber < 135)
    			{
    				dwSlotNumber -= 90;
    			}
    			else if (dwSlotNumber < 180)
    			{
    				dwSlotNumber -= 135;
    			}
    		}

     

    Search this :

    BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)

     

    And replace the entire function with this :
     

    BOOL CGridSlotWindow::GetPickedSlotPointer(TSlot ** ppSlot)
    {
    	if (!UI::CWindowManager::Instance().IsAttaching())
    		return CSlotWindow::GetPickedSlotPointer(ppSlot);
    
    	BYTE byWidth, byHeight;
    	UI::CWindowManager::Instance().GetAttachingIconSize(&byWidth, &byHeight);
    
    	std::list<TSlot*> SlotList;
    	if (!GetPickedSlotList(byWidth, byHeight, &SlotList))
    		return FALSE;
    
    	TSlot * pMinSlot = NULL;
    	//DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
    	//DWORD dwAttachingItemIndex = UI::CWindowManager::Instance().GetAttachingIndex();
    
    	for (std::list<TSlot*>::iterator itor = SlotList.begin(); itor != SlotList.end(); ++itor)
    	{
    		TSlot * pSlot = *itor;
    
    		if (!pMinSlot)
    		{
    			pMinSlot = pSlot;
    		}
    		else
    		{
    			if (pSlot->dwSlotNumber < pMinSlot->dwSlotNumber && pSlot->dwItemIndex != pMinSlot->dwItemIndex)
    			{
    				pMinSlot = pSlot;
    			}
    			else
    			{
    				if (!pMinSlot->isItem && pSlot->isItem && pSlot->dwItemIndex == pMinSlot->dwItemIndex)
    				{
    					pMinSlot = pSlot;
    				}
    			}
    		}
    	}
    
    	if (!pMinSlot)
    	{
    		return FALSE;
    	}
    	else
    	{
    		TSlot * pCenterSlot;
    		if (!GetSlotPointer(pMinSlot->dwCenterSlotNumber, &pCenterSlot))
    			return FALSE;
    
    		*ppSlot = pCenterSlot;
    
    		// ?? ???? ?? ?? ???..
    		if (UI::CWindowManager::Instance().IsAttaching())
    		{
    			DWORD dwSlotNumber = UI::CWindowManager::Instance().GetAttachingSlotNumber();
    			if (dwSlotNumber > 44)
    			{
    				if (dwSlotNumber < 90)
    				{
    					dwSlotNumber -= 45;
    				}
    				else if (dwSlotNumber < 135)
    				{
    					dwSlotNumber -= 90;
    				}
    				else if (dwSlotNumber < 180)
    				{
    					dwSlotNumber -= 135;
    				}
    			}
    			if (dwSlotNumber == pCenterSlot->dwSlotNumber)
    			{
    				*ppSlot = pMinSlot;
    			}
    		}
    	}
    
    	return TRUE;
    }

     

    Hope i helped.

    • Love 2
  2. Hey everyone, i hope everyone is doing well in these tough days.

    I'm currently facing this odd issue with my game. The costumes and sash is switching twice as you can see in the gif below, i know it's not something crazy but i'd like to get some insight on how to fix this odd issue or where to look to fix this issue.

     

    https://metin2.download/picture/H0yi0BHSc5S14X5xIvFO4jnX76Hm7Wtr/.gif
     

     

    Thank you all in advance.

  3. Hello everyone. I hope you're having a wonderful day so far.

    Today i tried raising the yang limit by some guide i found in another forum. I managed to implement everything and the limit is 100t. It works fine for the most part but the issue i'm currently facing with it is whenever i relog or restart the server the yang amount changes. For example: before i relog/restart i have in my inventory 100t yang, After i relog or restart : the yang in my invetory are 23 Quadrillion or 200/300yang.

    I noticed that in my database (player>player) the gold amount is never the amount that i have in game. Also when i try changing the gold amount in the player table and save and re-open the table, the value resets itself to 0 or some random number.

    I don't get any errors while compiling only some warnings that i didn't have before i changed the yang limit and i think they are related to the problem that i'm having but i'm not sure.

    I get one warning when compiling the game src and that warning is:

    locale_service.cpp: In function 'void __CheckPlayerSlot(const string&)':
    locale_service.cpp:1029:10: warning: format '%d' expects argument of type 'int', but argument 2 has type 'long long int' [-Wformat=]
       printf("<ERROR> PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT);

    When i compile the db src i get these warnings :
     

    Spoiler
    
    ClientManagerPlayer.cpp: In function 'size_t CreatePlayerSaveQuery(char*, size_t, TPlayerTable*)':
    ClientManagerPlayer.cpp:79:4: warning: format '%u' expects argument of type 'unsigned int', but argument 27 has type 'long long int' [-Wformat=]
        "UPDATE player%s SET "
        ^~~~~~~~~~~~~~~~~~~~~~
        "job = %d, "
        ~~~~~~~~~~~~
        "voice = %d, "
        ~~~~~~~~~~~~~~
        "dir = %d, "
        ~~~~~~~~~~~~
        "x = %d, "
        ~~~~~~~~~~
        "y = %d, "
        ~~~~~~~~~~
        "z = %d, "
        ~~~~~~~~~~
        "map_index = %d, "
        ~~~~~~~~~~~~~~~~~~
        "exit_x = %ld, "
        ~~~~~~~~~~~~~~~~
        "exit_y = %ld, "
        ~~~~~~~~~~~~~~~~
        "exit_map_index = %ld, "
        ~~~~~~~~~~~~~~~~~~~~~~~~
        "hp = %d, "
        ~~~~~~~~~~~
        "mp = %d, "
        ~~~~~~~~~~~
        "stamina = %d, "
        ~~~~~~~~~~~~~~~~
        "random_hp = %d, "
        ~~~~~~~~~~~~~~~~~~
        "random_sp = %d, "
        ~~~~~~~~~~~~~~~~~~
        "playtime = %d, "
        ~~~~~~~~~~~~~~~~~
        "level = %d, "
        ~~~~~~~~~~~~~~
        "level_step = %d, "
        ~~~~~~~~~~~~~~~~~~~
        "st = %d, "
        ~~~~~~~~~~~
        "ht = %d, "
        ~~~~~~~~~~~
        "dx = %d, "
        ~~~~~~~~~~~
        "iq = %d, "
        ~~~~~~~~~~~
        "exp = %u, "
        ~~~~~~~~~~~~
        "gold = %lld, "
        ~~~~~~~~~~~~~~~
        "stat_point = %d, "
        ~~~~~~~~~~~~~~~~~~~
        "skill_point = %d, "
        ~~~~~~~~~~~~~~~~~~~~
        "sub_skill_point = %d, "
        ~~~~~~~~~~~~~~~~~~~~~~~~
        "stat_reset_count = %d, "
        ~~~~~~~~~~~~~~~~~~~~~~~~~
        "ip = '%s', "
        ~~~~~~~~~~~~~
        "part_main = %d, "
        ~~~~~~~~~~~~~~~~~~
        "part_hair = %d, "
        ~~~~~~~~~~~~~~~~~~
        #ifdef __SASH_SYSTEM__
        ~~~~~~~~~~~~~~~~~~~~~~
        "part_sash = %d, "
        ~~~~~~~~~~~~~~~~~~
        #endif
        ~~~~~~
        "last_play = NOW(), "
        ~~~~~~~~~~~~~~~~~~~~~
    compiling ClientManagerBoot.cpp
        "skill_group = %d, "
        ~~~~~~~~~~~~~~~~~~~~
        "alignment = %ld, "
        ~~~~~~~~~~~~~~~~~~~
     #ifdef ENABLE_TITLE_SYSTEM
     ~~~~~~~~~~~~~~~~~~~~~~~~~~
        "prestige = %ld, "
        ~~~~~~~~~~~~~~~~~~
     #endif
     ~~~~~~
        "horse_level = %d, "
        ~~~~~~~~~~~~~~~~~~~~
        "horse_riding = %d, "
        ~~~~~~~~~~~~~~~~~~~~~
        "horse_hp = %d, "
        ~~~~~~~~~~~~~~~~~
        "horse_hp_droptime = %u, "
        ~~~~~~~~~~~~~~~~~~~~~~~~~~
        "horse_stamina = %d, "
        ~~~~~~~~~~~~~~~~~~~~~~
        "horse_skill_point = %d, "
        ~~~~~~~~~~~~~~~~~~~~~~~~~~
    ClientManagerPlayer.cpp:150:3:
       pkTab->gold,
       ~~~~~~~~~~~
    ClientManagerPlayer.cpp:79:4: warning: format '%lld' expects argument of type 'long long int', but argument 28 has type 'DWORD' {aka 'unsigned int'} [-Wformat=]

     

     

     

    Navicat Player>Player>gold type is bigint and length 16. (tried 255 and nothing changed)


    Thank you all in advance.

    EDIT: Fixed. If you're dealing with the same issue, check your ClientManagerPlayer.cpp (CreatePlayerSaveQuery) and tables.h

  4. Hey everyone! i hope you're having a good day so far.

    Today i tried making a new char and it doesn't let me. I checked the db logs and the only error thats showing up when i'm trying to make a char is this
     

    SYSERR: Feb 21 00:57:31 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Column count doesn't match value count at row 1
    query: INSERT INTO player (id, account_id, name, level, st, ht, dx, iq, job, voice, dir, x, y, z, hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, gold, playtime, skill_level, quickslot) VALUES(0, 1, 'sadasd', 1, 6, 4, 3, 3, 0, 0, 0, 957121, 255054, 0, 760, 260, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
    SYSERR: Feb 21 00:57:31 :: __QUERY_PLAYER_CREATE: QUERY_ERROR: UPDATE player_index SET pid2=0 WHERE id=1
    

     

    I double checked and reinstalled my database but there is still no results. The odd part is that the error above is missing some entries in my player table. (part_sash/prestige)

     

    I also checked the ClientManagerPlayer and everything seems to be fine. You can find my ClientManagerPlayer.cpp here: https://pastebin.com/fKwDeaVr

    I would appreciate any kind of insight helping me resolve this issue. Thank you!

  5. Hey everyone.

     

    I just noticed that every sash that has 19% absorb rate and higher is invisible. I can equip it, the effect pops up and the absorb bonus work too, but the sash is invisible.

     

    Sashes with 18% absorb ratio and less are not invisible.

    Please help!

    Thank you all in advance.

     

    EDIT: In debug mode, i get this error when i equip the sash : CItemManager::GetItemDataPointer - FIND ERROR [86005]

     

    EDIT 2: I fixed my issue. If you're experiencing the same issue, go to your Client Source/UserInterface/InstanceBase.cpp and replace the whole void CInstanceBase::SetSash(DWORD dwSash) function with this : https://pastebin.com/7gnCjzzW
     

  6. Hey everyone.

    I don't know what has caused this but i'm getting a bunch of the same warnings and i have no clue on how to fix them.

     

    cmd_general.cpp: In function 'void do_inventory(LPCHARACTER, const char*, int, int)':
    cmd_general.cpp:2283:13: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       if (index >= INVENTORY_MAX_NUM)
           ~~~~~~^~~~~~~~~~~~~~~~~~~~
    compiling cmd_gm.cpp
    cmd_gm.cpp: In function 'void do_item_purge(LPCHARACTER, const char*, int, int)':
    cmd_gm.cpp:970:17: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       for (i = 0; i < INVENTORY_MAX_NUM; ++i)
                   ~~^~~~~~~~~~~~~~~~~~~
    cmd_gm.cpp:981:17: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       for (i = 0; i < WEAR_MAX_NUM; ++i)
                   ~~^~~~~~~~~~~~~~
    cmd_gm.cpp:1002:17: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       for (i = 0; i < BELT_INVENTORY_SLOT_COUNT; ++i)
                   ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
    cmd_gm.cpp: In function 'void do_all_skill_master(LPCHARACTER, const char*, int, int)':
    cmd_gm.cpp:4433:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (int i = 0; i < SKILL_MAX_NUM; i++)
                      ~~^~~~~~~~~~~~~~~
    compiling cmd_oxevent.cpp
    compiling config.cpp
    config.cpp: In function 'bool __LoadConnectConfigFile(const char*)':
    config.cpp:614:28: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       while (*p != '\0' && cnt < (SKILL_MAX_LEVEL + 1))
                            ~~~~^~~~~~~~~~~~~~~~~~~~~~~
    config.cpp:652:29: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
        while (*p != '\0' && cnt < (SKILL_MAX_LEVEL + 1))
                             ~~~~^~~~~~~~~~~~~~~~~~~~~~~
    compiling constants.cpp
    compiling crc32.cpp
    compiling cube.cpp
    cube.cpp: In function 'void Cube_add_item(LPCHARACTER, int, int)':
    cube.cpp:616:40: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
      if (inven_index<0 || INVENTORY_MAX_NUM<=inven_index)
                           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
    compiling db.cpp
    compiling desc.cpp
    desc.cpp: In member function 'void DESC::SendLoginSuccessPacket()':
    desc.cpp:938:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
                      ~~^~~~~~~~~~~~~~~~~~~~
    compiling desc_client.cpp
    'int' and 'unsigned int'compiling desc_manager.cpp
    compiling desc_p2p.cpp
    compiling dev_log.cpp
    compiling dungeon.cpp
    compiling empire_text_convert.cpp
    compiling entity.cpp
    compiling entity_view.cpp
    compiling event.cpp
    compiling event_queue.cpp
    compiling exchange.cpp
    exchange.cpp: In member function 'bool CExchange::CheckSpace()':
    exchange.cpp:317:16: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (i = 0; i < INVENTORY_PAGE_SIZE*1; ++i)
                  ~~^~~~~~~~~~~~~~~~~~~~~~~
    exchange.cpp:324:36: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (i = INVENTORY_PAGE_SIZE*1; i < INVENTORY_PAGE_SIZE*2; ++i)
                                      ~~^~~~~~~~~~~~~~~~~~~~~~~
    exchange.cpp:332:36: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (i = INVENTORY_PAGE_SIZE*2; i < INVENTORY_PAGE_SIZE*3; ++i)
                                      ~~^~~~~~~~~~~~~~~~~~~~~~~
    exchange.cpp:339:36: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (i = INVENTORY_PAGE_SIZE*3; i < INVENTORY_PAGE_SIZE*4; ++i)
                                      ~~^~~~~~~~~~~~~~~~~~~~~~~
    exchange.cpp:377:22: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
        for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
                        ~~^~~~~~~~~~~~~~~~~~~~~~
    compiling file_loader.cpp
    compiling fishing.cpp
    compiling gm.cpp
    compiling guild.cpp
    compiling guild_manager.cpp
    compiling guild_war.cpp
    compiling horse_rider.cpp
    compiling horsename_manager.cpp
    compiling input.cpp
    compiling input_auth.cpp
    compiling input_db.cpp
    input_db.cpp: In function 'bool GetServerLocation(TAccountTable&, BYTE)':
    input_db.cpp:65:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
                      ~~^~~~~~~~~~~~~~~~~~~~
    input_db.cpp: In member function 'void CInputDB::PlayerLoad(LPDESC, const char*)':
    input_db.cpp:485:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (int i = 0; i < QUICKSLOT_MAX_NUM; ++i)
                      ~~^~~~~~~~~~~~~~~~~~~
    input_db.cpp: In member function 'void CInputDB::EmpireSelect(LPDESC, const char*)':
    input_db.cpp:1327:20: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
                      ~~^~~~~~~~~~~~~~~~~~~~
    compiling input_login.cpp
    input_login.cpp: In member function 'void CInputLogin::Empire(LPDESC, const char*)':
    input_login.cpp:843:21: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i)
                       ~~^~~~~~~~~~~~~~~~~~~~
    compiling input_main.cpp
    input_main.cpp: In member function 'void CInputMain::Exchange(LPCHARACTER, const char*)':
    input_main.cpp:1219:24: warning: comparison of integer expressions of different signedness: 'INT' {aka 'int'} and 'unsigned int' [-Wsign-compare]
          if (ch->GetGold() >= GOLD_MAX)
              ~~~~~~~~~~~~~~^~~~~~~~~~~
    input_main.cpp: In member function 'int CInputMain::MyShop(LPCHARACTER, const char*, size_t)':
    input_main.cpp:2969:20: warning: comparison of integer expressions of different signedness: 'INT' {aka 'int'} and 'unsigned int' [-Wsign-compare]
      if (ch->GetGold() >= GOLD_MAX)
          ~~~~~~~~~~~~~~^~~~~~~~~~~
    compiling input_p2p.cpp
    compiling input_teen.cpp
    compiling input_udp.cpp
    compiling ip_ban.cpp
    compiling item.cpp
    item.cpp: In member function 'int CItem::FindEquipCell(LPCHARACTER, int)':
    item.cpp:533:55: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
         if (WEAR_MAX_NUM + i * DS_SLOT_MAX + GetSubType() == iCandidateCell)
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
    item.cpp: In member function 'void CItem::ModifyPoints(bool)':
    item.cpp:702:43: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
         if ((pkItemAbsorbed->alValues[1] > 0) && (lDefGrade <= 0) || (pkItemAbsorbed->alValues[5] > 0) && (lDefGrade < 1))
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
    compiling item_addon.cpp
    compiling item_attribute.cpp
    compiling item_manager.cpp
    compiling item_manager_idrange.cpp
    compiling locale.cpp
    compiling locale_service.cpp
    compiling log.cpp
    compiling login_data.cpp
    compiling lzo_manager.cpp
    compiling marriage.cpp
    compiling matrix_card.cpp
    compiling messenger_manager.cpp
    compiling mining.cpp
    compiling mob_manager.cpp
    mob_manager.cpp: In member function 'void CMob::AddSkillSplash(int, DWORD, DWORD)':
    mob_manager.cpp:30:13: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
      if (iIndex >= MOB_SKILL_MAX_NUM || iIndex < 0)
          ~~~~~~~^~~~~~~~~~~~~~~~~~~~
    mob_manager.cpp: In member function 'bool CMobManager::Initialize(TMobTable*, int)':
    mob_manager.cpp:75:21: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
       for (int j = 0; j < MOB_SKILL_MAX_NUM; ++j)
                       ~~^~~~~~~~~~~~~~~~~~~


    The game/db compile just fine i'm just having these annoying warnings.

    Thank you all in advance.

  7. Greetings everyone, i hope you are having a wonderful day so far.

    Today i added the sash system by LeNnt and everything went smoothly...except from the fact that some of the sashes are not working.
    If i try to equip the red sash, it doesn't work. If i try to equip one of the blue sashes, the char equips it just fine.

    Here is a gif to help you understand better the issue i'm facing.



    Now i triple checked everything in my source files/pack files and everything is in order but most of the sashes are still not working.

    Thank you all in advance.

    Edit : Fixed. (If you're having the same issue, check your dump proto source.)

     

  8. 1 hour ago, Friedrich said:

    Due to the server part being written in C++, it uses both CPU and RAM, to run a server w/o lag it would need atleast 3GB of ram(due to the fact that it would need to alocate some to the OS itself and other processes as MYSQL) and a decent CPU, but the more the better. About the hosting provider, it is all about where your playerbase is located in, but myself i'd go with OVH/OVH resllers.


    Thank you for your info!

    In my country, a lot of people are getting downtimes and lag spikes due to DDOS attacks. do you reckon that i'd be fine with OVH? because i only know a couple of P server owners in my country and they all host their servers with OVH but they always get some downtime/lag due to DDOS attacks.

  9. Hey everyone, i hope you're having a wonderful day so far.

     

    What kind of system would i need to run a p server with roughly 80 people?

     

    Also, which hosting do you guys use in 2020 and what are the top hosting provides for a server without any ddos problems, i was wondering if there are any other options except ovh or even better.

    Thank you all in advance!

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / 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.