Jump to content
×
×
  • Create New...

C++ - Compiler le Game & DB Metin2 40250


Recommended Posts

  • Retraité

Niveau requis Débutant

Temps estimé : Entre 5 et 10 minutes

 

Réécriture by Xayah

 

Pré-requis:

 

I. Compiler son Game

Révélation

 

A.Compiler le Game

Révélation

Rien de plus simple, si votre environnement est correctement préparé, il y aura juste le MakeFile à modifier si vous avez pris les Source [email protected] Remplacez les codes de votre Makefile par celui-ci (à ne pas faire sur le VDI avec les sources pré-installées) 


ATFORM = $(shell file /bin/ls | cut -d' ' -f3 | cut -d'-' -f1)

GCC_VERSION = $(shell $(CC) --version 2>&1 | grep "(GCC)" | cut -d' ' -f3  | cut -d'.' -f1)
BSD_VERSION = $(shell uname -v 2>&1 | cut -d' ' -f2 | cut -d'.' -f1)
P4_VERSION = 40250

CC = g++

INCDIR =
LIBDIR =
BINDIR = ..
OBJDIR = OBJDIR
$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)

# Standard Setting
LIBS = -pthread -lm -lmd
# Removed -fno-rtti 
CFLAGS = -g -Wall -O2 -m32 -pipe -fexceptions -D_THREAD_SAFE -DNDEBUG # -D_USE_SERVER_KEY_

ifeq ($(GCC_VERSION), 4)
CFLAGS += -mtune=i686 -fstack-protector-all
else
CFLAGS += -mcpu=i686
endif

# boost
INCDIR += -I../../../Extern/include

# DevIL
INCDIR += -I../../libdevil
LIBDIR += -L../../libdevil
LIBS += -lIL -lpng -ltiff -lmng -llcms -ljpeg

# MySQL
#ifeq ($(BSD_VERSION), 7)
INCDIR += -I../../libmysql
LIBDIR += -L../../libmysql
#else
#INCDIR += -I../../libmysql
#LIBDIR += -L../../libmysql
#endif

LIBS += -lmysqlclient -L/usr/local/lib/mysql -lz

# Miscellaneous external libraries
INCDIR += -I../../../Extern/include
LIBDIR += -L../../../Extern/lib
LIBS += -lcryptopp -lgtest

# HackShield
INCDIR += -I../../libhackshield/include
LIBDIR += -L../../libhackshield/lib
LIBS += -lanticpxsvr

# XTrap
INCDIR += -I../../libxtrap/include

# openssl
#INCDIR += -I/usr/include
#LIBS += -lssl
#LIBS += /usr/lib/libssl.a

# Project Library
INCDIR += -I../../liblua/include
INCDIR += -I/usr/local/include
INCDIR += -L/usr/local/lib/mysql
INCDIR += -I../../libserverkey
LIBDIR += -L../../libthecore/lib -L../../libpoly -L../../libsql -L../../libgame/lib -L../../liblua/lib -L../../libserverkey
LIBDIR += -L/usr/local/lib
LIBS += -lthecore -lpoly -llua -llualib -lsql -lgame -lserverkey
USE_STACKTRACE = 0
ifeq ($(USE_STACKTRACE), 1)
LIBS += /usr/local/lib/libexecinfo.a
endif

TARGET  = $(BINDIR)/game_r$(P4_VERSION)_$(PLATFORM)

CFILE	= minilzo.c

CPPFILE = BattleArena.cpp FSM.cpp MarkConvert.cpp MarkImage.cpp MarkManager.cpp OXEvent.cpp TrafficProfiler.cpp ani.cpp\
		arena.cpp banword.cpp battle.cpp blend_item.cpp block_country.cpp buffer_manager.cpp building.cpp castle.cpp\
		char.cpp char_affect.cpp char_battle.cpp char_change_empire.cpp char_horse.cpp char_item.cpp char_manager.cpp\
		char_quickslot.cpp char_resist.cpp char_skill.cpp char_state.cpp PetSystem.cpp cmd.cpp cmd_emotion.cpp cmd_general.cpp\
		cmd_gm.cpp cmd_oxevent.cpp config.cpp constants.cpp crc32.cpp cube.cpp db.cpp desc.cpp\
		 desc_client.cpp desc_manager.cpp desc_p2p.cpp dev_log.cpp dungeon.cpp empire_text_convert.cpp entity.cpp\
		 entity_view.cpp event.cpp event_queue.cpp exchange.cpp file_loader.cpp fishing.cpp gm.cpp guild.cpp\
		 guild_manager.cpp guild_war.cpp horse_rider.cpp horsename_manager.cpp input.cpp input_auth.cpp input_db.cpp\
		 input_login.cpp input_main.cpp input_p2p.cpp input_teen.cpp input_udp.cpp ip_ban.cpp\
		 item.cpp item_addon.cpp item_attribute.cpp item_manager.cpp item_manager_idrange.cpp locale.cpp\
		 locale_service.cpp log.cpp login_data.cpp lzo_manager.cpp marriage.cpp matrix_card.cpp\
		 messenger_manager.cpp mining.cpp mob_manager.cpp monarch.cpp motion.cpp over9refine.cpp p2p.cpp packet_info.cpp\
		 party.cpp passpod.cpp pcbang.cpp polymorph.cpp priv_manager.cpp pvp.cpp\
		 questevent.cpp questlua.cpp questlua_affect.cpp questlua_arena.cpp questlua_ba.cpp questlua_building.cpp\
		 questlua_danceevent.cpp questlua_dungeon.cpp questlua_forked.cpp questlua_game.cpp questlua_global.cpp\
		 questlua_guild.cpp questlua_horse.cpp questlua_pet.cpp questlua_item.cpp questlua_marriage.cpp questlua_mgmt.cpp\
		 questlua_monarch.cpp questlua_npc.cpp questlua_oxevent.cpp questlua_party.cpp questlua_pc.cpp\
		 questlua_quest.cpp questlua_target.cpp questmanager.cpp questnpc.cpp questpc.cpp\
		 refine.cpp regen.cpp safebox.cpp sectree.cpp sectree_manager.cpp sequence.cpp shop.cpp\
		 skill.cpp start_position.cpp target.cpp text_file_loader.cpp trigger.cpp utils.cpp vector.cpp war_map.cpp\
		 wedding.cpp xmas_event.cpp version.cpp panama.cpp threeway_war.cpp map_location.cpp auth_brazil.cpp\
		 BlueDragon.cpp BlueDragon_Binder.cpp DragonLair.cpp questlua_dragonlair.cpp\
		 HackShield.cpp HackShield_Impl.cpp char_hackshield.cpp skill_power.cpp affect.cpp\
		 SpeedServer.cpp questlua_speedserver.cpp XTrapManager.cpp\
		 auction_manager.cpp FileMonitor_FreeBSD.cpp ClientPackageCryptInfo.cpp cipher.cpp\
		 buff_on_attributes.cpp check_server.cpp dragon_soul_table.cpp DragonSoul.cpp\
		 group_text_parse_tree.cpp char_dragonsoul.cpp questlua_dragonsoul.cpp\
		 shop_manager.cpp shopEx.cpp item_manager_read_tables.cpp


COBJS   = $(CFILE:%.c=$(OBJDIR)/%.o)
CPPOBJS = $(CPPFILE:%.cpp=$(OBJDIR)/%.o)

MAINOBJ = $(OBJDIR)/main.o
MAINCPP = main.cpp

default: $(TARGET)

$(OBJDIR)/minilzo.o: minilzo.c
	@$(CC) $(CFLAGS) $(INCDIR) -c $    @echo compile $ 
$(OBJDIR)/version.o: version.cpp
	@$(CC) $(CFLAGS) -D__USER__=\"$(USER)\" -D__HOSTNAME__=\"$(HOSTNAME)\" -D__PWD__=\"$(PWD)\" -D__P4_VERSION__=\"$(P4_VERSION)\" -c $    @echo compile $ 
$(OBJDIR)/%.o: %.cpp
	@echo compile $    @$(CC) $(CFLAGS) $(INCDIR) -c $ 
limit_time:
	@echo update limit time
	@python update_limit_time.py

$(TARGET): $(CPPOBJS) $(COBJS) $(MAINOBJ)
	@echo linking $(TARGET)....
	@$(CC) $(CFLAGS) $(LIBDIR) $(COBJS) $(CPPOBJS) $(MAINOBJ) $(LIBS) -o $(TARGET)

clean:
	@rm -f $(COBJS) $(CPPOBJS)
	@rm -f $(BINDIR)/game_r* $(BINDIR)/conv

tag:
	ctags *.cpp *.h *.c

dep:
	makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > Depend

sinclude Depend

Le game se compile dans la majorité des cas avec la branche mainline, courage à vous si vous utilisez d'autres branches ! (ou que vous compilez sous Windows)

Désormais sur VirtualBox (ou Putty) il suffira de taper les commandes suivantes :

 


cd /usr/src/mainline/Srcs/Server/game/src
gmake clean && gmake -j20

 

Vous devez attendre un petit temps (+ ou - 10 minutes avant que votre game se compile), si un message du type Linking... se présente c'est que votre Game est compilé !

Information : Le game se situe dans le dossier mainline/Srcs/Server/game , si vous ne le voyez pas, actualisez votre Winscp/Filezila

 

 

B. Fix du TimeBomb (Si le game n'a pas déjà été modifié)

Révélation

Le TimeBomb c'est la date de péremption de votre game, une fois la date expiré, votre game ne pas plus se démarrer correctement.

Pour cela il existe un fix simple ! 

 

Dans vos sources, cherchez le fichier update_limit_time.py & ouvrez le.

Cherchez ce code


limitTime = time.mktime(time.localtime()) + 3600 * 24 * 180 * 2

Et remplacez le par :


limitTime = time.mktime(time.localtime()) + 3600 * 24 * 180 * 20

 

OU ALORS

 

Dans vos sources, cherchez le fichier time.h et ouvrez le.

Cherchez le code suivant :


#define ENABLE_LIMIT_TIME 

Et remplacez le par :


//#define ENABLE_LIMIT_TIME 

 

Sauvegardez & recompilez votre game !

 

 

II. Compiler sa DB

Révélation

Vous compilez toujours dans la même branche pour le côté serveur, et bien rien ne change pour la DB ! 

Pas de modification à faire juste les commandes suivantes à effectuer

 

cd /usr/src/mainline/Srcs/Server/db/src
gmake clean && gmake -j20

 

La DB se compile beaucoup plus rapidement que le game, si un message de Linking.. se présente alors dans ce cas vous avez compilé votre DB !

Information: Le fichier DB se situe dans mainline/Srcs/Server/db , actualisez si vous ne le voyez pas tout de suite !

 

 

Pour continuer : 

Si vous souhaitez compiler votre lanceur je vous renvoie vers ce tutoriel : Compiler le Client Binary

Vous pouvez aussi compiler votre DumpProto qui servira à créer vos protos clients Compiler & Utiliser un DumpProto

Vous pouvez désormais ajouter des systèmes dans les sources Section Système & Programmation

 

Si vous avez un soucis n'hésitez pas à poster vos demandes d'aide dans l'AQS !

 

  • Funky Emulation 3
  • J'adore 39
Link to comment
Share on other sites

  • Funkiest

Merci pour ce tutoriel, et de rien pour ma technique xD

 

Le time_bomb, je conseille moi de ne pas le supprimer, pourquoi ? Car techniquement, si vous sortez vous même votre propre core, bien avancé, et que votre serveur se fais hacker, si vous avez une date de peremption rapide (~2Mois entre chaque nouveau game), les hackeurs ne pourrons rien faire avec votre game, sauf supprimer le time_bomb, chose impossible si vous avez protegé un minimum votre game.

 

Je précise aussi que le game en mainline est le r40260 ou r44, je ne sait plus (ceux que j'ai partagés "Binaries les plus récentes"), le novaline est le r40250. (Si je ne me tormpe pas, mais de toute façon, c'est pas grave.)

 

Merci encore pour ce tutoriel ! :)

Link to comment
Share on other sites

  • 3 weeks later...
  • 1 month later...
  • 4 weeks later...

Ah oui c'était a cause de ça :) mais maintenant le probleme est qu'il m'affiche cela j'ai essayé de comprendre mais j'ai pas reussi..

*** No rule to make target `../../../Extern/include/boost/exception', needed by `OBJDIR/BattleArena.o'. Stop.

Link to comment
Share on other sites

j'ai changer la date du time bomb puis j'ai fais la commande dans putty => gmake limit_time mais j'ai eu ce message sais juste ou pas ?

 

[email protected]:/usr/src/mainline/Srcs/Server/game/src # gmake limit_time

update limit time

gmake: python: Command not found

Makefile:131: recipe for target 'limit_time' failed

gmake: *** [limit_time] Error 127

[email protected]:/usr/src/mainline/Srcs/Server/game/src #

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...
  • 1 month later...

Bonsoir,

 

Étant au stade de débutant dans le domaine de la création de serveur (surtout sous files 2014), j'aimerais qu'on me retire un doute à cette question qui peut sembler bête:

 

- Est-ce juste un VDI permettant uniquement de compiler le game (du fait que le mot de passe navicat n'est pas communiqué) ou alors je suis stupide au point de ne pas trouver ce fameux mot de passe (malgré de multiples tentatives et regardant dans le mysql.history dans WinSCP) ?

 

 

Merci d'avance.

Link to comment
Share on other sites

Cette VM je m'en sert seulement comme compilateur. Sinon tu peux tout de même faire ta propre VM. Regarde sur funky, y'a des sujets à propos de préparer sa VM.

  • J'adore 1

L’ordinateur a de la mémoire mais aucun souvenir...

Link to comment
Share on other sites

  • 4 weeks later...
 Share



  • Flux d'Activité

    1. 0

      Projet Genesis

    2. 4

      Shiva.international serveur privé metin2 Oldschool Start 16.09.2022

    3. 0

      Metin2 Champions - Accès anticipé

    4. 0

      Barbok

    5. 4

      Shiva.international serveur privé metin2 Oldschool Start 16.09.2022

    6. 2

      Partage Émulateur 2.63

    7. 2

      Partage Émulateur 2.63

  • Recently Browsing

    • No registered users viewing this page.

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.