Baguera 0 Posted March 9 Share Posted March 9 Alguém sabe como eu posso fazer para um player morrer sem matar o outro na troca de tiro, no script de HS os dois conseguem morrer se os mesmos acertarem tiro um ao outro. eu queria que nessa ocasião apenas um morresse. Link to post
Administrators Tut 321 Posted March 9 Administrators Share Posted March 9 Thread's been moved into the scripting section, as it's not a client/support question. 1 Link to post
andr0xy 204 Posted March 9 Share Posted March 9 Olá. Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem. Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado). Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo. Spoiler -- Client-side addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss) cancelEvent() if attacker == localPlayer then triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss) end end) -- Server-side local function doHeadshot(...) end local function doRemoveArmor(...) end local function doRemoveHealth(...) end addEvent("onPlayerDamageSync", true) addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss) -- O `client` aqui seria o jogador que está atacando o `target` (alvo) if isPedDead(client) then return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true) end local targetHealth = getElementHealth(target) local targetArmor = getPedArmor(target) -- Lógica para aplicar o headshot, remover colete e depois vida if bodypart == 9 then return doHeadshot(...) end if targetArmor > 0 then return doRemoveArmor(...) end if targetHealth > 0 then return doRemoveHealth(...) end end) Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. Link to post
Baguera 0 Posted March 9 Author Share Posted March 9 1 hour ago, andr0xy said: Olá. Se você deseja realmente fazer isso, será necessário criar um sistema de dano/headshot totalmente do zero, sincronizando o cliente (jogador) ao servidor, pois apenas dessa forma seria possível. Eu já fiz algo assim, não é difícil, mas precisa ter certo conhecimento com a linguagem. Client-side: necessário apenas o evento onClientPlayerDamage, e a função dele seria enviar as informações de dano ao servidor, usando triggerServerEvent (pode usar triggerLatentServerEvent também, caso queira deixar ainda mais otimizado). As informações que devem ser enviadas, são: o source do evento (quem levou o dano), a weapon (arma), bodypart (parte do corpo) e o loss (dano dado). Server-side: no evento acionado pelo client-side, aquelas informações enviadas agora estarão presentes lá, no server-side. Uma vez com elas, basta trabalhar com algumas checagens e lógica para remover colete e vida, e também headshot. Para aquele problema não acontecer mais, você deve usar isPedDead no client (pessoa atacando), ou seja, se o jogador que estiver atacando morrer, não executará mais nada a partir disso, nenhum dano será aplicado ao alvo. Reveal hidden contents -- Client-side addEventHandler("onClientPlayerDamage", root, function(attacker, weapon, bodypart, loss) cancelEvent() if attacker == localPlayer then triggerServerEvent("onPlayerDamageSync", localPlayer, source, weapon, bodypart, loss) end end) -- Server-side local function doHeadshot(...) end local function doRemoveArmor(...) end local function doRemoveHealth(...) end addEvent("onPlayerDamageSync", true) addEventHandler("onPlayerDamageSync", root, function(target, weapon, bodypart, loss) -- O `client` aqui seria o jogador que está atacando o `target` (alvo) if isPedDead(client) then return outputChatBox(getPlayerName(client) .. " #fffffftentou te atacar estando morto!", target, 255, 255, 255, true) end local targetHealth = getElementHealth(target) local targetArmor = getPedArmor(target) -- Lógica para aplicar o headshot, remover colete e depois vida if bodypart == 9 then return doHeadshot(...) end if targetArmor > 0 then return doRemoveArmor(...) end if targetHealth > 0 then return doRemoveHealth(...) end end) Te dei um exemplo de como seria as coisas por trás, pois acredito que você está começando agora. O resto, você deve fazer. Peça ajuda aqui caso tenha dúvidas. Eu não tenho muita experiência com LUA, sei o básico. Link to post
andr0xy 204 Posted March 9 Share Posted March 9 Você pode aprender e tentar. - quaisquer dúvidas, pode mandar aqui mesmo, sobre o seu problema deste tópico. Nós não damos códigos totalmente prontos aos usuários, pois isso não iria incentivá-los a criar seus próprios scripts. Link to post
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now