Jump to content

Rafa23Alzira

Miembro
  • Contador contenido

    588
  • Ingreso

  • Última visita

  • Días ganados

    34

Mensajes publicados por Rafa23Alzira

  1. Hola chicos, he preguntado por el chat si a alguien le interesaba este tip y se me ha respondido que si, así que os lo hago por si a alguien os puede servir.

     

    Hay otras guías que lo que hacen es simplemente reemplazar el positioninfo (las coord), con este método lo pondréis bajo :)

    Sale la hora de vuestra ordenador, estoy intentando que salga la del país que queramos, pero por ahora no he podido.

    94441baedc552deb7331f4292f869b6a.png  

     

     

    Empezamos

    Descompilamos uiscript y abrimos minimap.py

     

    Buscamos

     ## PositionInfo

    Debajo de su cierre ( } ) ponemos lo siguiente

    				## TimeInfo
    				{
    					"name" : "TimeInfo",
    					"type" : "text",
    					
    					"text_horizontal_align" : "center",
    
    					"outline" : 1,
    
    					"x" : 70,
    					"y" : 180,
    
    					"text" : "",
    				},
    

    Quedará así:

     

     

    13f93fb1ed349bfefde5b95dab9f370e.png

     

     

     

    Guardamos y compilamos uiscript.

     

    Ahora descompilamos root y vamos a uiminimap.py

     

    Buscamos

    self.positionInfo = 0
    

    y debajo ponemos

    self.timeInfo = 0
    

    De nuevo buscamos

    self.positionInfo = self.GetChild("PositionInfo")
    

    y bajo ponemos

    self.timeInfo = self.GetChild("TimeInfo")
    

    Otra vez, buscamos

    self.positionInfo.Hide()
    

    y bajo ponemos

    self.timeInfo.SetPosition(70, 160)
    

    Por último buscamos

    self.positionInfo.SetText("(%.0f, %.0f)" % (x/100, y/100))
    

    y bajo ponemos

    self.timeInfo.SetText(time.strftime('(%X)'))
    

    Para terminar añadimos el import, buscamos

    import background
    

    y bajo ponemos

    import time
    
  2. Hola chicos, os traigo una cosilla que he hecho que creo que es bastante útil y hará que nos evitemos crear cupones distintos para cantidad de Coins - Md's

     

    Este objeto te permite ingresarle o retirarle coins y comerciar el cupón con las coins guardadas.

     

    - El título del objeto cambia según las coins ingresadas

    - La descripción cambia según las coins ingresadas

    - Título y descripción se ven perfectamente en comercio, tanto un jugador como el otro

     

    Pasos a seguir:

    Parte cliente

     

     

    -  Descompilamos root y abrimos uitooltip.py, dentro de uitooltip.py buscamos 

    if 50026 == itemVnum:
    

    bajo de ese if añadimos el siguiente elif:

    elif 80018 == itemVnum:
    	if 0 != metinSlot[0]:
    		name = item.GetItemName()
    		cantidad = metinSlot[0]
    		name += " ("
    		name += str(metinSlot[0])
    		name += ")"
    		self.SetTitle(name)
    		self.AppendDescription("Cupón por valor de "+str(cantidad)+" Coins. Este objeto es comerciable." , 26)
    		self.ShowToolTip()
    	else:
    		name = item.GetItemName()
    		self.SetTitle(name)
    		self.AppendDescription("Puedes ingresar coins a este objeto para después comerciarlo." , 26)
    		self.ShowToolTip()
    
    

    Cuidado con las tabulaciones, debe quedar así:

     

     

    a80ea5a755676b8ee99303ffc4fbf033.png

     

     

     

    Ya tenemos la parte del root hecha. Ahora descompilamos locale.

     

    Abrimos item_list.txt y buscáis el item 80018. Si lo tenéis dejadlo de esta manera, y si no lo tenéis agregadlo así:

    80018	ETC	icon/item/90009.tga
    

    Ahora en el item_proto.xml ponéis esta linea:

    <ItemDef Vnum="80018" Name="Cupon de Coins" LocalizedName="Cupón de Coins" Type="18" SubType="0" Weight="0" Size="1" AntiFlags="0" Flags="8192" WearFlags="0" ImmuneFlags="0" Gold="0" ShopBuyPrice="0" LimitType0="0" LimitValue0="0" LimitType1="0" LimitValue1="0" ApplyType0="0" ApplyValue0="0" ApplyType1="0" ApplyValue1="0" ApplyType2="0" ApplyValue2="0" Value0="0" Value1="0" Value2="0" Value3="0" Value4="0" Value5="0" Socket0="0" Socket1="0" Socket2="0" RefinedVnum="0" RefineSet="0" AlterToMagicItemPercent="0" Specular="0" GainSocketPercent="0" AddonType="0"  />
    
     
    Compilais el item_proto, el locale y el root y lo metéis en la carpeta pack.

     
    Parte servidor

    Para proto en txt

    Abrimos item_names.txt y ponemos
    80018	Cupón de Coins
    

    después abrimos item_proto.txt y introducimos

    80018	±³È¯±Ç	ITEM_QUEST	0	1	NONE	LOG	NONE	NONE	0	0	0	0	0	LIMIT_NONE	0	LIMIT_NONE	0	APPLY_NONE	0	APPLY_NONE	0	APPLY_NONE	0	0	0	0	0	0	0	0	0	0

    Para proto en SQL (Navicat)

    Introducimos la siguiente query (No testeada, uso txt):
    INSERT INTO `player.item_proto` VALUES ('80018', 0xB1B3C8AFB1C7, 0x4375706F6E20646520436F696E73, '18', '0', '0', '1', '0', '8192', '0', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '-1', '-1', '-1', '-1', '-1', '-1', '0', '0', '0');

    Ahora la quest (En LIMIT_COINS cambiáis el máximo de Coins que se pueden ingresar de golpe):
    quest cupon_coins begin
    	state start begin
    		function ingresar()
    			local LIMIT_COINS = 10000
    			say_title("Cupón de Coins - Ingresar")
    			say("¿Cuantas Coins deseas ingresarle?")
    			say_reward("Dispones de "..pc.get_coins().." Coins")
    			local coi = tonumber(input())
    			if coi > LIMIT_COINS then say("El número máximo de coins a ingresar[ENTER]son "..LIMIT_COINS.."") return end
    			if coi > 0 and coi < LIMIT_COINS then
    				if pc.get_coins() < coi then
    					say("No tienes suficientes coins.")
    					return
    				else
    					pc.change_coins(-coi)
    					item.set_socket(0,coi+item.get_socket(0))
    					say("Has ingresado "..coi.." coins al cupón.")
    					char_log(80018, "ITEM", "Ingreso de "..coi.." Coins")
    					return
    				end
    			end
    		end
    			
    		when 80018.use begin
    			if item.get_socket(0) == 0 then
    				say_title("Cupón de Coins")
    				say("El cupón está vacío, ¿Deseas")
    				say("ingresarle Coins?")
    				local a = select("Ingresar coins","Cancelar")
    				if a == 1 then
    					cupon_coins.ingresar()
    				end
    			else
    				say_title("Cupón de Coins")
    				say("El cupón tiene "..item.get_socket(0).." Coins.")
    				say("¿Que deseas hacer?")
    				local b = select("Retirar","Poner más Coins","Cancelar")
    				if b == 1 then
    					say_title("Cupón de Coins - Retirar")
    					say("Has retirado las "..item.get_socket(0).." Coins[ENTER]disponibles")
    					pc.change_coins(item.get_socket(0))
    					item.set_socket(0,0)
    					char_log(80018, "ITEM", "Retiro de "..item.get_socket(0).." Coins")
    				elseif b == 2 then
    					cupon_coins.ingresar()
    				end
    			end
    		end
    	end
    end	

     
     
    Si surge algún problema no dudéis en decirlo ^^
     

     

  3. Os traigo una quest que he creado para poner los items en el shop_item sin tener que ir poniendo 1 a 1 (la vagancia)

    quest item_to_shop begin
    	state start begin
    		function change_flag()
    			say("Para que tienda deseas poner los[ENTER]objetos")
    			local t = tonumber(input())
    			if t >0 then
    				say("Has puesto la tienda "..t.."")
    				game.set_event_flag("item_to_shop",t)
    				return
    			end
                    end
    
    		when 20095.take with pc.is_gm() begin
    			local ITEM_PARA_CAMBIAR_FLAG = 2
    			local item,flag,cantidad = item.get_vnum(),game.get_event_flag("item_to_shop"),item.get_count()
    			if flag == 0 then
    				item_to_shop.change_flag()
    			else
    				if item == ITEM_PARA_CAMBIAR_FLAG then
    					item_to_shop.change_flag()
    				else
    					mysql_query("INSERT INTO  player.shop_item  (shop_vnum, item_vnum, count) VALUES ('"..flag.."', '"..item.."', '"..cantidad.."')")
    					chat("Item "..item.." ("..cantidad..") agregado a la NPC "..flag.."")
    				end
    			end
    		end
    	end
    end
    
  4. Hola chicos, os traigo un sencillo sistema de noticias que serán más cómodas para el usuario y para el staff. Este sistema lee las noticias a traves de un txt y si el usuario aún no lo ha leído le manda un mp con información.

     

    Una de las ventajas de este sistema es que no hace falta ningún tipo de reload o /e, ya que lee el qf a través de un txt y solo ejecuta la función si el qf del jugador es menor.

     

    Empezamos

     

    Abrimos game.py:

     

    Debajo de 

    "mall"
    

    ponemos

    "open_notice_info"		: self.__open_notice_info,
    "write_notice_info"		: self.__write_notice_info,
    

    Luego buscamos

    __InGameShop_Show(self,url):
    

    y bajo de ese def ponemos

    def __open_notice_info(self):
    	self.interface.RegisterGameMasterName("<--System-->")
    	self.interface.RecvWhisper("<--System-->")
    		
    def __write_notice_info(self,text):
    	chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, "<--System-->", text.replace("_", " "))
    

    Debe quedar así:

     

     

    6a2af1752188b6145fecbf668c5fce87.png

     

     

     

    Vamos ahora a la parte quest

    Cogemos esta quest

     

     

    quest noticias begin
    	state start begin
    		function read_notice_line(l)
    			return readline("/quest/system/noticias/noticias.txt", l)
    		end
    		
    		when login begin
    			local qf = readline("/quest/system/noticias/qf.txt", 1)
    			local lineas = 0
    			if tonumber(qf) > pc.getqf("noticias_ver") then
    				for line in io.lines("/quest/system/noticias/noticias.txt") do lineas = lineas + 1 end
    				cmdchat("open_notice_info")
    				for i = 1,lineas do
    					cmdchat("write_notice_info "..string.gsub(noticias.read_notice_line(i), ' ', '_'))
    				end
    				pc.setqf("noticias_ver", qf)
    			end
    		end
    	end
    end
    

     

     

    Y creamos un fichero en nuestra carpeta quest llamado noticias.quest, dentro metemos la quest, guardamos y cerramos.

     

    Ahora creamos una carpeta en quest llamada System, y dentro de ella otra llamada noticias. En esa carpeta creamos un archivo llamado qf.txt con un 0 dentro, y creamos otro llamado noticias.txt que puede estar en blanco.

     

    ¡Atención! 

    Es probable que no tengáis la función readline, así que aquí os la dejo.

     

     

    function readline(path, x)
        local linetable = {}
        for line in io.lines(path) do
            table.insert(linetable, line)
        end
        return linetable[x]
    end 

     

     

     

    Para terminar añadimos a quest_functions estas dos funciones:

    readline

    io.lines

     

    Ya lo demás es hacer qc y reload q o reboot y ya tendréis listo esto.

     

     

    Como añadir noticias.

    Para añadir una nueva versión de noticias deberéis sumar 1 al qf.txt, por ejemplo si está en 11 poner 12 o si está en 0 poner 1.

     

    Y en noticias.txt debéis poner cada noticia en una linea.

     

     

    Así queda:

    fb02ee12e81b19091cfd6f1dbea000f2.gif

  5. Bueno, yo tenía este problema y si a alguien le puedo ayudar mejor.

     

    Resulta que al hacer when login en el pet system no invocaba la mascota, así que "inventé" un cmdchat para usar el objeto.

     

    En vuestra quest del pet_system deberíais poner algo así, cambiando el qf por como vosotros tengáis lo de el pet:

    when login with pc.getqf("pet_item") > 0 begin
    	local peti = pc.getqf("pet_item")
    	cmdchat("summon_pet "..peti.."")
    end
    

    Y en el game.py debéis poner esto:

    Si tenéis 4 inventarios en vez de *2 ponéis *4

    def __summon_pet(self,vnumpet):
    	for i in xrange(player.INVENTORY_PAGE_SIZE*2):
    		YourItemID = player.GetItemIndex(i)
    		if YourItemID == int(vnumpet):
    			net.SendItemUsePacket(i)
    			break  
    

    bajo de "mall" ponéis

    "summon_pet"			: self.__summon_pet,
    

    Es una tontería pero es útil y a mi me vino bien para mi sistema.

×
×
  • Crear nuevo...