DarkPassage Adlı Kullanıcının Mesajlarını Göster
-
-
-
-
Eğer ui.py dosyasında CheckBox yoksa aşağıdakileri ekleyin yoksa hata alırsınız.(etc.rar dakileride ekleyin)
ui.py:
Python
Daha Çok Göster#Arat; class Button(Window): #Üstüne ekle; class CheckBox(Window): def __init__(self): Window.__init__(self) self.backgroundImage = None self.checkImage = None self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, } self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, } self.CreateElements() def __del__(self): Window.__del__(self) self.backgroundImage = None self.checkImage = None self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, } self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, } def CreateElements(self): self.backgroundImage = ImageBox() self.backgroundImage.SetParent(self) self.backgroundImage.AddFlag("not_pick") self.backgroundImage.SetPosition(0, -2) self.backgroundImage.LoadImage("d:/ymir work/ui/game/checkbox/checkbox.tga") self.backgroundImage.Show() self.checkImage = ImageBox() self.checkImage.SetParent(self) self.checkImage.AddFlag("not_pick") self.checkImage.SetPosition(0, -2) self.checkImage.LoadImage("d:/ymir work/ui/game/checkbox/checked.tga") self.checkImage.Hide() self.textInfo = TextLine() self.textInfo.SetParent(self) self.textInfo.SetPosition(20, -2) self.textInfo.Show() self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1]) def SetTextInfo(self, info): if self.textInfo: self.textInfo.SetText(info) self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1]) def SetCheckStatus(self, flag): if flag: self.checkImage.Show() else: self.checkImage.Hide() def GetCheckStatus(self): if self.checkImage: return self.checkImage.IsShow() return False def SetEvent(self, func, *args) : result = self.eventFunc.has_key(args[0]) if result : self.eventFunc[args[0]] = func self.eventArgs[args[0]] = args else : print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0] def OnMouseLeftButtonUp(self): if self.checkImage: if self.checkImage.IsShow(): self.checkImage.Hide() if self.eventFunc["ON_UNCKECK"]: apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"]) else: self.checkImage.Show() if self.eventFunc["ON_CHECK"]: apply(self.eventFunc["ON_CHECK"], self.eventArgs["ON_CHECK"]) #Arat; elif Type == "listboxex": parent.Children[Index] = ListBoxEx() parent.Children[Index].SetParent(parent) self.LoadElementListBoxEx(parent.Children[Index], ElementValue, parent) #Altına ekle; elif Type == "checkbox": parent.Children[Index] = CheckBox() parent.Children[Index].SetParent(parent) self.LoadElementCheckBox(parent.Children[Index], ElementValue, parent) #Arat; def LoadElementListBoxEx(self, window, value, parentWindow): #Üstüne ekle; def LoadElementCheckBox(self, window, value, parentWindow): if value.has_key("text"): window.SetText(value["text"]) if value.has_key("checked") and value["checked"] == True: window.SetCheckStatus(window.STATE_SELECTED) if value.has_key("disabled") and value["disabled"] == True: window.Disable() self.LoadDefaultData(window, value, parentWindow)
-
-
Çalışma mantığı;
1)Mevcut seviyeden aşağıya inmez. Örn: Leveli 3 ise 2'ye veya 1'e düşmez.
2)Seviye kademeli olarak artar. Örn: Leveli 1 ise 3.seviye yapılamaz öncelikle 2. sevive yapılmalıdır.
3)Mevcut seviyesine bir daha ulaşamaz. Örn: Kuşağın levelini 1 yapmak için kullandığınız item'ı aynı kuşak üzerinde bir daha kullanamazsınız.
4)Kuşakları kombinlerken alt tarafa koyduğunuz kuşak leveli atlatılmış bir kuşak olamaz. Nedeni şu yanlışlıkla level atlatılmış kuşağınızı kaybetmeyin diye bu engeli koydum.Anlatım;
common/item_length.h:
Kod
Daha Çok Göster//ARAT; ACCE_GRADE_4_ABS_MAX = 25, //DEĞİŞTİR; #ifdef ACCE_BONUS_BOOSTER ACCE_LEVEL_SOCKET = 2, ACCE_GRADE_4_ABS_MAX = 25, ACCE_NEW_MAX_K = 50, #else ACCE_GRADE_4_ABS_MAX = 25, #endif
common/service.h:
game/char.cpp:
Kod
Daha Çok Göster//ARAT; DWORD dwMaxAbsCalc = (dwMinAbs + ACCE_GRADE_4_ABS_RANGE > ACCE_GRADE_4_ABS_MAX ? ACCE_GRADE_4_ABS_MAX : (dwMinAbs + ACCE_GRADE_4_ABS_RANGE)); //DEĞİŞTİR; #ifdef ACCE_BONUS_BOOSTER auto ACCE_ABS_MAX = pkItemMaterial[0]->GetSocket(ACCE_LEVEL_SOCKET) * ACCE_NEW_MAX_K; DWORD dwMaxAbsCalc; if (ACCE_ABS_MAX != 0) { dwMaxAbsCalc = (dwMinAbs + ACCE_GRADE_4_ABS_RANGE > ACCE_ABS_MAX ? ACCE_ABS_MAX : (dwMinAbs + ACCE_GRADE_4_ABS_RANGE)); } else { dwMaxAbsCalc = (dwMinAbs + ACCE_GRADE_4_ABS_RANGE > ACCE_GRADE_4_ABS_MAX ? ACCE_GRADE_4_ABS_MAX : (dwMinAbs + ACCE_GRADE_4_ABS_RANGE)); } #else DWORD dwMaxAbsCalc = (dwMinAbs + ACCE_GRADE_4_ABS_RANGE > ACCE_GRADE_4_ABS_MAX ? ACCE_GRADE_4_ABS_MAX : (dwMinAbs + ACCE_GRADE_4_ABS_RANGE)); #endif //ARAT; else if ((m_bAcceCombination) && (pkItem->GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_GRADE_4_ABS_MAX)) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kanat zaten maksimum emiş oranına sahip.")); return; } //DEĞİŞTİR; #ifdef ACCE_BONUS_BOOSTER else if (m_bAcceCombination) { if (pkItem->GetSocket(ACCE_LEVEL_SOCKET) != 0) { if (pkItem->GetSocket(ACCE_ABSORPTION_SOCKET) >= (pkItem->GetSocket(ACCE_LEVEL_SOCKET) * ACCE_NEW_MAX_K)) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kanat zaten maksimum emiş oranına sahip.")); return; } } else { if (pkItem->GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_GRADE_4_ABS_MAX) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kanat zaten maksimum emiş oranına sahip.")); return; } } } else if ((bPos == 1) && (m_bAcceCombination) && (pkItem->GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_GRADE_4_ABS_MAX)) { ChatPacket(CHAT_TYPE_INFO,"%d Emiş üzeri kuşakları kullanamazsınız.",ACCE_GRADE_4_ABS_MAX); return; } #else else if ((m_bAcceCombination) && (pkItem->GetSocket(ACCE_ABSORPTION_SOCKET) >= ACCE_GRADE_4_ABS_MAX)) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Bu kanat zaten maksimum emiş oranına sahip.")); return; } #endif //ARAT; pkItem->SetSocket(ACCE_ABSORBED_SOCKET, pkItemMaterial[0]->GetSocket(ACCE_ABSORBED_SOCKET)); //ALTINA EKLE; #ifdef ACCE_BONUS_BOOSTER pkItem->SetSocket(ACCE_LEVEL_SOCKET, pkItemMaterial[0]->GetSocket(ACCE_LEVEL_SOCKET)); #endif
game/char_item.cpp:
Kod
Daha Çok Göster//ARAT; case 71109: //ÜSTÜNE EKLE; #ifdef ACCE_BONUS_BOOSTER case 71260: case 71261: case 71262: case 71263: case 71264: case 71265: { LPITEM item2; if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell))) return false; if (item2->IsExchanging()) return false; if (item2->IsEquipped()) return false; if (item2->GetType() != ITEM_COSTUME) { ChatPacket(CHAT_TYPE_INFO,"Bu eşya kostümlere özeldir."); return false; } if (item2->GetSubType() != COSTUME_ACCE) { ChatPacket(CHAT_TYPE_INFO,"Bu eşya kuşaklara özeldir."); return false; } if (item2->GetValue(ACCE_GRADE_VALUE_FIELD) != 4) { ChatPacket(CHAT_TYPE_INFO, "Bu öğe sadece 11 emiş ve üzeri kuşaklara özeldir."); return false; } auto Acce_Level = item2->GetSocket(ACCE_LEVEL_SOCKET);//kuşağın mevcut level bilgisi auto Item_Level = item->GetValue(0);//Value(0) DA KAÇINCI LEVEL OLACAĞINI BELİRTİYORUZ if (Acce_Level > Item_Level) { ChatPacket(CHAT_TYPE_INFO, "Kuşağın mevcut seviyesini düşüremeyeceğiniz için bu öğeyi bu kuşak için kullanamazsınız."); return false; } else if (Acce_Level == Item_Level) { ChatPacket(CHAT_TYPE_INFO, "Bu öğe bu kuşak için daha önce kullanılmış."); return false; } else { auto New_Max = (Acce_Level + 1) * ACCE_NEW_MAX_K; if (Item_Level == Acce_Level + 1) { item2->SetSocket(ACCE_LEVEL_SOCKET, Item_Level); ChatPacket(CHAT_TYPE_INFO, "Yeni bonus emiş sınırı: %d ", New_Max); } else { ChatPacket(CHAT_TYPE_INFO, "Yeteri kadar seviye arttırmamışsınız. Lütfen Kuşak Bonus Arttırıcı %d kullanın", New_Max); return false; } } item->SetCount(item->GetCount() - 1); } break; #endif
item_proto:
Kod71260 Kuşak Bonus Arttırıcı (50) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 0 0 0 0 0 0 0 0 71261 Kuşak Bonus Arttırıcı (100) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 0 0 0 0 0 0 0 0 71262 Kuşak Bonus Arttırıcı (150) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 0 0 0 0 0 0 0 0 71263 Kuşak Bonus Arttırıcı (200) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 4 0 0 0 0 0 0 0 0 71264 Kuşak Bonus Arttırıcı (250) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 5 0 0 0 0 0 0 0 0 71265 Kuşak Bonus Arttırıcı (300) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 6 0 0 0 0 0 0 0 0
item_names:
Kod71260 Kuşak Bonus Arttırıcı(50) 71261 Kuşak Bonus Arttırıcı(100) 71262 Kuşak Bonus Arttırıcı(150) 71263 Kuşak Bonus Arttırıcı(200) 71264 Kuşak Bonus Arttırıcı(250) 71265 Kuşak Bonus Arttırıcı(300)
locale/item_list:
Kod71260 ETC icon/item/+200.png 71261 ETC icon/item/+200.png 71262 ETC icon/item/+200.png 71263 ETC icon/item/+200.png 71264 ETC icon/item/+200.png 71265 ETC icon/item/+200.png
locale/itemdesc:
Kod71260 Kuşak Bonus Arttırıcı(50) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (50)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur. 71261 Kuşak Bonus Arttırıcı(100) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (100)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur. 71262 Kuşak Bonus Arttırıcı(150) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (150)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur. 71263 Kuşak Bonus Arttırıcı(200) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (200)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur. 71264 Kuşak Bonus Arttırıcı(250) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (250)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur. 71265 Kuşak Bonus Arttırıcı(300) Halihazırda ekipmanlarınızda bulunan bonus değerinin sınırını (300)'e çıkarmak için bu özel öğeyi kullanın. Öğe kullanımdan sonra kaybolur.
root/uitooltip.py:
Kod
Daha Çok Göster#ARAT; self.__AdjustMaxWidth(attrSlot, itemDesc) self.__SetItemTitle(itemVnum, metinSlot, attrSlot) ### Hair Preview Image ### if self.__IsHair(itemVnum): self.__AppendHairIcon(itemVnum) ### Description ### self.AppendDescription(itemDesc, 26) self.AppendDescription(itemSummary, 26, self.CONDITION_COLOR) #ALTINA EKLE; if item.ITEM_TYPE_COSTUME == itemType: if itemSubType == item.COSTUME_TYPE_ACCE: kusak_level = metinSlot[2] self.AppendTextLine("Kuşak leveli: %s " % (kusak_level), self.SINIRSIZ_COLOR)
root/uiinventory.py:
Kod
Daha Çok Göster#ARAT;(def __DropSrcItemToDestItemInInventory içerisinde) elif item.GetUseType(srcItemVID) in self.USE_TYPE_TUPLE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) else: #ALTINA EKLE; if not player.IsEquipmentSlot(dstItemSlotPos): if srcItemVID >= 71260 and srcItemVID <= 71265: dstItemVNum = player.GetItemIndex(dstItemSlotPos) item.SelectItem(dstItemVNum) if item.ITEM_TYPE_COSTUME == item.GetItemType() and item.GetItemSubType() == item.COSTUME_TYPE_ACCE: self.__SendUseItemToItemPacket(srcItemSlotPos, dstItemSlotPos) return True #ARAT; def __IsUsableItemToItem(self, srcItemVNum, srcSlotPos): #ALTINA EKLE;(fonksiyonun içine) if srcItemVNum >= 71260 and srcItemVNum <= 71265: return True #ARAT; def __CanUseSrcItemToDstItem(self, srcItemVNum, srcSlotPos, dstSlotPos): "´ë»ó ¾ÆÀÌÅÛ¿¡ »ç¿ëÇÒ ¼ö Àִ°¡?" if srcSlotPos == dstSlotPos: return False #ALTINA EKLE; if srcItemVNum >= 71260 and srcItemVNum <= 71265: dstItemVNum = player.GetItemIndex(dstSlotPos) item.SelectItem(dstItemVNum) if item.ITEM_TYPE_COSTUME == item.GetItemType() and item.GetItemSubType() == item.COSTUME_TYPE_ACCE: return True
Ekte verdiğim ikonları pack\icon\icon\item içerisine atın.
Dikkat!!!
Not: common/item_length.h içerisindeki "ACCE_NEW_MAX_K" isimli değişken katsayıyı belirtmektedir. Bu ne anlama geliyor derseniz de şu anlama geliyor Örn: Ben bu değişkene 50 değerini verdim bu yüzden itemler sınırı 50 şer arttırıyor eğer 50 değilde 100 yazsaydım 100 er arttırırdı. Bu değişkene 24,20,10 gibi 25'in altında bir değer vermeden kendinize göre ayarlayın.
Dikkat!!! -
-
-
-
Seçilen 3 parça item oyuncu tarafından kuşanıldığında yani üzerine giydiğinde seçilmiş olan 3 adet bonusu oyuncuya verir.size verdiğim dosyada silah, zırh, kafalık kostümü olarak ayarlı vnumları ona göre ayarlayın.
Not 2: Eklemeleri yapmadan önce
game source -> costume_set_bonus.cpp -> CostumeVnumData veEn iyi video oyun konsolları
pack -> root -> costume_set.py -> costume_sets
Matrislerinde ki vnum ları kendinize göre ayarlayın. -
-
oyunda etrafında çok fazla mob olduğu zaman daha az lag olmasına yarıyor.
. Konudaki dosyayı tekrardan indirin ve şu dosyalardaki eklemeleri tekrardan yapın;
EterLib/GrpBase.cpp ,
EterLib/GrpDevice.cpp ,
EterLib/StdAfx.h
Not: Özellikle StdAfx.h dosyasında Locale_inc.h dosyasını include lamayı unutmayın yoksa sistem çalışmaz. -
oyunda etrafında çok fazla mob olduğu zaman daha az lag olmasına yarıyor.
. Konudaki dosyayı tekrardan indirin ve şu dosyalardaki eklemeleri tekrardan yapın;
EterLib/GrpBase.cpp ,
EterLib/GrpDevice.cpp ,
EterLib/StdAfx.h
Not: Özellikle StdAfx.h dosyasında Locale_inc.h dosyasını include lamayı unutmayın yoksa sistem çalışmaz. -
Herhangi bir mob'a öldüğünüzde üzerinizdeki şaman bufflarının gitmemesine yarıyan düzenlemedir.
Game Source;
Common;service.h:
Game;char.h:
Kod
Daha Çok Göster//Arat; void ClearAffect(bool bSave=false); //Değiştir; #ifdef NOT_BUFF_CLEAR void ClearAffect(bool bSave = false, bool bSomeAffect = false); #else void ClearAffect(bool bSave = false); #endif
char_affect.cpp:
Kod
Daha Çok Göster//Arat; void CHARACTER::ClearAffect(bool bSave) //Değiştir; #ifdef NOT_BUFF_CLEAR void CHARACTER::ClearAffect(bool bSave, bool bSomeAffect) #else void CHARACTER::ClearAffect(bool bSave) #endif //Arat; if (bSave) { if ( IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType) ) { ++it; continue; } //Altına ekle; #ifdef NOT_BUFF_CLEAR if (bSomeAffect) { switch (pkAff->dwType) { case (SKILL_HOSIN): //Kutsama case (SKILL_REFLECT): //Yansıtma case (SKILL_GICHEON): //Ejderha Yardımı case (SKILL_KWAESOK): //Hız case (SKILL_JEUNGRYEOK): //Atak + { ++it; continue; } } } #endif
char_battle.cpp:
Kod
Daha Çok Göster//Arat; bool isAgreedPVP = false; bool isUnderGuildWar = false; //Altına ekle; #ifdef NOT_BUFF_CLEAR bool isSafeBuff = false; #endif //Arat; if (pkKiller && pkKiller->IsPC()) { if (pkKiller->m_pkChrTarget == this) pkKiller->SetTarget(NULL); //Değiştir; if (pkKiller && pkKiller->IsPC()) { #ifdef NOT_BUFF_CLEAR isSafeBuff = true; #endif if (pkKiller->m_pkChrTarget == this) pkKiller->SetTarget(NULL); //Arat; ClearAffect(true); //Değiştir; #ifdef NOT_BUFF_CLEAR ClearAffect(true, (isSafeBuff) ? false : true); #else ClearAffect(true); #endif
-
-
Anlatım;
char_item.cpp:
Kod
Daha Çok Göster//arat; case 70102: //üstüne ekle case 70180: //derece meyvesi 1(500) case 70181: //derece meyvesi 1(1000) case 70182: //derece meyvesi 1(2000) case 70183: //derece meyvesi 1(5000) case 70184: //derece meyvesi 1(10000) case 70185: //derece meyvesi 2(500) case 70186: //derece meyvesi 2(1000) case 70187: //derece meyvesi 2(2000) case 70188: //derece meyvesi 2(5000) case 70189: //derece meyvesi 2(10000) case 70190: //derece meyvesi 3(500) case 70191: //derece meyvesi 3(1000) case 70192: //derece meyvesi 3(2000) case 70193: //derece meyvesi 3(5000) case 70194: //derece meyvesi 3(10000) { int Alignment = GetAlignment(); if (Alignment < 0) { ChatPacket(CHAT_TYPE_INFO, "Dereceniz '-' değerdeyken bu öğeyi kullanamazsınız !"); return false; } int MaxAlignment = 30000000;//buradaki değer kullandığınız filestaki derece sınırını ifade ediyor. Ona göre düzenleyin.Kısaca derece max olmuşmu olmamışmı kontrolü için lazım. if (Alignment >= MaxAlignment) { ChatPacket(CHAT_TYPE_INFO, "Dereceniz sınıra ulaştığı için bu öğeyi kullanamazsınız "); return false; } BYTE pc_meyve_num; if (Alignment < 10000000) { pc_meyve_num = 1; } else if (Alignment >= 10000000 && Alignment < 20000000) { pc_meyve_num = 2; } else { pc_meyve_num = 3; } BYTE item_meyve_num = item->GetValue(0);//Value0 değeri o itemin hangi aralığa ait onu belirtiyoruz(Value0 item_proto da). if (item_meyve_num != pc_meyve_num) { ChatPacket(CHAT_TYPE_INFO, "Derecenizi yükseltmek için Derece Meyvesi %d kullanın", pc_meyve_num); return false; } int val = item->GetValue(1);//Value1 değeri o itemin oyuncuya ne kadar derece kazandıracağını belirtiyoruz(Value1 item_proto da). if (MaxAlignment - Alignment < val * 10) { val = (MaxAlignment - Alignment) / 10; } UpdateAlignment(val*10); ChatPacket(CHAT_TYPE_INFO, "Dereceniz %d arttırıldı.", val); item->SetCount(item->GetCount() - 1); char buf[256 + 1]; snprintf(buf, sizeof(buf), "%d %d", Alignment, GetAlignment()); LogManager::instance().CharLog(this, val, "MYTHICAL_PEACH", buf); } break;
item_proto:
Kod
Daha Çok Göster70180 derece meyvesi 1(500) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 500 0 0 0 0 0 0 0 70181 derece meyvesi 1(1000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 1000 0 0 0 0 0 0 0 70182 derece meyvesi 1(2000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 2000 0 0 0 0 0 0 0 70183 derece meyvesi 1(5000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 5000 0 0 0 0 0 0 0 70184 derece meyvesi 1(10000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 1 10000 0 0 0 0 0 0 0 70185 derece meyvesi 2(500) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 500 0 0 0 0 0 0 0 70186 derece meyvesi 2(1000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 1000 0 0 0 0 0 0 0 70187 derece meyvesi 2(2000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 2000 0 0 0 0 0 0 0 70188 derece meyvesi 2(5000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 5000 0 0 0 0 0 0 0 70189 derece meyvesi 2(10000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 2 10000 0 0 0 0 0 0 0 70190 derece meyvesi 3(500) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 500 0 0 0 0 0 0 0 70191 derece meyvesi 3(1000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 1000 0 0 0 0 0 0 0 70192 derece meyvesi 3(2000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 2000 0 0 0 0 0 0 0 70193 derece meyvesi 3(5000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 5000 0 0 0 0 0 0 0 70194 derece meyvesi 3(10000) ITEM_USE USE_SPECIAL 1 NONE ITEM_STACKABLE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 3 10000 0 0 0 0 0 0 0
item_names:
Kod
Daha Çok Göster70180 Derece Meyvesi 1(500) 70181 Derece Meyvesi 1(1000) 70182 Derece Meyvesi 1(2000) 70183 Derece Meyvesi 1(5000) 70184 Derece Meyvesi 1(10000) 70185 Derece Meyvesi 2(500) 70186 Derece Meyvesi 2(1000) 70187 Derece Meyvesi 2(2000) 70188 Derece Meyvesi 2(5000) 70189 Derece Meyvesi 2(10000) 70190 Derece Meyvesi 3(500) 70191 Derece Meyvesi 3(1000) 70192 Derece Meyvesi 3(2000) 70193 Derece Meyvesi 3(5000) 70194 Derece Meyvesi 3(10000)
item_list:
Kod
Daha Çok Göster70180 ETC icon/item/71107.tga 70181 ETC icon/item/71107.tga 70182 ETC icon/item/71107.tga 70183 ETC icon/item/71107.tga 70184 ETC icon/item/71107.tga 70185 ETC icon/item/derecemeyvesi2.png 70186 ETC icon/item/derecemeyvesi2.png 70187 ETC icon/item/derecemeyvesi2.png 70188 ETC icon/item/derecemeyvesi2.png 70189 ETC icon/item/derecemeyvesi2.png 70190 ETC icon/item/derecemeyvesi3.png 70191 ETC icon/item/derecemeyvesi3.png 70192 ETC icon/item/derecemeyvesi3.png 70193 ETC icon/item/derecemeyvesi3.png 70194 ETC icon/item/derecemeyvesi3.png
item_desc:
Kod
Daha Çok Göster70180 Derece Meyvesi 1(500) Derecen 0 ile 1.000.000 arasındaysa Derece puanını 500 arttırır. 70181 Derece Meyvesi 1(1000) Derecen 0 ile 1.000.000 arasındaysa Derece puanını 1.000 arttırır. 70182 Derece Meyvesi 1(2000) Derecen 0 ile 1.000.000 arasındaysa Derece puanını 2.000 arttırır. 70183 Derece Meyvesi 1(5000) Derecen 0 ile 1.000.000 arasındaysa Derece puanını 5.000 arttırır. 70184 Derece Meyvesi 1(10000) Derecen 0 ile 1.000.000 arasındaysa Derece puanını 10.000 arttırır. 70185 Derece Meyvesi 2(500) Derecen 1.000.000 ile 2.000.000 arasındaysa Derece puanını 500 arttırır. 70186 Derece Meyvesi 2(1000) Derecen 1.000.000 ile 2.000.000 arasındaysa Derece puanını 1.000 arttırır. 70187 Derece Meyvesi 2(2000) Derecen 1.000.000 ile 2.000.000 arasındaysa Derece puanını 2.000 arttırır. 70188 Derece Meyvesi 2(5000) Derecen 1.000.000 ile 2.000.000 arasındaysa Derece puanını 5.000 arttırır. 70189 Derece Meyvesi 2(10000) Derecen 1.000.000 ile 2.000.000 arasındaysa Derece puanını 10.000 arttırır. 70190 Derece Meyvesi 3(500) Derecen 2.000.000 ile 3.000.000 arasındaysa Derece puanını 500 arttırır. 70191 Derece Meyvesi 3(1000) Derecen 2.000.000 ile 3.000.000 arasındaysa Derece puanını 1.000 arttırır. 70192 Derece Meyvesi 3(2000) Derecen 2.000.000 ile 3.000.000 arasındaysa Derece puanını 2.000 arttırır. 70193 Derece Meyvesi 3(5000) Derecen 2.000.000 ile 3.000.000 arasındaysa Derece puanını 5.000 arttırır. 70194 Derece Meyvesi 3(10000) Derecen 2.000.000 ile 3.000.000 arasındaysa Derece puanını 10.000 arttırır.
Ekte verdiğim dosyayı indirip pack\icon\icon\item içerisine atın.
Güncelleme;
derece meyvesini toplu okuma düzenlemesi;uiinventory.py:
Kod
Daha Çok Göster#bul; def __UseItem(self, slotIndex): ItemVNum = player.GetItemIndex(slotIndex) item.SelectItem(ItemVNum) if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE): self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.INVENTORY_REALLY_USE_ITEM) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel)) self.questionDialog.Open() self.questionDialog.slotIndex = slotIndex constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) else: self.__SendUseItemPacket(slotIndex) #değiştir; def __UseItem(self, slotIndex): ItemVNum = player.GetItemIndex(slotIndex) item.SelectItem(ItemVNum) if item.IsFlag(item.ITEM_FLAG_CONFIRM_WHEN_USE): self.questionDialog = uiCommon.QuestionDialog() self.questionDialog.SetText(localeInfo.INVENTORY_REALLY_USE_ITEM) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnAccept)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.__UseItemQuestionDialog_OnCancel)) self.questionDialog.Open() self.questionDialog.slotIndex = slotIndex constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(1) elif app.IsPressed(app.DIK_LCONTROL): if ItemVNum == 70102:#zen fasülyesi(ctrl+sağtık yapınca 10 tane arka arkaya kullanacak) for i in xrange(10):#10 sayısını çok arttırma max 20 kullan yoksa client login atabilir. self.__SendUseItemPacket(slotIndex) else: self.__SendUseItemPacket(slotIndex)
Not:Bu güncellemeyi herkes yapmak zorunda değil isteyen yapsın -
-
-
tamamen orjinal dosyalar kullanılmıştır. bazı syserrler var efektlerle ilgili fakat dosya yolları vb. doğru anlamadığım için ellemedim oynanışta bir sorun yok. maplere gidiyor (confige eklediklerimi denedim). srcler build alınıyor packların açık hallerini koymadım sürükleyince açılır zaten. dosya boyutu BSD'den dolayı yüksek. game source dosyaları bsd'nin içinde mevcut olduğundan ekstra olarak eklemedim.
Bilgiler:
Kod
Daha Çok Göster(lazım olursa diye) oyuna giriş hesabı Kullanıcı adı: hsm şifre: 12345 FreeBSD 14.3 64 Bit Kullanıcı adı: root şifre: dev Mysql8 Navicat kullanıcı adı: root şifre: password (Bsd'den mysql -p komutu ile girecekseniz kullanıcı adı: root şifre: 12345 ) Oyun dizini cd /home/Server Src dizini cd /home/Source
-
uitooltip.py:
Kod
Daha Çok Göster#Arat; def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum): #Komple değiştir; def __AppendAccessoryMetinSlotInfo(self, metinSlot, mtrlVnum): ACCESSORY_SOCKET_MAX_SIZE = 3 cur=min(metinSlot[0], ACCESSORY_SOCKET_MAX_SIZE) end=min(metinSlot[1], ACCESSORY_SOCKET_MAX_SIZE) affectType1, affectValue1 = item.GetAffect(0) affectType2, affectValue2 = item.GetAffect(1) affectType3, affectValue3 = item.GetAffect(2) mtrlPos=0 mtrlList=[mtrlVnum]*cur+[player.METIN_SOCKET_TYPE_SILVER]*(end-cur) attr_total = [0,0,0] height = self.toolTipHeight for mtrl in mtrlList: affectList1=[0, max(1, affectValue1*10/100), max(2, affectValue1*20/100), max(3, affectValue1*40/100)] affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)] affectList3=[0, max(1, affectValue3*10/100), max(2, affectValue3*20/100), max(3, affectValue3*40/100)] affectString1 = self.__GetAffectString(affectType1, affectList1[mtrlPos+1]) affectString2 = self.__GetAffectString(affectType2, affectList2[mtrlPos+1]) affectString3 = self.__GetAffectString(affectType3, affectList3[mtrlPos+1]) if mtrl > 1: if affectString1: attr_total[0] += affectList1[mtrlPos+1] if affectString2: attr_total[1] += affectList2[mtrlPos+1] if affectString3: attr_total[2] += affectList3[mtrlPos+1] leftTime = 0 if cur == mtrlPos+1: leftTime=metinSlot[2] self.__AppendMetinSlotInfo_AppendMetinSocketData_New(mtrlPos, mtrl, height, end, leftTime) mtrlPos+=1 if end > 0: if end > 4: self.toolTipHeight += 70 else: self.toolTipHeight += 50 self.ResizeToolTip() affectString11 = self.__GetAffectString(affectType1, attr_total[0]) affectString22 = self.__GetAffectString(affectType2, attr_total[1]) affectString33 = self.__GetAffectString(affectType3, attr_total[2]) self.AppendSpace(5) if affectString11: self.AppendTextLine(affectString11, self.POSITIVE_COLOR) if affectString22: self.AppendTextLine(affectString22, self.POSITIVE_COLOR) if affectString33: self.AppendTextLine(affectString33, self.POSITIVE_COLOR) self.ResizeToolTip() #Arat; def __AppendMetinSlotInfo_AppendMetinSocketData(self, index, metinSlotData, custumAffectString="", custumAffectString2="", leftTime=0): #Üstüne ekle; def __AppendMetinSlotInfo_AppendMetinSocketData_New(self, index, metinSlotData, height=0, end=0, leftTime=0): slotType = self.GetMetinSocketType(metinSlotData) itemIndex = self.GetMetinItemIndex(metinSlotData) if 0 == slotType: return slotImage = ui.ImageBox() slotImage.SetParent(self) slotImage.Show() ## Name nameTextLine = ui.TextLine() nameTextLine.SetParent(self) nameTextLine.SetFontName(self.defFontName) nameTextLine.SetPackedFontColor(self.CONDITION_COLOR) nameTextLine.SetOutline() nameTextLine.SetFeather() nameTextLine.Show() self.childrenList.append(nameTextLine) if player.METIN_SOCKET_TYPE_SILVER == slotType: slotImage.LoadImage("d:/ymir work/ui/game/windows/metin_slot_silver.sub") elif player.METIN_SOCKET_TYPE_GOLD == slotType: slotImage.LoadImage("d:/ymir work/ui/game/windows/metin_slot_gold.sub") self.childrenList.append(slotImage) if index > 3: height += 35 index = index-4 if end > 4: end = 4 calc_x = (self.toolTipWidth/2) - (17.5*end) slotImage.SetPosition(calc_x+index*40, height +20) nameTextLine.SetPosition(50, self.toolTipHeight) metinImage = ui.ImageBox() metinImage.SetParent(slotImage) metinImage.Show() self.childrenList.append(metinImage) if itemIndex: item.SelectItem(itemIndex) ## Image try: metinImage.LoadImage(item.GetIconImageFileName()) except: dbg.TraceError("ItemToolTip.__AppendMetinSocketData() - Failed to find image file %d:%s" % (itemIndex, item.GetIconImageFileName()) ) metinImage.SetPosition(1, 1) nameTextLine.SetText(item.GetItemName()) if 0 != leftTime: timeText = ("|cffFFD700" + localeInfo.LEFT_TIME + " : " + localeInfo.SecondToDHM(leftTime)) timeTextLine = ui.TextLine() timeTextLine.SetParent(self) timeTextLine.SetFontName(self.defFontName) timeTextLine.SetPackedFontColor(self.POSITIVE_COLOR) timeTextLine.SetPosition(50, self.toolTipHeight + 55) timeTextLine.SetOutline() timeTextLine.SetFeather() timeTextLine.Show() timeTextLine.SetText(timeText) self.childrenList.append(timeTextLine) self.toolTipHeight += 16 + 2
nameTextLine.SetPosition(50, self.toolTipHeight) // bu cevher isminin konumu kendine göre ayarla
timeTextLine.SetPosition(50, self.toolTipHeight + 55) // bu sürenin konumu kendine göre ayarla
affectList1=[0, max(1, affectValue1*10/100), max(2, affectValue1*20/100), max(3, affectValue1*40/100)]
affectList2=[0, max(1, affectValue2*10/100), max(2, affectValue2*20/100), max(3, affectValue2*40/100)]
affectList3=[0, max(1, affectValue3*10/100), max(2, affectValue3*20/100), max(3, affectValue3*40/100)]
// bunlarda itemin kendisindeki efsunlardan yüzdesel olarak ne kadarını alacağını ayarla fazla özellik versin istemiyorsan düşür.