1+ #include < amxmodx>
2+ #include < engine>
3+ #include < fakemeta>
4+ #include < hamsandwich>
5+
6+ # define PLUGIN " Deathrun: Teleport Spot"
7+ # define VERSION " 1.0"
8+ # define AUTHOR " Mistrick"
9+
10+ #pragma semicolon 1
11+
12+ # define RETURN_DAMAGE_TO_ATTACKER
13+ # define TP_CHECK_DISTANCE 64 .0
14+
15+ # define fm_get_user_team (%0 ) get_pdata_int(%0 , 114 )
16+
17+ new player_solid[33 ];
18+
19+ public plugin_init ()
20+ {
21+ register_plugin (PLUGIN, VERSION, AUTHOR);
22+
23+ new ent = find_ent_by_class (- 1 , " info_teleport_destination" );
24+
25+ if (! pev_valid (ent))
26+ {
27+ log_amx (" Map doesn't have any teleports." );
28+ pause (" a" ); return ;
29+ }
30+
31+ RegisterHam (Ham_TakeDamage, " player" , " Ham_PlayerTakeDamage_Pre" , false );
32+ }
33+ public Ham_PlayerTakeDamage_Pre (victim, idinflictor, attacker, Float: damage, damagebits)
34+ {
35+ if (victim != attacker && fm_get_user_team (victim) != fm_get_user_team (attacker))
36+ {
37+ new Float: origin[3 ]; pev (victim, pev_origin, origin);
38+ new ent = - 1 ;
39+ while ((ent = find_ent_in_sphere (ent, origin, TP_CHECK_DISTANCE)))
40+ {
41+ new class_name[32 ]; pev (ent, pev_classname, class_name, charsmax (class_name));
42+ if (equal (class_name, " info_teleport_destination" ))
43+ {
44+ #if defined RETURN_DAMAGE_TO_ATTACKER
45+ ExecuteHamB (Ham_TakeDamage, attacker, 0 , attacker, damage, damagebits);
46+ #endif
47+
48+ if (is_user_alive (attacker)) slap (attacker);
49+ if (is_user_alive (victim)) slap (victim);
50+
51+ return HAM_SUPERCEDE;
52+ }
53+ }
54+ }
55+ return HAM_IGNORED;
56+ }
57+ slap (id)
58+ {
59+ player_solid[id] = pev (id, pev_solid);
60+ set_pev (id, pev_solid, SOLID_NOT);
61+ user_slap (id, 0 );
62+ user_slap (id, 0 );
63+ set_task (0 .3 , " restore_solid" , id);
64+ }
65+ public restore_solid (id)
66+ {
67+ if (is_user_alive (id)) set_pev (id, pev_solid, player_solid[id]);
68+ }
0 commit comments