-
Posts
189 -
Joined
-
Last visited
Everything posted by Rose
-
@eloriginal, creo que estás un poco apresurado porque supiste hacer un panel login, si quieres vender mejor adquiere más conocimientos y agregale mejores cosas, porque si es solo un GUI (sin nada llamativo), no te lo van a comprar (y el que lo haga está loco, porque ya hay en la comunidad).
-
No me deja editar el post. Ya probé y me funcionó bien, junte algunas cosas del código de @Tomas y @Arsilex y va perfecto. Olviden las otras preguntas, tengo otra: si quiero que el objeto se mueve hacía adelante según donde esté mirando el jugador( o la cámara ), cómo lo podría hacer? intente copiando algunas cosas de lo que paso Tomas, pero el objeto no se mueve de esa manera, a veces si estoy mirando al frente sale para los lados, si miro atrás sale para adelante, etc. Estoy usando el bone_attach y la función exportada setElementBonePositionOffset, no sé si tenga algo que ver. function drawing(button) local obj = vlb and tbl[vlb] or false if obj then local action = c_Buttons[button] local camRotX, camRotY, camRotZ = getCameraRotation() camRotZ = camRotZ % 360 local remainder = math.mod ( camRotZ, 90 ) camRotZ = camRotZ + roundRotation ( remainder ) local distanceX = c_speed * math.cos(camRotZ) local distanceY = c_speed * math.sin(camRotZ) c_Ped, c_Bone, c_Po.x, c_Po.y, c_Po.z, c_Po.rx, c_Po.ry, c_Po.rz = exports.bone_attach:getElementBoneAttachmentDetails(c_element) if action == "forward" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x + distanceX, c_Po.y + distanceY, c_Po.z) -- update offsets elseif action == "backward" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x - distanceX, c_Po.y - distanceY, c_Po.z) -- update offsets elseif action == "right" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x + distanceX, c_Po.y - distanceY, c_Po.z) -- update offsets elseif action == "left" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x - distanceX, c_Po.y + distanceY, c_Po.z) -- update offsets elseif action == "up" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x, c_Po.y, c_Po.z + c_speed) -- update offsets elseif action == "down" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x, c_Po.y, c_Po.z - c_speed) -- update offsets elseif action == "rotate+" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x, c_Po.y, c_Po.z, c_Po.rx, c_Po.ry, c_Po.rz + 1 * c_rotate ) -- update offsets elseif action == "rotate-" then exports.bone_attach:setElementBonePositionOffset (c_element, c_Po.x, c_Po.y, c_Po.z, c_Po.rx, c_Po.ry, c_Po.rz - 1 * c_rotate ) -- update offsets elseif action == "save" then stopEditionMode( ) end end end function getCameraRotation () local px, py, pz, lx, ly, lz = getCameraMatrix() local rotz = 6.2831853071796 - math.atan2 ( ( lx - px ), ( ly - py ) ) % 6.2831853071796 local rotx = math.atan2 ( lz - pz, getDistanceBetweenPoints2D ( lx, ly, px, py ) ) --Convert to degrees rotx = math.deg(rotx) rotz = -math.deg(rotz) return rotx, 180, rotz end function roundRotation ( rot ) if rot < 45 then return -rot else return (90 - rot) end end Todo está funcionando bien, solo ese pequeño detalle.
-
Gracias a los dos, voy a probar más tarde (o quizás mañana). Pero tengo una pregunta, si hago el movimiento del objeto desde client, los demás pueden ver hacía donde lo estoy moviendo? supongo que sí, ya que es cambio de posición, pero tengo esa duda ya que lo tengo hecho mediante un trigger a server, una variable marca la acción ("w", por ejemplo) y en server se mueve hacía adelante. Otra pregunta, si quiero que el movimiento del objeto A no afecte al objeto B, tengo que almacenar una variable en una tabla para cada objeto que se cree?
-
Tengo una duda y espero la entiendan. Tengo un inventario (gridlist) donde hay 4 slots (rows), y lo qur quiero es crear un objeto para cada row, o sea, si selecciono la row 1 se crea un objeto, luego puedo mover ese objeto con WASD hacia cualquier lado; mi duda es que, al crear el objeto de la row 2 y lo trato de mover con WASD, seguro se bugeara y no se moverá un objeto, sé que se debe usar tablas pero no se me ocurre nada. Si entendieron lo que digo les agradecería si pueden darme un ejemplo, porque me confundo mucho a veces con el uso de tablas. Y para resumir: que el objeto A no interfiera con el B, y el B no interfiera con el A, C, D, etc.
-
Tengo una duda y espero la entiendan. Tengo un inventario (gridlist) donde hay 4 slots (rows), y lo qur quiero es crear un objeto para cada row, o sea, si selecciono la row 1 se crea un objeto, luego puedo mover ese objeto con WASD hacia cualquier lado; mi duda es que, al crear el objeto de la row 2 y lo trato de mover con WASD, seguro se bugeara y no se moverá un objeto, sé que se debe usar tablas pero no se me ocurre nada. Si entendieron lo que digo les agradecería si pueden darme un ejemplo, porque me confundo mucho a veces con el uso de tablas. Y para resumir: que el objeto A no interfiera con el B, y el B no interfiera con el A, C, D, etc.
-
No sé si con onClientPlayerDamage puedas, no me acuerdo si es que estaba bug y no detectaba el daño del spray, o tal vez me estoy confundiendo de evento. Intenta con ese evento, haz que si el jugador le hace daño con el spray le suba la vida al afectado; pero si eso no te sirve puedes fácilmente usar onClientPlayerWeaponFire y getDistanceBetweenPoints3D.
-
Pues usa onClientPlayerSwitch y un outputchatbox
-
Tengo que pasar las rows de la gridlist a server para guardarlas?
-
Es un ejemplo, y lo que hace es que cuando el jugador que esté en el "Group_1" se logee se ejecute un código...
-
Hola, quisiera saber qué tengo que usar para poder guardar las cosas escritas en la gridlist (y las row's). Estoy haciendo un inventario y en la columna 1 están los objetos, en la columna 2 el "estado" de ese slot, si está ocupado o libre. El problema es que si el slot estaba ocupado, y me salgo del server, obviamente vuelve a cambiar a "libre" porque no tengo nada hecho para guardar la gridlist; el objeto y la ID también se pierden al salir. ¿Qué funciones puedo usar?
-
[APORTE] Ropa de CJ personalizada con shaders
Rose replied to aka Blue's topic in Recursos y aportes
Voy a probarlo cuando pueda, gracias. -
Gracias a todos, ya funciona.
-
[APORTE] Ropa de CJ personalizada con shaders
Rose replied to aka Blue's topic in Recursos y aportes
No sé si tenga algo que ver, pero, ¿sabes si puedo hacer algo similar, pero para cambiar el color de un objeto? algo así como agarrar una puerta y ponerle un color púrpura, amarillo, rojo, amarillo, etc. No encontré el mejor ejemplo pero me refiero a esto (tampoco sé si se necesitan shaders, pero por lo que se ve, sí): (tampoco quiero que me des una explicación de TODO, porque ya en el video está, pero quiero saber si puedo usar el mismo procedimiento para cambiarle el color a un objeto) -
Pues no he logrado que funcione como quiero y lo de @Simple01 no lo entiendo...
-
No he probado esa función pero, ¿no es lo mismo hacer esto? function locatePlayer() local vehicle = getPedOccupiedVehicle( localPlayer ) local px, py, pz = getElementPosition( vehicle ) fx = createEffect("fire", px, py, pz+1) end addCommandHandler ( "faier", locatePlayer ) addEventHandler("onClientPreRender", root, function() if isElement(fx) then local vehicle = getPedOccupiedVehicle( localPlayer ) local px, py, pz = getElementPosition( vehicle ) setElementPosition(fx,px, py, pz+1) end end) De todas formas si alguien sabe arreglar el error que da el attachEffect sería bueno que explicaran bien cual es el error, porque estoy traumado con los error de 'a userdata value' D:
-
No me funciona... local table_category = { --[Categoría] = { { "Nombre", "ID" } }, { "Gorros", { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}}, { "Gorras" , { {"Jockey", 1550},{"Name_4", 2},{"Name_5", 3}}}, { "Lentes" , { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Relojes" , { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mochilas", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Mascaras", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Armas de mentira", { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}}, { "Otros", { { "Jockey", 1},{"Name_4", 2},{"Name_5", 3}}} } function getIndexFromCategory (category) for k, v in ipairs(table_category) do if ( v == category ) then return k end end return false end -- Desde aquí lo tengo en la función donde se da click en 'GRIDs' local category = guiGridListGetItemText ( source, row, 1 ) local index = getIndexFromCategory(category) if ( index ) then for _, id in ipairs ( table_category[index][2] ) do local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end
-
Concuerdo con el tipo de los aportes (Blue) y el otro que no conozco (Epson) pero tiene a los teletubbies endemoniados en su portada D:
-
¡Feliz año! Y sobre el tiburón: "Lo mismo pero más barato" Bienvenido.
-
@#Dv^ gracias. Otra cosa, cuando le doy click a las categorías no me salen lo que tiene que ser (los nombres y la ID que están en la tabla), no me aparece nada. if ( table_category [ category ] ) then for _, id in pairs ( table_category [ category ]) do local row = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, row, 1, id[1], false, false ) end end
-
Sin embargo aunque tengas eso vas a tener que hacer unas divisiones, creo
-
@Seyer usa guiSetText para los edit
-
Te da algún error eso? debe de funcionar...
-
function verinfo () Ventana_de_infotana_de_info = guiCreateWindow((screenW - 422) / 2, (screenH - 325) / 2, 422, 325, "Mi información by Seyer", false) guiWindowSetMovable(Ventana_de_info, false) guiWindowSetSizable(Ventana_de_info, false) guiSetVisible(Ventana_de_infotana_de_info, false) label_de_usuario = guiCreateLabel(12, 27, 119, 30, "Usuario:", false, Ventana_de_info) guiSetFont(label_de_usuario, "default-bold-small") guiLabelSetColor(label_de_usuario, 0, 254, 233) label_de_nombre_actual = guiCreateLabel(12, 67, 119, 30, "Nombre actual:", false, Ventana_de_info) guiSetFont(label_de_nombre_actual, "default-bold-small") guiLabelSetColor(label_de_nombre_actual, 0, 254, 233) label_de_contrasena = guiCreateLabel(12, 107, 119, 30, "Contraseña:", false, Ventana_de_info) guiSetFont(label_de_contrasena, "default-bold-small") guiLabelSetColor(label_de_contrasena, 0, 254, 233) label_de_serial = guiCreateLabel(12, 147, 119, 30, "Serial:", false, Ventana_de_info) guiSetFont(label_de_serial, "default-bold-small") guiLabelSetColor(label_de_serial, 0, 254, 233) label_de_ip = guiCreateLabel(12, 187, 119, 30, "IP:", false, Ventana_de_info) guiSetFont(label_de_ip, "default-bold-small") guiLabelSetColor(label_de_ip, 0, 254, 233) label_de_ultimo_inicio_de_sesion = guiCreateLabel(12, 227, 129, 30, "Ultimo inicio de sesión:", false, Ventana_de_info) guiSetFont(label_de_ultimo_inicio_de_sesion, "default-bold-small") guiLabelSetColor(label_de_ultimo_inicio_de_sesion, 0, 254, 233) edit_de_usuario = guiCreateEdit(177, 26, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_usuario, true) edit_de_nombre_actual = guiCreateEdit(177, 67, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_nombre_actual, true) edit_de_contrasena = guiCreateEdit(177, 106, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_contrasena, true) edit_de_serial = guiCreateEdit(177, 147, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_serial, true) edit_de_ip = guiCreateEdit(177, 188, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_ip, true) edit_de_ultimo_inicio_de_sesion = guiCreateEdit(177, 226, 235, 31, "", false, Ventana_de_info) guiEditSetReadOnly(edit_de_ultimo_inicio_de_sesion, true) boton_de_cerrar = guiCreateButton(12, 270, 400, 45, "Cerrar", false, Ventana_de_info) guiSetFont(boton_de_cerrar, "default-bold-small") guiSetProperty(boton_de_cerrar, "NormalTextColour", "FF00FEE9") end addEventHandler("onClientResourceStart", resourceRoot, verinfo) addCommandHandler("info", function() if not guiGetVisible(Ventana_de_infotana_de_info) then showCursor(true) guiSetVisible(Ventana_de_infotana_de_info, true) else showCursor(false) guiSetVisible(Ventana_de_infotana_de_info, false) end ) Si el panel es solo de información sobre el usuario, no necesitas hacer nada en server. Con esto te sirve par abrir/cerrar la GUI. Y no sé si te diste cuenta, pero tu error es que tenías un paréntesis de más: addCommandHandler("info", verinfo) ) <-- AQUI Aunque también pudo ser un error de tu GUI, no miré bien.
-
Muchas gracias, eso era lo que quería, me ahorra bastantes lineas ya que son varios objetos para cada categoría. Pero tengo una pregunta, las categorías en la gridlist aparecen aleatoriamente, quizás por el 'pairs', pero cuando se lo cambió a ipairs no aparece nada en la gridlist. local table_category = { --[Categoría] = { { "Nombre", "ID" } }, [ "Gorros" ] = { {"Sombrero", 1},{"Name_2", 2},{"Name_3", 3}}, [ "Gorras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Lentes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Relojes" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Mochilas" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Mascaras" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Armas de mentira" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}}, [ "Otros" ] = { {"Jockey", 1},{"Name_4", 2},{"Name_5", 3}} } -- Quiero que esta tabla aparezca asi: --[[ Gorros Gorras Lentes ..etc ]] -- Pero me aparece así: --[[ Lentes Otros Mascaras Mochilas etc... ]] Y así lo tengo: -- // De esta forma me funciona, pero aparecen en la grid de forma random, por obvias razones... for i, v in pairs ( table_category ) do local r = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false ) end -- // Pero si cambio el pairs por ipairs no me aparece nada en la gridlist for i, v in ipairs ( table_category ) do local r = guiGridListAddRow ( GRIDs ) guiGridListSetItemText ( GRIDs, r, 1, tostring ( i ), false, false ) end
-
De esa forma lo tengo, pero resulta que tengo un venta de objetos, y antes de comprar estos objetos tienes que elegir una categoria(mascaras, anillos, lentes), eso ya lo tengo hecho, cuando eliges una categoría se crea una gui y te marca los objetos que hay. Mi pregunta es, si tengo que crear una tabla para cada categoría o puedo hacer una tabla y asignar un nombre de la forma que puse arriba. No sé si me estoy explicando bien... Tengo que hacer esto: mascaras = { } lentes = { } (crearlas por separado) O puedo hacer algo como esto: Tipos = { ['mascaras'] = 1310,1550, ['lentes']= 842 } (lo que quisiera hacer, pero no sé cómo hacer para sacar los datos de máscaras solamente) PD: tampoco sé si la estructura de la tabla sea correcta, pero creo que entienden más o menos lo que quiero