Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

sankixd

Rekomendowane odpowiedzi

Opublikowano

Dla hejterów:

Jeśli po przeczytaniu i stwierdzeniu, że było albo że nieprzydatne lub jeszcze jakiś inny bezsensowy powód by schejtować, po prostu nakieruj się w prawy górny róg przeglądarki i przyciśnij cudowny przycisk " X " bądź też nie zostawiaj zbędnego komentarza, nie wnoszącego nic do tematu.


Witajcie,
Stworzyłem dla was coś, co już było, lecz nie do końca działało jak należy.
 

A więc po przetestowaniu tego okna co było wrzucone tutaj, lecz opublikowane na epvp, stwierdziłem, że wiesza klienta, nie zlicza do końca bonów, niektóre nie działają, otwiera się przez nacisnięcie x ale nie zamyka, po nacisnieciu "ESC" tez sie nie zamyka stwierdziłem, że tak nie będzie.

Co stworzyłem ? O to moje cacko:
 

zakladkabonussanki.png

 
 
Niemcy potrafią, Polacy też!

Dobra. A teraz jak to dodać ? Ależ proszę Was bardzo :)  Zaczynamy!

1. Otwieramy plik  game.py    w root'ach 
i na początek w importach dodajemy*
import uiBonus
 
*najlepiej dodać po:
 import uiCharacter
 
2. Dalej szukamy w tym pliku:
 
 onPressKeyDict[app.DIK_Z]
oraz dodajemy pod tą linią, tą linię(jest to odpowiedzialne za otwieranie tego okna z przypisaną funckją):

 
 onPressKeyDict[app.DIK_X]            = lambda: self.interface.ToggleBonusWindow()
W tym pliku tyle. Możemy go zamknąć.
3. Teraz przechodzimy do pliku: interfacemodule.py  również w root 'ach
(w tym pliku będzie najwiecej dodawane, trzeba uważać i sprawdzić by wszystko dodać tak, żeby śmigało), i tutaj również dodajemy by importowało plik uibonus.py czyli musimy dodać:
 
 import uiBonus 
*najlepiej dodać po:
 
import uiCharacter


4. W tymże pliku(czyt. interfacemodule.py) szukamy:

 
 def __init__(self):
i po wpisie:
 
 self.wndInventory = None
dodajemy:
 
 self.wndBonus = None 

5. Teraz szukamy funkcji:

 
 def __MakeWindows(self): 
po:

 
wndInventory = uiInventory.InventoryWindow() 
dodajemy:
 
 wndBonus = uiBonus.BonusWindow() 

6. Dobra, dalej w tej funkcji(kilka linijek niżej) po wpisie:

 
 self.wndCharacter = wndCharacter 
dodajemy:
 
 self.wndBonus = wndBonus 

7. OK. Teraz szukamy funkcji:

 
 def Close(self): 
po wpisie:
        if self.wndInventory:

            self.wndInventory.Destroy() 

dodajemy:

 
         if self.wndBonus:

            self.wndBonus.Destroy() 
 

7.1 teraz znowu w tej samej funkcji, kilka linijek niżej, szukamy:
 
 del self.wndInventory 
i po tym wpisie dodajemy:
 
        del self.wndBonus 
 

8. Dalej szukamy kolejnej funkcji:
 

 def ShowAllWindows(self): 
w tej funkcji po wpisie:

 
         self.wndInventory.Show() 
dodajemy:
 
         self.wndBonus.Show() 
 

9. Następnie funkcja niżej albo szukamy:
 

 def HideAllWindows(self): 
 
po wpisie:
 
         if self.wndInventory:
            self.wndInventory.Hide() 

dodajemy:

         if self.wndBonus:
            self.wndBonus.Hide() 
 

10. uf... już niedaleko.  Teraz szukamy funkcji:
 

 def ToggleInventoryWindow(self): 

oraz PO! po! nie w tylko po tej funkcji musimy dodać nową funkcję...:

 
    def ToggleBonusWindow(self):
        if FALSE == player.IsObserverMode():
            if FALSE == self.wndBonus.IsShow():
                self.wndBonus.Show()
                self.wndBonus.SetTop()
            else:
                self.wndBonus.Hide()
 
11. Następnie szukamy funkcji: 
 
def __HideWindows(self):
 
i w niej po wpisie:
 
self.wndInventory,\
 
dodajemy:
 
self.wndBonus,\
 
 
Tak właśnie zakończyliśmy dodawanie zakładki do innych plików. Teraz musimy do plików root dodać, dopakować, wrzucić, dorzucić plik:
uibonus.py
 
oraz do plików uiscript
trzeba dodać, dopakować wrzucić, dorzucić plik:

bonus.py
link:
 

skan:

skan.png
 

 

 

Edit. JEŚLI PO DODANIU, NIE CHCE "COŚ" DZIAŁAĆ(wyłącza się klient etc) SPRAWDZAMY SYSERR KLIENTOWE!!!!!
Następnie sprawdzamy co tam nam pisze odnośnie tegoż właśnie, czemu się nie chce włączyć.

PS. Jeśli błąd będzie tkwił w tym, co ja dodałem, to błędy będą wywalane do syserr w połowie po polsku. To co mogłem dać to dałem, by dawało po polsku. Odniesienie do miejsca, pliku gdzie szukać. 

Jedynym problemem na starszych klientach (2k10) i w dół, jest sprawdzanie locali 'IsARABIC', rozwiązanie jest banalne, znajdziecie je niżej!

 

Przykłady i objaśnienia błędów:

 

Przykład 1:
bonus.__LoadWindow - błąd ładowania okna Bonusów - exceptions.AttributeError:'module' object has no attribute 'IsARABIC'
 

Objaśnienie:

 


Wyraźnie napisane jest, "bonus.__LoadWindow" i komentarz "błąd ładowania okna bonósów czyli, coś źle gdzieś wpisane, dalej "module" czyli jakiś odnośnik nie ma atrybutu, odniesienia do czegoś, w innych plikach, funkcjach etc. i na samym końcu podana jest nazwa tego objektu. i szukamy w którymś z plików, takiego czegoś i patrzymy co tam jest.

 

Przykład 2(częściej spotykany, trudniejszy):

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 354)

Objaśnienie:

 

Objaśnienie jest dziwne, ponieważ odnosi się do funkcji, w momencie, gdzie jest błąd(?) tzn. mamy okno logowania(ładowania paska juz do gry) i nagle zamyka nam się klient i wywala taki błąd. Wykonuje się funkcja o jakiejś nazwie( tutaj akurat " SetSelectCharacterPhase") i nie kończy się ona, błąd i wywalą ją do syserr. Dlatego wtedy najczęściej problem może leżeć w spacjach zamiast Tabów, bo jak wiemy, Python jest specyficznym(jak i każdy język programowania) językiem programowania, gdzie taby są bardzo ważne. Dlatego wtedy spardzamy ostatnio edytowany/dodawany kod.



 
Ważne!
Jeśli się na tym nie znamy, co jak i po co, lepiej nie ruszać, zapytać kogoś na forum, o co chodzi po co na co, jak rozwiązać ten problem.

 

Naprawy błędów:

 

 


Błąd odnoszący się do "IsARABIC"

 

uiBonus.py(line:38) __LoadWindow

 
bonus.__LoadWindow - błąd ładowania okna Bonusów - exceptions.AttributeError:'module' object has no attribute 'IsARABIC'
 
1110 00:31:31416 :: ============================================================================================================
1110 00:31:31416 :: Abort!!!!

tutaj wystarczy tylko zakomentować(dodać znak "#" (hash) przed kodem(na samym początku linii) w liniach: 38, 39 i 40  w pliku uiBonus.py  w root'ach. Ma się to prezętować tak:

 

isarabic.png



2  Błąd tyczący się tabów:
 

 

 

networkModule.py(line:200) SetSelectCharacterPhase

system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:28) ?
system.py(line:130) __pack_import
 
networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 354)

 

 

Problem leży w spacjach zamiast tabów, w ostatnio dodanym/edytowanym kodzie. Trzeba posprawdzać.
Błąd wygląda tak:

 

taby1.png

 

a powinno być tak:

 

taby2.png

 

 

spacje to kropeczki a taby to te strzałeczki :)

 

 




Jeśli coś gdzieś źle napisałem, błąd pisowni, spoilerów etc, lub tez błędny opis(wszystko piszę z tego co sam się nauczyłem) to proszę o dokładne określenie, objaśnienie itp.

Zakaz kopiowania na inne fora, itp itd. Tylko do użytku własnego.

 

 

 

23.10.2016. UPDATE nowy dl z oryginalnymi plikami(tak, mam je na kompie cały czas :)  ) oraz zdjęcia wrzucone na moją stronę, nie uciekną już.

21.12.2019. UPDATE nowy DL z oryginalnymi plikami i zdjęcia na nowo wrzucone, już na forum. Nie powinno nic ucieknąć. Jak DL ucieknie, prosze o PW 😉

  • Odpowiedzi 191
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Świetna robota, mam nadzieje, że poprawnie liczy bonusy :P

Liczy liczy, nawet te wbudowane w broniach, zbrojach itp, oraz kamienie :) sprawdzalem po x-naście razy

Opublikowano

Witaj Sanki jak wyślę ci Game i Intro zrobisz mi to? Podeślesz?

 

Kurde dobrze zrobiłem i jak piszę logowanie wywala mi klienta.. co jest? Sanki?

 

może byś syserr cymbale podał?

Opublikowano

Sysser 0902 13:29:33256 ::
networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:27) ?
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 337)

0902 13:29:33256 :: ============================================================================================================
0902 13:29:33256 :: Abort!!!!

 

 

JAK TO NAPRAWIĆ?

Opublikowano

Sysser 0902 13:29:33256 ::

networkModule.py(line:194) SetSelectCharacterPhase

system.py(line:130) __pack_import

system.py(line:110) _process_result

introSelect.py(line:27) ?

system.py(line:130) __pack_import

 

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 337)

 

0902 13:29:33256 :: ============================================================================================================

0902 13:29:33256 :: Abort!!!!

 

 

JAK TO NAPRAWIĆ?

 

 

 

27 linijka introselect to import.

Wejdź w ten importowany plik i podaj mi 337 linijke.

Opublikowano

To jest Linijka 333 itd na 337 nic nie mam wpisane pusto.?

 

if NOT_NEED_DELETE_CODE:
self.btnDelete.SetEvent(ui.__mem_func__(self.PopupDeleteQuestion))
else:
self.btnDelete.SetEvent(ui.__mem_func__(self.InputPrivateCode))

self.btnLeft.SetEvent(ui.__mem_func__(self.DecreaseSlotIndex))
self.btnRight.SetEvent(ui.__mem_func__(self.IncreaseSlotIndex))

self.chrRenderer = self.CharacterRenderer()
self.chrRenderer.SetParent(self.backGround)
self.chrRenderer.Show()

 

27 linia w Introselect to: import interfaceModule Takie coś/

Opublikowano

Sysser 0902 13:29:33256 ::

networkModule.py(line:194) SetSelectCharacterPhase

system.py(line:130) __pack_import

system.py(line:110) _process_result

introSelect.py(line:27) ?

system.py(line:130) __pack_import

 

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 337)

 

0902 13:29:33256 :: ============================================================================================================

0902 13:29:33256 :: Abort!!!!

 

 

JAK TO NAPRAWIĆ?

 

 

najprawdopodobniej importu nie dodales gdzies. albo taby

 

 

PS. może ktoś napisać kto sprawdził? czy śmiga ? :)

Opublikowano

Miałem udostępnić podobne, lecz mnie uprzedziłeś i dobrze ( :D), gdyż szczerze mówiąc moje jest gorsze. :|

Dzięki, bynajmniej kilka rzeczy mogę podpatrzeć. 'Like' zasłużony.

Opublikowano

Niestety ale client wyłącza przy logowaniu.
TABy sprawdzone, importy są pliki dograne.

0902 21:45:05079 :: 
networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:135) __pack_import
system.py(line:115) _process_result
introSelect.py(line:28) ?
system.py(line:135) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:expected an indented block (line 916)

0902 21:45:05079 :: ============================================================================================================
0902 21:45:05079 :: Abort!!!!
Opublikowano

Sysser 0902 13:29:33256 ::

networkModule.py(line:194) SetSelectCharacterPhase

system.py(line:130) __pack_import

system.py(line:110) _process_result

introSelect.py(line:27) ?

system.py(line:130) __pack_import

 

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:unindent does not match any outer indentation level (line 337)

 

0902 13:29:33256 :: ============================================================================================================

0902 13:29:33256 :: Abort!!!!

 

 

JAK TO NAPRAWIĆ?

 

 

 

 

 

Niestety ale client wyłącza przy logowaniu.

TABy sprawdzone, importy są pliki dograne.

 

 

0902 21:45:05079 :: 
networkModule.py(line:194) SetSelectCharacterPhase
system.py(line:135) __pack_import
system.py(line:115) _process_result
introSelect.py(line:28) ?
system.py(line:135) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.IndentationError:expected an indented block (line 916)

0902 21:45:05079 :: ============================================================================================================
0902 21:45:05079 :: Abort!!!!

Taby i spacje gdzieś macie.

64562221938.png

Opublikowano

Było..

pokaż, że było takie. pokaż. to jest zrobione przeze mnie, a nie kopiowane z epvp, inforge czy jakiegos innego forum... widać, nawet nie przeczytałeś tematu bo tam wszystko pisało : )

Specjalista
Opublikowano

Świetna robota bardzo ładny i czytelny poradnik ;)

Gratuluje i zarazem dziękuje ;)

Pozdrawiam.

Pomogłeś,pomogę kiedy tylko brachu mogę!

 

graphic.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...