Jump to content

Help


Recommended Posts

Client:

local gMe = getLocalPlayer() 
  
addEvent("doPedJump", true) 
addEvent("doPedEnter", true) 
addEvent("doPedExitVeh", true) 
  
addEventHandler("doPedJump", getLocalPlayer(), function(p, boolean) 
    setPedControlState(p, "jump", boolean) 
end) 
  
addEventHandler("doPedEnter", getLocalPlayer(), function(p, boolean) 
    setPedControlState(p, "enter_passenger", boolean) 
end) 
  
addEventHandler("doPedExitVeh", getLocalPlayer(), function(p, boolean) 
    setPedControlState(p, "enter_exit", boolean) 
end) 
  
  
-- DAMAGE ABFRAGE -- 
  
local pedTarget = {} 
local pedTimer = {} 
local pedShooting = {} 
  
local function doPedAttackOtherPlayer(ped) 
    if(isTimer(pedTimer[ped])) or (isPedInVehicle(ped)) then 
        killTimer(pedTimer[ped]) 
    end 
    if(isElement(ped)) then 
        pedTimer[ped] = setTimer(function() 
            if(isElement(ped)) then 
                local target = pedTarget[ped] 
                if(target) then 
                    local x, y, z = getElementPosition(ped) 
                    local x2, y2, z2 = getElementPosition(target) 
                    if(isLineOfSightClear(x, y, z, x2, y2, z2, true, false, false, false, false, false)) then 
                        if(getElementHealth(target) > 1) then 
                            if(pedShooting[ped] ~= true) then 
                                --[[ 
                                local x1, y1 = getElementPosition(ped) 
                                local x2, y2 = getElementPosition(target) 
                                    local rot = math.atan2(y2 - y1, x2 - x1) * 180 / math.pi 
                                    rot = rot-90 
                                    setPedRotation(ped, rot) 
                                    setPedAnimation(ped) 
                                    if(getPedControlState(ped, "fire") ~= true) then 
                                        setPedControlState(ped, "fire", true) 
                                    end 
                                    setPedAimTarget(ped, x2, y2, z2)]] 
                                setPedControlState(ped, "fire", true) 
                                pedShooting[ped] = true 
                            else 
                                local x1, y1, z1 = getElementPosition(ped) 
                                local x2, y2, z2 = getElementPosition(target) 
                                local rot = math.atan2(y2 - y1, x2 - x1) * 180 / math.pi 
                                rot = rot-90 
                                setPedRotation(ped, rot) 
                                setPedAimTarget(ped, x2, y2, z2) 
                            end 
                        else 
                            killTimer(pedTimer[ped]) 
                            pedShooting[ped] = false 
                            setPedControlState(ped, "fire", false) 
                        end 
                    else 
                        killTimer(pedTimer[ped]) 
                        pedShooting[ped] = false 
                        setPedControlState(ped, "fire", false) 
                    end 
                end 
            else 
                killTimer(pedTimer[ped]) 
            end 
        end, 500, -1) 
    else 
        killTimer(pedTimer[ped]) 
    end 
end 
  
addEventHandler("onClientPedDamage", getRootElement(), function(attacker) 
    if(getElementData(source, "bodyguard") == true) then 
        if(attacker) and (isElement(attacker)) then 
            if(getElementType(attacker) == "player") or (getElementType(attacker) == "vehicle") then 
                pedTarget[source] = attacker 
                doPedAttackOtherPlayer(source) 
            end 
        end 
    end 
end) 
  
-- onClientRender Func -- 
  
  
addEventHandler("onClientRender", getRootElement(), function() 
    for index, p in pairs(getElementsByType("ped", getRootElement(), true)) do 
        if(getElementData(p, "bodyguard") == true) then 
            local owner = getElementData(p, "besitzer") 
            if(owner) then 
                local x, y, z = getElementPosition(p) 
                local x2, y2, z2 = getElementPosition(gMe) 
                if(isLineOfSightClear(x, y, z, x2, y2, z2, true, true, false, true)) then 
                    local sx, sy = getScreenFromWorldPosition(x, y, z+1) 
                    if(sx) and (sy) then 
                        local distance = getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) 
                        if(distance < 50) then 
                            dxDrawText(owner.."'s Bodyguard", sx+2, sy+2, sx, sy, tocolor(0, 0, 0, 200), 2-(distance/20), "arial", "center", "center") 
                            dxDrawText(owner.."'s Bodyguard", sx, sy, sx, sy, tocolor(255, 255, 255, 200), 2-(distance/20), "arial", "center", "center") 
                        end 
                    end 
                end 
            end 
        end 
    end 
end) 

The trigger part:

addEventHandler("onClientGUIClick", guiRoot, 
function() 
    if source == shops.Button[2] then 
        local row = guiGridListGetSelectedItem(shops.Gridlist[1]) 
        if row == 0 then 
            triggerServerEvent("setMyHealth", localPlayer) 
        elseif row == 1 then 
            triggerServerEvent("setMyArmor", localPlayer) 
        elseif row == 2 then 
            triggerServerEvent("repairMyCar", localPlayer) 
        elseif row == 3 then 
            triggerServerEvent("giveMeJetpack", localPlayer) 
        elseif row == 4 then 
            triggerServerEvent("giveMeParachute", localPlayer) 
        elseif row == 5 then 
            triggerServerEvent("giveMeNight", localPlayer) 
        elseif row == 6 then 
            triggerServerEvent("giveMeInfrared", localPlayer) 
        elseif row == 7 then 
            triggerServerEvent("giveMeCamera", localPlayer) 
        elseif row == 8 then 
            triggerServerEvent("giveMeGuard", localPlayer) 
        end 
    end 
end) 

Server:

local ablauf = {} 
local ped = {} 
local stat = {} 
local firetimer = {} 
local timer = {} 
local jx, jy, jz = {}, {}, {} 
local pedSayTimer = {} 
  
local say_messages = { 
    [1] = "Hallo!", 
    [2] = "Ich mache nur meinen Job.", 
    [3] = "Brauchst du Hilfe? Nein? Ich auch nicht.", 
    [4] = "Du befindest dich in einer sehr gefaehrlichen Lage.", 
    [5] = "Menschen koennen unterwasser ueberleben. Aber nicht lange.", 
    [6] = "Der Koerper eines Menschens enthaelt ein halbes kilo Salz.", 
    [7] = "Kopiere einen Spiegel, und du erhaelst einen Fotokopierer.", 
    [8] = "Der erste Passagierflug fand 1940 statt. Alle an Bord kreischten waerend des gesammten Flug's.", 
    [9] = "Der erste Mensch der bewies, das Kuhmlich trinkbar ist, war sehr, sehr durstig.", 
    [10] = "Bevor das Flugzeug erfunden wurde, musste jeder Mensch 100 Kilo Helium essen, um fliegen zu koennen.", 
    [11] = "Mobiltelefone verursachen kein Krebs. Nur Hepatitis.", 
    [12] = "69 Prozent aller Zaubertricks sind keine Zaubertricks, sondern hexerei.", 
    [13] = "Ratten koennen nicht spucken.", 
    [14] = "Auf jeden quadratzentimeter Mensch leben 32 Millionen Bakterien.", 
    [15] = "Der Mond umkreist die Erde alle 27,32 Tage.", 
    [16] = "Die Milliardste stelle von Pi ist 9.", 
    [17] = "Ein Liter Wasser wiegt 9,99 Kilogramm.", 
    [18] = "Heisses Wasser gefriert schneller als kaltes.", 
    [19] = "China ist der zweitgroesste Hersteller von Sojabohnen.", 
    [20] = "Wolfram besitzt den zweithoechsten Siedepunk. 3410.C", 
    [21] = "Die Zahene 2x Taeglich zu Reinigen ist die beste Methode gegen Mundgeruch.", 
    [22] = "Die Autobremse wurde erst 1895 erfunden. Zuvor musste der Fahrer solange im Kreis fahren, bis alle Insassen ihre Geschaefte erledigt hatten.", 
    [23] = "Der erste Mensch auf dem Mount Everest betrat ihn ausversehn, als er einen Vogel jagte.", 
    [24] = "Der Karpfen ist der giftigste Fisch der Welt.", 
    [25] = "Rechtshaender leben im Durchschnitt neun Jahre laenger als Linkshaender.", 
    [26] = "Eine Schlange kann bis zu 3 Jahren schlafen.", 
    [27] = "Wenn man 6 Jahre und 9 Monate ununterbrochen furzt, hat man genug Gas gesammelt, um die Energie einer Atombombe darzustellen.", 
    [28] = "Mit dem Kopf gegen die Wand zu knallen verbraucht 150 Kalorien die Stunde.", 
    [29] = "Es ist unmoeglich mit offenen Augen zu niesen.", 
    [30] = "Man stirbt eher an einem Champagner-Korken als von einer giftigen Spinne.", 
    [31] = "1567 stolperte der Mann mit dem laengsten Bart Europas ueber eben diesen, stuerzte die Treppe herab und brach sich das Genick.", 
    [32] = "In Indien ist es moeglich Tiere zu heiraten.", 
    [33] = "Erhitzt man Eier in der Mikrowelle explodieren sie.", 
    [34] = "Ein Mensch wiegt weniger, wenn der Mond genau ueber ihm steht.", 
    [35] = "Nach einer Auswertung von 32.000.000 Datensaetzen ist das haeufigste Passwort im Internet 123456.", 
    [36] = "Ein Mensch kann durch einen Sprung auf ebenem Boden nicht laenger als eine Sekunde in der Luft bleiben.", 
    [37] = "Tritt man gegen eine Laterne mit einer Quecksilberdampflampe, erlischt diese fuer bis zu 5 Minuten.", 
    [38] = "Der Halleyscher Komet naehert sich der Erde alle 76 Jahre.", 
    [39] = "Zu jeder Uhrzeit sind auf der ganzen Welt rund 50 Millionen Menschen betrunken." 
} 
  
local function doPedSaySomething(ped) 
    if(isTimer(pedSayTimer[ped])) then 
        killTimer(pedSayTimer[ped]) 
    end 
    if(isElement(ped)) then 
        local message = say_messages[math.random(1, #say_messages)] 
        local x, y, z = getElementPosition(ped) 
        local col = createColSphere(x, y, z, 10) 
        for index, p in ipairs( getElementsWithinColShape(col, "player") ) do 
            local x2, y2, z2 = getElementPosition ( p ) 
            local distance = getDistanceBetweenPoints3D ( x, y, z, x2, y2, z2 ) 
            local rgb = 15 * distance - 125 
            local rgb = math.abs ( rgb - 255 ) + 125 
            outputChatBox ("Bodyguard sagt: " ..message, p, rgb, rgb, rgb ) 
        end 
        destroyElement(col) 
        pedSayTimer[ped] = setTimer(doPedSaySomething, 10000+math.random(5000, 60000), 1, ped) 
    end 
end 
  
  
local function functionscheck() 
    for index, p in next, ped do 
        if(isElement(p)) then 
            local player = getPlayerFromName(getElementData(p, "besitzer")) 
            if(player) and (ped[player]) then 
                if(isElement(p)) and (ablauf[player] == true) then 
                    if not(stat[p]) then 
                        stat[p] = {} 
                        timer[p] = {} 
                    end 
                    local owner = player 
                    if(owner) then 
                        local x, y, z = getElementPosition(owner) 
                        local x2, y2, z2 = getElementPosition(p) 
                        if(getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) > 3) then 
                            -- SPRINT CHECK -- 
                            stat[p]["running"] = true 
                            if(getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) > 10) then 
                                if(stat[p]["jumping"] ~= true) and (stat[p]["inveh"] ~= true) then 
                                    setPedAnimation(p, "ped" , "sprint_civi", -1, true, true, false) -- Sprintet 
                                end 
                            else 
                                if(stat[p]["jumping"] ~= true) and (stat[p]["inveh"] ~= true) then 
                                    setPedAnimation(p, "ped" , "JOG_maleA", -1, true, true, false) -- Joggt 
                                end 
                            end 
                            -- ROTATION -- 
                            local x1, y1 = getElementPosition(p) 
                            local x2, y2 = getElementPosition(owner) 
                            local rot = math.atan2(y2 - y1, x2 - x1) * 180 / math.pi 
                            rot = rot-90 
                            setPedRotation(p, rot) 
                            -- CAR -- 
                            local inveh = false 
                            if(isPedInVehicle(player)) then 
                                inveh = true 
                            end 
                            if(inveh == true) and (getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) < 4) then  
                                if(stat[p]["inveh"] ~= true) and (stat[p]["enterveh"] ~= true) then 
                                    stat[p]["enterveh"] = true 
                                    setPedAnimation(p) 
                                    triggerClientEvent(getRootElement(), "doPedEnter", player, p, true) 
                                    setTimer(function() 
                                        local occupants = getVehicleOccupants(getPedOccupiedVehicle(player)) 
                                        for i = 1, getVehicleMaxPassengers(getPedOccupiedVehicle(player)), 1 do 
                                            if not(occupants[i]) then 
                                                warpPedIntoVehicle(p, getPedOccupiedVehicle(player), i) 
                                                stat[p]["inveh"] = true 
                                                break; 
                                            end 
                                        end 
                                        stat[p]["enterveh"] = false 
                                    end, 2000, 1) 
                                end 
                            else 
                                if(stat[p]["inveh"] == true) and (stat[p]["enterveh"] == false) and(isPedInVehicle(player) == false) then -- er ist nicht im auto aber ich bin es 
                                    stat[p]["enterveh"] = true 
                                    triggerClientEvent(getRootElement(), "doPedExitVeh", player, p, true) 
                                    setTimer(function() 
                                        removePedFromVehicle(p) 
                                        stat[p]["enterveh"] = false 
                                        stat[p]["inveh"] = false 
                                    end, 1000, 1) 
                                end 
                            end 
                            -- JUMP CHECK  -- 
                            if(inveh == false) then 
                                if((z-z2) > 0.-- s8) --> and (getDistanceBetweenPoints3D(x, y, z, x2, y2, z2) < 4) and (stat[p]["jumping"] ~= true) then -- er ist oben 
                                    stat[p]["jumping"] = true 
                                    setPedAnimation(p) 
                                    triggerClientEvent(getRootElement(), "doPedJump", player, p, true) 
                                    if(isTimer(timer[p]["jump"])) then killTimer(timer[p]["jump"]) end 
                                    timer[p]["jump"] = setTimer(function() 
                                        stat[p]["jumping"] = false 
                                        triggerClientEvent(getRootElement(), "doPedJump", player, p, false) 
                                    end, 800, 1) 
                                end 
                            end 
                        else 
                            if (stat[p]["running"] == true)then 
                                stat[p]["running"] = false 
                                setPedAnimation(p) 
                            end 
                        end 
                    else 
                        destroyElement(p) 
                    end 
                end 
            end 
        else 
            if(isElement(p)) then 
                destroyElement(p) 
            end 
            p = nil 
        end 
    end 
end 
  
setTimer(functionscheck, 200, -1) 
  
--addCommandHandler("fol", 
addEvent("giveMeGuard", true) 
addEventHandler("giveMeGuard", root, function(p) 
    if(ablauf[p] == true) then return end 
    ablauf[p] = true 
    local x, y, z = getElementPosition(p) 
    ped[p] = createPed(164, x, y+1, z) 
    setElementData(ped[p], "besitzer", getPlayerName(p)) 
    setElementData(ped[p], "bodyguard", true) 
    setTimer(giveWeapon, 1000, 1, ped[p], 27, 99999, true) 
    setPedStat (ped[p], 72, 999) 
    setPedStat (ped[p], 76, 999) 
    setPedStat (ped[p], 74, 999) 
    --addEventHandler("onClientPedDamage", ped, on_damage_check) 
    --pedSayTimer[ped[p]] = setTimer(doPedSaySomething, 5000, 1, ped[p]) 
    addEventHandler("onPedWasted", ped[p], function() 
        local ped = source 
        setTimer(destroyElement, 1000, 1, ped) 
        ablauf[p] = false 
    end) 
end) 

P.S This is a community script and tried to make it work with mine, i'm trying to make this, when the player is level 100 he can buy the bodyguard but i get this error.

Table index is nil.

Line 176

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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