Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/11/16 in all areas

  1. كيف أبدا تعلم البرمجة ؟ من أين أبدا ؟ وماذا أتعلم ؟ لتعلم البرمجة ويتمحور الفيديو عن جميع مجالات البرمجة و كيف تتعلم و كيف تبدأ وما اللغات البرمجية اللتي يجب عليك تعلمها هذا الفيديو أول خطورة لك لتعرف الطريق الصحيح في اللغات البرمجية وكيف تبدأ و تسير في الطريق الصحيح حتي تصبح ناجحا في المجال ومحترفا و الفيديو يتكون من :- كيف تصبح مطور ويب - Web Developer كيف اصبح Front - End Web Developer كيف اصبح Back-End Web Developer كيف أصبح مبرمج تطبيقات للهواتف الذكية كيف أصبح مبرمج تطبيقات للاندرويد كيف أصبح مبرمج تطبيقات لل IOS كيف أصبح مبرمج تطبيقات للويندوز فون - Windows Phone كيف أصبح مبرمج الالعاب كيف أصبح مبرمج تطبيقات سطح المكتب Desktop تعلم لغات قواعد البيانات ورابط الفيديو :- here روابط للانتقال السريع في الفيديو لمشاهدة الفقرة المححدة و التي تريدها فقط :- كيف أبدا تعلم البرمجة ؟ من أين أبدا ؟ وماذا أتعلم ؟ كيف تصبح مطور ويب - Web Developer here كيف اصبح Front - End Web Developer here كيف اصبح Back-End Web Developer here كيف أصبح مبرمج تطبيقات للهواتف الذكية here كيف أصبح مبرمج تطبيقات للاندرويد here كيف أصبح مبرمج تطبيقات لل IOS here كيف أصبح مبرمج تطبيقات للويندوز فون Windows Phone here كيف أصبح مبرمج الالعاب here كيف أصبح مبرمج تطبيقات سطح المكتب Desktop here تعلم لغات قواعد البيانات here موقع فيه اكثر من 500 لغة برمجة here
    4 points
  2. I was browsing around and noticed that MTA doesn't have its own server on Discord. Discord is little app that I've been using for couple of months now, for communication purpose with people from my gaming community. Looking at all options it has, it it something between IRC and TS3/Skype, only it's a lot better then IRC and lot less CPU consuming then Skype. A lot more organized then all 3: Skype, TS3 and IRC and it even supports chatting from browser, for those who don't want to download application. Application is supported on almost all platforms it does support creating your own servers and channels in those servers without paying anything to any host. You can read more about it here: https://discordapp.com/ I'd like to see official MTA community there and I can help with creating/managing it if needed.
    2 points
  3. ماعندي خلفية عن المابات والاوبجكت والشادر هذا شيء على اقل تقدير بيقلل من الاف بي اس لكن انا يوم جربت السيرفرات والاق كلمتهم وقلت لهم وبعضهم يفكر يلغي مشروعه حالياً او يقلل من بعض الاضافات لكن بيكون فية لاق خفيف عموماً انا ماعندي خلفية كاملة عن المابات او الاوبجكت لذلك اذا فية غيري بيفيدك في الاكيد فالافضل ذلك
    2 points
  4. function onDmg() if getElementData(localPlayer,'_inJail') == true then cancelEvent() end end addEventHandler('onClientPlayerDamage',localPlayer,onDmg)
    2 points
  5. + addEventHandler ( "onResourceStart" , resourceRoot , function ( ) for _, players in ipairs ( getElementsByType ( "player" ) ) do local playerAcc = getPlayerAccount ( players ) if ( playerAcc ) and not ( isGuestAccount ( playerAcc ) ) then local accName = getAccountName ( playerAcc ) setTimer ( setElementData , 500 , 1 , players , "Account" , accName ) end end end )
    2 points
  6. function replaceModel() txd = engineLoadTXD("santa.txd", 290 ) engineImportTXD(txd, 290 ) dff = engineLoadDFF("santa.dff", 290 ) engineReplaceModel(dff, 290 ) txd = engineLoadTXD("male01.txd", 44 ) engineImportTXD(txd, 44 ) dff = engineLoadDFF("male01.dff", 44 ) engineReplaceModel(dff, 44 ) end addEventHandler ( "onClientResourceStart", getResourceRootElement(getThisResource()), replaceModel) addCommandHandler ( "reloadcar", replaceModel ) First skin (santa) is working fine, second (male01) got this error: Error loading DFF @ 'engineLoadDFF' [male01.dff] and bad argument @ engineReplaceModel [expected dff at argument 1, got boolean]... Wtf.. How to fix this? I do not understand this..
    1 point
  7. [ نصور ام نسور و وش اسمك الحقيقي ] هذا بفضل الله ثم بفضلكم شكراً على مرورك الجميل
    1 point
  8. اصلن ملف السيرفر ماراح يتخزن , فـ لذلك وجودها زي عدمها , ماتنفع الا مع الكلنت ولو حبيت تستفسر اكثر عنها تقدر تسوي موضوع وتسأل , عشان مانخرج من محتوي الموضوع هذا ويعطيك العافية ي احمد ع الحركه الجميلة , موفق يالذيب
    1 point
  9. Here is a very simple way to debug your code. -- debug function onDmg() if isPlayerInJail(localPlayer) then outputChatBox("Yes it's") -- if you can't see this message in your chat box then you need to check if the element data ("_inJail") exist or not. cancelEvent() end end addEventHandler('onClientPlayerDamage',localPlayer,onDmg) -- check if the player is in jail function isPlayerInJail(player) if player and isElement(player) then local returns = getElementData(player,"_inJail") and true or false return returns end return false end
    1 point
  10. Are you sure it's a client side ? and the player have data?
    1 point
  11. You can't cancel 'onPlayerDamage' Event so use : onClientPlayerDamage and check the data and use the attacker parameter to check the attacker if you want only players.
    1 point
  12. في فنكشن إحضار حساب اللاعب غير معرف v المتغير
    1 point
  13. ^ راح يكون حساب اللاعب في حال ضفت هذا الكود في ملف السيرفر addEventHandler('onPlayerLogin',root, function ( _ ,acc ) setElementData(source,'Account',getAccountName(acc)) end ) addEventHandler('onPlayerLogout',root, function ( _,acc ) local Does_has_a_name = getElementData(source,'Account') or false if ( Does_has_a_name ) then removeElementData(source,'Account') end end )
    1 point
  14. cache: When the script file type is "client", this setting controls whether the file is saved on the clients' hard drive. Default is "true". Using "false" will mean the file is not saved. (Note: cache=false files are started at the client first, so lua file load order might differ when mixing cache settings) يعني مايحفظ الملف
    1 point
  15. That's worried anyway replace this in superman resource : On client : -- Copyright (c) 2008, Alberto Alonso -- -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without modification, -- are permitted provided that the following conditions are met: -- -- * Redistributions of source code must retain the above copyright notice, this -- list of conditions and the following disclaimer. -- * Redistributions in binary form must reproduce the above copyright notice, this -- list of conditions and the following disclaimer in the documentation and/or other -- materials provided with the distribution. -- * Neither the name of the superman script nor the names of its contributors may be used -- to endorse or promote products derived from this software without specific prior -- written permission. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. local Superman = {} -- Settings local ZERO_TOLERANCE = 0.00001 local MAX_ANGLE_SPEED = 6 -- In degrees per frame local MAX_SPEED = 1.0 local EXTRA_SPEED_FACTOR = 1.85 local LOW_SPEED_FACTOR = 0.40 local ACCELERATION = 0.025 local EXTRA_ACCELERATION_FACTOR = 1.8 local LOW_ACCELERATION_FACTOR = 0.85 local TAKEOFF_VELOCITY = 1.75 local TAKEOFF_FLIGHT_DELAY = 750 local SMOKING_SPEED = 1.25 local GROUND_ZERO_TOLERANCE = 0.18 local LANDING_DISTANCE = 3.2 local FLIGHT_ANIMLIB = "swim" local FLIGHT_ANIMATION = "Swim_Dive_Under" local FLIGHT_ANIM_LOOP = false local IDLE_ANIMLIB = "cop_ambient" local IDLE_ANIMATION = "Coplook_loop" local IDLE_ANIM_LOOP = true local MAX_Y_ROTATION = 55 local ROTATION_Y_SPEED = 3.8 -- Static global variables local thisResource = getThisResource() local rootElement = getRootElement() local localPlayer = getLocalPlayer() local serverGravity = getGravity() -- -- Utility functions -- local function isPlayerFlying(player) local data = getElementData(player, "superman:flying") if not data or data == false then return false else return true end end local function setPlayerFlying(player, state) if state == true then state = true else state = false end setElementData(player, "superman:flying", state) end local function iterateFlyingPlayers() local current = 1 local allPlayers = getElementsByType("player") return function() local player repeat player = allPlayers[current] current = current + 1 until not player or (isPlayerFlying(player) and isElementStreamedIn(player)) return player end end function Superman:restorePlayer(player) setPlayerFlying(player, false) setPedAnimation(player, false) setElementVelocity(player, 0, 0, 0) setElementRotation(player, 0, 0, 0) --setPedRotation(player, getPedRotation(player)) setElementCollisionsEnabled(player, true) self:destroySmokeGenerators(player) self.rotations[player] = nil self.previousVelocity[player] = nil end function Superman:createSmokeGenerator(player) local generator = createObject(2780, getElementPosition(player)) setElementCollisionsEnabled(generator, false) setObjectScale(generator, 0) return generator end function Superman:createSmokeGenerators(player) if not self.smokeGenerators[player] then local smokeGenerators = {} smokeGenerators[1] = self:createSmokeGenerator(player) attachElementToElement(smokeGenerators[1], player, 0.75, -0.2, -0.4, -40, 0, 60) smokeGenerators[2] = self:createSmokeGenerator(player) attachElementToElement(smokeGenerators[2], player, -0.75, -0.2, -0.4, -40, 0, -60) self.smokeGenerators[player] = smokeGenerators end end function Superman:destroySmokeGenerators(player) if self.smokeGenerators[player] then for k, v in ipairs(self.smokeGenerators[player]) do destroyElement(v) end self.smokeGenerators[player] = nil end end function angleDiff(angle1, angle2) angle1, angle2 = angle1 % 360, angle2 % 360 local diff = (angle1 - angle2) % 360 if diff <= 180 then return diff else return -(360 - diff) end end local function isPedInWater(ped) local pedPosition = Vector3D:new(getElementPosition(ped)) if pedPosition.z <= 0 then return true end local waterLevel = getWaterLevel(pedPosition.x, pedPosition.y, pedPosition.z) if not isElementStreamedIn(ped) or not waterLevel or waterLevel < pedPosition.z then return false else return true end end local function isnan(x) math.inf = 1/0 if x == math.inf or x == -math.inf or x ~= x then return true end return false end local function getVector2DAngle(vec) if vec.x == 0 and vec.y == 0 then return 0 end local angle = math.deg(math.atan(vec.x / vec.y)) + 90 if vec.y < 0 then angle = angle + 180 end return angle end -- -- Initialization and shutdown functions -- function Superman.Start() local self = Superman -- Register events addEventHandler("onClientResourceStop", getResourceRootElement(thisResource), Superman.Stop, false) addEventHandler("onPlayerJoin", rootElement, Superman.onJoin) addEventHandler("onPlayerQuit", rootElement, Superman.onQuit) addEventHandler("onClientRender", rootElement, Superman.processControls) addEventHandler("onClientRender", rootElement, Superman.processFlight) addEventHandler("onClientPlayerDamage", localPlayer, Superman.onDamage, false) addEventHandler("onClientElementDataChange", rootElement, Superman.onDataChange) addEventHandler("onClientElementStreamIn", rootElement, Superman.onStreamIn) addEventHandler("onClientElementStreamOut", rootElement, Superman.onStreamOut) -- Bind keys bindKey("jump", "down", Superman.onJump) -- Register commands addCommandHandler("superman", Superman.cmdSuperman) -- Initializate attributes self.smokeGenerators = {} self.rotations = {} self.previousVelocity = {} end addEventHandler("onClientResourceStart", getResourceRootElement(thisResource), Superman.Start, false) function Superman.Stop() local self = Superman setGravity(serverGravity) -- Restore all players animations, collisions, etc for player in iterateFlyingPlayers() do self:restorePlayer(player) end end -- -- Join/Quit -- function Superman.onJoin(player) local self = Superman local player = player or source setPlayerFlying(player, false) end function Superman.onQuit(reason, player) local self = Superman local player = player or source if isPlayerFlying(player) then self:restorePlayer(player) end end -- -- onDamage: superman is invulnerable -- function Superman.onDamage() local self = Superman if isPlayerFlying(localPlayer) then cancelEvent() end end -- -- onStreamIn: Reset rotation attribute for player -- function Superman.onStreamIn() local self = Superman end function Superman.onStreamOut() local self = Superman if source and isElement(source) and getElementType(source) == "player" and isPlayerFlying(source) then self.rotations[source] = nil self.previousVelocity[source] = nil end end -- -- onDataChange: Check if somebody who is out of stream stops being superman -- function Superman.onDataChange(dataName, oldValue) local self = Superman if dataName == "superman:flying" and isElement(source) and getElementType(source) == "player" and oldValue ~= getElementData(source, dataName) and oldValue == true and getElementData(source, dataName) == false then self:restorePlayer(source) end end -- -- onJump: Combo to start flight without any command -- function Superman.onJump(key, keyState) local aTeam = getPlayerTeam ( localPlayer ) if not aTeam or aTeam ~= getTeamFromName ( 'Staff' ) then return outputChatBox ( 'Superman is for staff only',255,0,0 ) end local self = Superman local self = Superman local task = getPlayerSimplestTask(localPlayer) if not isPlayerFlying(localPlayer) then if task == "TASK_SIMPLE_IN_AIR" then setElementVelocity(localPlayer, 0, 0, TAKEOFF_VELOCITY) setTimer(Superman.startFlight, 100, 1) end end end -- -- Commands -- function Superman.cmdSuperman() local aTeam = getPlayerTeam ( localPlayer ) if aTeam and aTeam == getTeamFromName ( 'Staff' ) then local self = Superman if isPedInVehicle(localPlayer) or isPlayerFlying(localPlayer) then return end setElementVelocity(localPlayer, 0, 0, TAKEOFF_VELOCITY) setTimer(Superman.startFlight, TAKEOFF_FLIGHT_DELAY, 1) else outputChatBox ( 'Superman is for staff only',255,0,0 ) end end function Superman.startFlight() local aTeam = getPlayerTeam ( localPlayer ) if aTeam and aTeam == getTeamFromName ( 'Staff' ) then local self = Superman if isPlayerFlying(localPlayer) then return end triggerServerEvent("superman:start", rootElement) setPlayerFlying(localPlayer, true) setElementVelocity(localPlayer, 0, 0, 0) self.currentSpeed = 0 self.extraVelocity = { x = 0, y = 0, z = 0 } else outputChatBox ( 'Superman is for staff only',255,0,0 ) end end -- -- Controls processing -- function Superman.processControls() local self = Superman if not isPlayerFlying(localPlayer) then return end -- Calculate the requested movement direction local Direction = Vector3D:new(0, 0, 0) if getControlState("forwards") then Direction.y = 1 elseif getControlState("backwards") then Direction.y = -1 end if getControlState("left") then Direction.x = 1 elseif getControlState("right") then Direction.x = -1 end Direction:Normalize() -- Calculate the sight direction local cameraX, cameraY, cameraZ, lookX, lookY, lookZ = getCameraMatrix() local SightDirection = Vector3D:new((lookX - cameraX), (lookY - cameraY), (lookZ - cameraZ)) SightDirection:Normalize() if getControlState("look_behind") then SightDirection = SightDirection:Mul(-1) end -- Calculate the current max speed and acceleration values local maxSpeed = MAX_SPEED local acceleration = ACCELERATION if getControlState("sprint") then maxSpeed = MAX_SPEED * EXTRA_SPEED_FACTOR acceleration = acceleration * EXTRA_ACCELERATION_FACTOR elseif getControlState("walk") then maxSpeed = MAX_SPEED * LOW_SPEED_FACTOR acceleration = acceleration * LOW_ACCELERATION_FACTOR end local DirectionModule = Direction:Module() -- Check if we must change the gravity if DirectionModule == 0 and self.currentSpeed ~= 0 then setGravity(0) else setGravity(serverGravity) end -- Calculate the new current speed if self.currentSpeed ~= 0 and (DirectionModule == 0 or self.currentSpeed > maxSpeed) then -- deccelerate self.currentSpeed = self.currentSpeed - acceleration if self.currentSpeed < 0 then self.currentSpeed = 0 end elseif DirectionModule ~= 0 and self.currentSpeed < maxSpeed then -- accelerate self.currentSpeed = self.currentSpeed + acceleration if self.currentSpeed > maxSpeed then self.currentSpeed = maxSpeed end end -- Calculate the movement requested direction if DirectionModule ~= 0 then Direction = Vector3D:new(SightDirection.x * Direction.y - SightDirection.y * Direction.x, SightDirection.x * Direction.x + SightDirection.y * Direction.y, SightDirection.z * Direction.y) -- Save the last movement direction for when player releases all direction keys self.lastDirection = Direction else -- Player is not specifying any direction, use last known direction or the current velocity if self.lastDirection then Direction = self.lastDirection if self.currentSpeed == 0 then self.lastDirection = nil end else Direction = Vector3D:new(getElementVelocity(localPlayer)) end end Direction:Normalize() Direction = Direction:Mul(self.currentSpeed) -- Applicate a smooth direction change, if moving if self.currentSpeed > 0 then local VelocityDirection = Vector3D:new(getElementVelocity(localPlayer)) VelocityDirection:Normalize() if math.sqrt(VelocityDirection.x^2 + VelocityDirection.y^2) > 0 then local DirectionAngle = getVector2DAngle(Direction) local VelocityAngle = getVector2DAngle(VelocityDirection) local diff = angleDiff(DirectionAngle, VelocityAngle) local calculatedAngle if diff >= 0 then if diff > MAX_ANGLE_SPEED then calculatedAngle = VelocityAngle + MAX_ANGLE_SPEED else calculatedAngle = DirectionAngle end else if diff < MAX_ANGLE_SPEED then calculatedAngle = VelocityAngle - MAX_ANGLE_SPEED else calculatedAngle = DirectionAngle end end calculatedAngle = calculatedAngle % 360 local DirectionModule2D = math.sqrt(Direction.x^2 + Direction.y^2) Direction.x = -DirectionModule2D*math.cos(math.rad(calculatedAngle)) Direction.y = DirectionModule2D*math.sin(math.rad(calculatedAngle)) end end if Direction:Module() == 0 then self.extraVelocity = { x = 0, y = 0, z = 0 } end -- Set the new velocity setElementVelocity(localPlayer, Direction.x + self.extraVelocity.x, Direction.y + self.extraVelocity.y, Direction.z + self.extraVelocity.z) if self.extraVelocity.z > 0 then self.extraVelocity.z = self.extraVelocity.z - 1 if self.extraVelocity.z < 0 then self.extraVelocity.z = 0 end elseif self.extraVelocity.z < 0 then self.extraVelocity.z = self.extraVelocity.z + 1 if self.extraVelocity.z > 0 then self.extraVelocity.z = 0 end end end -- -- Players flight processing -- function Superman.processFlight() local self = Superman for player in iterateFlyingPlayers() do local Velocity = Vector3D:new(getElementVelocity(player)) local distanceToBase = getElementDistanceFromCentreOfMassToBaseOfModel(player) local playerPos = Vector3D:new(getElementPosition(player)) playerPos.z = playerPos.z - distanceToBase local distanceToGround if playerPos.z > 0 then local hit, hitX, hitY, hitZ, hitElement = processLineOfSight(playerPos.x, playerPos.y, playerPos.z, playerPos.x, playerPos.y, playerPos.z - LANDING_DISTANCE - 1, true, true, true, true, true, false, false, false) if hit then distanceToGround = playerPos.z - hitZ end end if distanceToGround and distanceToGround < GROUND_ZERO_TOLERANCE then self:restorePlayer(player) if player == localPlayer then setGravity(serverGravity) triggerServerEvent("superman:stop", getRootElement()) end elseif distanceToGround and distanceToGround < LANDING_DISTANCE then self:processLanding(player, Velocity, distanceToGround) elseif Velocity:Module() < ZERO_TOLERANCE then self:processIdleFlight(player) else self:processMovingFlight(player, Velocity) end end end function Superman:processIdleFlight(player) -- Set the proper animation on the player local animLib, animName = getPedAnimation(player) if animLib ~= IDLE_ANIMLIB or animName ~= IDLE_ANIMATION then setPedAnimation(player, IDLE_ANIMLIB, IDLE_ANIMATION, -1, IDLE_ANIM_LOOP, false, false) end setElementCollisionsEnabled(player, false) -- If this is myself, calculate the ped rotation depending on the camera rotation if player == localPlayer then local cameraX, cameraY, cameraZ, lookX, lookY, lookZ = getCameraMatrix() local Sight = Vector3D:new(lookX - cameraX, lookY - cameraY, lookZ - cameraZ) Sight:Normalize() if getControlState("look_behind") then Sight = Sight:Mul(-1) end Sight.z = math.atan(Sight.x / Sight.y) if Sight.y > 0 then Sight.z = Sight.z + math.pi end Sight.z = math.deg(Sight.z) + 180 setPedRotation(localPlayer, Sight.z) setElementRotation(localPlayer, 0, 0, Sight.z) else local Zangle = getPedCameraRotation(player) setPedRotation(player, Zangle) setElementRotation(player, 0, 0, Zangle) end end function Superman:processMovingFlight(player, Velocity) -- Set the proper animation on the player local animLib, animName = getPedAnimation(player) if animLib ~= FLIGHT_ANIMLIB or animName ~= FLIGHT_ANIMATION then setPedAnimation(player, FLIGHT_ANIMLIB, FLIGHT_ANIMATION, -1, FLIGHT_ANIM_LOOP, true, false) end if player == localPlayer then setElementCollisionsEnabled(player, true) else setElementCollisionsEnabled(player, false) end -- Calculate the player rotation depending on their velocity local Rotation = Vector3D:new(0, 0, 0) if Velocity.x == 0 and Velocity.y == 0 then Rotation.z = getPedRotation(player) else Rotation.z = math.deg(math.atan(Velocity.x / Velocity.y)) if Velocity.y > 0 then Rotation.z = Rotation.z - 180 end Rotation.z = (Rotation.z + 180) % 360 end Rotation.x = -math.deg(Velocity.z / Velocity:Module() * 1.2) -- Rotation compensation for the self animation rotation Rotation.x = Rotation.x - 40 -- Calculate the Y rotation for barrel rotations if not self.rotations[player] then self.rotations[player] = 0 end if not self.previousVelocity[player] then self.previousVelocity[player] = Vector3D:new(0, 0, 0) end local previousAngle = getVector2DAngle(self.previousVelocity[player]) local currentAngle = getVector2DAngle(Velocity) local diff = angleDiff(currentAngle, previousAngle) if isnan(diff) then diff = 0 end local calculatedYRotation = -diff * MAX_Y_ROTATION / MAX_ANGLE_SPEED if calculatedYRotation > self.rotations[player] then if calculatedYRotation - self.rotations[player] > ROTATION_Y_SPEED then self.rotations[player] = self.rotations[player] + ROTATION_Y_SPEED else self.rotations[player] = calculatedYRotation end else if self.rotations[player] - calculatedYRotation > ROTATION_Y_SPEED then self.rotations[player] = self.rotations[player] - ROTATION_Y_SPEED else self.rotations[player] = calculatedYRotation end end if self.rotations[player] > MAX_Y_ROTATION then self.rotations[player] = MAX_Y_ROTATION elseif self.rotations[player] < -MAX_Y_ROTATION then self.rotations[player] = -MAX_Y_ROTATION elseif math.abs(self.rotations[player]) < ZERO_TOLERANCE then self.rotations[player] = 0 end Rotation.y = self.rotations[player] -- Apply the calculated rotation setPedRotation(player, Rotation.z) setElementRotation(player, Rotation.x, Rotation.y, Rotation.z) -- Save the current velocity self.previousVelocity[player] = Velocity -- If the speed is over the given value, create the smoke generators if Velocity:Module() > (SMOKING_SPEED - ZERO_TOLERANCE) and not isPedInWater(player) then self:createSmokeGenerators(player) else self:destroySmokeGenerators(player) end end function Superman:processLanding(player, Velocity, distanceToGround) -- Set the proper animation on the player local animLib, animName = getPedAnimation(player) if animLib ~= FLIGHT_ANIMLIB or animName ~= FLIGHT_ANIMATION then setPedAnimation(player, FLIGHT_ANIMLIB, FLIGHT_ANIMATION, -1, FLIGHT_ANIM_LOOP, true, false) end if player == localPlayer then setElementCollisionsEnabled(player, true) else setElementCollisionsEnabled(player, false) end -- If the speed is over the given value, create the smoke generators if Velocity:Module() > (SMOKING_SPEED - ZERO_TOLERANCE) and not isPedInWater(player) then self:createSmokeGenerators(player) else self:destroySmokeGenerators(player) end -- Calculate the player rotation depending on their velocity and distance to ground local Rotation = Vector3D:new(0, 0, 0) if Velocity.x == 0 and Velocity.y == 0 then Rotation.z = getPedRotation(player) else Rotation.z = math.deg(math.atan(Velocity.x / Velocity.y)) if Velocity.y > 0 then Rotation.z = Rotation.z - 180 end Rotation.z = (Rotation.z + 180) % 360 end Rotation.x = -(85 - (distanceToGround * 85 / LANDING_DISTANCE)) -- Rotation compensation for the self animation rotation Rotation.x = Rotation.x - 40 -- Apply the calculated rotation setPedRotation(player, Rotation.z) setElementRotation(player, Rotation.x, Rotation.y, Rotation.z) end -- -- Vectors -- Vector3D = { new = function(self, _x, _y, _z) local newVector = { x = _x or 0.0, y = _y or 0.0, z = _z or 0.0 } return setmetatable(newVector, { __index = Vector3D }) end, Copy = function(self) return Vector3D:new(self.x, self.y, self.z) end, Normalize = function(self) local mod = self:Module() if mod ~= 0 then self.x = self.x / mod self.y = self.y / mod self.z = self.z / mod end end, Dot = function(self, V) return self.x * V.x + self.y * V.y + self.z * V.z end, Module = function(self) return math.sqrt(self.x * self.x + self.y * self.y + self.z * self.z) end, AddV = function(self, V) return Vector3D:new(self.x + V.x, self.y + V.y, self.z + V.z) end, SubV = function(self, V) return Vector3D:new(self.x - V.x, self.y - V.y, self.z - V.z) end, CrossV = function(self, V) return Vector3D:new(self.y * V.z - self.z * V.y, self.z * V.x - self.x * V.z, self.x * V.y - self.y * V.z) end, Mul = function(self, n) return Vector3D:new(self.x * n, self.y * n, self.z * n) end, Div = function(self, n) return Vector3D:new(self.x / n, self.y / n, self.z / n) end, MulV = function(self, V) return Vector3D:new(self.x * V.x, self.y * V.y, self.z * V.z) end, DivV = function(self, V) return Vector3D:new(self.x / V.x, self.y / V.y, self.z / V.z) end, } -- Copyright (c) 2008, Alberto Alonso -- -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without modification, -- are permitted provided that the following conditions are met: -- -- * Redistributions of source code must retain the above copyright notice, this -- list of conditions and the following disclaimer. -- * Redistributions in binary form must reproduce the above copyright notice, this -- list of conditions and the following disclaimer in the documentation and/or other -- materials provided with the distribution. -- * Neither the name of the superman script nor the names of its contributors may be used -- to endorse or promote products derived from this software without specific prior -- written permission. -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. local Superman = {} -- Static global values local rootElement = getRootElement() local thisResource = getThisResource() -- Resource events addEvent("superman:start", true) addEvent("superman:stop", true) -- -- Start/stop functions -- function Superman.Start() local self = Superman addEventHandler("superman:start", rootElement, self.clientStart) addEventHandler("superman:stop", rootElement, self.clientStop) end addEventHandler("onResourceStart", getResourceRootElement(thisResource), Superman.Start, false) function Superman.clientStart() setElementData(client, "superman:flying", true) end function Superman.clientStop() setElementData(client, "superman:flying", false) end Try this.
    1 point
  16. 1 point
  17. How do you toggle the superman ? i can't find a handler for that you can use it there.
    1 point
  18. getPlayerTeam getTeamFromName
    1 point
  19. So what this should make two marker's and ped's but you are using the same position in the both of the row's so? i'm not getting that well what you mean by steal other ped features? i don't understand that so what's the problem? and why you need to make a table in the server side while there's one for the player element's.
    1 point
  20. Please post the whole code you've edit. i'meant about table.
    1 point
  21. Try this ; function aOnDraw ( ) dxDrawText ( 'Good Job ,Here is 10000$',247.0,332.0,917.0,373.0,tocolor(150,0,0,255),2.0,'pricedown','left','top',false,false,false ) setTimer ( function ( ) if getElementData ( localPlayer,'aOnDraw' ) == true then removeEventHandler ( 'onClientRender',root,aOnDraw ) setElementData ( localPlayer,'aOnDraw',false ) end end,3000,1 ) end addEvent ( 'onDelivered',true ) addEventHandler ( 'onDelivered',root, function ( ) local aDraw = getElementData ( localPlayer,'aOnDraw' ) if not aDraw or aDraw ~= true then addEventHandler ( 'onClientRender',root,aOnDraw ) setElementData ( localPlayer,'aOnDraw',true ) end end )
    1 point
  22. Look's very awesome i've like that so keep the good job!
    1 point
  23. The errors in your code you have to fix is : In the server side line 27 and 29 You are using triggerServerEvent but it's a client side function and i don't know why are you triggering it twice so it should be just after taking the money like this : triggerClientEvent ( player,'onDelivered',player ) In the client side from line 72 To 78 all wrong replace it like this you have to use 'onClientRender' To draw a text try the following : local aOnDraw = false function aOnDraw ( ) dxDrawText ( 'Good Job ,Here is 10000$',247.0,332.0,917.0,373.0,tocolor(150,0,0,255),2.0,'pricedown','left','top',false,false,false ) aOnDraw = true setTimer ( function ( ) if aOnDraw == true then removeEventHandler ( 'onClientRender',root,aOnDraw ) aOnDraw = false end end,5000,1 ) end addEvent ( 'onDelivered',true ) addEventHandler ( 'onDelivered',root, function ( ) if aOnDraw == false then addEventHandler ( 'onClientRender',root,aOnDraw ) end end ) And about your question how to create a table for the same marker do as the following : local aMyPositions = { { x,y,z }; { x,y,z }; { x,y,z }; { x,y,z }; }; for _,aV in ipairs ( aMyPositions ) do marker = createMarker ( aV[1],aV[2],aV[3],'cylinder',1,255,0,0,0 ); end None of my code's are tasted so try it and if there's any errors warnings in the debug post it here.
    1 point
  24. try this addEventHandler ( 'onMarkerHit',resourceRoot, function ( hit ) if ( hit and getElementType ( hit ) == 'vehicle' ) then local player = getVehicleController ( hit ) if ( player ) then if ( marker [ player ] ) and ( source == marker [ player ] )then if ( isElement ( newVehicle [ player ] ) ) and ( hit == newVehicle [ player ] ) then triggerClientEvent ( player , 'onDelivered', player ) destroyElement ( newVehicle [ player ] ) destroyElement ( myBlip [ player ] ) destroyElement ( marker [ player ] ) newVehicle [ player ] = nil myBlip [ player ] = nil marker [ player ] = nil givePlayerMoney ( player,10000 ) end end end end end )
    1 point
  25. والله كل شي واضح بس مشكلتك ماتركز على الكلام حمل المود وشغله هذي اول خطوة بعدين رح السكربت الي تبي تحط فيه الكلام حط السطر هذاا exports["guimessages"]:outputServer(root, "سبحان الله ", 255 , 255 , 255 ) الارقمنت الاول والي هو الروت بدله للاعب الي عندك واذا تبي للجميع خليها روت outputServer وفي الكلينت احذف الارقمنت الاول واستبدل ال outputClient لـ
    1 point
  26. The with-regex way: function isStringValid ( str ) return not pregFind ( str, "[^a-zA-Z0-9_]" ); end
    1 point
  27. function addToGroup( group ) group = aclGetGroup( group ) if group == false or group == nil then error( "The value of the 'group' is nil or false !" ) end account = getPlayerAccount( source ) if not isGuestAccount( account ) then local name = getAccountName( account ) local add = aclGroupAddObject( group, "user."..name ) if getPlayerMoney(source) >= 2500 then elseif add then outputChatBox( "Színesen írsz, amíg turbesz el nem veszi.", root, 0, 255, 0, true ) triggerClientEvent( source, "hideall", source ) takePlayerMoney ( source, 2000 ) else outputChatBox("Nincs erre pénzed.", source, 255, 0, 0, false) end else outputChatBox( "Regisztrálj, és jelentkezz be.", source, 255, 0, 0, true ) end end addEvent( "addToGroup", true ) addEventHandler( "addToGroup", root, addToGroup )
    1 point
  28. i tried this, but outputchatbox is work fine, but add me to group, with 0$
    1 point
  29. حط داتا للاعب اول مايدخل السيرفر تحقق من سريالك : addEventHandler ( 'onPlayerJoin' ) getPlayerSerial setElementData -- وفي الادمنية ابحث عن الزر اللي يسوي الـ Warp Player To -- وابحث عن الحدث اللي يوم يضغط والتحقق وسوي تحقق اذا كان عنده داتا يطلع خطأ ومايسوي شيء --
    1 point
  30. يسحبه كيف؟ رتبه ولا مكان؟
    1 point
  31. Hey, I wonder what this button does... <presses the button> huh? delete all forum users? oh sna- Hi there, the MTA Team is happy to present you with the result of what we have been up to recently - the redesigned and refreshed MTA Forum! This is something that we have wanted to do for a long time, and for several reasons. The forum software we have used until now (phpBB) has served us well through the years, there is no doubt about that. However, as time went by, our needs were changing too. It was becoming less and less feasible for us to use and maintain the forums in their present state, so we decided it was time to try something that is more suited to our current needs. We were recently presented with an opportunity to switch the forum software on attractive terms and we took it. Lo and behold, here are the new forums! Highlights of new features that were not present on the previous forum: forum now runs on a proprietary, secure, well tested and widely used software solution - the IPS Community Suite a completely new, mobile-friendly forum theme a fully fledged rich text editor for posting or editing your content on the forums (instead of the previous plain text box with BBCode buttons) an improved user profile system for greater personalisation of your presence on our forums a new, customizable real-time notifications system also a new, simplified Private Messaging system improvements to the quotation system (quotes link to the original post, and are fully collapsible) and replying in general (the multiquote feature) an ability to 'like' and rate topics and posts, awarding reputation points to their authors topic authors can now assign tags to their topics, making it easier for users to find the content they are looking for several new enhancements and customization features to improve your browsing experience (eg. topic previews; the ability to hide forums you are not interested in) moderators now have an ability to promote your topic on the forum (similar to stickied topics, but separate to them) several new features for us administrators too, which will make forum maintenance easier and possibly allow us to implement new forum features without a hassle ... and more! List of features that were present in the previous forum but are missing or are less functional now: no topic icons Private Messaging system is less pleasant to scroll through. Getting used to it might take some time too it is no longer possible to view the source code of posts. If you really need that functionality, you can check the page's HTML source code directly, then use a third party converter to obtain the BBCode code boxes are no longer integrated with the MTA wiki URLs FAQ: Q: Are my posts still in place? What about my private messages? A: They are both fine. You can find them in the same place you left them before. Q: Will the old forum URLs still work? A bunch of places on the web link to your forum using old URLs... A: Yes, they will work. We have a on-the-fly converter in place for such URLs, so they will still link to where they should. Q: I have found an issue with the new forum. Can I report it? A: Sure. Send a PM to one of the forum administrators (darkdreamingdan, jhxp or Jusonex) and describe the problem you have found. Make sure you provide all the details or steps to reproduce your issue, where applicable. We would like to thank Audifire and the mta-sa.org team for donating the forum software license to us. And naturally, you can not forget about darkdreamingdan and Jusonex, our team members who had both put a tremendous amount of effort in preparing and performing the forum maintenance and migration. Awesome job, guys. Did you like the change? Please let us know in the comments! See you next time. --MTA Team
    1 point
  32. طبيعي كل مبرمج يبدأ يأخذ مودات ويغير حقوق بعدين يعدل بالمودات , شوي بالكلام وشوي باللوحة ثم ينتقل للمرحلة الي بعدها , ويبدأ يصنع مودات خفيفة وآخر شيء يتطور مع الوقت
    1 point
×
×
  • Create New...