Hikayeler

Reklam vermek için turkmmo@gmail.com

Şampiyon pet Güncellemesi sontiex

Kronikmorgan

Level 3
TM Üye
Üye
Katılım
3 Haz 2025
Konular
17
Mesajlar
104
Online süresi
3g 65425s
Reaksiyon Skoru
55
Altın Konu
0
Başarım Puanı
36
TM Yaşı
10 Ay 20 Gün
MmoLira
344
DevLira
27

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Owsap v6 filesini geliştirmeye çalışıyorum ve Normal pet sistemini Şampiyon için güncellemeler yapıyorum ve Eklemeler yaptım şampiyon evrimi için grow_pet sisteminde wiki üzerinden takip ederek yaptım

3 gündür uğraşıyorum sp yerine atağa çevirdim Önce Pet arayüzü için uğraştım sonra ve yaptığım kodlarda herşeyi tek tek belirttim bir sorun olursa diye tek tek herşeyi isimlendirdim exp tablosundan uzmanlık havuzuna kadar herşeyi isimlendirip not halinde yazdım


son güncelleme

0328_141421.jpg
0328_141421.jpg
0328_141417.jpg
0328_141439.jpg
0328_141558.jpg
0328_141601.jpg





0328_141602.jpg


31.03.2026 güncelle me sonu



0331_222436.jpg
 
Son düzenleme:
nakliye kutusu tooltiplerin hepsi ayarlandı sadece level çekmede sorun var orasıda hallolunca tamam
 

Ekli dosyalar

  • 0328_141745.jpg
    0328_141745.jpg
    679.9 KB · Görüntüleme: 0
1218_192442.jpg
Başarılar sistemi yapmakla bitmiyor oyuncu deneyince çıkıyor asıl problemler.
 
yapıyoruz işte birşeyler sadece leveli veremedim örnek bir kod
kod:
void CGrowthPet::UpdateChampionStats()
{
    DWORD dwChampLevel = GetPetPoint(POINT_UPBRINGING_CHAMPION_LEVEL);
    if (dwChampLevel == 0) return;

    ChangePetPoint(POINT_UPBRINGING_CHAMP_RES, 5 + (dwChampLevel * 2), true, true);
    ChangePetPoint(POINT_UPBRINGING_CHAMP_HIT, 10 + (dwChampLevel * 3), true, true);
    ChangePetPoint(POINT_UPBRINGING_CHAMP_METIN, 2 + (dwChampLevel * 1), true, true);
}

void CGrowthPet::RequestToGrantPotential(TItemPos eggPos)
{
    if (!m_pOwner || !IsChampion()) return;
    
    if (!m_pSummonItem || !IsSummoned()) return;

    LPITEM pEgg = m_pOwner->GetInventoryItem(eggPos.cell);
    if (!pEgg) return;

    DWORD champLevel = GetPetPoint(POINT_UPBRINGING_CHAMPION_LEVEL);
    BYTE bSlotIndex = 255;
    
    if (champLevel >= 1 && m_aPotentialSkill[0].dwEggVnum == 0) bSlotIndex = 0;
    else if (champLevel >= 15 && m_aPotentialSkill[1].dwEggVnum == 0) bSlotIndex = 1;

    if (bSlotIndex == 255) return;

    DWORD dwEggVnum = pEgg->GetVnum();

    auto it = g_PetPotentialSkillPool.find(m_pSummonItem->GetValue(0)); // Petin kendi Vnum'una göre havuz ara
    if (it == g_PetPotentialSkillPool.end() || it->second.empty())
    {
        m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Bu petin henuz kesfedilmis bir uzmanlik havuzu yok.");
        return;
    }

    int randomSkillIndex = number(0, it->second.size() - 1);
    DWORD dwSelectedSkill = it->second[randomSkillIndex];


    BYTE bMaxLevel = GetMaxPotentialSkillLevel(champLevel);
    
    m_aPotentialSkill[bSlotIndex].dwEggVnum = dwEggVnum;
    m_aPotentialSkill[bSlotIndex].dwSkillVnum = dwSelectedSkill;
    m_aPotentialSkill[bSlotIndex].bSkillLevel = number(1, bMaxLevel); // Şampiyon seviyesine göre zarlar
    

    int randomHours = number(2, 6);
    m_aPotentialSkill[bSlotIndex].tExpireTimestamp = get_global_time() + (randomHours * 3600);

    pEgg->SetCount(pEgg->GetCount() - 1);
    SendPotentialUpdatePacket(bSlotIndex);
    
    ClearAffect();
    RefreshAffect();
}

void CGrowthPet::RequestToRemovePotential(BYTE bSlotIndex)
{
    if (!m_pOwner || bSlotIndex >= PET_POTENTIAL_SLOT_MAX) return;

    if (m_aPotentialSkill[bSlotIndex].dwEggVnum == 0) return;

    memset(&m_aPotentialSkill[bSlotIndex], 0, sizeof(TPotentialSkill));

    SendPotentialUpdatePacket(bSlotIndex);
    m_pOwner->ChatPacket(CHAT_TYPE_INFO, "Uyanis yetenegi kaldirildi.");
    ClearAffect();
    RefreshAffect();
}

void CGrowthPet::SendPotentialUpdatePacket(BYTE bSlotIndex)
{
    if (!m_pOwner) return;

    TPacketGCPetPotentialUpdate pack;
    pack.header = HEADER_GC_PET_POTENTIAL_UPDATE;
    pack.dwID = m_dwID;
    pack.bSlotIndex = bSlotIndex;
    memcpy(&pack.potentialSkill, &m_aPotentialSkill[bSlotIndex], sizeof(TPotentialSkill));

    m_pOwner->GetDesc()->Packet(&pack, sizeof(pack));
}
 
mesela potansiyel pencere için yazdığım
kod class:
class PetPotentialFeedWindow(ui.ScriptWindow):
    def __init__(self):
        ui.ScriptWindow.__init__(self)
        self.slotIndex = -1

        self.eggWindow = -1
        self.eggSlotNum = -1
        self.tooltipItem = uiToolTip.ItemToolTip()
        self.__LoadWindow()

    def __LoadWindow(self):
        self.AddFlag("movable")
        self.AddFlag("float")
        
        self.board = ui.BoardWithTitleBar()
        self.board.SetParent(self)
        self.board.SetSize(180, 140)
        self.board.SetTitleName("Uyanis (Potansiyel)")
        self.board.SetCloseEvent(ui.__mem_func__(self.Close))
        self.board.Show()
        self.SetSize(180, 140)

        self.eggSlot = ui.SlotWindow()
        self.eggSlot.SetParent(self.board)
        self.eggSlot.SetPosition(74, 45)
        self.eggSlot.AppendSlot(0, 0, 0, 32, 32)
        self.eggSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.OnSelectEmptySlot))
        self.eggSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.OnSelectItemSlot))
        self.eggSlot.SetOverInItemEvent(ui.__mem_func__(self.OnOverInItem))
        self.eggSlot.SetOverOutItemEvent(ui.__mem_func__(self.OnOverOutItem))
        self.eggSlot.Show()

        self.btnFeed = ui.Button()
        self.btnFeed.SetParent(self.board)
        self.btnFeed.SetPosition(45, 95)
        self.btnFeed.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
        self.btnFeed.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
        self.btnFeed.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
        self.btnFeed.SetText("Uyanis Sagla")
        self.btnFeed.SetEvent(ui.__mem_func__(self.OnFeed))
        self.btnFeed.Show()

    def Open(self, slotIndex):
        self.slotIndex = slotIndex
        self.eggItemPos = player.ItemPos(-1, -1)
        self.eggSlot.ClearSlot(0)
        self.Show()
        self.SetTop()

    def Close(self):
        self.Hide()

    def OnSelectEmptySlot(self, slotIndex):
        if mouseModule.mouseController.isAttached():
            attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
            attachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
    
            item.SelectItem(attachedItemIndex)
            if item.GetItemType() == item.ITEM_TYPE_PET and item.GetItemSubType() == item.PET_EGG:
                self.eggWindow = player.INVENTORY
                self.eggSlotNum = attachedSlotPos
                self.eggSlot.SetItemSlot(0, attachedItemIndex, 1)
            else:
                chat.AppendChat(chat.CHAT_TYPE_INFO, "Buraya sadece uygun bir Pet Yumurtasi koyabilirsin.")
            mouseModule.mouseController.DeattachObject()
    
    def OnSelectItemSlot(self, slotIndex):
        self.eggWindow = -1
        self.eggSlotNum = -1
        self.eggSlot.ClearSlot(0)
        
    def OnFeed(self):
        if self.eggSlotNum != -1:
            net.SendPetAddPotentialPacket(self.eggWindow, self.eggSlotNum)
            self.Close()
        else:
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Lutfen once bir yumurta yerlestirin.")

    def OnFeed(self):
        if self.eggItemPos.IsValidItemPosition():
            net.SendPetAddPotentialPacket(self.eggItemPos.window_type, self.eggItemPos.cell)
            self.Close()
        else:
            chat.AppendChat(chat.CHAT_TYPE_INFO, "Lutfen once bir yumurta yerlestirin.")

    def OnOverInItem(self, slotIndex):
        if self.eggItemPos.IsValidItemPosition() and self.tooltipItem:
            self.tooltipItem.SetInventoryItem(self.eggItemPos.cell)

    def OnOverOutItem(self):
        if self.tooltipItem:
            self.tooltipItem.HideToolTip()

illaki eksiklerim vardır 3 günde bu kadar oluyor
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst