Jump to content

Recommended Posts

M2 Download Center

This is the hidden content, please
( Internal )

 

Spoiler

fd572cc700fde7ad2ba3abb131f4513c.gif

 

  • Conversation between me and vegas:
[21:18:22] ####:: VegaS are you here?
[21:18:31] VegaS™: Yes.
[21:19:09] ####: Man, some people sell your title system what was public on tur****.
[21:22:14] ####:: https://metin2.download/picture/43Wm933HsdZ2dQcuSSc7eiENCQBC8129/.png
[21:22:22] ####:: Here is this shit what he sell.
[21:28:33] ####:: Shit all resellers , dude .
[21:34:50] VegaS™: There are many whores in this area, so best bet would be to post this system because some hookers make money from him unjustly. So send them harlots that vegas has big dick and that will fuck all in the ass.
This system has a crappy code, you can keep the recycle bin, is the first version of shit.
I apologize for what my clients who bought this system, but I'll make updates to it and will be more advanced.
I can not enter metin2dev this time because my account is suspended for a short period of time, but I will return very soon, remember that.
Why has reached this release online? Since titlesystem first version had over 35 buyers from title and I sold at all retarded.
But now these latest systems and will not sell than some people you know for a long time and know 100% that they are not whores.
Latest systems are stored for each client, I know 100% who I was because when you reach for resellers or free.
And remember one thing:

- I Will never sell any system or any other things for Romanian people, if someone tries to sell it or mean it's fucking scammer, and if u see Something scammer who sell my works, you can report this to me.
Soon it ready new website, where there will be all new systems sales and presentations. ^^
Go on metin2dev and post system and send them the message that I told you.
(sorry for my english)

 

Spoiler

221328hzMNd.png.86af86ed5fda36a98eb5bf45
221328JKkkf.png.7abd91b69441211969b1b202

 

Spoiler

- Name your current title is displayed in the first box.
- The total amount of your current Yang is shown in Box 2.
- Actual minutes played per character block 3.
- Each title has a special color that can be set easily by modifying values in RGB or constInfo already using an active macromande with preset colors.
- Description of both titles and duties change as demand from constInfo (visual) and to define the server's.
- In case there was no title attached to your character name guild and icon set default, and when a new title is attached will have an update SetPosition before the name character can change your choice where you want to be attached to the title 'Guild (beginning) or middle name and guild that video.

- You can add new grades on demand, there are currently only 16 that you can get in with the necessary powers (yang level, minute) and the other three titles are obtained by itemshop store.

- The duties of the server needed to define changes in sites like sons
* Price magical potion (How many and how many jcoins dragon dragon coins to receive after purchase and also for checking coins).


* The required level of each title.
* Amount special yang.
* Demand minutes played.

 

Total 16 free titles are on the same server and more specifically:

  • - [Gypsy]
  • - [Friends for Life]
  • - [Romance]
  • - [Beginner]
  • - [Professional Mathematician]
  • - [VERSACE]
  • - [Illuminati]
  • - [Ghost Rider]
  • - [Titanium]
  • - [Demon Magicians]
  • - [Charmer Pets]
  • - [Exchanger Fate]
  • - [Fashion Expert]
  • - [Retouches]
  • - [Category Supreme]
  • - [Invincible Supreme]

- Each title requires some responsibilities for purchasing such sons
- Minimum level
- A minimum of yang
- A specific number of minutes played per character (check)
- You can deactivate free Titles easily without the need for any special tax.

 

In total there are 3 premium titles, they are:

  • - [Premium Title I]
  • - [Premium Title II]
  • - [Premium Title III]

- For Title I need: Yellow Potion x1 Enchanted
- For Title II of need: Pink Potion x1 Enchanted
- For Title III need: White Potion x1 Enchanted

 

* Special potion shop you find in the system that you can buy with coins dragon.
* When you change from one title to other award bonuses will automatically delete your oldest.

* Advances can be changed easily a server using define sites needed.

 

Shop with magic potion:

  • - You can buy without any time limit and you can buy many potions you want.
  • - The acquisition is done through the database by making checks your current account how many chips you have actual coins and coin payment is made dragon bonus then you will get the same amount of chips.
  • - You can not buy potions without the required amount of coins dragon.
  • - If you have a minimal activity played 250 minutes per character can not buy potion.
  • - Potion are negotiable and can be sold to other players in the game without any problem.
  • - You can not buy more than a potion within 5 minutes, waiting for the deadline to be sure that a player does not buy many times potion
  • pressing the button multiple times yes, and to withdraw the coins in unknowingly cause.
  •  

Title transformation in objects:
- You can do this only if you own already one of the three premium titles.
- When you press the button conversion automatically these things will happen: * You will be given a check to verify that you have a title attached in the 3 (I, II, II) and then checking begins on securities: * If is attached to the title (Premium Title I), will be distributed back potion Enchanted Yellow and bonus that was applied to the activation now will be removed. * Important: You can not remove the title premium than by this method, withdraw your title in a potion and then enable it again or you can do what you want with that potion.

 

Download:

Have fun, scammer ^^

 

#request close topic, so much spam xD

Edited by Metin2 Dev
Core X - External 2 Internal
  • Metin2 Dev 217
  • kekw 5
  • Eyes 3
  • Dislove 4
  • Angry 2
  • Not Good 1
  • Sad 3
  • Smile Tear 1
  • Confused 3
  • Good 59
  • Love 10
  • Love 150
Link to comment
https://metin2.dev/topic/13843-title-system-034/
Share on other sites

  • 6 years later...

I tried to add this system, got some errors, corrected them for my source and everything was fine. But i can t compile title.cpp, i got some erorrs on buy potions 1 2 3 arguments.

Example:

title.cpp 214:8: error: no member named 'auto_ptr' in namespace 'std' 

title.cpp 214:17: error: unexpected type name 'SQLMsg' : expected expression

title.cpp 214:25: error: use an undeclared identifier 'pMsg'

title.cpp 216:7: error: use an undeclared identifier 'pMsg'

title.cpp 217:36: error: use an undeclared identifier 'pMsg'

and so on....

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-159154
Share on other sites

  • 3 months later...

anyone can help me with the introloading?

I have the renewal from vegas but some functions are not like the old one.

 

my file

Spoiler
#! /usr/bin/env python
__author__		= 'VegaS'
__date__		= '2020-02-04'
__name__		= 'IntroLoading Renewal'
__version__		= '4.3'

import ui
import uiScriptLocale
import net
import app
import player
import background
import wndMgr
import constInfo
import playerSettingModule
import colorInfo
import chrmgr
import localeInfo
import emotion
import playerLoad
from _weakref import proxy

##################################
## loadingFunctions
##################################
NAME_COLOR_DICT = {
	chrmgr.NAMECOLOR_PC : colorInfo.CHR_NAME_RGB_PC,
	chrmgr.NAMECOLOR_NPC : colorInfo.CHR_NAME_RGB_NPC,
	chrmgr.NAMECOLOR_MOB : colorInfo.CHR_NAME_RGB_MOB,
	chrmgr.NAMECOLOR_PVP : colorInfo.CHR_NAME_RGB_PVP,
	chrmgr.NAMECOLOR_PK : colorInfo.CHR_NAME_RGB_PK,
	chrmgr.NAMECOLOR_PARTY : colorInfo.CHR_NAME_RGB_PARTY,
	chrmgr.NAMECOLOR_WARP : colorInfo.CHR_NAME_RGB_WARP,
	chrmgr.NAMECOLOR_WAYPOINT : colorInfo.CHR_NAME_RGB_WAYPOINT,
	chrmgr.NAMECOLOR_BOSS : colorInfo.CHR_NAME_RGB_BOSS,
	chrmgr.NAMECOLOR_EMPIRE_MOB : colorInfo.CHR_NAME_RGB_EMPIRE_MOB,
	chrmgr.NAMECOLOR_EMPIRE_NPC : colorInfo.CHR_NAME_RGB_EMPIRE_NPC,
	chrmgr.NAMECOLOR_EMPIRE_PC+1 : colorInfo.CHR_NAME_RGB_EMPIRE_PC_A,
	chrmgr.NAMECOLOR_EMPIRE_PC+2 : colorInfo.CHR_NAME_RGB_EMPIRE_PC_B,
	chrmgr.NAMECOLOR_EMPIRE_PC+3 : colorInfo.CHR_NAME_RGB_EMPIRE_PC_C,
}

if app.ENABLE_OFFLINESHOP_SYSTEM:
	NAME_COLOR_DICT[chrmgr.NAMECOLOR_SHOP] = colorInfo.CHR_NAME_RGB_SHOP

TITLE_COLOR_DICT = (
	colorInfo.TITLE_RGB_GOOD_4,
	colorInfo.TITLE_RGB_GOOD_3,
	colorInfo.TITLE_RGB_GOOD_2,
	colorInfo.TITLE_RGB_GOOD_1,
	colorInfo.TITLE_RGB_NORMAL,
	colorInfo.TITLE_RGB_EVIL_1,
	colorInfo.TITLE_RGB_EVIL_2,
	colorInfo.TITLE_RGB_EVIL_3,
	colorInfo.TITLE_RGB_EVIL_4,
)

if app.ENABLE_STONEMINIMAP:
	NAME_COLOR_DICT.update({
			chrmgr.NAMECOLOR_METIN : colorInfo.CHR_NAME_RGB_METIN,
		})

def __main__():
	## RegisterColor

	if app.TOURNAMENT_PVP_SYSTEM:
		NAME_COLOR_DICT.update({chrmgr.NAMECOLOR_TOURNAMENT_TEAM_A : (255, 31, 31),})
		NAME_COLOR_DICT.update({chrmgr.NAMECOLOR_TOURNAMENT_TEAM_B : (10, 135, 245),})

	for nameIndex, nameColor in NAME_COLOR_DICT.items():
		chrmgr.RegisterNameColor(nameIndex, *nameColor)


	for titleIndex, titleColor in enumerate(TITLE_COLOR_DICT):
		chrmgr.RegisterTitleColor(titleIndex, *titleColor)
		
	## RegisterTitleName	
	for titleIndex, titleName in enumerate(localeInfo.TITLE_NAME_LIST):
		chrmgr.RegisterTitleName(titleIndex, titleName)
		
	## RegisterEmotionIcon	
	emotion.RegisterEmotionIcons()
		
	## RegisterDungeonMapName	
	dungeonMapNameList = ("metin2_map_spiderdungeon", "metin2_map_monkeydungeon", "metin2_map_monkeydungeon_02", "metin2_map_monkeydungeon_03", "metin2_map_deviltower1")
	for dungeonMapName in dungeonMapNameList:
		background.RegisterDungeonMapName(dungeonMapName)
		
	## LoadGuildBuilding	
	playerSettingModule.LoadGuildBuildingList(localeInfo.GUILD_BUILDING_LIST_TXT)
	if app.RACE_HEIGHT:
		playerSettingModule.LoadRaceHeight()

##################################
## LoadingWindow
##################################

class LoadingWindowNew(ui.AniImageBox):
	def __del__(self):
		ui.AniImageBox.__del__(self)
		net.SetPhaseWindow(net.PHASE_WINDOW_LOAD, 0)
	def __init__(self, stream):
		ui.AniImageBox.__init__(self)
		net.SetPhaseWindow(net.PHASE_WINDOW_LOAD, self)
		self.Destroy()
		self.stream = proxy(stream)
		for j in xrange(14):
			self.AppendImage("d:/ymir work/ui/loading_img/%d.tga"%j)
		self.SetCenterPosition()
	def Destroy(self):
		self.stream = None
	def Open(self):
		self.Show()
		net.SendSelectCharacterPacket(self.stream.GetCharacterSlot())
	def Close(self):
		self.Hide()
	def DEBUG_LoadData(self, playerX, playerY):
		self.LoadData(playerX, playerY)
	def LoadData(self, playerX, playerY):
		playerLoad.RegisterSkill(net.GetMainActorRace(), net.GetMainActorSkillGroup(), net.GetMainActorEmpire())
		background.SetViewDistanceSet(background.DISTANCE0, 25600)
		background.SelectViewDistanceNum(background.DISTANCE0)
		app.SetGlobalCenterPosition(playerX, playerY)
		net.StartGame()

class LoadingWindow(ui.ScriptWindow):
	def __init__(self, stream):
		ui.Window.__init__(self)
		net.SetPhaseWindow(net.PHASE_WINDOW_LOAD, self)

		self.stream = proxy(stream)

	def __del__(self):
		net.SetPhaseWindow(net.PHASE_WINDOW_LOAD, 0)
		ui.Window.__del__(self)

	def Open(self):
		net.SendSelectCharacterPacket(self.stream.GetCharacterSlot())
		app.SetFrameSkip(0)
		self.Show()

	def Close(self):
		app.SetFrameSkip(1)
		self.Hide()

	def OnPressEscapeKey(self):
		app.SetFrameSkip(1)
		self.stream.SetLoginPhase()
		return True

	def DEBUG_LoadData(self, playerX, playerY):
		self.LoadData(playerX, playerY)

	def LoadData(self, playerX, playerY):
		playerLoad.RegisterSkill(net.GetMainActorRace(), net.GetMainActorSkillGroup(), net.GetMainActorEmpire())
		
		background.SetViewDistanceSet(background.DISTANCE0, 25600)
		background.SelectViewDistanceNum(background.DISTANCE0)
		app.SetGlobalCenterPosition(playerX, playerY)
		net.StartGame()

 

 

 

vegas title system file

Spoiler
# 1) Search: 
		count = 0
		for rgb in TITLE_COLOR_DICT:
			chrmgr.RegisterTitleColor(count, rgb[0], rgb[1], rgb[2])
			count += 1
# 2) After their function make a new line and paste:
		# NEW TITLE SYSTEM - VEGAS
		if app.ENABLE_TITLE_SYSTEM:
			TITLEPRESTIGE_COLOR_DICT = ( colorInfo.TITLE_PRESTIGE_COLOR_1,
									colorInfo.TITLE_PRESTIGE_COLOR_2,
									colorInfo.TITLE_PRESTIGE_COLOR_3,
									colorInfo.TITLE_PRESTIGE_COLOR_4,		
									colorInfo.TITLE_PRESTIGE_COLOR_5,
									colorInfo.TITLE_PRESTIGE_COLOR_6,
									colorInfo.TITLE_PRESTIGE_COLOR_7,
									colorInfo.TITLE_PRESTIGE_COLOR_8,
									colorInfo.TITLE_PRESTIGE_COLOR_9,
									colorInfo.TITLE_PRESTIGE_COLOR_10,
									colorInfo.TITLE_PRESTIGE_COLOR_11,
									colorInfo.TITLE_PRESTIGE_COLOR_12,
									colorInfo.TITLE_PRESTIGE_COLOR_13,
									colorInfo.TITLE_PRESTIGE_COLOR_14,
									colorInfo.TITLE_PRESTIGE_COLOR_15,
									colorInfo.TITLE_PRESTIGE_COLOR_16,
									colorInfo.TITLE_PRESTIGE_COLOR_17,
									colorInfo.TITLE_PRESTIGE_COLOR_18,
									colorInfo.TITLE_PRESTIGE_COLOR_19,
									colorInfo.TITLE_PRESTIGE_COLOR_0,)
			count_prestige_vegas = 0
			for rgb in TITLEPRESTIGE_COLOR_DICT:
				chrmgr.RegisterTitlePrestigeColor(count_prestige_vegas, rgb[0], rgb[1], rgb[2])
				count_prestige_vegas += 1
			
# 1) Search: 		self.__RegisterTitleName()
# 2) After their function make a new line and paste:
		if app.ENABLE_TITLE_SYSTEM:	
			self.__RegisterTitlePrestigeName()			
""""""""""""""""""""""""""""""""""""""""""		
# 1) Search:	def __RegisterTitleName(self):
# 2) After their function make a new line and paste:
	if app.ENABLE_TITLE_SYSTEM:			
		def __RegisterTitlePrestigeName(self):
			for i in xrange(len(localeInfo.TITLEPRESTIGE_NAME_LIST)):
				chrmgr.RegisterTitlePrestigeName(i, localeInfo.TITLEPRESTIGE_NAME_LIST[i])				
""""""""""""""""""""""""""""""""""""""""""

 

 

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-161201
Share on other sites

  • 4 months later...

When trying to activate a title I take dc and this error occurs
Process: FDWATCH: peer null in event: ident 21
in the DB sysser then it doesn't enter the game
But if you enter the title through navicat it goes normally without any errors in the sysser.

https://metin2.download/picture/3ncoKkQZ501Ygqmwgg0NS9ow44SRpEFm/.jpg

spacer.png

“To be humble with superiors is duty, with equals is courtesy, with inferiors is nobility.”
Benjamin Franklin

 

Por favor, desative seu AdBlock quando usar meus links de download.

Please, disable your 
AdBlock when use my download links.

Me

AdBlock 
On:   


699691-icon-20-sad-face-eyebrows-48.png

 

Adblock Off:  



Streamline-65-48.png

 

 

Angry One Piece GIF by Toei Animation

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-164531
Share on other sites

  • Premium
On 4/12/2024 at 12:46 AM, Luffy said:

When trying to activate a title I take dc and this error occurs
Process: FDWATCH: peer null in event: ident 21
in the DB sysser then it doesn't enter the game
But if you enter the title through navicat it goes normally without any errors in the sysser.

https://metin2.download/picture/3ncoKkQZ501Ygqmwgg0NS9ow44SRpEFm/.jpg

spacer.png

What SF are you using bro? I've tried adding that system doesn't work for me can't even compile the title.cpp

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-164562
Share on other sites

On 13/04/2024 at 09:05, Juki said:

Qual SF você está usando, mano? Eu tentei adicionar que o sistema não funciona para mim, não consigo nem compilar o title.cpp

TMP4

“To be humble with superiors is duty, with equals is courtesy, with inferiors is nobility.”
Benjamin Franklin

 

Por favor, desative seu AdBlock quando usar meus links de download.

Please, disable your 
AdBlock when use my download links.

Me

AdBlock 
On:   


699691-icon-20-sad-face-eyebrows-48.png

 

Adblock Off:  



Streamline-65-48.png

 

 

Angry One Piece GIF by Toei Animation

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-164587
Share on other sites

  • 10 months later...

@Luffy can you help me with one problem? i don't know how to add the file from "02-Server -> Item Protos -> "item_proto_sql"" to the database. I have the same serverfiles like you. TMP4. 

EDIT: Ok, i have added the SQL Query to Navicat without "vnum_range" and it works. Now i have another errors with the ClientManagerLogin.cpp and the Title.cpp. Booth say "use of undeclared identifier `pMsg`

Edited by thelittlemarkus
Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169633
Share on other sites

On 2/24/2025 at 11:10 AM, thelittlemarkus said:

@Luffy can you help me with one problem? i don't know how to add the file from "02-Server -> Item Protos -> "item_proto_sql"" to the database. I have the same serverfiles like you. TMP4. 

EDIT: Ok, i have added the SQL Query to Navicat without "vnum_range" and it works. Now i have another errors with the ClientManagerLogin.cpp and the Title.cpp. Booth say "use of undeclared identifier `pMsg`

You should add them with vnum.

1. Here is the item_proto.txt version and put them correctly. You already have the item_names.

55001	Licoare Premium Galbena	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0
55002	Licoare Premium Roza	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0
55003	Licoare Premium Alba	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0

2. "use of undeclared identifier `pMsg` in Title.cpp.

Search and change auto_ptr to unique_ptr in Title.cpp. You should find it x3. Hope its working.

  • Good 1
Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169660
Share on other sites

On 2/25/2025 at 5:54 PM, minigutza said:

You should add them with vnum.

1. Here is the item_proto.txt version and put them correctly. You already have the item_names.

55001	Licoare Premium Galbena	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0
55002	Licoare Premium Roza	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0
55003	Licoare Premium Alba	ITEM_GIFTBOX	0	1	NONE	NONE	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0

2. "use of undeclared identifier `pMsg` in Title.cpp.

Search and change auto_ptr to unique_ptr in Title.cpp. You should find it x3. Hope its working.

Thank you for your help. 

I have added the TXT code to the Items_proto.txt which is on the server.
then I edited the Title.cpp and changed “std::auto_ptr” to “std::unique_ptr”. 3x as you said

I had the same error with “auto_ptr” in the ClientManagerBoot.cpp because I added a mod where I can determine whether it should read the TXT or SQL variant of the proto files and “auto_ptr” was also used there.

In the ClientManagerLogin.cpp also changed and now I can compile everything. 

Now I only have an error in the .py files of the client. 
-> name “TITLE_1” is not defined (localeInfo.py)

I have added my localeinfo.py. Is that correct? 

This is the hidden content, please


Ok, i fixed this too. I must add in in the DE Language Folder too, not only EN. 
Now my Client starts, i can login but every character in all accounts are broken. They only show the Values 0. 
When i create a new char the client don't load the game, the loading bar is empty. Syserr.txt too.

Can you show me your working "ClientManagerLogin.cpp"?. I think there is an error. 

DB/syserr.txt (SQL Error)

SYSERR: Mar  1 02:30:58 :: Start: TABLE_POSTFIX not configured use default
SYSERR: Mar  1 02:31:17 :: ChildLoop: AsyncSQL: query failed: 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 'FROM player WHERE id=6' at line 1 (query: SELECT id,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,gold,level,level_step,st,ht,dx,iq,exp,stat_point,skill_point,sub_skill_point,stat_reset_count,part_base,part_hair,part_sash,skill_level,quickslot,skill_group,alignment, prestige, mobile,horse_level,horse_riding,horse_hp,horse_hp_droptime,horse_stamina,UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_play),horse_skill_point,FROM player WHERE id=6 errno: 1064)
SYSERR: Mar  1 02:31:17 :: RESULT_COMPOSITE_PLAYER: null MYSQL_RES QID 0

 

Edited by thelittlemarkus
Fixed the "LocaleInfo.py" error but have one error again
  • Love 1
Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169682
Share on other sites

On 2/27/2025 at 2:35 AM, thelittlemarkus said:

Thank you for your help. 

I have added the TXT code to the Items_proto.txt which is on the server.
then I edited the Title.cpp and changed “std::auto_ptr” to “std::unique_ptr”. 3x as you said

I had the same error with “auto_ptr” in the ClientManagerBoot.cpp because I added a mod where I can determine whether it should read the TXT or SQL variant of the proto files and “auto_ptr” was also used there.

In the ClientManagerLogin.cpp also changed and now I can compile everything. 

Now I only have an error in the .py files of the client. 
-> name “TITLE_1” is not defined (localeInfo.py)

I have added my localeinfo.py. Is that correct? 

 

Hidden Content

  • Give reaction to this post to see the hidden content.

 


Ok, i fixed this too. I must add in in the DE Language Folder too, not only EN. 
Now my Client starts, i can login but every character in all accounts are broken. They only show the Values 0. 
When i create a new char the client don't load the game, the loading bar is empty. Syserr.txt too.

Can you show me your working "ClientManagerLogin.cpp"?. I think there is an error. 

 

 

DB/syserr.txt (SQL Error)

SYSERR: Mar  1 02:30:58 :: Start: TABLE_POSTFIX not configured use default
SYSERR: Mar  1 02:31:17 :: ChildLoop: AsyncSQL: query failed: 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 'FROM player WHERE id=6' at line 1 (query: SELECT id,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,gold,level,level_step,st,ht,dx,iq,exp,stat_point,skill_point,sub_skill_point,stat_reset_count,part_base,part_hair,part_sash,skill_level,quickslot,skill_group,alignment, prestige, mobile,horse_level,horse_riding,horse_hp,horse_hp_droptime,horse_stamina,UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_play),horse_skill_point,FROM player WHERE id=6 errno: 1064)
SYSERR: Mar  1 02:31:17 :: RESULT_COMPOSITE_PLAYER: null MYSQL_RES QID 0

 

You must have TITLE_1    [Beginner] and so on in locale_game.txt. I did not added a DE version since i don t have a german locale.

For ClientManagerLogin.cpp you should adjust the syntax for your server not just copy/paste. Probably there are some columns in tables like "mobile" that you don t have or maybe you had and now there are gone. I did it wrong first time too 😛

If you use TMP4 files it should be ok with mine


#include "stdafx.h"

#include "ClientManager.h"

#include "Main.h"
#include "Config.h"
#include "QID.h"
#include "Cache.h"

extern std::string g_stLocale;
extern bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab);
extern int g_test_server;
extern int g_log;

bool CClientManager::InsertLogonAccount(const char * c_pszLogin, DWORD dwHandle, const char * c_pszIP)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	itertype(m_map_kLogonAccount) it = m_map_kLogonAccount.find(szLogin);

	if (m_map_kLogonAccount.end() != it)
		return false;

	CLoginData * pkLD = GetLoginDataByLogin(c_pszLogin);

	if (!pkLD)
		return false;

	pkLD->SetConnectedPeerHandle(dwHandle);
	pkLD->SetIP(c_pszIP);

	m_map_kLogonAccount.insert(TLogonAccountMap::value_type(szLogin, pkLD));
	return true;
}

bool CClientManager::DeleteLogonAccount(const char * c_pszLogin, DWORD dwHandle)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	itertype(m_map_kLogonAccount) it = m_map_kLogonAccount.find(szLogin);

	if (it == m_map_kLogonAccount.end())
		return false;

	CLoginData * pkLD = it->second;

	if (pkLD->GetConnectedPeerHandle() != dwHandle)
	{
		sys_err("%s tried to logout in other peer handle %lu, current handle %lu", szLogin, dwHandle, pkLD->GetConnectedPeerHandle());
		return false;
	}

	if (pkLD->IsPlay())
	{
		pkLD->SetPlay(false);
		SendLoginToBilling(pkLD, false);
	}

	if (pkLD->IsDeleted())
	{
		delete pkLD;
	}

	m_map_kLogonAccount.erase(it);
	return true;
}

bool CClientManager::FindLogonAccount(const char * c_pszLogin)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	if (m_map_kLogonAccount.end() == m_map_kLogonAccount.find(szLogin))
		return false;

	return true;
}

void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketGDLoginByKey * p)
{
#ifdef ENABLE_LIMIT_TIME
	static int s_updateCount = 0;
	static int s_curTime = time(0);
	if (s_updateCount > 100)
	{
		s_curTime = time(0);
		s_updateCount = 0;
	}
	++s_updateCount;

	if (s_curTime >= GLOBAL_LIMIT_TIME)
	{
		sys_err("Server life time expired.");
		exit(0);
		return;
	}
#endif

	CLoginData * pkLoginData = GetLoginData(p->dwLoginKey);
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(p->szLogin, szLogin, sizeof(szLogin));

	if (!pkLoginData)
	{
		sys_log(0, "LOGIN_BY_KEY key not exist %s %lu", szLogin, p->dwLoginKey);
		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	TAccountTable & r = pkLoginData->GetAccountRef();

	if (FindLogonAccount(r.login))
	{
		sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
		TPacketDGLoginAlready ptog;
		strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
		pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
		pkPeer->Encode(&ptog, sizeof(TPacketDGLoginAlready));
		return;
	}

	if (strcasecmp(r.login, szLogin))
	{
		sys_log(0, "LOGIN_BY_KEY login differ %s %lu input %s", r.login, p->dwLoginKey, szLogin);
		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	if (memcmp(pkLoginData->GetClientKey(), p->adwClientKey, sizeof(DWORD) * 4))
	{
		const DWORD * pdwClientKey = pkLoginData->GetClientKey();

		sys_log(0, "LOGIN_BY_KEY client key differ %s %lu %lu %lu %lu, %lu %lu %lu %lu",
				r.login,
				p->adwClientKey[0], p->adwClientKey[1], p->adwClientKey[2], p->adwClientKey[3],
				pdwClientKey[0], pdwClientKey[1], pdwClientKey[2], pdwClientKey[3]);

		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	TAccountTable * pkTab = new TAccountTable;
	memset(pkTab, 0, sizeof(TAccountTable));

	pkTab->id = r.id;
	trim_and_lower(r.login, pkTab->login, sizeof(pkTab->login));
	strlcpy(pkTab->passwd, r.passwd, sizeof(pkTab->passwd));
	strlcpy(pkTab->social_id, r.social_id, sizeof(pkTab->social_id));
	strlcpy(pkTab->status, "OK", sizeof(pkTab->status));

	ClientHandleInfo * info = new ClientHandleInfo(dwHandle);
	info->pAccountTable = pkTab;
	strlcpy(info->ip, p->szIP, sizeof(info->ip));

	sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip);
	char szQuery[QUERY_MAX_LEN];
	snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id);
	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
}

void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	if (msg->uiSQLErrno != 0)
	{
		peer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle);
		delete info;
		return;
	}

	char szQuery[QUERY_MAX_LEN];

	if (msg->Get()->uiNumRows == 0)
	{
		DWORD account_id = info->pAccountTable->id;
		char szQuery[QUERY_MAX_LEN];
		snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id);
		std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
		
		sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);

		if (pMsg->Get()->uiNumRows == 0)
		{
			sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);

			// PLAYER_INDEX_CREATE_BUG_FIX
			//snprintf(szQuery, sizeof(szQuery), "INSERT IGNORE INTO player_index%s (id) VALUES(%lu)", GetTablePostfix(), info->pAccountTable->id);
			snprintf(szQuery, sizeof(szQuery), "INSERT INTO player_index%s (id) VALUES(%u)", GetTablePostfix(), info->pAccountTable->id);
			CDBManager::instance().ReturnQuery(szQuery, QID_PLAYER_INDEX_CREATE, peer->GetHandle(), info);
			// END_PLAYER_INDEX_CREATE_BUF_FIX
		}
		return;
	}

	MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);

	int col = 0;

	for (; col < PLAYER_PER_ACCOUNT; ++col)
		str_to_number(info->pAccountTable->players[col].dwID, row[col]);

	str_to_number(info->pAccountTable->bEmpire, row[col++]);
	info->account_index = 1;

	extern std::string g_stLocale;
	if (g_stLocale == "gb2312")
#ifdef ENABLE_TITLE_SYSTEM	
	{
		snprintf(szQuery, sizeof(szQuery),
				"SELECT id, name, job, level, alignment, prestige, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
				GetTablePostfix(), info->pAccountTable->id);
	}
	else
	{
		snprintf(szQuery, sizeof(szQuery),
				"SELECT id, name, job, level, alignment, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
				GetTablePostfix(), info->pAccountTable->id);
	}
#endif

	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN, peer->GetHandle(), info);
}

// PLAYER_INDEX_CREATE_BUG_FIX
void CClientManager::RESULT_PLAYER_INDEX_CREATE(CPeer * pkPeer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	char szQuery[QUERY_MAX_LEN];
	snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), 
			info->pAccountTable->id);
	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
}
// END_PLAYER_INDEX_CREATE_BUG_FIX

TAccountTable * CreateAccountTableFromRes(MYSQL_RES * res)
{
	char input_pwd[PASSWD_MAX_LEN + 1];
	MYSQL_ROW row = NULL;
	DWORD col;

	row = mysql_fetch_row(res);
	col = 0;

	TAccountTable * pkTab = new TAccountTable;
	memset(pkTab, 0, sizeof(TAccountTable));

	// ù¹øÂ° Ä÷³ °Í¸¸ Âü°í ÇÑ´Ù (JOIN QUERY¸¦ À§ÇÑ °Í ÀÓ)
	strlcpy(input_pwd, row[col++], sizeof(input_pwd));
	str_to_number(pkTab->id, row[col++]);
	strlcpy(pkTab->login, row[col++], sizeof(pkTab->login));
	strlcpy(pkTab->passwd, row[col++], sizeof(pkTab->passwd));
	strlcpy(pkTab->social_id, row[col++], sizeof(pkTab->social_id));
	str_to_number(pkTab->bEmpire, row[col++]);

	for (int j = 0; j < PLAYER_PER_ACCOUNT; ++j)
		str_to_number(pkTab->players[j].dwID, row[col++]);

	strlcpy(pkTab->status, row[col++], sizeof(pkTab->status));

	if (strcmp(pkTab->passwd, input_pwd))
	{
		delete pkTab;
		return NULL;
	}

	return pkTab;
}

void CreateAccountPlayerDataFromRes(MYSQL_RES * pRes, TAccountTable * pkTab)
{
	if (!pRes)
		return;

	for (DWORD i = 0; i < mysql_num_rows(pRes); ++i)
	{
		MYSQL_ROW row = mysql_fetch_row(pRes);
		int col = 0;

		DWORD player_id = 0;
		!row[col++] ? 0 : str_to_number(player_id, row[col - 1]);

		if (!player_id)
			continue;

		int j;

		for (j = 0; j < PLAYER_PER_ACCOUNT; ++j)
		{
			if (pkTab->players[j].dwID == player_id)
			{
				CPlayerTableCache * pc = CClientManager::instance().GetPlayerCache(player_id);
				TPlayerTable * pt = pc ? pc->Get(false) : NULL;

				if (pt)
				{
					strlcpy(pkTab->players[j].szName, pt->name, sizeof(pkTab->players[j].szName));

					pkTab->players[j].byJob			= pt->job;
					pkTab->players[j].byLevel			= pt->level;
					pkTab->players[j].dwPlayMinutes		= pt->playtime;
					pkTab->players[j].byST			= pt->st;
					pkTab->players[j].byHT			= pt->ht;
					pkTab->players[j].byDX			= pt->dx;
					pkTab->players[j].byIQ			= pt->iq;
					pkTab->players[j].wMainPart			= pt->parts[PART_MAIN];
					pkTab->players[j].wHairPart			= pt->parts[PART_HAIR];
					pkTab->players[j].x				= pt->x;
					pkTab->players[j].y				= pt->y;
					pkTab->players[j].skill_group		= pt->skill_group;
					pkTab->players[j].bChangeName		= 0;
				}
				else
				{
					if (!row[col++])
						*pkTab->players[j].szName = '\0';
					else
						strlcpy(pkTab->players[j].szName, row[col - 1], sizeof(pkTab->players[j].szName));

					pkTab->players[j].byJob			= 0;
					pkTab->players[j].byLevel		= 0;
					pkTab->players[j].dwPlayMinutes	= 0;
					pkTab->players[j].byST			= 0;
					pkTab->players[j].byHT			= 0;
					pkTab->players[j].byDX			= 0;
					pkTab->players[j].byIQ			= 0;
					pkTab->players[j].wMainPart		= 0;
					pkTab->players[j].wHairPart		= 0;
					pkTab->players[j].x				= 0;
					pkTab->players[j].y				= 0;
					pkTab->players[j].skill_group	= 0;
					pkTab->players[j].bChangeName	= 0;

					str_to_number(pkTab->players[j].byJob, row[col++]);
					str_to_number(pkTab->players[j].byLevel, row[col++]);
					str_to_number(pkTab->players[j].dwPlayMinutes, row[col++]);
					str_to_number(pkTab->players[j].byST, row[col++]);
					str_to_number(pkTab->players[j].byHT, row[col++]);
					str_to_number(pkTab->players[j].byDX, row[col++]);
					str_to_number(pkTab->players[j].byIQ, row[col++]);
					str_to_number(pkTab->players[j].wMainPart, row[col++]);
					str_to_number(pkTab->players[j].wHairPart, row[col++]);
					str_to_number(pkTab->players[j].x, row[col++]);
					str_to_number(pkTab->players[j].y, row[col++]);
					str_to_number(pkTab->players[j].skill_group, row[col++]);
					str_to_number(pkTab->players[j].bChangeName, row[col++]);
				}

				sys_log(0, "%s %lu %lu hair %u",
						pkTab->players[j].szName, pkTab->players[j].x, pkTab->players[j].y, pkTab->players[j].wHairPart);
				break;
			}
		}
		/*
		   if (j == PLAYER_PER_ACCOUNT)
		   sys_err("cannot find player_id on this account (login: %s id %lu account %lu %lu %lu)", 
		   pkTab->login, player_id,
		   pkTab->players[0].dwID,
		   pkTab->players[1].dwID,
		   pkTab->players[2].dwID);
		   */
	}
}

void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	if (info->account_index == 0)
	{
		// °èÁ¤ÀÌ ¾ø³×?
		if (msg->Get()->uiNumRows == 0)
		{
			sys_log(0, "RESULT_LOGIN: no account");
			peer->EncodeHeader(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle, 0);
			delete info;
			return;
		}

		info->pAccountTable = CreateAccountTableFromRes(msg->Get()->pSQLResult);

		if (!info->pAccountTable)
		{
			sys_log(0, "RESULT_LOGIN: no account : WRONG_PASSWD");
			peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
			delete info;
		}
		else
		{
			++info->account_index;

			char queryStr[512];
			extern std::string g_stLocale;
			if (g_stLocale == "gb2312")
#ifdef ENABLE_TITLE_SYSTEM		
			{
				snprintf(queryStr, sizeof(queryStr),
						"SELECT id, name, job, level, alignment, prestige, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
						GetTablePostfix(), info->pAccountTable->id);
			}
			else
			{
				snprintf(queryStr, sizeof(queryStr),
						"SELECT id, name, job, level, alignment, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
						GetTablePostfix(), info->pAccountTable->id);
			}
#endif

			CDBManager::instance().ReturnQuery(queryStr, QID_LOGIN, peer->GetHandle(), info);
		}
		return;
	}
	else
	{
		if (!info->pAccountTable) // ÀÌ·²¸®´Â ¾ø°ÚÁö¸¸;;
		{
			peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
			delete info;
			return;
		}

		// ´Ù¸¥ ÄÁ³Ø¼ÇÀÌ ÀÌ¹Ì ·Î±×ÀÎ ÇØ¹ö·È´Ù¸é.. ÀÌ¹Ì Á¢¼ÓÇß´Ù°í º¸³»¾ß ÇÑ´Ù.
		if (!InsertLogonAccount(info->pAccountTable->login, peer->GetHandle(), info->ip))
		{
			sys_log(0, "RESULT_LOGIN: already logon %s", info->pAccountTable->login);

			TPacketDGLoginAlready p;
			strlcpy(p.szLogin, info->pAccountTable->login, sizeof(p.szLogin));

			peer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, info->dwHandle, sizeof(TPacketDGLoginAlready));
			peer->Encode(&p, sizeof(p));
		}
		else
		{
			sys_log(0, "RESULT_LOGIN: login success %s rows: %lu", info->pAccountTable->login, msg->Get()->uiNumRows);

			if (msg->Get()->uiNumRows > 0)
				CreateAccountPlayerDataFromRes(msg->Get()->pSQLResult, info->pAccountTable);

			//PREVENT_COPY_ITEM
			CLoginData * p = GetLoginDataByLogin(info->pAccountTable->login);
			memcpy(&p->GetAccountRef(), info->pAccountTable, sizeof(TAccountTable));

			//END_PREVENT_COPY_ITEM
			peer->EncodeHeader(HEADER_DG_LOGIN_SUCCESS, info->dwHandle, sizeof(TAccountTable));
			peer->Encode(info->pAccountTable, sizeof(TAccountTable));

		}

		delete info->pAccountTable;
		info->pAccountTable = NULL;
		delete info;
	}
}

void CClientManager::QUERY_LOGOUT(CPeer * peer, DWORD dwHandle,const char * data)
{
	TLogoutPacket* packet = (TLogoutPacket*)data;

	if (!*packet->login)
		return;

	CLoginData * pLoginData = GetLoginDataByLogin(packet->login);

	if (pLoginData == NULL)
		return;

	int pid[PLAYER_PER_ACCOUNT];

	for (int n = 0; n < PLAYER_PER_ACCOUNT; ++n)
	{
		if (pLoginData->GetAccountRef().players[n].dwID == 0)
		{
			if (g_test_server)
				sys_log(0, "LOGOUT %s %d", packet->login, pLoginData->GetAccountRef().players[n].dwID);
			continue;
		}
		
		pid[n] = pLoginData->GetAccountRef().players[n].dwID;

		if (g_log)
			sys_log(0, "LOGOUT InsertLogoutPlayer %s %d", packet->login, pid[n]);

		InsertLogoutPlayer(pid[n]);
	}
	
	if (DeleteLogonAccount(packet->login, peer->GetHandle()))
	{
		if (g_log)
			sys_log(0, "LOGOUT %s ", packet->login);
	}
}

void CClientManager::QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDChangeName * p)
{
	char queryStr[QUERY_MAX_LEN];

	if (g_stLocale == "sjis")
		snprintf(queryStr, sizeof(queryStr),
				"SELECT COUNT(*) as count FROM player%s WHERE name='%s' collate sjis_japanese_ci AND id <> %u", 
				GetTablePostfix(), p->name, p->pid);
	else
		snprintf(queryStr, sizeof(queryStr),
			"SELECT COUNT(*) as count FROM player%s WHERE name='%s' AND id <> %u", GetTablePostfix(), p->name, p->pid);

	std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(queryStr, SQL_PLAYER));

	if (pMsg->Get()->uiNumRows)
	{
		if (!pMsg->Get()->pSQLResult)
		{
			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
			return;
		}

		MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);

		if (*row[0] != '0')
		{
			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
			return;
		}
	}   
	else
	{
		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
		return;
	}

	snprintf(queryStr, sizeof(queryStr),
			"UPDATE player%s SET name='%s',change_name=0 WHERE id=%u", GetTablePostfix(), p->name, p->pid);

	std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr, SQL_PLAYER));

	TPacketDGChangeName pdg;
	peer->EncodeHeader(HEADER_DG_CHANGE_NAME, dwHandle, sizeof(TPacketDGChangeName));
	pdg.pid = p->pid;
	strlcpy(pdg.name, p->name, sizeof(pdg.name));
	peer->Encode(&pdg, sizeof(TPacketDGChangeName));
}

 

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169714
Share on other sites

On 3/1/2025 at 8:38 AM, minigutza said:

You must have TITLE_1    [Beginner] and so on in locale_game.txt. I did not added a DE version since i don t have a german locale.

For ClientManagerLogin.cpp you should adjust the syntax for your server not just copy/paste. Probably there are some columns in tables like "mobile" that you don t have or maybe you had and now there are gone. I did it wrong first time too 😛

If you use TMP4 files it should be ok with mine

Spoiler
#include "stdafx.h"

#include "ClientManager.h"

#include "Main.h"
#include "Config.h"
#include "QID.h"
#include "Cache.h"

extern std::string g_stLocale;
extern bool CreatePlayerTableFromRes(MYSQL_RES * res, TPlayerTable * pkTab);
extern int g_test_server;
extern int g_log;

bool CClientManager::InsertLogonAccount(const char * c_pszLogin, DWORD dwHandle, const char * c_pszIP)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	itertype(m_map_kLogonAccount) it = m_map_kLogonAccount.find(szLogin);

	if (m_map_kLogonAccount.end() != it)
		return false;

	CLoginData * pkLD = GetLoginDataByLogin(c_pszLogin);

	if (!pkLD)
		return false;

	pkLD->SetConnectedPeerHandle(dwHandle);
	pkLD->SetIP(c_pszIP);

	m_map_kLogonAccount.insert(TLogonAccountMap::value_type(szLogin, pkLD));
	return true;
}

bool CClientManager::DeleteLogonAccount(const char * c_pszLogin, DWORD dwHandle)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	itertype(m_map_kLogonAccount) it = m_map_kLogonAccount.find(szLogin);

	if (it == m_map_kLogonAccount.end())
		return false;

	CLoginData * pkLD = it->second;

	if (pkLD->GetConnectedPeerHandle() != dwHandle)
	{
		sys_err("%s tried to logout in other peer handle %lu, current handle %lu", szLogin, dwHandle, pkLD->GetConnectedPeerHandle());
		return false;
	}

	if (pkLD->IsPlay())
	{
		pkLD->SetPlay(false);
		SendLoginToBilling(pkLD, false);
	}

	if (pkLD->IsDeleted())
	{
		delete pkLD;
	}

	m_map_kLogonAccount.erase(it);
	return true;
}

bool CClientManager::FindLogonAccount(const char * c_pszLogin)
{
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(c_pszLogin, szLogin, sizeof(szLogin));

	if (m_map_kLogonAccount.end() == m_map_kLogonAccount.find(szLogin))
		return false;

	return true;
}

void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketGDLoginByKey * p)
{
#ifdef ENABLE_LIMIT_TIME
	static int s_updateCount = 0;
	static int s_curTime = time(0);
	if (s_updateCount > 100)
	{
		s_curTime = time(0);
		s_updateCount = 0;
	}
	++s_updateCount;

	if (s_curTime >= GLOBAL_LIMIT_TIME)
	{
		sys_err("Server life time expired.");
		exit(0);
		return;
	}
#endif

	CLoginData * pkLoginData = GetLoginData(p->dwLoginKey);
	char szLogin[LOGIN_MAX_LEN + 1];
	trim_and_lower(p->szLogin, szLogin, sizeof(szLogin));

	if (!pkLoginData)
	{
		sys_log(0, "LOGIN_BY_KEY key not exist %s %lu", szLogin, p->dwLoginKey);
		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	TAccountTable & r = pkLoginData->GetAccountRef();

	if (FindLogonAccount(r.login))
	{
		sys_log(0, "LOGIN_BY_KEY already login %s %lu", r.login, p->dwLoginKey);
		TPacketDGLoginAlready ptog;
		strlcpy(ptog.szLogin, szLogin, sizeof(ptog.szLogin));
		pkPeer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, dwHandle, sizeof(TPacketDGLoginAlready));
		pkPeer->Encode(&ptog, sizeof(TPacketDGLoginAlready));
		return;
	}

	if (strcasecmp(r.login, szLogin))
	{
		sys_log(0, "LOGIN_BY_KEY login differ %s %lu input %s", r.login, p->dwLoginKey, szLogin);
		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	if (memcmp(pkLoginData->GetClientKey(), p->adwClientKey, sizeof(DWORD) * 4))
	{
		const DWORD * pdwClientKey = pkLoginData->GetClientKey();

		sys_log(0, "LOGIN_BY_KEY client key differ %s %lu %lu %lu %lu, %lu %lu %lu %lu",
				r.login,
				p->adwClientKey[0], p->adwClientKey[1], p->adwClientKey[2], p->adwClientKey[3],
				pdwClientKey[0], pdwClientKey[1], pdwClientKey[2], pdwClientKey[3]);

		pkPeer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, dwHandle);
		return;
	}

	TAccountTable * pkTab = new TAccountTable;
	memset(pkTab, 0, sizeof(TAccountTable));

	pkTab->id = r.id;
	trim_and_lower(r.login, pkTab->login, sizeof(pkTab->login));
	strlcpy(pkTab->passwd, r.passwd, sizeof(pkTab->passwd));
	strlcpy(pkTab->social_id, r.social_id, sizeof(pkTab->social_id));
	strlcpy(pkTab->status, "OK", sizeof(pkTab->status));

	ClientHandleInfo * info = new ClientHandleInfo(dwHandle);
	info->pAccountTable = pkTab;
	strlcpy(info->ip, p->szIP, sizeof(info->ip));

	sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip);
	char szQuery[QUERY_MAX_LEN];
	snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id);
	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
}

void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	if (msg->uiSQLErrno != 0)
	{
		peer->EncodeReturn(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle);
		delete info;
		return;
	}

	char szQuery[QUERY_MAX_LEN];

	if (msg->Get()->uiNumRows == 0)
	{
		DWORD account_id = info->pAccountTable->id;
		char szQuery[QUERY_MAX_LEN];
		snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id);
		std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER));
		
		sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);

		if (pMsg->Get()->uiNumRows == 0)
		{
			sys_log(0, "RESULT_LOGIN_BY_KEY FAIL player_index's NULL : ID:%d", account_id);

			// PLAYER_INDEX_CREATE_BUG_FIX
			//snprintf(szQuery, sizeof(szQuery), "INSERT IGNORE INTO player_index%s (id) VALUES(%lu)", GetTablePostfix(), info->pAccountTable->id);
			snprintf(szQuery, sizeof(szQuery), "INSERT INTO player_index%s (id) VALUES(%u)", GetTablePostfix(), info->pAccountTable->id);
			CDBManager::instance().ReturnQuery(szQuery, QID_PLAYER_INDEX_CREATE, peer->GetHandle(), info);
			// END_PLAYER_INDEX_CREATE_BUF_FIX
		}
		return;
	}

	MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult);

	int col = 0;

	for (; col < PLAYER_PER_ACCOUNT; ++col)
		str_to_number(info->pAccountTable->players[col].dwID, row[col]);

	str_to_number(info->pAccountTable->bEmpire, row[col++]);
	info->account_index = 1;

	extern std::string g_stLocale;
	if (g_stLocale == "gb2312")
#ifdef ENABLE_TITLE_SYSTEM	
	{
		snprintf(szQuery, sizeof(szQuery),
				"SELECT id, name, job, level, alignment, prestige, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
				GetTablePostfix(), info->pAccountTable->id);
	}
	else
	{
		snprintf(szQuery, sizeof(szQuery),
				"SELECT id, name, job, level, alignment, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
				GetTablePostfix(), info->pAccountTable->id);
	}
#endif

	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN, peer->GetHandle(), info);
}

// PLAYER_INDEX_CREATE_BUG_FIX
void CClientManager::RESULT_PLAYER_INDEX_CREATE(CPeer * pkPeer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	char szQuery[QUERY_MAX_LEN];
	snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), 
			info->pAccountTable->id);
	CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info);
}
// END_PLAYER_INDEX_CREATE_BUG_FIX

TAccountTable * CreateAccountTableFromRes(MYSQL_RES * res)
{
	char input_pwd[PASSWD_MAX_LEN + 1];
	MYSQL_ROW row = NULL;
	DWORD col;

	row = mysql_fetch_row(res);
	col = 0;

	TAccountTable * pkTab = new TAccountTable;
	memset(pkTab, 0, sizeof(TAccountTable));

	// ù¹øÂ° Ä÷³ °Í¸¸ Âü°í ÇÑ´Ù (JOIN QUERY¸¦ À§ÇÑ °Í ÀÓ)
	strlcpy(input_pwd, row[col++], sizeof(input_pwd));
	str_to_number(pkTab->id, row[col++]);
	strlcpy(pkTab->login, row[col++], sizeof(pkTab->login));
	strlcpy(pkTab->passwd, row[col++], sizeof(pkTab->passwd));
	strlcpy(pkTab->social_id, row[col++], sizeof(pkTab->social_id));
	str_to_number(pkTab->bEmpire, row[col++]);

	for (int j = 0; j < PLAYER_PER_ACCOUNT; ++j)
		str_to_number(pkTab->players[j].dwID, row[col++]);

	strlcpy(pkTab->status, row[col++], sizeof(pkTab->status));

	if (strcmp(pkTab->passwd, input_pwd))
	{
		delete pkTab;
		return NULL;
	}

	return pkTab;
}

void CreateAccountPlayerDataFromRes(MYSQL_RES * pRes, TAccountTable * pkTab)
{
	if (!pRes)
		return;

	for (DWORD i = 0; i < mysql_num_rows(pRes); ++i)
	{
		MYSQL_ROW row = mysql_fetch_row(pRes);
		int col = 0;

		DWORD player_id = 0;
		!row[col++] ? 0 : str_to_number(player_id, row[col - 1]);

		if (!player_id)
			continue;

		int j;

		for (j = 0; j < PLAYER_PER_ACCOUNT; ++j)
		{
			if (pkTab->players[j].dwID == player_id)
			{
				CPlayerTableCache * pc = CClientManager::instance().GetPlayerCache(player_id);
				TPlayerTable * pt = pc ? pc->Get(false) : NULL;

				if (pt)
				{
					strlcpy(pkTab->players[j].szName, pt->name, sizeof(pkTab->players[j].szName));

					pkTab->players[j].byJob			= pt->job;
					pkTab->players[j].byLevel			= pt->level;
					pkTab->players[j].dwPlayMinutes		= pt->playtime;
					pkTab->players[j].byST			= pt->st;
					pkTab->players[j].byHT			= pt->ht;
					pkTab->players[j].byDX			= pt->dx;
					pkTab->players[j].byIQ			= pt->iq;
					pkTab->players[j].wMainPart			= pt->parts[PART_MAIN];
					pkTab->players[j].wHairPart			= pt->parts[PART_HAIR];
					pkTab->players[j].x				= pt->x;
					pkTab->players[j].y				= pt->y;
					pkTab->players[j].skill_group		= pt->skill_group;
					pkTab->players[j].bChangeName		= 0;
				}
				else
				{
					if (!row[col++])
						*pkTab->players[j].szName = '\0';
					else
						strlcpy(pkTab->players[j].szName, row[col - 1], sizeof(pkTab->players[j].szName));

					pkTab->players[j].byJob			= 0;
					pkTab->players[j].byLevel		= 0;
					pkTab->players[j].dwPlayMinutes	= 0;
					pkTab->players[j].byST			= 0;
					pkTab->players[j].byHT			= 0;
					pkTab->players[j].byDX			= 0;
					pkTab->players[j].byIQ			= 0;
					pkTab->players[j].wMainPart		= 0;
					pkTab->players[j].wHairPart		= 0;
					pkTab->players[j].x				= 0;
					pkTab->players[j].y				= 0;
					pkTab->players[j].skill_group	= 0;
					pkTab->players[j].bChangeName	= 0;

					str_to_number(pkTab->players[j].byJob, row[col++]);
					str_to_number(pkTab->players[j].byLevel, row[col++]);
					str_to_number(pkTab->players[j].dwPlayMinutes, row[col++]);
					str_to_number(pkTab->players[j].byST, row[col++]);
					str_to_number(pkTab->players[j].byHT, row[col++]);
					str_to_number(pkTab->players[j].byDX, row[col++]);
					str_to_number(pkTab->players[j].byIQ, row[col++]);
					str_to_number(pkTab->players[j].wMainPart, row[col++]);
					str_to_number(pkTab->players[j].wHairPart, row[col++]);
					str_to_number(pkTab->players[j].x, row[col++]);
					str_to_number(pkTab->players[j].y, row[col++]);
					str_to_number(pkTab->players[j].skill_group, row[col++]);
					str_to_number(pkTab->players[j].bChangeName, row[col++]);
				}

				sys_log(0, "%s %lu %lu hair %u",
						pkTab->players[j].szName, pkTab->players[j].x, pkTab->players[j].y, pkTab->players[j].wHairPart);
				break;
			}
		}
		/*
		   if (j == PLAYER_PER_ACCOUNT)
		   sys_err("cannot find player_id on this account (login: %s id %lu account %lu %lu %lu)", 
		   pkTab->login, player_id,
		   pkTab->players[0].dwID,
		   pkTab->players[1].dwID,
		   pkTab->players[2].dwID);
		   */
	}
}

void CClientManager::RESULT_LOGIN(CPeer * peer, SQLMsg * msg)
{
	CQueryInfo * qi = (CQueryInfo *) msg->pvUserData;
	ClientHandleInfo * info = (ClientHandleInfo *) qi->pvData;

	if (info->account_index == 0)
	{
		// °èÁ¤ÀÌ ¾ø³×?
		if (msg->Get()->uiNumRows == 0)
		{
			sys_log(0, "RESULT_LOGIN: no account");
			peer->EncodeHeader(HEADER_DG_LOGIN_NOT_EXIST, info->dwHandle, 0);
			delete info;
			return;
		}

		info->pAccountTable = CreateAccountTableFromRes(msg->Get()->pSQLResult);

		if (!info->pAccountTable)
		{
			sys_log(0, "RESULT_LOGIN: no account : WRONG_PASSWD");
			peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
			delete info;
		}
		else
		{
			++info->account_index;

			char queryStr[512];
			extern std::string g_stLocale;
			if (g_stLocale == "gb2312")
#ifdef ENABLE_TITLE_SYSTEM		
			{
				snprintf(queryStr, sizeof(queryStr),
						"SELECT id, name, job, level, alignment, prestige, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
						GetTablePostfix(), info->pAccountTable->id);
			}
			else
			{
				snprintf(queryStr, sizeof(queryStr),
						"SELECT id, name, job, level, alignment, st, ht, dx, iq, part_main, part_hair, x, y, skill_group, change_name FROM player%s WHERE account_id=%u",
						GetTablePostfix(), info->pAccountTable->id);
			}
#endif

			CDBManager::instance().ReturnQuery(queryStr, QID_LOGIN, peer->GetHandle(), info);
		}
		return;
	}
	else
	{
		if (!info->pAccountTable) // ÀÌ·²¸®´Â ¾ø°ÚÁö¸¸;;
		{
			peer->EncodeReturn(HEADER_DG_LOGIN_WRONG_PASSWD, info->dwHandle);
			delete info;
			return;
		}

		// ´Ù¸¥ ÄÁ³Ø¼ÇÀÌ ÀÌ¹Ì ·Î±×ÀÎ ÇØ¹ö·È´Ù¸é.. ÀÌ¹Ì Á¢¼ÓÇß´Ù°í º¸³»¾ß ÇÑ´Ù.
		if (!InsertLogonAccount(info->pAccountTable->login, peer->GetHandle(), info->ip))
		{
			sys_log(0, "RESULT_LOGIN: already logon %s", info->pAccountTable->login);

			TPacketDGLoginAlready p;
			strlcpy(p.szLogin, info->pAccountTable->login, sizeof(p.szLogin));

			peer->EncodeHeader(HEADER_DG_LOGIN_ALREADY, info->dwHandle, sizeof(TPacketDGLoginAlready));
			peer->Encode(&p, sizeof(p));
		}
		else
		{
			sys_log(0, "RESULT_LOGIN: login success %s rows: %lu", info->pAccountTable->login, msg->Get()->uiNumRows);

			if (msg->Get()->uiNumRows > 0)
				CreateAccountPlayerDataFromRes(msg->Get()->pSQLResult, info->pAccountTable);

			//PREVENT_COPY_ITEM
			CLoginData * p = GetLoginDataByLogin(info->pAccountTable->login);
			memcpy(&p->GetAccountRef(), info->pAccountTable, sizeof(TAccountTable));

			//END_PREVENT_COPY_ITEM
			peer->EncodeHeader(HEADER_DG_LOGIN_SUCCESS, info->dwHandle, sizeof(TAccountTable));
			peer->Encode(info->pAccountTable, sizeof(TAccountTable));

		}

		delete info->pAccountTable;
		info->pAccountTable = NULL;
		delete info;
	}
}

void CClientManager::QUERY_LOGOUT(CPeer * peer, DWORD dwHandle,const char * data)
{
	TLogoutPacket* packet = (TLogoutPacket*)data;

	if (!*packet->login)
		return;

	CLoginData * pLoginData = GetLoginDataByLogin(packet->login);

	if (pLoginData == NULL)
		return;

	int pid[PLAYER_PER_ACCOUNT];

	for (int n = 0; n < PLAYER_PER_ACCOUNT; ++n)
	{
		if (pLoginData->GetAccountRef().players[n].dwID == 0)
		{
			if (g_test_server)
				sys_log(0, "LOGOUT %s %d", packet->login, pLoginData->GetAccountRef().players[n].dwID);
			continue;
		}
		
		pid[n] = pLoginData->GetAccountRef().players[n].dwID;

		if (g_log)
			sys_log(0, "LOGOUT InsertLogoutPlayer %s %d", packet->login, pid[n]);

		InsertLogoutPlayer(pid[n]);
	}
	
	if (DeleteLogonAccount(packet->login, peer->GetHandle()))
	{
		if (g_log)
			sys_log(0, "LOGOUT %s ", packet->login);
	}
}

void CClientManager::QUERY_CHANGE_NAME(CPeer * peer, DWORD dwHandle, TPacketGDChangeName * p)
{
	char queryStr[QUERY_MAX_LEN];

	if (g_stLocale == "sjis")
		snprintf(queryStr, sizeof(queryStr),
				"SELECT COUNT(*) as count FROM player%s WHERE name='%s' collate sjis_japanese_ci AND id <> %u", 
				GetTablePostfix(), p->name, p->pid);
	else
		snprintf(queryStr, sizeof(queryStr),
			"SELECT COUNT(*) as count FROM player%s WHERE name='%s' AND id <> %u", GetTablePostfix(), p->name, p->pid);

	std::unique_ptr<SQLMsg> pMsg(CDBManager::instance().DirectQuery(queryStr, SQL_PLAYER));

	if (pMsg->Get()->uiNumRows)
	{
		if (!pMsg->Get()->pSQLResult)
		{
			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
			return;
		}

		MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);

		if (*row[0] != '0')
		{
			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
			return;
		}
	}   
	else
	{
		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
		return;
	}

	snprintf(queryStr, sizeof(queryStr),
			"UPDATE player%s SET name='%s',change_name=0 WHERE id=%u", GetTablePostfix(), p->name, p->pid);

	std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr, SQL_PLAYER));

	TPacketDGChangeName pdg;
	peer->EncodeHeader(HEADER_DG_CHANGE_NAME, dwHandle, sizeof(TPacketDGChangeName));
	pdg.pid = p->pid;
	strlcpy(pdg.name, p->name, sizeof(pdg.name));
	peer->Encode(&pdg, sizeof(TPacketDGChangeName));
}

 

 

Thank you again. You are helping me a lot. 

I have installed the sash and cheque system and have now also entered these in the query. This worked and the game tried to load. 

After the loading bar has reached 100%, the UI appears but the loading screen remains. This is the text from the client/syserr.txt (image is in the right folder, just not loading, I can fix that myself).

Spoiler

0303 00:18:11215 :: Traceback (last call):

0303 00:18:11215 :: File “networkModule.py”, line 247, in SetGamePhase

0303 00:18:11215 :: File “game.py”, line 126, in __init__

0303 00:18:11215 :: File “title_system.py”, line 205, in __init__

0303 00:18:11215 :: File “title_system.py”, line 238, in Load

0303 00:18:11216 :: File “ui.py”, line 2439, in __init__

0303 00:18:11216 :: RuntimeError
0303 00:18:11216 :: : 
0303 00:18:11216 :: Image could not be loaded (filename: d:/ymir work/TitleSystem/horizontal_bar/center.tga)
0303 00:18:11216 :: 

0303 00:18:58535 :: Traceback (last call):

0303 00:18:58535 :: File “game.py”, line 2069, in BINARY_ServerCommand_Run

0303 00:18:58535 :: AttributeError
0303 00:18:58535 :: : 
0303 00:18:58535 :: 'GameWindow' object has no 'serverCommander' attribute
0303 00:18:58535 :: 

0303 00:18:58535 :: Unknown server command xmas_snow 1 | xmas_snow
0303 00:18:58535 :: Traceback (last call):

0303 00:18:58535 :: File “game.py”, line 2069, in BINARY_ServerCommand_Run

0303 00:18:58535 :: AttributeError
0303 00:18:58535 :: : 
0303 00:18:58535 :: 'GameWindow' object has no 'serverCommander' attribute
0303 00:18:58535 :: 

0303 00:18:58535 :: Unknown server command xmas_tree 1 | xmas_tree
0303 00:18:58535 :: Traceback (most recent call last):

0303 00:18:58535 :: File “game.py”, line 2069, in BINARY_ServerCommand_Run

0303 00:18:58535 :: AttributeError
0303 00:18:58535 :: : 
0303 00:18:58536 :: 'GameWindow' object has no 'serverCommander' attribute
0303 00:18:58536 :: 

0303 00:18:58537 :: Traceback (last call):

0303 00:18:58537 :: File “game.py”, line 2069, in BINARY_ServerCommand_Run

0303 00:18:58537 :: AttributeError
0303 00:18:58537 :: : 
0303 00:18:58537 :: 'GameWindow' object has no 'serverCommander' attribute
0303 00:18:58537 :: 

0303 00:18:58537 :: Unknown server command DayMode dark | DayMode
0303 00:18:58987 :: Traceback (most recent call last):

0303 00:18:58987 :: File “networkModule.py”, line 247, in SetGamePhase

0303 00:18:58988 :: File “game.py”, line 126, in __init__

0303 00:18:58988 :: File “title_system.py”, line 205, in __init__

0303 00:18:58988 :: File “title_system.py”, line 238, in Load

0303 00:18:58988 :: File “ui.py”, line 2439, in __init__

0303 00:18:58988 :: RuntimeError
0303 00:18:58988 :: : 
0303 00:18:58988 :: Image could not be loaded (filename: d:/ymir work/TitleSystem/horizontal_bar/center.tga)
0303 00:18:58988 :: 

What are the other errors? I don't know where the commands are set that it reported as errors. Hopefully anyone can help me. 


 

Edited by thelittlemarkus
Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169746
Share on other sites

Something is not added right. Maybe a binary part is missing or wrong placed. Or tabs in game.py? What do you have on 2069 from game.py?

I would recommend to revert the sash and cheque system. Try to add one system by time so you can figure it out where the problem is. Let just title, see if everything works then go to another one.

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169755
Share on other sites

I have successfully installed the sash and cheque system. The game then ran for a very long time until I installed the title system, it must be because of that. 

I looked through everything again, every file, and only found one or two parts where I'm not sure if it's right. Can you take a look via VNC? I think this is the faster way. 

Of course you'll get something if we're successful

Link to comment
https://metin2.dev/topic/13843-title-system-034/#findComment-169758
Share on other sites

Don't use any images from : imgur, turkmmop, freakgamers, inforge, hizliresim... Or your content will be deleted without notice...
Use : https://metin2.download/media/add/

Please use https://metin2.download/ when uploading files smaller than 100MB, otherwise the approval will take longer due to manual upload.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • 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.