Member
|
11-05-2021
, 18:17
Re: Few new feature requests
|
#2
|
Quote:
Originally Posted by erra
hello, i want this plugin to be an awp duel, not a knife, it will be awp instead of a knife, and when the players teleport, they will have a certain freeze time. When the duel starts, a music will be played.
Can you code this please ( i am sorry for my english )
PHP Code:
#define pluginname "automatic knife duel"
#define version "0.3"
#define author "jghg"
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#define debug
#if defined debug
#include <amxmisc>
#endif // defined debug
#define menuselect1 0
#define menuselect2 1
#define taskid_challenging 2348923
#define taskid_botthink 3242321
#define decideseconds 10
#define allowed_weapons 2
#define knifeslashes 3 // the nr of slashes within a short amount of time until a challenge starts...
// globals below
new g_allowedweapons[allowed_weapons] = {csw_knife, csw_c4}
new g_maxplayers
new bool:g_challenging = false
new bool:g_knifearena = false
new bool:g_nochallengingforawhile = false
new g_challengemenu
new g_challenger
new g_challenged
new g_challenges[33]
new float:g_vknifeorigin[2][3];
new const g_szspawnclassname[] = "info_player_deathmatch";
enum _:max_cvars {
cvar_count = 0,
cvar_timer,
cvar_maxdistance,
cvar_announce,
cvar_reset
};
new g_pcvar[max_cvars];
new g_ifwdspawn;
new g_imaxplayers;
public plugin_modules()
{
require_module("fakemeta")
require_module("fun")
}
public plugin_precache()
{
g_ifwdspawn = register_forward(fm_spawn,"fwd_spawn",1);
}
public fwd_spawn(ent)
{
if(!pev_valid(ent))
return fmres_ignored;
static szclassname[32];
pev(ent,pev_classname,szclassname,sizeof szclassname - 1);
if(equal(szclassname,g_szspawnclassname))
{
if(vec_null(g_vknifeorigin[0]))
{
pev(ent,pev_origin,g_vknifeorigin[0]);
}
else if(!vec_null(g_vknifeorigin[0]) && vec_null(g_vknifeorigin[1]))
{
static float:vtmp[3];
pev(ent,pev_origin,vtmp);
if((300.0 <= vector_distance(g_vknifeorigin[0],vtmp) < 600.0))
g_vknifeorigin[1] = vtmp;
}
}
return fmres_ignored;
}
public forward_emitsound(const pirate, const onceuponatimetherewasaverysmall, noise[], const float:turtlewhoateabiggerturtleand, const float:afterthatthesmallturtlegot, const veryveryverybig, const theend) {
if (g_nochallengingforawhile || g_knifearena || g_challenging || pirate < 1 || pirate > g_maxplayers || !is_user_alive(pirate) || !equal(noise, "weapons/knife_hitwall1.wav"))
return fmres_ignored
new team = get_user_team(pirate), otherteam = 0, matchingopponent = 0
// make sure exactly one person on each team is alive.
For (new i = 1; i <= g_maxplayers; i++) {
if (!is_user_connected(i) || !is_user_alive(i) || pirate == i)
continue
if (get_user_team(i) == team) {
// no fun.
Return fmres_ignored
}
else {
if (++otherteam > 1) {
// no fun.
Return fmres_ignored
}
matchingopponent = i
}
}
if (matchingopponent == 0)
return fmres_ignored
if (++g_challenges[pirate] >= knifeslashes) {
challenge(pirate, matchingopponent)
if (is_user_bot(matchingopponent)) {
new float:val = float(decideseconds)
if (val < 2.0)
val = 2.0
remove_task(taskid_botthink)
set_task(random_float(1.0, float(decideseconds) - 1.0), "botdecides", taskid_botthink)
}
g_challenges[pirate] = 0
}
else
set_task(1.0, "decreasechallenges", pirate)
//client_print(pirate, print_chat, "your challenges: %d", g_challenges[pirate])
return fmres_ignored
}
public decreasechallenges(id) {
if (--g_challenges[id] < 0)
g_challenges[id] = 0
}
public botdecides() {
if (!g_challenging)
return
if (random_num(0,9) > 0)
accept()
else {
declinemsg()
}
g_challenging = false
remove_task(taskid_challenging)
}
challenge(challenger, challenged) {
g_challenger = challenger
g_challenged = challenged
g_challenging = true
new challenger_name[32], challenged_name[32]
get_user_name(challenger, challenger_name, 31)
get_user_name(challenged, challenged_name, 31)
client_print(challenger, print_chat, "", challenged_name, decideseconds)
new menu[1024], keys = menu_key_1 | menu_key_2
format(menu, 1023, "%s tarafindan bir bicak duellosuna davet edildiniz!^n^nne yapalim? Cevaplamak için %d saniyeniz var!^n^n\y1\w. Evet!^n\y2\w. Hayir!", challenger_name, decideseconds)
show_menu(challenged, keys, menu, decideseconds, "jghg's automatic knife duel")
set_task(float(decideseconds), "timed_toolate", taskid_challenging)
}
public timed_toolate() {
if (g_challenging) {
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
client_print(0, print_chat, "%s bicak duellosu meydan okumasina yeterince hızlı cevap vermedi...", challenged_name, challenger_name)
cancelall()
}
}
public client_putinserver(id) {
set_task(25.0, "announcement", id)
return plugin_continue
}
public announcement(id) {
client_print(id, print_chat, "[realtr] 1vs1 kalinca duvara 3 kere vur..")
}
public challenged_menu(id, key) {
switch (key) {
case menuselect1: {
// accept
accept()
}
case menuselect2: {
// decline
declinemsg()
}
}
g_challenging = false
remove_task(taskid_challenging)
return plugin_handled
}
declinemsg() {
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
client_print(0, print_chat, "%s bicak duellosu meydan okumasini geri ceviriyor...", challenged_name, challenger_name)
}
accept() {
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
client_print(0, print_chat, "%s bicak duellosu meydan okumasini kabul etti", challenged_name, challenger_name)
g_knifearena = true
strip_user_weapons(g_challenger)
strip_user_weapons(g_challenged)
give_item(g_challenger, "weapon_knife")
give_item(g_challenged, "weapon_knife")
engclient_cmd(g_challenger, "weapon_knife")
engclient_cmd(g_challenged, "weapon_knife")
engfunc(engfunc_setorigin,g_challenged,g_vknifeorigin[0]);
engfunc(engfunc_setorigin,g_challenger,g_vknifeorigin[1]);
fm_entity_set_aim(g_challenged,g_challenger,0);
fm_entity_set_aim(g_challenger,g_challenged,0);
if(get_pcvar_num(g_pcvar[cvar_reset]))
{
set_pev(g_challenged,pev_health,100.0);
set_pev(g_challenger,pev_health,100.0);
}
}
public event_holdwpn(id) {
if (!g_knifearena || !is_user_alive(id))
return plugin_continue
new weapontype = read_data(2)
for (new i = 0; i < allowed_weapons; i++) {
if (weapontype == g_allowedweapons[i])
return plugin_continue
}
engclient_cmd(id, "weapon_knife")
return plugin_continue
}
public event_roundend() {
if (g_challenging || g_knifearena)
cancelall()
g_nochallengingforawhile = true
set_task(4.0, "nochallengingforawhiletofalse")
return plugin_continue
}
public nochallengingforawhiletofalse() {
g_nochallengingforawhile = false
}
cancelall() {
if (g_challenging) {
g_challenging = false
// close menu of challenged
if (is_user_connected(g_challenged)) {
new usermenu, userkeys
get_user_menu(g_challenged, usermenu, userkeys) // get user menu
// hmm this ain't working :-/
if (usermenu == g_challengemenu) // close it!
Show_menu(g_challenged, 0, "blabla") // show empty menu
}
}
if (g_knifearena) {
g_knifearena = false
}
remove_task(taskid_botthink)
remove_task(taskid_challenging)
}
public event_death() {
if (g_challenging || g_knifearena)
cancelall()
return plugin_continue
}
#if defined debug
public challengefn(id, level, cid) {
if (!cmd_access(id, level, cid, 3))
return plugin_handled
new challenger[64], challenged[64]
read_argv(1, challenger, 63)
read_argv(2, challenged, 63)
console_print(id, "challenger: %s, challenged: %s", challenger, challenged)
new r = str_to_num(challenger)
new d = str_to_num(challenged)
challenge(r, d)
if (is_user_bot(d))
accept()
return plugin_handled
}
#endif // defined debug
public plugin_init() {
register_plugin(pluginname, version, author)
register_event("curweapon", "event_holdwpn", "be", "1=1")
register_forward(fm_emitsound, "forward_emitsound")
g_maxplayers = get_maxplayers()
g_challengemenu = register_menuid("jghg's automatic knife duel"/*"you are challenged"*/)
register_menucmd(g_challengemenu, menu_key_1 | menu_key_2, "challenged_menu")
register_event("deathmsg", "event_death", "a")
register_event("sendaudio", "event_roundend", "a", "2&%!mrad_terwin")
register_event("sendaudio", "event_roundend", "a", "2&%!mrad_ctwin")
register_event("sendaudio", "event_roundend", "a", "2&%!mrad_rounddraw")
unregister_forward(fm_spawn,g_ifwdspawn,1);
g_pcvar[cvar_count] = register_cvar("kd_knifecount","3");
g_pcvar[cvar_timer] = register_cvar("kd_preparetime","3");
g_pcvar[cvar_maxdistance] = register_cvar("kd_maxdistance","550");
g_pcvar[cvar_announce] = register_cvar("kd_announce","1");
g_pcvar[cvar_reset] = register_cvar("kd_resethp","1");
g_imaxplayers = get_maxplayers();
#if defined debug
register_clcmd("0challenge", "challengefn", admin_cfg, "<challenger> <challenged> - start knife duel challenge")
#endif // defined debug
new float:maptime = get_cvar_float("mp_timelimit")
if (maptime == 0.0)
maptime = 15.0
new float:anntime = 60.0 * 5.0 // 5 minutes
if (maptime < 5.0)
anntime = maptime / 3.0
set_task(anntime, "announcement", 0, "", 0, "b")
}
stock fm_entity_set_aim(id,ent,bone = 0)
{
if(!is_user_connected(id) || !pev_valid(ent))
return 0;
new float:vorigin[3];
pev(ent,pev_origin,vorigin);
new float:ventorigin[3],float:vangles[3];
if(bone)
engfunc(engfunc_getboneposition,id,bone,ventorigin,vangles);
else
pev(id,pev_origin,ventorigin);
vorigin[0] -= ventorigin[0];
vorigin[1] -= ventorigin[1];
vorigin[2] -= ventorigin[2];
new float:v_length;
v_length = vector_length(vorigin);
new float:vaimvector[3];
vaimvector[0] = vorigin[0] / v_length;
vaimvector[1] = vorigin[1] / v_length;
vaimvector[2] = vorigin[2] / v_length;
new float:vnewangles[3];
vector_to_angle(vaimvector,vnewangles);
vnewangles[0] *= -1;
if(vnewangles[1] > 180.0) vnewangles[1] -= 360;
if(vnewangles[1] < -180.0) vnewangles[1] += 360;
if(vnewangles[1] == 180.0 || vnewangles[1] == -180.0) vnewangles[1] = -179.9;
set_pev(id,pev_angles,vnewangles);
set_pev(id,pev_fixangle,1);
return 1;
}
stock vec_null(float:vec[3])
{
if(!vec[0] && !vec[1] && !vec[2])
return 1;
return 0;
}
stock bool:check_players()
{
new inum[2];
for(new i = 1 ; i <= g_imaxplayers ; i++)
{
if(!is_user_alive(i))
continue;
if(get_user_team(i) == 1)
++inum[0];
else if(get_user_team(i) == 2)
++inum[1];
}
if((inum[0] == 1) && (inum[1] == 1))
return true;
return false;
}
stock get_opponent(team)
{
for(new i = 0 ; i <= g_imaxplayers ; i++)
{
if(!is_user_alive(i))
continue;
if(get_user_team(i) == team)
return i;
}
return 0;
}
stock fm_get_speed_vector2(ent1,ent2,float:speed,float:new_velocity[3])
{
if(!pev_valid(ent1) || !pev_valid(ent2))
return 0;
static float:vorigin1[3];
pev(ent1,pev_origin,vorigin1);
static float:vorigin2[3];
pev(ent2,pev_origin,vorigin2);
new_velocity[0] = vorigin2[0] - vorigin1[0];
new_velocity[1] = vorigin2[1] - vorigin1[1];
new_velocity[2] = vorigin2[2] - vorigin1[2];
new float:fnum = floatsqroot(speed * speed / (new_velocity[0] * new_velocity[0] + new_velocity[1] * new_velocity[1] + new_velocity[2] * new_velocity[2]));
new_velocity[0] *= fnum;
new_velocity[1] *= fnum;
new_velocity[2] *= fnum;
return 1;
}
stock float:fm_get_entity_distance(ent1,ent2)
{
if(!pev_valid(ent1) || !pev_valid(ent2))
return 0.0;
static float:vorigin1[3];
pev(ent1,pev_origin,vorigin1);
static float:vorigin2[3];
pev(ent2,pev_origin,vorigin2);
return vector_distance(vorigin1,vorigin2);
}
|
can anyone help pls
|
|