-
Posts
656 -
Joined
-
Last visited
-
Days Won
187 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by VegaS™
-
-
Ok, I just tested right now with a default metin2 client and that's not a real 'beep', it's an 'Asterisk' sound from Windows and it comes from PythonApplication.cpp:
unsigned __GetWindowMode(bool windowed) { if (windowed) return WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX; return WS_POPUP; }
If you remove WS_SYSMENU from the style, you won't get the sound anymore but you won't see the buttons and icon too.
UPDATE
Alright, after some debugging:
Spoiler
Here is a fast fix and should work fine, I didn't test it so well.
- UserInterface\PythonApplicationProcedure.cpp
Before: https://metin2.download/video/Oy3fg6R91i9BS2L98w35mUB54hTYJOhz/.mp4 (everywhere in the client)
After: https://metin2.download/video/iNrVA5EmXXKplT3P325pTJ896q6V2p8j/.mp4
- 13
- 2
- 1
- 4
-
I may be wrong, but that's a windows issue, not a metin2 one.
Spoiler -
Keep it nice guys, that solution was posted 8 years ago.
- 1
- 1
-
game/src/constants.cpp
I didn't check the code, but the aiPolymorphPowerByLevel array it's missing a value by default, that one should be 0 when you've level 0 on the skill itself, then for level 1 (10), level 2 (11) [...].
It should be like this:
- 17
- 8
- 3
-
I can't test this right now in-game, but from a fast check, it seems that hide_horse_state command is sent from the server-side when you unsummon the horse, which is defined in interfaceModule.py as HideHorseState:
def HideHorseState(self): self.affectShower.SetHorseState(0, 0, 0) def UpdateHorseState(self, level, health, battery): self.affectShower.SetHorseState(level, health, battery)
That means when you unsummon the horse, the SetHorseState function is called with (0, 0, 0) arguments, and there's a condition which check if the level is 0, then set the self.horseImage variable as a null value, without arrange the images.
So, in theory, we just need to call the __ArrangeImageList function after that, and it should be fine, the images will be sorted again.
- root/uiAffectShower.py
Search for the function:
def SetHorseState(self, level, health, battery): [...]
Replace it with:
- 8
- 7
- 1
- 4
-
On 11/30/2021 at 3:31 AM, MyAnubis said:
Hi, I know it's been a long time but could someone find the solution? I would like to have this function during my ox
-
- Srcs/game/questlua_pc.cpp
namespace quest { [...] int pc_is_cube_open(lua_State* L) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); lua_pushboolean(L, ch && ch->IsCubeOpen()); return 1; } [...] } luaL_reg pc_functions[] = { [...] { "is_cube_open", pc_is_cube_open }, [...] }
- share/locale/country/quest/quest_functions
pc.is_cube_open
- your_quest.lua
if pc.is_cube_open() then say("CUBE_WINDOW_IS_OPEN") return end
- 1
- 1
- 1
-
20 minutes ago, ReFresh said:
And if I want to add race index? I tried something like this and it doesn't work. I still cannot get how these tables works.
local job_items = { [0] = { {15, 1}, {11205, 1}, {12205, 1} }, [1] = { {1005, 1}, {11405, 1}, {12345, 1} }, [2] = { {15, 1}, {11605, 1}, {12485, 1} }, [3] = { {7005, 1}, {11805, 1}, {12625, 1} }, } local item_table = job_items[pc.get_job()] if item_table ~= nil then for key, value in ipairs(item_table) do pc.give_item2(unpack(value)) end end
Just to know:
pc.give_item2(unpack(value)) -- equivalent to: pc.give_item2(value[0], value[1]) -- equivalent to: local vnum, count = unpack(value) pc.give_item2(vnum, count)
- 1
-
23 minutes ago, ReFresh said:
for i = 1, table.getn(same_items) do pc.give_item2(same_items[pc.countitem()])
It should be like this:
for key, value in ipairs(same_items) do pc.give_item2(unpack(value)) end
- 2
-
9 minutes ago, MrQuin said:
Just remove:
if app.IsPressed(app.DIK_LALT): link = chat.GetLinkFromHyperlink(hyperlink) ime.PasteString(link) else:
from both game.py->def OnMouseLeftButtonUp(self): & uiChat.py->class ChatLogWindow->def OnMouseLeftButtonDown(self):
2 hours ago, VegaS™ said:imePasteString and chatGetLinkFromHyperlink is responsible for this.
Here you have a small tutorial on how to disable it:
Glass of Insight - block using on shout chat - Questions & Answers - Metin2 Dev
-
imePasteString and chatGetLinkFromHyperlink is responsible for this.
Here you have a small tutorial on how to disable it:
-
2 hours ago, blaxis said:
TItemPos Cell; BYTE window_type = Cell.window_type; if (MALL == window_type) { [...] }
It won't work because you just initialized the structure with the default values from the constructor, which means window_type will be always INVENTORY
You already have the GetWindow function inside of CItem class, you can use it like this:
if (MALL == item->GetWindow()) { [...] }
Or if you really want to use TItemPos and the functions from it, you must initialize it properly:
const TItemPos Cell(item->GetWindow(), item->GetCell());
- 1
- 2
-
Quote
1>PythonNetworkStreamPhaseGame.cpp(xxxx): warning C4172: returning address of local variable or temporary
or:
That's a small tip for the next time when you're coding, so you'll know if it's a critical warning and it needs real attention or not, based on the level.
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings
- 1
-
I will update the repo when I will have some free time, right now I'm very busy with the university and the job.
For those who want to contribute to it, you can do a pull request in the GitHub repository.- 1
-
On 9/28/2021 at 4:09 PM, narcisxb said:
0928 16:03:21685 :: TypeError 0928 16:03:21685 :: : 0928 16:03:21685 :: 'GridSlotWindow' object does not support indexing 0928 16:03:21685 ::
self.wndItem[itemSlotIndex].SetChangerImage()
self.wndItem it's an object, basically a class (GridSlotWindow), not a list/tuple/dict [...], that means it doesn't have a __getitem__ method implemented by default.
So, you should replace that line with a simple call as a member function from an instance:
self.wndItem.SetChangerImage()
The function must be implemented in ui.py inside of class GridSlotWindow.
Seems that your 'system' is incomplete.
But based on the function name, I think it's changing the base image of the slot, so you can try to add something like this:
Of course, you've to change the image path based on your needs.
- 14
- 8
- 12
-
On 5/8/2021 at 11:47 AM, DragonBlack94 said:
quest Carta_mostro begin state start begin when 50283.use begin say_title ( "Carta Mostro:") say ( "Questo e' la carta mostro, vuoi aprirla?" ) local yesno = select ( "Apri" , "Non aprire" ) pc.removeitem(50283,1) local dragon = number(1,4) local dragon1 = number(2,5) local dragon2 = {102,103,104,105} mob_vnum(dragon2[dragon],dragon1) end end end
Try this:
- 5
- 1
- 1
- 2
-
Hi, thanks for the release, but you don't need any extra function, you just need to select the change look vnum.
item.SelectItem(changelookVnum) valu3 = item.GetValue(3) # Set selected item as the old one because it's used later in other conditions item.SelectItem(oldItemVnum)
1 hour ago, Karbust said:elif itemSubType == item.COSTUME_TYPE_HAIR: #Hair if self.__ItemGetRace() == player.GetRace(): itemVnum_prv = itemVnum if app.ENABLE_CHANGE_LOOK_SYSTEM and getChangelookVnum: itemVnum_prv = getChangelookVnum self.__ModelPreview(item.GetValueByVnum(3, itemVnum_prv), 1, player.GetRace()) else: self.__ModelPreview(item.GetValue(3), 1, player.GetRace())
So, the code should looks like:
elif itemSubType == item.COSTUME_TYPE_HAIR: if self.__ItemGetRace() == player.GetRace(): value3 = item.GetValue(3) if app.ENABLE_CHANGE_LOOK_SYSTEM and getChangelookVnum: item.SelectItem(getChangelookVnum) value3 = item.GetValue(3) self.__ModelPreview(value3, 1, player.GetRace()) item.SelectItem(itemVnum)
- 2
- 1
-
Summary Thread
Last Update → Saturday 27 April 2024Powered by Core X
Programming & Scripts
397 TopicsSpoilerFeatures & Metin2 Systems
423 TopicsSpoilerBug Fixes
266 TopicsSpoilerQuest Functions & Features
38 TopicsSpoilerCommands
32 TopicsSpoilerMetadata
9 TopicsSpoilerHack Protection & Security
28 TopicsSpoilerInterfaces
15 TopicsSpoiler- 318
- 6
- 6
- 3
- 4
- 5
- 2
- 1
- 4
- 2
- 95
- 1
- 20
- 188
-
On 9/21/2021 at 1:58 AM, Tatsumaru said:
Could someone explain in more detail what to do in Martysam's solution?
On 9/21/2021 at 2:07 AM, Shahin said:Can you help us out with this one @ martysama0134?
QuoteIf m_DamageQueue' size() is bigger than 20 elements, you can just pop() the old one.
I suggest you to change its type from std::list to std::queue.
Based on what martysama said in his reply, these are the changes you've to do:
InstanceBase.h
// Search for: typedef std::list<SEffectDamage> CommandDamageQueue; // Replace with: typedef std::queue<SEffectDamage> CommandDamageQueue;
InstanceBaseEffect.cpp
Exclamation: I'm not responsible for this solution.
- 101
- 2
- 2
- 30
- 3
- 27
-
On 7/28/2021 at 2:20 PM, Hik said:
Attention, I believe the skilltable_new is wrong, I think a column is missing.
You are right, I helped some people with this problem in PM but I forgot to edit the topic.
Update: For those who know what they're doing, I did a small script that doing this faster, otherwise, use the manual method from the first post.
- 72
- 2
- 1
- 27
- 23
-
I have joined in many computers of players/owners during the last years, and trust me, I saw just a few people who're using 'small taskbar buttons'.
Mainly, just the owners are using it since they have a lot of apps, but a player who's just a normal gamer, won't put all the games/apps he is playing/using to the taskbar for having it full, maybe just if he has a laptop with a small resolution, maximum.
The badges on the taskbar buttons aren't available in the small taskbar mode, it's Microsoft logic and it's a good one.
Otherwise, would be a mess since in this mode all of the icons are scaled and they losing quality, if they would add a small badge there, it would look so bad.Even on apps like Skype, Messenger is not working which it's directly for chatting and it's much more important a badge count of messages.
I'm sure that for metin2 wouldn't be a drama for hundreds of players if hundreds of millions don't make it for real chatting apps.Take a look on an example of my screen 5120x1440, how it would look with the small taskbar buttons and a badge, both of them scaled, you really can't see it and I've glasses , you would need Magnifier Zoom to see it.
So I think it's enough how it is right now:
You still get a flash notification (flashing until you open it) when you have the small taskbar buttons enabled, you don't need anything more.
Related to other activities, if you read the last line which I wrote in the first reply, then you will understand, so let's wait for that.
Thanks for your feedback.
- 1
-
Posted in 2020, but it was removed due to a rollback in the forum, now it's back.
Hello girls, I think it's my first time when I release a system/feature directly for servers, until now I provided just scripts/functions for 'developers', let's see how it works.
1. Compatibility
Most of you know that for applying a badge to the parent icon we need to have the application ungrouped.
So, basically for this, we need to use Win32 API -> SetCurrentProcessExplicitAppUserModelID, which must be called during the application's initial startup routine, before presents any UI, basically in the initialization of singleton class would be fine.
Before doing the ungroup of the taskbar, we've to check the operating system version, since many players in metin2 still using XP/Vista and this feature is working since Windows 7+. So there's a function called IsWindowsCompatibleVersion which check if the version is at least Windows7 then trying to do the ungroup and if successful then set a variable m_isWindowsCompatible to true, so we can check later other functions with it, that means the feature will be totally disabled for those who aren't compatible.
2. Cache features
When the application is created it's loading all resources and creates only one object on the local system for the taskbar interface.
3. Features
- Show badges on the taskbar (ON/OFF)
- Flash notification + badge
- Counted flashes, using small taskbar icons + badge option
4. ActivityMini version:
SpoilerWhisper messages
- There are many scenarios related to application active, whisper window opened and focused.
Paid version:
SpoilerExchange
- When an exchange window is opened.
Fishing
- When you catch a fish.
Big notice
- When the staff makes a big notice announcement.
Duel request
- When a player sends a duel request.
Friend request
- When you receive a friend request.
- Added multi friend request as well. (Click here)
Party/Guild/Guild war request
- When you receive a request.
Settings
- You can add how many activities you want.
- Play a sound specified by the given file name, resource, or system event, the sound is played asynchronously.
- Available a python module that you can use where you want just by calling:
import badge badge.Notification(badge.ACTIVITY_OFFLINESHOP_SEEN, True)
Free support and custom changes.
https://www.vegas-projects.com/product/badge-notification-manager/
If you find any problem, write me a PM or use the
, let's don't spam the topic with useless messages and keep it clean.If you implement it, attach a gif to the topic, and if many people use it, maybe I update the repository with other activities for free.
- 74
- 2
- 1
- 16
- 2
- 16
-
I forgot the ui.py part, I updated the first reply, check it now.
- 1
-
7 minutes ago, blaxis said:
But, I dont' have IsDisableCoverButton in client src. I'm using novaline.
Doesn't have relevance, just add it where you want in that file, following the code syntax from other functions.
As an example, instead of searching for wndMgrIsDisableCoverButton, search for wndMgrHideSlotBaseImage and HideSlotBaseImage.
I updated the first post, check it.
- 1
An interesting PVP bug in mental warrior.
in Community Support - Questions & Answers
Posted · Edited by VegaS™
I'm sorry for this guys, but if you want to fix it properly, that's the only solution, the rest is just a workaround.