ID:2532015
 
Alright i don't know what the issue here but when i play offline it super smooth no lag. But when i host it, it look like lagging i drop my move code here so if you see something wrong say me hope you can help me Thanks! i try some thing has well but i can't seem to find what cause that.:

Has you can see i have two movement at different place


Code:
/////////first movement in my movement dm////
mob/var/cantmove=0
GAME_MOB
var
tmp
holding_key = FALSE
n_press = 0
s_press = 0
e_press = 0
w_press = 0
verb
moveNorth()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.n_press = 1
p.dir = NORTH
//global.Movement(p,p.dir)
moveEast()
set instant = 1
// set instant=TRUE
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.e_press = 1
p.dir = EAST
//global.Movement(p,p.dir)
moveWest()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.w_press = 1
p.dir = WEST
//global.Movement(p,p.dir)
moveSouth()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.dir = SOUTH
p.s_press = 1
//global.Movement(p,p.dir)

movementRelease()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = FALSE

northUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.n_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
southUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.s_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
eastUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.e_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
westUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.w_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE

/proc
movement(GAME_MOB/mob, var/dir, var/speed)
set instant = 1
if(mob.cantmove==1) return 0
if(mob)
if(mob.holding_key)
if(mob.spin == TRUE || mob.moving == TRUE || mob.dead || mob.defending || mob.shop_open || mob.using_jutsu != null || mob.in_bind || mob.charging == TRUE || mob.CantMove == TRUE)
return
if(!speed)speed = mob.step_size
if(!dir)return
step(mob,mob.dir,speed)
if(mob.swimming)
mob.running = FALSE
mob.step_size = 12
// if(!mob.using_jutsu1 || !mob.using_jutsu2)
// mob.Run()
// mob.ActivateAI()
// CHECK_TICK()
//spawn(world.tick_lag)
//mob.moving = FALSE
//if(mob.holding_key)global.Movement(mob,mob.dir,speed)
movementLoop()
set instant = 1
set waitfor = 0
spawn()
while(world)
for(var/PLAYER/p in global.PlayersOnline)
if(p)global.movement(p,p.dir)
sleep(world.tick_lag)

////////////other dm file/////
client
mouse_pointer_icon='Art/GameCursor.dmi'
Move(Loc)
var/GAME_MOB/M = mob
if(mob.isLoginMob)
return 0
if(mob.moving == TRUE || M.dead || M.defending || M.shop_open || M.using_jutsu != null || M.in_bind || M.charging == TRUE || M.casting_shadow == TRUE || M.CantMove == TRUE)
return 0
mob.moving = TRUE
if(M.swimming)
M.running = FALSE
M.step_size = 12
// mob.ActivateAI()
// CHECK_TICK()
// spawn(world.tick_lag)mob.moving = FALSE
spawn(0)mob.moving = FALSE
return ..()
client
North()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Up"
M.JutsuPress()
return
M.dir = NORTH
return ..()
South()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.key_pressing == TRUE)
M.key_pressed = "Down"
M.JutsuPress()
return
if(M.in_bind == 1)
return
mob.dir = SOUTH
return ..()
West()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Left"
M.JutsuPress()
return
mob.dir = WEST
return ..()
East()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Right"
M.JutsuPress()
return
mob.dir = EAST
return ..()



It is the usage of spawn(). 100% guaranteed. I had the same problem in my game. Nearly identical code really. Nowhere should you use spawn() in the player's input movement code. In your movementLoop() proc it doesn't even seem to be serving a purpose, because you have already specified "set waitfor=0" there. If you removed the spawn() there and tabbed back the code beneath it it would function the same and that particular part would no longer be delayed. But I see you are using spawn in other places too which will need removed and done a different way.
Try just pasting this slightly modified version and see what happens. If there's no irregularities elsewhere it should at the very least help.
/////////first movement in my movement dm////
mob/var/cantmove=0
GAME_MOB
var
tmp
holding_key = FALSE
n_press = 0
s_press = 0
e_press = 0
w_press = 0
verb
moveNorth()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.n_press = 1
p.dir = NORTH
//global.Movement(p,p.dir)
moveEast()
set instant = 1
// set instant=TRUE
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.e_press = 1
p.dir = EAST
//global.Movement(p,p.dir)
moveWest()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.w_press = 1
p.dir = WEST
//global.Movement(p,p.dir)
moveSouth()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = TRUE
p.dir = SOUTH
p.s_press = 1
//global.Movement(p,p.dir)

movementRelease()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.holding_key = FALSE

northUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.n_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
southUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.s_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
eastUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.e_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE
westUp()
set instant = 1
set hidden = 1
set waitfor = 0
var/GAME_MOB/p = usr
p.w_press = 0
if(!p.n_press&&!p.s_press&&!p.e_press&&!p.w_press)p.holding_key = FALSE

/proc
movement(GAME_MOB/mob, var/dir, var/speed)
set instant = 1
if(mob.cantmove==1) return 0
if(mob)
if(mob.holding_key)
if(mob.spin == TRUE || mob.moving == TRUE || mob.dead || mob.defending || mob.shop_open || mob.using_jutsu != null || mob.in_bind || mob.charging == TRUE || mob.CantMove == TRUE)
return
if(!speed)speed = mob.step_size
if(!dir)return
step(mob,mob.dir,speed)
if(mob.swimming)
mob.running = FALSE
mob.step_size = 12
// if(!mob.using_jutsu1 || !mob.using_jutsu2)
// mob.Run()
// mob.ActivateAI()
// CHECK_TICK()
//spawn(world.tick_lag)
//mob.moving = FALSE
//if(mob.holding_key)global.Movement(mob,mob.dir,speed)
movementLoop()
set instant = 1
set waitfor = 0 //no need for the spawn if you already have set waitfor=0, its not going to hold up anything simply due to this
while(world)
for(var/PLAYER/p in global.PlayersOnline)
if(p)global.movement(p,p.dir)
sleep(world.tick_lag)

////////////other dm file/////
client
mouse_pointer_icon='Art/GameCursor.dmi'
Move(Loc)
var/GAME_MOB/M = mob
if(mob.isLoginMob)
return 0
if(mob.moving == TRUE || M.dead || M.defending || M.shop_open || M.using_jutsu != null || M.in_bind || M.charging == TRUE || M.casting_shadow == TRUE || M.CantMove == TRUE)
return 0
mob.moving = TRUE
if(M.swimming)
M.running = FALSE
M.step_size = 12
// mob.ActivateAI()
// CHECK_TICK()
// spawn(world.tick_lag)mob.moving = FALSE

//nope
//spawn(0)mob.moving = FALSE
//return ..()

//maybe this:
. = ..() //set the default return value instead of explicitly halting the code to return something
mob.moving = FALSE
client
North()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Up"
M.JutsuPress()
return
M.dir = NORTH
return ..()
South()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.key_pressing == TRUE)
M.key_pressed = "Down"
M.JutsuPress()
return
if(M.in_bind == 1)
return
mob.dir = SOUTH
return ..()
West()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Left"
M.JutsuPress()
return
mob.dir = WEST
return ..()
East()
set instant = 1
var/GAME_MOB/M = mob
if(M.dead)return
if(M.in_bind == 1)
return
if(M.key_pressing == TRUE)
M.key_pressed = "Right"
M.JutsuPress()
return
mob.dir = EAST
return ..()
a few other things i see in there is that "while(world)" could just be "while(1)" because "world" is always going to exist. it's probably faster too. also check if that code is generating any runtime errors those would probably slow it down.

I used to use spawn() for everything but now for 90% of my uses "set waitfor=0" has served me much better. Game runs faster (spawn() has proven slow for me I don't care if anyone disagrees, keep in mind I was using it in hundreds of places). Timing is more exact. Structurally more sound. etc.
i didnt know for the spawn and the while thanks. i try the code you made but it doesnt seem to work i try ti change while(world) for 1 too but doesnt work too. i check if i have other move code with spawn and no i dont i realy want ot fix that but i dont know how. Thanks for help again!