Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Metin2 > Metin2 Private Server > Metin2 PServer Guides & Strategies
You last visited: Today at 16:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[RLS] Einfache Quest Multi-übersetzung[Lua]

Discussion on [RLS] Einfache Quest Multi-übersetzung[Lua] within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
BΣQЦIΣƬ's Avatar
 
elite*gold: 1
Join Date: Jun 2013
Posts: 79
Received Thanks: 19
[RLS] Einfache Quest Multi-übersetzung[Lua]

Hey,

da ich das ganze noch hier aufm Pc rum liegen hab, allerdings keine
Verwendung mehr dafür habe, teile ich es mit euch.

Mit Sicherheit gibt es schon einige Releases, mit denen ihr eure Quests
übersetzen könnt. Allerdings habe ich mich am GF System orientiert, um es
noch etwas strukturierter darzustelllen.

Aber genug erzählt ...

Den download findet ihr im Anhang.

How-To:

Als erstes geht ihr in die questlib.lua und bindet die translate.lua ein.

Sucht nach:


PHP Code:
dofile("locale/germany/quest/questing.lua"
und fügt darunter folgendes ein:

PHP Code:
dofile("locale/germany/quest/translate.lua"
Anschließend ladet ihr noch die translate.lua
in euer Quest-Verzeichniss hoch.

Nun müsst ihr in der account.account Tabelle noch eine spalte "lang" hinzufügen. (int)

Nun könnt ihr problemlos alle Quests auf beliebig viele Sprachen übersetzen.

Mit diesem System wäre es auch möglich für verschiedene sprachen komplett verschiedene Quests anzubieten :P

Hier noch eine Beispielquest:

PHP Code:
quest lang begin
    state start begin
        when login with get_lang
() == "none" begin
            send_letter
("Select Language")
        
end
        when button 
or info begin
            local lang 
get_lang()
            if 
lang == or lang == "none" then
                say_title
(quest_1[lang].title)
                
say("")
                
say(quest_1[lang].say_1)
                
say(quest_1[lang].say_2)
                
local s select(quest_1[lang].sel_1quest_1[lang].sel_2)
                if 
== 1 then
                    set_lang
("de")
                    
chat(quest_1[get_lang()].confirmLang)
                    
set_state("test")
                elseif 
== 2 then
                    set_lang
("en")
                    
chat(quest_1[get_lang()].confirmLang)
                    
set_state("test")
                
end
                send_letter
("Select Language")
            
end
        end
    end
    state test begin
        when login with get_lang
() == "de" or get_lang() == "en" begin
            send_letter
(quest_1[get_lang()].questname.title)
        
end
        when button 
or info begin
            say_title
(quest_1[get_lang()].questname.title)
            
say("")
            
say(quest_1[get_lang()].questname.text)
            
wait()
        
end
    end
end 
LG BΣQЦIΣƬ
Attached Files
File Type: rar translate.rar (613 Bytes, 181 views)
BΣQЦIΣƬ is offline  
Thanks
2 Users
Old 06/07/2017, 19:37   #2


 
elite*gold: 1810
Join Date: Jan 2012
Posts: 2,208
Received Thanks: 1,630
Ganz nett.

Vielleicht hilft dir das weiter, um noch besser zu coden.
MaxChri is offline  
Thanks
3 Users
Old 06/07/2017, 22:07   #3
 
VegaS ♆'s Avatar
 
elite*gold: 10
Join Date: Jul 2013
Posts: 93
Received Thanks: 416
  • This structure is very strange and does not look too good, but thanks for sharing.
  • Here is my quick method that should work just as well.


Execute query on account (CTRL+Q):
Code:
ALTER TABLE `account`
ADD COLUMN `language` varchar(2) NOT NULL DEFAULT 'de' AFTER `login`;
Default language will be German if he not selected nothing first one, there not need to be things like "none" etc.

How to use:
translate.lua:
Code:
translate["en"].arena_manager = {}
translate["en"].arena_manager.say_title = "English!"
translate["de"].arena_manager = {}
translate["de"].arena_manager.say_title = "Federal Republic of Germany!"
translate["it"].arena_manager = {}
translate["it"].arena_manager.say_title = "The Italian Republic!"
Use in quest like:
Code:
say(translate[pc.get_language()].arena_manager.say_title)
Quest:
Code:
--[[
###########################
# QuestFunction:
	pc.set_language	-- Update the language of account;
	pc.get_language -- Returns: [1] lua_String: the account language;
###########################
]]
quest select_language begin
	state start begin
		when login begin
			send_letter("DBG: Select lang")
		end
		
		when button or info begin
			languageOptionDict = {
				{"en", "English"},
				{"it", "Italy"},
				{"de", "Deutschland"},
				{"es", "Spanish"},
				{"pl", "Poland"},
				{"hu", "Hungary"},
				{"tr", "Turkish"},
				{"ro", "Romania"},
				{"cz", "Czech Republic"},
				{"ru", "Russia"},
				{"nl", "Netherlands"},
				{"fr", "France"}
			}

			tabsDict = {}
			TYPE_LANG_INDEX = 1
			TYPE_LANG_DESC = 2

			for i = 1, table.getn(languageOptionDict) do
				table.insert(tabsDict, languageOptionDict[i][TYPE_LANG_DESC]) end

			table.insert(tabsDict, "Exit")

			say_title("Select the language:")
			local selKey = select_table(tabsDict)
			
			if selKey == table.getn(tabsDict) then
				return end
				
			langSelected = languageOptionDict[selKey][TYPE_LANG_INDEX]
			pc.set_language(langSelected)
			syschat(string.format("DBG: pc.set_language(%s) with success.", langSelected))
		end
	end
end
Quests function (source):
Code:
//@Src/Server/game/char.h
	public:
		void SetLanguage(const char* c_pszLang);
		const char* GetLanguage() const;

//@Src/Server/game/char.cpp
void CHARACTER::SetLanguage(const char* c_pszLang)
{
	DBManager::instance().Query("UPDATE account.account SET language = '%s' WHERE id = '%d'", c_pszLang, GetDesc()->GetAccountTable().id);
}

const char* CHARACTER::GetLanguage() const
{
	std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT language FROM account.account WHERE id = '%d'", GetDesc()->GetAccountTable().id));
	return mysql_fetch_row(pMsg->Get()->pSQLResult)[0];
}

//@Src/Server/game/questlua_pc.cpp
{ "set_language",		pc_set_language	},
{ "get_language",		pc_get_language	},

int pc_set_language(lua_State* L)
{
	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	if (!ch)
		return 0;

	if (!lua_isstring(L, 1))
	{
		sys_err("QUEST : wrong argument");
		return 0;
	}

	ch->SetLanguage(lua_tostring(L, 1));
	return 1;
}
	
int pc_get_language(lua_State* L)
{
	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	if (!ch)
		return 0;

	lua_pushstring(L, ch->GetLanguage());
	return 1;
}
VegaS ♆ is offline  
Thanks
7 Users
Old 06/08/2017, 00:37   #4
 
Trix.'s Avatar
 
elite*gold: 0
Join Date: Feb 2017
Posts: 32
Received Thanks: 19
Nice!

Liebe Grüße,
Trix.
Trix. is offline  
Old 06/08/2017, 03:38   #5
 
BΣQЦIΣƬ's Avatar
 
elite*gold: 1
Join Date: Jun 2013
Posts: 79
Received Thanks: 19
Quote:
Originally Posted by VegaS ♆ View Post
  • This structure is very strange and does not look too good, but thanks for sharing.
  • Here is my quick method that should work just as well.


Execute query on account (CTRL+Q):
Code:
ALTER TABLE `account`
ADD COLUMN `language` varchar(2) NOT NULL DEFAULT 'de' AFTER `login`;
Default language will be German if he not selected nothing first one, there not need to be things like "none" etc.

How to use:
translate.lua:
Code:
translate["en"].arena_manager = {}
translate["en"].arena_manager.say_title = "English!"
translate["de"].arena_manager = {}
translate["de"].arena_manager.say_title = "Federal Republic of Germany!"
translate["it"].arena_manager = {}
translate["it"].arena_manager.say_title = "The Italian Republic!"
Use in quest like:
Code:
say(translate[pc.get_language()].arena_manager.say_title)
Quest:
Code:
--[[
###########################
# QuestFunction:
	pc.set_language	-- Update the language of account;
	pc.get_language -- Returns: [1] lua_String: the account language;
###########################
]]
quest select_language begin
	state start begin
		when login begin
			send_letter("DBG: Select lang")
		end
		
		when button or info begin
			languageOptionDict = {
				{"en", "English"},
				{"it", "Italy"},
				{"de", "Deutschland"},
				{"es", "Spanish"},
				{"pl", "Poland"},
				{"hu", "Hungary"},
				{"tr", "Turkish"},
				{"ro", "Romania"},
				{"cz", "Czech Republic"},
				{"ru", "Russia"},
				{"nl", "Netherlands"},
				{"fr", "France"}
			}

			tabsDict = {}
			TYPE_LANG_INDEX = 1
			TYPE_LANG_DESC = 2

			for i = 1, table.getn(languageOptionDict) do
				table.insert(tabsDict, languageOptionDict[i][TYPE_LANG_DESC]) end

			table.insert(tabsDict, "Exit")

			say_title("Select the language:")
			local selKey = select_table(tabsDict)
			
			if selKey == table.getn(tabsDict) then
				return end
				
			langSelected = languageOptionDict[selKey][TYPE_LANG_INDEX]
			pc.set_language(langSelected)
			syschat(string.format("DBG: pc.set_language(%s) with success.", langSelected))
		end
	end
end
Quests function (source):
Code:
//@Src/Server/game/char.h
	public:
		void SetLanguage(const char* c_pszLang);
		const char* GetLanguage() const;

//@Src/Server/game/char.cpp
void CHARACTER::SetLanguage(const char* c_pszLang)
{
	DBManager::instance().Query("UPDATE account.account SET language = '%s' WHERE id = '%d'", c_pszLang, GetDesc()->GetAccountTable().id);
}

const char* CHARACTER::GetLanguage() const
{
	std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT language FROM account.account WHERE id = '%d'", GetDesc()->GetAccountTable().id));
	return mysql_fetch_row(pMsg->Get()->pSQLResult)[0];
}

//@Src/Server/game/questlua_pc.cpp
{ "set_language",		pc_set_language	},
{ "get_language",		pc_get_language	},

int pc_set_language(lua_State* L)
{
	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	if (!ch)
		return 0;

	if (!lua_isstring(L, 1))
	{
		sys_err("QUEST : wrong argument");
		return 0;
	}

	ch->SetLanguage(lua_tostring(L, 1));
	return 1;
}
	
int pc_get_language(lua_State* L)
{
	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	if (!ch)
		return 0;

	lua_pushstring(L, ch->GetLanguage());
	return 1;
}
Yea ok if you do it via Source ... but the script is about 4 Years old
so i just wanted to share it ...

but nice to do it in source
maybe its less core using

LG BΣQЦIΣƬ
BΣQЦIΣƬ is offline  
Old 06/08/2017, 09:55   #6
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
Ihr könntet euch mal Metatables angucken, damit ist das wesentlich schneller umzusetzen (geht auch ohne Source).

Ansonsten: Sehr nervig, jedes mal mit get_lang dann zu arbeiten, aber im Grunde wird es funktionieren.

MfG
Yiv is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
Übersetzung translate.lua
02/23/2014 - Metin2 Private Server - 0 Replies
I don `t wissen, die deutsche Sprache Könnten Sie aus dem Deutschen ins Russische zu übersetzen =). translate.lua ? RGhost ? ?????????????
Suche einfache übersetzung
10/19/2013 - elite*gold Trading - 7 Replies
Frage Ist das grammatisch korrekt? -> Spielen bis zum Tod Wer mir das auf englisch übersetzt (nicht mit translater) kriegt 5 E*Gold xD (es ist wichtig) gruß
[RLS]Einfache 2x2 Farmmap
05/11/2013 - Metin2 PServer Guides & Strategies - 20 Replies
Heyho, hab hier ne 2x2 Farmmap (oder sowas) welche aber ziemlich minderwertig ist, keine Minnnimap (kann nicht rauszoomen = nur schwer ne Minnimap) und hat keine Objekte :S Das Prog. will einfach nicht bei mir:P Vielleicht könnt ihr ja was damit anfangen? Screens: http://i.epvpimg.com/6bPPe.jpg http://i.epvpimg.com/RM2wg.jpg http://i.epvpimg.com/l5Due.jpg http://i.epvpimg.com/raTWg.jpg
Compile all quest without quest's files list // Kompilieren Sie alle Quest ohne Quest
07/17/2011 - Metin2 PServer Guides & Strategies - 3 Replies
ENGLISH Hello dear community, this is a very simple guide but at the same time useful. How to compile ALL quest in the folder "quest" without the files list in the file "locale_list"? Easy! Open the file "make" and replace the content of the file with this: for f in *.quest; do ./qc $f; done Oki. Now set the 0777 permission to the file. Finally open a SSH client and sign in. Write the command: cd /game_file_folder



All times are GMT +1. The time now is 16:27.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.