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 217
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

asilords

MT Üye
MT Üye
Mesaj
381
Çözümler
14
Beğeni
102
Puan
749
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:
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:
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:
self.BINARY_Appear_HP()

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

Python:
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:
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:
self.BINARY_Appear_HP()

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

Python:
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:
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:
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:
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:
self.gaugeID = 0
self.gaugePrc = 0

Daha sonra BINARY_Appear_HP fonksiyonunu yine şu şekilde düzenle:
Python:
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:
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:
self.gaugeID = 0
self.gaugePrc = 0

Daha sonra BINARY_Appear_HP fonksiyonunu yine şu şekilde düzenle:
Python:
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:
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:
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:
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?
 
Geri
Üst