Jump to content
×
×
  • Create New...

Kuroko

Banni
  • Posts

    92
  • Joined

  • Last visited

  • Days Won

    24

Kuroko last won the day on September 14

Kuroko had the most liked content!

1 Follower

About Kuroko

  • Birthday 12/01/2001

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Kuroko's Achievements

Collaborator

Collaborator (7/14)

  • Dedicated Rare
  • Reacting Well Rare
  • First Post
  • Collaborator
  • Very Popular Rare

Recent Badges

1.1k

Reputation

  1. Bonsoir All, Je partage une petite correction concernant les montures, quand vous êtes sur une monture est que vous mourrez dessus celui-ci ce duplique ce qui crée deux montures. Vous aurez besoin de vos sources serveur. Commençons. char_battle.cpp, Chercher : void CHARACTER::Dead(LPCHARACTER pkKiller, bool bImmediateDead) { Ajouter en dessous après le { : if (IsHorseRiding()) { StopRiding(); } if (GetMountVnum()) { RemoveAffect(AFFECT_MOUNT_BONUS); m_dwMountVnum = 0; UnEquipSpecialRideUniqueItem(); UpdatePacket(); } N'oubliez pas de recompiler vos sources serveur & de remplacer le nouveau game par l'ancien.
  2. Ta compiler ensuite ? Sinon y'a plus simple ouvre t'es fichier CONFIG de tes cores le 'TEST_SERVER: 1' tu met 0.
  3. Centre de Téléchargement Télécharger ( Interne ) Bonjour, Je vous partage aujourd'hui quelque choses de simple, c'est tout simplement importer les slots ring de l'inventaire à la fenêtre de costume. Aperçu : Commençons le tutoriel. Client root/uiinventory.py Chercher : def RefreshCostumeSlot(self): getItemVNum = player.GetItemIndex for i in xrange(item.COSTUME_SLOT_COUNT): slotNumber = item.COSTUME_SLOT_START + i self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) Ajouter en dessous : for i in xrange(2): slotNumber = player.NEW_EQUIPMENT_SLOT_START + i self.wndEquip.SetItemSlot(slotNumber, getItemVNum(slotNumber), 0) uiscript/costumewindow.py Changer complètement votre costumewindow ( Faite attention ici au slot de vos item c'est possible que ce ne soit pas le même ) : import uiScriptLocale import item import app COSTUME_START_INDEX = item.COSTUME_SLOT_START window = { "name" : "CostumeWindow", "x" : SCREEN_WIDTH - 180 - 140, "y" : SCREEN_HEIGHT - 40 - 565, "style" : ("movable", "float",), "width" : 140, "height" : (180 + 47 + 32), "children" : ( { "name" : "board", "type" : "board", "style" : ("attach",), "x" : 0, "y" : 0, "width" : 140, "height" : (180 + 47 + 32), "children" : ( ## Title { "name" : "TitleBar", "type" : "titlebar", "style" : ("attach",), "x" : 6, "y" : 6, "width" : 126, "color" : "yellow", "children" : ( { "name":"TitleName", "type":"text", "x":60, "y":3, "text":uiScriptLocale.COSTUME_WINDOW_TITLE, "text_horizontal_align":"center" }, ), }, ## Equipment Slot { "name" : "Costume_Base", "type" : "image", "x" : 13, "y" : 38, "image" : uiScriptLocale.LOCALE_UISCRIPT_PATH + "costume/new_costume_bg_with_ring.jpg", "children" : ( { "name" : "CostumeSlot", "type" : "slot", "x" : 3, "y" : 3, "width" : 127, "height" : 188, "slot" : ( {"index":COSTUME_START_INDEX+0, "x":62, "y":45, "width":32, "height":64}, # Costume {"index":COSTUME_START_INDEX+1, "x":62, "y": 9, "width":32, "height":32}, # Hair {"index":COSTUME_START_INDEX+2, "x":5, "y":127, "width":32, "height":32}, # Mount {"index":COSTUME_START_INDEX+3, "x":70, "y":127, "width":32, "height":32}, # Acce {"index":COSTUME_START_INDEX+4, "x":13, "y":13, "width":32, "height":96}, # Weapon {"index":item.EQUIPMENT_RING1, "x":12, "y":167, "width":32, "height":32}, {"index":item.EQUIPMENT_RING2, "x":63, "y":167, "width":32, "height":32}, ), }, ), }, ), }, ), } Pour terminer, ouvrer votre item_proto.txt changer c'est item part le Type "ITEM_RING" comme ceci : 71136 Sucette de la force ITEM_RING 0 71136 Sucette de la force ITEM_RING 0 71143 Anneau de la joie ITEM_RING 0 71148 Anneau de Volonté ITEM_RING 0 71149 Anneau de Force mortelle ITEM_RING 0 71158 Médaille de héros ITEM_RING 0 71188 Sucette magique ITEM_RING 0 71199 Choco-amulette ITEM_RING 0 71202 Amulette de Nazar ITEM_RING 0 Je vous met pas toute la ligne ça ne sert à rien, changer simplement le type de votre item comme ça. Télécharger ensuite l'image .tga remplacer le par le votre. TÉLÉCHARGEMENT Succès ! Le tutoriel prend fin ici, n'hésitez pas à me contacter si vous avez une erreur. Enjoy.
  4. Centre de Téléchargement Télécharger ( Interne ) Bonjour, ce partage consiste à enlever la collision entre joueurs, pnj, pet, monture, magasin ainsi que pendant les OX event. Commençons le tutoriel. Source client UserInterface/Locale_inc.h Ajouter à l'intérieur : #define REMOVE_MOUNTS_COLLISION // Remove mounts collision #define REMOVE_PETS_COLLISION // Remove pets collision #define REMOVE_SHOPS_COLLISION // Remove shops collision #define REMOVE_SAFEZONE_COLLISION // Remove safezone collision #define REMOVE_OX_PLAYER_COLLISION // Remove ox player collision Source client GameLib/ActorInstanceCollisionDetection.cpp Ajouter tout en haut : #include "../UserInterface/PythonBackground.h" Checher : BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim) Ajouter au dessus : BOOL CActorInstance::IsInSafeZone(CActorInstance& ptr) { const TPixelPosition& c_rkPPosCur = ptr.NEW_GetCurPixelPositionRef(); if (CPythonBackground::Instance().isAttrOn(c_rkPPosCur.x, c_rkPPosCur.y, (1 << 2))) return true; return false; } Checher : BOOL CActorInstance::TestActorCollision(CActorInstance & rVictim) { if (rVictim.IsDead()) return false; Ajouter en dessous : #ifdef REMOVE_SAFEZONE_COLLISION if (IsInSafeZone(rVictim)) return false; #endif #ifdef REMOVE_PETS_COLLISION if (rVictim.GetRace()>=34001 && rVictim.GetRace()<=34099) // Mob Vnum return false; #endif #ifdef REMOVE_SHOPS_COLLISION if (rVictim.GetRace()>=30000 && rVictim.GetRace()<=30001) // Mob Vnum return false; #endif #ifdef REMOVE_MOUNTS_COLLISION if (rVictim.GetRace()>=20101 && rVictim.GetRace()<=20299) // Mob Vnum return false; #endif #ifdef REMOVE_OX_PLAYER_COLLISION const char* strMapEventOx = "metin2_map_oxevent"; std::string stringName = CPythonBackground::Instance().GetWarpMapName(); if (strMapEventOx == stringName) { #ifdef ENABLE_WOLFMAN_CHARACTER if (0 <= rVictim.GetRace() && rVictim.GetRace() <= 8) #else if (0 <= rVictim.GetRace() && rVictim.GetRace() <= 7) #endif return false; } #endif Source client GameLib/ActorInstance.h Chercher : public: BOOL TestActorCollision(CActorInstance & rVictim ); BOOL TestPhysicsBlendingCollision(CActorInstance & rVictim); Ajouter en dessous : BOOL IsInSafeZone(CActorInstance& ptr); Succès ! Le tutoriel prend fin ici, n'oubliez pas de recompiler vos source client, Enjoy.
  5. Centre de Téléchargement Télécharger ( Interne ) Bonjour, c'est un petit partage mais qui rendra votre personnage plus brillant avec des costumes. Aperçu de la modification : [Hidden Content] Commençons le tutoriel. Source client UserInterface/Locale_inc.h Trouver ceci dans votre Locale_inc.h : ( Le define peut varier selon l'installation du système en question ) #define ENABLE_WEAPON_COSTUME_SYSTEM Ajouter en dessous de ce define : ( Vous n'êtes pas obliger de l'ajouter juste en dessous ) #ifdef ENABLE_WEAPON_COSTUME_SYSTEM #define USE_WEAPON_COSTUME_WITH_EFFECT // Weapon costume with effect +9 #endif #define USE_BODY_COSTUME_WITH_EFFECT // Body costume with effect Source client UserInterface/InstanceBase.cpp Chercher : case CItemData::ITEM_TYPE_COSTUME: if (pItem->GetSubType() == CItemData::COSTUME_WEAPON) { __ClearWeaponRefineEffect(); Changer complètement la fonction de "case CItemData::ITEM_TYPE_COSTUME:" jusqu'à la fermeture de la fonction comme ceci : case CItemData::ITEM_TYPE_COSTUME: #ifdef ENABLE_WEAPON_COSTUME_SYSTEM if (pItem->GetSubType() == CItemData::COSTUME_WEAPON) { __ClearWeaponRefineEffect(); #ifdef USE_WEAPON_COSTUME_WITH_EFFECT switch(pItem->GetValue(3)) { case CItemData::WEAPON_DAGGER: m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED9; m_swordRefineEffectLeft = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED9_LEFT; break; case CItemData::WEAPON_FAN: m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_FANBELL_REFINED9; break; case CItemData::WEAPON_ARROW: case CItemData::WEAPON_BELL: m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SMALLSWORD_REFINED9; break; case CItemData::WEAPON_BOW: m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_BOW_REFINED9; break; #ifdef ENABLE_WOLFMAN_CHARACTER case CItemData::WEAPON_CLAW: m_swordRefineEffectRight = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED9; m_swordRefineEffectLeft = EFFECT_REFINED + EFFECT_SMALLSWORD_REFINED9_LEFT; break; #endif default: m_swordRefineEffectRight = EFFECT_REFINED+EFFECT_SWORD_REFINED9; } if (m_swordRefineEffectRight) m_swordRefineEffectRight = __AttachEffect(m_swordRefineEffectRight); if (m_swordRefineEffectLeft) m_swordRefineEffectLeft = __AttachEffect(m_swordRefineEffectLeft); #endif //USE_WEAPON_COSTUME_WITH_EFFECT break; } #endif #ifdef USE_BODY_COSTUME_WITH_EFFECT if (pItem->GetSubType() == CItemData::COSTUME_BODY) { __ClearArmorRefineEffect(); m_armorRefineEffect = EFFECT_REFINED+EFFECT_BODYARMOR_REFINED9; __AttachEffect(m_armorRefineEffect); break; } #endif //USE_BODY_COSTUME_WITH_EFFECT break; } return 0; } Succès ! Le tutoriel prend fin ici, n'oubliez pas de recompiler vos source client, Enjoy.
  6. Centre de Téléchargement Télécharger ( Interne ) Bonjour, je vous partage le MouseWheel qui fonctionne avec la molette de votre souris. Aperçu : [Hidden Content] [Hidden Content] [Hidden Content] Voici les 3 aperçu ( Peut importe la fenêtre temps que y'a un ScrollBar cela marchera avec tout ) Commençons le tutoriel Côté source client : EterPythonLib/PythonWindow.cpp Chercher : BOOL CWindow::OnMouseMiddleButtonUp() { long lValue; if (PyCallClassMemberFunc(m_poHandler, "OnMouseMiddleButtonUp", BuildEmptyTuple(), &lValue)) if (0 != lValue) return TRUE; return FALSE; } Ajouté en dessous : BOOL CWindow::RunMouseWheelEvent(long nLen) { bool bValue = false; if (PyCallClassMemberFunc(m_poHandler, "OnRunMouseWheel", Py_BuildValue("(l)", nLen), &bValue)) return bValue; return bValue; } EterPythonLib/PythonWindow.h Chercher : virtual BOOL OnMouseMiddleButtonUp(); Ajouté en dessous : virtual BOOL RunMouseWheelEvent(long nLen); EterPythonLib/PythonWindowManager.cpp Chercher : // IME void CWindowManager::RunIMEUpdate() { if (m_pLockWindow) { m_pLockWindow->OnIMEUpdate(); return; } if (!m_pActiveWindow) return; if (!m_pActiveWindow->IsRendering()) return; m_pActiveWindow->OnIMEUpdate(); } Ajouté au dessus : bool CWindowManager::RunMouseWheelEvent(long nLen) { CWindow* pWin; if (pWin = GetPointWindow()) { if (pWin->IsRendering() || pWin->IsShow()) { if (pWin->RunMouseWheelEvent(nLen)) return true; else if (pWin->GetRoot()->RunMouseWheelEvent(nLen)) return true; } } return false; } EterPythonLib/PythonWindowManager.h Chercher : void RunMouseMiddleButtonUp(long x, long y); Ajouté en dessous : bool RunMouseWheelEvent(long nLen); UserInterface/PythonApplicationEvent.cpp Chercher : void CPythonApplication::OnMouseMiddleButtonUp(int x, int y) { CCameraManager& rkCmrMgr=CCameraManager::Instance(); CCamera* pkCmrCur=rkCmrMgr.GetCurrentCamera(); if (pkCmrCur) pkCmrCur->EndDrag(); if ( !m_pyBackground.IsMapReady() ) return; SetCursorNum(NORMAL); if ( CURSOR_MODE_HARDWARE == GetCursorMode()) SetCursorVisible(TRUE); } Ajouté en dessous : Attention ! Certaine personne peuvent avoir la fonction à ajouté, regarder bien avant d'ajouter la fonction void CPythonApplication::OnMouseWheel(int nLen) si vous ne la posséder pas déjà, si c'est le cas remplacer là complètement. void CPythonApplication::OnMouseWheel(int nLen) { if (!(UI::CWindowManager::Instance().RunMouseWheelEvent(nLen))) { CCameraManager& rkCmrMgr = CCameraManager::Instance(); CCamera* pkCmrCur = rkCmrMgr.GetCurrentCamera(); if (pkCmrCur) pkCmrCur->Wheel(nLen); } } Succès ! Terminer pour le côté source client. Côté client : root/ui.py Chercher dans la classe Window : self.onMouseLeftButtonUpEvent = None Ajouté en dessous : self.onRunMouseWheelEvent = None Ajouté tout en bas de la class Window : def SetOnRunMouseWheelEvent(self, event): self.onRunMouseWheelEvent = event def OnRunMouseWheel(self, nLen): if self.onRunMouseWheelEvent: apply(self.onRunMouseWheelEvent, (bool(nLen < 0), )) return True return False Pour les personnes ayant ce système [Hidden Content] : root/uiTarget.py : Chercher : def AppendWindow(self, wnd, x = 0, width = 0, height = 0): if width == 0: width = wnd.GetWidth() if height == 0: height = wnd.GetHeight() wnd.SetParent(self) if x == 0: wnd.SetPosition((self.GetWidth() - width) / 2, self.yPos) else: wnd.SetPosition(x, self.yPos) wnd.Show() self.children.append(wnd) self.yPos += height + 5 Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.itemScrollBar.IsShow(): if nLen > 0: self.itemScrollBar.OnUp() else: self.itemScrollBar.OnDown() root/uiCharacter.py : Chercher : def __UpdateQuestClock(self): Ajouté au dessus de cette fonction : def OnRunMouseWheel(self, nLen): if self.questScrollBar.IsShow(): if nLen > 0: self.questScrollBar.OnUp() else: self.questScrollBar.OnDown() Pour les personnes ayant ce système [Hidden Content] : root/uiCharacterDetails.py : Chercher : def OnScroll(self): self.RefreshLabel() Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.ScrollBar.IsShow(): if nLen > 0: self.ScrollBar.OnUp() else: self.ScrollBar.OnDown() root/uiChat.py : Chercher : def OnScroll(self): self.scrollBarPos = self.scrollBar.GetPos() lineCount = chat.GetLineCount(self.chatID) visibleLineCount = chat.GetVisibleLineCount(self.chatID) endLine = visibleLineCount + int(float(lineCount - visibleLineCount) * self.scrollBarPos) chat.SetEndPos(self.chatID, self.scrollBarPos) Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.scrollBar.IsShow(): if nLen > 0: self.scrollBar.OnUp() else: self.scrollBar.OnDown() root/uiCube.py : Chercher : def OnScrollResultList(self): count = self.GetResultCount() scrollLineCount = max(0, count - self.RESULT_SLOT_COUNT) startIndex = int(scrollLineCount * self.contentScrollbar.GetPos()) if startIndex != self.firstSlotIndex: self.firstSlotIndex = startIndex self.Refresh() Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.contentScrollbar.IsShow(): if nLen > 0: self.contentScrollbar.OnUp() else: self.contentScrollbar.OnDown() root/uiMessenger.py : Chercher : def OnScroll(self): scrollLineCount = len(self.showingItemList) - (self.showingPageSize/20) startLine = int(scrollLineCount * self.scrollBar.GetPos()) if startLine != self.startLine: self.startLine = startLine self.__LocateMember() Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.scrollBar.IsShow(): if nLen > 0: self.scrollBar.OnUp() else: self.scrollBar.OnDown() root/uiWhisper.py : Chercher : def OnScroll(self): chat.SetWhisperPosition(self.targetName, self.scrollBar.GetPos()) Ajouté en dessous : def OnRunMouseWheel(self, nLen): if self.scrollBar.IsShow(): if nLen > 0: self.scrollBar.OnUp() else: self.scrollBar.OnDown() Succès ! Le tutoriel prend fin ici, n'oubliez pas de recompiler vos source client & de tout repack côté client, Enjoy. Certaine fonction on était récupérer des source d'owsap, la parti client j'ai du la retaper pour qu'elle fonctionne, bonne utilisation.
  7. Centre de Téléchargement Télécharger ( Interne ) M2KSF Project Bonjour tout le monde, après plusieurs semaines de travail sur mon projet ci-dessous V2.0.0 - Télécharger New Version ----------------------------------------------------------------------------------------------------- V1.4.6 - Télécharger Old Version Je viens enfin vous partager ça deuxième version v2.0.0, cette version malheureusement contient des bugs "gênant" comme les quêtes qui ne s'affiche pas a gauche ( même avec CTRL+A ), la page bonus de la fenêtre de caractéristique actualise mal, d'après mes recherche sa viens de l'item data côté source client qui est sur chargée ( a mon avis ). Le magasin hors ligne en mode debug fait apparaitre une erreur comme "Cannot find by item %" mais sa ne gêne pas le bon fonctionnement du système. Discord M2KSF Mon discord : Kuroko#6709
  8. Hmm, i had no crash with 60 players connected and no restart for 1 week (I restarted for an update).
  9. Centre de Téléchargement Télécharger ( Interne ) Salut tout le monde, Je vous partage mon release du système hide costume récupéré des files à owsap. Petit oublie, n'oubliez pas de rajouter ceci dans votre locale_interface & locale_game de votre dossier locale. SHOW_COSTUME Afficher HIDE_COSTUME Cacher Aperçu du système :
  10. Salut tout le monde, La version 1.0.2 avec la corrections du skill Sura arrive le 11/01/2020. Cordialement Team Miaw.
  11. Bonjour, Après plusieurs années passées dans le développement de Metin2, j'ai beaucoup appris à gérer le code de mieux en mieux, c'est pourquoi donc j'avais ouvert mes deux serveurs, pour ceux qu'ils ne le savent pas "Rimoria & Rebirths" je ne le vous cachent pas que ce n'était pas une réussite. Enfin bref j'ai ouvert ce sujet pour vous présenter mon projet M2KSF celui-ci consiste à regrouper tous les systèmes de l'officiel ainsi que des systèmes tel que comme l'inventaire spéciales etc. Avec mon projet je vais essayer de vous fournir des files propres avec le moins de bug possible ( ce n'est pas possible d'avoir des files sans aucun bug ) mais je vais essayer de faire de mon mieux pour que ces files vous servent à ouvrir votre projet Metin2. Cela fait déjà 2 semaines que je travaille dessus, j'avance tout doucement mais sûrement, la base de ces files c'est les Marty la version qui a fuité et partager sur ce forum même, beaucoup d'entre vous déconseille l'utilisation de ses files certes ils contiennent beaucoup de bug mais j'ai fait en sorte que ce "bug" soit corrigé. Mon discord : Kuroko#6709 Cordialement Kuroko, M2KSF Project
  12. Centre de Téléchargement Télécharger ( Interne ) Coucou Je viens vous partager le système de MailBox que j'ai du récupérer des files à Owsap v4.9.6.9. Seul soucis rencontrer avec ce système un sysser qui pop à l'ouverture du client. Je n'est pas vraiment chercher d'où ce sysser pouvait apparaître mais il ne pose aucun soucis à l'utilisation du système. 0303 21:58:16931 :: Unknown window flag a 0303 21:58:16931 :: Unknown window flag t 0303 21:58:16931 :: Unknown window flag t 0303 21:58:16931 :: Unknown window flag a 0303 21:58:16931 :: Unknown window flag c 0303 21:58:16931 :: Unknown window flag h MailBoxV1 MailBoxV2 C'est encore moi avec une nouvelle version plus de sysser à la connexion quelque petit bug corrigé. C'est seulement la parti Python qui à étais modifier, je remercie @Takumade m'avoir aider. Enjoy. Aperçu du système Merci de me signaler si y'a un oublie dans le Tutoriel ou bien un bug j'essayerai de le résoudre. Attention : Suivez bien le Tutoriel à la lettre si vous ne voulez pas que votre serveur plante !

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.