Here is a small video:
Bitte melden Sie sich an, um dieses Medienelement zu sehen.
Beiträge von VegaS
-
-
Here you can post a photo with your desk setup.Bitte melden Sie sich an, um dieses Bild zu sehen.
-
Doesn t work..
What exactly not work, where is problem and where is error's?
I didn't see nothing, check tutorial with careful, for all people was working without problems, should be same with you if you not do a some mystake's. -
Topic was updated check first post, now looks full like official, new functions via python was added also can see strokes on target for each mob.
- RegisterStroke(targetVID, value)
- GetStrokeByVid(targetVID)
Bitte melden Sie sich an, um dieses Bild zu sehen. -
Bitte melden Sie sich an, um dieses Medienelement zu sehen.
Bitte melden Sie sich an, um dieses Bild zu sehen.
- Full like official.
- Change the list with mobs via char_battle.cpp
Download:
-
First one thanks for release Bitte melden Sie sich an, um diesen Link zu sehen..
Here is a version on C++ (not the best, but is ok) if someone want to use.
Bitte melden Sie sich an, um dieses Bild zu sehen.C- #include <string>
- std::string IntToRomanStr(unsigned short value)
- {
- if (value < 1)
- return "0";
- if (value > 5000)
- return "";
- struct SIntToRomanStr
- {
- unsigned short value;
- std::string strRoman;
- };
- static SIntToRomanStr const digits_subs[] = {
- 1000, "M", 900, "CM", 500, "D", 400, "CD", 100, "C", 90, "XC", 50, "L", 40, "XL", 10, "X", 9, "IX", 5, "V", 4, "IV", 1, "I"
- };
- std::string str;
- for (SIntToRomanStr const* type_identifier = digits_subs; type_identifier->value > 0; ++type_identifier)
- {
- for (; value >= type_identifier->value;)
- {
- str += type_identifier->strRoman;
- value -= type_identifier->value;
- }
- }
- return str.c_str();
- }
-
Python
- def getModule():
- EnvironmentData = {
- # Explanation:
- # 16 - (16:00:00 - 16:59:59)
- # "d:/ymir work/environment/capedragonhead.msenv" - Environment what will be set on this time.
- # You can add how many environments you want.
- 4: "d:/ymir work/environment/metin2_map_n_flame_dragon_01.msenv",
- 8: "d:/ymir work/environment/mtthunder.msenv",
- 12: "d:/ymir work/environment/bayblacksand.msenv",
- 16: "d:/ymir work/environment/capedragonhead.msenv",
- 20: "d:/ymir work/environment/snowm02.msenv",
- 22: "d:/ymir work/environment/trent02.msenv"
- }
- return EnvironmentData # Returns the dict with all items
- def getHour():
- return ((app.GetGlobalTimeStamp() / 60) / 60 % 24) # Returns the hour from server timestamp (loaded by TPacketGCTime)
- def Main():
- for key, c_pszName in getModule().iteritems():
- if getHour() is key and app.IsExistFile(c_pszName): # Checks if current hour is equal with index from dict EnvironmentData and it checks if environment exists (file .msenv) in pack.
- background.RegisterEnvironmentData(0, c_pszName) # Set the environment
- background.SetEnvironmentData(0)
Informations:
-
Zitat
He has say it
Thanks for your mention mr. Lawyer.
Google translate (german-english) is not so good and so i do not read all full, i just read some things.Who thought in this category was normal Metin2 players?
- Bitte melden Sie sich an, um dieses Bild zu sehen.
It's the first time I see a user metin which comes in a category like this (support metin2 owners) and ask such things like this.
- What he asked now means is classified in area request of one tool about hacking, he need a special category on forum, something like this: Metin2 Hacks, Bots, Cheats, Exploits & Macros.
Is not framed this category for him i think but anyway.
-
Bitte melden Sie sich an, um dieses Bild zu sehen.
Where is the sense if you posted something from 2 years ago from another forum?
Also you posted on a lot a community in same time, wtf. -
thanks. i dont have the binary or server source from this Client its not my server
That means you are a simple player on this server?
I was think you want for your server, next time explain this before to request something, thanks. -
no need to use DWORD (unsigned integer), short or unsigned short is enough.
- Full code from ymir src is based all checks on DWORD (for check level,map etc), why i will want to change and for what.
- If they do shit, let's keep to the end because nothing happens, is just coding standard from them nothing more.
- I know is shit but we should need to fuck them in ass.
C- Already is exist a check on beggining function what sended by packet
- For this you need to insert elements on map when server start(example) (need elements inserted before to check) and i not see this like "better solution" for a simple checking mapindex and level restriction, is just more coding for nothing to make other things for inserted, one for check etc.
- std::map to check these things is not so useful, we can do more simple with a simple struct.
So here is:
C- bool AllowedToWarp(LPCHARACTER ch)
- {
- struct SAllowedToWarp
- {
- unsigned short iMapIndex;
- unsigned short iLevel;
- };
- const int MAX_INDEX_CHECKED = 7;
- static SAllowedToWarp data[MAX_INDEX_CHECKED] =
- {
- { 91, 75 }, //--** Grotto of Exile 1st Floor
- { 82, 75 }, //--** Grotto of Exile 2nd Floor
- { 216, 75 }, //--** Devils Catacomb
- { 218, 90 }, //--** Cape Dragon Head
- { 219, 90 }, //--** Dawn Mist Wood
- { 220, 90 }, //--** Mount Thunder
- { 221, 90 } //--** Bay Black Sand
- };
- for (int i = 0; i < MAX_INDEX_CHECKED; i++) {
- if (ch->GetMapIndex() == data[i].iMapIndex && ch->GetLevel() < data[i].iLevel)
- return false;
- }
- return true;
- }
Everyone is free to do what he thinks is good, but all have the same result.
Thanks for your reply. -
Bitte melden Sie sich an, um dieses Bild zu sehen.
Die Nachricht ist zu kurz. Der Text muss mindestens 2 Wörter enthalten.
-
ps: Nice photo Bitte melden Sie sich an, um diesen Link zu sehen.
Here is on C++ is someone want:
C- //@Src/game/src/input_login.cpp
- // Add where you want:
- void AnalyzeWarpIsDenied(LPCHARACTER ch)
- {
- typedef std::map<DWORD,DWORD> TMapIndexes;
- TMapIndexes m_map;
- m_map[91] = 75; //--** Grotto of Exile 1st Floor
- m_map[82] = 75; //--** Grotto of Exile 2nd Floor
- m_map[216] = 75; //--** Devils Catacomb,
- m_map[218] = 90; //--** Cape Dragon Head
- m_map[219] = 90; //--** Dawn Mist Wood
- m_map[220] = 90; //--** Mount Thunder
- m_map[221] = 90; //--** Bay Black Sand
- itertype(m_map) key = m_map.find(ch->GetMapIndex());
- if (key != m_map.end() && ch->GetLevel() < key->second)
- {
- ch->ChatPacket(CHAT_TYPE_NOTICE, "Your level is too low to stay in this map. You will be teleported back to your village.");
- ch->ChatPacket(CHAT_TYPE_NOTICE, "Come back when you have level %d.", key->second);
- ch->GoHome();
- }
- }
- //1.) Search for:
- ch->SendGreetMessage();
- //2.) Add after:
- AnalyzeWarpIsDenied(ch);
-
Bitte melden Sie sich an, um dieses Bild zu sehen.
Bitte melden Sie sich an, um dieses Bild zu sehen.
I posted something like this 2 year ago on another forum, take from here:
C- //@Svn/game/src/cmd.cpp
- //1.) Search for:
- ACMD(do_who);
- //2.) Add after:
- ACMD(do_aggregate_monster);
- //1.) Search for:
- { "who", do_who, 0, POS_DEAD, GM_IMPLEMENTOR },
- //2.) Add after:
- { "aggregate_monster", do_aggregate_monster, 0, POS_DEAD, GM_PLAYER },
- //@Svn/game/src/cmd_general.cpp
- //1.) Search for:
- ACMD(do_detaillog)
- {
- ch->DetailLog();
- }
- //2.) Add after:
- ACMD(do_aggregate_monster)
- {
- if (!ch)
- return;
- #ifdef NEED_ITEM_FOR_AGGREGATE
- if (!ch->CountSpecifyItem(UNIQUE_ITEM_CAPE_OF_COURAGE))
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "<Server> You need to have item [%s] for can make this.", ITEM_MANAGER::instance().GetTable(UNIQUE_ITEM_CAPE_OF_COURAGE)->szLocaleName);
- return;
- }
- ch->RemoveSpecifyItem(UNIQUE_ITEM_CAPE_OF_COURAGE, 1);
- #endif
- ch->AggregateMonster();
- }
- //@Svn/common/service.h
- #define NEED_ITEM_FOR_AGGREGATE // Disable if you want to can do without have item in inventory.
Disable/enable automatically aggregate monster press only one time key f5.
If you want to put in other script like one button etc just put function self.RecvAggregateMonster()
I put on f5 just for see how it works, you can put where you want.Python- #1.) Search for:
- def RefreshStamina(self):
- self.interface.RefreshStamina()
- #2.) Add after:
- def IsAutoAggregateMonster(self):
- return constInfo.M2_USER["cfg"]["aggregate_monster"]
- def RecvAggregateMonster(self):
- def SetStatus(val):
- constInfo.M2_USER["cfg"]["aggregate_monster"] = val
- chat.AppendChat(chat.CHAT_TYPE_INFO, (localeInfo.M2_USER_INFO_AGGREGATE % (val)))
- if not self.IsAutoAggregateMonster():
- SetStatus(1)
- else:
- SetStatus(0)
- #root/constInfo.py
- #1.) Search for:
- CHRNAME_COLOR_INDEX = 0
- #2.) Add after:
- M2_USER = {"cfg" : {"aggregate_monster" : 0}}
- #locale/en/locale_game.txt
- M2_USER_INFO_AGGREGATE <Info> Aggregate monster status : [%d].
- #1.) Search for:
- def OnUpdate(self):
- app.UpdateGame()
- #2.) Add after:
- if self.IsAutoAggregateMonster():
- net.SendChatPacket("/aggregate_monster")
- #1.) Search for:
- onPressKeyDict[app.DIK_F1] = lambda : self.__PressQuickSlot(4)
- #2.) Add after:
- onPressKeyDict[app.DIK_F5] = lambda : self.RecvAggregateMonster()
Copy tabs from here:
- Bitte melden Sie sich an, um diesen Link zu sehen.
-
The best joke in 2017.
If someone has obtained your ssh access automatically has access to the database in which they can do all, and this joke has lost its meaning.
And also you not need to delete all shits thing if you want to do that, only to comment that and all is done, he not added privilege, now he just read the file.- //interpreter_set_privilege(cmd, level);
-
Bitte melden Sie sich an, um dieses Bild zu sehen.
-
You not need to make a loop if you not use it, for check only vnum is enough to make only this: -
Here is a much better version.
If you want code just write me via skype, because i not have so much time to make a tutorial now.Python- def SetInventoryPage(self, tokens):
- MAX_PAGE_INVENTORY = 5
- def SetCurrentPage(page):
- exListPage = [
- "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X"]
- self.curSlotPage.SetText(exListPage[page])
- def PermissionDenied(type):
- if type == "+":
- return (self.page >= MAX_PAGE_INVENTORY - 1)
- return (self.page <= 0)
- if tokens == "+" and not PermissionDenied(tokens):
- self.page += 1
- elif tokens == "-" and not PermissionDenied(tokens):
- self.page -= 1
- SetCurrentPage(self.page)
- self.inventoryPageIndex = self.page
- self.RefreshBagSlotWindow()
-
Hey. Vegas
Can you help me ?Omg man xD
You copy code from python execution online what i put for see how it works
Real code for metin is this: -
Photo:
Bitte melden Sie sich an, um dieses Bild zu sehen.Bitte melden Sie sich an, um dieses Bild zu sehen.
Bitte melden Sie sich an, um dieses Bild zu sehen.
Capture psd:
Bitte melden Sie sich an, um dieses Bild zu sehen.
Bitte melden Sie sich an, um dieses Bild zu sehen.
PSD:- Bitte melden Sie sich an, um diesen Link zu sehen.
ICONS:
- Bitte melden Sie sich an, um diesen Link zu sehen.
For who want to see how it works this code:
- Bitte melden Sie sich an, um diesen Link zu sehen.