-
Posts
432 -
Joined
-
Last visited
Everything posted by w7sH
-
السلام عليكم انا عندي مود تثبيت اللاعب فوق السياره انا ابي اخليه يثبت السياره فوق السياره s function gluePlayer(slot, vehicle, x, y, z, rotX, rotY, rotZ) attachElementToElement(source, vehicle, x, y, z, rotX, rotY, rotZ) setPlayerWeaponSlot(source, slot) end addEvent("gluePlayer",true) addEventHandler("gluePlayer",getRootElement(),gluePlayer) function ungluePlayer() detachElementFromElement(source) end addEvent("ungluePlayer",true) addEventHandler("ungluePlayer",getRootElement(),ungluePlayer) c function glue() local player = getLocalPlayer() if not getPlayerOccupiedVehicle(player) then local vehicle = getPlayerContactElement(player) if getElementType(vehicle) == "vehicle" then local px, py, pz = getElementPosition(player) local vx, vy, vz = getElementPosition(vehicle) local sx = px - vx local sy = py - vy local sz = pz - vz local rotpX = 0 local rotpY = 0 local rotpZ = getPlayerRotation(player) local rotvX,rotvY,rotvZ = getVehicleRotation(vehicle) local t = math.rad(rotvX) local p = math.rad(rotvY) local f = math.rad(rotvZ) local ct = math.cos(t) local st = math.sin(t) local cp = math.cos(p) local sp = math.sin(p) local cf = math.cos(f) local sf = math.sin(f) local z = ct*cp*sz + (sf*st*cp + cf*sp)*sx + (-cf*st*cp + sf*sp)*sy local x = -ct*sp*sz + (-sf*st*sp + cf*cp)*sx + (cf*st*sp + sf*cp)*sy local y = st*sz - sf*ct*sx + cf*ct*sy local rotX = rotpX - rotvX local rotY = rotpY - rotvY local rotZ = rotpZ - rotvZ local slot = getPlayerWeaponSlot(player) --outputDebugString("gluing ".. getPlayerName(player) .." to " .. getVehicleName(vehicle) .. "(offset: "..tostring(x)..","..tostring(y)..","..tostring(z).."; rotation:"..tostring(rotX)..","..tostring(rotY)..","..tostring(rotZ)..")") triggerServerEvent("gluePlayer", player, slot, vehicle, x, y, z, rotX, rotY, rotZ) unbindKey("x","down",glue) bindKey("x","down",unglue) bindKey("x","down",unglue) end end end addCommandHandler("glue",glue) function unglue () local player = getLocalPlayer() triggerServerEvent("ungluePlayer", player) unbindKey("x","down",unglue) unbindKey("x","down",unglue) bindKey("x","down",glue) end addCommandHandler("unglue",unglue) bindKey("x","down",glue)
-
يعني م ابيها تطلع ابد وش الكود اللي يخفيها؟ hud ي شباب ابي اخفي النجوم من الـ
-
السلام عليكم معي مود قوقل هو مثل م انتو عارفين تضغط الت ثم تضغط ع الايقونه ويفتح معك ابيه يفتح ب زر اف 5 هذي الكودات clinet screenWidth, screenHeight = guiGetScreenSize() addEventHandler("onClientResourceStart", resourceRoot, function() bindKey("lalt", "down", function(button, state) showCursor(not isCursorShowing()) end) addEventHandler("onClientRender", root, onDraw) addEventHandler("onClientClick", root, onClick) end ) function onDraw() if isCursorShowing() then local posX, posY = getCursorPosition() posX, posY = posX * screenWidth, posY * screenHeight if (isPointInRect(posX, posY, 0, screenHeight - 48, 48, screenHeight)) then dxDrawRectangle(0, screenHeight - 48, 48, 48, tocolor(255, 255, 255, 110)) end end dxDrawImage(0, screenHeight - 48, 48, 48, "chromiumIcon.png") end function onClick(button, state, posX, posY) if not isCursorShowing() then return end if button == "left" and state == "up" then if isPointInRect(posX, posY, 0, screenHeight - 48, 48, screenHeight) then showBrowser() end end end function isPointInRect(posX, posY, posX1, posY1, posX2, posY2) return (posX > posX1 and posX < posX2) and (posY > posY1 and posY < posY2) end function showBrowser() if WebBrowserGUI.instance ~= nil then return end WebBrowserGUI.instance = WebBrowserGUI:new() end -- gui WebBrowserGUI = {} WebBrowserGUI.instance = nil function WebBrowserGUI:new() local o=setmetatable({},{__index=WebBrowserGUI}) o:constructor() return o end function WebBrowserGUI:constructor() local sizeX, sizeY = screenWidth * 0.9, screenHeight * 0.9 self.m_Window = GuiWindow(screenWidth * 0.05, screenHeight * 0.05, sizeX, sizeY, "Web browser", false) self.m_Window:setSizable(false) self.m_BackButton = GuiButton(5, 25, 32, 32, "<", false, self.m_Window) self.m_BackButton:setEnabled(false) self.m_ForwardButton = GuiButton(42, 25, 32, 32, ">", false, self.m_Window) self.m_ForwardButton:setEnabled(false) self.m_EditAddress = GuiEdit(77, 25, sizeX - 157, 32, "Please enter an address", false, self.m_Window) self.m_LoadButton = GuiButton(sizeX - 75, 25, 32, 32, "➽", false, self.m_Window) self.m_ButtonClose = GuiButton(sizeX - 38, 25, 24, 24, "✖", false, self.m_Window) self.m_ButtonClose:setProperty("NormalTextColour", "FFFF2929") self.m_ButtonClose:setProperty("HoverTextColour", "FF990909") self.m_ButtonClose:setFont("default-bold-small") self.m_Browser = GuiBrowser(5, 62, sizeX - 10, sizeY - 67, false, false, false, self.m_Window) local browser = self.m_Browser:getBrowser() addEventHandler("onClientBrowserCreated", browser, function(...) self:Browser_Created(...) end) addEventHandler("onClientBrowserNavigate", browser, function(...) self:Browser_Navigate(...) end) addEventHandler("onClientBrowserWhitelistChange", root, function(...) self:Browser_WhitelistChange(...) end) addEventHandler("onClientBrowserDocumentReady", browser, function(...) self:Browser_DocumentReady(...) end) self.m_History = {} self.m_ForwardHistory = {} self.m_RequestedURL = "" showCursor(true) GuiElement.setInputMode("no_binds_when_editing") end function WebBrowserGUI:Browser_Created() addEventHandler("onClientGUIClick", self.m_LoadButton, function(...) self:LoadButton_Click(...) end, false) addEventHandler("onClientGUIAccepted", self.m_EditAddress, function(...) self:LoadButton_Click(...) end, false) addEventHandler("onClientGUIClick", self.m_BackButton, function(...) self:BackButton_Click(...) end, false) addEventHandler("onClientGUIClick", self.m_ForwardButton, function(...) self:ForwardButton_Click(...) end, false) addEventHandler("onClientGUIClick", self.m_ButtonClose, function(...) self:CloseButton_Click(...) end, false) self:loadURL("https://mtasa.com/") end function WebBrowserGUI:Browser_Navigate(targetURL, isBlocked) if isBlocked then self.m_RequestedURL = targetURL Browser.requestDomains({targetURL}, true) return end if self.m_History[#self.m_History] ~= targetURL then self.m_History[#self.m_History + 1] = targetURL end if #self.m_History > 1 then self.m_BackButton:setEnabled(true) end end function WebBrowserGUI:Browser_WhitelistChange(whitelistedURLs) for i, v in pairs(whitelistedURLs) do if self.m_RequestedURL:find(v) then self.m_Browser:getBrowser():loadURL(self.m_RequestedURL) self.m_RequestedURL = "" end end end function WebBrowserGUI:Browser_DocumentReady() self.m_Window:setText("Web browser: " .. tostring(self.m_Browser:getBrowser():getTitle())) self.m_EditAddress:setText(tostring(self.m_Browser:getBrowser():getURL())) end -- // GUI Navigation function WebBrowserGUI:LoadButton_Click(param1, state) if isElement(param1) or (param1 == "left" and state == "up") then self:loadURL(self.m_EditAddress:getText()) end end function WebBrowserGUI:BackButton_Click(button, state) if button == "left" and state == "up" then local url = self.m_History[#self.m_History - 1] self.m_ForwardHistory[#self.m_ForwardHistory + 1] = self.m_History[#self.m_History] self.m_History[#self.m_History] = nil if #self.m_History <= 1 then self.m_BackButton:setEnabled(false) end self.m_ForwardButton:setEnabled(true) self:loadURL(url) end end function WebBrowserGUI:ForwardButton_Click(button, state) if button == "left" and state == "up" then local url = self.m_ForwardHistory[#self.m_ForwardHistory] if url then self.m_ForwardHistory[#self.m_ForwardHistory] = nil if #self.m_ForwardHistory == 0 then self.m_ForwardButton:setEnabled(false) end self:loadURL(url) end end end function WebBrowserGUI:CloseButton_Click(button, state) if button == "left" and state == "up" then self.m_Window:destroy() showCursor(false) --GuiElement.setInputMode("no_binds_when_editing") WebBrowserGUI.instance = nil end end -- \\ GUI Navigation function WebBrowserGUI:loadURL(url) if url == "" then self.m_EditAddress:setText("about:blank") self.m_Browser:getBrowser():loadURL("about:blank") return elseif url:sub(0, 6) == "about:" then self.m_EditAddress:setText(url) self.m_Browser:getBrowser():loadURL(url) return elseif url:sub(0, 7) ~= "http://" and url:sub(0, -- s8) --> ~= "https://" then url = "http://"..url end if Browser.isDomainBlocked(url, true) then self.m_RequestedURL = url Browser.requestDomains({url}, true) return end self.m_EditAddress:setText(url) self.m_Browser:getBrowser():loadURL(url) end + ابي اشيل الايقونه واذا ضغط اللت يطلع له سهم م ابيها هذي
-
حطيته كذا ولا ضبط addEvent("gui",true) addEventHandler("gui",root, function() local acc=getPlayerAccount(client) if ( hasObjectPermissionTo ( PlayerElement, "command.slap", true ) ) then triggerClientEvent(client,"openGui",client) end end )
-
ممكن تخلي لي الماب م يفتح الا للي مفتوح عنده الميوت فالاسل؟
-
السلام عليكم معي لوحة م تفتح الا لـ قروب معين وهذا الكود if(isObjectInACLGroup("user."..getAccountName(acc),aclGetGroup("admin"))) then انا ابي اغيره ابي اللي مفتوح له الكيك في الاسل تفتح معه اللوحه
-
انا مفهمت وش قصده ؟ انت تبي الباب يفتح لقروب ادمن مثلا ؟ حطيت ادمن ولا ضبط
-
استضافة سعودي هوست , ) * تحيّةٌ طيّبةْ أيُّها الأعضاء الكِرام، وبَعدْ : يسُرّني افتتاح هذا الموضوع لطرح استضافة ( .... سعودي هوست .... ) ! ------------------------------ اسم الاستضافة : .......اورجينال هوست...............Original_host.......... رابطالاستضافة : ......................http://51.255.215.208/web........... اصحاب الإستضافة : ......... ( w7sH(tlal) ) : ..: ( Ramy(L1nk)x )............. دعم الفني الاستضافة : .................{Skipe w7sH: {tlal767.............. دعم الفني الاستضافة : .................{Skipe original: {original.host.............. تاريخ إنشاء الاستضافة : ...........2015 - 2016................................. مواصفات خادم الاستضافة : .....Germany, 8Gb .RAm............................... لوحات تحكم الاستضافة : ..........× Open Game PaneL............................ خدمات الاستضافة : ......................MineCraft , Mta Sa , TeamSpeak.... آيبي السيرفر التجريبي للإستضافة : .....mtasa://51.255.215.208:27315............ ! ! ! × صورة لوحة التحكم × # × صورة صفحة الدخول × ! ! ! ملاحظة يوجد دعم فوري عند دخولك للموقع ! خطط سيرفرات MTaSA نوع الخدمه : Mta Sa عدد الاعبين : 200 بورت مميز : 10 ريال اضافية سعر الخدمة : 10 ريال الكاش يو : 1$ الخطة الثانية نوع الخدمه : Mta Sa عدد الاعبين : 500 بورت مميز : 10 ريال اضافية سعر الخدمة : 30 ريال الكاش يو :2$ الخطة الثالثة : نوع الخدمه : Mta Sa عدد الاعبين : 800 بورت مميز : 10 ريال اضافية سعر الخدمة : 40 ريال الكاشيو : 5$ الخطة الرابعه نوع الخدمه : Mta Sa عدد الاعبين : 1024 بورت مميز : مجانا سعر الخدمة : 50 ريال الكاش يو :9$ ============================== خطط التيم سبيك الخطة الاولى : نوع الخدمه : TS3 عدد الاعبين : 30 بورت مميز : 10 ريال اضافية سعر الخدمة : 10 ريال سوا الكاش يو :1 $ الخطة الثانية: نوع الخدمه : TS3 عدد الاعبين : 90 بورت مميز : 10 ريال اضافية سعر الخدمة : 20 ريال الكاش يو : 3$ الخطة الثالثة : نوع الخدمه : TS3 عدد الاعبين : 100 بورت مميز : 10 ريال اضافية سعر الخدمة : 40 ريال الكاش يو : 5$ الخطة الرابعة : نوع الخدمه : TS3 عدد الاعبين : 500 بورت مميز : مجانا سعر الخدمة : 50 ريال الكاش يو : $9 .. وكل جمعة سحب على سيرفرات بروزنية .. " بالنسبة للحماية لاتشيل هم بإذن الله " وصلّى الله وسلّم على نبيّنا محمد وعلى آله وصحبِه وسلم. سبحانك اللهمّ وبحمدك، أشهد ألا إله إلا أنت، أستغفِرُكَ وأتوب إليك. والسلام عليكم ورحمة الله وبركاته.
-
اسم الاستضافة : .......اورجينال هوست...............Original_host.......... رابطالاستضافة : ......................http://51.255.215.208/web........... اصحاب الإستضافة : ......... ( w7sH(tlal) ) : ..: ( Ramy(L1nk)x )............. دعم الفني الاستضافة : .................{Skipe w7sH: {tlal767.............. دعم الفني الاستضافة : .................{Skipe original: {original.host.............. تاريخ إنشاء الاستضافة : ...........2015 - 2016................................. مواصفات خادم الاستضافة : .....Germany, 8Gb .RAm............................... لوحات تحكم الاستضافة : ..........× Open Game PaneL............................ خدمات الاستضافة : ......................MineCraft , Mta Sa , TeamSpeak.... آيبي السيرفر التجريبي للإستضافة : .....mtasa://51.255.215.208:27315............ ! ! ! × صورة لوحة التحكم × # × صورة صفحة الدخول × ! ! ! ملاحظة يوجد دعم فوري عند دخولك للموقع ! خطط سيرفرات MTaSA نوع الخدمه : Mta Sa عدد الاعبين : 200 بورت مميز : 10 ريال اضافية سعر الخدمة : 10 ريال الكاش يو : 1$ الخطة الثانية نوع الخدمه : Mta Sa عدد الاعبين : 500 بورت مميز : 10 ريال اضافية سعر الخدمة : 30 ريال الكاش يو :2$ الخطة الثالثة : نوع الخدمه : Mta Sa عدد الاعبين : 800 بورت مميز : 10 ريال اضافية سعر الخدمة : 40 ريال الكاشيو : 5$ الخطة الرابعه نوع الخدمه : Mta Sa عدد الاعبين : 1024 بورت مميز : مجانا سعر الخدمة : 50 ريال الكاش يو :9$ ============================== خطط التيم سبيك الخطة الاولى : نوع الخدمه : TS3 عدد الاعبين : 30 بورت مميز : 10 ريال اضافية سعر الخدمة : 10 ريال سوا الكاش يو :1 $ الخطة الثانية: نوع الخدمه : TS3 عدد الاعبين : 90 بورت مميز : 10 ريال اضافية سعر الخدمة : 20 ريال الكاش يو : 3$ الخطة الثالثة : نوع الخدمه : TS3 عدد الاعبين : 100 بورت مميز : 10 ريال اضافية سعر الخدمة : 40 ريال الكاش يو : 5$ الخطة الرابعة : نوع الخدمه : TS3 عدد الاعبين : 500 بورت مميز : مجانا سعر الخدمة : 50 ريال الكاش يو : $9 .. وكل جمعة سحب على سيرفرات بروزنية .. " بالنسبة للحماية لاتشيل هم بإذن الله " وصلّى الله وسلّم على نبيّنا محمد وعلى آله وصحبِه وسلم. سبحانك اللهمّ وبحمدك، أشهد ألا إله إلا أنت، أستغفِرُكَ وأتوب إليك. والسلام عليكم ورحمة الله وبركاته.
-
السلام عليكم عندي مود السجن ابي اذا سجنت واحد م يقدر يفتح اف 1 او اف 2 هذا كود سيرفر Command = get("command") -- getTheCommand rRoot = getResourceRootElement(getThisResource()) ------ function getData(to) local file = xmlLoadFile("data.xml") jTable = {} tTable = {} if file then for k,v in ipairs (xmlNodeGetChildren(xmlFindChild(file,"Jails",0)))do local name = xmlNodeGetAttribute(v,"name") local posX,posY,posZ = xmlNodeGetAttribute(v,"posX"),xmlNodeGetAttribute(v,"posY"),xmlNodeGetAttribute(v,"posZ") local int = xmlNodeGetAttribute(v,"int") local dim = xmlNodeGetAttribute(v,"dim") table.insert(jTable, {name,posX,posY,posZ,int,dim}) end for k,v in ipairs (xmlNodeGetChildren(xmlFindChild(file,"time",0)))do local times = xmlNodeGetAttribute(v,"times") for i =1,50 do local iTime = gettok ( times, i, string.byte(',') ) if iTime then -- if tonumber(iTime) > 59.5 then iTime = math.floor(iTime / 60) iTimeDes = "Minutes" if iTime > 59.5 then iTime = math.floor(iTime / 60) iTimeDes = "Hours" end else iTimeDes = "Seconds" end table.insert(tTable,{iTime,iTimeDes}) end end end end triggerClientEvent(to,"sendDataz",to,jTable,tTable) -- sending to client event end addEvent("getDataz",true) addEventHandler("getDataz",root,getData) addCommandHandler ( Command, -- Adding The Command Handler function ( player, cmd ) if hasObjectPermissionTo ( player, "command.kick" ) then triggerClientEvent(player,"jailShow",player) else outputChatBox(" Access Denied ",player,255,0,0) end end ) function jailPlayer ( player ) if ( player and isElement ( player ) ) then if ( getPlayerAccount ( player ) and not isGuestAccount ( getPlayerAccount ( player ) ) ) then if hasObjectPermissionTo ( player, "command.kick" ) then triggerClientEvent(player,"jailShow",player) else outputChatBox(" Access Denied ",player,255,0,0) end end end end anims = { } function removeVehicle(thePlayer) if isPedInVehicle(thePlayer) then destroyElement(getPedOccupiedVehicle(thePlayer)) end end function JailHim(jailed,theJails,time,timeDes,showWho,timeReady) thePlayer = getPlayerFromName(jailed) if not thePlayer then outputChatBox("** #FFFF00Please Select a Player !",source,255,0,0,true) return end removePedFromVehicle(thePlayer) for k,v in ipairs ( jTable ) do if theJails == v[1] then theJail = v end end if theJail then if tostring(time) then if timeReady == true then theTimex = tonumber(time) else theTimex = gettok ( time, 1, string.byte(timeDes) ) end if timeDes == "Hours" then theTimex = math.floor(theTimex*60*60*1000) elseif timeDes == "Minutes" then theTimex = math.floor(theTimex*60*1000) elseif timeDes == "Seconds" then theTimex = math.floor(theTimex*1000) end startJailTimer ( thePlayer , theTimex ) local x,y,z = theJail[2],theJail[3],theJail[4] local int = theJail[5] local dim = theJail[6] setElementInterior ( thePlayer, int ) setElementDimension ( thePlayer, dim ) setElementPosition (thePlayer,x,y,z ) setElementData(thePlayer,"jailed",true) setElementData(rRoot,""..getPlayerSerial(thePlayer).."-j",true) toggleControl(thePlayer,"fire",false) if showWho ~= true then outputChatBox("** #FFFF00You Jailed [ "..getPlayerName(thePlayer).." #FFFF00] at "..theJail[1].." For "..time,source,255,0,0,true) end outputChatBox("* "..getPlayerName(thePlayer).." has been Jailed by "..getPlayerName(source).." ("..time..") ",root,255,0,0,false) local randomAnim setPedAnimation(thePlayer,"SMOKING",anims[math.random(#anims)],theTimex/2) else outputChatBox("** #FFFF00Please Select Time !",source,255,0,0,true) end else outputChatBox("** #FFFF00Please Select a Jail !",source,255,0,0,true) end end addEvent("JailHimx",true) addEventHandler("JailHimx",root,JailHim) function unJailHim(jailed,showWho) thePlayer = getPlayerFromName(jailed) if not thePlayer then outputChatBox("** #FFFF00Please Select a Player !",source,255,0,0,true) return end --if getElementData(thePlayer,"jailed") == true then setElementInterior ( thePlayer, 0) setElementDimension ( thePlayer, 0 ) setElementPosition ( thePlayer, -2421.8359375, -6942.890625, 7.8000001907349) setElementData(thePlayer,"jailed",false) setElementData(rRoot,""..getPlayerSerial(thePlayer).."-j",false) if showWho ~= true then outputChatBox("** #FFFF00You Released [ "..getPlayerName(thePlayer).." #FFFF00]",source,255,0,0,true) end outputChatBox("* "..getPlayerName(thePlayer).." has been unJailed by "..getPlayerName(source).." ",root,0,255,2,false) setPedAnimation(thePlayer) stopJailTimer(Player) toggleControl(thePlayer,"fire",true) -- setTimer(killPed,1500,1,thePlayer) --else -- outputChatBox("The Player is Not Jailed !",source,255,0,0,true) --end end addEvent("unJailHim",true)-- unJail addEventHandler("unJailHim",root,unJailHim) addEvent("onJailEnd",true) addEventHandler("onJailEnd",root,function(player) unJailHim(getPlayerName(player),true) end ) addEventHandler("onPlayerSpawn",root, -- Check If He Is Jailed [ OnSpawn ] function() if getElementData(source,"jailed") == true then randomJail = jTable[math.random(#jTable)] if randomJail then x,y,z = randomJail[2],randomJail[3],randomJail[4] int = randomJail[5] dim = randomJail[6] setElementInterior ( source, int ) setElementDimension(source,dim) setElementPosition (source,x,y,z ) end end end) addEventHandler("onPlayerJoin",root, -- Check If He Is Jailed - By Serial [ OnJoin ] function() if getElementData(rRoot,""..getPlayerSerial(source).."-j") == true then randomJail = jTable[math.random(#jTable)] if randomJail then x,y,z = randomJail[2],randomJail[3],randomJail[4] int = randomJail[5] dim = randomJail[6] setElementInterior ( source, int ) setElementDimension(source,dim) setElementPosition (source,x,y,z ) -- time = getElementData(rRoot,""..getPlayerSerial(source).."-t",time) or 5 * 1000 startJailTimer(source,time) setElementData(source,"jailed",true) end end end ) ---- function startJailTimer(Player,theTime) -- to start mission timer .. if Player then TimerDisplay = textCreateDisplay() m,s,cs = msToTimeStr(theTime) fullTime = m..":"..s TimerText = textCreateTextItem ( "Time Left : "..tostring(fullTime).."", 0.39, 0.7 ,"medium",0,255,0,255,2.0,"left","center",255) textDisplayAddText ( TimerDisplay, TimerText ) textDisplayAddObserver ( TimerDisplay, Player ) sortTimerShit(Player,TimerText,theTime) end end --Robbed from JailTimerr resource , and it was robbed from arc_ function msToTimeStr(ms) if not ms then return '' end if ms < 0 then return "0","00","00" end local centiseconds = tostring(math.floor(math.fmod(ms, 1000)/10)) if #centiseconds == 1 then centiseconds = '0' .. centiseconds end local s = math.floor(ms / 1000) local seconds = tostring(math.fmod(s, 60)) if #seconds == 1 then seconds = '0' .. seconds end local minutes = tostring(math.floor(s / 60)) return minutes, seconds, centiseconds end function sortTimerShit(plr,timer,time) -- to sort timer's shit .. if timer and time then if isTimer(timerShitTimer) then killTimer(timerShitTimer) end timerShitTimer = setTimer(function(plr) time = time - 70 m,s,cs = msToTimeStr(time) fullTime = m..":"..s textItemSetText(timer,"Time Left : "..tostring(fullTime).."") if plr then setElementData(rRoot,""..getPlayerSerial(plr).."-t",time) end if (
-
انا حاطه في سيرفري الهجوله م عندي مود جروبات ولا ششي