Search the Community

Showing results for tags 'tutoriel / partage'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Register & Login
    • Register
    • Login
  • Espace Communautaire
    • Funky Emulation
    • Présentations
    • Services
    • Discussions Générales
    • Bureau de la Communauté
    • Espace Premium
  • Emulation & Co
    • Rewrite a Release / Tutorial
    • Suggest a Release / Tutorial
    • The Ideas Box
  • Emulation de jeux
    • RaiderZ
    • Aura Kingdom
    • Metin2
    • Dofus
    • World of Warcraft
    • Minecraft
    • Aion
    • Habbo
    • Voir plus...
  • Espace Divers
  • Internationnal Forum
  • PassionDev's Forum
  • M2Project - Metin2's M2SF
  • M2Project - Metin2's Aide / Questions / Support
  • M2Project - Metin2's Tutoriels & Partages
  • M2Project - Metin2's Suggestions
  • M2Project - Metin2's Report de Bugs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Nationality


Sexe


Discord


Skype


Biographie


Site


Nombre

 
or  

Found 779 results

  1. Ce tutoriel a pour but de vous expliquer comment mettre un effet visuel sur berserk. Tous les buffs en ont un, par exemple bénédiction entoure le joueur d'une aura bleutée, berserk est l'exception. 1 -- Pour commencer dépacker le pack root puis ouvrez le fichier playersettingmodule.py vers la ligne 300 vous aurez : chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+16, "", "d:/ymir work/pc/warrior/effect/gyeokgongjang_loop.mse") ajoutez cette ligne là avant : chrmgr.RegisterEffect(chrmgr.EFFECT_AFFECT+14, "Bip01", "d:/ymir work/pc/warrior/effect/berserk.mse") 2 -- Enregistrez, puis dépackez le pack pc. Il faut rajouter le fichier berserk.mse dans le dossier ymir work/pc/warrior/effect/ si vous n'en avez pas, voici le mien : 3 -- Repackez root et pc puis lancez berserk, vous devriez avoir ça: En espérant vous avoir aidé. Pour toutes questions, rendez-vous dans la catégorie Aide/Questions/Support
  2. Gestion des yangs : Aujourd'hui je vais vous partager une quête qui permet d'échanger ces yangs contre un lingot n'importe ou dans la map. quest yangs begin state start begin when 80001.use begin--Ajuster en fonction de l'item a utiliser say_title("Gestion des yangs") say("") say("Bonjour.") say("Ici, vous pouvez transformer vos yangs en lingots.") say("Combien de yangs voulez vous transformer ?") say("Vous avez un total de "..pc.gold.." yang(s).") local sy = select("50M","100M","250M","500M","1MM","Aucun")--Ajuster en fonction des yangs du lingots if sy==6 then return elseif sy==1 then if pc.gold > 50000000 then --Ajuster en fonction des yangs du lingots pc.change_gold(-50000000)--Ajuster en fonction des yangs du lingots pc.give_item2(80003, 1) else syschat("Vous n'avez pas assez de yangs !") end elseif sy==2 then if pc.gold > 100000000 then--Ajuster en fonction des yangs du lingots pc.change_gold(-100000000)--Ajuster en fonction des yangs du lingots pc.give_item2(80004, 1) else syschat("Vous n'avez pas assez de yangs !") end elseif sy==3 then if pc.gold > 250000000 then--Ajuster en fonction des yangs du lingots pc.change_gold(-2500000000)--Ajuster en fonction des yangs du lingots pc.give_item2(80005, 1) else syschat("Vous n'avez pas assez de yangs !") end elseif sy==4 then if pc.gold > 500000000 then--Ajuster en fonction des yangs du lingots pc.change_gold(-500000000)--Ajuster en fonction des yangs du lingots pc.give_item2(80006, 1) else syschat("Vous n'avez pas assez de yangs !") end elseif sy==5 then if pc.gold > 1000000000 then--Ajuster en fonction des yangs du lingots pc.change_gold(-1000000000)--Ajuster en fonction des yangs du lingots pc.give_item2(80006, 1) else syschat("Vous n'avez pas assez de yangs !") end end end end end Si vous ne savez pas implanter une quête, suivez ce tutoriel : ICI
  3. Bonjour, J'aimerais vous faire part de mon partage d'un très gros pack complet de serveur metin 2 ou j ai passer presque 6 mois a bosser dessus suite , a ma reprise de boulot dans la vie actif je n'est plus le temps de m'occuper de tout sa et je trouve sa dommage de faire dormir sa sur mon pc donc je laisse un lien de dl pour récupéré tout sa en espérant que vous ailler une bonne connexion car le dossier et très gros en espérant que vous me laisserez des bon coms et oublier pas un pouce bleu Merci. Source=moi Lien de dl=Cliquez ici pour télécharger Le fichier a dl comporte : Client Lib source Files Se sont des files 2014 toute debug , tout l interface et modifier le client et en qualité hd , ce qui de l implantation dans le client tout et implanter les magasin hors ligne , le switchbot, interface inédite en jeu et plein autre surprise je vous laisse découvrir, je vous laisse un gros partage prenez en par que c'est beaucoup de boulot et que je partage tout sa avec plaisir pour ma part! --- Download
  4. Bonjour, Bonsoir Je vous présente aujourd'hui, un petit partage, qui vous permettra d'ajouter des emplacements pour vos personnages. Ceci est mon premier partage, donc toutes critiques ou autres seront une source d'améliorations. Le tutoriel se base sur l'ordre suivant : Serveur/Client/MySQL Fini de parler, passons au tutoriel : /!\ Serveur /!\ Rendez-vous dans Common/length.h Cherchez : PLAYER_PER_ACCOUNT = 4, Remplacez par : PLAYER_PER_ACCOUNT = 8, Rendez-vous maintenant dans Game/src/locale_service.cpp Cherchez : static void __CheckPlayerSlot(const std::string& service_name) { if (PLAYER_PER_ACCOUNT != 4) { printf(" PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT); exit(0); } } Remplacez par : static void __CheckPlayerSlot(const std::string& service_name) { if (PLAYER_PER_ACCOUNT != 8) { printf(" PLAYER_PER_ACCOUNT = %d\n", PLAYER_PER_ACCOUNT); exit(0); } } Maintenant, allez dans Game/src/char_change_empire.cpp Cherchez : snprintf(szQuery, sizeof(szQuery), "SELECT id, pid1, pid2, pid3, pid4 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery)); Remplacez par : snprintf(szQuery, sizeof(szQuery), "SELECT id, pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8 FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery)); Toujours dans char_change_empire.cpp Cherchez : MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult); str_to_number(dwAID, row[0]); str_to_number(dwPID[0], row[1]); str_to_number(dwPID[1], row[2]); str_to_number(dwPID[2], row[3]); str_to_number(dwPID[3], row[4]); Remplacez par : MYSQL_ROW row = mysql_fetch_row(msg->Get()->pSQLResult); str_to_number(dwAID, row[0]); str_to_number(dwPID[0], row[1]); str_to_number(dwPID[1], row[2]); str_to_number(dwPID[2], row[3]); str_to_number(dwPID[3], row[4]); str_to_number(dwPID[4], row[5]); str_to_number(dwPID[5], row[6]); str_to_number(dwPID[6], row[7]); str_to_number(dwPID[7], row[8]); cherchez ensuite : snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery)); Remplacez par : snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", get_table_postfix(), empire, GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); std::auto_ptr msg(DBManager::instance().DirectQuery(szQuery)); Cherchez : DWORD CHARACTER::GetAID() const { char szQuery[1024+1]; DWORD dwAID = 0; snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery); Remplacez par : DWORD CHARACTER::GetAID() const { char szQuery[1024+1]; DWORD dwAID = 0; snprintf(szQuery, sizeof(szQuery), "SELECT id FROM player_index%s WHERE pid1=%u OR pid2=%u OR pid3=%u OR pid4=%u OR pid5=%u OR pid6=%u OR pid7=%u OR pid8=%u AND empire=%u", get_table_postfix(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetPlayerID(), GetEmpire()); SQLMsg* pMsg = DBManager::instance().DirectQuery(szQuery); Maintenant, rendez-vous dans db/src/clientmanager.cpp Cherchez : void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p) { char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID); delete CDBManager::instance().DirectQuery(szQuery); sys_log(0, "EmpireSelect: %s", szQuery); { snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4 FROM player_index%s WHERE id=%u", GetTablePostfix(), p->dwAccountID); std::auto_ptr pmsg(CDBManager::instance().DirectQuery(szQuery)); SQLResult * pRes = pmsg->Get(); Remplacez par : void CClientManager::QUERY_EMPIRE_SELECT(CPeer * pkPeer, DWORD dwHandle, TEmpireSelectPacket * p) { char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID); delete CDBManager::instance().DirectQuery(szQuery); sys_log(0, "EmpireSelect: %s", szQuery); { snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8 FROM player_index%s WHERE id=%u", GetTablePostfix(), p->dwAccountID); std::auto_ptr pmsg(CDBManager::instance().DirectQuery(szQuery)); SQLResult * pRes = pmsg->Get(); Cherchez : void CClientManager::ChangeMonarchLord(CPeer * peer, DWORD dwHandle, TPacketChangeMonarchLord* info) { char szQuery[1024]; snprintf(szQuery, sizeof(szQuery), "SELECT a.name, NOW() FROM player%s AS a, player_index%s AS b WHERE (a.account_id=b.id AND a.id=%u AND b.empire=%u) AND " "(b.pid1=%u OR b.pid2=%u OR b.pid3=%u OR b.pid4=%u)", GetTablePostfix(), GetTablePostfix(), info->dwPID, info->bEmpire, info->dwPID, info->dwPID, info->dwPID, info->dwPID); SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER); Remplacez par : void CClientManager::ChangeMonarchLord(CPeer * peer, DWORD dwHandle, TPacketChangeMonarchLord* info) { char szQuery[1024]; snprintf(szQuery, sizeof(szQuery), "SELECT a.name, NOW() FROM player%s AS a, player_index%s AS b WHERE (a.account_id=b.id AND a.id=%u AND b.empire=%u) AND " "(b.pid1=%u OR b.pid2=%u OR b.pid3=%u OR b.pid4=%u OR b.pid5=%u OR b.pid6=%u OR b.pid7=%u OR b.pid8=%u)", GetTablePostfix(), GetTablePostfix(), info->dwPID, info->bEmpire, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID, info->dwPID); SQLMsg * pMsg = CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER); Rendez-vous ensuite dans db/src/clientmanagerlogin.cpp Cherchez : void CClientManager::QUERY_LOGIN_BY_KEY(CPeer * pkPeer, DWORD dwHandle, TPacketGDLoginByKey * p) Ensuite, trouvez les lignes : sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip); char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info); Remplacez par : sys_log(0, "LOGIN_BY_KEY success %s %lu %s", r.login, p->dwLoginKey, info->ip); char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), r.id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info); Cherchez ensuite : void CClientManager::RESULT_LOGIN_BY_KEY(CPeer * peer, SQLMsg * msg) Trouvez les lignes : if (msg->Get()->uiNumRows == 0) { DWORD account_id = info->pAccountTable->id; char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id); std::auto_ptr pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER)); Et remplacez par : if (msg->Get()->uiNumRows == 0) { DWORD account_id = info->pAccountTable->id; char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), account_id); std::auto_ptr pMsg(CDBManager::instance().DirectQuery(szQuery, SQL_PLAYER)); Maintenant, cherchez : void CClientManager::RESULT_PLAYER_INDEX_CREATE(CPeer * pkPeer, SQLMsg * msg) Trouvez les lignes : char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), info->pAccountTable->id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info); Remplacez par : char szQuery[QUERY_MAX_LEN]; snprintf(szQuery, sizeof(szQuery), "SELECT pid1, pid2, pid3, pid4, pid5, pid6, pid7, pid8, empire FROM player_index%s WHERE id=%u", GetTablePostfix(), info->pAccountTable->id); CDBManager::instance().ReturnQuery(szQuery, QID_LOGIN_BY_KEY, pkPeer->GetHandle(), info); /!\ Client /!\ Rendez-vous dans Client/UserInterface/Packet.h Cherchez : PLAYER_PER_ACCOUNT3 = 3, PLAYER_PER_ACCOUNT4 = 4, Remplacez par : PLAYER_PER_ACCOUNT3 = 7, PLAYER_PER_ACCOUNT4 = 8, Rendez-vous maintenant dans Pack/root/introselect.py Cherchez : SLOT_COUNT = 4 Remplacez par : SLOT_COUNT = 8 Cherchez : SLOT_ROTATION = [135.0, 225.0, 315.0, 45.0] Remplacez par : SLOT_ROTATION = [135.0, 180.0, 225.0, 270.0, 315.0, 360.0, 45.0, 90.0] Cherchez : chr.DeleteInstance(0) chr.DeleteInstance(1) chr.DeleteInstance(2) chr.DeleteInstance(3) Remplacez par : chr.DeleteInstance(0) chr.DeleteInstance(1) chr.DeleteInstance(2) chr.DeleteInstance(3) chr.DeleteInstance(4) chr.DeleteInstance(5) chr.DeleteInstance(6) chr.DeleteInstance(7) Cherchez : indexArray = (3, 2, 1, 0) Remplacez par : indexArray = (8, 7, 6, 5, 4, 3, 2, 1, 0) Cherchez : def OnKeyDown(self, key): if 1 == key: self.ExitSelect() if 2 == key: self.SelectSlot(0) if 3 == key: self.SelectSlot(1) if 4 == key: self.SelectSlot(2) if 5 == key: self.SelectSlot(3) Remplacez par : def OnKeyDown(self, key): if 1 == key: self.ExitSelect() if 2 == key: self.SelectSlot(0) if 3 == key: self.SelectSlot(1) if 4 == key: self.SelectSlot(2) if 5 == key: self.SelectSlot(3) if 6 == key: self.SelectSlot(4) if 7 == key: self.SelectSlot(5) if 8 == key: self.SelectSlot(6) if 9 == key: self.SelectSlot(7) /!\ MySQL /!\ Rendez-vous dans Player/Player_index Modifiez : `id` int(11) NOT NULL DEFAULT '0', `pid1` int(11) NOT NULL DEFAULT '0', `pid2` int(11) NOT NULL DEFAULT '0', `pid3` int(11) NOT NULL DEFAULT '0', `pid4` int(11) NOT NULL DEFAULT '0', `empire` tinyint(4) NOT NULL DEFAULT '0', Par : `id` int(11) NOT NULL DEFAULT '0', `pid1` int(11) NOT NULL DEFAULT '0', `pid2` int(11) NOT NULL DEFAULT '0', `pid3` int(11) NOT NULL DEFAULT '0', `pid4` int(11) NOT NULL DEFAULT '0', `pid5` int(11) NOT NULL DEFAULT '0', `pid6` int(11) NOT NULL DEFAULT '0', `pid7` int(11) NOT NULL DEFAULT '0', `pid8` int(11) NOT NULL DEFAULT '0', `empire` tinyint(4) NOT NULL DEFAULT '0', Voilà, vous venez d'ajouter des emplacements supplémentaire sur vos comptes. Aperçu ? Le screen du système comporte les 8 emplacements. Je vous conseil de mettre 6 emplacements pour éviter une "surcharge" des personnages. Bien entendu, si quelqu'un souhaite modifier/corriger les codes, je suis d'accord car je ne suis pas trop calé niveau sources. Source : Turkmmo
  5. Bonjours, Je vous partage une partie d'un système pvp que j'utilise : Coté navicat : Player.player <== editer cette table en cliquand dessus avec le bouton droit et cliquer sur design table ou editer table Puis ajouter comme ici : Maintenant , niveau winscp/filezilla: Aller dans le dossier quest (metin2/share/locale/france/quest) puis crée un fichier pvpadd.quest et remplissez comme sa : quest killadd begin state start begin when kill with npc.is_pc() begin mysql_query("UPDATE player.player SET kills = kills+1 WHERE account_id ='"..pc.get_account_id()"';") end end end enregistrer la quête et maintenant allez éditer le local_list puis ajouter a la fin pvpadd.quest en ajoutant une entrée après votre deniere quête. Ensuite , allez sur putty/virtual box et faite un remake des quest : sh quest.sh ensuite allez ig et reload q Et voila votre système pvp coté server est fait ! Desolé pour les fautes d'orthographe!
  6. Niveau requis : Intermédiaire Temps estimé : 10 minutes Ré-écrit par @Gurgarath Bonjour, Grâce à ce tutoriel, vous pourrez, voir les PV et les PM de votre adversaire lors d'un duel. En contrepartie, il pourra voir les vôtres ! Plus de tricherie possible lors d'un duel grâce à ça Pré-Requis : L'accès au fichier root dépacké Un accès aux files serveur (quêtes) I. Installation (Partie client) II. Installation (Partie serveur -> quêtes) III. Potentielles remarques Source : ElitePvPers Cordialement,
  7. Bonjour, Ce tutoriel-partage va vous aidez à fix le bug de pouvoir switch les bonus d'un équipement déjà équiper et du coup fix l'accumulation des bonus. Rendez vous dans dans le fichier char_item.cpp Cherchez : if (ITEM_COSTUME == item2->GetType()) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("ĽÓĽşŔ» şŻ°ćÇŇ Ľö ľř´Â ľĆŔĚĹŰŔÔ´Ď´Ů.")); return false; } if (item2->IsExchanging()) return false; Ajoutez en dessous : if (item2->IsEquipped()) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("no.switch")); return false; } /!\ Attention à bien mettre les tabulations /!\ Dans le même fichier cherchez : case 71052 : // ÁøÀç°æ { // À¯·´, ½Ì°¡Æú, º£Æ®³² ÁøÀç°¡ »ç¿ë±ÝÁö //if (LC_IsEurope() || LC_IsSingapore() || LC_IsVietnam()) //return false; LPITEM item2; if (!IsValidItemPosition(DestCell) || !(item2 = GetItem(DestCell))) return false; if (item2->IsExchanging() == true) return false; if (item2->GetAttributeSetIndex() == -1) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼Ó¼ºÀ» º¯°æÇÒ ¼ö ¾ø´Â ¾ÆÀÌÅÛÀÔ´Ï´Ù.")); return false; } if (item2->ChangeRareAttribute() == true) { char buf[21]; snprintf(buf, sizeof(buf), "%u", item2->GetID()); LogManager::instance().ItemLog(this, item, "CHANGE_RARE_ATTR", buf); item->SetCount(item->GetCount() - 1); } else { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("º¯°æ ½Ãų ¼Ó¼ºÀÌ ¾ø½À´Ï´Ù")); } } Entre "if (item2->GetAttributeSetIndex() == -1)" et "if (item2->ChangeRareAttribute() == true)" Ajoutez ceci : if (item2->IsEquipped()) { ChatPacket(CHAT_TYPE_INFO, LC_TEXT("no.switch")); return false; } /!\ Attention à bien mettre les tabulations /!\ Partie source c'est fini ! Ensuite rendez vous ici => /usr/metin2/share/locale/france/locale_string.txt/ Et ajoutez à la fin du fichier : "no.switch"; "Vous ne pouvez pas switch les bonus d'un équipement équiper"; /!\ Attention à bien laisser une ligne vide à la fin du fichier /!\ Source : Just4Metin et moi
  8. Ouvrir Userinterface/instancebase.cpp : if (12010 <= vnum && vnum <= 12049) Ajouté : if (vnum >= 20760 && vnum <= 20959) { __AttachEffect(EFFECT_REFINED+YENI_YILDIRIM_EFEKTI _BLACK); } Ouvrir instancebase.h : EFFECT_BODYARMOR_SPECIAL2, Ajouté : YENI_YILDIRIM_EFEKTI_BLACK, Ouvrir root / playersettingsmodule.py : chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+20, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-4-2-2.mse") Ajouté : chrmgr.RegisterEffect(chrmgr.EFFECT_REFINED+22, "Bip01", "D:/ymir work/pc/common/effect/armor/armor-5-1.mse") Lien téléchargement : TELECHARGEMENT Ajouter à l' index : *black_new_armor_effects * Source : Turkmmo
  9. Salut tout le monde La quête d'aujourd'hui sert à : -Bloquer l'expérience -Débloquer l'expérience -Vider l'expérience Bloquer l'exp sert à quoi ? Simplement à ne pas gagner d'exp pour pouvoir drop Voilà la quête : quest gestion_exp begin state start begin when 20041.chat."Mon experience ..." begin say_title("Mon experience ...") say("") local z=select("Bloquer mon experience","Débloquer mon experience","Vider mon experience","Fermer") if z==4 then return end if z==1 then say_title("Bloquer mon experience :") if pc.getqf("lock_exp") == 1 then say_reward("Votre experience est déjà bloqué.") else say("Salut ! Si tu veux, je peux bloquer") say("ton experience, pour pouvoir dropper") say("tranquillement.") say("") local lock=select("Bloquer","Ne pas bloquer") say_title("Bloquer mon experience :") if lock==2 then say("Reviens plus tard si tu change d'avis.") end if lock==1 then say("Voilà, votre experience est bloquée !") wait() pc.setqf("lock_exp", 1) pc.setqf("exp_lock", pc.get_exp()) end end end if z==2 then say_title("Débloquer mon experience :") if pc.getqf("lock_exp") == 0 then say_reward("Votre experience n'est pas bloqué.") else say("Alors, tu veux que je débloque") say("ton experience ?") say("") local unlock=select("Oui","Non") if unlock==2 then return end if unlock==1 then say("Voilà, votre experience est débloquée.") wait() pc.setqf("lock_exp", 0) pc.setqf("exp_lock", 0) end end if z==3 then say_title("Vider mon experience :") say("") say("Est tu sûr de vouloir vider ton experience ?") say("Il n'y aura aucun retour possible !") local vider=select("Vider","Fermer") if vider==2 then return end if vider==1 then pc.give_exp2(-pc.get_exp()) end end end when kill begin if pc.getqf("lock_exp") == 1 then if pc.get_exp() > pc.getqf("exp_lock") then pc.give_exp2(-pc.get_exp()) pc.give_exp2(pc.getqf("exp_lock")) else pc.setqf("exp_lock", 0) end end end end end end Note : La quête est sur le passant ivre mais vous pouvez modifier Si vous ne savez pas implanter une quête, suivez ce tutoriel : ici Vous pouvez la partager sur d'autres forums en mettant la source!
  10. Bonjour à tous ! Je vous partage donc ce petit dump que j'ai compilé par mes soins ! Il peut donc prendre les querys suivants en compte : Querys du système d'étoles : Querys du Lycan (avec ajout du bonus saignement) : Lien de téléchargement : Cliquez ici Que cela puisse vous servir ! Source : Mei, --- Download
  11. ATTENTION Trojan détécté par Microsoft Security sur Windows 10 ! Bonjour, En effectuant des traveaux d'organisation et d'optimisations sur les sources metin2, je suis tombé sur ce travail déjà tout fait en ce qui concerne le lanceur du client. Reboot, l'auteur de ce travail admiratif m'a autorisé de vous le partager et en voici la preuve: Explications: Binary => Endroit où sont placé les exe après la compilation extern => Vous vous en rendrez compte seulement... source => Contient les sources (.cpp et .h) vs_files => Nécessaires à Visual Studio client.sln => Projet Visual Studio (pour compiler) Version Python: 2.2 ENABLE_COSTUME_SYSTEM ENABLE_ENERGY_SYSTEM ENABLE_DRAGON_SOUL_SYSTEM ENABLE_BELT_SYSTEM Cryptopp 5.6.2 boost 1.55 *Normalement, aucune erreur à la génération de la solution. Version de Visual Studio: 2012 ou 2013 Lien (original): sur Zippyshare Source: Metin2Dev Cordialement, Ioio --- Download
  12. Bonjour, aujourd'hui je vous partage une API dont j'en suis l'auteur. Cette API sert pour tout ce qui est sur le client de jeu Dofus 1.29, c'est-à-dire : Les news RSS Inscription via le client de jeu Affichage du captcha qui peut-être regénéré Affichage des réponses de "Comment avez-vous connu Dofus ?" Les cadeaux (les Dofus sur la connexion sont des cadeaux d'abonnement à la base) Le statut des serveurs L'API gère aussi les différentes communautés du jeu, j'entends par la la gestion des langues (FR, EN, DE, ES, IT, PT, NL) qui sont présentes dans le client. Les news RSS Inscription via le client de jeu Les cadeaux Le statut des serveurs Pour utiliser cette API il vous faut avoir composer, composer est un gestionnaire de dépendances qui vous servira pour importer les bibliothèques nécessaire au fonctionnement de l'API. Il vous aussi posséder une base de données MySQL ou MariaBD, ces deux systèmes de base de données sont "identiques". Il vous faut activer la ré-écriture d'url sur votre serveur web. Une documentation est disponible sur le dépôt de l'API. L'API ainsi que les sources sont disponibles sur le dépôt github.com. --- Download
  13. Salut, Voici un Tuto pour changer les News ( Voir Pièce Jointe ).Dans un Premiers Temps, Télécharger ceci : News RSSEnsuite,Ouvrez le Dossier News RssOuvrez Ensuite Le Dossier RSSEnsuite Ouvrez config.phpFaites comme ceci : <?php define("DB_HOST","IP DE LA DB (PAR DÉFAUT 127.0.0.1)"); define("DB_LOGIN","root"); define("DB_PASS","MOT DE PASSE SI VOUS EN AVEZ UN"); define("DB_BDD","news");?> Enregistrez Puis fermezMaintenant Ouvrez RSS.PHPEt Remplissez Comme Ceci : <?php echo '<?xml version="1.0" encoding="utf-8"?>' ?>NOM DE VORE SERVEURURL DE VORE SERVEUR DESCRIPTION DE VORE SERVEUR<?php require "config.php"; mysql_connect(DB_HOST,DB_LOGIN,DB_PASS); mysql_select_db(DB_BDD); mysql_query("SET NAMES UTF8"); $sql="SELECT * FROM rss ORDER BY id DESC LIMIT 0, 6"; $req = mysql_query($sql) or die('Erreur SQL ! '.$sql.' '.mysql_error()); while($data=mysql_fetch_assoc($req)){ echo "\n"; echo "{$data["id"]}"; echo "{$data["title"]}\n"; echo "URL DE VORE SERVEUR\n"; echo "{$data["icon"]}\n"; echo "".date("D, d M Y H:i:s",strtotime($data["date"]))." +0200\n"; echo "\n"; }?> Enregistrez Puis FermezCopiez Rss.php et config.phpCollez-les dans votre dossier lang !- Ensuite, Ouvrez Sothink SWF QuickerAllez dans votre Dossier SWF et choisissez lang_fr_786Faites CTRL+F et dans la recherche tappez RSS_LINKVous devriez avoir une ligne ressemblant à ceci : Donc Replacez Comme Cela : Ensuite, Faites Export Et Fermer votre Sohtink SWF QuickerMaintenant, Retournez dans votre dossier de News RSS et ouvrez cette fois-ci le dossier News RSS ScriptOuvrez config.phpPuis Remplissez :<?php define("DB_HOST","IP DE LA DB (PAR DÉFAUT 127.0.0.1)"); define("DB_LOGIN","root"); define("DB_PASS","MOT DE PASSE SI VOUS EN AVEZ UN"); define("DB_BDD","news");?> Enregistrez Puis FermezEnsuite Copiez le dossier News RSS Script et collez-le dans votre dossier “www” De WampMaintenant Lancez Navicat, Créez une New Database Que vous appellerez "news"Une fois fait, executez le fichier sql "rss.sql" Qui se trouve dans le Dossier "RSS"Ajouter Une News :Ouvrez Navicat puis Double-clique sur NewsOuvrez la Table rsset Remplissez Comme ceci : Voici la liste des Icons : à écrire dans la colone Icon => Icon afficher Tuto By Icer Un Petit Merci ferai plaisir.
  14. Salut. Ce bouton, vous a jamais soûlé car il marche pas ? : Moi si. Je partage donc vite fait le debug que je fais je ne sais quand. Dans votre intrologin.py: Dans : class LoginWindow(ui.ScriptWindow): Trouvez : def __init__(self, stream): Ajoutez dans la fonction : self.HakConnexionStop = False Allez dans la fonction Close qui se trouve un petit peu plus bas et ajoutez : self.HakConnexionStop = None Cherchez ensuite : def OnConnectFailure(self): Vous aurez dans la fonction : if self.isNowCountDown: return Ajoutez en dessous : if self.HakConnexionStop: self.HakConnexionStop = False return Cherchez : def Connect(self, id, pwd): Vous trouverez : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, localeInfo.UI_CANCEL) Changez cette ligne en : self.stream.popupWindow.Open(localeInfo.LOGIN_CONNETING, self.HakOnConnexionSTOP, localeInfo.UI_CANCEL) Après la fonction, ajoutez : def HakOnConnexionSTOP(self): self.HakConnexionStop = True self.stream.popupWindow.Close() Vous n'avez plus qu'à repack et le bouton marchera. Quand on clique sur le bouton, je n'efface pas les inputs comme pouvait le faire l'erreur de connexion etc. Si c'est nécessaire je peux vous dire comment faire. Code original = Frozen, forum étrangé.
  15. Salut à tous voici le Système officiel d’extension d'inventaire [Hidden Content]
  16. Salut a tous, voici le Système d'information groupe [Hidden Content]
  17. Salut à tous, voici le Système de recherche de groupe officiel [Hidden Content]
  18. Salut à tous, voici le système de blocage officiel toujours de blackDragonx61 [Hidden Content]
  19. SharkEmu est un émulateur codé en C# par Bouh2. Il à été repris par la Sharkteam, mais est actuellement stoppé. Il utilise peux de ram (moins de 900mo). Un tutoriel complet est inclu, ainsi qu'un CMS. Télécharger SharkEmu v0.8.2.2.rar et Database RC3.rar. Téléchargement : ICI 2 - Avancement : POST ORIGINALE Bonjour à tous, Aujourd'hui je vous présente mon projet longuement développé et qui est déjà publique. SharkEmu développé en C# est un émulateur Dofus stable et déjà très complet. Je le développe depuis maintenant 6 mois à peu près et il avance pourtant assez vite. SharkEmu a le privilège d'être entièrement Opensource sous license GNU. Cela signifie que les sources sont disponibles et publiques pour tout le monde et que c'est totalement gratuit ! SharkEmu est axé sur la personnalisation et la simplicité. Cela signifie que l'emulateur est prêt en main et permet en 10 minutes de créer son serveur, mais aussi que il est prévu pour être entièrement modifiable et modeler le serveur à votre guise. Ce qui permet de créer un gameplay tout à fait inédit et d'ajouter du contenu complétement personnaliser. L'avancé de SharkEmu (5.02.10) A l'heure où j'écris ces lignes, l'émulateur est en version 0.6.3.0 car je n'est peut être pas modifier ce post. Voici les fonctions majeurs disponibles : -Gestion de connexion -Gestion des comptes/ et joueurs -Gestion du monde et des maps -Gestion de transfert des données entre joueurs (affichage, déplacement, chat ...) -Gestion des inventaires -Gestion des items -Gestion des 90% effets des items -Gestion des drops d'items -Gestion des combats inter-joueurs (PvP) -Gestion des abandons -Gestion des sorts principaux (voir liste ci-dessous) -Gestion des buffs -Gestion des scores de fin de combat (Kamas & Experience) -Gestion des niveaux -Gestion de l'expérience -Gestion des statistiques -Gestion de commandes (voir ci-dessous) -Gestion des Pnjs -Gestion des Pnj-vendeur -Gestion d'achat/vente d'objet -Gestion d'actions Pnj Spéciales (téléportation, dons de kamas...) Effet sorts implantés (Tiré des SpellActions -> Game/SpellAction.cs) : InflictDamage RestoreHealth StolenLife Push ChangeCase Buff Les fonctions majeurs qui seront implantés : -Créatures & Intelligence artificiel -Quêtes -Métiers La base de donnée est elle aussi bien remplie (merci à Ancestra) -Maps : 4000 -Items : 100% -Monstres : 1200 -Pnj : 600 -Spell : 100% L'emulateur comprend quelques commandes de base, il se va de soit que l'on peut en ajouter à sa guise info Information sur l'état du serveur pos Position actuelle du personnage go Se téléporte sur la map et case choisi gopos Se téléporte selon les coordonnés choisis avec option de map intérieur ou non help Affiche l'aide d'une commande command Affiche la liste des commandes world Envois un message à tout le monde start Vous téléporte au point de départ goname Vous téléporte sur le joueur namego Téléporte le joueur à vous save Sauvegarde les informations du personnages saveworld Sauvegarde chaque joueur shutdown Arrête le serveur après le temps donné; "shutdown stop" pour annuler morph Change le skin du joueur additem Ajoute un objet à la cible; cible : %target%, %me% ou le nom d'un joueur fillmap Rempli une map avec un item target Active le mode target settarget Défini la cible; cible : %target%, %me% ou le nom d'un joueur Dofus 2.0 Le noyau de l'emulateur sera repris pour faire une version approprié pour Dofus 2.0. Cette version ne verra pas le jour avant la release 1.0 Anecdote La première fois que j'ai entendu d'émulateur c'était sur britania 3 avec DofusEmu de Elxior dont j'ai participer à la bêta. J'ai commencer à programmer en C# cela fait tout juste 1 an. J'ai développé sur le cheat WoW, créer 2 programmes tiers pour le même jeu et beaucoup contribuer au cheat wow français (notamment en developpement de cheat). Avant les vacances d'été 2009, on m'a proposé de reprendre les sources d'Elxior en Team et de faire un premier émulateur dofus. Mi Juillet / Aout j'ai commencer SharkEmu, car je voyais que le projet n'avancer pas et que les sources était irrécupérable, tout d'abords en Team de 4 (je peux citer Air5 et Antique) puis fin été j'ai continuer le développement seul. Je décide alors de faire un émulateur Opensource. Projet : ICI Je cherche des codeurs qui serais prêt à m'aider pour commenter le code et le documenter ainsi que coder d'autres commandes et sorts. De plus chaque bug reporté contribue au développement de SharkEmu et m'aide énormément alors n'hésitez pas. Pensez à faire un don car c'est ma seule source de contribution de cet énorme projet. J'espère que vous soutiendrez mon projet. Merci de votre lecture, et merci d'utiliser SharkEmu. --- Download
  20. Bonjour, Aujourd'hui je vous propose les files 2016 de la Team-FE, aussi, repris par Saw, que j'ai modifié de mon côté. Changelog V3.0 (Team-FE) : -Système d'étole (Avec les 4 types d'étoles) -Système de costume d'armes -Système de costume de monture -Système de liaison d'âme -Système des 7è & 8è compétences -Système du pet officiel (Meley, petit singe, Bébé némère, Bébé razador, petite araignée) -Pierres anti-magie disponibles jusque +4 -Interface de création et de sélection de personnages officielle -4 inventaires disponibles -Ajout de nombreux mobs et items (Utilisation des item_proto et mob_proto officiels avec quelques modifications) -Level 255 débloqué mais fixé à 115 dans les CONFIG -Système des targets de couleur -Ajout de nombreux costumes et coiffures -Possibilité d'acheter des items à 0 yangs -Ajout de l'effet officiel quand on drop un item. -Ajout des armures 115. -Certaines interfaces ont été traduites. -FIX du lame enchanté -Mise en place de sécurité afin d'éviter certaines injections SQL -Les games et DB sont optimisés et ont la possibilité d'être stripper pour obtenir des poids de 5.000 Ko et 7.180Ko Liste des modifications apportées sur les files (Saw) : Serveur : drop des yang's sur les moobs réglé Réglage des fichiers CONFIG Amélioration du start.sh Ajout des cshybridcrypt dans packages Correction des data find count etc.... (0 syserr à l'ouverture) Débug de la give_basic_weapon + rangement du locale_list dans l'ordre A-Z Installation MySQL_query Client : Suppression de fichiers inutiles Optimisation des lib's (beaucoup moins lourdes) On obtient un client de 1go5 au lieu de 2go6 Débug des effets d'étoles Possibilité d'appuyer sur "ENTRER" pour choisir son personnage Fix de la texture du Theowahdan Ajout de la texture du Azräel qui était invisible Ajout de la liste des GM dans la liste d'amis Fix de la texture du Seon-Pyeong Réorganisation des Inventaires Débug effets/sons des 6èmes skill's Source serveur : achats d'item à 0 yang les monstres ne contenant pas de race le sysser DB de la monarch election l'erreur de la table des pet's lors de l'ouverture du serveur la suppression des personnages. Réglage de quelques warning de compilations. (Makefile dans l'ordre A-Z) Réglage du chat global et activations sur tous les channels. Réglage du shutdown: tics did not updated (checkpoint). Fix injection sql Fix ban depuis le messenger Fix ouverture db (merci à @Darknessmt2) Fix création de guilde/injection guilde Fix d'accumulation de bonus Fix core dungeon Activation fonction "pc.change_name" fix motion pet (sysser) fix header 100 (syserr) activation 6/7 fix accumulation des bonus des pets via l'échange. Fix du Bug Aura. Fix event kill qui est déclenché deux fois (merci à @A n t 0 k) Fix d'un problème qui empêcher de changer d'item lorsque l'inventaire est plains Fix du BeltInventory Fix bug PV négative lors d'un tp/connexion Source client : Amélioration de la structure des fichiers (plus besoin de spécifié les includes/libs dans les paramètres/beaucoup plus compréhensible) Accélération du défilement des quêtes (0 secondes) Modification des "[Niv. %d" en "Lv %d" Suppression italique sur MP avec un staffien. Passage en Python 2.7 Et maintenant, ce que j'apporte de mon côté aux files : Files : Armures / Armes Kyanites et Zodiaque Biologiste universelle Multi-sélection de shop (à remplir) Bonus 6 et 7 dans l'item-proto Client : Correctif du temps restant dans les magasins Effet Berserk Prix à 0 yangs = Gratuit 999.999.999 yangs échangeables. Lisibilité du nombre de yang en échange (Séparation par ".") Ne plus avoir à consulter 2 fois le même magasin (Blanc = non ouvert / Vert = Ouvert) Détruire un Item (Inventaire) Armures / Armes Kyanites et Zodiaque Afficher le niveau des équipements dans l'inventaire (+0 à +9) Mode graphique HD Source client : Informations sur les entités Anti MobPuller // Waithack Changer la couleur des drops selon le propriétaire (rouge quand l'item ne nous revient pas) Remettre le niveau en temps réel. Détruire un Item (Inventaire) Afficher le niveau des équipements dans l'inventaire (+0 à +9) Mode graphique HD Stop collision Source serveur : Chance de lier les pierres sur les armes ou armures de 30% Chance d'insérer un diamant de 50% bonus 6-7 sur les costumes désactiver Enlevez les potions à chaque up level Cape de bravoure (100% de réussite) Les compétences passent à M1 directement dès 17 points Informations sur les entités Empêcher le buff entre joueur/staffien Remettre le niveau en temps réel Détruire un Item (Inventaire) Protection contre le kick et le Sync Hack Log MP surveillance (MySQL) Log d'échange surveillance (MYSQL) Drop de groupe en instance Bloquer n'importe quel objet, sur n'importe quelle Map sans reboot ! Anti Wall Hack Montrer un item dans le chat sans loupe magique Crash lorsqu'un objet est acheté en même temps en magasin J'espère que ce sera utile pour certains, je vous mets de suite les liens de téléchargement. Quelques images Client : Cliquez ici pour télécharger Files : Cliquez ici pour télécharger MySQL : Cliquez ici pour télécharger Source serveur : Cliquez ici pour télécharger Source client : Cliquez ici pour télécharger VDI (Utilisateur : root / Mot de passe : admin) : Cliquez ici pour télécharger Mise à jour le 04.08.2018 à 13h Cordialement, Saejin --- Download
  21. Bonjour, Bon voilà une petite liste de QUERIES qui va vous permettre d'augmenter de 50% la taille des terres de guildes ou même de les implanter si ce n'est pas déjà fait. INSERT INTO `land` VALUES ('347', '4', '85000', '14500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('348', '4', '9000', '20500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('349', '4', '15000', '17000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('350', '4', '14000', '20500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('351', '4', '26500', '20500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('352', '4', '23000', '24000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('353', '4', '30500', '25500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('354', '4', '28000', '27000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('355', '4', '35000', '36500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('356', '4', '33000', '40500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('357', '4', '39000', '41000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('358', '4', '36000', '43000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('359', '4', '8000', '31000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('360', '4', '8000', '36000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('361', '4', '9500', '40500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('362', '4', '13500', '43000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('363', '4', '19000', '42000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('364', '4', '23500', '40000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('365', '24', '6500', '6500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('366', '24', '12000', '6000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('367', '24', '8500', '11500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('368', '24', '13500', '14500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('369', '24', '10500', '27500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('370', '24', '9000', '31500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('371', '24', '5500', '36000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('372', '24', '9500', '37000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('373', '24', '13500', '35000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('374', '24', '21000', '34500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('375', '24', '25500', '34500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('376', '24', '21000', '37500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('377', '24', '25500', '37500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('378', '24', '31500', '34500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('379', '24', '33000', '40000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('380', '24', '36000', '35500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('381', '24', '37500', '31000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('382', '24', '35500', '27500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('383', '44', '43500', '4500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('384', '44', '9500', '8500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('385', '44', '5500', '9000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('386', '44', '5000', '12500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('387', '44', '5000', '16500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('388', '44', '8500', '19500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('389', '44', '21500', '17000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('390', '44', '32500', '38500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('391', '44', '4500', '37500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('392', '44', '8000', '38500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('393', '44', '12500', '39500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('394', '44', '17000', '38000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('395', '44', '17500', '34500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('396', '44', '29000', '30500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('397', '44', '38000', '27500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('398', '44', '35000', '41500', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('399', '44', '39500', '40000', '3000', '3000', '0', '11', '12000000', 'YES'); INSERT INTO `land` VALUES ('400', '44', '39000', '36000', '3000', '3000', '0', '11', '12000000', 'YES'); Exécuter simplement ça dans votre console Navicat. N.B : Je n'ai pas modifié les prix des terrains. Je vous laisse vous occuper de ceux-ci. Cordialement,
  22. Bonjour à toutes et à tous ! Voilà un nouveau tuto mais cette fois sur une board qui s'affiche en jeu en utilisant par exemple la touche "F6" de votre clavier puis vous verrez apparaître cette fameuse fenêtre vous tout ce que la personne ayant accès au FTP a à dire aux joueurs. La particularité ? ce n'est qu'un fichier texte à modifier sur le FTP et la modification se fait en jeu sans le moindre reboot du serveur ni la moindre ferme/réouverture du client, il suffit de fermer/ouvrir la board et c'est bon ! Je tiens à préciser que ce partage ne fonctionne pas avec le "Hack detector" . Let's go ! Commencez par dépack votre root ainsi que "etc" Téléchargez ça: [Hidden Content] Allez dans votre dépacker puis ouvrez votre game.py. Allez à la fin du fichier, pour ma part je l'ai collé entre la kill-gui et cette ligne: def __ProcessPreservedServerCommand(self): (je vous conseille de faire une recherche de cette ligne et de coller ce qui suit juste au dessus): collez ceci: def __newsboard(self): import epvpgui try: if constInfo.epvpgui != 1: exec 'epvpgui.EpvpGuiDialog().Show()' else: chat.AppendChat(chat.CHAT_TYPE_INFO, " Ist bereits offnen") except ImportError: import dbg,app dbg.Trace('epvpgui.py Importing error :(') app.Abort() Cherchez maintenant cette ligne: onPressKeyDict[app.DIK_F4] = lambda : self.__PressQuickSlot(7) Puis collez ceci en dessous: onPressKeyDict[app.DIK_F6] = lambda : self.__newsboard() Note: Remplacez "F6" par "F5" par exemple si vous souhaitez que le raccourcis pour ouvrir la board soit F5 et non F6 /!\Attention à ne pas prendre un raccourcis déjà existant, une liste d'autres raccourcis non utilisés est dispo en bas du topic/!\ Maintenant allez dans "constinfo.py" puis en dessous de la ligne "PVPMODE_PROTECTED_LEVEL = 30" ou tout dépend si vous avez déjà rajouté quelque chose ou non, ajoutez cette ligne: epvpgui = 0 Maintenant, mettez le fichier "epvpgui.py" avec les autres fichiers de votre root, chemin d'accès: Metin2 Repacker\depack Allez dans ymir work>>ui puis mettez y l'interface sous le nom "weirdwar.tga" Chemin d'accès: Metin2 Repacker\depack\ymir work\ui Allons maintenant sur le FTP ! Allez dans usr, puis www, placez-y ce fichier: [Hidden Content] Bien sûr, vous pouvez modifier le texte comme vous le souhaitez ! /!\Pour éviter un message d'erreur il y a en tout 9 lignes dispo, si vous voulez écrire par exemple 5 lignes écrivez ces 5 lignes puis sur les 4 dernières du fichier "tryhard.txt" mettez des espaces " "/!\ Il y a également une alternative à ce problème en bas du topic. Maintenant, votre serveur sait ce qu'il doit écrire dans la board, il ne reste plus qu'à dire à la board où trouver ce fichier ! Retournez dans votre root puis ouvrez le fichier "epvpgui.py" Vous verrez alors cette ligne: news_url = '[Hidden Content]' #Eure Url ihr dumpfbacken C'est donc l'endroit où la board télécharge le texte. Modifiez "[Hidden Content]" par l'endroit où est le fichier texte sur votre ftp, par exemple pour moi ça devient: news_url = '[Hidden Content]' #Eure Url ihr dumpfbacken Pour connaître le lien de votre serveur, cherchez le lien de téléchargement de votre client qui est normalement upload sur "www" puis remplacez la fin de l'adresse par "tryhard.txt" Exemple, le lien: [Hidden Content] Devient: [Hidden Content] Lorsque vous avez fait tout ça, vous pouvez repack votre root et etc. /!\N'oubliez pas d'ajouter les nouveau fichiers à votre root et a etc/!\ En cas de besoin voilà la ligne à placer dans etc_repack: depack\ymir work\ui\weirdwar.tga Puis dans root_repack: depack\epvpgui.py Allez en jeu, appuyez sur la touche que vous avez mis en raccourcis et admirez ! vous devriez avoir à peu près ceci: (je dois avouer que j'ai la flemme de remettre l'ancienne interface juste pour cette screen puisque j'utilise celle en haut de ce topic !) Maintenant, à vous de la modifier ! si vous avez besoin d'aide ou de conseille vous pouvez me demander (soit dit en passant, je suis vraiment nul en python, je ne peux pas faire de miracles !) Votre interface ne s'ouvre pas ? C'est simple, le problème est juste que vos lib ne sont pas à jour pour gérer cette GUI, voilà un lien de téléchargement: [Hidden Content] Placez les fichiers présent dans le dossier "lib" de ce que vous venez de télécharger vers le dossier "lib" dans votre client. Peut-être que vous ne verrez aucun fichier se rajouter parmi la liste déjà présente (c'est le cas pour moi) mais les changements ont bien été fait ! lancez à nouveau votre client et admirez ! Note: J'ai cru remarquer que si on ne remplissait pas toutes les cases de la board, un message d'erreur s'affiche à chaque ouverture de cette board, vous conseille donc de modifier le texte de l'erreur en quelque chose qui fait moins peur aux joueurs, allez dans le fichier "epvpgui.py" puis modifier les deux lignes qui se trouvent en dessous de " except IndexError:" Les raccourcis dispo Il y a beaucoup de touches non utilisées ! voilà les raccourcis non utilisés pour les client qui n'ont pas touché aux raccourcis: onPressKeyDict[app.DIK_P] = lambda : self.__newsboard() (Sur la touche P) onPressKeyDict[app.DIK_Y] = lambda : self.__newsboard() (Sur la touche Y) onPressKeyDict[app.DIK_U] = lambda : self.__newsboard() (Sur la touche U) onPressKeyDict[app.DIK_O] = lambda : self.__newsboard() (Sur la touche O) onPressKeyDict[app.DIK_K] = lambda : self.__newsboard() (plus besoin de préciser le touche, je penses que vous avez compris) onPressKeyDict[app.DIK_M] = lambda : self.__newsboard() onPressKeyDict[app.DIK_X] = lambda : self.__newsboard() Je peux encore continuer, il y en a d'autres mais je ne penses pas que ça serve à grand chose, il y a largement le choix. Pour remplacer le raccourcis, allez à la ligne: onPressKeyDict[app.DIK_F6] = lambda : self.__newsboard() Puis remplacez soit toute la ligne par la ligne de votre choix juste au dessus, soit vous remplacez "F6" par la lettre de votre choix /!\Ecrivez cette lettre en majuscule/!\ Fix de l'erreur dans le fichier .txt par .CrøKø 1.Allez dans le fichier game.py puis Modifiez ceci: def __newsboard(self): import epvpgui try: if constInfo.epvpgui != 1: exec 'epvpgui.EpvpGuiDialog().Show()' else: chat.AppendChat(chat.CHAT_TYPE_INFO, " Ist bereits offnen") except ImportError: import dbg,app dbg.Trace('epvpgui.py Importing error :(') app.Abort() Par ceci: def __newsboard(self): import epvpgui if constInfo.epvpgui != 1: exec 'epvpgui.EpvpGuiDialog().Show()' else: chat.AppendChat(chat.CHAT_TYPE_INFO, " est déjà ouvert" Allez ensuite dans le fichier epvpgui.py puis à la fin du fichier supprimez ces lignes: except IndexError: dbg.LogBox("ShuzZzles Error Blocking executed!!!!") chat.AppendChat(chat.CHAT_TYPE_INFO, ": (IndexError) List is out of range!") Ce qui devrait vous donner ceci: import ui import chat import app import player import snd import game import item import dbg import net import constInfo import urllib ######################################### # Author: ShuzZzle # # Idee: [sA]Horny # # Babo: .Analyze # # Hackfresse: .Panasonic # ######################################### class EpvpGuiDialog(ui.ScriptWindow): UI = [] Fields_slot = [] def __init__(self): ui.ScriptWindow.__init__(self) self.LoadUI() constInfo.epvpgui = 1 def __del__(self): ui.ScriptWindow.__del__(self) self.Board.Hide() constInfo.epvpgui = 0 def LoadUI(self): news_url = 'votre adresse' #Eure Url ihr dumpfbacken auslese = urllib.urlopen(news_url) btext = auslese.readlines() ###Haupt-Board### self.Board = ui.BoardWithTitleBar() self.Board.SetSize(700, 350) self.Board.SetCenterPosition() self.Board.AddFlag("movable") self.Board.AddFlag("float") self.Board.SetTitleName("Info Board :)") self.Board.SetCloseEvent(self.__del__) self.Board.Show() Button1 = ui.Button() Button1.SetParent(self.Board) Button1.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") Button1.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") Button1.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") Button1.SetText("Fermer!") Button1.SetEvent(self.__buttonfunc) Button1.SetPosition(350, 50) Button1.Show() self.UI.append(Button1) Bild = ui.AniImageBox() Bild.SetParent(self.Board) Bild.AppendImage("d:/ymir work/ui/Omega.tga") # Bild Pfad Bild.SetPosition(100, 200) Bild.Show() self.UI.append(Bild) Bild_war = ui.AniImageBox() Bild_war.SetParent(self.Board) Bild_war.AppendImage("d:/ymir work/ui/background test.jpg") # Pfad des Bildes Bild_war.SetPosition(5, 30) Bild_war.Show() self.UI.append(Bild_war) y = 40 for i in xrange(9): Slot1 = ui.SlotBar() Slot1.SetParent(self.Board) Slot1.SetSize(400, 25) Slot1.SetPosition(20, y) Slot1.Show() y += 25 self.Fields_slot.append(Slot1) try: y = 40 for i in xrange(9): Update1 = ui.TextLine() Update1.SetParent(self.Board) Update1.SetDefaultFontName() Update1.SetFontName("Arial:18") Update1.SetText(btext[i]) Update1.SetPosition(20, y) y += 25 Update1.SetFontColor(0.42, 0.54, 0.25) Update1.Show() self.UI.append(Update1) def __buttonfunc(self): self.Board.Hide() constInfo.epvpgui = 0 Pour les personnes n'y arrivant pas ou ayant la flemme de modifier manuellement le fichier epvpgui.py, vous pouvez avoir le fichier modifié par .CrøKø en cliquant ici. Enregistrez puis repackez votre root, vous ne devriez plus avoir de problème. Je n'ai pas testé cette solution. Merci à .CrøKø pour cette solution ! Pour les personnes voulant voir à quoi ça ressemble en jeu mais en vidéo, allez sur cette vidéo à 3m59: N'oublions pas ceci ! Voilà que ce tuto est fini ! j'espère que ça vous aura aidé, maintenant vous n'avez plus qu'à changer le texte dans le fichier "tryhard.txt" sur votre FTP, l'enregistrer puis le reupload et lorsque vous ouvrirait à nouveau votre board, le texte aura changé sans reboot ni même la fermeture de votre client ! Bon jeu à tous et bonne chance Sources: Board par ShuzZzle sur epvp. Lib par RealFreak sur epvp. Fix du message d'erreur par .CrøKø. Tuto entièrement par moi.
  23. Bonjour, voici mon tout premier tutoriel comment implanter un bâtiment. Depackez zone Mettre le bâtiment que vous voulez implanter (exemple: tu crée un nouveau dossier nommé bâtiment et vous mettez votre fichier batiment.gr2 à l'intérieur) Depackez property Ouvrez le fichier reserve Passez une ligne et ajoutez le code que vous voulez mettre à votre bâtiment (un code qui n'existe pas encore, exemple: 497528469) Créez un nouveau dossier nommé batiment dans property et un fichier nommé batiment.prb Et mettez ça à l'intérieur: YPRT 497528469 (code du batiment) buildingfile "d:/ymir work/zone/batiment/batiment.gr2" (emplacement du bâtiment) propertyname "batiment" (nom du fichier) propertytype "Building" (type) shadowflag "1" Repack tout. PS : YPRT fonctionne avec tous les clients non lourdement modifiés Bonne journée à vous =)
  24. Bonzoooooir ! Je viens aujourd'hui vous présentez un site que j'ai trouvé sur Metin2CMS -> Source. Je l'ai traduis moi même à 100% (Même si c'était pas très très compliqué à vrai dire... *sifflote*) . Il est semblable aux autres CMS basiques si ce n'est que je trouve le design vraiment joli ! Un aperçu : Option diverses : Le site est assez complet en soi, je n'ai pas tout testé. Il manque juste l'ItemShop. [Hidden Content] J'ai modif le logo par contre, mais j'ai le logo de base en PSD : [Hidden Content] Vérifiez quand même si il y'a des fautes niveau orthographes, j'ai parfois du mal.. Mdr --- Download
  25. Salut à tous, Ici Kaikina . Donc je suis là pour vous présenter mon tutoriel pour rediriger vos swf. Il n'est, certes, pas parfait, mais je vous invite à le critiquer afin que je puisse l'améliorer ; Exposez vos problèmes malgré ce tutoriel, afin que je puisse rajouter comment ne pas les avoir. Le voici: Pour commencer, si cela n'est déjà fait, télécharger vos swf. Lien pack Il faut que vous ayez wamp, téléchargez-le si ce n'est pas le cas. Installez-le et cliquez sur la petite icône en bas à gauche puis "Démarrer les services", et vous avez deux possibilité : - Il devient blanc, tout va bien et on peut continuer. Ou alors vert pour les nouvelles versions. - Il devient jaune, ou orange pour les nouvelles versions, il y a quatre solutions : Fermez Skype, ou soit si vous ne voulez pas, changez le port de Skype. Pour ce faire, Skype=>Outils=>avancé=>connexion=> décochez la case qui dit d'utiliser le port 80. Panneau de configuration --> Outils d'administration--> Services : cherchez Apache 2.2, clique droit dessus, "Arrêter". Cherchez ensuite MySQL, clique droit dessus, "Arrêter". Cherchez wampapache, clique droit dessus "Démarrer", puis cherchez wampmysqld, clique droit dessus "Démarrer". Si vous ne trouvez pas ce répertoire, allez dans votre panneau de configuration et cherchez un peu partout jusqu'à trouver "Services". Fermez le logiciel "Teamwiever". Allez au répertoire suivant: wamp/bin/apache/apache2.xxxx/conf/ et modifiez le fichier "http.conf". Faites ctrl+f et cherchez "80" une fois la recherche faite, remplacez le "80" du texte par "81" et relancez la recherche jusqu'à remplacer tous les "80" en "81". Relancez Wamp. Ensuite wamp devient blanc normalement ou vert. (Attention, si vous avez fait une base de données alors que wamp était jaune ou orange, votre base de données ne sera accessible que quand vos swf ne seront pas redirigés(wamp jaune ou orange), si c'est le cas, dumpez vos databases,puis quand wamp est blanc ou vert, exécutez les sauvegardes.) Avant de continuer le tutoriel assurez-vous bien que wamp est en ligne. Passez la souris par dessus l'icône. S'il est hors ligne, cliquez sur "Passer en ligne". Ensuite il faut placer vos fichiers SWF. Allez au dossier www par une des manières : Clic droit sur l'icône wamp en bas à droite, puis Répertoire www Démarrer=> Poste de travail=> C:\ => wamp=> www Maintenant que vous êtes dans le dossier "www", placez-y le dossier dofus fraîchement téléchargé.. Vous devez donc avoir le chemin suivant: Wamp\www\dofus\lang\swf\ Et là tous vos fichiers SWF Avec hébergement Web Allez dans votre serveur web (là où se trouve vos dossiers hebergés). Allez soit dans "www" ou "public_html" ça ne changera rien. Maintenant que vous êtes dans le dossier "www" ou "public_html", Mettez-y le dossier dofus que je vous ai fait télécharger _______________________________________________________________________________________ Ceci est une config correcte, c'est la config.xml de votre dossier Dofus (le jeu). <config> <delay value="500"/> <rdelay value="3000"/> <rcount value="10"/> <conf name="En ligne"> <dataserver url="[Hidden Content]" priority="4" /> <dataserver url="data/" type="local" priority="3" /> <dataserver url="[Hidden Content] us/" priority="1" /> <dataserver url="[Hidden Content]" priority="0" /> </conf> <conf name="En ligne (TEST)" type="test"> <dataserver url="data/" type="local" priority="3" /> <dataserver url="[Hidden Content] ustest/" priority="1" /> <dataserver url="[Hidden Content]" priority="0" /> </conf> <cacheasbitmap> <cache element="ExternalContainer/InteractionCell" value="false" /> <cache element="ExternalContainer/Ground" value="false" /> <cache element="ExternalContainer/Object1" value="false" /> <cache element="ExternalContainer/Object2" value="false" /> <cache element="ExternalContainer/Zone" value="false" /> <cache element="ExternalContainer/Select" value="false" /> <cache element="ExternalContainer/Grid" value="false" /> <cache element="ExternalContainer/Pointer" value="false" /> <cache element="GAPI/UI" value="false" /> <cache element="GAPI/UITop" value="false" /> <cache element="GAPI/Popup" value="false" /> <cache element="GAPI/UIUltimate" value="false" /> <cache element="GAPI/Cursor" value="false" /> <cache element="mapHandler/BACKGROUND" value="false" /> <cache element="mapHandler/Cell/Ground" value="false" /> <cache element="mapHandler/Cell/Object1" value="false" /> <cache element="mapHandler/Cell/Object2" value="false" /> <cache element="mapHandler/Cell/ObjectExternal" value="false" /> <cache element="Zone/Zone" value="true" /> <cache element="Zone/Pointers" value="true" /> </cacheasbitmap> </config> lien d'accès aux fichiers = Pour hamachi : adresse IP d'hamachi suivie de /dofus/ (Ex : [Hidden Content]) En local : adresse IP locale suivie de /dofus/ (Ex : [Hidden Content]) Avec un hébergement web : lien de votre site suivi de /dofus/ (Ex : [Hidden Content]) Maintenant, allez chercher votre fichier lang_fr_786.swf et ouvrez-le avec le logiciel "Sothink SWF Quicker". Allez dans l'onglet "Action" et cherchez ces lignes. C.SERVER_NAME = ["213.248.126.11"]; C.SERVER_PORT = [443, 5555]; Remplacez l'IP de C.SERVER_NAME par celle où est herbergé votre serveur : Pour hamachi : Votre IP hamachi (Ex : C.SERVER_NAME = ["5.125.54.542"] En local : Votre IP locale (Ex : C.SERVER_NAME = ["127.0.0.1"]; Sur un dédié : L'IP du dédié (Ex : C.SERVER_NAME = ["128.88.548.21"]; Remplacez les ports de C.SERVER_PORT par vos ports de jeu (GAME_PORT et REALM_PORT). Cliquez sur "Exporter", remplacez l'ancien fichier, et quittez sans sauvegarder. Maintenant essayez de vous connecter en jeu (avec le serveur ON bien sûr), si vous arrivez à vous connecter, votre serveur est bien redirigé. J'espère que ce tutoriel vous a aidé, si vous avez des questions n'hésitez pas, si ça ne marche toujours pas mp moi. Ce tutoriel provient de l'utilisateur "Kaikina". Le partage de ce tutoriel est possible en citant l'auteur.