- Mesaj
- 11.540
- Çözümler
- 549
- Beğeni
- 12.195
- Puan
- 5.915
- Ticaret Puanı
- 2
Merhaba arkadaşlar,
Metin2 serverim için kodladığım poison gauge sistemini paylaşmak istiyorum.
Bu sistemi daha önce yapan kişi var lakin kendisi sadece ekran resmi paylaşmış ve bizim forumdan bir kullanıcının sistem hoşuna gittiği için kendisi yapmaya çalışmış ama ne yazık ki sonuca ulaşamadığı için benimle iletişime geçti bende verdiği linkteki ekran görüntüsüne baktım ve sistem hoşuma gitti diyebilirim. En iyisi bu sistemi kodliyim hem paylaşırım hemde kendi serverimde kullanırım dedim.
Giriş kısmını bıraktıysak artık anlatıma geçelim.
Sistem kısaca şöyle;
v1;
v2;
Konu içinden de anlatımını yapacağım lakin ekteki dosyayı indirerek anlatımları içinde bulabilirsiniz.
Github üzerinden kodlara erişmek için:
Not: İşlemleri yapmadan önce yedek almanızı öneririm. Bu sistemi kodlarken bulabildiğim sorunları çözdüm. Bilinmeyen bir sorun oluştuğu zaman konu altından belirtirseniz seve seve düzenlerim.
Not2: Sistem sadece Python üzerinden yapıldığı için Source dosyalarına ihtiyacınız yok!
Sırasıyla şu işlemleri uygulayınız;
Root/game.py dosyasını açın ve şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodu aratın;
Altına şu kodları ekleyin;
Root/interfaceModule.py dosyasını açın ve şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Root/uiParty.py dosyasını açın ve PartyMemberInfoBoard sınıfı içindeki şu kodları aratın;
Altına şu kodu ekleyin;
Aynı dosyada şu kodu aratın;
Altına şu kodu ekleyin;
Aynı dosyada PartyMemberInfoBoard sınıfı içindeki __LoadBoard() fonksiyonu içindeki şu kodları aratın;
Altına şu kodu ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Root/uiPlayerGauge.py dosyasını açın ve şu kodları aratın;
Altına şu kodları ekleyin;
Root/uiTaskbar.py dosyasını açın ve şu kodları aratın;
Altına şu kodu ekleyin;
Aynı dosyada şu kodu aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodu aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Altına şu kodları ekleyin;
Aynı dosyada şu kodları aratın;
Aşağıdaki kodlarla değiştiriniz;
Evet arkadaşlar root kısmı bu kadar.
Şimdi uiscript kısmına geçelim.
Not: Lakin burada önemli bir nokta var. uiTasbar.py dosyasında taskbar.py dosyasını locale dosyası üzerinden çektiği için uiscript içindeki taskbar.py yerine locale/tr/ui içindekini düzenlemelisiniz eğer sizin uiTaskbar.py dosyanızda uiscript packından çekiyorsa oradaki dosyayı düzenleyin.
UIScript/taskbar.py veya locale/xx/ui/taskbar.py dosyasını açın ve en alta şu kodları ekleyin;
Not: Yukarıdaki uiscript kodu bazı filesler uyumsuz olduğu için şu hatayı alıyorsanız;
Şu kodları aratın;
Altına ekleyin;
UIScript/PartyMemberInfoBoard.py açın ve en alta şu kodları ekleyin;
Evet arkadaşlar sistem bu şekildedir. Anlayabilmeniz için hazır kod vermiyorum.
Sistem için gerekli görseller ekteki dosyayı indirerek edinebilirsiniz.
Bu yüzden ekten verdiğim dosyayı indirip Client/ETC içindeki ymir work klasörünü oyununuzun ETC içine atın.
Not: Ekteki dosyanın içinde de anlatım mevcuttur. Konuda kodları eklerken tab ayarlarını filan düzgün yaptım. Gene de emin olmak için ekteki dosyanın anlatımını da kullanabilirsiniz.
Şimdiden herkese hayırlı olsun.
Metin2 serverim için kodladığım poison gauge sistemini paylaşmak istiyorum.
Bu sistemi daha önce yapan kişi var lakin kendisi sadece ekran resmi paylaşmış ve bizim forumdan bir kullanıcının sistem hoşuna gittiği için kendisi yapmaya çalışmış ama ne yazık ki sonuca ulaşamadığı için benimle iletişime geçti bende verdiği linkteki ekran görüntüsüne baktım ve sistem hoşuma gitti diyebilirim. En iyisi bu sistemi kodliyim hem paylaşırım hemde kendi serverimde kullanırım dedim.
Giriş kısmını bıraktıysak artık anlatıma geçelim.
Sistem kısaca şöyle;
v1;
v2;
Konu içinden de anlatımını yapacağım lakin ekteki dosyayı indirerek anlatımları içinde bulabilirsiniz.
Github üzerinden kodlara erişmek için:
Linkleri görebilmek için
giriş yap veya kayıt ol.
Not: İşlemleri yapmadan önce yedek almanızı öneririm. Bu sistemi kodlarken bulabildiğim sorunları çözdüm. Bilinmeyen bir sorun oluştuğu zaman konu altından belirtirseniz seve seve düzenlerim.
Not2: Sistem sadece Python üzerinden yapıldığı için Source dosyalarına ihtiyacınız yok!
Sırasıyla şu işlemleri uygulayınız;
Root/game.py dosyasını açın ve şu kodları aratın;
Python:
def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):
self.affectShower.BINARY_NEW_AddAffect(type, pointIdx, value, duration)
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
self.interface.DragonSoulActivate(type - chr.NEW_AFFECT_DRAGON_SOUL_DECK1)
elif chr.NEW_AFFECT_DRAGON_SOUL_QUALIFIED == type:
self.BINARY_DragonSoulGiveQuilification()
Altına şu kodları ekleyin;
Python:
elif 209 == type:
self.playerGauge.RefreshGuageColor("lime")
self.interface.HPPoisonEffectShow()
self.interface.PartyPoisonGuageShow()
Aynı dosyada şu kodu aratın;
Python:
def BINARY_NEW_RemoveAffect(self, type, pointIdx):
self.affectShower.BINARY_NEW_RemoveAffect(type, pointIdx)
if chr.NEW_AFFECT_DRAGON_SOUL_DECK1 == type or chr.NEW_AFFECT_DRAGON_SOUL_DECK2 == type:
self.interface.DragonSoulDeactivate()
Altına şu kodları ekleyin;
Python:
elif 209 == type:
self.playerGauge.RefreshGuageColor("red")
self.interface.HPPoisonEffectHide()
self.interface.PartyPoisonGuageHide()
Root/interfaceModule.py dosyasını açın ve şu kodları aratın;
Python:
def RefreshStamina(self):
self.wndTaskBar.RefreshStamina()
Altına şu kodları ekleyin;
Python:
def HPPoisonEffectShow(self):
self.wndTaskBar.HPPoisonEffectShow()
def HPPoisonEffectHide(self):
self.wndTaskBar.HPPoisonEffectHide()
Aynı dosyada şu kodları aratın;
Python:
def ChangePartyParameter(self, distributionMode):
self.wndParty.ChangePartyParameter(distributionMode)
Altına şu kodları ekleyin;
Python:
def PartyPoisonGuageShow(self):
self.wndParty.PartyPoisonGuageShow()
def PartyPoisonGuageHide(self):
self.wndParty.PartyPoisonGuageHide()
Root/uiParty.py dosyasını açın ve PartyMemberInfoBoard sınıfı içindeki şu kodları aratın;
Python:
def __init__(self):
ui.ScriptWindow.__init__(self)
self.pid = None
self.vid = None
Altına şu kodu ekleyin;
Python:
self.poison = 0
Aynı dosyada şu kodu aratın;
Python:
self.gauge = self.GetChild("Gauge")
Altına şu kodu ekleyin;
Python:
self.poisonGauge = self.GetChild("PoisonGauge")
Aynı dosyada PartyMemberInfoBoard sınıfı içindeki __LoadBoard() fonksiyonu içindeki şu kodları aratın;
Python:
self.__SetAffectsMouseEvent()
self.__HideAllAffects()
Altına şu kodu ekleyin;
Python:
self.poisonGauge.Hide()
Aynı dosyada şu kodları aratın;
Python:
def SetCharacterHP(self, hpPercentage):
hpPercentage = max(0, hpPercentage)
self.gauge.SetPercentage(hpPercentage, 100)
Altına şu kodları ekleyin;
Python:
self.poisonGauge.SetPercentage(hpPercentage, 100)
def UpdatePoisonGauge(self, arg):
self.poison = arg
if self.poison == 1:
if self.gauge.IsShow():
self.gauge.Hide()
self.poisonGauge.Show()
else:
if self.poisonGauge.IsShow():
self.poisonGauge.Hide()
self.gauge.Show()
Aynı dosyada şu kodları aratın;
Python:
def Unlink(self):
self.vid = None
self.nameTextLine.SetPackedFontColor(self.UNLINK_COLOR)
self.gauge.Hide()
Altına şu kodları ekleyin;
Python:
self.poisonGauge.Hide()
Aynı dosyada şu kodları aratın;
Python:
def __FindPartyMemberInfoBoardByPID(self, pid):
for board in self.partyMemberInfoBoardList:
if pid == board.GetCharacterPID():
return board
return None
Altına şu kodları ekleyin;
Python:
def __FindPartyMemberInfoBoardByName(self, name):
for board in self.partyMemberInfoBoardList:
if name == board.GetCharacterName():
return board
return None
Aynı dosyada şu kodları aratın;
Python:
def ChangePartyParameter(self, distributionMode):
self.partyMenu.ChangePartyParameter(distributionMode)
Altına şu kodları ekleyin;
Python:
def PartyPoisonGuageShow(self):
board = self.__FindPartyMemberInfoBoardByName(player.GetName())
if None == board:
return
board.UpdatePoisonGauge(1)
def PartyPoisonGuageHide(self):
board = self.__FindPartyMemberInfoBoardByName(player.GetName())
if None == board:
return
board.UpdatePoisonGauge(0)
Root/uiPlayerGauge.py dosyasını açın ve şu kodları aratın;
Python:
def DisableShowAlways(self):
self.showAlways = False
self.RefreshGauge()
Altına şu kodları ekleyin;
Python:
def RefreshGuageColor(self, color):
self.MakeGauge(100, color)
Root/uiTaskbar.py dosyasını açın ve şu kodları aratın;
Python:
self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]
Altına şu kodu ekleyin;
Python:
self.poisonEffect = 0
Aynı dosyada şu kodu aratın;
Python:
self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")
Altına şu kodları ekleyin;
Python:
self.hpPoisonGauge = self.GetChild("HPPoisonGauge")
self.hpPoisonRecoveryGaugeBar = self.GetChild("HPPoisonRecoveryGaugeBar")
self.hpPoisonGauge.Hide()
self.hpPoisonRecoveryGaugeBar.Hide()
Aynı dosyada şu kodu aratın;
Python:
self.spRecoveryGaugeBar = None
Altına şu kodları ekleyin;
Python:
self.hpPoisonGauge = None
self.hpPoisonRecoveryGaugeBar = None
self.poisonEffect = 0
Aynı dosyada şu kodları aratın;
Python:
def RefreshSkill(self):
self.curSkillButton.RefreshSkill()
for button in self.selectSkillButtonList:
button.RefreshSkill()
Altına şu kodları ekleyin;
Python:
def HPPoisonEffectShow(self):
self.poisonEffect = 1
self.hpGauge.Hide()
self.hpPoisonGauge.Show()
def HPPoisonEffectHide(self):
self.poisonEffect = 0
self.hpPoisonGauge.Hide()
self.hpGauge.Show()
Aynı dosyada şu kodları aratın;
Python:
def SetHP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
self.hpGauge.SetPercentage(curPoint, maxPoint)
self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))
if 0 == recoveryPoint:
self.hpRecoveryGaugeBar.Hide()
else:
destPoint = min(maxPoint, curPoint + recoveryPoint)
newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
self.hpRecoveryGaugeBar.Show()
Aşağıdaki kodlarla değiştiriniz;
Python:
def SetHP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint)
if maxPoint > 0:
self.hpGauge.SetPercentage(curPoint, maxPoint)
self.hpPoisonGauge.SetPercentage(curPoint, maxPoint)
self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))
if 0 == recoveryPoint:
self.hpRecoveryGaugeBar.Hide()
self.hpPoisonRecoveryGaugeBar.Hide()
else:
destPoint = min(maxPoint, curPoint + recoveryPoint)
newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
if self.poisonEffect == 0:
if self.hpPoisonRecoveryGaugeBar.IsShow():
self.hpPoisonRecoveryGaugeBar.Hide()
self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
self.hpRecoveryGaugeBar.Show()
else:
if self.hpRecoveryGaugeBar.IsShow():
self.hpRecoveryGaugeBar.Hide()
self.hpPoisonRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
self.hpPoisonRecoveryGaugeBar.Show()
Evet arkadaşlar root kısmı bu kadar.
Şimdi uiscript kısmına geçelim.
Not: Lakin burada önemli bir nokta var. uiTasbar.py dosyasında taskbar.py dosyasını locale dosyası üzerinden çektiği için uiscript içindeki taskbar.py yerine locale/tr/ui içindekini düzenlemelisiniz eğer sizin uiTaskbar.py dosyanızda uiscript packından çekiyorsa oradaki dosyayı düzenleyin.
UIScript/taskbar.py veya locale/xx/ui/taskbar.py dosyasını açın ve en alta şu kodları ekleyin;
Python:
window["children"][1]["children"][2]["children"] = window["children"][1]["children"][2]["children"] + (
{
"name" : "HPPoisonRecoveryGaugeBar",
"type" : "bar",
"x" : 0,
"y" : 0,
"width" : 95,
"height" : 13,
"color" : 0x55008000,
},
{
"name" : "HPPoisonGauge",
"type" : "ani_image",
"x" : 0,
"y" : 0,
"delay" : 6,
"images" :
(
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/01.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/02.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/03.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/04.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/05.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/06.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/07.tga",
),
},)
Not: Yukarıdaki uiscript kodu bazı filesler uyumsuz olduğu için şu hatayı alıyorsanız;
Kod:
0404 20:35:20028 :: File "game.py", line 766, in BINARY_NEW_AddAffect
0404 20:35:20028 :: File "interfaceModule.py", line 729, in PartyPoisonGuageShow
0404 20:35:20028 :: File "uiParty.py", line 758, in PartyPoisonGuageShow
0404 20:35:20029 :: AttributeError
0404 20:35:20029 :: :
0404 20:35:20029 :: 'NoneType' object has no attribute 'UpdatePoisonGauge'
0404 20:35:20029 ::
Şu kodları aratın;
Python:
{
"name" : "HPGauge",
"type" : "ani_image",
"x" : 0,
"y" : 0,
"delay" : 6,
"images" :
(
"D:/Ymir Work/UI/Pattern/HPGauge/01.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/02.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/03.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/04.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/05.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/06.tga",
"D:/Ymir Work/UI/Pattern/HPGauge/07.tga",
),
},
Altına ekleyin;
Python:
{
"name" : "HPPoisonRecoveryGaugeBar",
"type" : "bar",
"x" : 0,
"y" : 0,
"width" : 95,
"height" : 13,
"color" : 0x55008000,
},
{
"name" : "HPPoisonGauge",
"type" : "ani_image",
"x" : 0,
"y" : 0,
"delay" : 6,
"images" :
(
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/01.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/02.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/03.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/04.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/05.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/06.tga",
"D:/Ymir Work/UI/Pattern/HPPoisonGauge/07.tga",
),
},
UIScript/PartyMemberInfoBoard.py açın ve en alta şu kodları ekleyin;
Python:
window["children"] = window["children"] + (
{
"name" : "PoisonGauge",
"type" : "gauge",
"style" : ("not_pick",),
"x" : 22,
"y" : 17,
"width" : 84,
"color" : "lime",
},)
Evet arkadaşlar sistem bu şekildedir. Anlayabilmeniz için hazır kod vermiyorum.
Sistem için gerekli görseller ekteki dosyayı indirerek edinebilirsiniz.
Bu yüzden ekten verdiğim dosyayı indirip Client/ETC içindeki ymir work klasörünü oyununuzun ETC içine atın.
Not: Ekteki dosyanın içinde de anlatım mevcuttur. Konuda kodları eklerken tab ayarlarını filan düzgün yaptım. Gene de emin olmak için ekteki dosyanın anlatımını da kullanabilirsiniz.
Şimdiden herkese hayırlı olsun.
Dosya Eklentileri
Son düzenleme: