Jump to content

Search the Community

Showing results for tags 'python' in content posted in C++ / Python / Server.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Forum board
    • M2Zone.tech
  • Strefa gracza
    • Server presentations
    • Discussions, Questions and Problems
  • Create private server
    • Pytania i Problemy - bez logowania
    • Problems and Questions
    • Cooperation
    • Tutorials / Video
    • C++ / Python / Server
    • Sources / Serverfiles / Clients
    • Homepage / Board
    • Quests
    • 2D Graphics
    • 3D Graphics
    • Recycling
  • Marketplace
    • Rynek - (Kupię, Sprzedam, Zamienię i Zlecę)
    • Archiwum
  • Hydepark
    • About all
    • Introduce yourself
    • My Creativity / Media
  • Others
    • Blokady i Ostrzeżenia
    • Trash

Categories

  • Programs
  • Plechito.com
    • Events
    • Maps
    • Mounts
    • Equipments
    • Monsters
    • NPC

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sex


Country


Facebook


Discord


Telegram


Gadu-Gadu

Found 82 results

  1. Cześć ;] Ostatnio chciałem dodać sobie wyświetlanie rosek w lewym górnym rogu, ale stwierdziłem, że sposób dostępny w internecie (przez dodawanie nowych affectów) jest po prostu ch*jowy, bo po co dodawać więcej i więcej affectów, i przy tym modyfikować kod źródłowy, gdy można to zrobić inaczej. Nie chce mi się tego dzielić na różne elementy w temacie, dlatego cały tutorial dam Wam w jednym "załączniku" jeśli tak mogę to nazwać. # Dodajemy do locale_game.txt: TOOLTIP_CZERWONA_ROSA Czerwona Rosa - Szansa na cios krytyczny SNA TOOLTIP_ZOLTA_ROSA Żółta Rosa - Szybkość Ataku SNA TOOLTIP_NIEBIESKA_ROSA Niebieska Rosa - Wartość Ataku SNA TOOLTIP_BIALA_ROSA Biała Rosa - Obrona SNA TOOLTIP_POMARANCZOWA_ROSA Pomarańczowa Rosa - Szansa na przeszywające Uderzenie SNA TOOLTIP_ZIELONA_ROSA Zielona Rosa - Max PŻ SNA # Plik: uiAffectShower.py # Szukamy: AFFECT_DATA_DICT = { # Dodajemy wyżej: AFFECT_BLEND_CONFIG = { # pointIdx : ( localeInfo.OPIS_NASZEJ_ROSY, "sciezka/do/ikony/ikona.tga"), 40 : ( localeInfo.TOOLTIP_CZERWONA_ROSA, "icon/item/50821.tga"), 41 : ( localeInfo.TOOLTIP_POMARANCZOWA_ROSA, "icon/item/50822.tga"), 17 : ( localeInfo.TOOLTIP_ZOLTA_ROSA, "icon/item/50823.tga"), 6 : ( localeInfo.TOOLTIP_ZIELONA_ROSA, "icon/item/50824.tga"), 95 : ( localeInfo.TOOLTIP_NIEBIESKA_ROSA, "icon/item/50825.tga"), 96 : ( localeInfo.TOOLTIP_BIALA_ROSA, "icon/item/50826.tga"), } # Szukamy: def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): # Dodajemy wyżej: def IsBlendAffect(self, type): return (type == 531) # 531 to index jaki u mnie mają rosy i należy ustawić go pod siebie (bo u kogoś może być inaczej niż u mnie). # Szukamy: if type == chr.NEW_AFFECT_MALL: affect = self.MALL_DESC_IDX_START + pointIdx else: affect = type # Zmieniamy na (bo tak...): if type == chr.NEW_AFFECT_MALL: affect = self.MALL_DESC_IDX_START + pointIdx elif self.IsBlendAffect(type): affect = 2000 + pointIdx else: affect = type # Szukamy: affectData = self.AFFECT_DATA_DICT[affect] description = affectData[0] # Zmieniamy na: affectData = None if self.IsBlendAffect(type): affectData = self.AFFECT_BLEND_CONFIG[pointIdx] else: if self.AFFECT_DATA_DICT.has_key(affect): affectData = self.AFFECT_DATA_DICT[affect] else: return description = affectData[0] # Szukamy: def BINARY_NEW_RemoveAffect(self, type, pointIdx): if type == chr.NEW_AFFECT_MALL: affect = self.MALL_DESC_IDX_START + pointIdx else: affect = type # Zmieniamy na (bo tak...): def BINARY_NEW_RemoveAffect(self, type, pointIdx): if type == chr.NEW_AFFECT_MALL: affect = self.MALL_DESC_IDX_START + pointIdx elif self.IsBlendAffect(type): affect = 2000 + pointIdx else: affect = type I teraz tak... Dla osób, które nieco mniej ogarniają. Aby poprawnie skonfigurować sobie wyświetlanie ikonek polecam skorzystać jeszcze z tego: # Żeby sprawdzić pointIdx należy znaleźć: def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration): # A następnie dodać niżej: chat.AppendChat(chat.CHAT_TYPE_INFO, "Affect Index: {}, pointIndex: {}".format(affect, pointIdx)) Po wprowadzeniu tej modyfikacji w momencie, gdy użyjemy przedmiotu który nadaje na postać jakiś affect pokaże się na czacie informacja o indexie danego affectu oraz o rodzaju punktów (bonusie) jaki daje on naszej postaci. Index rodzaju punktów (bonusu) jest nam potrzebny do skonfigurowania tej "tablicy", która wykorzystana jest w kodzie. Jeśli czegoś będzie brakować lub będzie niejasne to piszcie w temacie. Enjoy!
  2. Jako że linki wygasły, idt, itp. no to łapcie uiminimap.py 1. Na początku dopisujemy import time 2. szukamy i dodajemy: #szukamy self.serverInfo = self.GetChild("ServerInfo") #dodajemy self.dateInfo = self.GetChild("DateInfo") self.timeInfo = self.GetChild("TimeInfo") 3. szukamy i dodajemy: #szukamy if constInfo.MINIMAP_POSITIONINFO_ENABLE==0: #dodajemy if constInfo.MINIMAP_DATETIME_ENABLE==0: self.dateInfo.Hide() self.timeInfo.Hide() 4.szukamy i dodajemy: #szukamy self.positionInfo.SetText("%.0f, %.0f" % (x/100, y/100)) #Jeśli nie mamy tego kodu, szukamy def OnUpdate(self): i tam wklejamy poniższy kod #dodajemy self.dateInfo.SetText(time.strftime("%Y-%m-%d")) self.timeInfo.SetText(time.strftime("%H:%M:%S")) uiscript/minimap.py nad ## ObserverCount dodajemy ## Date { "name" : "DateInfo", "type" : "text", "text_horizontal_align" : "center", "outline" : 1, "color" : 0xff2877d6, "x" : 70, "y" : 175, "text" : "", }, ## Time { "name" : "TimeInfo", "type" : "text", "text_horizontal_align" : "center", "outline" : 1, "color" : 0xddffffff, "x" : 70, "y" : 190, "text" : "", }, constInfo.py MINIMAP_POSITIONINFO_ENABLE = 0 #zmieniamy na MINIMAP_POSITIONINFO_ENABLE = 1 MINIMAP_DATETIME_ENABLE = 1
  3. Ikony ros przy użyciu Pythona Kod:
  4. lista bonusów.rar W razie problemów z kompilacją:
  5. Czasem kiedy zamykam PW, ktoś jeszcze może coś napisać i wtedy jest źle, ponieważ muszę zapytać się danej osoby co wysłała. Dlatego żeby uniknąć tego problemu, wyciąłem czyszczenie się wiadomości po jej zamknięciu i tę funkcję dodałem do nowego przycisku, który oprócz kasowania korespondencji, zamyka okno. # Na początku otwórz plik uiwhisper.py i znajdź poniższy warunek: if not messenger.IsFriendByName(self.targetName): [...] # Lub (jeśli nie możesz wyszukać frazy wyżej): self.minimizeButton.Show() # A następnie pod tym co zostało znalezione, dodaj: self.clearPM = ui.Button() self.clearPM.SetParent(self.board) self.clearPM.SetPosition(145, 12) self.clearPM.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub") self.clearPM.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub") self.clearPM.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub") # self.clearPM.SetText("") self.clearPM.SetToolTipText("Usuń rozmowę") self.clearPM.SetEvent(ui.__mem_func__(self.ClearPM)) self.clearPM.Show() # Teraz znajdź i zamień poniższą funkcję: def Close(self): self.titleNameEdit.KillFocus() self.chatLine.KillFocus() self.Hide() if None != self.eventClose: self.eventClose(self.targetName) # I na koniec dodaj pod nią następną: def ClearPM(self): chat.ClearWhisper(self.targetName) self.titleNameEdit.KillFocus() self.chatLine.KillFocus() self.clearPM.Hide() self.Hide() if None != self.eventClose: self.eventClose(self.targetName) No i gotowe, jak można stwierdzić - bardzo zaawansowany poradnik.
  6. Witam. Dziś pokażę wam jak edytować pasek życia na taki jak poniżej. [Hidden Content] 1.1. W pliku "ui.py" szukamy: class Board(Window) 1.2. Pod tą całą funkcją dodajemy: class DynamicGauge(Gauge): dynamicGaugePerc = None newGaugePerc = 0 def __init__(self): Gauge.__init__(self) def __del__(self): Gauge.__del__(self) def MakeGauge (self, width, color1, color2): Gauge.MakeGauge(self, width, color2) imgGauge2 = ExpandedImageBox() imgGauge2.SetParent(self) imgGauge2.LoadImage("d:/ymir work/ui/pattern/gauge_" + color1 + ".tga") imgGauge2.Show() imgGauge2.SetRenderingRect(0.0, 0.0, 0.0, 0.0) imgGauge2.SetPosition (self.GAUGE_TEMPORARY_PLACE, 0) self.imgGauge2 = imgGauge2 def SetPercentage(self, curValue, maxValue): # PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR if maxValue> 0.0: percentage = min(1.0, float(curValue)/float(maxValue)) else: percentage = 0.0 # END_OF_PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR gaugeSize = -1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * percentage/ self.GAUGE_WIDTH if self.dynamicGaugePerc == None: self.imgGauge.SetRenderingRect(0.0, 0.0, (-1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * percentage/ self.GAUGE_WIDTH), 0.0) self.dynamicGaugePerc = percentage elif self.dynamicGaugePerc + 0.2 < self.newGaugePerc: self.imgGauge.SetRenderingRect(0.0, 0.0, (-1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * self.newGaugePerc/ self .GAUGE_WIDTH), 0.0) self.dynamicGaugePerc = self.newGaugePerc self.newGaugePerc = percentage self.imgGauge2.SetRenderingRect(0.0, 0.0, gaugeSize, 0.0) if percentage == 0: self.imgGauge.Hide() else: self.imgGauge.Show() def OnUpdate(self): if self.dynamicGaugePerc > self.newGaugePerc: self.dynamicGaugePerc = self.dynamicGaugePerc -0.005 self.imgGauge.SetRenderingRect (0.0, 0.0, (-1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * self.dynamicGaugePerc/ self.GAUGE_WIDTH), 0.0) elif self.dynamicGaugePerc < self.newGaugePerc: self.dynamicGaugePerc = self.newGaugePerc self.imgGauge.SetRenderingRect (0.0, 0.0, (-1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * self.dynamicGaugePerc/ self .GAUGE_WIDTH), 0.0) 2.1. W pliku "uitarget.py" szukamy: hpGauge.MakeGauge(130, "red") 2.2. Zmieniamy na: hpGauge.MakeGauge(130, "red", "blue") 2.3. Dalej w tym samym pliku szukamy: ui.Gauge 2.4. Zmieniamy na: ui.DynamicGauge Teraz wystarczy spakować root i cieszyć się urozmaiconym target hp.
  7. w localeinfo.py Ctrl+F : def GetAuxiliaryWordType(text): Nad tym dodaj : def MiastoTime(time): d, s = divmod(time, 60) ss, d = divmod(d, 60) return "%02d:%02d" % (d, s) def TutajTime(time): d, s2 = divmod(time, 10) ss2, d = divmod(d, 10) return "%d" % (s2) W uirestart.py Dodaj do importów import time import localeInfo CTRL + F: self.restartTownButton=self.GetChild("restart_town_button") Dodaj pod: self.domiasta_time = self.GetChild("domiasta_time") self.dotutaj_time = self.GetChild("dotutaj_time") CTRL+F: def OpenDialog(self): Dodaj pod: self.miastotime = app.GetGlobalTimeStamp() + 7 self.tutajtime = app.GetGlobalTimeStamp() + 10 Dodaj na końcu: def Domiastatime(self, time): left = time - app.GetGlobalTimeStamp() if left < 0: left = 0 self.domiasta_time.SetText("[%s]" % localeInfo.MiastoTime(left)) def Dotutajtime(self, time): left = time - app.GetGlobalTimeStamp() if left < 0: left = 0 self.dotutaj_time.SetText("[%s]" % localeInfo.TutajTime(left)) def OnUpdate(self): self.Domiastatime(int(self.miastotime)) self.Dotutajtime(int(self.tutajtime)) W uiscript/restartdialog.py CTRL+F: restart_town_button Dodaj pod całym kodem: { "name" : "domiasta_time", "type" : "text", "x" : 155, "y" : 53, "text" : "", }, { "name" : "dotutaj_time", "type" : "text", "x" : 155, "y" : 23, "text" : "10", },
  8. Siemanko, dzisiaj sobie dodamy chowany, moim zdaniem bardziej estetyczny i poręczny Panel boczny z buttonem i przykładową funkcją. na samym początku wykonajcie wszystkie czynności z tego tematu [Hidden Content] A następnie możemy zacząć dodawać nasz panel otwieramy root/uiinventory.py pod importami dajemy from _weakref import proxy następnie szukamy def RefreshCostumeSlot(self): getItemVNum=player.GetItemIndex for i in xrange(item.COSTUME_SLOT_COUNT): slotNumber = item.COSTUME_SLOT_START + i self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) self.wndEquip.RefreshSlot() I dodajemy pod [Hidden Content] potem szukamy self.isLoaded = 0 self.wndInventory = wndInventory; dodajemy pod self.wndBeltInventoryLayer = None potem szukamy def __del__(self): ui.ScriptWindow.__del__(self) dodajemy pod def Show(self, openBeltSlot = FALSE): self.__LoadWindow() ui.ScriptWindow.Show(self) if openBeltSlot: self.OpenInventory() else: self.CloseInventory() następnie szukamy def Close(self): self.Hide() pod dodajemy def IsOpeningInventory(self): return self.wndBeltInventoryLayer.IsShow() def OpenInventory(self): self.wndBeltInventoryLayer.Show() self.expandBtn.Hide() self.AdjustPositionAndSize() def CloseInventory(self): self.wndBeltInventoryLayer.Hide() self.expandBtn.Show() self.AdjustPositionAndSize() następnie szukamy tooltipItem = None wndCostume = None dodajemy pod wndBelt = None i szukamy isOpenedCostumeWindowWhenClosingInventory = 0 i pod dodajemy isOpenedBeltWindowWhenClosingInventory = 0 pod tym zmieniamy całą funkcje def __init__ na tą def __init__(self): ui.ScriptWindow.__init__(self) self.wndBeltInventoryLayer = None self.__LoadWindow() szukamy if self.isOpenedCostumeWindowWhenClosingInventory and self.wndCostume: self.wndCostume.Show() dodajemy pod if self.wndBelt: self.wndBelt.Show(self.isOpenedBeltWindowWhenClosingInventory) szukamy def BindInterfaceClass(self, interface): self.interface = interface pod dajemy self.wndBelt.BindInterfaceClass(proxy(interface)) szukamy self.equipmentTab.append(self.GetChild("Equipment_Tab_02")) pod dajemy self.wndBelt = None if app.ENABLE_NEW_EQUIPMENT_SYSTEM: self.wndBelt = BeltInventoryWindow(self) szukamy if self.wndCostume: self.wndCostume.Destroy() self.wndCostume = 0 dajemy pod if self.wndBelt: self.wndBelt.Destroy() self.wndBelt = None szukamy if self.wndCostume: self.isOpenedCostumeWindowWhenClosingInventory = self.wndCostume.IsShow() self.wndCostume.Close() pod dajemy if self.wndBelt: self.isOpenedBeltWindowWhenClosingInventory = self.wndBelt.IsOpeningInventory() # 인벤토리 창이 닫힐 때 벨트 인벤토리도 열려 있었는가? print "Is Opening Belt Inven?? ", self.isOpenedBeltWindowWhenClosingInventory self.wndBelt.Close() na samym dole dajemy def OnMoveWindow(self, x, y): if self.wndBelt: self.wndBelt.AdjustPositionAndSize() Tutaj macie do podmianki plik który znajduje się w uiscript beltinventorywindow.py [Hidden Content] Ostatnia kwestia tutaj macie ścieżkę do ikonek panelu "default_image" : "button_panel/alchemia_1.tga", "over_image" : "button_panel/alchemia_2.tga", "down_image" : "button_panel/alchemia_3.tga", znajduje się ona w tym pliku z uiscript Efekt pracy: [Hidden Content] Przepraszam za wygląd poradnika, ale pierwszy raz piszę w CODE i obiecuje, że następne będą bardziej estetyczne. Tutaj daje jeszcze plik dla tych z małym ilorazem [Hidden Content]
  9. Jeśli zainstalowałeś publiczne systemy na podgląd hp, powinieneś wiedzieć i być świadomy tego wizualnego problemu który pojawia się raz na X czasu. Problem z rozmiarem panelu jest związany z showingButtonList Ok także przechodzimy do pliku uiTarget.py Szukamy tego oraz usuwamy self.showingButtonList.append(button) Teraz szukamy def __Initialize(self): Dodajemy w nim self.showingButtonList = [] Szukamy teraz tego def SetHP Dodajemy w nim to: if app.ENABLE_SEND_TARGET_INFO: if chr.GetInstanceType(self.vid) == chr.INSTANCE_TYPE_PLAYER: self.infoButton.Hide() self.infoButton.showWnd.Close() Gdzie? Dokładniej pod tym: self.SetSize(230 + (7 * self.nameLength), self.GetHeight())
  10. Cześć, program został od razu dostosowany pod najlepszą jakość nagrywania. Podgląd: Download: [Hidden Content] Virustotal: [Hidden Content]
  11. BLOKUJE CHAT NA OKREŚLONE SŁOWA TEŻ MOŻNA PRZEZ INSULT, ALE TUTAJ MACIE MOŻLIWOŚĆ DOPISANIA WŁASNEJ ZAWARTOŚCI [ROOT]>uichat.py SZUKAJ def __SendChatPacket(self, text, type): W TEJ FUNKCJI JEST net.SendChatPacket(text, type) DODAJ NAD NAD: if text.lower().find('SABAL') != -1: #tutaj blokowane słowo "SABAL" chat.AppendChat(chat.CHAT_TYPE_INFO, "Twoje słowo SABAL nie zostanie pokazane na czacie.") #TEKST KTORY WYSKOCZY PO NAPISANIU SABAL return elif text.lower().find('ZABQ') != -1: #tutaj blokowane słowo "ZABQ" chat.AppendChat(chat.CHAT_TYPE_INFO, "Osoby które kumają nie mają prawa bytu C:") #TEKST KTORY WYSKOCZY PO NAPISANIU SABAL return # JAK CHCESZ TEGO DODAĆ WIĘCJ TO KOPIUJESZ CAŁA ZAWARTOŚĆ OD "elif"
  12. Myślę, że obraz wszystko wyjaśnia i nie trzeba nikomu tego tłumaczyć 01: Otwieramy intrologin.py (root), szukamy tego: import uiScriptLocale I zmieniamy na: import uiScriptLocale import os Szukamy tego: def Suffle(src): I zmieniamy na: def LoadAccount(file1, Setting): lines = open(file1).readlines() for line in lines: if line.startswith(Setting): return line.split('=')[1].replace('\n', '') def SaveAccount(file1, Setting, Value): sReader = open(file1,'r') sLines = file.readlines(sReader) sWriter = open(file1,'w') for Line in sLines: if Line.startswith(Setting + '='): Line = Setting + '=' + Value + '\n' sWriter.write(Line) sWriter.close() sReader.close() AccountName = None def Suffle(src): Szukamy tego: self.loginExitButton = GetObject("LoginExitButton") I zmieniamy na: self.loginExitButton = GetObject("LoginExitButton") self.SaveLoginButton = ui.ToggleButton() self.SaveLoginButton.SetParent(self.idEditLine) self.SaveLoginButton.SetPosition(103, 1) self.SaveLoginButton.SetUpVisual("locale/pl/ui/login/accunlocked_01.sub") self.SaveLoginButton.SetOverVisual("locale/pl/ui/login/accunlocked_02.sub") self.SaveLoginButton.SetDownVisual("locale/pl/ui/login/acclocked_01.sub") self.SaveLoginButton.SetText("") self.SaveLoginButton.Show() self.SaveLoginButton.SetToggleUpEvent(lambda a = "delete_acc": self.NewSaveAccountButton(a)) self.SaveLoginButton.SetToggleDownEvent(lambda a = "save_acc": self.NewSaveAccountButton(a)) self.SavePwdButton = ui.ToggleButton() self.SavePwdButton.SetParent(self.pwdEditLine) self.SavePwdButton.SetPosition(103, 1) self.SavePwdButton.SetUpVisual("locale/pl/ui/login/accunlocked_01.sub") self.SavePwdButton.SetOverVisual("locale/pl/ui/login/accunlocked_02.sub") self.SavePwdButton.SetDownVisual("locale/pl/ui/login/acclocked_01.sub") self.SavePwdButton.SetText("") self.SavePwdButton.Show() self.SavePwdButton.SetToggleUpEvent(lambda a = "delete_pwd": self.NewSaveAccountButton(a)) self.SavePwdButton.SetToggleDownEvent(lambda a = "save_pwd": self.NewSaveAccountButton(a)) Szukamy tego: def __OnSelectRegionGroup(self): I zmieniamy na: account_file = "ACCstored.dll" if os.path.exists(account_file): if LoadAccount(account_file, 'login')!="": self.idEditLine.SetText(LoadAccount(account_file, 'login')) self.SaveLoginButton.Down() else: self.SaveLoginButton.SetUp() if LoadAccount(account_file, 'pwd')!="": self.pwdEditLine.SetText(LoadAccount(account_file, 'pwd')) self.SavePwdButton.Down() else: self.SavePwdButton.SetUp() def __OnSelectRegionGroup(self): Szukamy tego: self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, 0, localeInfo.UI_OK) I zmieniamy na: self.stream.popupWindow.Open(localeInfo.LOGIN_FAILURE_SAMELOGIN, 0, localeInfo.UI_OK) def NewSaveAccountButton(self, arg): id = self.idEditLine.GetText() pwd = self.pwdEditLine.GetText() if not os.path.exists('ACCstored.dll'): ch = open('ACCstored.dll', 'w') ch.write("login=" + id + "\n") ch.write("pwd=" + pwd + "\n") ch.close() if arg=="save_acc": SaveAccount('ACCstored.dll', 'login', id) elif arg=="delete_acc": SaveAccount('ACCstored.dll', 'login', '') elif arg=="save_pwd": SaveAccount('ACCstored.dll', 'pwd', pwd) elif arg=="delete_pwd": SaveAccount('ACCstored.dll', 'pwd', '') 02: Pobieramy kłódeczkę, pakujemy ją do roota i to wszystko: [Hidden Content]
  13. Cześć udostępniam wam całkiem prosty skrypt który automatycznie ustawi wam dzień/noc w Metin2 Idziemy do constInfo.py dodajemy to na samej górze: ENVIRONMENT_EVENING="d:/ymir work/environment/evening.msenv" noc = 0 dzien = 0 Idziemy do game.py Szukamy tego class GameWindow(ui.ScriptWindow): def __init__(self, stream): Dodajemy pod: constInfo.noc = 0 constInfo.dzien = 0 Szukamy teraz def OnUpdate(self): app.UpdateGame() Zamieniamy na coś takiego: def OnUpdate(self): self.day_night() app.UpdateGame() Idziemy na sam dół pliku game.py i dodajemy ten kod: def day_night(self): import time localtime = time.strftime("%H") if constInfo.noc == 0: if localtime == "01" or localtime == "02" or localtime == "03" or localtime == "04" or localtime == "05" or localtime == "06" or localtime == "07" or localtime == "00" or localtime == "23" or localtime == "22" or localtime == "21": background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) constInfo.dzien = 0 constInfo.noc = 1 if constInfo.dzien == 0: if localtime == "11" or localtime == "12" or localtime == "13" or localtime == "14" or localtime == "15" or localtime == "16" or localtime == "17": background.SetEnvironmentData(0) constInfo.dzien = 1 constInfo.noc = 0 if localtime == "08" or localtime == "09" or localtime == "10" or localtime == "18" or localtime == "19" or localtime == "20": background.RegisterEnvironmentData(2, constInfo.ENVIRONMENT_EVENING) background.SetEnvironmentData(2) constInfo.dzien = 1 constInfo.noc = 0 Pamiętajcie o TAB'ach - I gotowe
  14. Cześć! Mam dobry humor to wrzucam coś ciekawego O dziwo! Ten system używa tylko python oraz lua Podgląd systemu: Download: [Hidden Content] Virustotal: [Hidden Content]
  15. Elo elo przykład pokażę na zdjęciu - Po kliknięciu w link - Uruchamia się przeglądarka oraz automatycznie od razu przenosi na daną stronę. Otwieramy plik uiChat.py i dodajemy def GetLinks(self, string, ret): import re links = re.findall("(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$])", string, re.I) if not (hasattr(ret, "clear") and hasattr(ret, "update")): return False ret.clear() map(lambda link: (ret.update({link:"|cFF00C0FC|Hweb:%s|h[%s]|h|r"%(re.sub("://", "w<?", link), link)})) if link else None, links) return len(links) > 0 Szukamy funkcji def __SendChatPacket(self, text, type): i w tej funkcji szukamy net.SendChatPacket(text, type) Zamieniamy to na links={} if self.GetLinks(text, links): for k,v in links.iteritems(): text = text.replace(k, v) net.SendChatPacket(text, type) Szukamy teraz tego w pliku Interfacemodule.py def MakeHyperlinkTooltip(self, hyperlink): I robimy coś takiego: def MakeHyperlinkTooltip(self, hyperlink): tokens = hyperlink.split(":") if tokens and len(tokens): type = tokens[0] if "item" == type: self.hyperlinkItemTooltip.SetHyperlinkItem(tokens) elif "web" == type: app.ExecuteShell(tokens[1].replace("w<?", "://")) Teraz czas na binkę - plik - PythonApplicationModule.cpp - Po prostu to dodajemy #include <Shellapi.h> /////// PyObject* appExecuteShell(PyObject* poSelf, PyObject* poArgs) { char* szPageLink; if (!PyTuple_GetString(poArgs, 0, &szPageLink)) return Py_BuildException(); int iExit; if (!PyTuple_GetInteger(poArgs, 1, &iExit)) iExit=0; ShellExecute(0, "open", szPageLink, 0, 0, SW_SHOWNORMAL); if (iExit) PostQuitMessage(0); return Py_BuildNone(); } Teraz pod tym dodajemy to: { "OnLogoClose", appLogoClose, METH_VARARGS }, POD TYM DODAJEMY { "ExecuteShell", appExecuteShell, METH_VARARGS }, I gotowe!
  16. Dużo nie ma co pisać zmienia to opis dla jakiej klasy jest dany item z tekstu na grafikę. Do działania tego systemu potrzebujemy tego.---> przejdź DL: [Hidden Content] Skan: [Hidden Content] Poglądowe zdjęcie jak to wygląda: Ps: Jak było to do pieca
  17. Twój serwer jest taki nudny że na serwerze twoi gracze się nudzą? Dodaj snake'a - Będą siedzieć i grać 24/7 w, a, s, d do kontrolowania węża Spacja = pauza Możesz ustawić w skrypcie, czy możesz przejść przez ścianę i zmienić rozmiar narysowanych pól lub pola gry. Trzeba podpiąć samemu pod przycisk Download: [Hidden Content]
  18. System Teleportacji z Render Target Wymaga implementacji Render Target(logiczne?) Czemu udostępniam? Bo według mnie kod ssie pałę i że wolne to trzeba się podszkolić więc trzeba pisać kod XDDD Label troche za duży, jak ktoś chce niech pomniejszy, mi się już nie chciało! Jak czegoś brakuje to piszcie xD teleportacja_m2zone.7z Już pobrałeś? Dej yanga. SKAN ##AKTUALIZACJA## Wyjebani* questa, przerobiono na c++ bo wam nie działa XDD Kod ssie pałe i jak zawsze na "Odpierdol się! Działa!" A więc: //cmd_general.cpp //dodaj gdzieś hehe ACMD(do_teleportacja) { char arg1[256]; DWORD id = 0; one_argument(argument, arg1, sizeof(arg1)); str_to_number(id,arg1); if (!*arg1) { return; } typedef struct { char name[256]; int x; int y; int lv_min; int lv_max; int przepustka; int ilosc; } TTeleportacja; TTeleportacja szTele[] = { //nazwa_mapy x // y// lv_min //lv_max // vnum_przepustki // ilosc {"Jinno M1", 959900, 269200, 1, 500, 0, 0}, {"Jinno M2", 959900, 269200, 1, 500, 0, 0}, {"Shinsoo M1", 959900, 269200, 1, 500, 0, 0}, {"Shinsoo M2", 959900, 269200, 1, 500, 0, 0}, {"Jakaś Mapa", 959900, 269200, 1, 500, 0, 0}, }; TTeleportacja * ptTele = NULL; ptTele = &(szTele[id]); if (ch->CountSpecifyItem(ptTele->przepustka) < ptTele->ilosc && ptTele->przepustka != 0){ ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("not_exist_item_or_count")); return; } if (ch->GetLevel() < ptTele->lv_min || ch->GetLevel() > ptTele->lv_max){ ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("not_enough_level")); return; } ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("|cff008000[Teleportacja]|h|r |cffFFFF00Lecisz na %s|h|r"), ptTele->name ); ch->RemoveSpecifyItem(ptTele->przepustka, ptTele->ilosc); ch->WarpSet(ptTele->x, ptTele->y); } //cmd.cpp //szukaj { "dragon_soul", do_dragon_soul, 0, POS_DEAD, GM_PLAYER }, //pod dodaj { "teleportacja", do_teleportacja, 0, POS_DEAD, GM_PLAYER }, //szukaj ACMD(do_user_horse_back); //pod dodaj ACMD(do_teleportacja); Tam jak macie te LC_TEXT to sobie dopiszcie do locale.txt ja zbyt leniwy mehhh No i teraz uiteleportacja.py #szukaj kurwo funckji def Teleport(self): # całą zmień na to szmato def Teleport(self): net.SendChatPacket("/teleportacja {0}".format(self.activetp)) ##PS. Jebać brudasów
  19. Siema, ktoś tam udostępnił jakiś inny Switcher no generalnie jest on do mixu, a i tak kiedyś chciałem sobie napisać swój taki to macie: - Switcher otwiera się najeżdżając zmianką na przedmiot typu broń/zbroja. - Zablokowana możliwość poruszania, używania przedmiotów gdy jest otwarty Switcher. W pliku uibonuschanger.py dowiecie się jak wykorzystać słownik z innego pliku, zamiast kopiować go jeszcze raz do jednego pliku. Niby mógłbym to sprzedawać, bla bla ale i tak by mi sie nie chciało. Jak coś nie tak, albo czegoś brakuje to dajcie znać może mi sie zechce poprawić. ? GIF: #Edit: update dl'a, brakująca część kodu w uiInventory.py DL:
  20. AutoPickUP w ustawieniach gry Miejsce na zdjęcie Paczka (v0.1): [Hidden Content] Znane błędy: Aktualnie brak Aktualizacje: Pierwsze Wydanie - v0.1
  21. Jeśli na Wojnie Gildii jest 1 obserwator, gra cały czas będzie wyświetlać napis: "obserwatorów" zamiast: "obserwator". Po 5 sekundach poprawiłem ten wielki błąd. W pliku: uiminimap.py podmieniamy poniższą funkcję: def UpdateObserverCount(self, observerCount): if observerCount > 0: self.observerCount.Show() elif observerCount <= 0: self.observerCount.Hide() if observerCount == 1: self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT % observerCount) elif observerCount > 1: self.observerCount.SetText(localeInfo.MINIMAP_OBSERVER_COUNT2 % observerCount) Teraz pozostało tylko przerobić plik: locale_game.txt: MINIMAP_OBSERVER_COUNT %d Obserwator. MINIMAP_OBSERVER_COUNT2 %d Obserwatorów.
  22. ⬇ Następne Poradniki w Spoilerze ⬇ Okno z Bonami: [Pobierz] Bonus Switcher i Szybka Zmiana Ekwipunku: [Pobierz] Kosz i Mapa Teleportacji: [Pobierz] AntyExp i Magazyn: [Pobierz] Zapis Teleportacji i Usuwanie Polimorfi: [Pobierz] Sklep z Marmurami i Tobół: [Pobierz] Wikipedia Dropu i Automatyczne Dopalacze: [Pobierz] Sortowanie Ekwipunku i Otwieracz Przedmiotów: [Pobierz] Ikony do Panelu Bocznego: [Pobierz] Aby dodać panel boczny wchodzimy do ..\locale\pl\ui: Szukamy i edytujemy plik inventorywindow.py: Szukamy w nim: "children" : ( Pod dodajemy: Następnie szukamy: ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, Zamieniamy na: ## Inventory, Equipment Slots { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 37, Następnie szukamy: "x" : SCREEN_WIDTH - 176, "y" : SCREEN_HEIGHT - 37 - 565, "style" : ("movable", "float",), "width" : 176, "height" : 565, Zamieniamy na: "x" : SCREEN_WIDTH - 210, "y" : SCREEN_HEIGHT - 600, "style" : ("movable", "float",), "width" : 263, "height" : 566,
  23. Cześć otóż to każdy serwer który ma dodany system kart okey ma buga wizualnego a że jestem osobą którą wkurwiają wizualne błędy zdecydowałem się naprawić. 1 błąd w paczce przez który nie będzie wczytywać napisów to plik uiscriptlocale.py CARDS_DESC = "mini_game_okey_desc.txt" Zamieniamy na CARDS_DESC = "%s/mini_game_okey_desc.txt" % (name) 2 błąd to który a w sumie pokaże na przykładzie gifu bo nie chce mi się pisać Otwieramy plik uiCards.py i szukamy linijki self.descriptionBox = self.DescriptionBox() dodajemy pod nią self.descriptionBox.SetParent(self.textBoard) Wuala błąd wizualny naprawiony Ha tfu
  24. Krótki opis jak to działa. Wiadomości wysłane na czacie po zmianie ch/teleporcie będą dalej zapisane tj. będzie można sobie strzałką wrócić do ostatnio wysłanych wiadomości. Zapisane wiadomości będą się czyścić w momencie zmiany postaci. Taka mała pierdoła, a na pewno ułatwi handel przez czat. Przejdźmy do rzeczy: Wszystkie czynności wykonujemy w kliencie gry. constInfo.py Dodajemy: lastSentenceStack = [] lastSentencePos = 0 game.py W funkcji def Open(self): dodajemy: if len(constInfo.lastSentenceStack) > 0: constInfo.lastSentencePos = 0 uiChat.py Usuwamy: self.lastSentenceStack = [] self.lastSentencePos = 0 Wszystkie: self.lastSentenceStack Zmieniamy na: constInfo.lastSentenceStack Wszystkie: self.lastSentencePos Zmieniamy na: constInfo.lastSentencePos To wszystko. Czekam na hejt
  25. Wchodzimy do: pack/root/uitooltip.py Szukamy: ATTRIBUTE_NEED_WIDTH = { Nad dodajemy: MAX_AFFECT_VALUE = { 0 : -1, item.APPLY_MAX_HP : 2000, item.APPLY_MAX_SP : 80, item.APPLY_CON : 12, item.APPLY_INT : 12, item.APPLY_STR : 12, item.APPLY_DEX : 12, item.APPLY_ATT_SPEED : 8, item.APPLY_MOV_SPEED : 20, item.APPLY_CAST_SPEED : 20, item.APPLY_HP_REGEN : 30, item.APPLY_SP_REGEN : 30, item.APPLY_POISON_PCT : 8, item.APPLY_STUN_PCT : 8, item.APPLY_SLOW_PCT : 8, item.APPLY_CRITICAL_PCT : 10, item.APPLY_PENETRATE_PCT : 10, item.APPLY_ATTBONUS_WARRIOR : 15, item.APPLY_ATTBONUS_ASSASSIN : 15, item.APPLY_ATTBONUS_SURA : 20, item.APPLY_ATTBONUS_SHAMAN : 15, item.APPLY_ATTBONUS_MONSTER : 0, item.APPLY_ATTBONUS_HUMAN : 10, item.APPLY_ATTBONUS_ANIMAL : 20, item.APPLY_ATTBONUS_ORC : 20, item.APPLY_ATTBONUS_MILGYO : 20, item.APPLY_ATTBONUS_UNDEAD : 20, item.APPLY_ATTBONUS_DEVIL : 20, item.APPLY_STEAL_HP : 10, item.APPLY_STEAL_SP : 10, item.APPLY_MANA_BURN_PCT : 10, item.APPLY_DAMAGE_SP_RECOVER : 0, item.APPLY_BLOCK : 15, item.APPLY_DODGE : 15, item.APPLY_RESIST_SWORD : 15, item.APPLY_RESIST_TWOHAND : 15, item.APPLY_RESIST_DAGGER : 15, item.APPLY_RESIST_BELL : 15, item.APPLY_RESIST_FAN : 15, item.APPLY_RESIST_BOW : 15, item.APPLY_RESIST_FIRE : 15, item.APPLY_RESIST_ELEC : 15, item.APPLY_RESIST_MAGIC : 15, item.APPLY_RESIST_WIND : 15, item.APPLY_REFLECT_MELEE : 10, item.APPLY_REFLECT_CURSE : 0, item.APPLY_POISON_REDUCE : 5, item.APPLY_KILL_SP_RECOVER : 0, item.APPLY_EXP_DOUBLE_BONUS : 20, item.APPLY_GOLD_DOUBLE_BONUS : 20, item.APPLY_ITEM_DROP_BONUS : 20, item.APPLY_POTION_BONUS : 0, item.APPLY_KILL_HP_RECOVER :0, item.APPLY_IMMUNE_STUN : 1, item.APPLY_IMMUNE_SLOW : 1, item.APPLY_IMMUNE_FALL : 0, item.APPLY_BOW_DISTANCE : 0, item.APPLY_DEF_GRADE_BONUS : 0, item.APPLY_ATT_GRADE_BONUS : 0, item.APPLY_MAGIC_ATT_GRADE : 0, item.APPLY_MAGIC_DEF_GRADE : 0, item.APPLY_MAX_STAMINA : 0, item.APPLY_MALL_ATTBONUS : 0, item.APPLY_MALL_DEFBONUS : 0, item.APPLY_MALL_EXPBONUS : 0, item.APPLY_MALL_ITEMBONUS : 0, item.APPLY_MALL_GOLDBONUS : 0, item.APPLY_SKILL_DAMAGE_BONUS : 0, item.APPLY_NORMAL_HIT_DAMAGE_BONUS : 0, item.APPLY_SKILL_DEFEND_BONUS : 0, item.APPLY_NORMAL_HIT_DEFEND_BONUS : 0, item.APPLY_PC_BANG_EXP_BONUS : 0, item.APPLY_PC_BANG_DROP_BONUS : 0, item.APPLY_RESIST_WARRIOR : 15, item.APPLY_RESIST_ASSASSIN : 15, item.APPLY_RESIST_SURA : 15, item.APPLY_RESIST_SHAMAN : 15, item.APPLY_MAX_HP_PCT : 0, item.APPLY_MAX_SP_PCT : 0, item.APPLY_ENERGY : 0, item.APPLY_COSTUME_ATTR_BONUS : 0, item.APPLY_MAGIC_ATTBONUS_PER : 0, item.APPLY_MELEE_MAGIC_ATTBONUS_PER : 0, item.APPLY_RESIST_ICE : 0, item.APPLY_RESIST_EARTH : 0, item.APPLY_RESIST_DARK : 0, item.APPLY_ANTI_CRITICAL_PCT : 0, item.APPLY_ANTI_PENETRATE_PCT : 0, } Szukamy: def __GetAttributeColor(self, index, value): if value > 0: if index >= 5: return self.SPECIAL_POSITIVE_COLOR2 else: return self.SPECIAL_POSITIVE_COLOR elif value == 0: return self.NORMAL_COLOR else: return self.NEGATIVE_COLOR Zamieniamy na: def __GetAttributeColor(self, index, value, type=0): if value == self.MAX_AFFECT_VALUE[type]: return self.SPECIAL_TITLE_COLOR if value > 0: if index >= 5: return self.SPECIAL_POSITIVE_COLOR2 else: return self.SPECIAL_POSITIVE_COLOR elif value == 0: return self.NORMAL_COLOR else: return self.NEGATIVE_COLOR Szukamy: if affectString: affectColor = self.__GetAttributeColor(i, value) self.AppendTextLine(affectString, affectColor) Zamieniamy na: if affectString: affectColor = self.__GetAttributeColor(i, value, type) self.AppendTextLine(affectString, affectColor) Jeśli dodawałeś nowe bony z mojego poradnika: Szukamy: item.APPLY_ANTI_PENETRATE_PCT : 0, Pod dodajemy: item.APPLY_ATTBONUS_STONE : 20, item.APPLY_ATTBONUS_BOSS : 20,
×
×
  • Create New...