Yardım Videolu Karekterin İsminin Üstünde HP Gösterme Hatası

  • Konuyu açan Konuyu açan asilords
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 151
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

asilords

MT Üye
MT Üye
Mesaj
215
Çözümler
8
Beğeni
54
Puan
704
Ticaret Puanı
0


hangi can barı doluyorsa onunki gözüyüor diğeri gözükmüyor ikiside kalıcı olması gerekli gerekli kod bloklarını bıraktım yardımcı olursanız sevinirim.


PythonNetworkStreamPhaseGame.cpp
1:
Genişlet Daralt Kopyala
bool CPythonNetworkStream::RecvHealthBoardPacket()
{
    TPacketGCHealthBoard p;
    if (!Recv(sizeof(TPacketGCHealthBoard), &p))
    {
        Tracen("Recv Health Board Packet Error");
        return false;
    }
    CInstanceBase* pInstPlayer = CPythonCharacterManager::Instance().GetMainInstancePtr();
    CInstanceBase* pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(p.dwVID);
    if (pInstPlayer && pInstTarget)
    {
        if (!pInstTarget->IsDead())
        {
            if (pInstTarget->IsPC() && pInstTarget != pInstPlayer && p.bHPPercent != 0 && p.bHPPercent != 100)
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Appear_HP", Py_BuildValue("(ii)", p.dwVID, p.bHPPercent));
            else
                PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Appear_HP", Py_BuildValue("(ii)", p.dwVID, 0));
        }
    }
    return true;
}


uinewplayergauge.py

2:
Genişlet Daralt Kopyala
import chr
import player
import textTail
import ui

class NewPlayerGauge(ui.Gauge):

    def __init__(self, parent):
        ui.Gauge.__init__(self)
        self.SetParent(parent)
        self.AddFlag('not_pick')
        self.MakeGauge(100, 'red')
        self.vid = 0
        self.hpPercentage = 0
        self.curGauge = 0.0

    def __del__(self):
        ui.Gauge.__del__(self)

    def Hide(self):
        self.vid = 0
        self.curGauge = 0.0
        self.hpPercentage = 0
        ui.Gauge.Hide(self)

    def OnUpdate(self):
        distance = player.GetCharacterDistance(self.vid)
        if distance > 1500:
            self.Hide()
            return

        if chr.GetNameByVID(self.vid) == 'None':
            self.Hide()
            return

        if self.hpPercentage <= 0:
            self.Hide()
            return

        self.destGauge = float(self.hpPercentage)
        self.curGauge += (self.destGauge - self.curGauge) / 10.0

        if abs(self.curGauge - self.destGauge) < 0.005:
            self.curGauge = self.destGauge

        self.SetPercentage(self.curGauge, 100)
        x, y, z = textTail.GetPosition(self.vid)
        isChat = textTail.IsChat(self.vid)
        ui.Gauge.SetPosition(self, int(x - self.GetWidth() / 2), int(y + 5) + isChat * 17)

    def RefreshGauge2(self, vid, hpPercentage):
        self.vid = vid
        self.hpPercentage = hpPercentage

        if hpPercentage == 100:
            self.Hide()
        else:
            self.OnUpdate()
            self.Show()
 
Son düzenleme:
Anladım. İki alternatif önereceğim, işe yarayıp yaramaması konusunda emin değilim ancak ikisini de deneyebilirsin:

1-) game.py içindeki OnUpdate fonksiyonuna aşağıdaki kodu ekle:
Python:
Genişlet Daralt Kopyala
self.BINARY_Appear_HP()

Daha sonra BINARY_Appear_HP fonksiyonun şu şekilde değiştir:

Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(self, vid, hpPercentage):
    if vid != 0 and hpPercentage != 0:
        self.newPlayerGauge.RefreshGauge2(vid, hpPercentage)


2.Yöntem:
BINARY_Appear_HP fonksiyonunu şu şekilde düzenle:
Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(vid, hpPercentage):
    gauge_list = {}
    if vid not in gauge_list:
        gauge_list[vid] = self.newPlayerGauge
    gauge = gauge_list[vid]
    gauge.RefreshGauge2(vid, hpPercentage)

    if hpPercentage == 100 or hpPercentage == 0:
        gauge.Hide()
 
Anladım. İki alternatif önereceğim, işe yarayıp yaramaması konusunda emin değilim ancak ikisini de deneyebilirsin:

1-) game.py içindeki OnUpdate fonksiyonuna aşağıdaki kodu ekle:
Python:
Genişlet Daralt Kopyala
self.BINARY_Appear_HP()

Daha sonra BINARY_Appear_HP fonksiyonun şu şekilde değiştir:

Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(self, vid, hpPercentage):
    if vid != 0 and hpPercentage != 0:
        self.newPlayerGauge.RefreshGauge2(vid, hpPercentage)


2.Yöntem:
BINARY_Appear_HP fonksiyonunu şu şekilde düzenle:
Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(vid, hpPercentage):
    gauge_list = {}
    if vid not in gauge_list:
        gauge_list[vid] = self.newPlayerGauge
    gauge = gauge_list[vid]
    gauge.RefreshGauge2(vid, hpPercentage)

    if hpPercentage == 100 or hpPercentage == 0:
        gauge.Hide()
Malesef 2 yöntemden çalışmadı syserrde şunu veriyor sizin değişikleriklerinizi yapınca.
1:
Genişlet Daralt Kopyala
BINARY_Appear_HP() takes exactly 3 arguments (1 given)

Geçen sene de çok uğraştım çözemedim nasıl bir hataysa artık.
 
Malesef 2 yöntemden çalışmadı syserrde şunu veriyor sizin değişikleriklerinizi yapınca.
1:
Genişlet Daralt Kopyala
BINARY_Appear_HP() takes exactly 3 arguments (1 given)

Geçen sene de çok uğraştım çözemedim nasıl bir hataysa artık.
İlk yöntemde yanlışlık yapmışım şimdi fark ettim. Python'da çok iyi sayılmam.
İkinci yönteme bağlı olarak şöyle bir öneride bulunayım:

game.py içindeki __init__ fonksiyonuna şunları ekle:
Python:
Genişlet Daralt Kopyala
self.gaugeID = 0
self.gaugePrc = 0

Daha sonra BINARY_Appear_HP fonksiyonunu yine şu şekilde düzenle:
Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(vid, hpPercentage):
    gauge_list = {}
    self.gaugeID = vid
    self.gaugePrc = hpPercentage
    ############
    if vid not in gauge_list:
        gauge_list[vid] = self.newPlayerGauge
    gauge = gauge_list[vid]
    gauge.RefreshGauge2(vid, hpPercentage)
    if hpPercentage == 100 or hpPercentage == 0:
        gauge.Hide()

Son olarak game.py içindeki OnUpdate fonksiyonunun içine ekle:
Python:
Genişlet Daralt Kopyala
if(self.gaugeID != 0 and self.gaugePrc != 0)
    self.BINARY_Appear_HP(self.gaugeID, self.gaugePrc)
 
En son bir moderatör tarafından düzenlenmiş:
İlk yöntemde yanlışlık yapmışım şimdi fark ettim. Python'da çok iyi sayılmam.
İkinci yönteme bağlı olarak şöyle bir öneride bulunayım:

game.py içindeki __init__ fonksiyonuna şunları ekle:
Python:
Genişlet Daralt Kopyala
self.gaugeID = 0
self.gaugePrc = 0

Daha sonra BINARY_Appear_HP fonksiyonunu yine şu şekilde düzenle:
Python:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(vid, hpPercentage):
    gauge_list = {}
    self.gaugeID = vid
    self.gaugePrc = hpPercentage
    ############
    if vid not in gauge_list:
        gauge_list[vid] = self.newPlayerGauge
    gauge = gauge_list[vid]
    gauge.RefreshGauge2(vid, hpPercentage)
    if hpPercentage == 100 or hpPercentage == 0:
        gauge.Hide()

Son olarak game.py içindeki OnUpdate fonksiyonunun içine ekle:
Python:
Genişlet Daralt Kopyala
if(self.gaugeID != 0 and self.gaugePrc != 0)
    self.BINARY_Appear_HP(self.gaugeID, self.gaugePrc)
sysrrr veriyor yine :(

0730 16:33:16454 :: TypeError
0730 16:33:16454 :: :
0730 16:33:16454 :: BINARY_Appear_HP() takes exactly 2 arguments (3 given)
0730 16:33:16454 ::

1:
Genişlet Daralt Kopyala
def BINARY_Appear_HP(vid, hpPercentage):
    
    def BINARY_Appear_HP(self, vid, hpPercentage):

Yaptım Syserr halktı ama sonuç aynı yine.
 
En son bir moderatör tarafından düzenlenmiş:
BINARY_Appear_HP
Client sourcede 2 arg alıyor, oraya da karakter vidi çektir.
1:
Genişlet Daralt Kopyala
CInstanceBase* pInstTarget = CPythonCharacterManager::Instance().GetInstancePtr(p.dwVID);

PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_Appear_HP", Py_BuildValue("(ii)", p.dwVID, p.bHPPercent));

zaten vid çekmiyor mu?
 
Üst