-
Compteur de contenus
178 -
Inscription
-
Dernière visite
-
Jours gagnés
86
Type de contenu
Profils
Forums
Boutique
Calendrier
Tout ce qui a été posté par Veltor88
-
F Download Center Télécharger ( Dernière Version ) Bonjour, Partage d'un CMS en roumain et anglais Pas de PSD inclus pour le logo Preview Download
- 1 réponse
-
- 26
-
F Download Center Télécharger ( Interne ) ( Version X / Lien Externe ) Télécharger Bonjour, Partage d'un système pour mettre les quêtes dans des catégories comme l'officiel
-
Changer coiffure à la création du personnage
Veltor88 a posté un sujet dans Programmation & Développement / Codes
Centre de Téléchargement Télécharger ( Interne ) Dans root/introcreate.py Chercher : DESCRIPTION_FILE_NAME = ( uiScriptLocale.JOBDESC_WARRIOR_PATH, uiScriptLocale.JOBDESC_ASSASSIN_PATH, Ajouter ça avant : HAIR_DATA = ( [ 1, 2, 3, 4, 5, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, ], ## Warrior [ 1, 2, 3, 4, 5, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, ], ## Assassin [ 1, 2, 3, 4, 5, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, ], ## Sura [ 1, 2, 3, 4, 5, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, ], ## Shaman ) Chercher : ########################################################### if -1 != self.reservingRaceIndex: if app.GetTime() - self.reservingStartTime >= 1.5: chrSlot=self.stream.GetCharacterSlot() textName = self.editCharacterName.GetText() raceIndex = self.reservingRaceIndex shapeIndex = self.reservingShapeIndex startStat = self.START_STAT[self.reservingRaceIndex] statCon = self.stat[0] - startStat[0] statInt = self.stat[1] - startStat[1] statStr = self.stat[2] - startStat[2] statDex = self.stat[3] - startStat[3] net.SendCreateCharacterPacket(chrSlot, textName, raceIndex, shapeIndex, statCon, statInt, statStr, statDex) self.reservingRaceIndex = -1 ########################################################### Replacer par : ########################################################### if -1 != self.reservingRaceIndex: if app.GetTime() - self.reservingStartTime >= 1.5: chrSlot=self.stream.GetCharacterSlot() textName = self.editCharacterName.GetText() raceIndex = self.reservingRaceIndex shapeIndex = self.reservingShapeIndex hairIndex = self.HAIR_DATA[chr.RaceToJob(self.reservingRaceIndex)][self.hairIndex]#New hair startStat = self.START_STAT[self.reservingRaceIndex] statCon = self.stat[0] - startStat[0] statInt = self.stat[1] - startStat[1] statStr = self.stat[2] - startStat[2] statDex = self.stat[3] - startStat[3] net.SendCreateCharacterPacket(chrSlot, textName, raceIndex, shapeIndex, hairIndex, statCon, statInt, statStr, statDex) #New hair self.reservingRaceIndex = -1 ########################################################### Chercher : def OverOutStatButton(self): self.toolTip.Hide() Ajouter ça après : def IncreaseHair(self): chr_id = self.__GetSlotChrID(self.gender, self.slot) chr.SelectInstance(chr_id) if(self.hairIndex >= len(self.HAIR_DATA[chr.RaceToJob(chr.GetRace())]) - 1): return self.hairIndex += 1 chr.SetHair(self.HAIR_DATA[chr.RaceToJob(chr.GetRace())][self.hairIndex]) self.hairNumber.SetText(str(self.hairIndex)) chr.SetMotionMode(chr.MOTION_MODE_GENERAL) chr.SetLoopMotion(chr.MOTION_INTRO_WAIT) def DecreaseHair(self): chr_id = self.__GetSlotChrID(self.gender, self.slot) chr.SelectInstance(chr_id) if(self.hairIndex == 0): return self.hairIndex -= 1 self.hairNumber.SetText(str(self.hairIndex)) chr.SetHair(self.HAIR_DATA[chr.RaceToJob(chr.GetRace())][self.hairIndex]) chr.SetMotionMode(chr.MOTION_MODE_GENERAL) chr.SetLoopMotion(chr.MOTION_INTRO_WAIT) Chercher : self.btnCreate = getChild("create_button") self.btnCancel = getChild("cancel_button") self.btnPrev = getChild("prev_button") self.btnNext = getChild("next_button") self.btnLeft = getChild("left_button") self.btnRight = getChild("right_button") self.textBoard = getChild("text_board") Ajouter ça après : self.btnIncreaseHair = getChild("increase_hair") self.hairNumber = getChild("hair_number") self.btnDecreaseHair = getChild("decrease_hair") Chercher : getChild("hth_button").ShowToolTip = lambda arg=self.STAT_CON: self.OverInStatButton(arg) getChild("hth_button").HideToolTip = lambda arg=self.STAT_CON: self.OverOutStatButton() getChild("int_button").ShowToolTip = lambda arg=self.STAT_INT: self.OverInStatButton(arg) getChild("int_button").HideToolTip = lambda arg=self.STAT_INT: self.OverOutStatButton() getChild("str_button").ShowToolTip = lambda arg=self.STAT_STR: self.OverInStatButton(arg) getChild("str_button").HideToolTip = lambda arg=self.STAT_STR: self.OverOutStatButton() getChild("dex_button").ShowToolTip = lambda arg=self.STAT_DEX: self.OverInStatButton(arg) getChild("dex_button").HideToolTip = lambda arg=self.STAT_DEX: self.OverOutStatButton() Ajouter ça après : self.btnIncreaseHair.SetEvent(ui.__mem_func__(self.IncreaseHair)) self.btnDecreaseHair.SetEvent(ui.__mem_func__(self.DecreaseHair)) Chercher : def Open(self): print "OPEN CREATE WINDOW ----------------------------------------------------------------------------" playerSettingModule.LoadGameData("INIT") self.reservingRaceIndex = -1 self.reservingShapeIndex = -1 Ajouter ça après : self.hairIndex = 0 Chercher : def __DecreaseSlotIndex(self): Ajouter ça en dessous : if(self.hairIndex > 0): for i in xrange(SLOT_COUNT): chr.SelectInstance(self.__GetSlotChrID(0, i)) chr.SetHair(0) self.hairIndex = 0 self.hairNumber.SetText(str(self.hairIndex)) for i in xrange(SLOT_COUNT): chr.SelectInstance(self.__GetSlotChrID(1, i)) chr.SetHair(0) self.hairIndex = 0 self.hairNumber.SetText(str(self.hairIndex)) Chercher : def __IncreaseSlotIndex(self): Ajouter ça en dessous : if(self.hairIndex > 0): for i in xrange(SLOT_COUNT): chr.SelectInstance(self.__GetSlotChrID(0, i)) chr.SetHair(0) self.hairIndex = 0 self.hairNumber.SetText(self.hairIndex) for i in xrange(SLOT_COUNT): chr.SelectInstance(self.__GetSlotChrID(1, i)) chr.SetHair(0) self.hairIndex = 0 self.hairNumber.SetText(self.hairIndex) Dans locale/xx/ui/createcharacterwindow.py Chercher : { "name" : "shape_button_02", "type" : "radio_button", "x" : 139, "y" : 239 + TEMPORARY_HEIGHT, "text" : "2", "default_image" : ROOT_PATH + "Middle_Button_01.sub", "over_image" : ROOT_PATH + "Middle_Button_02.sub", "down_image" : ROOT_PATH + "Middle_Button_03.sub", }, Ajouter après : { "name" : "increase_hair", "type" : "button", "x" : 81, "y" : 239 + TEMPORARY_HEIGHT + 25, "default_image" : "d:/ymir work/ui/game/windows/btn_plus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_plus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_plus_down.sub", }, { "name" : "hair_number", "type" : "text", "x" : 110, "y" : 239 + TEMPORARY_HEIGHT + 25, "text" : "0", }, { "name" : "character_hairstyle", "type" : "text", "x" : 43, "y" : 293, "text" : "HairStyle", "text_horizontal_align" : "center", }, { "name" : "decrease_hair", "type" : "button", "x" : 139, "y" : 239 + TEMPORARY_HEIGHT + 25, "default_image" : "d:/ymir work/ui/game/windows/btn_minus_up.sub", "over_image" : "d:/ymir work/ui/game/windows/btn_minus_over.sub", "down_image" : "d:/ymir work/ui/game/windows/btn_minus_down.sub", }, Sur ces 2 fonctions: "name" : "create_button", "name" : "cancel_button", Chercher : "y" : 265 + TEMPORARY_HEIGHT, Changer par : "y" : 285 + TEMPORARY_HEIGHT, Dans UserInterface/Packet.h Chercher : typedef struct command_player_create { BYTE header; BYTE index; char name[CHARACTER_NAME_MAX_LEN + 1]; WORD job; BYTE shape; BYTE CON; BYTE INT; BYTE STR; BYTE DEX; } TPacketCGCreateCharacter; Replacer par : typedef struct command_player_create { BYTE header; BYTE index; char name[CHARACTER_NAME_MAX_LEN + 1]; WORD job; BYTE shape; WORD hair; BYTE CON; BYTE INT; BYTE STR; BYTE DEX; } TPacketCGCreateCharacter; Dans UserInterface/PythonNetworkStreamPhaseSelect.cpp Chercher : bool CPythonNetworkStream::SendCreateCharacterPacket (BYTE index, const char *name, BYTE job, BYTE shape, BYTE byCON, BYTE byINT, BYTE bySTR, BYTE byDEX) { TPacketCGCreateCharacter createCharacterPacket; createCharacterPacket.header = HEADER_CG_PLAYER_CREATE; createCharacterPacket.index = index; strncpy (createCharacterPacket.name, name, CHARACTER_NAME_MAX_LEN); createCharacterPacket.job = job; createCharacterPacket.shape = shape; createCharacterPacket.CON = byCON; createCharacterPacket.INT = byINT; createCharacterPacket.STR = bySTR; createCharacterPacket.DEX = byDEX; Replacer par : bool CPythonNetworkStream::SendCreateCharacterPacket(BYTE index, const char *name, BYTE job, BYTE shape,WORD wHair, BYTE byCON, BYTE byINT, BYTE bySTR, BYTE byDEX) { TPacketCGCreateCharacter createCharacterPacket; createCharacterPacket.header = HEADER_CG_PLAYER_CREATE; createCharacterPacket.index = index; strncpy(createCharacterPacket.name, name, CHARACTER_NAME_MAX_LEN); createCharacterPacket.job = job; createCharacterPacket.shape = shape; createCharacterPacket.hair = wHair; createCharacterPacket.CON = byCON; createCharacterPacket.INT = byINT; createCharacterPacket.STR = bySTR; createCharacterPacket.DEX = byDEX; Dans UserInterface/PythonNetworkStream.h Chercher : bool SendCreateCharacterPacket (BYTE index, const char *name, BYTE job, BYTE shape, BYTE byStat1, BYTE byStat2, BYTE byStat3, BYTE byStat4); Replacer par : bool SendCreateCharacterPacket(BYTE index, const char *name, BYTE job, BYTE shape, WORD wHair, BYTE byStat1, BYTE byStat2, BYTE byStat3, BYTE byStat4); Dans UserInterface/PythonNetworkStreamModule.cpp Chercher : PyObject *netSendCreateCharacterPacket (PyObject *poSelf, PyObject *poArgs) { int index; if (!PyTuple_GetInteger (poArgs, 0, &index)) { return Py_BuildException(); } char *name; if (!PyTuple_GetString (poArgs, 1, &name)) { return Py_BuildException(); } int job; if (!PyTuple_GetInteger (poArgs, 2, &job)) { return Py_BuildException(); } int shape; if (!PyTuple_GetInteger (poArgs, 3, &shape)) { return Py_BuildException(); } int stat1; if (!PyTuple_GetInteger (poArgs, 4, &stat1)) { return Py_BuildException(); } int stat2; if (!PyTuple_GetInteger (poArgs, 5, &stat2)) { return Py_BuildException(); } int stat3; if (!PyTuple_GetInteger (poArgs, 6, &stat3)) { return Py_BuildException(); } int stat4; if (!PyTuple_GetInteger (poArgs, 7, &stat4)) { return Py_BuildException(); } if (index < 0 && index > 3) { return Py_BuildException(); } CPythonNetworkStream &rkNetStream = CPythonNetworkStream::Instance(); rkNetStream.SendCreateCharacterPacket ((BYTE) index, name, (BYTE) job, (BYTE) shape, stat1, stat2, stat3, stat4); return Py_BuildNone(); } Replacer par : PyObject* netSendCreateCharacterPacket(PyObject* poSelf, PyObject* poArgs) { int index; if (!PyTuple_GetInteger(poArgs, 0, &index)) return Py_BuildException(); char* name; if (!PyTuple_GetString(poArgs, 1, &name)) return Py_BuildException(); int job; if (!PyTuple_GetInteger(poArgs, 2, &job)) return Py_BuildException(); int shape; if (!PyTuple_GetInteger(poArgs, 3, &shape)) return Py_BuildException(); int hair; if (!PyTuple_GetInteger(poArgs, 4, &hair)) return Py_BuildException(); int stat1; if (!PyTuple_GetInteger(poArgs, 5, &stat1)) return Py_BuildException(); int stat2; if (!PyTuple_GetInteger(poArgs, 6, &stat2)) return Py_BuildException(); int stat3; if (!PyTuple_GetInteger(poArgs, 7, &stat3)) return Py_BuildException(); int stat4; if (!PyTuple_GetInteger(poArgs, 8, &stat4)) return Py_BuildException(); if (index<0 && index>3) return Py_BuildException(); CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance(); rkNetStream.SendCreateCharacterPacket((BYTE)index, name, (BYTE)job, (BYTE)shape, (WORD)hair, stat1, stat2, stat3, stat4); return Py_BuildNone(); } Dans game/src/Packet.h Chercher: typedef struct command_player_create { BYTE header; BYTE index; char name[CHARACTER_NAME_MAX_LEN + 1]; WORD job; BYTE shape; BYTE Con; BYTE Int; BYTE Str; BYTE Dex; } TPacketCGPlayerCreate; Replacer par : typedef struct command_player_create { BYTE header; BYTE index; char name[CHARACTER_NAME_MAX_LEN + 1]; WORD job; BYTE shape; WORD hair; BYTE Con; BYTE Int; BYTE Str; BYTE Dex; } TPacketCGPlayerCreate; Go to db/src/ClientManagerPlayer.cpp Dans : void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerCreatePacket* packet) This is default query. Please check your query of your source and adjust according. Chercher : queryLen = snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s " "(id, account_id, name, level, st, ht, dx, iq, " "job, voice, dir, x, y, z, " "hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, gold, playtime, " "skill_level, quickslot) " "VALUES(0, %u, '%s', %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, 0, %d, 0, ", GetTablePostfix(), packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq, packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z, packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold); sys_log(0, "PlayerCreate accountid %d name %s level %d gold %d, st %d ht %d job %d", packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.gold, packet->player_table.st, packet->player_table.ht, packet->player_table.job); Replace par : queryLen = snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s " "(id, account_id, name, level, st, ht, dx, iq, " "job, voice, dir, x, y, z, " "hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, gold, playtime, " "skill_level, quickslot) " "VALUES(0, %u, '%s', %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, %d, %d, 0, ", GetTablePostfix(), packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq, packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z, packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.parts[PART_HAIR], packet->player_table.gold); sys_log(0, "PlayerCreate accountid %d name %s level %d gold %d, st %d ht %d job %d hair %d", packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.gold, packet->player_table.st, packet->player_table.ht, packet->player_table.job, packet->player_table.parts[PART_HAIR]); Chercher : pack.player.wMainPart = packet->player_table.part_base; Ajouter après: pack.player.wHairPart = packet->player_table.parts[PART_HAIR]; Dans game/src/input_login.cpp Chercher: bool NewPlayerTable2(TPlayerTable * table, const char * name, BYTE race, BYTE shape, BYTE bEmpire) Replacer par: bool NewPlayerTable2(TPlayerTable * table, const char * name, BYTE race, BYTE shape, WORD hair, BYTE bEmpire) Chercher : table->part_base = shape; Ajouter après : table->parts[PART_HAIR] = hair; Chercher : void CInputLogin::CharacterCreate(LPDESC d, const char * data) { struct command_player_create * pinfo = (struct command_player_create *) data; TPlayerCreatePacket player_create_packet; sys_log(0, "PlayerCreate: name %s pos %d job %d shape %d", pinfo->name, pinfo->index, pinfo->job, pinfo->shape); Remplacer par : void CInputLogin::CharacterCreate(LPDESC d, const char * data) { struct command_player_create * pinfo = (struct command_player_create *) data; TPlayerCreatePacket player_create_packet; sys_log(0, "PlayerCreate: name %s pos %d job %d shape %d hair %d", pinfo->name, pinfo->index, pinfo->job, pinfo->shape, pinfo->hair); Chercher : if (!NewPlayerTable2(&player_create_packet.player_table, pinfo->name, pinfo->job, pinfo->shape, d->GetEmpire())) Replace par : if (!NewPlayerTable2(&player_create_packet.player_table, pinfo->name, pinfo->job, pinfo->shape, pinfo->hair, d->GetEmpire())) -
F Download Center Télécharger ( Dernière Version ) Texte Ici... Partage d'un CMS Roumain, PSD inclus Preview Download
-
F Download Center Télécharger ( Dernière Version ) Bonjour, Un autre CMS : Preview Download
- 2 réponses
-
- 30
-
F Download Center Télécharger ( Dernière Version ) Bonjour, Petit partage du CMS basé sur le site de Rubinum Preview Download
- 4 réponses
-
- 51
-
F Download Center Télécharger ( Dernière Version ) Bonjour, Petit partage d'un CMS en anglais et espagnol Preview Download
- 3 réponses
-
- 34
-
Im spotted Saejin be like
-
Étrangement il est portugais sur les 2 profils
-
Aucuns stuff au démarrage d'un premier perso
Veltor88 a répondu à un(e) question de SupeRMax dans Questions & Réponses
Tu refais bien un nouveau personnage à chaque fois ? Si tu déco/reco ça ne corrige pas le soucis Pour les items du commencement ils font modifier la quête comme donné plus haut -
Aucuns stuff au démarrage d'un premier perso
Veltor88 a répondu à un(e) question de SupeRMax dans Questions & Réponses
Pour le texte qui ne s'efface pas après la première quête, une solution a été donné ici -
Aucuns stuff au démarrage d'un premier perso
Veltor88 a répondu à un(e) question de SupeRMax dans Questions & Réponses
giveitem.quest ? give_basic_weapon.quest plutot ? quest give_basic_weapon begin state start begin when login begin if pc.getqf("basic_weapon") == 0 then pc.setqf("basic_weapon", 1) --Equipement pour Guerrier local arme = 19 --Epée+9 local arme2 = 3009 --Glaive+9 local armure = 11209 --Armure du singe+9 local casque = 12209 --Heaume traditionnel+9 --Equipement pour Ninja if pc.job == 1 then arme = 19 --Epée+9 arme2 = 1009 --Dague+9 armure = 11409 --Costume azur+9 casque = 12349 --Capuchon en cuir+9 --Equipement pour Sura elseif pc.job == 2 then arme = 19 --Epée+9 arme2 = 0 --Rien armure = 11609 --Armure de réquiem+9 casque = 12489 --Heaume sanglant+9 --Equipement pour Chamane elseif pc.job == 3 then arme = 7009 --Eventail+9 arme2 = 0 --Rien armure = 11809 --Robe Pourpre+9 casque = 12629 --Chapeau de moine+9 end if pc.countitem(arme) == 0 and pc.countitem(arme2) == 0 and pc.countitem(armure) == 0 and pc.countitem(casque) == 0 and pc.weapon != arme then pc.give_gold(10000000) --10 000 000 Yangs pc.give_item2(50052, 1) --Livre cheval de combat pc.give_item2(50187, 1) -- Coffre d'apprenti I pc.set_skill_level(131, 1) repeat horse . advance () until horse . get_level () >= 11 horse.summon() horse.ride() end local empire={"Shinsoo", "Chunjo", "Jinno"} notice_all("Le personnage ".. pc.get_name() .." du royaume "..empire[pc.getempire()].." a été crée.") --- l say_title("Bienvenue "..pc.name.." :") say("Les grands sages ont décidé de vous aidez pour") say("le début de l'aventure et vous on fait grâce de") say("plusieurs présents. Ils vous ont donné une") say("monture niveau 11 ainsi que tout l'équipement du") say("débutant +9 (bouclier, armure, armes et bijoux) !") say("Alors qu'attendez vous ? Bonne chance !") end end end end Pour les coffres c'est levelup_boxes.quest Regarde si les 2 quêtes sont bien dans le fichier locale_list, puis refait une compilation des quêtes et tente de nouveau -
Créer un serveur privé Metin2 avec Hamachi
Veltor88 a répondu à un(e) sujet de Calypso dans Création & Gestion de Serveur
Attention ! Les files utilisés pendant ce tutoriel sont les 2014. Cependant, sur les 2014+, un bug survient à la sélection du personnage quand un ami souhaite se connecter quand le serveur est sur une machine virtuelle. Il faudra appliquer ce patch pour corriger ce problème. -
J'ai trouvé ça Sinon pour supprimer une quête tu peux supprime la quête de la liste (dans le fichier "locale_list") , recompile les quêtes et tu reboot le serveur (et non la machine... )
-
probleme de libs files 2016 team fe
Veltor88 a répondu à un(e) question de bsk dans Questions & Réponses
A mettre dans : -
probleme de libs files 2016 team fe
Veltor88 a répondu à un(e) question de bsk dans Questions & Réponses
Héberge ton image ici par exemple [Hidden Content] et colle le lien de l'image en éditant ton premier post -
Créer un serveur privé Metin2 avec Legacy of Metin2 Project
Veltor88 a répondu à un(e) sujet de ASIKOO dans Création & Gestion de Serveur
-
Src server / Compiler le game
Veltor88 a répondu à un(e) question de Keywho dans Questions & Réponses
Il faut les activer dans les sources ( char_item.cpp ) -
Fix 2014 - Jouer à plusieurs sur les Server Files 2014+
Veltor88 a répondu à un(e) sujet de ASIKOO dans Création & Gestion de Serveur
Files 2014/2016 Suffit simplement d'appliquer le fix et d'ouvrir les ports sur ta box pour que les gens puissent se connecter sur ton serveur, pas besoin d'Hamachi ou No-IP -
BlueDragon.lua (dossier France) + la quête n'est pas bonne sur ce sujet quest dragon_lair_access begin state start begin function get_settings() local settings = {} settings.cooldown_time = 3600 -- when can the dragon be killed again? settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair? settings.access_item = 30179 -- "Dragon God Symbols" settings.dragon_vnum = 2430 settings.spawn = {} settings.spawn.x = 181 settings.spawn.y = 173 settings.warp_in = {} settings.warp_in.first = {} settings.warp_in.last = {} settings.warp_in.first.x = 843677 settings.warp_in.first.y = 1066206 settings.warp_in.last.x = 844027 settings.warp_in.last.y = 1067599 settings.warp_out = {} settings.warp_out.first = {} settings.warp_out.last = {} settings.warp_out.first.x = 9200 settings.warp_out.first.y = 1206400 settings.warp_out.last.x = 10900 settings.warp_out.last.y = 1209100 settings.room_area = {} settings.room_area.first = {} settings.room_area.last = {} settings.room_area.first.x = 833000 settings.room_area.first.y = 1062500 settings.room_area.last.x = 844100 settings.room_area.last.y = 1071500 settings.access_item_amount = game.get_event_flag("dragon_lair_amount") if (settings.access_item_amount == 0) then settings.access_item_amount = 3 -- default value when event flag is not set elseif (settings.access_item_amount == -1) then settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case) end return settings end function get_random_point(area_coordinates) return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y) end function warp_to_lair() local settings = dragon_lair_access.get_settings() local x, y = dragon_lair_access.get_random_point(settings.warp_in) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y) pc.warp(x,y) end function warp_from_lair() local settings = dragon_lair_access.get_settings() local x, y = dragon_lair_access.get_random_point(settings.warp_out) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y) pc.warp(x,y) end function warp_all_from_lair() local settings = dragon_lair_access.get_settings() warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y) game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead char_log(0, 'LAIR', 'WARP ALL') end function get_time_remaining() local settings = dragon_lair_access.get_settings() return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time()) end function give_item_to_ghost() local settings = dragon_lair_access.get_settings() say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._130_say) say(settings.access_item_amount.."x: ") say_item_vnum(settings.access_item) local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel) if give_item == 1 then pc.remove_item(settings.access_item, settings.access_item_amount) char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM') return true else return false end end function show_time_remaining(time_remaining) q.set_title(gameforge.dragon_lair_access._165_sendLetter) send_letter(gameforge.dragon_lair_access._165_sendLetter) q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining) timer("dragon_lair_timer", time_remaining) notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, time_remaining / 60), notice) q.start() end when enter or login begin pc.setqf("is_leader", 0) q.done() if pc.get_map_index() == 208 and not pc.is_gm() then dragon_lair_access.warp_from_lair() end end when blue_dragon_timer.server_timer begin game.set_event_flag("dragon_lair_timer_used", 0) if game.get_event_flag("dragon_lair_alive") == 1 then notice_multiline(gameforge.dragon_lair_access._150_notice, notice_all) else notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all) end dragon_lair_access.warp_all_from_lair() end when 30121.chat."시발" with pc.get_map_index() != 208 and npc.lock() begin local starttime = game.get_event_flag("dragon_lair_time") local current_time = get_global_time() local settings = dragon_lair_access.get_settings() local time_remaining = dragon_lair_access.get_time_remaining() if pc.count_item(settings.access_item) >= settings.access_item_amount then if starttime + settings.group_time >= current_time then local password_input; repeat say ("시발") password_input = tonumber(input()) if password_input != game.get_event_flag("dragon_lair_password") then say ("시발") local again = select("응", "아니") if again == 2 then return end end until password_input == game.get_event_flag("dragon_lair_password") if not dragon_lair_access.give_item_to_ghost() then return end -- right password pc.setqf("time", starttime) dragon_lair_access.warp_to_lair() set_state(kill_dragon) elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost say ("시발") local abort = select("응","아니") if abort == 2 then npc.unlock() return end local password_number; repeat say ("시발") password_number = tonumber(input()) local again; if type(password_number) != 'number' then say ("시발") again = select("응", "아니") if again == 2 then npc.unlock() return end end until type(password_number) == 'number' if not dragon_lair_access.give_item_to_ghost() then npc.unlock() return end if dragon_lair_access.get_time_remaining() > 0 then pc.give_item2(settings.access_item, settings.access_item_amount) npc.unlock() say ("시발") return end pc.setqf("password", password_number) timer("dragon_lair_warptimer", pc.get_channel_id()*2) npc.unlock() else say ("시발") return end else say ("시발") say(settings.access_item_amount.."x: ") say_item_vnum(settings.access_item) return end npc.unlock() end when 30121.chat."시발" with pc.get_map_index() == 208 begin say ("시발") local warp = select("응", "아니") if warp == 1 then say ("다 떠난다.") wait() dragon_lair_access.warp_all_from_lair() set_state(start) end end when dragon_lair_warptimer.timer begin local settings = dragon_lair_access.get_settings() if dragon_lair_access.get_time_remaining() < 0 then local starttime = get_global_time() game.set_event_flag("dragon_lair_time", starttime) -- set start time char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime) pc.setqf("time", starttime) pc.setqf("is_leader", 1) game.set_event_flag("dragon_lair_password", pc.getqf("password")) -- set password char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password")) server_timer("blue_dragon_timer", settings.cooldown_time) dragon_lair_access.warp_to_lair() set_state(spawn_dragon) else pc.give_item2(settings.access_item, settings.access_item_amount) say ("시발") end pc.setqf("password", 0) end end state spawn_dragon begin when login begin local settings = dragon_lair_access.get_settings() purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y) notice_multiline(string.format(gameforge.dragon_lair_access._090_notice, pc.name), notice_all) -- spawn all mobs needed regen_in_map(208, "locale/_master/map/metin2_map_skipia_dungeon_boss/regen.txt") mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON') notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice) dragon_lair_access.show_time_remaining(settings.cooldown_time) set_state(kill_dragon) end when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._115_say) local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select) if warp == 1 then dragon_lair_access.warp_from_lair() set_state(start) end end end state kill_dragon begin when dragon_lair_timer.timer begin set_state(start) end when login begin if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then set_state(start) else dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining()) end end when button or info begin notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, dragon_lair_access.get_time_remaining() / 60), notice) local settings = dragon_lair_access.get_settings() if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice) end end when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin say_title(gameforge.ghost_story._010_sayTitle) say(gameforge.dragon_lair_access._115_say) local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select) if warp == 1 then dragon_lair_access.warp_from_lair() set_state(start) end end when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208 begin if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then dragon_lair_access.warp_to_lair() else say_title(gameforge.neutral_warp._20_sayTitle) say(gameforge.dragon_lair_access._120_say) set_state(start) end end when 2493.kill with pc.get_map_index() == 208 begin char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED') game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead game.drop_item_with_ownership(71123, 1) -- dropping dragon scale game.drop_item_with_ownership(71129, 1) -- dropping toe nail notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>! local settings = dragon_lair_access.get_settings() purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y) end end end
-
Meilleures Files pour débuter un serveur
Veltor88 a répondu à un(e) question de Alucard dans Questions & Réponses
Oui -
Salut le Vosgien et bienvenue
-
Connection refused - Team FE V3
Veltor88 a répondu à un(e) question de Roxas dans Questions & Réponses
A la racine tu créé un dossier nommé "share" et tu le mets dedans, et non le share dans /usr/metin2 -
Connection refused - Team FE V3
Veltor88 a répondu à un(e) question de Roxas dans Questions & Réponses
Pour ce message, tu places exppettable.txt dans /share ou tu modifies la lignes qu'il faut dans ton main.cpp et tu compiles