Jump to content

Skins distinto para una sola arma


DropDead41

Recommended Posts

Hola, estoy buscando la forma de poder remplazar las pieles de las distintas armas de una misma ID con estas lineas que recoji de un foro, pero solo me cambia el arma en la espalda y no cuando la llevo en las manos

function remplace() 
    txd1 = engineLoadTXD ("armas/ak47.txd"); 
    dff1 = engineLoadDFF ("armas/ak47.dff", 0); 
    txd2 = engineLoadTXD ("armas/m4.txd"); 
    dff2 = engineLoadDFF ("armas/m4.dff", 0); 
end 
addEventHandler("onClientResourceStart",root,remplace) 
  
function skinsduplicados() 
   local armas1 = getElementData(localPlayer,"currentweapon_1") 
   if armas1 == "M4A1" then 
        engineImportTXD (txd1, 356); 
        engineReplaceModel (dff1, 356); 
    elseif armas1 == "M16A4 ACOG" then 
        engineImportTXD (txd2, 356); 
        engineReplaceModel (dff2, 356); 
   -- elseif armas1 == "M4" then 
    --    engineRestoreModel(356) 
   -- else 
   --     engineRestoreModel(356) 
    end 
end 
addEventHandler("onClientPlayerWeaponSwitch",localPlayer,skinsduplicados) 

Espero que alguien me pueda dar una mano, desde ya muchisimas gracias.

Link to comment

Espero que sepas que las funciones que reemplazan modelos RenderWare en MTA son bastante limitadas técnicamente hablando, y encontrarás bugs como estos. También que por razones muy obvias, cada vez que reemplaces el modelo del arma, el cliente verá a todos los jugadores remotos con el arma que ha sido reemplazada.

A lo mejor se me escapa un detalle en el código, por ende podrías revisar bien el código y esperar la opinión de otra persona. Después, ve si al cambiar de arma puedes ver el modelo ya reemplazado. Si sigue sin verse, podrías experimentar un poco y confirmar el error desactivando el recurso que crea objetos de armas en la espalda del personaje, reiniciar MTA y entrar al servidor solo con el recurso que reemplazaría las armas, y algo simple como el recurso 'Freeroam'.

Link to comment
Espero que sepas que las funciones que reemplazan modelos RenderWare en MTA son bastante limitadas técnicamente hablando, y encontrarás bugs como estos. También que por razones muy obvias, cada vez que reemplaces el modelo del arma, el cliente verá a todos los jugadores remotos con el arma que ha sido reemplazada.

A lo mejor se me escapa un detalle en el código, por ende podrías revisar bien el código y esperar la opinión de otra persona. Después, ve si al cambiar de arma puedes ver el modelo ya reemplazado. Si sigue sin verse, podrías experimentar un poco y confirmar el error desactivando el recurso que crea objetos de armas en la espalda del personaje, reiniciar MTA y entrar al servidor solo con el recurso que reemplazaría las armas, y algo simple como el recurso 'Freeroam'.

Es posible con shaders

Link to comment
Espero que sepas que las funciones que reemplazan modelos RenderWare en MTA son bastante limitadas técnicamente hablando, y encontrarás bugs como estos. También que por razones muy obvias, cada vez que reemplaces el modelo del arma, el cliente verá a todos los jugadores remotos con el arma que ha sido reemplazada.

A lo mejor se me escapa un detalle en el código, por ende podrías revisar bien el código y esperar la opinión de otra persona. Después, ve si al cambiar de arma puedes ver el modelo ya reemplazado. Si sigue sin verse, podrías experimentar un poco y confirmar el error desactivando el recurso que crea objetos de armas en la espalda del personaje, reiniciar MTA y entrar al servidor solo con el recurso que reemplazaría las armas, y algo simple como el recurso 'Freeroam'.

Tiene que funcionar de la misma manera que cuando remplazas las pieles de los vehiculos, o de los players, todos ven ese remplazo.. no veo donde falla, no soy capas de encontrarle el error

Link to comment

Intenta con esto:

  
function remplace() 
    txd1 = engineLoadTXD ("armas/ak47.txd"); 
    dff1 = engineLoadDFF ("armas/ak47.dff", 0); 
    txd2 = engineLoadTXD ("armas/m4.txd"); 
    dff2 = engineLoadDFF ("armas/m4.dff", 0); 
end 
addEventHandler("onClientResourceStart",root,remplace) 
  
function skinsduplicados() 
if source == localPlayer then 
   local armas1 = getElementData(localPlayer,"currentweapon_1") 
   if armas1 == "M4A1" then 
        engineImportTXD (txd1, 356); 
        engineReplaceModel (dff1, 356); 
    elseif armas1 == "M16A4 ACOG" then 
        engineImportTXD (txd2, 356); 
        engineReplaceModel (dff2, 356); 
   -- elseif armas1 == "M4" then 
    --    engineRestoreModel(356) 
   -- else 
   --     engineRestoreModel(356) 
    end 
end 
end 
addEventHandler("onClientPlayerWeaponSwitch",localPlayer,skinsduplicados) 
  

Link to comment
Es posible con shaders

En ese caso no estoy seguro de que se pueda cambiar el modelo, solo la textura por métodos muy simples, excepto si recreas el modelo del arma mediante shaders y para eso... Uff

Tiene que funcionar de la misma manera que cuando remplazas las pieles de los vehiculos, o de los players, todos ven ese remplazo.. no veo donde falla, no soy capas de encontrarle el error

No sé muy bien lo que quieres pero deja ver si entendí: ¿Quieres que el modelo se cambie y que todos vean el modelo cambiado (osea que para todos les cambie el arma) o que el jugador cambie el arma solamente para el, y que esta sea vista por todas? Si es este último, por temas de sincronización quizás prefieras cambiar únicamente la textura del arma mediante shaders como lo propuso Tomas, ya que es lo más práctico que hay hasta lo que sé. Hace mucho no me dedico al scripting, pero no creo que halla un método simple de hacerlo. Quizás reemplazando el ID que indicaste por un DFF vacio o con transparencia para luego recrear el arma con un objeto con la posición actualizada respecto a la de las manos del jugador... Lo cual sería mucho mas complejo.

Link to comment
Intenta con esto:
  
function remplace() 
    txd1 = engineLoadTXD ("armas/ak47.txd"); 
    dff1 = engineLoadDFF ("armas/ak47.dff", 0); 
    txd2 = engineLoadTXD ("armas/m4.txd"); 
    dff2 = engineLoadDFF ("armas/m4.dff", 0); 
end 
addEventHandler("onClientResourceStart",root,remplace) 
  
function skinsduplicados() 
if source == localPlayer then 
   local armas1 = getElementData(localPlayer,"currentweapon_1") 
   if armas1 == "M4A1" then 
        engineImportTXD (txd1, 356); 
        engineReplaceModel (dff1, 356); 
    elseif armas1 == "M16A4 ACOG" then 
        engineImportTXD (txd2, 356); 
        engineReplaceModel (dff2, 356); 
   -- elseif armas1 == "M4" then 
    --    engineRestoreModel(356) 
   -- else 
   --     engineRestoreModel(356) 
    end 
end 
end 
addEventHandler("onClientPlayerWeaponSwitch",localPlayer,skinsduplicados) 
  

Nope, sigue igual, me remplaza el arma cuando la tengo colgada en la espalda, pero no me deja ponermela en la mano y disparar, podriamos arreglar una hora y mostrartelo para que lo veas si quieres.

Link to comment
http://www.dailymotion.com/video/x27utm6_scripting-simulando-las-armas-originales-en-mta-sa-wissen_videogames

¿Estás intentando hacer lo del vídeo?, usando tablas, dejando invisible el arma original, remplazando los skins de las armas por objetos y usando bone attach puedes hacerlo. Así cada jugador podrá tener snipers u otras armas diferentes y no habrá ningún problema.

Exactamente eso es lo quiero hacer, pero no funciona ese script.. sera que me puede guiar?

Link to comment
  
function Changetxddffweapon ( prevSlot, newSlot ) 
    if getPedWeapon(getLocalPlayer(),newSlot) == 31 then 
        engineImportTXD(engineLoadTXD("armas/ak47.txd"), 356) 
        engineReplaceModel(engineLoadDFF("armas/ak47.dff", 356), 356) 
    else 
        engineImportTXD(engineLoadTXD("armas/m4.txd"), 356) 
        engineReplaceModel(engineLoadDFF("armas/m4.dff", 356), 356) 
    end 
end 
addEventHandler ( "onClientPlayerWeaponSwitch", getRootElement(), Changetxddffweapon ) 
  

             
setTimer (function () 
               for _, v in ipairs( getElementsByType 'player' ) do 
                if v ~= localPlayer then 
                  if getPedWeapon(v) == 31 then 
                    engineImportTXD(engineLoadTXD("armas/ak47.txd"), 356) 
                    engineReplaceModel(engineLoadDFF("armas/ak47.dff", 356), 356) 
                  else 
                    engineImportTXD(engineLoadTXD("armas/m4.txd"), 356) 
                    engineReplaceModel(engineLoadDFF("armas/m4.dff", 356), 356) 
                  end 
                end 
               end 
               end, 250, 0) 

Pruebalo. Pero realmente tienes que tomar en cuenta lo que dice diegofkda ya que el cambio es en general para todas las armas. Realmente no se hace por jugador sino que el cambio se hace general.

Dale amigo, lo probare aver que tal

Link to comment
  
function Changetxddffweapon ( prevSlot, newSlot ) 
    if getPedWeapon(getLocalPlayer(),newSlot) == 31 then 
        engineImportTXD(engineLoadTXD("armas/ak47.txd"), 356) 
        engineReplaceModel(engineLoadDFF("armas/ak47.dff", 356), 356) 
    else 
        engineImportTXD(engineLoadTXD("armas/m4.txd"), 356) 
        engineReplaceModel(engineLoadDFF("armas/m4.dff", 356), 356) 
    end 
end 
addEventHandler ( "onClientPlayerWeaponSwitch", getRootElement(), Changetxddffweapon ) 
  

             
setTimer (function () 
               for _, v in ipairs( getElementsByType 'player' ) do 
                if v ~= localPlayer then 
                  if getPedWeapon(v) == 31 then 
                    engineImportTXD(engineLoadTXD("armas/ak47.txd"), 356) 
                    engineReplaceModel(engineLoadDFF("armas/ak47.dff", 356), 356) 
                  else 
                    engineImportTXD(engineLoadTXD("armas/m4.txd"), 356) 
                    engineReplaceModel(engineLoadDFF("armas/m4.dff", 356), 356) 
                  end 
                end 
               end 
               end, 250, 0) 

Pruebalo. Pero realmente tienes que tomar en cuenta lo que dice diegofkda ya que el cambio es en general para todas las armas. Realmente no se hace por jugador sino que el cambio se hace general.

No, me da el mismo resultado que el anterior, me cambia el arma unicamente en la espalda y no ponermela en la mano para disparar

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...