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 83 results

  1. ⬇ 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,
  2. Open root - uiinventory.py and look for: wndItem = self.GetChild("ItemSlot") Add below: wndCostume = self.GetChild("CostumeSlot") Look for: wndItem.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) wndItem.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) wndItem.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) Add below: for tmpSlot in [wndEquip, wndCostume]: tmpSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot)) tmpSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemSlot)) tmpSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UseItemSlot)) tmpSlot.SetUseSlotEvent(ui.__mem_func__(self.UseItemSlot)) tmpSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem)) tmpSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) Look for: self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg)) self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg)) self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg)) self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg)) self.inventoryTab[0].Down() Replace with: for i in xrange(player.INVENTORY_PAGE_COUNT): self.inventoryTab.SetEvent(lambda arg=i: self.SetInventoryPage(arg)) self.inventoryTab[0].Down() Look for: self.equipmentTab[0].SetEvent(lambda arg=0: self.SetEquipmentPage(arg)) self.equipmentTab[1].SetEvent(lambda arg=1: self.SetEquipmentPage(arg)) self.equipmentTab[0].Down() self.equipmentTab[0].Hide() self.equipmentTab[1].Hide() Replace with: self.inventoryCategoryObjects = [self.GetChild("equipment_window"), self.GetChild("costume_window")] index = 0 for button in self.equipmentTab: button.SetEvent(lambda arg=index: self.SetEquipmentPage(arg)) index += 1 Look for: self.wndEquip = wndEquip Add below: self.wndCostume = wndCostume Look for: self.wndEquip = 0 Add below: self.wndCostume = 0 Look for: def SetInventoryPage(self, page): self.inventoryTab[self.inventoryPageIndex].SetUp() self.inventoryPageIndex = page self.inventoryTab[self.inventoryPageIndex].Down() self.RefreshBagSlotWindow() def SetEquipmentPage(self, page): self.equipmentPageIndex = page self.equipmentTab[1-page].SetUp() self.RefreshEquipSlotWindow() Replace with: def SetInventoryPage(self, page): self.inventoryPageIndex = page for i in xrange(player.INVENTORY_PAGE_COUNT): if i!=page: self.inventoryTab.SetUp() self.RefreshBagSlotWindow() def SetEquipmentPage(self, page): self.equipmentPageIndex = page for button_key in xrange(len(self.equipmentTab)): tmpButton = self.equipmentTab[button_key] tmpButton.SetUp() if button_key != page else tmpButton.Down() for key in xrange(len(self.inventoryCategoryObjects)): tmpObject = self.inventoryCategoryObjects[key] tmpObject.Hide() if key != page else tmpObject.Show() self.RefreshEquipSlotWindow() self.RefreshCostumeSlotWindow() Look for: def RefreshEquipSlotWindow(self): Add below entire def: def RefreshCostumeSlotWindow(self): getItemVNum = player.GetItemIndex v_slot = [item.COSTUME_SLOT_WEAPON, item.COSTUME_SLOT_START,\ item.COSTUME_SLOT_START+1, item.COSTUME_SLOT_START+3,\ item.COSTUME_SLOT_START+2]#, item.EQUIPMENT_PET] for slotNumber in v_slot: self.wndCostume.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) if app.ENABLE_CHANGELOOK_SYSTEM: itemTransmutedVnum = player.GetItemTransmutation(slotNumber) if not itemTransmutedVnum: self.wndEquip.EnableCoverButton(slotNumber) else: self.wndEquip.DisableCoverButton(slotNumber) self.wndCostume.RefreshSlot() Look for self.RefreshEquipSlotWindow() - must be in def RefreshItemSlot(self): and add below: self.RefreshCostumeSlotWindow() Look for: self.SetEquipmentPage(0) Replace with: self.SetEquipmentPage(self.equipmentPageIndex) Look for: self.inventoryTab = [] self.inventoryTab.append(self.GetChild("Inventory_Tab_01")) self.inventoryTab.append(self.GetChild("Inventory_Tab_02")) self.inventoryTab.append(self.GetChild("Inventory_Tab_03")) self.inventoryTab.append(self.GetChild("Inventory_Tab_04")) Replace with: self.inventoryTab = [] for i in xrange(player.INVENTORY_PAGE_COUNT): self.inventoryTab.append(self.GetChild("Inventory_Tab_%02d" % (i+1))) [!] You need [!] Download this inventorywindow.py and compare it with yours. [!] Download ETC stuff. [!] Download ETC.PSD stuff.
  3. Troszkę się mi wczoraj nudziło więc przepisałem skrypt na generację proto żeby możliwe było używanie go na nowszej wersji FreeBSD bez kombinowania z niewspieranymi bibliotekami. Program został częściowo przetestowany na następującej konfiguracji: FreeBSD 12.2 z zainstalowanymi bibliotekami: python38-3.8.10 py38-mysql-connector-python-8.0.23 mysql56-server-5.6.51 W tablicy konfiguracyjnej można włączyć generację z uwzględnieniem vnum_range (należy pamiętać, aby kolumna w bazie była jako następna po vnum). Uruchamiamy wiadomo: cd (path) python generacja_py3.py Powoli wracam do dłubania w pliczkach więc zgłoszone błędy będę poprawiał. generacja_py3.py
  4. 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:
  5. gui biologa Biyolog Sistemi.rar [Hidden Content]
  6. @Lajk w ostatnim temacie mnie podpuścił, więc stwierdziłem że czemu nie zrobić zapisywania prywatnych wiadomości, bo czasami zdarzy się zamknąć szept z osobą, którą nie chciało się tego zrobić, a wtedy cała rozmowa z tą osobą się usuwa. Krótki opis działania. Wszystkie wysłane i odebrane wiadomości zapisują się w kliencie (do momentu zmiany postaci) i jeśli zamkniemy z kimś okno szeptu, a potem je otworzymy to wczytają się wszystkie wcześniej wysłane i odebrane wiadomości w odpowiedniej kolejności. To chyba tyle (mam nadzieję, że każdy ogarnia o co chodzi). Wszystkie czynności wykonujemy w root'ach constInfo.py Dodajemy: WHISPER_MESSAGES = {} game.py Zamieniamy poniższe funkcje: def OnRecvWhisper(self, mode, name, line): if mode == chat.WHISPER_TYPE_GM: self.interface.RegisterGameMasterName(name) line.replace(" : ", ": ") if not constInfo.WHISPER_MESSAGES.has_key(name): constInfo.WHISPER_MESSAGES.update({name : [(mode, line)]}) else: constInfo.WHISPER_MESSAGES[name].append((mode, line)) self.interface.RecvWhisper(mode, name, line) def OnRecvWhisperSystemMessage(self, mode, name, line): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, line) self.interface.RecvWhisper(mode, name, line) def OnRecvWhisperError(self, mode, name, line): if localeInfo.WHISPER_ERROR.has_key(mode): chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, localeInfo.WHISPER_ERROR[mode](name)) else: chat.AppendWhisper(chat.WHISPER_TYPE_SYSTEM, name, "Whisper Unknown Error(mode=%d, name=%s)" % (mode, name)) self.interface.RecvWhisper(mode, name, line) interfaceModule.py Zamieniamy poniższą funkcję: def RecvWhisper(self, mode, name, line): if not self.whisperDialogDict.has_key(name): btn = self.__FindWhisperButton(name) if 0 == btn: btn = self.__MakeWhisperButton(name) btn.Flash() for text in constInfo.WHISPER_MESSAGES[name]: chat.AppendWhisper(text[0], name, text[1]) chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.RECEIVE_MESSAGE % (name)) else: chat.AppendWhisper(mode, name, line) btn.Flash() elif self.IsGameMasterName(name): dlg = self.whisperDialogDict[name] dlg.SetGameMasterLook() introSelect.py W funkcji def Open(self): dodajemy: WHISPER_MESSAGES = {} uiWhisper.py Dodajemy na górze: import constInfo W funkcji def OpenWithTarget(self, targetName): dodajemy na dole: if constInfo.WHISPER_MESSAGES.has_key(targetName): for text in constInfo.WHISPER_MESSAGES[targetName]: chat.AppendWhisper(text[0], targetName, text[1]) W funkcji def AcceptTarget(self): dodajemy na dole: if constInfo.WHISPER_MESSAGES.has_key(name): for text in constInfo.WHISPER_MESSAGES[name]: chat.AppendWhisper(text[0], name, text[1]) Zamieniamy poniższą funkcję: def SendWhisper(self): text = self.chatLine.GetText() textLength = len(text) if textLength > 0: if net.IsInsultIn(text): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_INSULT_STRING) return net.SendWhisperPacket(self.targetName, text) self.chatLine.SetText("") if not constInfo.WHISPER_MESSAGES.has_key(self.targetName): constInfo.WHISPER_MESSAGES.update({self.targetName : [(1, ("{}: {}".format(player.GetName(), text)))]}) else: constInfo.WHISPER_MESSAGES[self.targetName].append([1, "{}: {}".format(player.GetName(), text)]) chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, self.targetName, player.GetName() + ": " + text) Tyle. Gdyby ktoś znalazł jakieś błędy to pisać w temacie.
  7. Cześć, Święta coraz bliżej, także postanowiłem udostępnić wam "system" tworzenia grup w prywatnych wiadomościach. Kilka dodatkowych ss: 1. Otwieramy i edytujemy plik uiWhisper.py w root: Pod: self.gamemasterMark = GetObject("gamemastermark") Dodaj: self.titleName = GetObject("titlename") self.group_chat = GetObject("group_chat") self.group_add = GetObject("group_add") Pod: except: import exception exception.Abort("DialogWindow.LoadDialog.BindObject") self.gamemasterMark.Hide() Dodaj: self.group_add.Hide() Pod: self.acceptButton.SetEvent(ui.__mem_func__(self.AcceptTarget)) Dodaj: self.group.SetToggleDownEvent(ui.__mem_func__(self.Group)) self.group_add.SetToggleDownEvent(ui.__mem_func__(self.Group_add)) Pod: self.gamemasterMark.Hide() self.minimizeButton.Show() Dodaj: if self.targetName.find("Grupa:") != -1: self.ignoreButton.Hide() self.group_chat.Hide() self.group_add.Show() Pod: def Close(self): chat.ClearWhisper(self.targetName) self.titleNameEdit.KillFocus() self.chatLine.KillFocus() self.Hide() if None != self.eventClose: self.eventClose(self.targetName) Dodaj: def Group(self): self.micha = uiGroup.GroupDialog() self.group.SetUp() self.micha.Show() def Group_add(self): self.micha2 = uiGroupadd.GroupADDDialog() constInfo.group_add = self.targetName self.group_add.SetUp() self.micha2.Show() Znajdź: def SendWhisper(self): I zamień na: def SendWhisper(self): text = self.chatLine.GetText() textLength = len(text) stringy = "" x1 = 0 if textLength > 0: if net.IsInsultIn(text): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_INSULT_STRING) return if self.targetName.find("Grupa:") != -1: for y in constInfo.groups[self.targetName]: if x1 == 0: stringy = stringy + y x1 = 1 else: stringy = stringy + "," + y for x in constInfo.groups[self.targetName]: net.SendWhisperPacket(x, "_pn_groupx1888329||" + str(stringy) + "||" + self.targetName + "||" + player.GetName() + " : " + text) constInfo.group_chat_enable = 1 self.chatLine.SetText("") chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, self.targetName, player.GetName() + " : " + text) constInfo.chat_string = player.GetName() + " : " + text else: constInfo.group_chat_enable = 0 net.SendWhisperPacket(self.targetName, text) self.chatLine.SetText("") chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, self.targetName, player.GetName() + " : " + text) constInfo.chat_string = player.GetName() + " : " + text 2. Otwieramy i edytujemy plik game.py w root: Znajdź: def OnRecvWhisper(self, mode, name, line): Zamień na: def OnRecvWhisper(self, mode, name, line): if mode == chat.WHISPER_TYPE_GM: self.interface.RegisterGameMasterName(name) pnblock = open("pn.dll", "r") pnauslese = pnblock.read() pnblock.close() if pnauslese.find(name + "\n") !=-1 and name[0] != "[" and line.find("72nasd31?_Get") == -1 and line.find("72nasd31?_Set") == -1: if name.find("[") !=-1: chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) else: # chat.AppendChat(chat.CHAT_TYPE_INFO, "Zablokowany gracz " + name + " próbował się z Tobą skontaktować.") net.SendWhisperPacket(name, "Zostałeś zablokowany z powodu spamu.") return elif line.find("72nasd31?_Get") != -1: alignment1, grade1 = player.GetAlignmentData() net.SendWhisperPacket(name, "72nasd31?_Set//" + str(player.GetStatus(player.SP)) + "//" + str(player.GetStatus(player.MAX_SP)) + "//" + str(player.GetStatus(player.HP)) + "//" + str(player.GetStatus(player.MAX_HP)) + "//" + str(player.GetStatus(player.EXP)) + "//" + str(player.GetStatus(player.NEXT_EXP)) + "//" + str(player.GetStatus(player.LEVEL)) + "//" + str(net.GetMainActorRace()) + "//" + str(alignment1) + "//" + str(grade1)) elif line.find("72nasd31?_Set") != -1: x = line.split("//") constInfo.other_exp = x[5] constInfo.other_exp_next = x[6] constInfo.other_hp = x[3] constInfo.other_hp_max = x[4] constInfo.other_mp = x[1] constInfo.other_mp_max = x[2] constInfo.other_race = x[8] constInfo.other_level = x[7] constInfo.other_rank = x[9] constInfo.other_grade = x[10] elif line.find("_pn_groupx1888329") !=-1: x = line.split("||") constInfo.groups[x[2]] = x[1].split(",") chat.AppendWhisper(mode, x[2], x[3]) self.interface.RecvWhisper(x[2]) if x[3].find("Grupa została utworzona.") != -1: net.SendWhisperPacket(x[1].split(",")[len(x[1])-2], player.GetName() + " dołączył do grupy.") else: chat.AppendWhisper(mode, name, line) self.interface.RecvWhisper(name) 3. Otwieramy plik constInfo.py w root i dodajemy w nim: group_add = "" group_new_name = "" group_chat_enable = 0 group_chat = "" groups = {} 4. Wrzucamy do naszych rootów 4 następujące pliki: group.py groupadd.py uigroup.py uigroupadd.py 5. Zamieniamy whisperdialog.py w uiscript na: whisperdialog.py 6. Gotowy plik uiWhisper.py z root, jeśli ktoś miałby z nim problem: uiwhisper.py
  8. 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!
  9. 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
  10. Ikony ros przy użyciu Pythona Kod:
  11. lista bonusów.rar W razie problemów z kompilacją:
  12. Czasem, kiedy zamykam PW, ktoś jeszcze może coś napisać i wtedy jest źle, wiadomo dlaczego. Więc ż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 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.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)
  13. 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.
  14. 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", },
  15. 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]
  16. 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())
  17. Cześć, program został od razu dostosowany pod najlepszą jakość nagrywania. Podgląd: Download: [Hidden Content] Virustotal: [Hidden Content]
  18. 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"
  19. 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
  20. 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]
  21. 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!
  22. 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
  23. 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]
  24. 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
  25. AutoPickUP w ustawieniach gry Miejsce na zdjęcie Paczka (v0.1): [Hidden Content] Znane błędy: Aktualnie brak Aktualizacje: Pierwsze Wydanie - v0.1
×
×
  • Create New...