Este es un tema popular. Shang Publicado 12 de Julio del 2015 Este es un tema popular. Reportar Compartir Publicado 12 de Julio del 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. Kenshi Torres, Danher Epic Random, devgames y 85 mas reacciono a esto 85 2 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Jeo Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 Hombre, la idea es buenísima. Buen aporte. Shang reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
peri200 Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 buen aporte Shang reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
MiGueLiT0 Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 Wow buen aporte, sirve mas que lo de la npc Shang reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Hawk Server's Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 Una gran idea y muy util que digo bueno EXCELENTE APORTE Shang reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Jex Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 eso de +9 como se pone :v Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Shang Publicado 12 de Julio del 2015 Author Reportar Compartir Publicado 12 de Julio del 2015 eso de +9 como se pone :v Binario. Eso es cosa de sema. Si quieres comprárselo habla con el por skype. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Dragonslayer Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 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. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 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? Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Shang Publicado 12 de Julio del 2015 Author Reportar Compartir Publicado 12 de Julio del 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 reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 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 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Dragonslayer Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 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. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Shang Publicado 12 de Julio del 2015 Author Reportar Compartir Publicado 12 de Julio del 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. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 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 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Jeo Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 añade esas funciones al quest_functions Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 12 de Julio del 2015 Reportar Compartir Publicado 12 de Julio del 2015 Edit: sigue igual# no coge la quest Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Shang Publicado 13 de Julio del 2015 Author Reportar Compartir Publicado 13 de Julio del 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 reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Dragonslayer Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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. NazoX y tierrilopes reacciono a esto 2 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Shang Publicado 13 de Julio del 2015 Author Reportar Compartir Publicado 13 de Julio del 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... Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Dragonslayer Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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 reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
NazoX Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Guest Caes Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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... Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Dragonslayer Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Akroma Publicado 13 de Julio del 2015 Reportar Compartir Publicado 13 de Julio del 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 reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Mensajes recomendados
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.