# تحت التطوير :كود - Useful Arab functions

## Recommended Posts

طيب وش رايك بهذي الطريقة :

```function table.toString ( theTable, char )
assert ( type ( theTable ) == 'table', 'expected table at argument 1 got ' .. type ( theTable ) )
assert ( type ( char ) == 'string', 'expected string at argument 2 got ' .. type ( char ) )
assert ( char:len ( ) <= 2, 'expected charcter at argument 2 got ' .. char )
local m, t = '', { };
for _, v in pairs ( theTable ) do
table [ 'insert' ] ( t, v )
end
for k, v in pairs ( t ) do
if ( k == #t ) then
m = m .. v
else
m = m .. v .. char
end
end
return m;
end```

في النهاية فرق كم سطر

#Edit:

بسم الله الرحمن الرحيم

table.toStringWithIndex

وضيفة نوعا ما مفيدة

طبعا الوضيفة زي الي فوق لكن الفرق هو انه فيه بارتمر زيادة والي هو الأندكس

Syntax

`table.toStringWithIndex ( table theTable, string separatingChar [, index = true ] )`

Source Code :

```function table.toStringWithIndex ( theTable, char, index )
assert ( type ( theTable ) == 'table', 'expected table at argument 1 got ' .. type ( theTable ) )
assert ( type ( char ) == 'string', 'expected string at argument 2 got ' .. type ( char ) )
assert ( char:len ( ) <= 2, 'expected charcter at argument 2 got ' .. char )
local index = index or false
assert ( type ( index ) == 'boolean', 'expected bool at argument 3 got ' .. type ( index ) )
local m, t = '', { };
for _, v in pairs ( theTable ) do
table [ 'insert' ] ( t, { _, v } )
end
for k, v in pairs ( t ) do
if ( k == #t ) then
if ( index ) then
m = m .. v [ 1 ] .. ' = ' .. v [ 2 ]
else
m = m .. v [ 2 ]
end
else
if ( index ) then
m = m .. v [ 1 ] .. ' = ' .. v [ 2 ] .. char
else
m = m .. v [ 2 ] .. char
end
end
end
return m;
end```

Example :

```print(table.toStringWithIndex({[1234]='a',[100]='b',[400]='c'},', ',true))
--[[
output :
100 = b, 1234 = a, 400 = c
]]```

Edited by #,+( _xiRoc[K]; >
• 1
• Replies 1.1k
• Created

#### Popular Days

@#,+( _xiRoc[K]; >  افضل من طريقتك table.concat استعمال

##### Link to comment

السلام عليكم روحمة الله وبركاته

isArabicLanguage

وظيفة التحقق من اللغة العربية

Syntax :

`isArabicLanguage ( Text )`

Text : النص المراد التحقق منه

Code :

```ArabicCharacters = { 'ا' , 'أ' , 'إ' , 'ض' , 'ص' , 'ط' , 'غ' , 'ق' , 'ث' , 'ف' , 'ع' , 'ه' , 'خ' , 'ح' , 'ج' , 'د' , 'ئ' , 'ء' , 'ؤ' , 'ر' , 'لا' , 'ى' , 'آ' , 'ة' , 'و' , 'ز' , 'ظ' , 'ذ' , 'ك' , 'م' , 'ن' , 'ت' , 'ل' , 'ب' , 'ي' , 'س' , 'ش }

function isArabicLanguage ( Text )
if ( Text ) then
assert ( type ( Text ) == 'string' , 'Bad Arg #1 , [ '..Text..' ] not string' )
for _ , Characters in ipairs ( ArabicCharacters ) do
if ( string.find ( Text , Characters ) ) then
return true
end
end
else error ( 'Bad Arg #1 nil value' )
end
end```

Ex. :

```addCommandHandler ( 'اللغة' ,
function ( Player , _ , Text )
if ( isArabicLanguage ( Text ) ) then
outputChatBox ( '* الكلام باللغة العربية' , Player )
end
end
)```

هذا وكان كل شي , ما ادري اذا الوظيفة موجودة من قبل ,

والسلام عليكم ورحمة الله وبركاته

Edited by !#NssoR_)
Modifed as requested.
• 2
##### Link to comment

السلام عليكم ورحمة الله وبركاته ,

convertTime

وظيفة تحويل الوقت ,

Syntax :

`convertTime ( TimeID , Type , Time )`
TimeID : رقم التعريف ( الآي دي ) , هذا بتحطه عشان اذا تبي تسوي أكثر من وقت تحط أي رقم من عندك عشان تجلبه لما تسوي التايمر
Type : الرمز أو النوع , يوجد أربعة أنواع , وتقدر تضيف إذا تبي  , و يكون في علامة تنصيص
● s : الثانية
● m : دقيقة
● h : ساعة
● d : يوم
Time : وهو الوقت الذي تريد تحويله

Function Code :
```TimerTable = { Times = { } , Timers = { { 's' , 1000 } , { 'm' , 1000 * 60 } , { 'h' , 1000 * 60 * 60 } , { 'd' , 1000 * 60 * 60 * 24 } } }

function convertTime ( TimeID , Type , Time )
if ( Type ) and ( Time ) and ( TimeID ) then
if ( Type ~= '' ) or ( Type == nil ) then
if ( type ( Type ) == 'string' ) then
if ( type ( Time ) == 'number' ) then
if ( type ( TimeID ) == 'number' ) then
for _ , time in ipairs ( TimerTable.Timers ) do
if ( Type == time [ 1 ] ) then
TimerTable.Times [ TimeID ] = nil
local TimeTable = time [ 2 ]
local TimeFunction = Time
TimerTable.Times [ TimeID ] = TimeTable*TimeFunction
end
end
else error ( 'Bad Arg#1 , The ( '..TimeID..' ) is not a numeric value' )
end
else error ( 'Bad Arg#3 , The ( '..Time..' ) is not a numeric value' )
end
else error ( 'Bad Arg#3 , The ( '..Type..' ) is not a textual value' )
end
else error ( 'Bad Arg#2 , The ( '..Type..' ) value is null' )
end
else error ( 'One of the values does not exist' )
end
end```

وظيفة جلب الوقت المحول :

getConvertingTime

Syntax :

`getConvertingTime ( TimeID )`

TimeID : رقم تعريف تحويل الوقت أو الآي دي الوقت الذي تم تحويله ,

Function Code :

```function getConvertingTime ( TimeID )
if ( TimeID ) then
if ( type ( TimeID ) == 'number' ) then
return TimerTable.Times [ TimeID ]
else error ( 'Bad Arg#1 , The ( '..TimeID..' ) is not a numeric value' )
end
else error ( 'The first value does not exist' )
end
end```

Ex. :

```convertTime ( 1 , 's' , 10 )

addCommandHandler ( 'Time' ,
function ( Player )
local Time = getConvertingTime ( 1 )
setTimer ( function ( 	)
outputChatBox ( 'Welcome' , root )
end , Time , 1 )
end
)```

ما أدري إذا الوظيفة موجودة من قبل , والسلام عليكم ورحمة الله وبركاته

##### Link to comment

وضيفتك تقدر تختصرها كذا :

```TimerTable = { { 's' , 1000 } , { 'm' , 1000 * 60 } , { 'h' , 1000 * 60 * 60 } , { 'd' , 1000 * 60 * 60 * 24 } };

function convertTime ( Type, Time )
assert ( type ( Type ) == 'string', '[convertTime] expected string at argument 1 @ got ' .. type ( Type ) )
assert ( type ( Time ) == 'number', '[convertTime] expected number at argument 2 @ got ' .. type ( Time ) )
for _, v in ipairs ( TimerTable ) do
if ( Type == v [ 1 ] ) then
return v [ 2 ] * Time;
end
end
return false;
end```

##### Link to comment
23 minutes ago, #,+( _xiRoc[K]; > said:

@#_iMr.[E]coo

وضيفتك تقدر تختصرها كذا :

```
TimerTable = { { 's' , 1000 } , { 'm' , 1000 * 60 } , { 'h' , 1000 * 60 * 60 } , { 'd' , 1000 * 60 * 60 * 24 } };function convertTime ( Type, Time )assert ( type ( Type ) == 'string', '[convertTime] expected string at argument 1 @ got ' .. type ( Type ) )assert ( type ( Time ) == 'number', '[convertTime] expected number at argument 2 @ got ' .. type ( Time ) )    for _, v in ipairs ( TimerTable ) do         if ( Type == v [ 1 ] ) then             return v [ 2 ] * Time;        end    end    return false;end```

كنت مختصر منها اكثر من كذا .. بس طقى جهازي وراح التعديل .. + فكرتك حلوة ما فكرت بيها

رح اعدله لما افضى , شكرا للمجهودك

##### Link to comment

السلام عليكم ورحمة الله وبركاته

وظيفة fixGuiPosition

من الاسم الوظيفه تقوم بضبط الجيو المنت ليتناسب مع كل الشاشات

نجي للسورس كود

```function fixGuiPosition(guiElement,sx,sy,relative)
local relative=relative or false
local x,y=guiGetPosition(guiElement,relative)
local w,h=guiGetSize(guiElement,relative)
if guiSetPosition(guiElement,sx*x,sy*y,relative) and guiSetSize(guiElement,sx*w,sy*h,relative) then
return true
end
return false
end```

الارقمنتات

guiElement هي الالمنت اللي تبي تنفذ عليه الوظيفه

sxهو عرض الشاشه حقتك مثلا انا 1366

sy هو طول الشاشه حقتك انا 768

relative هو الريلاتف يعني باختصار يوم انشات اللوحه انشاتها برقم عشري ولا ارقام كبيره هي في العاده تكون false

نجي للساينتكس

:

`fixGuiPosition(element guiElement,int sx,int sy, bolean relativ)`

نجي للامثله

:

```function fixGuiPosition(guiElement,sx,sy,relative)
local relative=relative or false
local x,y=guiGetPosition(guiElement,relative)
local w,h=guiGetSize(guiElement,relative)
if guiSetPosition(guiElement,sx*x,sy*y,relative) and guiSetSize(guiElement,sx*w,sy*h,relative) then
return true
end
return false
end

local GUIEditor={
Window={},
Button={}
}
GUIEditor.Window[1]=guiCreateWindow(20,50,20,50,'test',false)
GUIEditor.Window[2]=guiCreateWindow(20,50,20,50,'test',false)
GUIEditor.Button[1]=guiCreateButton(10,5,20,30,'test',false,GUIEditor.Window[1])
-----------------------------example 1
fixGuiPosition(GUIEditor.Window[1],1366,768)
--------------------وهذا مثال لو معك اكثر من نافذه مثلا

for k=1,#GUIEditor.Window do
fixGuiPosition(GUIEditor.Window[k],1366,768)
end```

وفي الختام اتمنى منكم الدعاء

Edited by Master_MTA
• 1
##### Link to comment

حلو, لكن موجود من قبل

##### Link to comment
14 hours ago, #,+( _xiRoc[K]; > said:

@Master_MTA

حلو, لكن موجود من قبل

لا في فرق  حبيب قلبي ذي تزبط النافذه بمكانها الاصلي مب زي

centerWindow

لا لاما تحطها بنص الشاشه ذي تحطها بمكانها اللي سويته انت بس عند كل اللاعبين ما اتوقع شفتها من قبل

##### Link to comment
1 hour ago, Master_MTA said:

لا في فرق  حبيب قلبي ذي تزبط النافذه بمكانها الاصلي مب زي

centerWindow

لا لاما تحطها بنص الشاشه ذي تحطها بمكانها اللي سويته انت بس عند كل اللاعبين ما اتوقع شفتها من قبل

اللعبة ماتت خلاص

• 2
##### Link to comment

بسم الله الرحمن الرحيم

convertTimeToSeconds

```function convertTimeToSeconds(y,d,h,m,s)
local y,d,h,m,s,newTime=y or 0,d or 0,h or 0,m or 0,s or 0,0
local newTime=newTime+(31556926*y)+(86400*d)+(3600*h)+((3600/60)*m)+(((3600/60)/60)*s)
return math.floor(newTime)
end```

Arguments :

y: السنوات

d: الأيام

h: الساعات

m: الدقائق

s: الثواني

الوضيفة تقوم بتحويل الوقت الى ثواني

Edited by #,+( _xiRoc[K]; >
• 2
##### Link to comment

بسم الله الرحمن الرحيم

guiCreateAnimation

gui-Elementالفنكشن يعمل تأثير لأي نوع من الــ

يعني الألفا حقت الألمنت تزداد تدريجيا او تنقص تدريجيا

_______________________________

الفنكشن معه افنت 'onClientGUIAnimationEnd'

هذا الأفنت هو لما التأثير ينتهي

_______________________________

Event :

Event Source:

guiElement - الألمنت المطبق عليه التأثير

Paratmers:

openState

_______________________________

Function :

Syntax:

`bool guiCreateAnimation ( element gui-element, bool openState[ , int effectSpeed = 1 ] )`

_______________________________

Source Code:

```    local guiTable = { };
addEvent ( 'onClientGUIAnimationEnd', true )

function animationRender ( guiElement, open, speed )
guiTable [ guiElement ] [ 'guiNow' ] = getTickCount (    );
local anim1, anim2 = interpolateBetween ( 0, 100, 0, 100, 0, 0, ( guiTable [ guiElement ] [ 'guiNow' ] - guiTable [ guiElement ] [ 'guiTick' ] ) / ( speed * 1000 ), 'Linear' )
if ( open ) then
guiSetAlpha ( guiElement, anim1 / 100 )
else
guiSetAlpha ( guiElement, anim2 / 100 )
end
if ( guiTable [ guiElement ] [ 'guiNow' ] > guiTable [ guiElement ] [ 'guiTick' ] + ( speed * 1000 ) ) then
removeEventHandler ( 'onClientRender', root, guiTable [ guiElement ] [ 'guiEvent' ] )
guiTable [ guiElement ] = nil
triggerEvent ( 'onClientGUIAnimationEnd', guiElement, open )
if ( not open ) then
guiSetVisible ( guiElement, false )
end
end
end

function guiCreateAnimation ( guiElement, open, speed )
assert ( isElement ( guiElement ) and getElementType ( guiElement ):find ( 'gui-' ), 'guiCreateAnimation bad argument @ 1 gui-Element expected, got ' .. type ( guiElement ) )
assert ( type ( open ) == 'boolean', 'guiCreateAnimation bad argument @ 2 boolean expected, got ' .. type ( open ) )
local speed = speed or 1
assert ( type ( speed ) == 'number', 'guiCreateAnimation bad argument @ 3 number expected, got ' .. type ( speed ) )
if ( guiTable [ guiElement ] ) then
return false
end
guiSetVisible ( guiElement, true )
guiTable [ guiElement ] = { };
guiTable [ guiElement ] [ 'guiTick' ], guiTable [ guiElement ] [ 'guiEvent' ] = getTickCount ( ),
function ( )
animationRender ( guiElement, open, speed )
end
addEventHandler ( 'onClientRender', root, guiTable [ guiElement ] [ 'guiEvent' ] )
return true
end```

_______________________________

Arguments:

1 - gui-element - gui-element النافذة او الــ

المراد تطبيق التأثير عليها

2 - openState - طريقة التأثير

اذا كان true

بينفتح تدريجيا و العكس

3 - effectSpeed - سرعة التأثير

_______________________________

Example:

```local sPos = { guiGetScreenSize ( ) };

GUIEditor = {
window = {}
}
function()
GUIEditor.window[1] = guiCreateWindow( ( sPos [ 1 ] - 520 ) / 2, ( sPos [ 2 ] - 452 ) / 2, 520, 452, "Flashing window", false)
guiWindowSetSizable(GUIEditor.window[1], false)
btn = guiCreateButton(50, 50, 50, 50, '', false, GUIEditor.window[1])
guiCreateAnimation ( GUIEditor.window[1], true, 0.5 )
guiSetFlashing ( GUIEditor.window[1], true )
outputChatBox 'Start !'
setTimer ( function ( )
guiSetFlashing ( GUIEditor.window[1], false )
outputChatBox 'Finish !'
end, 5000, 1 )
end
)

local flasherEvent = { };

function guiSetFlashing ( wnd, state )
if ( state ) then
flasherEvent [ wnd ] = function ( state )
if ( source == GUIEditor.window[1] ) then
guiCreateAnimation ( GUIEditor.window[1], not state, 0.5 )
end
end
addEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
else
if ( flasherEvent [ wnd ] ) then
removeEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
end
end
end```

هذا المثال بيسوي فلاش للوحة

وبعد 5 ثواني بيختفي الفلاش

Edited by !#NssoR_)
As requested.
• 1
##### Link to comment
2 minutes ago, #,+( _xiRoc[K]; > said:

تعديل بسيط على السورس كود الي فوق :

كان يفضل انك تسميها اسم اخر لان الام لا يتوافق مع الوظيفه

او شي مثل كذا لكن وظيفه حلوه لكن اتوقع تقدر تستخدم التايمر بكذا يكون سهل الموضوع

##### Link to comment
2 minutes ago, Master_MTA said:

كان يفضل انك تسميها اسم اخر لان الام لا يتوافق مع الوظيفه

او شي مثل كذا لكن وظيفه حلوه لكن اتوقع تقدر تستخدم التايمر بكذا يكون سهل الموضوع

الصراحة انا الأسم مادري وش احطه

لكن في النهاية الأسم مايهم تقدر تغيره

+ الطريقة هذي افضل من التايمر

Edited by #,+( _xiRoc[K]; >
##### Link to comment
Just now, #,+( _xiRoc[K]; > said:

+ طريقتي افضل من التايمر

اشوف التايمر افضل من الراندر واقرا صفحة الويكي الخاصه بالراندر

وخاصة انك لو حطيت تايمر بتقدر تاثر على سرعة تغير الالفا والخ

اما الراندر فهو يحدث في الملي سكند او مدري شيسمونها اكيت تقدر تحدد بالراندر ايضا الوقت لكن افضل التايمر بحيث انه ما يجيب لاج للاعب

وعلى العموم كلها وجهات نظر لكن شغل حلو بالتوفيق

##### Link to comment
6 minutes ago, Master_MTA said:

اشوف التايمر افضل من الراندر واقرا صفحة الويكي الخاصه بالراندر

وخاصة انك لو حطيت تايمر بتقدر تاثر على سرعة تغير الالفا والخ

اما الراندر فهو يحدث في الملي سكند او مدري شيسمونها اكيت تقدر تحدد بالراندر ايضا الوقت لكن افضل التايمر بحيث انه ما يجيب لاج للاعب

وعلى العموم كلها وجهات نظر لكن شغل حلو بالتوفيق

ماتوقع انها بتجيب لاق

لكن المهم الطريقتين صح

##### Link to comment

guiEditSetOnlyNumbers
< مدري لو الوظيفة موجودة من قبل ولكن على حسب بحثي مالقيتها >
بسم الله الرحمن الرحيم,
سلام عليكم ورحمة الله وبركاتة

وظيفة واضحة من أسمها ..
تجعل الأيديت لا يقبل الا الأرقام ,
سورس كود | Source Code :

```function guiEditSetOnlyNumbers ( edit, boolean )
local function CheckNumbers ( )
local currText = guiGetText( source )
local newText = string.gsub( currText, '[^0-9]', '' )
if newText ~= currText then
guiSetText( source, newText )
end
end
if edit and boolean then
if getElementType ( edit ) == 'gui-edit' and type ( boolean ) == 'boolean' then
if boolean == true then
local CheckEventTrue = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventTrue ) do
if v == CheckNumbers then
removeEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
addEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
else
local CheckEventFalse = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventFalse ) do
if v == CheckNumbers then
addEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
removeEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
end```

السينتاكس | Syntax :

`bool guiEditSetOnlyNumbers ( element edit, bool boolean )`

الأرقمنتات المطلوبة | Required Arguments :

edit : الأيديت الذي تريد جعله يوضع الأرقام

boolean : تحديد اما ان يجعله يوضع الأرقام فقط ام لا

مثال | Example :

```function guiEditSetOnlyNumbers ( edit, boolean )
local function CheckNumbers ( )
local currText = guiGetText( source )
local newText = string.gsub( currText, '[^0-9]', '' )
if newText ~= currText then
guiSetText( source, newText )
end
end
if edit and boolean then
if getElementType ( edit ) == 'gui-edit' and type ( boolean ) == 'boolean' then
if boolean == true then
local CheckEventTrue = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventTrue ) do
if v == CheckNumbers then
removeEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
addEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
else
local CheckEventFalse = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventFalse ) do
if v == CheckNumbers then
addEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
removeEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
end
_edit = guiCreateEdit( ... )
guiEditSetOnlyNumbers ( _edit, true )```

والسلام خير الختام

• 1
##### Link to comment

وضيفة حلوة بس في خطأ بسيط

هذا السطر :

```assert ( getElementType ( pro ) == "gui-progressbar" , "Bad Arg 1 got " .. type ( pro ) )
```

يصير كذا :

`assert ( isElement ( pro ) and getElementType ( pro ) == "gui-progressbar" , "Bad Arg 1 got " .. type ( pro ) )`

##### Link to comment

هذا موب خطأ لان لو ماكان الالمنت موجود بيرجع فولس ويقولك باد ارقمنت

• 1
##### Link to comment
46 minutes ago, Abdul KariM said:

هذا موب خطأ لان لو ماكان الالمنت موجود بيرجع فولس ويقولك باد ارقمنت

يب لكن اتوقع بيطلع خطأ

getElementType

expected element got ..

شي زي كذا

Edited by #,+( _xiRoc[K]; >
##### Link to comment

انا متعمد اخليه عشان يجي بق من الفنكشن نفسه مايحتاج اسوي تحققات

• 1
##### Link to comment
On 9/30/2017 at 22:41, #,+( _xiRoc[K]; > said:

بسم الله الرحمن الرحيم

guiCreateAnimation

gui-Elementالفنكشن يعمل تأثير لأي نوع من الــ

يعني الألفا حقت الألمنت تزداد تدريجيا او تنقص تدريجيا

_______________________________

الفنكشن معه افنت 'onClientGUIAnimationEnd'

هذا الأفنت هو لما التأثير ينتهي

_______________________________

Event :

Event Source:

guiElement - الألمنت المطبق عليه التأثير

Paratmers:

openState

_______________________________

Function :

Syntax:

```
bool guiCreateAnimation ( element gui-element, bool openState[ , int effectSpeed = 1 ] )
```

_______________________________

Source Code:

```
local guiTable = { };
addEvent ( 'onClientGUIAnimationEnd', true )

function animationRender ( guiElement, open, speed )
guiTable [ guiElement ] [ 'guiNow' ] = getTickCount (    );
local anim1, anim2 = interpolateBetween ( 0, 100, 0, 100, 0, 0, ( guiTable [ guiElement ] [ 'guiNow' ] - guiTable [ guiElement ] [ 'guiTick' ] ) / ( speed * 1000 ), 'Linear' )
if ( open ) then
guiSetAlpha ( guiElement, anim1 / 100 )
else
guiSetAlpha ( guiElement, anim2 / 100 )
end
if ( guiTable [ guiElement ] [ 'guiNow' ] > guiTable [ guiElement ] [ 'guiTick' ] + ( speed * 1000 ) ) then
removeEventHandler ( 'onClientRender', root, guiTable [ guiElement ] [ 'guiEvent' ] )
guiTable [ guiElement ] = nil
triggerEvent ( 'onClientGUIAnimationEnd', guiElement, open )
if ( not open ) then
guiSetVisible ( guiElement, false )
end
end
end

function guiCreateAnimation ( guiElement, open, speed )
assert ( isElement ( guiElement ) and getElementType ( guiElement ):find ( 'gui-' ), 'guiCreateAnimation bad argument @ 1 gui-Element expected, got ' .. type ( guiElement ) )
assert ( type ( open ) == 'boolean', 'guiCreateAnimation bad argument @ 2 boolean expected, got ' .. type ( open ) )
local speed = speed or 1
assert ( type ( speed ) == 'number', 'guiCreateAnimation bad argument @ 3 number expected, got ' .. type ( speed ) )
if ( guiTable [ guiElement ] ) then
return false
end
guiSetVisible ( guiElement, true )
guiTable [ guiElement ] = { };
guiTable [ guiElement ] [ 'guiTick' ], guiTable [ guiElement ] [ 'guiEvent' ] = getTickCount ( ),
function ( )
animationRender ( guiElement, open, speed )
end
addEventHandler ( 'onClientRender', root, guiTable [ guiElement ] [ 'guiEvent' ] )
return true
end
```

_______________________________

Arguments:

1 - gui-element - gui-element النافذة او الــ

المراد تطبيق التأثير عليها

2 - openState - طريقة التأثير

اذا كان true

بينفتح تدريجيا و العكس

3 - effectSpeed - سرعة التأثير

_______________________________

Example:

```
local sPos = { guiGetScreenSize ( ) };

GUIEditor = {
window = {}
}
function()
GUIEditor.window[1] = guiCreateWindow( ( sPos [ 1 ] - 520 ) / 2, ( sPos [ 2 ] - 452 ) / 2, 520, 452, "Flashing window", false)
guiWindowSetSizable(GUIEditor.window[1], false)
btn = guiCreateButton(50, 50, 50, 50, '', false, GUIEditor.window[1])
guiCreateAnimation ( GUIEditor.window[1], true, 0.5 )
guiSetFlashing ( GUIEditor.window[1], true )
outputChatBox 'Start !'
setTimer ( function ( )
guiSetFlashing ( GUIEditor.window[1], false )
outputChatBox 'Finish !'
end, 5000, 1 )
end
)

local flasherEvent = { };

function guiSetFlashing ( wnd, state )
if ( state ) then
flasherEvent [ wnd ] = function ( state )
if ( source == GUIEditor.window[1] ) then
guiCreateAnimation ( GUIEditor.window[1], not state, 0.5 )
end
end
addEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
else
if ( flasherEvent [ wnd ] ) then
removeEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
end
end
end
```

هذا المثال بيسوي فلاش للوحة

وبعد 5 ثواني بيختفي الفلاش

تعديل على المثال الي فوق ^

```local sPos = { guiGetScreenSize ( ) };

GUIEditor = {
window = {}
}
function()
GUIEditor.window[1] = guiCreateWindow( ( sPos [ 1 ] - 520 ) / 2, ( sPos [ 2 ] - 452 ) / 2, 520, 452, "Flashing window", false)
guiWindowSetSizable(GUIEditor.window[1], false)
btn = guiCreateButton(50, 50, 50, 50, '', false, GUIEditor.window[1])
guiCreateAnimation ( GUIEditor.window[1], true, 0.5 )
guiSetFlashing ( GUIEditor.window[1], true )
outputChatBox 'Start !'
setTimer ( function ( )
guiSetFlashing ( GUIEditor.window[1], false )
outputChatBox 'Finish !'
end, 5000, 1 )
end
)

local flasherEvent = { };

function guiSetFlashing ( wnd, state )
if ( state ) then
flasherEvent [ wnd ] = function ( state )
if ( source == wnd ) then
guiCreateAnimation ( wnd, not state, 0.5 )
end
end
addEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
else
if ( flasherEvent [ wnd ] ) then
removeEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, flasherEvent [ wnd ] )
end
end
end```

____

Example 2:

```local sPos = { guiGetScreenSize ( ) };
local wordsTable = {
{ 'Hi', 'Hello !' },
{ 'Bye', 'Good Bye !' },
{ 'Wow !', 'Nice !' },
{ '', '????' },
};

GUIEditor = {
window = {}
}
function()
GUIEditor.window[1] = guiCreateWindow( ( sPos [ 1 ] - 500 ) / 2, ( sPos [ 2 ] - 500 ) / 2, 500, 500, 'My window', false)
guiWindowSetSizable(GUIEditor.window[1], false)
btn = guiCreateButton(50, 50, 50, 50, '', false, GUIEditor.window[1])
btn1 = guiCreateButton( 500 / 2, 500 / 2, 50, 50, '', false, GUIEditor.window[1])
guiSetVisible ( GUIEditor.window[1], false )
addEventHandler ( 'onClientGUIClick', btn, text, false )
addEventHandler ( 'onClientGUIClick', btn1, text, false )
end
)

bindKey ( 'F5', 'down', function ( )
local b = guiCreateAnimation ( GUIEditor.window[1], not guiGetVisible ( GUIEditor.window[1] ), 0.5 )
if ( b ) then
guiSetEnabled ( GUIEditor.window[1], false )
outputChatBox'DONE'
else
end
end )

addEventHandler ( 'onClientGUIAnimationEnd', resourceRoot, function ( openState )
if ( source == GUIEditor.window[1] ) then
local mathRandom = wordsTable [ math.random ( #wordsTable ) ]
guiSetText ( btn, mathRandom [ 1 ] )
guiSetText ( btn1, mathRandom [ 2 ] )
guiSetEnabled ( GUIEditor.window[1], true )
showCursor ( openState )
end
end )

function text ( )
outputChatBox ( '1 : ' .. guiGetText ( btn ), math.random ( 255 ), math.random ( 255 ), math.random ( 255 ), true )
outputChatBox ( '2 : ' .. guiGetText ( btn1 ), math.random ( 255 ), math.random ( 255 ), math.random ( 255 ), true )
end```

Edited by #,+( _xiRoc[K]; >
• 1
##### Link to comment
On 10/3/2017 at 05:11, iMr.WiFi..! said:

guiEditSetOnlyNumbers
< مدري لو الوظيفة موجودة من قبل ولكن على حسب بحثي مالقيتها >
بسم الله الرحمن الرحيم,
سلام عليكم ورحمة الله وبركاتة

وظيفة واضحة من أسمها ..
تجعل الأيديت لا يقبل الا الأرقام ,
سورس كود | Source Code :

```
function guiEditSetOnlyNumbers ( edit, boolean )
local function CheckNumbers ( )
local currText = guiGetText( source )
local newText = string.gsub( currText, '[^0-9]', '' )
if newText ~= currText then
guiSetText( source, newText )
end
end
if edit and boolean then
if getElementType ( edit ) == 'gui-edit' and type ( boolean ) == 'boolean' then
if boolean == true then
local CheckEventTrue = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventTrue ) do
if v == CheckNumbers then
removeEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
addEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
else
local CheckEventFalse = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventFalse ) do
if v == CheckNumbers then
addEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
removeEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
end
```

السينتاكس | Syntax :

```
bool guiEditSetOnlyNumbers ( element edit, bool boolean )
```

الأرقمنتات المطلوبة | Required Arguments :

edit : الأيديت الذي تريد جعله يوضع الأرقام

boolean : تحديد اما ان يجعله يوضع الأرقام فقط ام لا

مثال | Example :

```
function guiEditSetOnlyNumbers ( edit, boolean )
local function CheckNumbers ( )
local currText = guiGetText( source )
local newText = string.gsub( currText, '[^0-9]', '' )
if newText ~= currText then
guiSetText( source, newText )
end
end
if edit and boolean then
if getElementType ( edit ) == 'gui-edit' and type ( boolean ) == 'boolean' then
if boolean == true then
local CheckEventTrue = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventTrue ) do
if v == CheckNumbers then
removeEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
addEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
else
local CheckEventFalse = getEventHandlers( "onClientGUIChanged", edit )
for i, v in ipairs( CheckEventFalse ) do
if v == CheckNumbers then
addEventHandler ( "onClientGUIChanged", edit, v )
break;
end
end
removeEventHandler ( "onClientGUIChanged", edit, CheckNumbers )
return true;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
else
error ( "ERROR : bad argument ".. getElementType ( edit )  == 'gui-edit' and "2" or "1" .." excepted '".. getElementType ( edit )  == 'gui-edit' and "boolean" or "gui-edit" .."' got ".. getElementType ( edit )  == 'gui-edit' and type ( boolean ) or getElementType ( edit ) )
return false;
end
end
_edit = guiCreateEdit( ... )
guiEditSetOnlyNumbers ( _edit, true )
```

والسلام خير الختام

وظيفه رائعه استمر

Edited by Deativated

## 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

• ### Recently Browsing   0 members

• No registered users viewing this page.

×

• #### Social Media

×
• Create New...