checkpoints problem
I modify plugin prokreedz for my purposes.
I encountered a problem with checkpoints.
Code:
public checkpoint(id) {
if(get_pcvar_num(kz_checkpoints) == 1) {
if(is_user_alive(id)) {
if( !(pev(id, pev_flags) & FL_ONGROUND2) ) {
ColorChat(id,RED,"[KG Jump] You can not create a checkpoint while in air")
return PLUGIN_HANDLED
}
if(entity_get_int(id,EV_INT_flags)&FL_DUCKING) {
ColorChat(id,RED,"[ProKreedz] You can not create a checkpoint while ducking")
return PLUGIN_HANDLED
}
for(new i=MAX_CPS-1;i>0;i--) {
checkpoints[id-1][i][0] = checkpoints[id-1][i-1][0]
checkpoints[id-1][i][1] = checkpoints[id-1][i-1][1]
checkpoints[id-1][i][2] = checkpoints[id-1][i-1][2]
}
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)
checkpoints[id-1][0][0] = origin[0]
checkpoints[id-1][0][1] = origin[1]
checkpoints[id-1][0][2] = origin[2]
if(checkpointnum[id-1] > 0)
ColorChat(id,BLUE,"[KG Jump] Checkpoint no. %d created, distance to the previous one: %dm",checkpointnum[id-1]+1,floatround(get_distance_f(checkpoints[id-1][1],origin) / 20,floatround_round))
else
client_print(id,print_chat,"[KG Jump] First checkpoint created")
checkpointnum[id-1]++
}
else
client_print(id,print_chat,"[KG Jump] You have to be alive to use this function")
}
else
client_print(id,print_chat,"[KG Jump] Checkpoints are disabled")
return PLUGIN_HANDLED
}
If I remove checks on the duck, then while keeping the checkpoint with duck, after calling goto_checkpoint can not move.
How can I fix this?
Another code:
Code:
public goto_checkpoint(id) {
if(get_pcvar_num(kz_checkpoints) == 1) {
if(is_user_alive(id)) {
if(checkpointnum[id-1] > 0) {
if(read_argc() == 2) {
new szcp[8], cpnum
read_argv(1,szcp,8)
cpnum = str_to_num(szcp) - 1
if(cpnum >= 0 && cpnum < MAX_CPS) {
if(cpnum < checkpointnum[id-1])
goto_cp(id,cpnum)
else
ColorChat(id,RED,"[KG Jump] You have not created enough checkpoints")
}
else
goto_cp(id,0)
}
else {
goto_cp(id,0)
}
}
else
client_print(id,print_chat,"[KG Jump] First you have to create a checkpoint")
}
else
client_print(id,print_chat,"[KG Jump] You must be alive to use this function")
}
else
client_print(id,print_chat,"[KG Jump] Checkpoints are disabled")
return PLUGIN_HANDLED
}
Code:
public goto_cp(id,cp) {
new semiclip = get_pcvar_num(kz_semiclip)
if(semiclip == -1 || (!noblock[id-1] && semiclip == 0)) {
new Float:origin[3]
for(new i=1;i<=get_maxplayers();i++) {
if(id != i && is_user_connected(i) && is_user_alive(id)) {
if(semiclip == -1 || (!noblock[i-1] && semiclip == 0)) {
entity_get_vector(i,EV_VEC_origin,origin)
if(get_distance_f(checkpoints[id-1][cp],origin) <= CP_DISTANCE) {
client_print(id,print_chat,"[KG Jump] Somebody is too close to your checkpoint")
return false
}
}
}
}
}
entity_set_origin(id,checkpoints[id-1][cp])
entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
spawnsprite(checkpoints[id-1][cp])
set_user_gravity(id) // to fix the low gravity bug on kz_man_redrock (thanks to NoEx)
noblock_task()
return true
}
Code:
public spawnsprite(Float:origin[3]) {
new iorigin[3]
iorigin[0] = floatround(origin[0],floatround_ceil)
iorigin[1] = floatround(origin[1],floatround_ceil)
iorigin[2] = floatround(origin[2],floatround_ceil)
message_begin(MSG_ALL,SVC_TEMPENTITY)
write_byte(11)
write_coord(iorigin[0])
write_coord(iorigin[1])
write_coord(iorigin[2])
message_end()
}
|