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

Nieaktywny

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

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

 

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

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

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

 

 

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

 

Dodaj

🔐 Ukryta Treść 🔐

 

🔎Szukaj

🔐 Ukryta Treść 🔐

 

♻️Zamień

🔐 Ukryta Treść 🔐

 

  • 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

	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

	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

	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

		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):

partyInviteQuestionDialog.SetText(localeInfo.PARTY_DO_YOU_JOIN + leaderName + "?")

na to:

def RecvPartyInviteQuestion(self, leaderVID, leaderName):

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

###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

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

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

GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?
GUILD_INVITE_QUESTION Gracz %s zaprasza Cie do gildii: %s
GUILD_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 23:23, wojciech74 napisał(a):

image.pngimage.pngimage.png


game.py

📋

###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

📋

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

📋

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

📋

GUILD_DO_YOU_JOIN Czy chcesz przyj¹æ zaproszenie?
GUILD_INVITE_QUESTION Gracz %s zaprasza Cie do gildii: %s
GUILD_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ć

from constInfo import Emoji

w bince GrpTextInstance.cpp

pod tym:

int ReadToken(const char* token)

dodajemy:

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.

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!

GUILD_DO_YOU_JOIN	Czy chcesz przyjąć zaproszenie?
GUILD_INVITE_QUESTION	Gracz %s zaprasza Cie do gildii: %s
GUILD_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
41 minut temu, 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ć

📋

from constInfo import Emoji

w bince GrpTextInstance.cpp

pod tym:

📋

int ReadToken(const char* token)

dodajemy:

📋

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.

📋

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!

📋

GUILD_DO_YOU_JOIN	Czy chcesz przyjąć zaproszenie?
GUILD_INVITE_QUESTION	Gracz %s zaprasza Cie do gildii: %s
GUILD_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.

kEmoji = {};

To protip

Edytowane przez Thorek

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.