Aller au contenu

Kuroko

Contributeur
  • Compteur de contenus

    90
  • Inscription

  • Dernière visite

  • Jours gagnés

    22

Kuroko a gagné pour la dernière fois le 14 juin

Kuroko a eu le contenu le plus aimé !

1 abonné

À propos de Kuroko

  • Date de naissance 12/01/2001

Profil

Jeux

  • Dofus
    Expert
  • Metin2
    Expert
  • GTA
    Avancé

Programmation

  • Python
    Débutant
  • C++
    Débutant

Visiteurs récents du profil

3 216 visualisations du profil

Kuroko's Achievements

Collaborator

Collaborator (7/14)

  • First Post
  • Collaborator
  • Very Popular Rare
  • Conversation Starter
  • Week One Done

Recent Badges

1,1k

Réputation sur la communauté

  1. Ta compiler ensuite ? Sinon y'a plus simple ouvre t'es fichier CONFIG de tes cores le 'TEST_SERVER: 1' tu met 0.
  2. 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.
  3. 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.
  4. Bonjour, c'est un petit partage mais qui rendra votre personnage plus brillant avec des costumes. Aperçu de la modification : [Contenu Masqué] 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.
  5. Bonjour, je vous partage le MouseWheel qui fonctionne avec la molette de votre souris. Aperçu : [Contenu Masqué] [Contenu Masqué] [Contenu Masqué] 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 [Contenu Masqué] : 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 [Contenu Masqué] : 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.
  6. Centre de Téléchargement Télécharger ( Interne V2 ) Télécharger ( Interne V1 ) 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
  7. Hmm, i had no crash with 60 players connected and no restart for 1 week (I restarted for an update).
  8. 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 :
  9. Salut tout le monde, La version 1.0.2 avec la corrections du skill Sura arrive le 11/01/2020. Cordialement Team Miaw.
  10. 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
  11. 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 FEV1 - MailBoxV1 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. -- FEV2 -- MailBoxV2 -- 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 !
  12. https://metin2.download/file.php?key=xTExs0z5d2X05v0wtS8IbHzmD4BBVU0S
  13. What are you talking about ? The game and mysql is already in FreeBsd
×
×
  • Créer...

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.