Skocz do zawartości

Problemy przy wdrożeniu systemu - Dungeon Info System

Opublikowano

Witam panowie potrzebuje pomocy , dodałem sobie system z tego tematu:

 

Po dodaniu gdy klikam na przycisk na minimapie nic się nie otwiera i takie błędy mam w syserr

 

Ch1:

SYSERR: Dec  8 16:51:02 :: RunState: LUA_ERROR: ...sr/home/mt2/share/locale/poland/quest/dungeonLib.lua:114: attempt to call field `get_my_rank' (a nil value)
SYSERR: Dec  8 16:51:02 :: WriteRunningStateToSyserr: LUA_ERROR: quest dungeon_manager.start click

 

Client:

Spoiler
1208 15:51:21449 :: Traceback (most recent call last):

1208 15:51:21449 ::   File "ui.py", line 1020, in CallEvent

1208 15:51:21449 ::   File "ui.py", line 87, in __call__

1208 15:51:21450 ::   File "ui.py", line 69, in __call__

1208 15:51:21450 ::   File "uiMiniMap.py", line 537, in ShowDungeonInfo

1208 15:51:21450 ::   File "interfaceModule.py", line 1047, in ToggleDungeonInfoWindow

1208 15:51:21450 ::   File "uiDungeonInfo.py", line 143, in Open

1208 15:51:21450 ::   File "uiDungeonInfo.py", line 126, in LoadDialog

1208 15:51:21451 ::   File "uiDungeonInfo.py", line 263, in LoadDungeonInfoBoard

1208 15:51:21451 :: KeyError
1208 15:51:21451 :: :
1208 15:51:21451 :: 0
1208 15:51:21451 ::

 

 

Dungeonlib.lua:

https://pastebin.com/QmEJsCxL

 

dungeon_manager.quest:

https://pastebin.com/5mPrGjHS

 

uiDungeonInfo.py:

https://pastebin.com/BQ9yUjSj

 

Proszę o pomoc

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano

Ten problem z uruchomieniem GUI wynika przez funkcję podaną w logu 'get_my_rank', która nie zwraca wartości. Spróbuj dodać do niej logi i sprawdź co tam zwraca.

 

Przykładowo: 

int dungeon_get_my_rank(lua_State* L)
{
	// DungeonMapIndex, RankingType (Completed|FinishTime|HighestDamage)
	if (!lua_tonumber(L, 1) || !lua_tonumber(L, 2))
	{
		sys_err("Invalid argument");
		return 0;
	}

	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	DWORD pid = ch->GetPlayerID();

	sys_log(0, "dungeon rank input - map_index=%d, rank_type=%d", map_index, rank_type);


	int map_index = int(lua_tonumber(L, 1));
	BYTE rank_type = int(lua_tonumber(L, 2));

	if (map_index <= 0 || rank_type <= 0)
	{
		sys_err("Invalid rank arguments");
		return 0;
	}

	char szQuery[1024];
	snprintf(szQuery, sizeof(szQuery), "SELECT "
		"completed, time, damage FROM dungeon_ranking%s WHERE pid = '%u' AND dungeon_index = '%d'", get_table_postfix(), pid, map_index);
		
	std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery));



	if (pMsg->Get()->uiNumRows > 0)
	{
		MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);

		int points = 0;
		if (rank_type == 1)
			str_to_number(points, row[0]); // completed
		else if (rank_type == 2)
			str_to_number(points, row[1]); // time
		else if (rank_type == 3)
			str_to_number(points, row[2]); // damage


		sys_log(0, "query result=%d for rank_type=%d", result, rank_type);


		lua_pushnumber(L, points);

	}
	else
	{
		sys_log(0, "no result for map_index=%d, rank_type=%d", map_index, rank_type);

		lua_pushnumber(L, 0);
	}

	return 1;
}

 

 

Opublikowano
  • Programista
1 minutę temu, Sevence napisał(a):

Ten problem z uruchomieniem GUI wynika przez funkcję podaną w logu 'get_my_rank', która nie zwraca wartości. Spróbuj dodać do niej logi i sprawdź co tam zwraca.

 

Przykładowo: 

int dungeon_get_my_rank(lua_State* L)
{
	// DungeonMapIndex, RankingType (Completed|FinishTime|HighestDamage)
	if (!lua_tonumber(L, 1) || !lua_tonumber(L, 2))
	{
		sys_err("Invalid argument");
		return 0;
	}

	LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
	DWORD pid = ch->GetPlayerID();

	sys_log(0, "dungeon rank input - map_index=%d, rank_type=%d", map_index, rank_type);


	int map_index = int(lua_tonumber(L, 1));
	BYTE rank_type = int(lua_tonumber(L, 2));

	if (map_index <= 0 || rank_type <= 0)
	{
		sys_err("Invalid rank arguments");
		return 0;
	}

	char szQuery[1024];
	snprintf(szQuery, sizeof(szQuery), "SELECT "
		"completed, time, damage FROM dungeon_ranking%s WHERE pid = '%u' AND dungeon_index = '%d'", get_table_postfix(), pid, map_index);
		
	std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(szQuery));



	if (pMsg->Get()->uiNumRows > 0)
	{
		MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);

		int points = 0;
		if (rank_type == 1)
			str_to_number(points, row[0]); // completed
		else if (rank_type == 2)
			str_to_number(points, row[1]); // time
		else if (rank_type == 3)
			str_to_number(points, row[2]); // damage


		sys_log(0, "query result=%d for rank_type=%d", result, rank_type);


		lua_pushnumber(L, points);

	}
	else
	{
		sys_log(0, "no result for map_index=%d, rank_type=%d", map_index, rank_type);

		lua_pushnumber(L, 0);
	}

	return 1;
}

 

 

Chryste, przecież przez ten kod kacu byłby w stanie bazę wywalić swoim skryptem  😄

 

Opublikowano
11 minut temu, KoYGeR napisał(a):

Chryste, przecież przez ten kod kacu byłby w stanie bazę wywalić swoim skryptem  😄

True jak pobrałem ten system i zerknąłem w kod to trauma. 😄

Opublikowano
  • Autor

Rozwiązane został tylko błąd w Client

 

1208 16:28:04498 :: Cannot find item by 0

 

image.png.7f0044b737a222cd0ddf4f0eccacc9f8.png

Opublikowano
2 minuty temu, TIMEK napisał(a):

Rozwiązane został tylko błąd w Client

 

1208 16:28:04498 :: Cannot find item by 0

To podziel się rozwiązaniem dla innych, którzy będą mieli ten sam problem. Ten błąd cannot find item by 0 obstawiam, że wynika z braku określonej przepustki, ale nie jestem pewien. 

Opublikowano
  • Programista

Taki super system, że wali błędami, gdy się ustawia dungeon bez wymaganej przepustki? 😄

 

3 minuty temu, TIMEK napisał(a):

Rozwiązane został tylko błąd w Client

 

1208 16:28:04498 :: Cannot find item by 0

 

image.png.7f0044b737a222cd0ddf4f0eccacc9f8.png

 

Znajdź w ui tego systemu coś w stylu:

item.SelecItem([...]) # w miejscu [...] może być coś w stylu: ItemVnum, item_vnum, ItemIndex, etc.

 

Poprzedź tę linijkę takim warunkiem:

if item_vnum: # item_vnum dostosuj pod siebie

 

Opublikowano
  • Autor

Błąd wynika z własnej głupoty xD Poprostu nie podmieniłem plików db i game po kompilacji sam nie wiem jak to się stało xD

Opublikowano
Teraz, TIMEK napisał(a):

Błąd wynika z własnej głupoty xD Poprostu nie podmieniłem plików db i game po kompilacji sam nie wiem jak to się stało xD

A już myślałem, ze z tego tematu wyniknie jakiś konkretne rozwiązanie. ;x

 

2 minuty temu, KoYGeR napisał(a):

Znajdź w ui tego systemu coś w stylu:

item.SelecItem([...]) # w miejscu [...] może być coś w stylu: ItemVnum, item_vnum, ItemIndex, etc.

W sensie, że próbuje ustawić przedmiot na slocie w GUI, który nie jest ustawiony? 

Opublikowano
  • Programista
		if dungeonItemVnum > 0:
			self.SetItemSlot(dungeonItemVnum, dungeonItemCount)
		else:
			self.SetItemSlot(0, 0)
			self.dungeonInfoItemSlot.SetCoverButton(0, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, self.ITEM_SLOT_ENABLE, False, False)
			self.dungeonInfoItemSlot.SetAlwaysRenderCoverButton(0)

	def SetItemSlot(self, itemVnum, itemCount):
		itemIndex = itemVnum
		itemCount = itemCount

		self.dungeonInfoItemSlot.SetItemSlot(0, itemIndex, itemCount)
		item.SelectItem(itemVnum)

		self.dungeonItemToolTip = uiToolTip.ItemToolTip()
		self.dungeonItemToolTip.AppendTextLine(item.GetItemName(), self.TOOLTIP_SPECIAL_COLOR)
		self.dungeonItemToolTip.AppendDescription(item.GetItemDescription(), 26)
		self.dungeonItemToolTip.AlignHorizonalCenter()

 

Czy tylko mnie to bawi? 😄

Opublikowano
28 minut temu, KoYGeR napisał(a):

Chryste, przecież przez ten kod kacu byłby w stanie bazę wywalić swoim skryptem  😄

 

Swoim xD? Jak on kodować nie potrafi, system nie warty dodania tak jak pisali chłopaki up ;)

Opublikowano
  • Programista
1 minutę temu, HeskuGame napisał(a):

Swoim xD? Jak on kodować nie potrafi, system nie warty dodania tak jak pisali chłopaki up 😉

KacMorderca od HL bota  : )

Opublikowano
11 minut temu, KoYGeR napisał(a):
	def SetItemSlot(self, itemVnum, itemCount):
		itemIndex = itemVnum
		itemCount = itemCount

		self.dungeonInfoItemSlot.SetItemSlot(0, itemIndex, itemCount)
		item.SelectItem(itemVnum)

		self.dungeonItemToolTip = uiToolTip.ItemToolTip()
		self.dungeonItemToolTip.AppendTextLine(item.GetItemName(), self.TOOLTIP_SPECIAL_COLOR)
		self.dungeonItemToolTip.AppendDescription(item.GetItemDescription(), 26)
		self.dungeonItemToolTip.AlignHorizonalCenter()

 

Czy tylko mnie to bawi? 😄

Też mnie bawi, ciekaw jestem co autor miał na myśli, tworząc te zmienne lokalne i jeszcze je tak samo nazwać. 😆

Opublikowano
6 minut temu, KoYGeR napisał(a):

KacMorderca od HL bota  : )

Hl'a koduje Guto jeżeli chodzi o c++ itd a Cycu python'a KacMorderca nie ma elementarnej wiedzy na temat programowania (to nie jest hejt tylko stwierdzenie faktu) tam z nimi siedzi jeszcze Noriaki to też coś tam im ogarnia. Zajmuje się supportem u nich i odwalaniem na priv wersji hl'a na serwerach

Edytowane przez HeskuGame

Opublikowano
  • Autor

Ale to dziwne po kliknięciu na teleport albo ranking pokazuje coś takiego

image.png?ex=67571349&is=6755c1c9&hm=f3d22cbc5a73dbb2518eec90e0f9ef3de38d0142715a96af8defb9d6a498ae1a&

 

I wali takimi błędami a przeciez mam split w kodzie:

 

SYSERR: Dec  8 17:53:35 :: RunState: LUA_ERROR: [string "dungeon_manager"]:2: attempt to call global `split' (a nil value)
SYSERR: Dec  8 17:53:35 :: WriteRunningStateToSyserr: LUA_ERROR: quest dungeon_manager.start click
SYSERR: Dec  8 17:53:38 :: Input: no quest running for pc, cannot process input : 1

Opublikowano

Jesteś pewien, że masz funkcję split w questlib? 

 

function split(string_,delimiter)
    local result = { }
    local from  = 1
    local delim_from, delim_to = string.find( string_, delimiter, from  )
    while delim_from do
        table.insert( result, string.sub( string_, from , delim_from-1 ) )
        from  = delim_to + 1
        delim_from, delim_to = string.find( string_, delimiter, from  )
    end
    table.insert( result, string.sub( string_, from  ) )
    return result
end

 

Opublikowano
  • Autor
15 minut temu, Sevence napisał(a):

Jesteś pewien, że masz funkcję split w questlib? 

 

function split(string_,delimiter)
    local result = { }
    local from  = 1
    local delim_from, delim_to = string.find( string_, delimiter, from  )
    while delim_from do
        table.insert( result, string.sub( string_, from , delim_from-1 ) )
        from  = delim_to + 1
        delim_from, delim_to = string.find( string_, delimiter, from  )
    end
    table.insert( result, string.sub( string_, from  ) )
    return result
end

 

No tak mi chodziło o quest_functions ale dzięki działa

  • Sevence zmienił(a) tytuł na Problemy przy wdrożeniu systemu - Dungeon Info System
Opublikowano
  • Autor

Tylko dziwne okienko mi wyskakuje podczas teleportacji i jak wciskam ranking a syserr czysty

image.png?ex=67571349&is=6755c1c9&hm=f3d22cbc5a73dbb2518eec90e0f9ef3de38d0142715a96af8defb9d6a498ae1a&

Opublikowano
  • Rozwiązanie

🔍Szukaj: 'root -> game.py'

	def OpenQuestWindow(self, skin, idx):
		self.interface.OpenQuestWindow(skin, idx)

 

♻️Zamień:

	def OpenQuestWindow(self, skin, idx):
		if constInfo.INPUT_IGNORE == 1:
			return
		else:
			self.interface.OpenQuestWindow(skin, idx)
Opublikowano
  • Autor
14 minut temu, Sevence napisał(a):

🔍Szukaj: 'root -> game.py'

	def OpenQuestWindow(self, skin, idx):
		self.interface.OpenQuestWindow(skin, idx)

 

♻️Zamień:

	def OpenQuestWindow(self, skin, idx):
		if constInfo.INPUT_IGNORE == 1:
			return
		else:
			self.interface.OpenQuestWindow(skin, idx)

Działa Dzięki wielkie

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