Jump to content

[Guide]How to make a World of Warcraft private server


Recommended Posts

Posted

HOW TO MAKE A WORLD OF WARCRAFT PRIVATE SERVER!

 

 

1) Needed Files and Applications

 

A) Downloading

i) Microsoft Visual C++ and Libraries

ii) Tortoise SVN

iii) MySQL

iv) SQL Browser

 

B) Installing

i) Microsoft Visual C++ and Libraries

ii) Tortoise SVN

iii) MySQL

iv) SQL Browser

 

2) Getting ArcEmu + Database

 

A) Retrieving the Source

 

B) Retrieving the Database

 

3) Compiling ArcEmu

 

4) Setting Up ArcEmu + Database

 

A) Setting Up ArcEmu

 

B) Setting Up The Database

 

5) Running ArcEmu

 

1) Needed Files and Applications

 

In order for ArcEmu to compile and function properly you will need a few files and programs. Also you will need .net framework 3.5, if you don't want to get it from Microsoft updates then you can download it from here.

http://www.microsoft.com/en-us/download/details.aspx?id=22

 

A) Downloading

i) Microsoft Visual C++ and Libraries

 

The fist thing you will need to download is Microsoft Visual C++ Express which is fairly large and will be the longest to download. It is needed to compile and edit the ArcEmu source. It can be downloaded here, (Note: you do not need to install Microsoft SQL server 2008) Also you will need the ArcEmu libraries so that ArcEmu will function properly this can be found in the SVN I will go into more depth later.

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express#webInstall

 

ii) Tortoise SVN

 

Next you will need Tortoise SVN which is used to download the ArcEmu source and the Database. It can be downloaded from here.

http://tortoisesvn.net/downloads.html

 

iii) MySQL

 

You will also need MySQL which is used to allow your characters to be saved and for your ArcEmu server to work right. It can be downloaded from here.

http://dev.mysql.com/downloads/mysql/5.1.html#downloads

 

iv) SQL Browser

 

In order to be able to edit and access you will need a SQL browser. My favorite is Navicat , the windows FREE version can be downloaded here.

http://download.cnet.com/Navicat-Premium-Essentials-Multiple-Databases-GUI/3000-10254_4-10870715.html?tag=mncol

 

B) Installing

 

Between each install be sure to restart your computer

 

i) Microsoft Visual C++ and Libraries

 

For this install all you will need to do is just follow the on screen instructions and make sure you deselect Microsoft SQL Server 2008 because it is pointless to have if we already have MySQL.

 

ii) Tortoise SVN

 

Just follow the on screen instructions if you need help just ask.

 

iii) MySQL

 

When installing the MySQL server set all the settings on the MySQL server how ever you wish but when you get to the part for setting the security settings be sure not to set a password yet, it will make the installation process a lot easier.

MYSQLSECURITY.png

 

After it should come up with a screen like this,

MYSQLSUCCESS.png

 

iv) SQL Browser

 

Just follow the on screen instructions if you need help just ask.

 

2) Getting ArcEmu + Database

 

This is where the fun starts. It's time to start working on the ArcEmu WoW server it self.

 

A) Retrieving the Source

 

To get the ArcEmu Source all you need to do is, create a new folder and open the folder, then right click the new folder and click SVN Checkout, once you have done that then you will put svn://arcemu.info/svn/ for URL of repository and click okay. It will download the latest ArcEmu by it self.

SVN.png

 

B) Retrieving the Database

 

There are many ArcEmu databases out there but today we're going to use WhyDB because it is the easiest to build off of DB. You will go thought the same process as you did for getting the ArcEmu source except you will put svn.xp-dev.com/svn/whydb-users/ for URL, but really you can use any ArcEmu database you would like.

 

3) Compiling ArcEmu

 

Compiling ArcEmu is a lot simpler then most people think, all you have to do is navigate to the folder where you downloaded the ArcEmu SVN, for me this is a folder on my desktop called ArcEmu, once inside go to a folder called trunk.

 

Inside that folder there will be a folder called ./extras/ and inside that folder there will be another folder called ./arcemu-windows-libraries/ which contain 4 folders, DLL, DLL (x64), Sources and VC, in order for the compiler to be able to compile ArcEmu you will need to install the headers contained in ./VC/. to do so you will need to navigate the the folder C:\Program Files\Microsoft Visual Studio 9.0\. Copy and paste the ./VC/ folder in to the Visual Studio folder. Saying yes to all of the messages that pop up.

Visualstudio.png

 

Now, go to the folder ./win/ and run the file arcemuVC90 - All Projects.sln. To compile it just Build> Configuration Manager, then click on the drop down tab that says debug and change it to Release, close it. Now, go to build> build solution or just press F7, (Note: This may take a while if you have an old computer.)

Guide3.jpg

Guide4.jpg

Guide4.jpg

Guide4.jpg

Guide6.jpg

 

4) Setting Up ArcEmu + Database

 

You can almost see your shiny new ArcEmu sever, only a few more greuling setps .

 

A) Setting Up ArcEmu

 

Now that you have compiled the server you can now start setting it up so you'll be able to have it running properly. First you have to get your Compiled ArcEmu form trunk/bin/release. The only files you really need to move to a new folder are arcemu-logonserver.exe arcemu-world.exe collision.dll and the 4 folders that dbc maps script _bin and scripts. If I didn't mention this you are supposed to make a separate folder to hold the ArcEmu compiled server. Also you will need the configs from trunk/configs, just copy the whole configs folder to your server folder. Next you will need to get the latest Maps and DBCs either from your client for from downloading them from here (DBCs) for 3.0.9. Extract each of these in the corresponding folders I.E. Maps go in maps DBCs go in dbc. (I cannont post maps because the are to large to upload but they aren't really needed anymore.)

Guide8.jpg

 

B) Setting Up The Database

 

Now It's time to set up the database. Open up navicat create a new connection and under pass put the <pass> I told you we would need later. Then press OK. After that open the connection by double clicking on localhost, then right click localhost and click new database, you will be making 3, one named world, one named char and, one named logon. Go to the folder where you downloaded WhyDB, there should be a file called tool.bat. Right click it and press edit. Change WhyDB_world to world. then save and close it. Now open tool.bat, it will ask you for you information, the first will be root the second will be your <pass>. Then type i and press enter. Now you need to go back to navicat and double click char and logon. After you have done so you will need to right click them and choose execute batch file,Now go to <ArcEmu Source>/trunk/sql/ and find the database structure for the corresponding database. Now go to <ArcEmu Source>/trunk/sql/utilities and open ArcEmu DB Updater.bat, for this you will need to type in, localhost, 3306, root, <pass>(your password), logon, char, world. Now you will need to type a and press enter.

 

Guide9.jpg

Guide12.jpg

Guide13.jpg

Guide11.jpg

Guide10.jpg

5) Running ArcEmu

 

Before you can run ArcEmu you will need to set up the configs.

 

Has to be Changed

Your choice

 

ArcEmu-Logon.conf

Code:

Code:

<LogonDatabase Hostname = "localhost"

Username = "root"

Password = "<Pass>"

Name = "logon"

Port = "3306"

Type = "1">

 

<Rates AccountRefresh = "600">

 

<Client MinBuild = "9551"

MaxBuild = "9551">

 

<LogonServer RemotePassword = "logon"

AllowedIPs = "127.0.0.1/24"

AllowedModIPs = "127.0.0.1/24">

 

ArcEmu-World.conf

 

Code:

Code:

<WorldDatabase Hostname = "localhost" Username = "root" Password = "<pass>" Name = "world" Port = "3306" Type = "1">

<CharacterDatabase Hostname = "host" Username = "username" Password = "<pass>" Name = "char" Port = "3306" Type = "1">

 

<Server PlayerLimit = "100"

Motd = "Welcome to an ArcEmu based server! Wrath of the Lich King is now live!"

SendStatsOnJoin = "1"

EnableBreathing = "1"

SeperateChatChannels = "0"

CompressionThreshold = "1000"

QueueUpdateInterval = "5000"

KickAFKPlayers = "0"

ConnectionTimeout = "180"

RealmType = "1"

AdjustPriority = "0"

RequireAllSignatures = "0"

ShowGMInWhoList = "1"

MapUnloadTime="0"

LimitedNames="1"

UseAccountData="0"

AllowPlayerCommands="0"

EnableLFGJoin="0"

TimeZone="0"

Collision="0"

DisableFearMovement="0">

 

<Rates Health="1"

Power1="1"

Power2="1"

Power3="1"

Power4="1"

QuestReputation="1"

KillReputation="1"

Honor="1"

PvPTimer="300"

ArenaQueueDiff="150"

Compression="1"

XP="1"

QuestXP="1"

RestXP="1"

ExploreXP="1"

DropGrey="1"

DropWhite="1"

DropGreen="1"

DropBlue="1"

DropPurple="1"

DropOrange="1"

DropArtifact="1"

DropMoney="1"

Save="300"

SkillChance="1"

SkillRate="1"

ArenaMultiplier2x="1"

ArenaMultiplier3x="1"

ArenaMultiplier5x="1">

 

<LogonServer DisablePings = "0"

RemotePassword = "logon">

 

ArcEmu-Realm.conf

 

Code:

Code:

<LogonServer Address = "127.0.0.1"

Port = "8093"

Name = "Default Logon"

RealmCount = "1">

 

<Realm1 Name = "Test Realm"

Address = "127.0.0.1:8129" #Change this to your Ip, external if your ports are open, local if you want to host on lan..

Icon = "PVP"

Population = "1.0"

TimeZone = "1">

 

Note: Don't just copy and paste my configs, it will not work.

 

The other configs are optonial if you want to chang them, go ahead =D, Now all you need to do is start ArcEmu-World.exe and ArcEmu-Logon.exe and your set. Don't forget to change your realmlist to 127.0.0.1. This is what you should end up with, I followed the guide exactly I said it and it comes out working perfect.

credits:mikexklaus

 

 

  • 2 months later...
  • 1 month later...
  • 2 weeks later...
  • 2 months later...
  • 2 weeks later...
  • 10 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • package custom.events.RandomZoneEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledFuture; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.time.SchedulingPattern; import org.l2jmobius.commons.time.TimeUtil; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.managers.ZoneManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.quest.Event; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneType; import org.l2jmobius.gameserver.model.zone.type.RandomZone; import org.l2jmobius.gameserver.util.Broadcast; /** * Random Zone Event - Activates one random PvP zone temporarily. No modifica la clase de la zona: usa flags PvP en runtime. * @author Juan */ public class RandomZoneEvent extends Event { private static final String CONFIG_FILE = "data/scripts/custom/events/RandomZoneEvent/config.xml"; private static int EVENT_DURATION_MINUTES = 15; private static boolean _isActive = false; private ScheduledFuture<?> _eventTask = null; private final List<ZoneType> _availableZones = new ArrayList<>(); private ZoneType _activeZone = null; public RandomZoneEvent() { loadConfig(); loadZones(); registerZoneListeners(); } /** * Registra listeners a TODAS LAS ZONAS random */ private void registerZoneListeners() { for (ZoneType zone : _availableZones) { addEnterZoneId(zone.getId()); addExitZoneId(zone.getId()); LOGGER.info("[RandomZoneEvent] Registered listener for zone: " + zone.getName()); } } private void loadConfig() { new IXmlReader() { @Override public void load() { parseDatapackFile(CONFIG_FILE); } @Override public void parseDocument(Document doc, File file) { forEach(doc, "event", eventNode -> { final StatSet att = new StatSet(parseAttributes(eventNode)); final String name = att.getString("name"); for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) { if ("schedule".equals(node.getNodeName())) { final StatSet attributes = new StatSet(parseAttributes(node)); final String pattern = attributes.getString("pattern"); final SchedulingPattern schedulingPattern = new SchedulingPattern(pattern); final StatSet params = new StatSet(); params.set("Name", name); params.set("SchedulingPattern", pattern); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer("Schedule_" + name, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Event " + name + " scheduled at " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } }); } }.load(); } private void loadZones() { for (ZoneType zone : ZoneManager.getInstance().getAllZones(RandomZone.class)) { if ((zone.getName() != null) && zone.getName().toLowerCase().startsWith("random_zone")) { _availableZones.add(zone); LOGGER.info("[RandomZoneEvent] Loaded zone: " + zone.getName() + " (id=" + zone.getId() + ")"); } } LOGGER.info("[RandomZoneEvent] Total random zones loaded: " + _availableZones.size()); } @Override public void onTimerEvent(String event, StatSet params, Npc npc, Player player) { if (event.startsWith("Schedule_")) { eventStart(null); final SchedulingPattern schedulingPattern = new SchedulingPattern(params.getString("SchedulingPattern")); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer(event, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Rescheduled for " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } @Override public boolean eventStart(Player eventMaker) { if (_isActive) { if (eventMaker != null) { eventMaker.sendMessage("RandomZoneEvent already active."); } return false; } if (_availableZones.isEmpty()) { Broadcast.toAllOnlinePlayers("[RandomZoneEvent] No zones configured."); return false; } _isActive = true; Broadcast.toAllOnlinePlayers("⚔️ Random Zone Event has started!"); _eventTask = ThreadPool.schedule(this::activateRandomZone, 5_000); return true; } private void activateRandomZone() { _activeZone = _availableZones.get(new Random().nextInt(_availableZones.size())); _activeZone.setEnabled(true); Broadcast.toAllOnlinePlayers("🔥 Random Zone Event: " + _activeZone.getName() + " is now PvP for " + EVENT_DURATION_MINUTES + " minutes!"); _eventTask = ThreadPool.schedule(this::eventStop, EVENT_DURATION_MINUTES * 60 * 1000L); } @Override public boolean eventStop() { if (!_isActive) { return false; } _isActive = false; if (_eventTask != null) { _eventTask.cancel(true); _eventTask = null; } if (_activeZone != null) { _activeZone.setEnabled(false); Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended. " + _activeZone.getName() + " is back to normal."); _activeZone = null; } else { Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended."); } return true; } @Override public void onEnterZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, true); if (creature.isPlayer()) { creature.sendMessage("Esta zona está en modo PvP temporalmente."); } } } @Override public void onExitZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, false); if (creature.isPlayer()) { creature.sendMessage("Abandonaste la zona PvP temporal."); } } } @Override public boolean eventBypass(Player player, String bypass) { return true; } @Override public String onEvent(String event, Npc npc, Player player) { return super.onEvent(event, npc, player); } @Override public String onFirstTalk(Npc npc, Player player) { return null; } public static void main(String[] args) { new RandomZoneEvent(); } } i have this but its not working
    • ZonePvPSpawnBossRadio=0 ZonePvPSpawnBossBarakiel=0 at the Customs.ini in L2Server folder. Im prety sure this is it because i had the same problem with you in cruma 1 floor for example and i couldn't fix it but i fixed it finally by changing these 2 lines
    • Siege Reward Start PM Msg Rework Config root BossDieAnnounce and BossDieSound in the L24Team.properties and Config.java files for global raid boss death notifications and sounds. Adds a new reward_list table to the DB.sql file to track castle rewards. Improves character creation logic for thread safety and validation. Adds extensive state checks to the RequestEnchantItem method to prevent enchantments during inappropriate player states. Fixed auto-attack animation bug (there was no attack animation, only damage animation) Clean Code Other fixes I forgot to list! Java 14 Fixed issue where deleting a character would prevent it from leaving the screen or being removed, or even after a delete CD (it would only exit when re-logging in or creating a new character). Added Premium System from the other C2 project (Needs testing and improvement). Added the "Improved" Community Board (incomplete).
    • Use only middleman this guy scammer old discord goddardshop   
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock