DropDead41 Posted December 5, 2014 Share Posted December 5, 2014 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
diegofkda Posted December 6, 2014 Share Posted December 6, 2014 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
Tomas Posted December 6, 2014 Share Posted December 6, 2014 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
DropDead41 Posted December 6, 2014 Author Share Posted December 6, 2014 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
Tomas Posted December 7, 2014 Share Posted December 7, 2014 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
diegofkda Posted December 7, 2014 Share Posted December 7, 2014 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
DropDead41 Posted December 7, 2014 Author Share Posted December 7, 2014 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
Tomas Posted December 7, 2014 Share Posted December 7, 2014 Estoy muy ocupado ultimamente, así que dudo poderte ayudar. Link to comment
DropDead41 Posted December 8, 2014 Author Share Posted December 8, 2014 Estoy muy ocupado ultimamente, así que dudo poderte ayudar. Ok no hay problema, de todos modos no funciona, vere si mañana con tiempo le sigo dedicando tiempo a ese script.. la verdad que serviria mucho para aportar Link to comment
DBY Posted December 8, 2014 Share Posted December 8, 2014 http://www.dailymotion.com/video/x27utm ... 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. Link to comment
DBY Posted December 8, 2014 Share Posted December 8, 2014 Ya lo borré de mi ordenador, hace tiempo que lo hice. Es fácil de hacer si tienes un poco de idea. Link to comment
DBY Posted December 8, 2014 Share Posted December 8, 2014 No tengo tiempo para hacerlo, ya lo hice en su momento. Link to comment
DropDead41 Posted December 8, 2014 Author Share Posted December 8, 2014 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
DropDead41 Posted December 8, 2014 Author Share Posted December 8, 2014 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
DropDead41 Posted December 8, 2014 Author Share Posted December 8, 2014 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
Recommended Posts