-
Posts
96 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by Jfirewall
-
-
A simple code that you can configure in the vector to add the maps where you do not want any boss or mob to drop their items.
service.h #define ENABLE_BLOCK_DROP_MAP utils.h search: extern void set_global_time(time_t t); add: #ifdef ENABLE_BLOCK_DROP_MAP extern bool is_drop_item(int map_index); #endif utils.cpp add: #ifdef ENABLE_BLOCK_DROP_MAP bool is_drop_item(int map_index){ vector<int> DropMap {41}; // -- add index the map (41 == jinno map) //dungeon for (int i=180000; i<190000; i++) DropMap.push_back(i); return std::find(DropMap.begin(), DropMap.end(), map_index) != DropMap.end(); } #endif char_battle.cpp search: else if (IsRevive() == true) { Reward(false); } else { Reward(true); // Drops gold, item, etc.. } replace: else if (IsRevive() == true) { Reward(false); } else { #ifdef ENABLE_BLOCK_DROP_MAP if (is_drop_item(GetMapIndex())){ Reward(false);} else { Reward(true); } } #else Reward(true); } #endif
- 1
-
def __IsSpecialMap(self): import background dis_maps = [ "metin2_map_duel", "metin2_map_ridack5", "metin2_map_t3" ] if str(background.GetCurrentMapName()) in dis_maps: return TRUE return FALSE def __OnClickPvPModeFreeButton(self): if self.__CheckPvPProtectedLevelPlayer(): return self.__RefreshPVPButtonList() if self.__IsSpecialMap(): chat.AppendChat(chat.CHAT_TYPE_INFO, "You can't do this here. ") elif constInfo.PVPMODE_ENABLE: net.SendChatPacket("/pkmode 2", chat.CHAT_TYPE_TALKING) else: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.OPTION_PVPMODE_NOT_SUPPORT)
In case someone wants to add more maps and not just 1
- 1
-
in pythonplayersettingsmodule.cpp search const bool CPlayerSettingsModule::LoadGameSound() and under add: const bool CPlayerSettingsModule::LoadGameNPC() { using namespace boost::algorithm; CMappedFile file; const VOID* pvData; if (!CEterPackManager::Instance().Get(file, NPC_LIST_FILE_NAME, &pvData)) { TraceError("CPythonPlayerSettingsModule::LoadGameNPC(fileName=%s) - Load Error", NPC_LIST_FILE_NAME); return false; } CMemoryTextFileLoader fileLoader; fileLoader.Bind(file.Size(), pvData); CTokenVector kTokenVector; for (size_t i = 0; i < fileLoader.GetLineCount(); ++i) { if (!fileLoader.SplitLineByTab(i, &kTokenVector)) continue; const uint32_t& vnum = atoi(kTokenVector[0].c_str()); std::string& name = kTokenVector[1]; trim(name); if (vnum) { CRaceManager::Instance().RegisterRaceName(vnum, name.c_str()); } else { std::string& src = kTokenVector[2]; trim(src); CRaceManager::Instance().RegisterRaceSrcName(name.c_str(), src.c_str()); } } return true; } search cpsmLoadGameSkill and under add: PyObject* cpsmLoadGameNPC(PyObject* poSelf, PyObject* poArgs) { CPlayerSettingsModule::LoadGameNPC(); return Py_BuildNone(); } search { "LoadGameSkill", cpsmLoadGameSkill, METH_VARARGS }, and add under: { "LoadGameNPC", cpsmLoadGameNPC, METH_VARARGS }, in pythonplayersettingsmodule.h search #pragma once and under add: static const char* NPC_LIST_FILE_NAME = "npclist.txt"; search const static bool LoadGameSound(); and under add: const static bool LoadGameNPC(); in root playersetingmodule.py searh def __LoadGameNPC(): and replace: def __LoadGameNPC(): if app.ENABLE_CPP_PSM: cpsm.LoadGameNPC() else: ## paste your code here pass
update npclist.txt
- 1
- 1
-
-
sysser server
-
elif itemType == item.ITEM_TYPE_COSTUME and itemSubType == item.COSTUME_TYPE_MOUNT: MountVnum = item.GetValue(3) if MountVnum != 0: self.__ModelPreview(MountVnum)
- 1
-
En 4/9/2018 a las 16:12, Kreciok dijo:
Hi even if i include grid.h i havent got pGroup->GetGroupSize() function, can someone share it?
in class CSpecialItemGroup add
int GetGroupSize() const { return m_vecProbs.size(); }
Justo ahora, firewall dijo:in class CSpecialItemGroup add item_manager.h
int GetGroupSize() const { return m_vecProbs.size(); }
- 1
-
0906 20:36:59765 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:59804 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:59818 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:59828 :: CANNOT_FIND_PACK_FILE [sound/npc/chstaruszka_mark/wait.mss] 0906 20:36:59835 :: CANNOT_FIND_PACK_FILE [sound/npc/chstaruszka_mark/wait1.mss] 0906 20:36:59847 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:59974 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:59985 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 512 0906 20:36:00052 :: CRaceManager::GetRaceDataPointer: cannot load data by dwRaceIndex 1317864192 0906 20:36:46790 :: granny_shared_vbs: 0906 20:36:46790 :: 0: 40 0906 20:36:46791 :: 1: 53 0906 20:36:46792 :: 2: 20 0906 20:36:46792 :: 3: 40 0906 20:36:46793 :: 4: 0 0906 20:36:46793 :: 5: 20 0906 20:36:46793 :: 6: 0 0906 20:36:46794 :: 7: 0 0906 20:36:46794 :: 8: 0
-
#ifdef ENABLE_ACCE_SYSTEM void CItemData::SetItemScale(const std::string strJob, const std::string strSex, const std::string strScaleX, const std::string strScaleY, const std::string strScaleZ, const std::string strPositionX, const std::string strPositionY, const std::string strPositionZ) { DWORD dwPos = 0; //DWORD dwPos; if (strJob == "JOB_WARRIOR") dwPos = NRaceData::JOB_WARRIOR; else if (strJob == "JOB_ASSASSIN") dwPos = NRaceData::JOB_ASSASSIN; else if (strJob == "JOB_SURA") dwPos = NRaceData::JOB_SURA; else if (strJob == "JOB_SHAMAN") dwPos = NRaceData::JOB_SHAMAN; dwPos += 1; if (strSex == "F") dwPos += 5; m_ScaleTable.tInfo[dwPos].fScaleX = float(atof(strScaleX.c_str()) / 100.0f); m_ScaleTable.tInfo[dwPos].fScaleY = float(atof(strScaleY.c_str()) / 100.0f); m_ScaleTable.tInfo[dwPos].fScaleZ = float(atof(strScaleZ.c_str()) / 100.0f); m_ScaleTable.tInfo[dwPos].fPositionX = float(atof(strPositionX.c_str()) * 100.0f); m_ScaleTable.tInfo[dwPos].fPositionY = float(atof(strPositionY.c_str()) * 100.0f); m_ScaleTable.tInfo[dwPos].fPositionZ = float(atof(strPositionZ.c_str()) * 100.0f); } bool CItemData::GetItemScale(DWORD dwPos, float & fScaleX, float & fScaleY, float & fScaleZ, float & fPositionX, float & fPositionY, float & fPositionZ) { fScaleX = m_ScaleTable.tInfo[dwPos].fScaleX; fScaleY = m_ScaleTable.tInfo[dwPos].fScaleY; fScaleZ = m_ScaleTable.tInfo[dwPos].fScaleZ; fPositionX = m_ScaleTable.tInfo[dwPos].fPositionX; fPositionY = m_ScaleTable.tInfo[dwPos].fPositionY; fPositionZ = m_ScaleTable.tInfo[dwPos].fPositionZ; return true; } #endif
fix the my problem
-
Hi, i am implement the systm ShoulderSash-System with Scale Function by LeNnT v 0.3
" />
syyser cleansed not game.core not db.core
the uniq error is errorlog
Module Name: J:\Metin2client\Metin2client.exe Time Stamp: 0x5b909eef - (null) Exception Type: 0xc0000005 eax: 0x30ffd293 ebx: 0x10554630 ecx: 0x00000000 edx: 0x010fd610 esi: 0x30ffd293 edi: 0x00000001 ebp: 0x010fd670 esp: 0x010fd644 0x00286c37 J:\Metin2client\Metin2client.exe 0x00294d85 J:\Metin2client\Metin2client.exe 0x001e8616 J:\Metin2client\Metin2client.exe 0x001ed022 J:\Metin2client\Metin2client.exe 0x1e0a87b7 J:\Metin2client\python27.dll 0x1e0ea900 J:\Metin2client\python27.dll 0x1e0ec65f J:\Metin2client\python27.dll 0x1e0ecd22 J:\Metin2client\python27.dll 0x1e0e93f5 J:\Metin2client\python27.dll 0x1e0ea977 J:\Metin2client\python27.dll
-
search in intrologin def open(self): and add os.remove('lang/idioma.txt') reemplace for rute the you archive
-
char.h #ifdef ENABLE_TIME_USE public: int m_iUpdate; int GetUpdatetTime() { return m_iUpdate; } void SetUpdatetTime() { m_iUpdate = thecore_pulse(); } #endif in cmd_general.cpp #ifdef ENABLE_TIME_USE ACMD(do_funciontime) int iPulse = thecore_pulse(); if (iPulse - ch->GetUpdatetTime() < PASSES_PER_SEC(10)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("in 10 secon i´m use the button")); return; } ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Hi Fire")); ch->SetUpdatetTime()(); #endif in cmd.cpp #ifdef ENABLE_TIME_USE ACMD(do_funciontime); #endif #ifdef ENABLE_TIME_USE { "funciontime", do_funciontime, 0, POS_DEAD, GM_PLAYER }, #endif function in .py net.SendChatPacket("/funciontime")
for the developers, who suddenly want to put a restriction when using a button and do not use it many times, they can put a time, I do not know if it is already public use, I only share how to do it in a simple way
-
def OnUpdate(self): if app.ENABLE_COINS_INVENTORY: self.wndCoins.SetText(localeInfo.NumberToSecondaryCoinString(constInfo.Coins)) def RefreshStatus(self): money = player.GetElk() self.wndMoney.SetText(localeInfo.NumberToMoneyString(money)) if app.ENABLE_COINS_INVENTORY: self.wndCoins.SetText(localeInfo.NumberToSecondaryCoinString(constInfo.Coins))
- 1
-
hace 4 horas, DoNSpIkE dijo:
every time i change my local.cfg into 0 1253 gr and i try to open my client i get this error https://metin2.download/picture/FtpQcE43H391E0tx9nWWiIh7Vm0bxDzs/.png
you create locale for you lenguague
- 1
-
locale.cpp search : const char* LSS_GLOBAL = "GLOBAL"; paste: const char* LSS_GRIEGO = "GRIEGO"; search: { LSS_YMIR, "kr", 949, "testtesttesttest" }, // Korea (Obsoleted) paste: { LSS_GRIEGO, "gr", 949, "texingriego" }, // texto en griego search bool LocaleService_IsEUROPE() { return (stricmp( LocaleService_GetName(), LSS_EUROPE ) == 0); } paste: bool LocaleService_IsGRIEGO() { return (stricmp( LocaleService_GetName(), LSS_GRIEGO ) == 0); } search #define _LSS_SERVICE_NAME LSS_TAIWAN paste #define _LSS_SERVICE_NAME GRIEGO root localeinfo.py search __IS_JAPAN = "locale/japan" == app.GetLocalePath() paste __IS_GRIEGO = "locale/griego" == app.GetLocalePath() search: def IsEUROPE(): global __IS_EUROPE return __IS_EUROPE paste def IsGRIEGO(): global __IS_GRIEGO return __IS_GRIEGO
- 1
-
import subprocess,app,threading,os,time Evil_ProcessList = ["notepad++.exe"] Evil_FileNameList = [".pyc",".py",".bat",".mix",".flt",".fls",".m3d"] class SuperUnsecureAndNotEnoughProtectionOfferingScript(object): def __init__(self): self.LoadSuperUnsecureSystem() def __del__(self): pass def LoadSuperUnsecureSystem(self): while 1: self.CheckForEvilFiles() self.CheckForEvilProcesses() def KillProcess(self, processname): try: os.system("taskkill /f /im %s" % processname) except: app.Exit() def DeleteFile(self, filename): try: os.remove(filename) except IOError: app.Exit() def CheckForEvilFiles(self): for file in os.listdir(os.getcwd()): for filename in Evil_FileNameList: if file.endswith(filename): self.DeleteFile(file) def CheckForEvilProcesses(self): for evil in Evil_ProcessList: if evil in subprocess.Popen("tasklist", stdout=subprocess.PIPE, shell=False).communicate()[0]: self.KillProcess(evil) if __name__ == '__main__': threading.Thread(target=SuperUnsecureAndNotEnoughProtectionOfferingScript, args=()).start()
- 1
-
paste quest
-
sysser auth
-
paste code quest
-
-
Quote
if (!CConfig::instance().GetValue("TABLE_POSTFIX", szBuf, 256))
{
sys_err("TABLE_POSTFIX not configured use default");
szBuf[0] = '\0';
}Whats is problem
-
hace 27 minutos, Shang dijo:
SYSERR: Oct 2 14:45:32 :: Set_Proto_Item_Table: ItemProto Reading Failed : Invalid value. (index: 3, col: 3, value: COSTUME_WEAPON_SWORD)
You can read the error here.
problem fix
now problem is
QuoteSYSERR: Oct 2 16:13:29 :: Start: TABLE_POSTFIX not configured use default
SYSERR: Oct 2 16:13:34 :: pid_init:
Start of pid: 1052 -
Quote
socket_connect: HOST localhost:15000, could not connect. -- change port and the problem persists
db sysser :
SYSERR: Oct 2 14:45:31 :: pid_init:
Start of pid: 853SYSERR: Oct 2 14:45:31 :: Start: TABLE_POSTFIX not configured use default
SYSERR: Oct 2 14:45:32 :: Set_Proto_Item_Table: ItemProto Reading Failed : Invalid value. (index: 3, col: 3, value: COSTUME_WEAPON_SWORD)
SYSERR: Oct 2 14:45:32 :: Set_Proto_Item_Table: 0 ~ 3 Values: 46000,0,28,
SYSERR: Oct 2 14:45:37 :: pid_init:
Start of pid: 866SYSERR: Oct 2 14:45:37 :: Start: TABLE_POSTFIX not configured use default
SYSERR: Oct 2 14:45:43 :: pid_init:
Start of pid: 875auth:
conection refused
-
search : self.__questCategorySlot[i].openImage.Show() y paste self.__questCategorySlot[i].closeImage = ui.Button() self.__questCategorySlot[i].closeImage.SetParent(self.__questCategorySlot[i]) self.__questCategorySlot[i].closeImage.SetUpVisual("Other/questcategory/quest_category_open.tga") self.__questCategorySlot[i].closeImage.SetOverVisual("Other/questcategory/quest_category_open.tga") self.__questCategorySlot[i].closeImage.SetDownVisual("Other/questcategory/quest_category_close.tga") self.__questCategorySlot[i].closeImage.SetPosition(10,5) self.__questCategorySlot[i].closeImage.SAFE_SetEvent(self.__CloseCategories, i)
closed y open
new flag so that the mobs do not move from their location
in Programming & Development
Posted · Edited by Jfirewall
a small flag so that the mobs always have their location, so that when searching for a player they are always in the same position
https://youtu.be/uDYe4AYhAZM?si=9Cs4WxFjz5Up5_PD