Dynamic Things Posted August 27, 2015 at 07:29 PM Share Posted August 27, 2015 at 07:29 PM Olá TMoore Tutorials. Sejam bem-Vindos a este tutorial. Objectivo deste tutorial: Este tutorial vai se dividir em 2 partes, e as suas partes são Serverside e Clientside. Ficheiros a Editar exchange.cpp game.py uiexchange.py constInfo.py locale_list Game [c++] Abrir exchange.cpp procurar por: if (iDist >= EXCHANGE_MAX_DISTANCE) return false; Agora vamos alterar para o seguinte: //if (iDist >= EXCHANGE_MAX_DISTANCE) //return false; Agora procuramos pelo seguinte: GetExchange()->SetCompany(victim->GetExchange()); e adicionamos a baixo o seguinte: SetPolymorph(30000, true); victim->SetPolymorph(30000, true); SetPKMode(PK_MODE_PROTECT); victim->SetPKMode(PK_MODE_PROTECT); Ficará assim victim->GetExchange()->SetCompany(GetExchange()); GetExchange()->SetCompany(victim->GetExchange()); SetPolymorph(30000, true); victim->SetPolymorph(30000, true); SetPKMode(PK_MODE_PROTECT); victim->SetPKMode(PK_MODE_PROTECT); Agora procuramos por: if (GetCompany()->m_lGold) victim->Save(); e adicionamos em baixo: GetOwner()->SetPolymorph(GetOwner()->GetJob(), true); victim->SetPolymorph(victim->GetJob(), true); Ficará assim: if (GetCompany()->Done()) { if (GetCompany()->m_lGold) // 돈이 있을 때만 저장 victim->Save(); GetOwner()->SetPolymorph(GetOwner()->GetJob(), true); victim->SetPolymorph(victim->GetJob(), true); Agora procuramos por void CExchange::Cancel() e adicionamos a baixo o seguinte: GetOwner()->SetPolymorph(GetOwner()->GetJob(), true); Irá fica assim: void CExchange::Cancel() { exchange_packet(GetOwner(), EXCHANGE_SUBHEADER_GC_END, 0, 0, NPOS, 0); GetOwner()->SetExchange(NULL); GetOwner()->SetPolymorph(GetOwner()->GetJob(), true); Após isso vamos procurar por if (empty_pos < 0) { sys_err("Exchange::Done : Cannot find blank position in inventory %s <-> %s item %s", m_pOwner->GetName(), victim->GetName(), item->GetName()); continue; } E adicionamos a baixo, o seguinte: m_pOwner->SetPolymorph(m_pOwner->GetJob(), true); irá ficar assim: if (empty_pos < 0) { sys_err("Exchange::Done : Cannot find blank position in inventory %s <-> %s item %s", m_pOwner->GetName(), victim->GetName(), item->GetName()); continue; } m_pOwner->SetPolymorph(m_pOwner->GetJob(), true); Feito isso ja podem compilar o game. Agora vamos começar a parte python. Vamos abrir game.py No inicio do ficheiro vamos adicionar o seguinte: import uisidebar Agora vamos procurar por : class GameWindow(ui.ScriptWindow): Abaixo de: player.SetGameWindow(self) Adicionamos o seguinte: self.sideBar = uisidebar.SideBar() self.sideBar.Show() self.sideBar.AddButton("Troca a Distancia", self.__DeschidereFereastra) Agora adicionamos ao root o ficheiro uisidebar.py que contém no download. Agora procuramos por: def __ServerCommand_Build(self): serverCommandList={ e Adicionamos a baixo: "sistem_negot_map" : self.__sistem_negot_map, "sistem_negot_verificare_nume" : self.__Sistem_negot_verificare_nume, "sistem_negot_deschidere_fereastra" : self.__sistem_negot_deschidere_fereastra, Ficará assim: def __ServerCommand_Build(self): serverCommandList={ "sistem_negot_map" : self.__sistem_negot_map, "sistem_negot_verificare_nume" : self.__Sistem_negot_verificare_nume, "sistem_negot_deschidere_fereastra" : self.__sistem_negot_deschidere_fereastra, Agora no final do ficheiro game.py adicionamos o seguinte: def __Sistem_negot_verificare_nume(self): net.SendQuestInputStringPacket(str(constInfo.NegotFereastraNume)) def __sistem_negot_map(self, questindex): constInfo.sistem_negot_map = questindex def __sistem_negot_deschidere_fereastra(self, vid): player_vid = int(vid) net.SendExchangeStartPacket(player_vid) def __DeschidereFereastra(self): self.Fereastra_Negot_Map_Fereastra2 = ui.BoardWithTitleBar() self.Fereastra_Negot_Map_Fereastra2.SetSize(210, 115) self.Fereastra_Negot_Map_Fereastra2.SetCenterPosition() self.Fereastra_Negot_Map_Fereastra2.AddFlag('float') self.Fereastra_Negot_Map_Fereastra2.AddFlag('movable') self.Fereastra_Negot_Map_Fereastra2.SetTitleName("Sistema de troca") self.Fereastra_Negot_Map_Fereastra2.Show() self.Fereastra_Negot_Map_Text = ui.TextLine() self.Fereastra_Negot_Map_Text.SetParent(self.Fereastra_Negot_Map_Fereastra2) self.Fereastra_Negot_Map_Text.SetText("Procure o jogador que pretende negociar.") self.Fereastra_Negot_Map_Text.SetPosition(7,27) self.Fereastra_Negot_Map_Text.SetFontColor(1.0, 1.0, 1.0) self.Fereastra_Negot_Map_Text.Show() self.Fereastra_Negot_Map_Value1 = ui.SlotBar() self.Fereastra_Negot_Map_Value1.SetParent(self.Fereastra_Negot_Map_Fereastra2) self.Fereastra_Negot_Map_Value1.SetSize(120, 18) self.Fereastra_Negot_Map_Value1.SetPosition(50, 50) self.Fereastra_Negot_Map_Value1.Show() self.Fereastra_Negot_Map_Value = ui.EditLine() self.Fereastra_Negot_Map_Value.SetParent(self.Fereastra_Negot_Map_Value1) self.Fereastra_Negot_Map_Value.SetSize(120, 18) self.Fereastra_Negot_Map_Value.SetPosition(4, 1) self.Fereastra_Negot_Map_Value.SetMultiLine() self.Fereastra_Negot_Map_Value.SetMax(12) self.Fereastra_Negot_Map_Value.SetText("") self.Fereastra_Negot_Map_Value.SetFocus() self.Fereastra_Negot_Map_Value.Show() self.Fereastra_Negot_Map_Test1 = ui.Button() self.Fereastra_Negot_Map_Test1.SetEvent(self.__OpenFereastra_Negot_Map_Fereastra2) self.Fereastra_Negot_Map_Test1.SetParent(self.Fereastra_Negot_Map_Fereastra2) self.Fereastra_Negot_Map_Test1.SetPosition(10, 75) self.Fereastra_Negot_Map_Test1.SetUpVisual("d:/ymir work/ui/public/XLarge_Button_01.sub") self.Fereastra_Negot_Map_Test1.SetOverVisual("d:/ymir work/ui/public/XLarge_button_02.sub") self.Fereastra_Negot_Map_Test1.SetDownVisual("d:/ymir work/ui/public/XLarge_button_03.sub") self.Fereastra_Negot_Map_Test1.SetText("Iniciar a procura") self.Fereastra_Negot_Map_Test1.Show() def __OpenFereastra_Negot_Map_Fereastra2(self): import event ExName = self.Fereastra_Negot_Map_Value.GetText() if self.__ProtectieNegot(): chat.AppendChat(1, "[sERVER] Nu poti negocia cu un jucator in aceasta harta!") #import chat la inceputul modulului return if len(ExName) >= 4: self.Fereastra_Negot_Map_Fereastra2.Hide() constInfo.NegotFereastraNume = ExName event.QuestButtonClick(int(constInfo.sistem_negot_map)) else: self.Fereastra_Negot_Map_Text.SetText("Numele trebuie sa fie de peste 3 caractere!") self.Fereastra_Negot_Map_Text.SetFontColor(1.0, 0.0, 0.0) def __ProtectieNegot(self): protectie_mape = [ "season1/metin2_map_oxevent", "mape_dungeon/metin2_map_skipia_dungeon_boss", "mape_dungeon/metin2_map_skipia_dungeon_boss2", "mape_dungeon/metin2_map_devilsCatacomb", "mape_dungeon/metin2_map_deviltower1", "mape_vegas/metin2_map_wedding_01", "mape_dungeon/metin2_map_spiderdungeon_02", "mape_beta/Metin2_map_CapeDragonHead", "mape_beta/metin2_map_Mt_Thunder", "mape_beta/metin2_map_dawnmistwood", "mape_beta/metin2_map_BayBlackSand", "mape_noi/farmmap1", "mape_dungeon/metin2_map_spiderdungeon_03", "mape_vegas/metin2_map_duel", "mape_dungeon/metin2_map_n_flame_dungeon_01", "mape_dungeon/metin2_map_n_snow_dungeon_01" ] if str(background.GetCurrentMapName()) in protectie_mape: return TRUE return FALSE Ainda no game procurar por novamente por: def __ServerCommand_Build(self): serverCommandList={ e adicionar o seguinte: "getinputbegin" : self.__Input_Get_Vegas_1, "getinputend" : self.__Input_Get_Vegas_2, "getinput" : self.__Input_Get_Vegas_3, Agora nas ultimas linhas adicionamos o seguinte: def __Input_Get_Vegas_1(self): constInfo.INPUT_IGNORE = 1 def __Input_Get_Vegas_2(self): constInfo.INPUT_IGNORE = 0 def __Input_Get_Vegas_3(self): net.SendQuestInputStringPacket("1") Agora procuramos por : def OpenQuestWindow(self, skin, idx): e alteramos para o seguinte: def OpenQuestWindow(self, skin, idx): if constInfo.INPUT_IGNORE == 1: return else: self.interface.OpenQuestWindow(skin, idx) Agora guardamos e fechamos o game.py (atenção as tabs) Agora abrimos o uiexchange.py e procuramos por: def OpenDialog(self): Agora trocam a função toda pelo seguinte: def OpenDialog(self): self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (exchange.GetNameFromTarget())) if exchange.GetNameFromTarget() == "": import constInfo self.TitleName.SetText(localeInfo.EXCHANGE_TITLE % (str(constInfo.NegotFereastraNume))) self.AcceptButton.Enable() self.AcceptButton.SetUp() self.Show() (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() Agora guardamos o uiexchange.py e fechamos. Agora abrimos constInfo.py e adicionamos o seguinte: NegotFereastraVid = 0 NegotFereastraNume = "un jucator" sistem_negot_map = 0 INPUT_IGNORE = 0 Agora fechamos e guardamos o constInfo.py e abrimos locale_list e nas ultimas linhas escrevemos o seguinte: sistem_negot.quest Feito adicionamos o ficheiro sistem_negot.quest que contém no download, feito isso vamos nossa maquina e digitamos o seguinte: cd /usr/home/game/share/locale/mexico/quest && sh make.sh Onde diz mexico será o nome da pasta do vosso locale. Agora ligam o servidor e o vosso resultado será este: Download: Mega Password do download: TMooreTutorials Informações adicionais. MD5 6380296e3a5cad1b501d73131d7634bd SHA1 c0775dad132643112922e6c895ff315d387d8e92 SHA256 1fb493240f1453db4ef1ac346cabf1ba6fb6345f1f9b0a1bbfe9c17f0e9e6a0d Informação completa: Link Créditos: Dynamic Things, VegaS & Rafa23, Yiv, Rideas Cumprimentos Dynamic Things Link to comment Share on other sites More sharing options...
pedrorrr Posted November 22, 2015 at 05:22 PM Share Posted November 22, 2015 at 05:22 PM Não arranjas isso sem slidebar? Por exemplo com um botão para aqui: http://prntscr.com/95o9qb Link to comment Share on other sites More sharing options...
Dynamic Things Posted November 22, 2015 at 06:03 PM Author Share Posted November 22, 2015 at 06:03 PM Não arranjas isso sem slidebar? Por exemplo com um botão para aqui: http://prntscr.com/95o9qb Sim, sei o que dizes mas de momento não te posso ajudar, pois de momento não tenho computador. Link to comment Share on other sites More sharing options...
pedrorrr Posted November 23, 2015 at 02:54 PM Share Posted November 23, 2015 at 02:54 PM Tudo funciona (não testei com o poly) porém salvo erro quando se mete o nome de algum jogador que não existe e se vai ao syserr vai aparecer este erro que vou mostrar na print... Print -> http://prntscr.com/960awl Solução? Link to comment Share on other sites More sharing options...
Marcos Daniel Posted March 24, 2017 at 04:59 PM Share Posted March 24, 2017 at 04:59 PM replouad? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now