AlliedModders Donor
|
11-28-2009
, 14:39
[ES][TUT] C4 Scripting
|
#1
|
TRADUCCIÓN DE ESTE INTERESANTE POST DE VEN :
http://forums.alliedmods.net/showthread.php?t=40164
Requisitos
Debes estar familiarizado con lo basico del scripting. Las funciones de Fakemeta Utilities son usadas aqui. Para obtener la id del jugador (solo dentro de "logevent_function _p") debes usar:
PHP Code:
stock get_loguser_index()
{
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
return get_user_index(name)
}
Ejemplo
PHP Code:
public logevent_function_p()
{
new id = get_loguser_index()
// ...
}
1. Jugador/C4
PHP Code:
// Esta la bomba tirada/siendo llevada?
if (fm_find_ent_by_class(-1, "weapon_c4"))
// Esta en el suelo?
new bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && pev(bomb, pev_owner) > get_maxplayers())
// La bomba esta siendo llevada/quien la lleva?
new carrier = 0, ownerent, bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && (ownerent = pev(bomb, pev_owner)) <= get_maxplayers())
carrier = ownerent
if (carrier) // tenemos al portador
else // no lo tenemos
// El jugador elegido tiene la bomba?
if (user_has_weapon(id, CSW_C4)) // metodo #1
if (pev(id, pev_weapons) & (1<<CSW_C4)) // metodo #2
if (fm_find_ent_by_owner(-1, "weapon_c4", id)) // metodo #3
// Como transferimos la bomba de un jugador a otro?
fm_transfer_user_gun(carrier, recipient, CSW_C4) // devuelve true si tiene exito
// Como forzamos a un jugador a tirar la bomba?
engclient_cmd(id, "drop", "weapon_c4")
// Como eliminamos la bomba dropeada??
new weapbox, bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && (weapbox = pev(bomb, pev_owner)) > get_maxplayers()) {
dllfunc(DLLFunc_Think, weapbox) // eliminara el weaponbox + la entidad weapon_c4
// elimina la marca roja de la bomba en el radar
message_begin(MSG_ALL, get_user_msgid("BombPickup"))
message_end()
}
// Como damos la bomba a alguien?
fm_give_item(id, "weapon_c4")
// utiliza cs_set_user_plant(id) para permitirle plantar la bomba
// Como stripeamos/eliminamos la bomba de un jugador?
engclient_cmd(id, "weapon_c4")
cs_set_user_bpammo(id, CSW_C4, 0)
engclient_cmd(id, "lastinv")
// remove bomb hud icon
message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, id)
write_byte(0)
write_string("c4")
message_end()
// Esta la bomba plantada/como la eliminamos?
new bomb
if ((bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl"))) {
// la bomba esta plantada
fm_remove_entity(bomb) // elimina la bomba plantada
}
2. Tirarla/Cogerla
PHP Code:
// Evento. El jugador spawnea con la bomba
register_logevent("logevent_function_p", 3, "2=Spawned_With_The_Bomb")
// Evento. Bomba dropeada (incluyendo por conexion/desconexion)
register_logevent("logevent_function_p", 3, "2=Dropped_The_Bomb")
// use is_user_alive/is_user_connected to check for disconnect/death
// Evento. Bomba recogida (excepto en el spawn)
register_logevent("logevent_function_p", 3, "2=Got_The_Bomb")
// Evento. Recibiste una bomba (incluyendo spawn/give_item)
register_event("WeapPickup", "event_function", "be", "1=6")
3. Plantar/Defusar
PHP Code:
// Empezando a plantar la bomba
register_event("BarTime", "event_function", "be", "1=3")
// Bomba plantada
register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb")
// Comenzando a desactivar la bomba
register_event("BarTime", "event_function", "be", "1=5", "1=10")
// Comenzando a desactivar la bomba (sin defuse kit)
register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_Without_Kit")
// Comenzando a desactivar la bomba (con defuse kit)
register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_With_Kit")
// Bomba desactivada
register_logevent("logevent_function_p", 3, "2=Defused_The_Bomb")
// Interrumpir el plantado/defusado
register_event("BarTime", "event_function", "b", "1=0")
// debes asegurarte de que se esta plantando/defusando!
// Evento. Objetivo asegurado
register_logevent("logevent_function", 6, "3=Target_Saved")
4. Explosion
PHP Code:
// Objetivo bombeado (antes de que acabe la ronda)
register_logevent("logevent_function", 6, "3=Target_Bombed")
// Objetivo bombeado (antes/despues del final de la ronda) (descubierto por Ryan)
register_event("23", "event_function", "a", "1=17", "6=-105", "7=17")
// Un jugador muere por la explosion de la bomba (forward) (descubierto por Brad/VEN)
// no va a funcionar si el jugador es matado por la entidad env_explosion que es desencadenada por la explosion
public client_death(killer, victim, wpnindex, hitplace, TK) {
if (wpnindex == CSW_C4)
}
5. Objetivos
PHP Code:
// Esta en el lugar de plantar (func_bomb_target)?
// Nota: no hay mejor manera de detectarlo
new target = -1, class[] = "func_bomb_target", bool:is_inside = false
while ((target = fm_find_ent_by_class(target, class))) {
if (!fm_boxents_distance(index, target)) {
is_inside = true
break
}
}
if (is_inside)
// Tiene el mapa objetivos a bombear?
if (fm_find_ent_by_class(-1, "func_bomb_target") || fm_find_ent_by_class(-1, "info_bomb_target"))
// Como eliminamos los objetivos a bombear?
new target = -1, classname[] = "func_bomb_target"
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
classname = "info_bomb_target"
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
Saludos,
Javivi.
__________________
|
|