Skocz do zawartości
Masz już aplikację Sharegon?

Odkryj wszystkie możliwości. Dowiedz się więcej

Sharegon.pl

Zainstaluj aplikację Sharegon i korzystaj z powiadomień push oraz licznika nowych aktywności bezpośrednio z ekranu głównego.

Aby zainstalować tę aplikację na iOS i iPadOS.
  1. Tap the Share icon in Safari
  2. Przewiń menu i stuknij Dodaj do ekranu początkowego.
  3. Stuknij Dodaj w prawym górnym rogu.
Zainstaluj aplikację Sharegon na Androidzie
  1. Otwórz Sklep Google Play na swoim smarfonie.
  2. Wyszukaj „Sharegon” w pasku wyszukiwania.
  3. Stuknij „Zainstaluj”, aby pobrać aplikację.

Automatyczne anulowanie zaproszeń po przekroczeniu czasu

Featured Replies

Opublikowano

Cześć,

 

Zaktualizowana klasa 'QuestionDialogWithTimeLimit' 🕒 teraz wyświetla okno zaproszeń z limitem czasowym. Po upływie tego czasu zaproszenie zostanie automatycznie anulowane , a gracz, do którego wysłano zaproszenie, otrzyma informację na czacie 💬.

 

Prezentacja

 

Implementacja

📂Lokalizacja pliku: 'root -> uicommon.py'

 

🔎Szukaj

Tylko zalogowani Zaloguj się, aby wyświetlić chronioną treść Ten post zawiera treści dostępne tylko dla członków. Zaloguj się lub utwórz konto, aby odblokować całą zawartość tego posta. Zaloguj się Utwórz konto

 

♻️Zamień

 

 

📂Lokalizacja pliku: 'root -> game.py'

 

🔎Szukaj

 

♻️Zamień

 

🔎Szukaj

 

♻️Zamień

 

🔎Szukaj

 

♻️Zamień

 

Jeśli chcesz dodać nazwę gracza w komunikacie zaproszenia do gildii zapraszam do odwiedzenia tego tematu.

 

 

 📂Lokalizacja pliku: 'locale -> locale_game.txt'

 

Dodaj

 

🔎Szukaj

 

♻️Zamień

 

  • 7 miesięcy temu...
Opublikowano

@SevenceNormalnie Tobie działa wiadomość po skończeniu się czasu z gildiami? U mnie jej brak 

 

nie wazne, znowu nacpany zgubilem 1 linijke 🧓

Edytowane przez Dex666

  • 7 miesięcy temu...
Opublikowano

@Sevence Zauważyłem jeden problem przy łączeniu dwóch tematów: tego i < kliknij >

mamy do podmiany funkcje:

Czysta funkcja z game.py

PythonKod został skopiowany
	def RecvGuildInviteQuestion(self, guildID, guildName):			guildInviteQuestionDialog = uiCommon.QuestionDialog()			guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN)			guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))			guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))			guildInviteQuestionDialog.Open()			guildInviteQuestionDialog.guildID = guildID			self.guildInviteQuestionDialog = guildInviteQuestionDialog

na te dwie razem ( z dwóch tematów )

Automatyczne anulowanie zaproszeń po przekroczeniu czasu

PythonKod został skopiowany
	def RecvGuildInviteQuestion(self, guildID, guildName):		guildInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()		guildInviteQuestionDialog.SetText(guildName + localeInfo.GUILD_DO_YOU_JOIN)		guildInviteQuestionDialog.SetTimeOverMsg(localeInfo.GUILD_ADD_FRIEND_ANSWER_TIMEOVER)		guildInviteQuestionDialog.SetTimeOverEvent(self.AnswerGuildInvite, False) 		guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))		guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))		guildInviteQuestionDialog.Open(10)		guildInviteQuestionDialog.guildID = guildID		self.guildInviteQuestionDialog = guildInviteQuestionDialog

Rozbudowany komunikat zapraszania do gildii o nazwę gracza

PythonKod został skopiowany
	def RecvGuildInviteQuestion(self, guildID, guildName, inviterName):		guildInviteQuestionDialog = uiCommon.QuestionDialog2()		guildInviteQuestionDialog.SetText1(localeInfo.GUILD_INVITE_QUESTION % (inviterName, guildName))		guildInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN) 		guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))		guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))		guildInviteQuestionDialog.Open()		guildInviteQuestionDialog.guildID = guildID		self.guildInviteQuestionDialog = guildInviteQuestionDialog

W rezultacie wychodzi problem z przesunięciem tekstu o jedną linijkę w dół. W funkcji od znajomych i gildii jest ten sam problem.

"Czy chcesz przyjąć zaproszenie??" ; "zaakceptować?", Zapytanie zamiast być pomiędzy informacja o dodaniu do znajomych a pozostałym czasem na zaakceptowanie znajduje się dalej w pierwszej linijce tekstu.

obraz.pngobraz.png

Jeżeli ustawie funkcje w ten sposób, to nie mam zapytania czy chce dołączyć.

obraz.png

połączenie dwóch tematów w jeden

PythonKod został skopiowany
		def RecvGuildInviteQuestion(self, guildID, guildName, inviterName):			guildInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()			guildInviteQuestionDialog.SetText1(localeInfo.GUILD_INVITE_QUESTION % (inviterName, guildName))			guildInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN)			guildInviteQuestionDialog.SetTimeOverMsg(localeInfo.GUILD_ADD_FRIEND_ANSWER_TIMEOVER)			guildInviteQuestionDialog.SetTimeOverEvent(self.AnswerGuildInvite, False) 			guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))			guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))			guildInviteQuestionDialog.Open(10)			guildInviteQuestionDialog.guildID = guildID			self.guildInviteQuestionDialog = guildInviteQuestionDialog

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Poprawka funkcji zaproszeń do grupy: (w złym miejscu odczytuje nick postaci)

obraz.png

zamień:

def RecvPartyInviteQuestion(self, leaderVID, leaderName):

PythonKod został skopiowany
partyInviteQuestionDialog.SetText(localeInfo.PARTY_DO_YOU_JOIN + leaderName + "?")

na to:

def RecvPartyInviteQuestion(self, leaderVID, leaderName):

PythonKod został skopiowany
partyInviteQuestionDialog.SetText1(leaderName + localeInfo.PARTY_DO_YOU_JOIN + "?") -- możemy usunąć  + "?" jeżeli w locale_game mamy:	PARTY_DO_YOU_JOIN	 Zaprasza Cię do swojej grupy. Czy chcesz przyjąć zaproszenie?

obraz.pngf

Chciałbym uzyskać taki efekt na każdej z trzech opcji: grupa, znajomi, gildia

62148b71-6039-405c-8027-6f9957aa3cd1.jpg

Opublikowano

image.pngimage.pngimage.png


game.py

PythonKod został skopiowany
###GILDIA###def RecvGuildInviteQuestion(self, guildID, guildName, inviterName):	guildInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()	#emoji	#guildInviteQuestionDialog.SetText1("{}".format(Emoji("icon/emoji/add_friend.tga")) + " " + localeInfo.GUILD_INVITE_QUESTION % (inviterName,guildName))	guildInviteQuestionDialog.SetText1(localeInfo.GUILD_INVITE_QUESTION % (inviterName,guildName))	guildInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN)	guildInviteQuestionDialog.SetTimeOverMsg("{}{}".format(Emoji("icon/emoji/klepsydra.png"), " " + localeInfo.GUILD_ADD_FRIEND_ANSWER_TIMEOVER))	guildInviteQuestionDialog.SetTimeOverEvent(self.AnswerGuildInvite, False)	guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))	guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))	guildInviteQuestionDialog.open(10)	guildInviteQuestionDialog.guildID = guildID	self.guildInviteQuestionDialog = guildInviteQuestionDialog ###GRUPA###def RecvPartyInviteQuestion(self, leaderVID, leaderName):	partyInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()	partyInviteQuestionDialog.SetText1(leaderName + localeInfo.PARTY_DO_YOU_JOIN)	partyInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN + " {}".format(Emoji("icon/emoji/party.png")))	partyInviteQuestionDialog.SetTimeOverMsg("{} {}".format(Emoji("icon/emoji/klepsydra.png"), localeInfo.PARTY_ANSWER_TIMEOVER))	partyInviteQuestionDialog.SetTimeOverEvent(lambda arg=False: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.open(10)	partyInviteQuestionDialog.partyLeaderVID = leaderVID	self.partyInviteQuestionDialog = partyInviteQuestionDialog ###MESS###def OnMessengerAddFriendQuestion(self, name):	messengerAddFriendQuestion = uiCommon.QuestionDialogWithTimeLimit()	messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND % (name))	messengerAddFriendQuestion.SetText2(localeInfo.GUILD_DO_YOU_JOIN + " {}".format(Emoji("icon/emoji/add_friend.png")))	messengerAddFriendQuestion.SetTimeOverMsg("{} {}".format(Emoji("icon/emoji/klepsydra.png"), localeInfo.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER))	messengerAddFriendQuestion.SetTimeOverEvent(ui.__mem_func__(self.OnDenyAddFriend))	messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))	messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))	messengerAddFriendQuestion.open(10)	messengerAddFriendQuestion.name = name	self.messengerAddFriendQuestion = messengerAddFriendQuestion


uicommon.py

PythonKod został skopiowany
class QuestionDialog2(QuestionDialog):     def __init__(self):       QuestionDialog.__init__(self)       self.__CreateDialog()     def __del__(self):       QuestionDialog.__del__(self)     def __CreateDialog(self):       pyScrLoader = ui.PythonScriptLoader()       pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py")        self.board = self.GetChild("board")       self.textLine1 = self.GetChild("message1")       self.textLine2 = self.GetChild("message2")       self.textLine3 = self.GetChild("message3")       self.acceptButton = self.GetChild("accept")       self.cancelButton = self.GetChild("cancel")     def SetText1(self, text):       self.textLine1.SetText(text)     def SetText2(self, text):       self.textLine2.SetText(text)     def SetText3(self, text):       self.textLine3.SetText(text) class QuestionDialogWithTimeLimit(QuestionDialog2):     def __init__(self):       ui.ScriptWindow.__init__(self)        self.__CreateDialog()       self.endTime = 0       self.timeOverMsg = 0       self.timeOverEvent = None       self.timeOverEventArgs = None       self.timerEmoji = "icon/emoji/klepsydra.png"     def __del__(self):       QuestionDialog2.__del__(self)     def __CreateDialog(self):       pyScrLoader = ui.PythonScriptLoader()       pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py")        self.board = self.GetChild("board")       self.textLine1 = self.GetChild("message1")       self.textLine2 = self.GetChild("message2")       self.textLine3 = self.GetChild("message3")       self.acceptButton = self.GetChild("accept")       self.cancelButton = self.GetChild("cancel")     def open(self, timeout):    #def Open(self, msg, timeout):       self.SetCenterPosition()       self.SetTop()       self.Show()        #self.SetText1(msg)       self.endTime = app.GetTime() + timeout     def SetTimeOverEvent(self, event, *args):       self.timeOverEvent = event       self.timeOverEventArgs = args     def SetTimeOverMsg(self, msg):       self.timeOverMsg = msg     def OnTimeOver(self):       if self.timeOverEvent:          apply(self.timeOverEvent, self.timeOverEventArgs)       if self.timeOverMsg:          chat.AppendChat(chat.CHAT_TYPE_INFO, self.timeOverMsg)     def OnUpdate(self):       leftTime = max(0, self.endTime - app.GetTime())       self.SetText3("{}".format(Emoji(self.timerEmoji)) + " " + localeInfo.UI_LEFT_TIME % (leftTime))       if leftTime <= 0:          self.OnTimeOver()

questiondialog2.py

PythonKod został skopiowany
import uiScriptLocale window = {    "name" : "QuestionDialog",    "style" : ("movable", "float",),     "x" : SCREEN_WIDTH/2 - 125,    "y" : SCREEN_HEIGHT/2 - 52,     "width" : 280,    "height" : 115,     "children" :    (       {          "name" : "board",          "type" : "board",           "x" : 0,          "y" : 0,           "width" : 280,          "height" : 115,           "children" :          (             {                "name" : "message1",                "type" : "text",                 "x" : 0,                "y" : 15,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "message2",                "type" : "text",                 "x" : 0,                "y" : 40,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "message3",                "type" : "text",                 "x" : 0,                "y" : 65,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "accept",                "type" : "button",                 "x" : -40,                "y" : 83,                 "width" : 61,                "height" : 21,                 "horizontal_align" : "center",                "text" : uiScriptLocale.YES,                 "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",                "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",                "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",             },             {                "name" : "cancel",                "type" : "button",                 "x" : +40,                "y" : 83,                 "width" : 61,                "height" : 21,                 "horizontal_align" : "center",                "text" : uiScriptLocale.NO,                 "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",                "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",                "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",             },          ),       },    ),}

locale_game.txt

TextKod został skopiowany
GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?GUILD_INVITE_QUESTION Gracz %s zaprasza Cie do gildii: %sGUILD_ADD_FRIEND_ANSWER_TIMEOVER Zaproszenie do gildii zostalo anulowane.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER Zaproszenie do znajomych zostalo anulowane.PARTY_ANSWER_TIMEOVER Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s dodal Cie jako przyjaciela!PARTY_DO_YOU_JOIN zaprasza Ciê do grupy!

Jak ktoś nie ma emoji to usuwa:
1. "{}".format(Emoji("icon/emoji/klepsydra.png")) + " " +
2. + " " + "{}".format(Emoji("icon/emoji/party.png"))
3. + " " + "{}".format(Emoji("icon/emoji/add_friend.png"))
4. "{}".format(Emoji(self.timerEmoji)) + " " + z def OnUpdate(QuestionDialogWithTimeLimit)
5. self.timerEmoji = "icon/emoji/klepsydra.png" z def__init__(QuestionDialogWithTimeLimit

klepsydra.pngparty.pngadd_friend.png

Opublikowano
W dniu 19.08.2025 o 21:23, wojciech74 napisał(a):

image.pngimage.pngimage.png


game.py

📋

PythonKod został skopiowany
###GILDIA###def RecvGuildInviteQuestion(self, guildID, guildName, inviterName):	guildInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()	#emoji	#guildInviteQuestionDialog.SetText1("{}".format(Emoji("icon/emoji/add_friend.tga")) + " " + localeInfo.GUILD_INVITE_QUESTION % (inviterName,guildName))	guildInviteQuestionDialog.SetText1(localeInfo.GUILD_INVITE_QUESTION % (inviterName,guildName))	guildInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN)	guildInviteQuestionDialog.SetTimeOverMsg("{}{}".format(Emoji("icon/emoji/klepsydra.png"), " " + localeInfo.GUILD_ADD_FRIEND_ANSWER_TIMEOVER))	guildInviteQuestionDialog.SetTimeOverEvent(self.AnswerGuildInvite, False)	guildInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerGuildInvite(arg))	guildInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerGuildInvite(arg))	guildInviteQuestionDialog.open(10)	guildInviteQuestionDialog.guildID = guildID	self.guildInviteQuestionDialog = guildInviteQuestionDialog ###GRUPA###def RecvPartyInviteQuestion(self, leaderVID, leaderName):	partyInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit()	partyInviteQuestionDialog.SetText1(leaderName + localeInfo.PARTY_DO_YOU_JOIN)	partyInviteQuestionDialog.SetText2(localeInfo.GUILD_DO_YOU_JOIN + " {}".format(Emoji("icon/emoji/party.png")))	partyInviteQuestionDialog.SetTimeOverMsg("{} {}".format(Emoji("icon/emoji/klepsydra.png"), localeInfo.PARTY_ANSWER_TIMEOVER))	partyInviteQuestionDialog.SetTimeOverEvent(lambda arg=False: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerPartyInvite(arg))	partyInviteQuestionDialog.open(10)	partyInviteQuestionDialog.partyLeaderVID = leaderVID	self.partyInviteQuestionDialog = partyInviteQuestionDialog ###MESS###def OnMessengerAddFriendQuestion(self, name):	messengerAddFriendQuestion = uiCommon.QuestionDialogWithTimeLimit()	messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND % (name))	messengerAddFriendQuestion.SetText2(localeInfo.GUILD_DO_YOU_JOIN + " {}".format(Emoji("icon/emoji/add_friend.png")))	messengerAddFriendQuestion.SetTimeOverMsg("{} {}".format(Emoji("icon/emoji/klepsydra.png"), localeInfo.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER))	messengerAddFriendQuestion.SetTimeOverEvent(ui.__mem_func__(self.OnDenyAddFriend))	messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))	messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))	messengerAddFriendQuestion.open(10)	messengerAddFriendQuestion.name = name	self.messengerAddFriendQuestion = messengerAddFriendQuestion


uicommon.py

📋

PythonKod został skopiowany
class QuestionDialog2(QuestionDialog):     def __init__(self):       QuestionDialog.__init__(self)       self.__CreateDialog()     def __del__(self):       QuestionDialog.__del__(self)     def __CreateDialog(self):       pyScrLoader = ui.PythonScriptLoader()       pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py")        self.board = self.GetChild("board")       self.textLine1 = self.GetChild("message1")       self.textLine2 = self.GetChild("message2")       self.textLine3 = self.GetChild("message3")       self.acceptButton = self.GetChild("accept")       self.cancelButton = self.GetChild("cancel")     def SetText1(self, text):       self.textLine1.SetText(text)     def SetText2(self, text):       self.textLine2.SetText(text)     def SetText3(self, text):       self.textLine3.SetText(text) class QuestionDialogWithTimeLimit(QuestionDialog2):     def __init__(self):       ui.ScriptWindow.__init__(self)        self.__CreateDialog()       self.endTime = 0       self.timeOverMsg = 0       self.timeOverEvent = None       self.timeOverEventArgs = None       self.timerEmoji = "icon/emoji/klepsydra.png"     def __del__(self):       QuestionDialog2.__del__(self)     def __CreateDialog(self):       pyScrLoader = ui.PythonScriptLoader()       pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py")        self.board = self.GetChild("board")       self.textLine1 = self.GetChild("message1")       self.textLine2 = self.GetChild("message2")       self.textLine3 = self.GetChild("message3")       self.acceptButton = self.GetChild("accept")       self.cancelButton = self.GetChild("cancel")     def open(self, timeout):    #def Open(self, msg, timeout):       self.SetCenterPosition()       self.SetTop()       self.Show()        #self.SetText1(msg)       self.endTime = app.GetTime() + timeout     def SetTimeOverEvent(self, event, *args):       self.timeOverEvent = event       self.timeOverEventArgs = args     def SetTimeOverMsg(self, msg):       self.timeOverMsg = msg     def OnTimeOver(self):       if self.timeOverEvent:          apply(self.timeOverEvent, self.timeOverEventArgs)       if self.timeOverMsg:          chat.AppendChat(chat.CHAT_TYPE_INFO, self.timeOverMsg)     def OnUpdate(self):       leftTime = max(0, self.endTime - app.GetTime())       self.SetText3("{}".format(Emoji(self.timerEmoji)) + " " + localeInfo.UI_LEFT_TIME % (leftTime))       if leftTime <= 0:          self.OnTimeOver()

questiondialog2.py

📋

PythonKod został skopiowany
import uiScriptLocale window = {    "name" : "QuestionDialog",    "style" : ("movable", "float",),     "x" : SCREEN_WIDTH/2 - 125,    "y" : SCREEN_HEIGHT/2 - 52,     "width" : 280,    "height" : 115,     "children" :    (       {          "name" : "board",          "type" : "board",           "x" : 0,          "y" : 0,           "width" : 280,          "height" : 115,           "children" :          (             {                "name" : "message1",                "type" : "text",                 "x" : 0,                "y" : 15,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "message2",                "type" : "text",                 "x" : 0,                "y" : 40,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "message3",                "type" : "text",                 "x" : 0,                "y" : 65,                 "text" : uiScriptLocale.MESSAGE,                 "horizontal_align" : "center",                "text_horizontal_align" : "center",                "text_vertical_align" : "center",             },             {                "name" : "accept",                "type" : "button",                 "x" : -40,                "y" : 83,                 "width" : 61,                "height" : 21,                 "horizontal_align" : "center",                "text" : uiScriptLocale.YES,                 "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",                "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",                "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",             },             {                "name" : "cancel",                "type" : "button",                 "x" : +40,                "y" : 83,                 "width" : 61,                "height" : 21,                 "horizontal_align" : "center",                "text" : uiScriptLocale.NO,                 "default_image" : "d:/ymir work/ui/public/middle_button_01.sub",                "over_image" : "d:/ymir work/ui/public/middle_button_02.sub",                "down_image" : "d:/ymir work/ui/public/middle_button_03.sub",             },          ),       },    ),}

locale_game.txt

📋

TextKod został skopiowany
GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?GUILD_INVITE_QUESTION Gracz %s zaprasza Cie do gildii: %sGUILD_ADD_FRIEND_ANSWER_TIMEOVER Zaproszenie do gildii zostalo anulowane.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER Zaproszenie do znajomych zostalo anulowane.PARTY_ANSWER_TIMEOVER Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s dodal Cie jako przyjaciela!PARTY_DO_YOU_JOIN zaprasza Ciê do grupy!

Jak ktoś nie ma emoji to usuwa:
1. "{}".format(Emoji("icon/emoji/klepsydra.png")) + " " +
2. + " " + "{}".format(Emoji("icon/emoji/party.png"))
3. + " " + "{}".format(Emoji("icon/emoji/add_friend.png"))
4. "{}".format(Emoji(self.timerEmoji)) + " " + z def OnUpdate(QuestionDialogWithTimeLimit)
5. self.timerEmoji = "icon/emoji/klepsydra.png" z def__init__(QuestionDialogWithTimeLimit

klepsydra.pngparty.pngadd_friend.png

Działa świetnie dziękuję pięknie, jedynie co znalazłem problematycznego w Twojej paczce z emoji:

do uicommon.py & game.py dodać

PythonKod został skopiowany
from constInfo import Emoji

w bince GrpTextInstance.cpp

pod tym:

C++Kod został skopiowany
int ReadToken(const char* token)

dodajemy:

C++Kod został skopiowany
bool CGraphicTextInstance::EmojiPathProcess(const std::wstring& emojiBuffer, SEmoji& kEmoji, int& x, CGraphicFontTexture::TCharacterInfomation*& pSpaceInfo, CGraphicFontTexture*& pFontTexture, const UINT& dataCodePage, const DWORD& dwColor){	char retBuf[1024];	const int retLen = Ymir_WideCharToMultiByte(GetDefaultCodePage(), 0, emojiBuffer.c_str(), emojiBuffer.length(), retBuf, sizeof(retBuf) - 1, nullptr, nullptr);	retBuf[retLen] = '\0'; 	// list of available paths (they should end with /)	const static std::array pathList{ "icon/", "icon/emoji/", "" };	// list of available extensions (they should start with .)	const static std::array extList{ ".png", ".tga" };	// get extension path and if it has one	const auto extPath = std::filesystem::path(retBuf).extension();	const auto hasExt = std::find(std::begin(extList), std::end(extList), extPath) != std::end(extList);	// process for paths	std::string emojiPath;	for (const auto& pathElem : pathList)	{		if (hasExt) // process for known ext		{			const auto& tmpPath = fmt::format("{}{}", pathElem, retBuf);			if (!CResourceManager::Instance().IsFileExist(tmpPath.c_str()))				continue;			emojiPath = tmpPath;		}		else // otherwise for available extensions		{			for (const auto& extElem : extList)			{				const auto& tmpPath = fmt::format("{}{}{}", pathElem, retBuf, extElem);				if (!CResourceManager::Instance().IsFileExist(tmpPath.c_str()))					continue;				emojiPath = tmpPath;			}		}		// skip if no path is found		if (emojiPath.empty())			continue; 		{			auto pImage = (CGraphicImage*)CResourceManager::Instance().GetResourcePointer(emojiPath.c_str());			kEmoji.pInstance = CGraphicImageInstance::New();			kEmoji.pInstance->SetImagePointer(pImage); 			m_emojiVector.push_back(kEmoji);			memset(&kEmoji, 0, sizeof(SEmoji)); 			for (int i = 0; i < pImage->GetWidth() / (pSpaceInfo->width - 1); ++i)				x += __DrawCharacter(pFontTexture, dataCodePage, ' ', dwColor);			if (pImage->GetWidth() % (pSpaceInfo->width - 1) > 1)				x += __DrawCharacter(pFontTexture, dataCodePage, ' ', dwColor);			break;		}	}	return true;}

Teraz w temacie wkradł się błąd z kodowaniem oraz ucięcie enterów.

TextKod został skopiowany
GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?PARTY_ANSWER_TIMEOVER Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s dodal Cie jako przyjaciela!PARTY_DO_YOU_JOIN zaprasza Ciê do grupy!

PythonKod został skopiowany
GUILD_DO_YOU_JOIN	Czy chcesz przyjąć zaproszenie?GUILD_INVITE_QUESTION	Gracz %s zaprasza Cie do gildii: %sGUILD_ADD_FRIEND_ANSWER_TIMEOVER	Zaproszenie do gildii zostało anulowane.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER	Zaproszenie do znajomych zostało anulowane.PARTY_ANSWER_TIMEOVER	Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND	%s dodał Cię jako przyjaciela!PARTY_DO_YOU_JOIN	Zaprasza Cię do swojej grupy!
Opublikowano
  • Programista
W dniu 24.08.2025 o 20:46, ExoCarossa napisał(a):

Działa świetnie dziękuję pięknie, jedynie co znalazłem problematycznego w Twojej paczce z emoji:

do uicommon.py & game.py dodać

📋

PythonKod został skopiowany
from constInfo import Emoji

w bince GrpTextInstance.cpp

pod tym:

📋

C++Kod został skopiowany
int ReadToken(const char* token)

dodajemy:

📋

C++Kod został skopiowany
bool CGraphicTextInstance::EmojiPathProcess(const std::wstring& emojiBuffer, SEmoji& kEmoji, int& x, CGraphicFontTexture::TCharacterInfomation*& pSpaceInfo, CGraphicFontTexture*& pFontTexture, const UINT& dataCodePage, const DWORD& dwColor){	char retBuf[1024];	const int retLen = Ymir_WideCharToMultiByte(GetDefaultCodePage(), 0, emojiBuffer.c_str(), emojiBuffer.length(), retBuf, sizeof(retBuf) - 1, nullptr, nullptr);	retBuf[retLen] = '\0'; 	// list of available paths (they should end with /)	const static std::array pathList{ "icon/", "icon/emoji/", "" };	// list of available extensions (they should start with .)	const static std::array extList{ ".png", ".tga" };	// get extension path and if it has one	const auto extPath = std::filesystem::path(retBuf).extension();	const auto hasExt = std::find(std::begin(extList), std::end(extList), extPath) != std::end(extList);	// process for paths	std::string emojiPath;	for (const auto& pathElem : pathList)	{		if (hasExt) // process for known ext		{			const auto& tmpPath = fmt::format("{}{}", pathElem, retBuf);			if (!CResourceManager::Instance().IsFileExist(tmpPath.c_str()))				continue;			emojiPath = tmpPath;		}		else // otherwise for available extensions		{			for (const auto& extElem : extList)			{				const auto& tmpPath = fmt::format("{}{}{}", pathElem, retBuf, extElem);				if (!CResourceManager::Instance().IsFileExist(tmpPath.c_str()))					continue;				emojiPath = tmpPath;			}		}		// skip if no path is foundif (emojiPath.empty())			continue; 		{			auto pImage = (CGraphicImage*)CResourceManager::Instance().GetResourcePointer(emojiPath.c_str());			kEmoji.pInstance = CGraphicImageInstance::New();			kEmoji.pInstance->SetImagePointer(pImage); 			m_emojiVector.push_back(kEmoji);			memset(&kEmoji, 0, sizeof(SEmoji)); 			for (int i = 0; i < pImage->GetWidth() / (pSpaceInfo->width - 1); ++i)				x += __DrawCharacter(pFontTexture, dataCodePage, ' ', dwColor);			if (pImage->GetWidth() % (pSpaceInfo->width - 1) > 1)				x += __DrawCharacter(pFontTexture, dataCodePage, ' ', dwColor);			break;		}	}	return true;}

Teraz w temacie wkradł się błąd z kodowaniem oraz ucięcie enterów.

📋

TextKod został skopiowany
GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?PARTY_ANSWER_TIMEOVER Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s dodal Cie jako przyjaciela!PARTY_DO_YOU_JOIN zaprasza Ciê do grupy!

📋

PythonKod został skopiowany
GUILD_DO_YOU_JOIN	Czy chcesz przyjąć zaproszenie?GUILD_INVITE_QUESTION	Gracz %s zaprasza Cie do gildii: %sGUILD_ADD_FRIEND_ANSWER_TIMEOVER	Zaproszenie do gildii zostało anulowane.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER	Zaproszenie do znajomych zostało anulowane.PARTY_ANSWER_TIMEOVER	Zaproszenie do grupy zostalo anulowane.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND	%s dodał Cię jako przyjaciela!PARTY_DO_YOU_JOIN	Zaprasza Cię do swojej grupy!

Nigdy w życiu memset na strukturze, no chyba, że chcecie mieć crashe albo heap corruption.

C++Kod został skopiowany
kEmoji = {};

To protip

Edytowane przez Thorek

  • 7 miesięcy temu...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Konto

Nawigacja

Skonfiguruj powiadomienia push w przeglądarce.

Chrome (Android)
  1. Stuknij ikonę kłódki obok paska adresu.
  2. Wybierz Uprawnienia → Powiadomienia.
  3. Dostosuj swoje preferencje.
Chrome (Desktop)
  1. Kliknij ikonę kłódki na pasku adresu.
  2. Wybierz Ustawienia witryny.
  3. Znajdź Powiadomienia i dostosuj swoje preferencje.