- Katılım
- 5 Nis 2019
- Konular
- 2
- Mesajlar
- 52
- Çözüm
- 1
- Reaksiyon Skoru
- 76
- Altın Konu
- 0
- Başarım Puanı
- 73
- MmoLira
- 910
- DevLira
- 3
HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
Konuya başlamadan önce;
Bu sistemi baya bi bir zamandır bir arkadaşım isteği üzerine kodluyordum. Sistemin son halini de çarşamba gecesi de kendi sitemden paylaştım lakin sitemdeki bana gelen bildirimde izinsiz bir şekilde sistemin paylaşıldığı bilgisini aldım. Arkadaşlar ben her zaman özgür yazılıma inanan birisiyim ama bir şey paylaşıyorsanız en azından kimin tarafından yapıldığını belirtmek zorundasınız. Bu hususta bu linkte yapılan paylaşımı https://forum.turkmmo.com/konu/3689867-poison-gauge-system/ forum yetkililerine bildirdim. Ve bir daha böyle bi terbiyesizlik olmasın diye bu sitede de paylaşma kararı aldım.
Sistem kısaca şöyle;
geliştirilme aşamasındaki video;
Son aşamadaki video;
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;
@sau feng tarafından bildirilen bir sorunun çözümü. Çözüm için teşekkürler.
Not: Yukarıdaki uiscript kodu bazı filesler uyumsuz olduğu için şu hatayı alıyorsanız;
Şu kodları aratın;
Altına 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.
Burada diğer forum sitelerin bağlantısının paylaşılması yasak olduğu için dosyayı şuraya yükledim;
Virüs total:
Bu sistemi baya bi bir zamandır bir arkadaşım isteği üzerine kodluyordum. Sistemin son halini de çarşamba gecesi de kendi sitemden paylaştım lakin sitemdeki bana gelen bildirimde izinsiz bir şekilde sistemin paylaşıldığı bilgisini aldım. Arkadaşlar ben her zaman özgür yazılıma inanan birisiyim ama bir şey paylaşıyorsanız en azından kimin tarafından yapıldığını belirtmek zorundasınız. Bu hususta bu linkte yapılan paylaşımı https://forum.turkmmo.com/konu/3689867-poison-gauge-system/ forum yetkililerine bildirdim. Ve bir daha böyle bi terbiyesizlik olmasın diye bu sitede de paylaşma kararı aldım.
Sistem kısaca şöyle;
geliştirilme aşamasındaki video;
Son aşamadaki video;
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 Turkmmo Forumuna ÜYE olmanız gerekmektedir.
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 chr.AFFECT_POISON == type or 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 chr.AFFECT_POISON == type or 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())
board.UpdatePoisonGauge(1)
def PartyPoisonGuageHide(self):
board = self.__FindPartyMemberInfoBoardByName(player.GetName())
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",
),
},)
@sau feng tarafından bildirilen bir sorunun çözümü. Çözüm için teşekkürler.
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",
),
},
Sistem güncellemesi;
Kod:0510 12:58:36544 :: File "game.py", line 772, in BINARY_NEW_RemoveAffect 0510 12:58:36545 :: File "interfaceModule.py", line 746, in PartyPoisonGuageHide 0510 12:58:36545 :: File "uiParty.py", line 763, in PartyPoisonGuageHide 0510 12:58:36546 :: AttributeError 0510 12:58:36546 :: : 0510 12:58:36547 :: 'NoneType' object has no attribute 'UpdatePoisonGauge' 0510 12:58:36548 ::
Yukarıdaki gibi syserr hatası alanlar şu düzenlemeleri yaparsa sorunu çözülecektir;
Root/uiParty.py dosyasını açın ve şu kodları aratın;
Python:def PartyPoisonGuageShow(self): board = self.__FindPartyMemberInfoBoardByName(player.GetName()) board.UpdatePoisonGauge(1) def PartyPoisonGuageHide(self): board = self.__FindPartyMemberInfoBoardByName(player.GetName()) board.UpdatePoisonGauge(0)
Aşağıdaki kodlarla değiştirin;
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)
Geri bildirim için teşekkür ederim. Söylediklerinizi kontrol ettikten sonra böyle bi sorunun olduğunu doğrulayabildim;
![]()
Çözümü için şunları uygulayın;
Root/game.py dosyasını açın ve aşağıdaki kodları aratın;
Python:elif chr.AFFECT_POISON == type or 209 == type: self.playerGauge.RefreshGuageColor("lime") self.interface.HPPoisonEffectShow() self.interface.PartyPoisonGuageShow()
Yukarıdaki kodları şu kodlarla değiştiriniz;
Python:elif 209 == type: self.playerGauge.RefreshGuageColor("lime") self.interface.HPPoisonEffectShow() self.interface.PartyPoisonGuageShow()
Aynı dosyada şu kodları aratın;
Python:elif chr.AFFECT_POISON == type or 209 == type: self.playerGauge.RefreshGuageColor("red") self.interface.HPPoisonEffectHide() self.interface.PartyPoisonGuageHide()
Yukarıdaki kodları şu kodlarla değiştiriniz;
Python:elif 209 == type: self.playerGauge.RefreshGuageColor("red") self.interface.HPPoisonEffectHide() self.interface.PartyPoisonGuageHide()
Çözüldüğü ile ilgili kanıt;
![]()
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.

Burada diğer forum sitelerin bağlantısının paylaşılması yasak olduğu için dosyayı şuraya yükledim;
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Virüs total:
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Eyvallah
- Katılım
- 27 Nis 2017
- Konular
- 91
- Mesajlar
- 2,386
- Çözüm
- 47
- Online süresi
- 17d 3h
- Reaksiyon Skoru
- 1,571
- Altın Konu
- 2
- TM Yaşı
- 9 Yıl 1 Ay 19 Gün
- Başarım Puanı
- 248
- MmoLira
- 439
- DevLira
- 13
Teşekkürler.
- Katılım
- 19 Şub 2019
- Konular
- 173
- Mesajlar
- 2,134
- Çözüm
- 26
- Online süresi
- 10mo 21d
- Reaksiyon Skoru
- 1,932
- Altın Konu
- 4
- Başarım Puanı
- 273
- MmoLira
- 4,264
- DevLira
- 97
Eline sağlık. Mantıklı olmuş.
- Katılım
- 27 Ara 2018
- Konular
- 17
- Mesajlar
- 616
- Çözüm
- 5
- Online süresi
- 1mo 21d
- Reaksiyon Skoru
- 219
- Altın Konu
- 0
- TM Yaşı
- 7 Yıl 5 Ay 19 Gün
- Başarım Puanı
- 136
- Yaş
- 28
- MmoLira
- 6,218
- DevLira
- 3
Konuya başlamadan önce;
Bu sistemi baya bi bir zamandır bir arkadaşım isteği üzerine kodluyordum. Sistemin son halini de çarşamba gecesi de kendi sitemden paylaştım lakin sitemdeki bana gelen bildirimde izinsiz bir şekilde sistemin paylaşıldığı bilgisini aldım. Arkadaşlar ben her zaman özgür yazılıma inanan birisiyim ama bir şey paylaşıyorsanız en azından kimin tarafından yapıldığını belirtmek zorundasınız. Bu hususta bu linkte yapılan paylaşımı https://forum.turkmmo.com/konu/3689867-poison-gauge-system/ forum yetkililerine bildirdim. Ve bir daha böyle bi terbiyesizlik olmasın diye bu sitede de paylaşma kararı aldım.
Sistem kısaca şöyle;
![]()
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 Turkmmo Forumuna ÜYE olmanız gerekmektedir.
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 chr.AFFECT_POISON == type or 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 chr.AFFECT_POISON == type or 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()) board.UpdatePoisonGauge(1) def PartyPoisonGuageHide(self): board = self.__FindPartyMemberInfoBoardByName(player.GetName()) 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", ), },)
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.
Burada diğer forum sitelerin bağlantısının paylaşılması yasak olduğu için dosyayı şuraya yükledim;
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
Teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 2
- Görüntüleme
- 302
- Cevaplar
- 13
- Görüntüleme
- 1K
- Cevaplar
- 13
- Görüntüleme
- 1K
- Cevaplar
- 4
- Görüntüleme
- 81





