That's a very cool idea. Do you mind, showing us a full capture of the client, while in combat against monsters?
Beiträge von Steap
-
-
Hallo liebe Community,
da ich aktuell mit meinem Latein am Ende bin, dachte ich, ich poste ein Stück Code, welches sich meiner Verständnis entzieht.
Konkret versuche ich zu verstehen, wie Metin2 die Bewegungen des Spielers errechnet. Hier was ich dazu hab:
Code- void CActorInstance::__AccumulationMovement(float fRot)
- {
- // NOTE - ÀÏ´ÜÀº WAIT·Î ¹Ì²ô·¯Áü ¹æÁö
- // ÃßÈÄ¿¡´Â RaceMotionData°¡ À̵¿µÇ´Â ¸ð¼ÇÀÎÁö¿¡ ´ëÇÑ Flag¸¦ °®°í ÀÖ°Ô²û ÇÑ´Ù. - [levites]
- if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
- return;
- D3DXMATRIX s_matRotationZ;
- D3DXMatrixRotationZ(&s_matRotationZ, D3DXToRadian(fRot));
- UpdateTransform(&s_matRotationZ, GetAverageSecondElapsed());
- AddMovement(s_matRotationZ._41, s_matRotationZ._42, s_matRotationZ._43);
- }
Warum sorgt die UpdateTransform Methode dafür, dass die Z-Achse (s_matRotationZ._43) sich nie aktualisiert?
Intern ruft diese Methode irgendwann
auf. Leider geht es dann nicht mehr weiter und ich hab keine Doku zu Methoden von Granny2 gefunden, kommentiert ist das auch nicht.
Das Ergebnis ist jedenfalls, dass die X und Y Achse aktualisiert wird (Spieler läuft ja rum, also logisch), die Z-Achse aber unberührt bleibt.
Wie würde man es hinbekommen, dass der Spieler sich "nach oben" bewegt?
Ich kann meine Hintergründe gerne auch verraten, ich versuche mich aktuell an einem Mount Fly System. Habe mir die vorhandenen Lösungen angesehen und diese erweitern das Vorhandene von YMIR nicht, sondern sie führen einfach eine Variable "m_fZExtra" ein und addieren sie in der "AddMovement..." Zeile zur Z-Achse.
Mein Ziel wäre aber ein Verständnis für diesen Prozess aufzubauen und mich da ranzutasten.
Danke für den Wissensaustausch im Voraus.
~Lead
Eine Rotation erfolgt um eine Achse herum, nicht in die Richtung. Wenn du den Spieler in Richtung -Y (nach vorne) rotieren lassen möchtest, musst du ihn Richtung -X-Achse rotieren. In der Funktion die du gezeigt hast, handelt es sich um Links & Rechts, nicht um Oben & Unten. Der Accumulation-Wert wird auf einen Winkel auf der Z-Achse addiert, weshalb du nur die Rotation als Argument übergeben musst. Ist der Winkel +90°, läuft der Spieler nach rechts. Ist er +45°, läuft der Spieler diagonal nach oben rechts. Die Geschwindigkeit die genutzt wird, ist der Accumulation-Wert der in der Granny festgesetzt wird.
Um noch tiefer auf die Materie einzugehen:
s_matRotationZ._41 = Richtung X
s_matRotationZ._42 = Richtung Y
s_matRotationZ._43 = Richtung Z
Die Zahlen (_41, _42 und _43) beziehen sich auf die Positionsrichtungen in einer Matrix.
Leere Matrix:
Du updatest hier nur die Z-Rotation in der leeren Matrix (links & rechts):
Ich glaube(!), dass GetAverageSecondElapsed benötigt wird, um die passende Geschwindigkeit zu ermitteln. Der Accumulation-Wert ist != die Geschwindigkeit. Aus dem Accumulation-Wert wird nur die Geschwindigkeit errechnet.
Jetzt wird auf den Movement des Actors praktisch folgende Geschwindigkeit addiert:
0 in Richtung X (haben wir nie geupdated)
100 (Beispiel) in Richtung -Y (weil die Z-Achse um die Richtung von Y rotiert)
0 in Richtung Z (haben wir nie geupdated)
Oder in Kurz: Der Spieler wird um 100 nach vorne in den Winkel von fRot bewegt. Theoretisch, wenn du bei s_matRotation_Z._43 eine 90 stehen haben würdest (oder 1,5708, wenn ein Radian benötigt wird), müsste der Spieler nach oben fliegen.
Gerne korrigieren, wenn was falsch ist.
-
Keine Animation um die Truhe zu öffnen?
Oder so eine coole Animation wie bei Kratos, der einfach die Truhe kaputtschlägt!Beim Metin2 Ninja wärs dann eher so hier:
Bitte melden Sie sich an, um diesen Link zu sehen.
P.S: Der Sound ist ein geniales Detail
Die Leute haben schon bei der Pickup & Springanimation gemeckert, bei einer Truhe öffnen Animation brennt es richtig
-
Ein sehr schöner Release. Kurbelt die Kreativität an! Visuelle Aspekte sind in meinen Augen deutlich wichtiger als viel Code und komplizierte Mechanik
-
Ich glaube, du suchst danach:
Bitte melden Sie sich an, um diesen Link zu sehen. -
Item Database: Bitte melden Sie sich an, um diesen Link zu sehen.
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 diesen Link zu sehen.
Bitte melden Sie sich an, um diesen Link zu sehen.
Edit: Lynx :<
-
Hab ich ihm letztens beigebracht
-
Bitte melden Sie sich an, um diesen Link zu sehen.
Bitte melden Sie sich an, um diesen Link zu sehen.
Schau mal hier rein, dort wurde das Thema bereits besprochen.
-
Poste den Inhalt deiner MapProperty.txt
-
Ich denke mal Zeile 43. Dort werden alle Item Effekte die keine Auto Pots sind, deaktiviert. Ich denke mal, dass technisch gesehen deine permanenten Pots keine Auto Pots sind und daher der Effekt nicht funktioniert.
-
Put them in the original folder of the mount. In the npc_list, add a entry on the top of the file that looks like that:
0 . . . NEW_MSM_NAME . . . MOUNT_FOLDER_NAME
This tells the game, where you put the new msm file. It has to be a 0 at the beginning, because this is a Association Entry. This is needed, if the .msm file has not the same name as the folder itself. Now, you can add your new mount easily with:
VNUM . . . NEW_MSM_NAME
Don't forget to use TABS, not SPACES. I represented one TAB with " . . . " in this example.
-
Ich kann diese Problematik leider bestätigen. Bei uns wurden sämtliche Inhalte gelöscht, die auch nur ansatzweise etwas mit Metin zu tun haben könnten. Discord hat sich daraufhin bei mir gemeldet, jedoch erfolgte die Benachrichtigung per E-Mail. Hier wurde eindeutig klargestellt, dass jegliches Teilen von Inhalten im Zusammenhang mit Metin untersagt ist – dies schloss sogar Download-Links mit ein.
Discord hat unmissverständlich darauf hingewiesen, dass im Falle einer fortgesetzten Verbreitung solcher Inhalte unser Discord-Server ohne weitere Vorwarnung gelöscht werden könnte. Aus diesem Grund haben wir vorerst auf unsere eigene Homepage umgewechselt. Dennoch entspricht diese Lösung nicht gänzlich unseren Ansprüchen. Es ist wahrscheinlich, dass wir zukünftig nicht umhin kommen werden, auf ein Forum umzusteigen.Ich glaube, solange der Link den ihr postet, das geschützte Material nicht auf dem selben Server hostet, ist es in Ordnung. Sonst wäre das Verlinken von legalen Webseiten, welche wiederum illegale Webseiten verlinken, bereits illegal und das kann ich mir nicht vorstellen.
-
Was ist das für ein Exploit und welche Bots haben ihn implementiert?
-
Hey, ich bin auf der Suche nach einem guten Tutorial das man ermöglichen kann gewisse Lava texturen zu nutzen anstatt dort Wasser zu sehen ist.
Hatte hier im Forum von Lead0b110010100 einen beitrag gesehen, allerdings komm ich mit dem Tutorial nicht so klar.
Hätte da jemand so ein Tutorial?
Das Tutorial ist ziemlich gut aufgebaut. Womit hast du denn Probleme? Dann kann man dir gezielter helfen.
-
sehr verständlich und gut geschrieben jedoch weiß ich nicht ob ich das alles noch erlernen kann bzw die zeit dafür aufbringen kann^^
welche files wären den kostenlos zum rumfuchteln und anfänger freundlich? evtl auch schon halbwegs buggfrei um in keine baustelle zu stürzen^^
Fliege V2 sind meines Wissens anfängerfreundlich
-
Bin seit 2018 eig weg gewesen von metin2 und server erstellung etc...
Komme noch aus der Zeit wo DynDNS Server am boomen waren oder ''Homeroot'' Server xD
Willkommen zurück!
Thema serverfiles zb. was hat sich da alles getan bzw wieso ist jetzt ein Source so wichtig?
Der Source ist der Code von der metin2client.exe. Den haben wir eine lange Zeit nicht gehabt. Den Code kannst du auch mit Python ansteuern, weshalb Python in Metin2 eine Schnittstelle für die metin2client.exe ist, jedoch kannst du mit Python nur bereits bestehende Funktionen in der metin2client.exe ansteuern. Damals hattest du nur eine Option: Die metin2client.exe Patchen. Das ist ein sehr aufwendiger Prozess, den wahrscheinlich kein moderner Metin2 Entwickler beherrscht. Jetzt haben wir den Code und können die metin2client.exe neu erstellen und bearbeiten kannst du den Code mit für Menschen verständlichem C++ (Programmiersprache). Du wolltest in Metin2 schon immer fliegen? Jetzt kannst du in Metin2 fliegen, wenn du ein bisschen C++ kannst. Deutlich wichtiger ist es jedoch, fundamentale Konzepte in der Computer-Welt zu verstehen und wenn du diese verstehst, kommt das Verständnis für die Sprachen praktisch von selbst, desto länger du dich mit ihnen in Metin2 befasst.
Tipps:
- Benutze Git mit Github Desktop. Du wirst bereuen, diesen Tipp nicht ernst zu nehmen. Github Desktop reicht vollkommen aus. Wenn ein erfahrener Entwickler an deinem Projekt mitarbeiten möchte, kann er die selbe Git-Repository mit einem Programm wie Fork öffnen, was deutlich fortgeschrittener ist. Dir zu erklären, was Git ist, würde den Rahmen sprengen. Informiere dich am besten online darüber
- Benutze einen aktuellen Packer, um Zeit beim packen / entpacken zu sparen
Was bewirkt der und würden alte Files ohne source eig auch funktionieren um sie stabil zu laufen zu bringen?
Das funktioniert absolut, aber es ist keine Option für dich. Patches sind ein sehr aufwendiger Prozess und fast kein Developer in der Szene beherrscht diesen Prozess. Mit dem Source kannst du alles umsetzen, was dir im Kopf schwebt.
wieso könnte ich zb keine daroo files mehr nutzen oder wieso werden diese nichtmehr empfohlen?
Weil zu viele Bug Fixes fehlen. Du wirst keinen Tag überleben. Versionierung ist die Hölle und Spaß macht es auch nicht. Niemand würde deinen Server spielen, alleine wegen dem Mangel an Features. Stattdessen, implementiere die Daroo Features die du magst in moderne Serverfiles. Das geht deutlich schneller.
Sonstiges:
- ToXiC hat vor kurzem eine sehr vielfältige Erklärung zu modernen Metin2 Server verfasst: Bitte melden Sie sich an, um diesen Link zu sehen.
- Shay zeigt dir, wie du die Fliege V2 Files aufsetzen kannst, welche jedoch in meinen Augen nicht mehr für Neulinge zu empfehlen sind: Bitte melden Sie sich an, um diesen Link zu sehen.
-
Ist das Projekt down?
Solche Projekte sind immer eine nette Idee, aber ich kann verstehen, wie es sich anfühlen muss, dran zu bleiben. Anfangs ist es ein lustiges Projekt zum umsetzen und mit der Zeit wird es zu langweilig oder man findet die originale "Vision" nicht mehr attraktiv.
Vielleicht ist es auch nur On Hold, aber das Projekt hat seit dem Start des Posts keinen Commit mehr gesehen.
-
most part of ur uiScriptLocale is a dictionary. Therefore in python u can only add ur if statement only outside of it.
The lines after ur if statement try to access data of ur dictionary called "window" meaning that it has to be already initialized when the statement is used.
Code- import uiScriptLocale
- IMG_DIR = "d:/ymir work/ui/game/gameoption/"
- TITLE_IMAGE_TEXT_X = 5
- TITLE_IMAGE_TEXT_Y = 4
- OPTION_START_X = 17
- SLIDER_POSITION_X = 50
- SLIDER_START_Y = 40
- BUTTON_START_Y = 33
- BUTTON_NEXT_Y = 20
- RADIO_BUTTON_RANGE_X = 65
- TOGGLE_BUTTON_RANGE_X = 65
- RADIO_BUTTON_TEXT_X = 25
- TOGGLE_BUTTON_TEXT_X = 20
- SMALL_OPTION_HEIGHT = 65
- NORMAL_OPTION_HEIGHT = 80
- SLIDER_OPTION_HEIGHT = 65
- window = {
- "name" : "GameOptionDialog",
- # Dont touch these lines!
- "style" : (),
- "x" : 171,
- "y" : 3,
- "width" : 300,
- "height" : 324,
- # Dont touch these lines!
- "children" :
- (
- {
- "name" : "show_name_window",
- "type" : "window",
- "x" : 0,
- "y" : 0,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "show_name_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "title_show_name",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME,
- },
- ),
- },
- {
- "name" : "always_show_name_on_button",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*0,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME_ON,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "always_show_name_off_button",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*1,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_ALWAYS_SHOW_NAME_OFF,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "outline_window",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "outline_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "title_outline",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.OPTION_OUTLINE_INFO,
- },
- ),
- },
- {
- "name" : "outline_on_button",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*0,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_OUTLINE_ON,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "outline_off_button",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*1,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_OUTLINE_OFF,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "affect_icons_window",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "affect_icons_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "title_affect_icons",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : "Affect Icons",
- },
- ),
- },
- {
- "name" : "show_affect_icons",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*0,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_OUTLINE_ON,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "hide_affect_icons",
- "type" : "radio_button",
- "x" : OPTION_START_X+RADIO_BUTTON_RANGE_X*1,
- "y" : 33,
- "text" : uiScriptLocale.OPTION_OUTLINE_OFF,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "perspective_window",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SLIDER_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "perspective_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "title_perspective",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.OPTION_FOV,
- },
- ),
- },
- {
- "name" : "perspective_controller",
- "type" : "sliderbar",
- "x" : OPTION_START_X+SLIDER_POSITION_X,
- "y" : SLIDER_START_Y,
- },
- ),
- },
- {
- "name" : "effect_level_title",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- #effect
- {
- "name" : "effect_level_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "effect_level",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL,
- },
- ),
- },
- {
- "name" : "effect_level0",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*0,
- "y" : 33,
- "text" : "1",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL1_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "effect_level1",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*1,
- "y" : 33,
- "text" : "2",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL2_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "effect_level2",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*2,
- "y" : 33,
- "text" : "3",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL3_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "effect_level3",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*3,
- "y" : 33,
- "text" : "4",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL4_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "effect_level4",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*4,
- "y" : 33,
- "text" : "5",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_EFFECT_LEVEL5_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "bazaarTitle",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- #effect
- {
- "name" : "bazaarTitle_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "bazaarTitleText",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL,
- },
- ),
- },
- {
- "name" : "bazaar0",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*0,
- "y" : 33,
- "text" : "1",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL1_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "bazaar1",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*1,
- "y" : 33,
- "text" : "2",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL2_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "bazaar2",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*2,
- "y" : 33,
- "text" : "3",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL3_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "bazaar3",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*3,
- "y" : 33,
- "text" : "4",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL4_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "bazaar4",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*4,
- "y" : 33,
- "text" : "5",
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PRIVATE_SHOP_LEVEL5_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "PetTitle",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- #effect
- {
- "name" : "pet_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "PetTitleText",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.GRAPHICONOFF_PET_STATUS,
- },
- ),
- },
- {
- "name" : "pet_on",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*0,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_PET_STATUS_ON,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PET_STATUS_ON_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "pet_off",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*1,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_PET_STATUS_OFF,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_PET_STATUS_OFF_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "MountTitle",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "mount_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "MountTitleText",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.GRAPHICONOFF_MOUNT_STATUS,
- },
- ),
- },
- {
- "name" : "mount_on",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*0,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_MOUNT_STATUS_ON,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_MOUNT_STATUS_ON_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "mount_off",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*1,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_MOUNT_STATUS_OFF,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_MOUNT_STATUS_OFF_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "npcName",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SMALL_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "npcName_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "npcNameTitleText",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.GRAPHICONOFF_NPC_NAME_STATUS,
- },
- ),
- },
- {
- "name" : "npcName_on",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*0,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_NPC_NAME_STATUS_ON,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_NPC_NAME_STATUS_ON_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- {
- "name" : "npcName_off",
- "type" : "radio_button",
- "x" : OPTION_START_X+(RADIO_BUTTON_RANGE_X-15)*1,
- "y" : 33,
- "text" : uiScriptLocale.GRAPHICONOFF_NPC_NAME_STATUS_OFF,
- "tooltip_text" : uiScriptLocale.GRAPHICONOFF_NPC_NAME_STATUS_OFF_TOOLTIP,
- "text_x" : RADIO_BUTTON_TEXT_X,
- "default_image" : IMG_DIR + "radio_unselected.tga",
- "over_image" : IMG_DIR + "radio_unselected.tga",
- "down_image" : IMG_DIR + "radio_selected.tga",
- },
- ),
- },
- {
- "name" : "object_distance_window",
- "type" : "window",
- "x" : 0,
- "y" : SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SLIDER_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT+SMALL_OPTION_HEIGHT,
- "width":304,
- "height":SLIDER_OPTION_HEIGHT,
- "children":
- (
- {
- "name" : "object_distance_title_img",
- "type" : "expanded_image",
- "x" : 0,
- "y" : 0,
- "image" : IMG_DIR+"option_title.tga",
- "children":
- (
- {
- "name" : "title_object_distance",
- "type" : "text",
- "x" : TITLE_IMAGE_TEXT_X,
- "y" : TITLE_IMAGE_TEXT_Y,
- "text_horizontal_align":"left",
- "text" : uiScriptLocale.OPTION_OBJECT_DISTANCE,
- },
- ),
- },
- {
- "name" : "object_distance_controller",
- "type" : "sliderbar",
- "x" : OPTION_START_X+SLIDER_POSITION_X,
- "y" : SLIDER_START_Y,
- },
- ),
- },
- ),
- }
- if app.ENABLE_DOG_MODE:
- CUR_LINE_Y += LINE_STEP
- window["height"] = window["height"] + 25
- window["children"][0]["height"] = window["children"][0]["height"] + 25
- window["children"][0]["children"] = window["children"][0]["children"] + [
- ## Dog Mode
- {
- "name" : "dogmode_on_off",
- "type" : "text",
- "multi_line" : 1,
- "x" : LINE_LABEL_X,
- "y" : CUR_LINE_Y+2,
- "text" : "Potwory",
- },
- {
- "name" : "dog_mode_open",
- "type" : "radio_button",
- "x" : LINE_DATA_X,
- "y" : CUR_LINE_Y,
- "text" : "Dzikie Psy",
- "default_image" : ROOT_PATH + "middle_button_01.sub",
- "over_image" : ROOT_PATH + "middle_button_02.sub",
- "down_image" : ROOT_PATH + "middle_button_03.sub",
- },
- {
- "name" : "dog_mode_close",
- "type" : "radio_button",
- "x" : LINE_DATA_X+MIDDLE_BUTTON_WIDTH,
- "y" : CUR_LINE_Y,
- "text" : "Normalne",
- "default_image" : ROOT_PATH + "middle_button_01.sub",
- "over_image" : ROOT_PATH + "middle_button_02.sub",
- "down_image" : ROOT_PATH + "middle_button_03.sub",
- },]
This is (at least by python syntax) correct.
If ur still getting errors I dont really think the problem can be solved here without further information.
Feel free to correct me if I'm wrong
Edit:
I dont have a lot of knowledge of metins client, but u try to access a bool from the module called "app" (app.ENABLE_DOG_MODULE), without importing it. Is app fsr still available here ?
It won't work anyway, CUR_LINE_Y, LINE_STEP, MIDDLE_BUTTON_WIDTH, LINE_DATA_X and LINE_LABEL_X are not defined. It's probably made for another UI for another client. You would be better off, if you just duplicate a already existing option from your source and fill the informations as needed.
Due to lack of information, i can't really help but a GIF of your Game Options (with all catogerys if there are multiple) would help immensly.
-
Who ever adds this to your code, better doesn't add it as it is. That's so stupid, no wonder people have problems with coding in metin2 if this is a thing.
-
Ich würde eher sagen, dass Delays ein fauler Workaround sind aber es hilft genauso gut gegen Dupes wie ein vernünftiger Fix. Ich glaube, dazu kommt noch, dass beim wechseln der Rüstung der Charakter kurz geupdatet wird und dadurch, wenn man währenddessen läuft, die Position wo man ist um einen Pixel nach vorne "kalkuliert"(?) wird. Dadurch kann man sich in Häuser oder durch Blockzones buggen, wenn man die Ausdauer dafür hat.
Das ist schon immer so, geht aber allerdings nur ohne Kostüm. Die guten alten DE-Zeiten um im Stall bei den Pferden zu gammeln.
Bitte melden Sie sich an, um diesen Link zu sehen.
Ach was, das wusste ich gar nicht.
Die guten alten Zeiten, ja. Ich glaube, es wäre gar nicht mal so verkehrt sowas auf Maps wo man es nicht ausnutzen kann, zu erlauben. Ich habe auch sofort an den Stall gedacht haha