HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Need help with this spell

06-08-2008, 02:14 AM#1
goldendercon
well, i'm making this spell Description below:

Blazing Flight
The caster summons fire spirits to aid him in flight, after 15 seconds/30 if hero has a certain aura, they will gently lower him down and vanish,

well there's no problem with the spell's code for me but it's a little bit too laggy, any ideas on how to make it less laggier or make the script smaller GUI/JASS will be appreciated.

P.S here's my code

Trigger:
Collapse Events
Unit - A unit Starts the effect of an ability
Collapse Conditions
(Ability being cast) Equal to Blazing Flight
Collapse Actions
Set FlightCaster = (Triggering unit)
If ((Real((Level of Will of Flame for (Triggering unit)))) Greater than 0.00) then do (Countdown Timer - Start BlazingFlightTimer as a One-shot timer that will expire in 30.00 seconds) else do (Countdown Timer - Start BlazingFlightTimer as a One-shot timer that will expire in 15.00 seconds)
Collapse For each (Integer A) from 1 to 4, do (Actions)
Collapse Loop - Actions
Unit - Create 1 Dummy for (Owner of (Triggering unit)) at ((Position of (Triggering unit)) offset by 200.00 towards (90.00 x (Real((Integer A)))) degrees) facing Default building facing degrees
Set Effe_Unit[(Integer A)] = (Last created unit)
If ((Real((Level of Will of Flame for (Triggering unit)))) Greater than 0.00) then do (Unit - Add a 30.00 second Generic expiration timer to (Last created unit)) else do (Unit - Add a 15.00 second Generic expiration timer to (Last created unit))
Trigger - Turn on FlightMovement <gen>

Collapse Events
Time - Every 0.04 seconds of game time
Conditions
Collapse Actions
Animation - Change FlightCaster flying height to 450.00 at 75.00
Unit - Move Effe_Unit[1] instantly to ((Position of FlightCaster) offset by (Distance between (Position of FlightCaster) and (Position of Effe_Unit[1])) towards ((Angle from (Position of FlightCaster) to (Position of Effe_Unit[1])) + 5.00) degrees)
Animation - Change Effe_Unit[1] flying height to 450.00 at 75.00
Unit - Move Effe_Unit[2] instantly to ((Position of FlightCaster) offset by (Distance between (Position of FlightCaster) and (Position of Effe_Unit[2])) towards ((Angle from (Position of FlightCaster) to (Position of Effe_Unit[2])) + 5.00) degrees)
Animation - Change Effe_Unit[2] flying height to 450.00 at 75.00
Unit - Move Effe_Unit[3] instantly to ((Position of FlightCaster) offset by (Distance between (Position of FlightCaster) and (Position of Effe_Unit[3])) towards ((Angle from (Position of FlightCaster) to (Position of Effe_Unit[3])) + 5.00) degrees)
Animation - Change Effe_Unit[3] flying height to 450.00 at 75.00
Unit - Move Effe_Unit[4] instantly to ((Position of FlightCaster) offset by (Distance between (Position of FlightCaster) and (Position of Effe_Unit[4])) towards ((Angle from (Position of FlightCaster) to (Position of Effe_Unit[4])) + 5.00) degrees)
Animation - Change Effe_Unit[4] flying height to 450.00 at 75.00


Collapse Events
Time - BlazingFlightTimer expires
Conditions
Collapse Actions
Animation - Change FlightCaster flying height to 1.00 at 75.00
Set Effe_Unit[1] = No unit
Set Effe_Unit[2] = No unit
Set Effe_Unit[3] = No unit
Set Effe_Unit[4] = No unit
Set FlightCaster = No unit

then there's also a code that makes a circle on the ground that follows the caster CODE:

Trigger:
Collapse Events
Unit - A unit Starts the effect of an ability
Collapse Conditions
(Ability being cast) Equal to Blazing Flight
Collapse Actions
Set CCaster = (Triggering unit)
If ((Real((Level of Will of Flame for (Triggering unit)))) Greater than 0.00) then do (Countdown Timer - Start CircleTimer[1] as a One-shot timer that will expire in 30.00 seconds) else do (Countdown Timer - Start CircleTimer[1] as a One-shot timer that will expire in 15.00 seconds)
Collapse For each (Integer B) from 1 to 36, do (Actions)
Collapse Loop - Actions
Unit - Create 1 Dummy for (Owner of (Triggering unit)) at ((Position of (Triggering unit)) offset by 400.00 towards ((Real((Integer B))) x 10.00) degrees) facing Default building facing degrees
Set Circle_missile[(Integer B)] = (Last created unit)
If ((Real((Level of Will of Flame for (Triggering unit)))) Greater than 0.00) then do (Unit - Add a 30.00 second Generic expiration timer to (Last created unit)) else do (Unit - Add a 15.00 second Generic expiration timer to (Last created unit))
Trigger - Turn on FlightMovement <gen>

then there's the custom script part of that

Collapse JASS:
function Trig_CircleMovement_Actions takes nothing returns nothing
    call SetUnitPositionLoc( udg_Circle_missile[1], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[1])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[1])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[2], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[2])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[2])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[3], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[3])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[3])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[4], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[4])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[4])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[5], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[5])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[5])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[6], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[6])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[6])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[7], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[7])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[7])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[8], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[8])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[8])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[9], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[9])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[9])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[10], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[10])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[10])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[11], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[11])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[11])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[12], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[12])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[12])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[13], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[13])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[13])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[14], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[14])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[14])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[15], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[15])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[15])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[16], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[16])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[16])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[17], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[17])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[17])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[18], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[18])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[18])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[19], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[19])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[19])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[20], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[20])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[20])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[21], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[21])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[21])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[22], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[22])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[22])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[23], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[23])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[23])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[24], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[24])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[24])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[25], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[25])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[25])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[26], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[26])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[26])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[27], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[27])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[27])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[28], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[28])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[28])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[29], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[29])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[29])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[30], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[30])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[30])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[31], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[31])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[31])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[32], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[32])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[32])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[33], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[33])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[33])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[34], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[34])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[34])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[35], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[35])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[35])) + 5.00 )) )
    call SetUnitPositionLoc( udg_Circle_missile[36], PolarProjectionBJ(GetUnitLoc(udg_CCaster), DistanceBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[36])), ( AngleBetweenPoints(GetUnitLoc(udg_CCaster), GetUnitLoc(udg_Circle_missile[36])) + 5.00 )) )
endfunction

//===========================================================================
function InitTrig_CircleMovement takes nothing returns nothing
    set gg_trg_CircleMovement = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_CircleMovement, 0.04 )
    call TriggerAddAction( gg_trg_CircleMovement, function Trig_CircleMovement_Actions )
endfunction

function Trig_CircleNull_Actions takes nothing returns nothing
    set udg_Circle_missile[1] = null
    set udg_Circle_missile[2] = null
    set udg_Circle_missile[3] = null
    set udg_Circle_missile[4] = null
    set udg_Circle_missile[5] = null
    set udg_Circle_missile[6] = null
    set udg_Circle_missile[7] = null
    set udg_Circle_missile[8] = null
    set udg_Circle_missile[9] = null
    set udg_Circle_missile[10] = null
    set udg_Circle_missile[11] = null
    set udg_Circle_missile[12] = null
    set udg_Circle_missile[13] = null
    set udg_Circle_missile[14] = null
    set udg_Circle_missile[15] = null
    set udg_Circle_missile[16] = null
    set udg_Circle_missile[17] = null
    set udg_Circle_missile[18] = null
    set udg_Circle_missile[19] = null
    set udg_Circle_missile[20] = null
    set udg_Circle_missile[21] = null
    set udg_Circle_missile[22] = null
    set udg_Circle_missile[23] = null
    set udg_Circle_missile[24] = null
    set udg_Circle_missile[25] = null
    set udg_Circle_missile[26] = null
    set udg_Circle_missile[27] = null
    set udg_Circle_missile[28] = null
    set udg_Circle_missile[29] = null
    set udg_Circle_missile[30] = null
    set udg_Circle_missile[31] = null
    set udg_Circle_missile[32] = null
    set udg_Circle_missile[33] = null
    set udg_Circle_missile[34] = null
    set udg_Circle_missile[35] = null
    set udg_Circle_missile[36] = null
    set udg_CCaster = null
endfunction

//===========================================================================
function InitTrig_CircleNull takes nothing returns nothing
    set gg_trg_CircleNull = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_CircleNull, udg_CircleTimer[1] )
    call TriggerAddAction( gg_trg_CircleNull, function Trig_CircleNull_Actions )
endfunction

and here's the map if anyone wants to see it
Attached Files
File type: w3xFall of Darkness.w3x (90.2 KB)
06-08-2008, 12:11 PM#2
C0mm4nd3r
maybe make the effects update a bit higher.. so isntead of the pc waiting 0.04 sec to move all taht units etc.. make it to do every 0.06 or so... also the circle maybe instead of making it to go arround the hero isntantly make it have a small delay, like 0.01 or 0.02 ..

i hope these will help.. cuz im not sure if it will >.< also i dunno much of jass ;P

PD: Nice Spell :)

gGL&HF! cya.
06-08-2008, 09:51 PM#3
Themerion
First of: With loops, and non-leaking locations, the code would be better.

Also, isn't the offset (circle radius) constantly 400 ?

Collapse JASS:
function Trig_CircleMovement_Actions takes nothing returns nothing
    local integer i=1
    local location loc=GetUnitLoc(udg_CCaster)
    local location loc2
    loop
        exitwhen i>36
        set loc2=GetUnitLoc(udg_Circle_missile[i])
// Replace DistanceBetweenPoints with 400 ?
        call SetUnitPositionLoc( udg_Circle_missile[i], PolarProjectionBJ(loc, DistanceBetweenPoints(loc, loc2), AngleBetweenPoints(loc, loc2 ) + 5.00 ))
        call RemoveLocation(loc2)
        set i=i+1
    endloop
endfunction

//===========================================================================

function Trig_CircleNull_Actions takes nothing returns nothing
    local integer i=1
    loop
        exitwhen i>36
        set udg_Circle_missile[i] = null
        set i=i+1
    endloop
    set udg_CCaster = null
endfunction

//===========================================================================


Secondly: You should be able to deduce a formula instead of using AngleBetweenPoints.

Code:
AngleForUnit(1) = AngleForUnit(2) -10
AngleForUnit(2) = AngleForUnit(3) -10
...
AngleForUnit(n) = 10 + AngleForUnit(n-1)

Collapse JASS:
// Create a global integer variable called udg_rotation.

function Trig_CircleMovement_Actions takes nothing returns nothing
    local integer i=1
    local location loc=GetUnitLoc(udg_CCaster)
    local location loc2

    set udg_rotation=udg_rotation+5   

    loop
        exitwhen i>36
        set loc2=GetUnitLoc(udg_Circle_missile[i])
// Replace DistanceBetweenPoints with 400 ?
        call SetUnitPositionLoc( udg_Circle_missile[i], PolarProjectionBJ(loc, 400,  udg_rotation + i*10  ))
        call RemoveLocation(loc2)
        set i=i+1
    endloop
endfunction

Of course, you have to reset udg_rotation to 0 in the GUI-trigger upon spell cast.
06-10-2008, 08:11 AM#4
goldendercon
okay i'll try that too i'll just post again if anything happens, and i also forgot to credit the guy who made the aura model although i also forgot his username

P.S I haven't got the slightest idea on how to make this MUI, and also for commander (don't whine about the spelling I'm in a hurry) your idea sounds great but one problem is that for my eyes anything higher that 0.04 looks too jittery

P.P.S Can some1 also help me with making this one MUI