Popular Post Shang Posted July 12, 2015 Popular Post Report Share Posted July 12, 2015 Hola zoner@s, Hoy vengo a postear este sistema que hice hace tiempo: Instrucciones de instalación. ### ConstInfo.py BorrarItems = { "QID" : 0, "BORRAR" : "", } ### Game.py En el __ServerCommand_Build, pegar esto: "BORRAR" : self.ManagerBorrar, Al final del game.py pegar esto: def ManagerBorrar(self, cmd): cmd = cmd.split("|") if cmd[0] == "QID": constInfo.BorrarItems["QID"] = int(cmd[1]) elif cmd[0] == "SEND": net.SendQuestInputStringPacket(str(constInfo.BorrarItems["BORRAR"])) constInfo.BorrarItems["BORRAR"] = "" elif cmd[0] == "INPUT": constInfo.INPUT_IGNORE = int(cmd[1]) ### uiInventory.py Debajo de wndEquip = self.GetChild("EquipmentSlot") Pegar esto: wndBorrar = self.GetChild("BorrarSlot") Debajo de: self.costumeButton = self.GetChild2("CostumeButton") Pegar: self.borrar_items = self.GetChild2("BorrarItems") Debajo de: self.attachMetinDialog.Hide() Pegar esto: self.drag = ui.Bar() self.drag.SetPosition(13+50,538) self.drag.SetParent(self) self.drag.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 0.0)) self.drag.SetSize(32,32) self.drag.OnMouseLeftButtonUp = lambda: self.Add_Item() self.drag.Show() wndBorrar.SetOverInItemEvent(ui.__mem_func__(self.OverBorrarIn)) wndBorrar.SetOverOutItemEvent(ui.__mem_func__(self.OverBorrarOut)) self.RemoveQuestion = uiCommon.QuestionDialog() self.RemoveQuestion.SetAcceptEvent(lambda arg = TRUE: self.Borrar_Item(arg)) self.RemoveQuestion.SetCancelEvent(lambda arg = FALSE: self.Borrar_Item(arg)) self.RemoveQuestion.Close() Debajo del def Close(self): Pegar esto: def OverBorrarIn(self): self.ShowToolTip(0) def OverBorrarOut(self): self.tooltipItem.HideToolTip() def Add_Item(self): if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedSlotVnum = mouseModule.mouseController.GetAttachedItemIndex() # item.SelectItem(attachedSlotVnum) if player.SLOT_TYPE_INVENTORY == attachedSlotType: item.SelectItem(attachedSlotVnum) self.RemoveQuestion.SetText("¿Seguro que quieres borrar "+item.GetItemName()+"?") self.RemoveQuestion.Open() constInfo.BorrarItems["BORRAR"] = "" constInfo.BorrarItems["BORRAR"] = "BORRAR|"+str(attachedSlotPos)+"|"+str(attachedSlotVnum) #chat.AppendChat(1, constInfo.BorrarItems["BORRAR"]) mouseModule.mouseController.DeattachObject() def Borrar_Item(self, arg): if arg: event.QuestButtonClick(constInfo.BorrarItems["QID"]) self.RemoveQuestion.Close() ### locale/inventorywindow.py Debajo de: ## Item Slot { "name" : "ItemSlot", "type" : "grid_table", "x" : 8, "y" : 246, "start_index" : 0, "x_count" : 5, "y_count" : 9, "x_step" : 32, "y_step" : 32, "image" : "d:/ymir work/ui/public/Slot_Base.sub" }, Pegar esto: ## Borar Items Slot { "name" : "BorrarItems", "type" : "image", "x" : 13, "y" : 538, "image" : "locale/es/ui/inventario/borrar_items.tga", "children" : ( { "name" : "BorrarSlot", "type" : "slot", "x" : 0, "y" : 0, "width" : 32, "height" : 32, "slot" : ( {"index":0, "x":0, "y":0, "width":32, "height":32}, ), }, ), }, Hará falta redimensionar los slots de Yang y Mds. ## Print { "name":"Money_Slot", "type":"button", "x":50, "y":48, #"horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "children" : ( { "name" : "Money", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789", }, ), }, { "name":"Mds_Slot", "type":"button", "x":50, "y":28, #"horizontal_align":"center", "vertical_align":"bottom", "default_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "over_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "down_image" : "d:/ymir work/ui/public/parameter_slot_04.sub", "children" : ( { "name" : "Mds", "type" : "text", "x" : 3, "y" : 3, "horizontal_align" : "right", "text_horizontal_align" : "right", "text" : "123456789 MD's", }, ), }, ), }, ), } Por cierto, hice un log de los items borrados por si las moscas de si alguien entra en tu cuenta y te borra todos los items, pues queda en el log. (Adjunto en la descarga). Descarga: Debes iniciar sesión para ver el contenido del enlace en esta publicación. Créditos: Shang PD: Si vais a ponerlo en otro sitio, dejad mis créditos en el post cabrones xD. anita castillo, alejogz, macho79 and 85 others 85 2 1 Quote Link to comment Share on other sites More sharing options...
Jeo Posted July 12, 2015 Report Share Posted July 12, 2015 Hombre, la idea es buenísima. Buen aporte. Shang 1 Quote Link to comment Share on other sites More sharing options...
peri200 Posted July 12, 2015 Report Share Posted July 12, 2015 buen aporte Shang 1 Quote Link to comment Share on other sites More sharing options...
MiGueLiT0 Posted July 12, 2015 Report Share Posted July 12, 2015 Wow buen aporte, sirve mas que lo de la npc Shang 1 Quote Link to comment Share on other sites More sharing options...
Hawk Server's Posted July 12, 2015 Report Share Posted July 12, 2015 Una gran idea y muy util que digo bueno EXCELENTE APORTE Shang 1 Quote Link to comment Share on other sites More sharing options...
Jex Posted July 12, 2015 Report Share Posted July 12, 2015 eso de +9 como se pone :v Quote Link to comment Share on other sites More sharing options...
Shang Posted July 12, 2015 Author Report Share Posted July 12, 2015 eso de +9 como se pone :v Binario. Eso es cosa de sema. Si quieres comprárselo habla con el por skype. Quote Link to comment Share on other sites More sharing options...
Dragonslayer Posted July 12, 2015 Report Share Posted July 12, 2015 Binario. Eso es cosa de sema. Si quieres comprárselo habla con el por skype. Esta que se acuerda XDDDD. Se ve interesante, facil, practico y sencillo. Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 12, 2015 Report Share Posted July 12, 2015 Muchas gracias por el aporte, cuando lo pruebe te digo algo! un saludo PD: me podrías decir si se puede, como has echo para que se vea que es +9 el arma? Quote Link to comment Share on other sites More sharing options...
Shang Posted July 12, 2015 Author Report Share Posted July 12, 2015 PD: me podrías decir si se puede, como has echo para que se vea que es +9 el arma? Binario. Eso es cosa de sema. Si quieres comprárselo habla con el por skype. Esta que se acuerda XDDDD. Se ve interesante, facil, practico y sencillo. Lleva parte de python, tan sencillo no es... xD NazoX 1 Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 12, 2015 Report Share Posted July 12, 2015 Lleva parte de python, tan sencillo no es... xD Ya has dicho mucho gracias...xDD pd: lo que no me acuerdo es donde poner lo de : ## Print { "name":"Money_Slot", "type":"button", Pero ahora lo busco gracias :3 Quote Link to comment Share on other sites More sharing options...
Dragonslayer Posted July 12, 2015 Report Share Posted July 12, 2015 Lleva parte de python, tan sencillo no es... xD El que lo de las +9?, o tu sistema?, Si yo no te digo que sea facil de hacer este sistema, si me pongo yo a lo mejor duro 10 veces mas o ni lo consigo. Con sencillo me refiero a que es muy facil de borrar los items. Yo lo que haría, seria coger un cmd, y conectar el boton con quest, pero supongo que con eso lo de arrastrar no funcionaría. Quote Link to comment Share on other sites More sharing options...
Shang Posted July 12, 2015 Author Report Share Posted July 12, 2015 El que lo de las +9?, o tu sistema?, Si yo no te digo que sea facil de hacer este sistema, si me pongo yo a lo mejor duro 10 veces mas o ni lo consigo. Con sencillo me refiero a que es muy facil de borrar los items. Yo lo que haría, seria coger un cmd, y conectar el boton con quest, pero supongo que con eso lo de arrastrar no funcionaría. Es lo que hace la quest, pero manda a borrar el item cuando pulsas en Si enviando el slot y el vnum. Porque no puedes hacerlo sin elegir el slot ni el vnum del item, sinó no borraría nada xD. Me referia a lo de +9 en el item que lleva python también aparte de editar el binario. Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 12, 2015 Report Share Posted July 12, 2015 Es lo que hace la quest, pero manda a borrar el item cuando pulsas en Si enviando el slot y el vnum. Porque no puedes hacerlo sin elegir el slot ni el vnum del item, sinó no borraría nada xD. Me referia a lo de +9 en el item que lleva python también aparte de editar el binario. Shang no me coge la quest, xD he puesto esto: ### questlua_item.cpp Debajo de la función item_remove (int item_remove(lua_State* L)), pegar esto: int item_remove_stack(lua_State* L) { CQuestManager& q = CQuestManager::instance(); LPITEM item = q.GetCurrentItem(); if (item != NULL) { if (q.GetCurrentCharacterPtr() == item->GetOwner()) { ITEM_MANAGER::instance().RemoveItem(item); } else { sys_err("Tried to remove invalid item %p", get_pointer(item)); } q.ClearCurrentItem(); } return 0; } Debajo de: { "remove", item_remove }, Pegar esto: { "remove_stack", item_remove_stack }, Créditos: Vanilla. en questlib.lua, si es en el sourcer avisame que lo pongo,) pero la quest me da core dumped: Todo lo demás está genial solo falta a comodar correctamente:p Quote Link to comment Share on other sites More sharing options...
Jeo Posted July 12, 2015 Report Share Posted July 12, 2015 añade esas funciones al quest_functions Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 12, 2015 Report Share Posted July 12, 2015 Edit: sigue igual# no coge la quest Quote Link to comment Share on other sites More sharing options...
Shang Posted July 13, 2015 Author Report Share Posted July 13, 2015 Mmm que pone en el txt? No pone source? Si pone source es por algo. También necesitarás la lib de mijago para el mysql_query y la función item.get_attr, que si no la tienes, le pediré permiso a PACI por si puedo pasarla, ya que es suya la que tengo. NazoX 1 Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 13, 2015 Report Share Posted July 13, 2015 Mmm que pone en el txt? No pone source? Si pone source es por algo. También necesitarás la lib de mijago para el mysql_query y la función item.get_attr, que si no la tienes, le pediré permiso a PACI por si puedo pasarla, ya que es suya la que tengo. Vale muchas gracias ahora lo pondré en el sourcer y mirare s ver si tengo la función aunque lo dudo mucho Quote Link to comment Share on other sites More sharing options...
Dragonslayer Posted July 13, 2015 Report Share Posted July 13, 2015 Edit: sigue igual# no coge la quest function string:split(delimiter) local result = {} local from = 1 local delim_from, delim_to = string.find(self, delimiter, from) while delim_from do table.insert(result, string.sub(self, from , delim_from-1)) from = delim_to + 1 delim_from, delim_to = string.find(self, delimiter, from) end table.insert(result, string.sub(self, from)) return result end function split(str, delim, maxNb) if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end mysql_query = function(query) local version, MYSQL_LOGS = 55, get_locale_base_path().."/quest/io/mysql_logs" if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} if version == 51 then os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) elseif version == 55 then os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) else return 0 end os.execute ("echo '"..pc.get_account_id().." : "..pc.get_name().." Realiza: "..query.."' >> "..MYSQL_LOGS) for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tonumber(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber(b) or b or 'NULL' end) end out.__lines = t[1] return out end Debes iniciar sesión para ver el contenido del enlace en esta publicación. PD: Veo sobrecargar la quest usando mysql_query para eso, si fuera la función mysql del source no vería problema, pero esta consume mas. tierrilopes and NazoX 2 Quote Link to comment Share on other sites More sharing options...
Shang Posted July 13, 2015 Author Report Share Posted July 13, 2015 function string:split(delimiter) local result = {} local from = 1 local delim_from, delim_to = string.find(self, delimiter, from) while delim_from do table.insert(result, string.sub(self, from , delim_from-1)) from = delim_to + 1 delim_from, delim_to = string.find(self, delimiter, from) end table.insert(result, string.sub(self, from)) return result end function split(str, delim, maxNb) if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end mysql_query = function(query) local version, MYSQL_LOGS = 55, get_locale_base_path().."/quest/io/mysql_logs" if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} if version == 51 then os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) elseif version == 55 then os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) else return 0 end os.execute ("echo '"..pc.get_account_id().." : "..pc.get_name().." Realiza: "..query.."' >> "..MYSQL_LOGS) for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tonumber(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber(b) or b or 'NULL' end) end out.__lines = t[1] return out end Debes iniciar sesión para ver el contenido del enlace en esta publicación. PD: Veo sobrecargar la quest usando mysql_query para eso, si fuera la función mysql del source no vería problema, pero esta consume mas. Llevo usando ese sistema un mes y no me ha pasado nada... Quote Link to comment Share on other sites More sharing options...
Dragonslayer Posted July 13, 2015 Report Share Posted July 13, 2015 Llevo usando ese sistema un mes y no me ha pasado nada... No te digo que te pase, pero es consumir recursos a lo tonto, es mi opinión. Pero vamos que aun asi consume una mierda. Pero la funcion mysql por source es mucho mejor, solo es un consejo. Shang 1 Quote Link to comment Share on other sites More sharing options...
NazoX Posted July 13, 2015 Report Share Posted July 13, 2015 function string:split(delimiter) local result = {} local from = 1 local delim_from, delim_to = string.find(self, delimiter, from) while delim_from do table.insert(result, string.sub(self, from , delim_from-1)) from = delim_to + 1 delim_from, delim_to = string.find(self, delimiter, from) end table.insert(result, string.sub(self, from)) return result end function split(str, delim, maxNb) if str == nil then return str end if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end mysql_query = function(query) local version, MYSQL_LOGS = 55, get_locale_base_path().."/quest/io/mysql_logs" if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} if version == 51 then os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) elseif version == 55 then os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) else return 0 end os.execute ("echo '"..pc.get_account_id().." : "..pc.get_name().." Realiza: "..query.."' >> "..MYSQL_LOGS) for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tonumber(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber(b) or b or 'NULL' end) end out.__lines = t[1] return out end Debes iniciar sesión para ver el contenido del enlace en esta publicación. PD: Veo sobrecargar la quest usando mysql_query para eso, si fuera la función mysql del source no vería problema, pero esta consume mas. Gracias Quote Link to comment Share on other sites More sharing options...
Guest Caes Posted July 13, 2015 Report Share Posted July 13, 2015 PD: Veo sobrecargar la quest usando mysql_query para eso, si fuera la función mysql del source no vería problema, pero esta consume mas. ¿En que te basas para decir eso?, mysql_query es una función en lua que ejecuta el comando "mysql" en el sistema, el cual es el cliente que mysql trae, y vamos que no hay nada más optimo para ejecutar una consulta que el propio cliente de mysql. Sobrecargar... Quote Link to comment Share on other sites More sharing options...
Dragonslayer Posted July 13, 2015 Report Share Posted July 13, 2015 ¿En que te basas para decir eso?, mysql_query es una función en lua que ejecuta el comando "mysql" en el sistema, el cual es el cliente que mysql trae, y vamos que no hay nada más optimo para ejecutar una consulta que el propio cliente de mysql. Sobrecargar... Sinceramente no me baso en la propia función mysql, si no a la hora antes de que se ejecute. Pero vamos que si tu me dices que es lo mismo, me lo creo. No soy ningun experto en esto, y tu controlas de esto mucho mas que yo. Quote Link to comment Share on other sites More sharing options...
Akroma Posted July 13, 2015 Report Share Posted July 13, 2015 en pocas ejecucciones es mejor la funcion lua, en + de 300-400 funciones a la vez, se recomienda que funcione internamente, por source, consume menos, es mas rapido, y produce menos lag a nivel usuario. Y esto esta mas que comprovado, por resultados obtenidos de testeo. Concuerdo, con dragon en que es mejor internamente. Saludos Marcos Pinheiro 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.