Skocz do zawartości

Problem z wdrożeniem systemu ibeast skills select - 'NoneType' object has no attribute 'Open'

Opublikowano

Siema, próbowałem to dodać i mam takie coś w sysserze:

0306 20:37:10452 :: Traceback (most recent call last):

0306 20:37:10453 :: File "networkModule.py", line 266, in SetGamePhase

0306 20:37:10453 :: File "game.py", line 115, in init

0306 20:37:10453 :: File "game.py", line 1873, in __ServerCommand_Build

0306 20:37:10453 :: AttributeError

0306 20:37:10453 :: :

0306 20:37:10453 :: 'NoneType' object has no attribute 'Open'

0306 20:37:10453 ::

GAME.PY w załączniku. Miałby ktoś coś na to pomysł?

image.png

game.py

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano

Nie dałeś żadnych plików do wglądu. Ale z doświadczeni wiem, że jego systemy przeważnie z wycieku nie są kompletne i wywalają kanały

Opublikowano
  • Programista

Tutaj masz wybór umiejętności

Opublikowano
  • Autor
7 godzin temu, KoYGeR napisał(a):

Tutaj masz wybór umiejętności

Próbowałem ten Twój, ale jakoś mi to nie chciało śmigać, jednak nie chciałem zawracać głowy swoimi problemami

10 godzin temu, Rain94 napisał(a):

Nie dałeś żadnych plików do wglądu. Ale z doświadczeni wiem, że jego systemy przeważnie z wycieku nie są kompletne i wywalają kanały

Być może packa nie jest kompletna, dlatego wyrzuca jakieś błędy.

Opublikowano

Sam game.py niewiele tu pomoże przydałoby się jeszcze plik uiselectskill, a najlepiej paczka systemu, który próbujesz zaimplementować.

  • Sevence zmienił(a) tytuł na Problem z wdrożeniem systemu ibeast skills select - 'NoneType' object has no attribute 'Open'
Opublikowano

Po pierwsze używaj pycharm do edycji plików Pythona, to unikniesz wielu problemów. Po drugie Notepad++> ctrl+f> szukaj w plikach, ustawiasz lokalizacje na root>”nonetype” i szukasz wyniku w pliku, który edytowałeś. Jak znajdziesz to szukasz pod tym def open(). Jesli jest, to wcięcia zrypane, jeśli nie ma, to chyba wiesz co dalej.

Opublikowano
  • Rozwiązanie

Błąd, mówi jasno masz niezainicjowany obiekt skillSelect i wywołujesz na nim metodę 'Open'. Sprawdzając Twój plik game.py widzę że wywołujesz inicjalizację po self.__ServerCommand_Build()

        if app.ENABLE_SKILL_SELECT_FEATURE:
            self.skillSelect = uiselectskill.SkillSelectWindow()
            self.skillSelect.Hide() 

Spróbuj przenieść ten blok kodu przed te dwa wywołania w ten sposób:

	def __init__(self, stream):
		ui.ScriptWindow.__init__(self, "GAME")
		self.SetWindowName("game")
		net.SetPhaseWindow(net.PHASE_WINDOW_GAME, self)
		player.SetGameWindow(self)

		if app.ENABLE_SKILL_SELECT_FEATURE:
			self.skillSelect = None

		self.quickSlotPageIndex = 0
		self.lastPKModeSendedTime = 0
		self.pressNumber = None

		self.guildWarQuestionDialog = None
		self.interface = None
		self.targetBoard = None
		self.console = None
		self.mapNameShower = None
		self.affectShower = None
		self.playerGauge = None
		
		if app.ENABLE_KEYBOARD_SETTINGS:
			self.wndKeyChange = None
		
		self.stream=stream
		self.interface = interfaceModule.Interface()
		self.interface.MakeInterface()
		self.interface.ShowDefaultWindows()

		self.curtain = uiPhaseCurtain.PhaseCurtain()
		self.curtain.speed = 0.03
		self.curtain.Hide()

		self.targetBoard = uiTarget.TargetBoard()
		self.targetBoard.SetWhisperEvent(ui.__mem_func__(self.interface.OpenWhisperDialog))
		self.targetBoard.Hide()

		self.console = consoleModule.ConsoleWindow()
		self.console.BindGameClass(self)
		self.console.SetConsoleSize(wndMgr.GetScreenWidth(), 200)
		self.console.Hide()

		self.mapNameShower = uiMapNameShower.MapNameShower()
		self.affectShower = uiAffectShower.AffectShower()

		self.playerGauge = uiPlayerGauge.PlayerGauge(self)
		self.playerGauge.Hide()
		
		if app.ENABLE_SKILL_SELECT_FEATURE:
			self.skillSelect = uiselectskill.SkillSelectWindow()
			self.skillSelect.Hide()			

		self.__SetQuickSlotMode()

		self.__ServerCommand_Build()
		self.__ProcessPreservedServerCommand()
		
		if app.ENABLE_KEYBOARD_SETTINGS:
			self.wndKeyChange = uiKeyChange.KeyChangeWindow(self, self.interface)
			self.ADDKEYBUFFERCONTROL = player.KEY_ADDKEYBUFFERCONTROL
			self.ADDKEYBUFFERALT = player.KEY_ADDKEYBUFFERALT
			self.ADDKEYBUFFERSHIFT = player.KEY_ADDKEYBUFFERSHIFT

Sprawdź też, czy masz włączony w ogóle ten moduł i czy dodałeś wpis w locale_inc.h z #define ENABLE_SKILL_SELECT_FEATURE

Opublikowano
  • Autor

Dziękuję za pomoc, trochę się z tym bawiłem i to nie było wszystko, żeby to ogarnąć, ale jakoś sobie poradziłem. Trzeba było również usunąć kod od likana.

image.png

dziękuję @Sevence

i @wojciech74 za poradę dotyczącą programu, to faktycznie bardzo dużo pomaga.

Opublikowano

Świetnie, że się udało. Możesz podzielić się krokami, które wykonałeś dodatkowo? Może to pomóc innym w podobnej sytuacji. @Krystian

Opublikowano
  • Autor
1 godzinę temu, Sevence napisał(a):

Świetnie, że się udało. Możesz podzielić się krokami, które wykonałeś dodatkowo? Może to pomóc innym w podobnej sytuacji. @Krystian

Jeśli ktoś nie ma likana na swoim serwerze, trzeba po prostu usunąć kilka linijek związanych z likanem właśnie w uiselectskill.py

A dokładnie:

if app.ENABLE_WOLFMAN_CHARACTER:

JOB_NAME_DICT.update({4 : [localeInfo.JOB_WOLFMAN1,localeInfo.JOB_WOLFMAN2],})

if app.ENABLE_WOLFMAN_CHARACTER:

JOB_LIST.update({4 : localeInfo.JOB_WOLFMAN,})

def EmptyJob(self):

chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.JOB_SELECT_LYCAN_ERROR)

  • Poly zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.