-
Posts
170 -
Joined
-
Last visited
-
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by nazox
-
-
Thanks @ Malí for the system, you are incredible! and @ Owsap for the script, all work great!.
(Forgot the names of NPC i don't translate that.)
11 hours ago, kza54 said:Excuse me, I posted a thank you message here for access to the download links, and my post was deleted, may I know why? While in addition I have a problem with this system I don't even know if I have the right to post now.
My problem with this system :
In my client I added the "say(locale_quest(14188))" (Please excuse me in advance if it is written in French in my locale_quest.txt because I am French)14188 Veuillez d'abord invoquer votre buffeuse.
14189 Veuillez mettre le nom de votre choix.
14190 Félicitations, votre nom de buff a changé.
14191 Une erreur s'est produite. Veuillez réessayer..
14196 Veuillez essayer un autre nom.
14192 Buffi Dragon
14193 Pouvoir du Dragon Buff
14194 Buffi Vitesse du vent
14195 Attaque renforcée de Buffi
14197 Vous n'avez aucune compétence de buff pour avoir besoin d'une mise à niveau.
14198 Veuillez sélectionner une compétence.Server side :
quest __buffi__ begin
state start begin
when 952006.use begin
say_title(item_name(952006))
say("")
if pc.get_buffi_count() < 1 then
say(locale_quest(14188))
return
end
say(locale_quest(14189))local result = pc.set_buffi_name(tostring(input()))
say_title(item_name(952006))
say("")
if result == 99 then
say(locale_quest(14190))
item.set_count(item.get_count()-1)
elseif result == 0 then
say(locale_quest(14191))
elseif result == 1 or result == 2 then
say(locale_quest(14196))
end
end
function BuildSkillList()
local skillIdxList = {164, 165, 166, 167}
local skillNameList = {locale_quest(14192), locale_quest(14193), locale_quest(14194), locale_quest(14195)}
local ret_vnum_list = {}
local ret_name_list = {}
table.foreach(skillIdxList,
function(i, skillIdx)
local skillLevel = pc.get_skill_level(skillIdx)
if skillLevel >= 30 and skillLevel < 40 then
table.insert(ret_vnum_list, skillIdx)
table.insert(ret_name_list, skillNameList[i])
end
end)
return {ret_vnum_list, ret_name_list}
endwhen 952005.use begin
if get_time() < pc.getqf("next_time_buffi") then
if pc.is_skill_book_no_delay() then
say_title(locale_quest(9913))
say(locale_quest(9935))
wait()
else
say_title(locale_quest(9913))
say(locale_quest(9936))
return
end
endlocal result = __buffi__.BuildSkillList()
local vnum_list = result[1]
local name_list = result[2]
say_title(item_name(952005))
say("")if table.getn(vnum_list) == 0 then
say(locale_quest(14197))
return
endsay(locale_quest(14198))
local menu_list = {}
table.foreach(name_list, function(i, name) table.insert(menu_list, name) end)
table.insert(menu_list, locale_quest(1117))
local s=select_table(menu_list)
if table.getn(menu_list) == s then
return
endlocal skill_name=name_list[s]
local skill_vnum=vnum_list[s]
local skill_level = pc.get_skill_level(skill_vnum)
local cur_alignment = pc.get_real_alignment()
local need_alignment = 1000+500*(skill_level-30)say_title(locale_quest(9913))
say(locale_quest(9942))if cur_alignment<-19000+need_alignment then
say_reward(locale_quest(9914))
return
endif cur_alignment<0 then
say_reward(string.format(locale_quest(9915), need_alignment, need_alignment*2))
say_reward(locale_quest(9916))
need_alignment=need_alignment*2
elseif cur_alignment<need_alignment then
say_reward(string.format(locale_quest(9917), need_alignment))
say_reward(locale_quest(9918))
else
say_reward(string.format(locale_quest(9917), need_alignment))
endlocal s= select(locale_quest(10065), locale_quest(10066))
if s==2 then
return
endif get_time() < pc.getqf("next_time_buffi") then
if pc.is_skill_book_no_delay() then
pc.remove_skill_book_no_delay()
else
say_title(locale_quest(9913))
return
end
endpc.setqf("next_time_buffi", get_time() + time_hour_to_sec(number(8, 12)))
if need_alignment>0 then
if pc.count_item(952005) > 0 then
local title=string.format(locale_quest(9941), name_list[s])if pc.learn_grand_master_skill(skill_vnum) then
pc.change_alignment(-need_alignment)
say_title(title)
say_reward(locale_quest(9923))
if 40 == pc.get_skill_level(skill_vnum) then
say(locale_quest(9925))
say(string.format(locale_quest(9926), name_list[s]))
say(locale_quest(9927))
else
say(locale_quest(9928))
say(string.format(locale_quest(9929), name_list[s], skill_level-30+1+1))
end
say_reward(locale_quest(9930))
say_reward(string.format(locale_quest(9931), need_alignment))
else
say_title(title)
say_reward(locale_quest(9932))
say(locale_quest(9933))
say_reward(locale_quest(9934))
pc.change_alignment(-number(need_alignment/3, need_alignment/2))
end
pc.remove_item(952005)
end
end
end
end
endInGame :
https://metin2.download/picture/0DuFaN3XJ16kadvf7olS369rjWFQM533/.png
Hello, you add in quest_functions:
Spoilerlocale_quest
locale_string
locale_in
locale_mn
locale_sn
locale_psn
locale_ox
in questlib.lua:
Spoiler-- @desc: function for locale quest converstion
-- @ref: https://www.lua.org/pil/5.2.html
-- @author: Owsap
locale_quest = function(vnum, ...)
local val = ""
for i, v in ipairs(arg) do
val = val .. tostring(string.format(";%s", v))
end
return string.format("[LC;%d%s]", vnum, val)
end
locale_string = function(vnum, ...)
local val = ""
for i, v in ipairs(arg) do
val = val .. tostring(string.format(";%s", v))
end
return string.format("[LS;%d%s]", vnum, val)
end
locale_in = function(vnum)
return string.format("[IN;%d]", vnum)
end
locale_mn = function(vnum)
return string.format("[MN;%d]", vnum)
end
locale_sn = function(vnum)
return string.format("[SN;%d]", vnum)
end
locale_psn = function(vnum)
return string.format("[PSN;%d]", vnum)
end
locale_ox = function(vnum)
return string.format("[LOX;%d]", vnum)
end
If even with this, you have this error, you can try the script that Owsap provided us, with which you can translate the translate.lua and not worry about the quests, since you will execute the corresponding LC according to the phrase for example "gameforge.metin2" in translate.lua would have something like "gameforge.metin2 = Hello" with the script it would become something like "gameforge.metin2 = [LC;01]" and within the game, it would execute the file "locale_quest 01 = Hello" like the photo I posted in my post.
-
Nice work I love it !
-
You don't need create new folder with name "ymir work", you need add in etc folder, etc/ymir work/ui/pattern/thinboardcircle <- add here your files, if you don't have folder name thinboardcircle you can create, compile with your eternexus/eterpack and enjoy.
-
5 minutes ago, Marcos17 said:
I can implement one or the other, apparently few or no one has managed to implement both.
I can't try to fix all kingdoms because I can't work this system, I think the problem for me is from DayType system because I have DayType NIGHT on BoundingSpherePosition but doesn't work. So sorry I can't help you with other kingdoms xD
-
I have the same problem of the last time, in day and night the lantern is on, i try add with crc, without crc, reinstaling 10 times the system and reinstall the system DayType, compare with other guys from this post working but i can't, i try to add effect with World Editor but idk, any idea?, thanks.
-
Hello again @ Owsap again thanks for the system work very great:
But maybe people have a few problems, because don't have functions or like that.
The first, you need to change certain functions as mentioned @Dominic. in Uicommon.py:
Spoilerclass QuestionDialog(ui.ScriptWindow): def GetTextSize(self): if self.textLine: return self.textLine.GetTextSize() return (0,0) def SetLineHeight(self, Height): self.textLine.SetLineHeight(Height)
and uiEscapePopoup.py:
Spoilerdef __EscapePopupRangeCheck(self): SHOW_UI_WINDOW_LIMIT_RANGE = 1000 (x, y, z) = player.GetMainCharacterPosition() # if abs(x - self.escape_window_open_x) > player.SHOW_UI_WINDOW_LIMIT_RANGE or abs(y - self.escape_window_open_y) > player.SHOW_UI_WINDOW_LIMIT_RANGE: if abs(x - self.escape_window_open_x) > SHOW_UI_WINDOW_LIMIT_RANGE or abs(y - self.escape_window_open_y) > SHOW_UI_WINDOW_LIMIT_RANGE: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_ESCAPE_FAR_DISTANCE) self.Close()
If you have the problem with
Spoilernet.SendCommandPacket("/escape")
Change with:
Spoilernet.SendChatPacket("/escape")
If you lost some functions like (SetLineHeight, GetLineHeight, etc) you need add the system (or functions) from here:
(you can use this version or @ Mali version).
Thanks again :).
- 1
-
Thanks @ Owsap i'm fixing button, but work, nice released thanks!
edit1: if someone don't have
Quotedef __del__(self):
ui.ScriptWindow.__del__(self)
if app.OWSAP_ESCAPE:
del self.tooltipyou cand add on def Destroy:
Quotedef Destroy(self):
self.ClearDictionary()
if self.gameOptionDlg:
self.gameOptionDlg.Destroy()
if self.systemOptionDlg:
self.systemOptionDlg.Destroy()
if app.OWSAP_ESCAPE:
del self.tooltipself.__Initialize()
- 1
-
Remove ride quest and all mounts quest.
- 1
-
Hello @ Mali thanks for the system, and sorry to revive this, this is a little update to after use the command and the players are kicked, the account automaticaly have "BLOCK" on navicat
Open ipban.cpp and replace function with:
Spoiler#ifdef IP_BAN <--Change with your macro
void do_ipban(LPCHARACTER ch, const char *argument, int cmd, int subcmd)
{
char arg1[256];
one_argument(argument, arg1, sizeof(arg1));if (!*arg1) {
ch->ChatPacket(CHAT_TYPE_INFO, "Uso: ipban <nombre>");
return;
}std::unique_ptr<SQLMsg> checkAccountStatus(DBManager::instance().DirectQuery("SELECT status FROM account.account WHERE id = (SELECT account_id FROM player.player WHERE name = '%s')", arg1));
if (checkAccountStatus->Get()->uiNumRows)
{
const auto statusRow = mysql_fetch_row(checkAccountStatus->Get()->pSQLResult);
const std::string accountStatus(statusRow[0]);if (accountStatus == "BLOCK")
{
ch->ChatPacket(CHAT_TYPE_INFO, "La cuenta de %s's esta actualmente baneada.", arg1);
return;
}
else {
std::unique_ptr<SQLMsg> blockAccount(DBManager::instance().DirectQuery("UPDATE account.account SET status = 'BLOCK' WHERE id = (SELECT account_id FROM player.player WHERE name = '%s')", arg1));if (blockAccount->Get()->uiAffectedRows > 0) {
ch->ChatPacket(CHAT_TYPE_INFO, "La cuenta de %s's ha sido baneada.", arg1);
}
else {
ch->ChatPacket(CHAT_TYPE_INFO, "Error al bnear la cuenta de %s's .", arg1);
return;
}
}
}
else {
ch->ChatPacket(CHAT_TYPE_INFO, "No se encuentra al jugador %s", arg1);
return;
}LPDESC d = DESC_MANAGER::instance().FindByCharacterName(arg1);
if (d && d->GetCharacter()) {
if (ch == d->GetCharacter()) {
ch->ChatPacket(CHAT_TYPE_INFO, "No puedes banearte a ti mismo.");
return;
}if (d->GetCharacter()->IsGM()) {
ch->ChatPacket(CHAT_TYPE_INFO, "No puedes banear a un GameMaster.");
return;
}std::unique_ptr<SQLMsg> msg(DBManager::instance().DirectQuery("SELECT ip FROM player.player WHERE name = '%s'", d->GetCharacter()->GetName()));
if (msg->Get()->uiNumRows) {
const auto row = mysql_fetch_row(msg->Get()->pSQLResult);
AddBanIP(row[0]);
ch->ChatPacket(CHAT_TYPE_INFO, "El jugador %s ha sido baneado, con ip: %s", d->GetCharacter()->GetName(), row[0]);
DESC_MANAGER::instance().DestroyDesc(d); // Desconectar al jugador inmediatamente
}
else {
ch->ChatPacket(CHAT_TYPE_INFO, "Error al busca la IP %s", arg1);
}
}
else {
ch->ChatPacket(CHAT_TYPE_INFO, "No se encuentra %s", arg1);
}
}
#endifIt's a shame we have to restart to apply the changes, because until then you can continue connecting/creating accounts, I'm still looking into this, anyway, thank you very much, you always do an incredible job.
-
Hello, you can edit your npc.txt with excel or something like that, and edit "dir" to rotate your npc, are 9 possible values:
1. South direction
2. South-East direction
3. East direction
4. North-East direction
5. North direction
6. North-West direction
7. West direction
8. Southwest direction
0. Random direction (among the 8 previous ones)
and this is a useful image to guide you:
you can read more here:
thanks to @ Veltor88 for the guide.
-
Idk this i don't remember this problem xd, but when you have this problem on item_proto or mob_proto is because you need compile src:
1.Src game
2.Src DB
3.Dump_proto from item and mob
4.shutdown -r now
5.play and have fun.
-
22 hours ago, SussyFlore96 said:
Same problem for me as well, same svf as well
Try: /x1 and /xmas_snow 1 and try
-
19 hours ago, LoKnarash said:
Have you change in fire_ob-b1-013-lamp02.mse? you must add DayType DAY or DayType NIGHT under "BoundingSpherePosition"
Thanks i don't read this post from Mali, my fault.
- 1
-
On 10/12/2023 at 1:05 AM, Marcos17 said:
I have the same problem, whether day or night the flashlights have the effect...
Someone?
-
-
On 10/23/2022 at 3:59 PM, bekolay1 said:
1023 16:55:22017 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/back_dot.prb 1023 16:55:22034 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/box04.prb 1023 16:55:22043 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/wall_lantern.prb 1023 16:55:22044 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/vent06.prb 1023 16:55:22044 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/vent04.prb 1023 16:55:22044 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/vent03.prb 1023 16:55:22044 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/vent01.prb 1023 16:55:22045 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/ropeset03.prb 1023 16:55:22046 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/rope03.prb 1023 16:55:22046 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/right.prb 1023 16:55:22047 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/steerhandle.prb 1023 16:55:22047 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/rail_crack05.prb 1023 16:55:22048 :: CProperty::ReadFromMemory: File format error after FourCC: property/defensewave/rail_crack02.prb
error ploblemThe same problem, i think maybe is problem from eternexus
-
On 10/8/2023 at 12:18 PM, chairman said:
Hi, where should I use this CRCS?
PropertyManager.cpp:
Quote#if defined(__BL_AUTO_LANTERN_EFFECT__)
const std::string strFileName(pProperty->GetFileName());
if (m_dwLanternCRC == 0xffffffff && strFileName.find("ob-b1-013-lamp02.prb") != std::string::npos)
m_dwLanternCRC = 2288483325;
else if (m_dwLanternEffectCRC == 0xffffffff && strFileName.find("fire_ob-b1-013-lamp02.mse.pre") != std::string::npos)
m_dwLanternEffectCRC = 3363030126;
#endifBtw @ Mali thanks, work great, but i have a doubt, when i put /x1 (day) the light is on, and you know how i can fix the effect? You can see the brightness, but the lamps look off
-
Thanks for share the fix i appreciate!!
-
Hello again @ TMP4 ITEM_QUEST / CONFIRM_WHEN_USE and others doesn't work, i fixed it, maybe is no the best solution, but for me work.
1-Make copy your files.
2-Go to: /usr/metin2/src/common and open Item_lenght.h and search:
Spoilerenum EItemFlag
{
ITEM_FLAG_REFINEABLE = (1 << 0),
ITEM_FLAG_SAVE = (1 << 1),
ITEM_FLAG_STACKABLE = (1 << 2), // ¿©·¯°³ ÇÕÄ¥ ¼ö ÀÖÀ½
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3),
ITEM_FLAG_SLOW_QUERY = (1 << 4),
ITEM_FLAG_UNUSED01 = (1 << 5), // UNUSED
ITEM_FLAG_UNIQUE = (1 << 6),
ITEM_FLAG_MAKECOUNT = (1 << 7),
ITEM_FLAG_IRREMOVABLE = (1 << 8),
ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 9),
ITEM_FLAG_QUEST_USE = (1 << 10),
ITEM_FLAG_QUEST_USE_MULTIPLE = (1 << 11),
ITEM_FLAG_QUEST_GIVE = (1 << 12),
ITEM_FLAG_LOG = (1 << 13),
ITEM_FLAG_APPLICABLE = (1 << 14),
};If we look closely, we will see that it does not add up, we have a function that is "UNUSED" and FLAG_ITEM_QUEST does not exist, not to mention that it does not match the position of the files.
Well, let's go to fix this, after you open and search, replace with this:
Spoilerenum EItemFlag
{
ITEM_FLAG_REFINEABLE = (1 << 0),
ITEM_FLAG_SAVE = (1 << 1),
ITEM_FLAG_STACKABLE = (1 << 2), // ¿©·¯°³ ÇÕÄ¥ ¼ö ÀÖÀ½
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3),
ITEM_FLAG_SLOW_QUERY = (1 << 4),
//ITEM_FLAG_UNUSED01 = (1 << 5), // UNUSED
ITEM_FLAG_UNIQUE = (1 << 5),
ITEM_FLAG_MAKECOUNT = (1 << 6),
ITEM_FLAG_IRREMOVABLE = (1 << 7),
ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 8),
ITEM_FLAG_QUEST_USE = (1 << 9),
ITEM_FLAG_QUEST_USE_MULTIPLE = (1 << 10),
ITEM_FLAG_QUEST_GIVE = (1 << 11),
ITEM_FLAG_ITEM_QUEST = (1 << 12),
ITEM_FLAG_LOG = (1 << 13),
ITEM_FLAG_APPLICABLE = (1 << 14),
};Or just, remove the "ITEM_FLAG_UNUSED01" and add "ITEM_FLAG_ITEM_QUEST" after "ITEM_FLAG_QUEST_GIVE"
3.Compile game, and go to db/ProtoReader.cpp and search;
Spoilerstring arFlag[] = {"ITEM_TUNABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE",
"ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE",
"QUEST_GIVE", "ITEM_QUEST", "LOG", "STACKABLE", "SLOW_QUERY", "REFINEABLE", "IRREMOVABLE", "ITEM_APPLICABLE"};You can se, how this call "ITEM_TUNABLE" but this doesn't exist, apart the count max in item_lenght.h is 14 but here you have 17, so now change with this:
Quotestring arFlag[] = {"ITEM_REFINEABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE",
"ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE",
"QUEST_GIVE", "ITEM_QUEST", "LOG", "ITEM_APPLICABLE"};4.Now compile DB and go to Source Client/UserInterface and open PythonItemModule.cpp and comment this line:
Spoiler//PyModule_AddIntConstant(poModule, "ITEM_FLAG_RARE", CItemData::ITEM_FLAG_RARE);
4.1.Now go to GameLib/itemData.h and search:
Spoilerenum EItemFlag
{
ITEM_FLAG_REFINEABLE = (1 << 0), // °³·® °¡´É
ITEM_FLAG_SAVE = (1 << 1),
ITEM_FLAG_STACKABLE = (1 << 2), // ¿©·¯°³ ÇÕÄ¥ ¼ö ÀÖÀ½
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // °¡°ÝÀÌ °³¼ö / °¡°ÝÀ¸·Î º¯ÇÔ
ITEM_FLAG_SLOW_QUERY = (1 << 4), // °ÔÀÓ Á¾·á½Ã¿¡¸¸ SQL¿¡ Äõ¸®ÇÔ
ITEM_FLAG_RARE = (1 << 5),
ITEM_FLAG_UNIQUE = (1 << 6),
ITEM_FLAG_MAKECOUNT = (1 << 7),
ITEM_FLAG_IRREMOVABLE = (1 << 8),
ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 9),
ITEM_FLAG_QUEST_USE = (1 << 10), // Äù½ºÆ® ½ºÅ©¸³Æ® µ¹¸®´ÂÁö?
ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 11), // Äù½ºÆ® ½ºÅ©¸³Æ® µ¹¸®´ÂÁö?
ITEM_FLAG_UNUSED03 = (1 << 12), // UNUSED03
ITEM_FLAG_LOG = (1 << 13), // »ç¿ë½Ã ·Î±×¸¦ ³²±â´Â ¾ÆÀÌÅÛÀΰ¡?
ITEM_FLAG_APPLICABLE = (1 << 14),
};Replace:
Spoilerenum EItemFlag
{
ITEM_FLAG_REFINEABLE = (1 << 0), // °³·® °¡´É
ITEM_FLAG_SAVE = (1 << 1),
ITEM_FLAG_STACKABLE = (1 << 2), // ¿©·¯°³ ÇÕÄ¥ ¼ö ÀÖÀ½
ITEM_FLAG_COUNT_PER_1GOLD = (1 << 3), // °¡°ÝÀÌ °³¼ö / °¡°ÝÀ¸·Î º¯ÇÔ
ITEM_FLAG_SLOW_QUERY = (1 << 4), // °ÔÀÓ Á¾·á½Ã¿¡¸¸ SQL¿¡ Äõ¸®ÇÔ
//ITEM_FLAG_RARE = (1 << 5),
ITEM_FLAG_UNIQUE = (1 << 5),
ITEM_FLAG_MAKECOUNT = (1 << 6),
ITEM_FLAG_IRREMOVABLE = (1 << 7),
ITEM_FLAG_CONFIRM_WHEN_USE = (1 << 8),
ITEM_FLAG_QUEST_USE = (1 << 9), // Äù½ºÆ® ½ºÅ©¸³Æ® µ¹¸®´ÂÁö?
ITEM_FLAG_QUEST_USE_MULTIPLE= (1 << 10), // Äù½ºÆ® ½ºÅ©¸³Æ® µ¹¸®´ÂÁö?
ITEM_QUEST_GIVE = (1 << 11),
ITEM_FLAG_ITEM_QUEST = (1 << 12), // UNUSED03
ITEM_FLAG_LOG = (1 << 13), // »ç¿ë½Ã ·Î±×¸¦ ³²±â´Â ¾ÆÀÌÅÛÀΰ¡?
ITEM_FLAG_APPLICABLE = (1 << 14),
};5.In the end, compile Source Client, and open Dump_proto/ItemCSVReader.cpp and search:
Spoilerint get_Item_Flag_Value(string inputString)
{string arFlag[] = {"ITEM_REFINEABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE",
"ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE",
"QUEST_GIVE", "ITEM_QUEST", "LOG", "STACKABLE", "SLOW_QUERY", "REFINEABLE", "IRREMOVABLE", "ITEM_APPLICABLE"};Replace:
Quoteint get_Item_Flag_Value(string inputString)
{string arFlag[] = {"ITEM_REFINEABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE",
"ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE",
"QUEST_GIVE", "ITEM_QUEST", "LOG", "ITEM_APPLICABLE"};Compile, dump the item/mob replace in locale, and have fun!!
https://metin2.download/picture/Vvv5TUrRwXW4bLbSHP31Yx8ohV20rB9G/.gif
9 minutes ago, TMP4 said:The problem I don't have backup of the video file and youtube won't let you download it if it's striked.
If I have backup, I would reupload it to somewhere else.
What is the video about? I don't remember, I can record one myself and do you a favor, greetings.
-
8 hours ago, TMP4 said:
It's complicated, but you can try this:
https://support.google.com/youtube/answer/6395024?hl=es&dark=1&sjid=10250177798839608775-EU
i read you can remove o cut parts from video, so change tittle or anything that says metin2, webzen or make it blurry so that the name is not seen @ TMP4 -
On 14/12/2022 at 20:37, StarSoul said:
¿Qué es esto? ¿Esto te permite ver archivos de Granny? ¿Te permite editarlos? ¿Te permite exportarlos a otros formatos de archivo? ¿Te permite convertir archivos a archivos .GR2? Se necesita una explicación.
This, give you the chance, to change your old .gr2 (2.9, 2.4 2.x) to .gr2 (2.11.8) or inverse, the Granny_common is "source"
- 1
-
Edit: in the end I decided to go for it and as I liked it, I adapted it and fixed it for my server.
As I told you in the other message, you can use the normal drop, with the range you want, now I will attach a fragment of my mob_drop_item, where I made several tests that you can see in the video. By the way, remember that it works also for common_drop_item, greetings, and I hope I solved your question.
Mob_drop_item old code example (using the warrior armour lv70);
QuoteGroup City1
{
Mob 171 --Dog
Type drop
1 11290 1 50
2 11291 1 50
3 11292 1 50
4 11293 1 50
5 11294 1 50
6 11295 1 50
7 11296 1 50
8 11297 1 50
9 11298 1 50
10 11299 1 50
}New code with the system:
QuoteGroup City1
{
Mob 171 --Dog
Type drop
1 11290~11299 1 100
}Examples using mob_drop_item:
QuoteGroup City1
{
Mob 171 --Dog
Type drop
1 10 1 100 --Sword
}
Group City1
{
Mob 8001~8005 --Metin Stone
Type drop
1 11400 1 100 --Blue Ninja Armour
}
Group City1
{
Mob 171,691,101 --Dog, Chief Orc, Dog2
Type drop
1 11290~11299 1 100 --Warrior Armour +0 to +9 random2 150 1 100 --Sword <-New example
3 11295 1 50 --Warrior Armour +5 <--New example
}You can also add a mob randomly in another group, as you can see, I use 2 times the id "171" and I will receive both the item in group 1 and the item in group 2 containing that mob.
https://metin2.download/picture/fY1LkOYQr87TVjL0L10cv1ZYK66SF389/.gif
-
5 hours ago, xGalardo said:
Después de utilizar este sistema, todas las gotas deben escribirse como, por ejemplo: 30000 ~ 30000, por lo que no puedo simplemente escribir una ID de 30000 en mob_drop_item.txt.
Ejemplo:
Grupo metinstone
{
escriba drop
mob 8001
1 30000~30002 1 100
2 20000~20000 1 100
}
Entonces, ¿se deben incluir todas las identificaciones para que ~ se separe?Sorry if I don't understand it well, you mean if it's necessary or mandatory to use the "~" in all?, as far as I remember you could still do the normal drop, only this allows you to add a lot of mobs or items saving you to create a huge list, here I leave you an example of how I used it, although I don't have a copy of the system, I should have an old copy of the mob_drop, if I find it and show you how I used it, if you didn't mean it, tell me something more detailed, I'll try to explain you :), this is example:
QuoteGroup Nazox
{
Mob 101~102 <--Wild dog and dog
Type drop
1 11290~11290 1 10 <-War Weapon +0 or +9 random
2 10~219 1 95 <--Sword +0 or +9 random
3 50 1 20 <--Sword lv20 +0
4 55 1 50 <--Sword lv20 +5
}
Group Nazox2
{
Mob 101,102,691,2598 <--Wild dog, dog, Orc Chief, Azrael
Type drop
1 11210~11290 1 10 <-War Weapon lv1 to lv 70 +0 random
2 10~219 1 95 <--Sword +0 or +9 random
3 50 1 20 <--Sword lv20 +0
4 55 1 50 <--Sword lv20 +5
}Group Nazox3
{
Mob 691 <--Orc Chief
Type drop
1 11210~11290 1 10 <-War Weapon lv1 to lv 70 +0 random
2 10~219 1 95 <--Sword +0 or +9 random
3 50 1 20 <--Sword lv20 +0
4 55 1 50 <--Sword lv20 +5
} -
Yes, you have to use std::pair as @ Dex said, besides, if you have the "Drop info system" you have to adapt the code in item_manager.cpp because you replace that function and use another method in its coding, once I managed to do it but I didn't save backup and I haven't managed to do it since xD! but the few times I tried it, that system was great, by the way, if you have modifications from other systems in item_manager.cpp, item_manager_private_types.h i item_manager_read_tables.cpp try to adapt it, not just replace, and don't forget to add public_tables.cpp in makefile, after that no more modifications required in principle as far as I remember, but try to read the "HowTo.txt" file is very easy to commit problems when editing common_drop, etc.
Close Item Text Tail Color
in Features & Metin2 Systems
Posted · Edited by Metin2 Dev International
Core X - External 2 Internal
Thanks @ Malí work great :).