Raised This Month: $ Target: $400
 0% 

Plugin schreiben hilfe


  
 
 
Thread Tools Display Modes
Author Message
WARRIORS
Senior Member
Join Date: May 2009
Location: German
Old 11-21-2009 , 22:25   Plugin schreiben hilfe
#1

Hi leute bin dabei fuer mein server ein cooles plugin zu machen undzwar der lezte terror soll aber nur der terror koennen soll 3mal an die wand messern und dan will ich das sich sta dem messer duel ein menu öffnet das menu mach ich mir selber aber meine frage ist kann mir wer den code umwandeln in das der letze te 3mal an die wand messer und sich dan ein menu öffnet wo er auswählen kan bis jezt ist es genau so der lezte spieler messert an die wand und ein knife duell ist..

Code:#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Knife Duel"
#define VERSION "1.0"
#define AUTHOR "Alka"

#define CBASE_CURRWPN_ENT 373
#define OFFSET_ENT_TO_INDEX 43

new const g_szKnifeSound[] = "weapons/knife_hitwall1.wav";
new const g_szSpawnClassname[] = "info_player_deathmatch";

new Float:g_fHit[33];
new iHitCount[33];
new g_iChallenged, g_iChallenger;

new Float:g_vKnifeOrigin[2][3];
new bool:g_bInChallenge;
new bool:g_bProtect;
new g_iTimer;

enum _:max_cvars {

CVAR_COUNT = 0,
CVAR_TIMER,
CVAR_MAXDISTANCE,
CVAR_PROTECTION,
CVAR_ANNOUNCE,
CVAR_RESET
};
new g_Pcvar[max_cvars];

new g_iFwdSpawn;
new g_iMaxPlayers;

public plugin_init() {

register_plugin(PLUGIN, VERSION, AUTHOR);

register_forward(FM_EmitSound, "fwd_EmitSound", 1);
register_forward(FM_PlayerPreThink, "fwd_PlayerPreThink_post", 1);
RegisterHam(Ham_Killed, "player", "fwd_Killed", 1);
unregister_forward(FM_Spawn, g_iFwdSpawn, 1);

register_logevent("logevent_RoundEnd", 2, "1=Round_End", "1=Round_Draw");

g_Pcvar[CVAR_COUNT] = register_cvar("kd_knifecount", "3");
g_Pcvar[CVAR_TIMER] = register_cvar("kd_preparetime", "3");
g_iTimer = get_pcvar_num(g_Pcvar[CVAR_TIMER]);
g_Pcvar[CVAR_PROTECTION] = register_cvar("kd_protection", "1");
g_Pcvar[CVAR_MAXDISTANCE] = register_cvar("kd_maxdistance", "600");
g_Pcvar[CVAR_ANNOUNCE] = register_cvar("kd_announce", "1");
g_Pcvar[CVAR_RESET] = register_cvar("kd_resethp", "0");

g_iMaxPlayers = get_maxplayers();
}

public plugin_precache()
g_iFwdSpawn = register_forward(FM_Spawn, "fwd_Spawn", 1);

public client_disconnect(id)
{
if((id == g_iChallenged) || (id == g_iChallenger))
{
g_bInChallenge = false;
g_bProtect = false;
}
}

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 fwd_EmitSound(id, channel, const sound[])
{
if(!is_user_alive(id))
return FMRES_IGNORED;

if(!equal(sound, g_szKnifeSound))
return FMRES_IGNORED;

static Float:fGmTime;
fGmTime = get_gametime();

if((fGmTime - g_fHit[id]) >= 1.0)
{
iHitCount[id] = 0;
g_fHit[id] = fGmTime;
}
++iHitCount[id];
g_fHit[id] = fGmTime;

if((iHitCount[id] >= get_pcvar_num(g_Pcvar[CVAR_COUNT])) && check_players() && !g_bInChallenge)
{
new iOpponent = get_opponent(3 - get_user_team(id));
if(!iOpponent)
return FMRES_IGNORED;

fnChallenge(id, iOpponent);

iHitCount[id] = 0;
}
return FMRES_IGNORED;
}

public fwd_PlayerPreThink_post(id)
{
if(!is_user_alive(id) || !g_bInChallenge)
return FMRES_IGNORED;

static iWpn;
iWpn = get_pdata_cbase(id, CBASE_CURRWPN_ENT);

if(pev_valid(iWpn))
{
if(get_pdata_int(iWpn, OFFSET_ENT_TO_INDEX) != CSW_KNIFE)
engclient_cmd(id, "weapon_knife");
}

static iOpponent;
if(id == g_iChallenged)
iOpponent = g_iChallenger;
else
iOpponent = g_iChallenged;

if(!is_user_connected(iOpponent))
return FMRES_IGNORED;

if((fm_get_entity_distance(id, iOpponent) >= get_pcvar_float(g_Pcvar[CVAR_MAXDISTANCE])) && g_bProtect)
{
static Float:vVel[3];
fm_get_speed_vector2(id, iOpponent, 100.0, vVel);

set_pev(id, pev_velocity, vVel);
}
return FMRES_IGNORED;
}

public fwd_Killed(id, idattacker, shouldgib)
{
if(!get_pcvar_num(g_Pcvar[CVAR_ANNOUNCE]))
return HAM_IGNORED;

if(check_players())
{
for(new i = 0 ; i <= g_iMaxPlayers ; i++)
{
if(!is_user_alive(i))
continue;

client_print(i, print_chat, "* You can challenge other player to a knife duel by slashing the wall %d times.", get_pcvar_num(g_Pcvar[CVAR_COUNT]));
}
}
return HAM_IGNORED;
}

public fnChallenge(id, opponent)
{
new szName[32], szOppName[32];
get_user_name(id, szName, sizeof szName - 1);
get_user_name(opponent, szOppName, sizeof szOppName - 1);

new szTitle[64];
formatex(szTitle, sizeof szTitle - 1, "\r%s \yis challenging you to a knife duel", szName);

new iMenu = menu_create(szTitle, "menu_MainHandler", 0);
menu_additem(iMenu, "Accept", "1", 0, -1);
menu_additem(iMenu, "No, thank you", "2", 0, -1);

menu_setprop(iMenu, MPROP_EXIT, MEXIT_NEVER);
menu_display(opponent, iMenu, 0);

client_print(0, print_chat, "* %s has challenged %s to a knife duel.", szName, szOppName);

g_iChallenger = id;
g_iChallenged = opponent;
g_bInChallenge = true;
}

public menu_MainHandler(id, menu, item)
{
if(!is_user_connected(id))
return 1;

new szData[6], iAccess, iCallBack;
menu_item_getinfo(menu, item, iAccess, szData, sizeof szData - 1, _, _, iCallBack);

new iKey = str_to_num(szData);

new szName[32];
get_user_name(id, szName, sizeof szName - 1);

switch(iKey)
{
case 1:
{
client_print(0, print_chat, "* %s has accepted the knife duel!", szName);
fnStartDuel();
}
case 2:
{
client_print(0, print_chat, "* %s has declined the knife duel!", szName);
g_bInChallenge = false;
}
}
return 1;
}

public fnStartDuel()
{
if(!is_user_connected(g_iChallenged) || !is_user_connected(g_iChallenger))
return;

engfunc(EngFunc_SetOrigin, g_iChallenged, g_vKnifeOrigin[0]);
engfunc(EngFunc_SetOrigin, g_iChallenger, g_vKnifeOrigin[1]);

fm_entity_set_aim(g_iChallenged, g_iChallenger, 0);
fm_entity_set_aim(g_iChallenger, g_iChallenged, 0);

fm_set_user_godmode(g_iChallenged, 1);
fm_set_user_godmode(g_iChallenger, 1);

if(get_pcvar_num(g_Pcvar[CVAR_RESET]))
{
set_pev(g_iChallenged, pev_health, 100.0);
set_pev(g_iChallenger, pev_health, 100.0);
}
set_task(1.0, "taskDuelThink", 'x', "", 0, "b", 0);

if(get_pcvar_num(g_Pcvar[CVAR_PROTECTION]))
g_bProtect = true;
}

public taskDuelThink()
{
if(g_iTimer > 0)
{
set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.9, 1);
show_hudmessage(0, "Countdown: %d", g_iTimer--);
}
else
{
set_hudmessage(255, 100, 0, -1.0, 0.3, 0, 6.0, 1.0, 0.1, 0.5, 1);
show_hudmessage(0, "Knife Duel has started!");

g_iTimer = get_pcvar_num(g_Pcvar[CVAR_TIMER]);
remove_task('x');

for(new i = 0 ; i <= g_iMaxPlayers ; i++)
{
if(!is_user_alive(i))
continue;

fm_set_user_godmode(i, 0);
}
}
}

public logevent_RoundEnd()
{
g_bInChallenge = false;
g_bProtect = false;
}

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_set_user_godmode(index, godmode = 0)
{
set_pev(index, pev_takedamage, godmode == 1 ? DAMAGE_NO : DAMAGE_AIM);
return 1;
}

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);
}

danke euch für hilfe
WARRIORS is offline
KadiR
Unnecessary Member
Join Date: Aug 2008
Location: Zürich / Switzerland
Old 11-22-2009 , 04:47   Re: Plugin schreiben hilfe
#2

Mach den Code als php tag bitte
KadiR is offline
One
Veteran Member
Join Date: Oct 2008
Location: Hardstyle-eSports.de
Old 11-22-2009 , 10:12   Re: Plugin schreiben hilfe
#3

nehm doch das knife duell plugin und tu da einfach ein if(cs_get_user_team(id) == CS_TEAM_T && is_user_alive(id))
__________________
One is offline
Send a message via ICQ to One Send a message via AIM to One Send a message via MSN to One Send a message via Yahoo to One Send a message via Skype™ to One
platzpatrone
Veteran Member
Join Date: Apr 2007
Location: Germany
Old 11-22-2009 , 19:49   Re: Plugin schreiben hilfe
#4

warum an die wand knifen lassen ?

check einfach wer der letzte T ist und lass das menü
dann automatisch für ihn öffnen
platzpatrone is offline
WARRIORS
Senior Member
Join Date: May 2009
Location: German
Old 11-23-2009 , 09:15   Re: Plugin schreiben hilfe
#5

is mein rstes plugin null ahnung davon aber probieren will ichs tipps links kennt ihr was ? dank euch für hilfe
WARRIORS is offline
ScHrAnZ DiNgEnS
Senior Member
Join Date: Sep 2007
Old 11-23-2009 , 16:55   Re: Plugin schreiben hilfe
#6

an die wand knifen für terrors only is beschissen, denn:

Der letzte terror legt die bombe, und knifet dann gegen die wand und hält sich in der Nähe der Bombe auf. kommt der ct rennt er vor dem CT weg bis die Bombe detoniert oder bis der CT versucht zu defusen...

hehe...

Auf hostagemaps ist es natürlich ebenso beschissen wenn der CT das duell starten kann der schon mit geiseln rumrennt...
__________________
ScHrAnZ DiNgEnS is offline
Send a message via ICQ to ScHrAnZ DiNgEnS Send a message via AIM to ScHrAnZ DiNgEnS
NastyBoy
Senior Member
Join Date: Mar 2006
Location: 49°43'35"N 8°17'48&
Old 11-23-2009 , 18:32   Re: Plugin schreiben hilfe
#7

Quote:
Originally Posted by ScHrAnZ DiNgEnS View Post
an die wand knifen für terrors only is beschissen, denn:

Der letzte terror legt die bombe, und knifet dann gegen die wand und hält sich in der Nähe der Bombe auf. kommt der ct rennt er vor dem CT weg bis die Bombe detoniert oder bis der CT versucht zu defusen...

hehe...

Auf hostagemaps ist es natürlich ebenso beschissen wenn der CT das duell starten kann der schon mit geiseln rumrennt...
^


haha, knife in letzte runde, das mache ich auch immer!
ich lach mich als tot vorm monitor wenn einer darauf eingeht und ich fuer mich und mein team die runde gewinne und er immernoch mit dem messer hinter mir nachläuft ......
__________________
-=]sfw[=-Nightmare WC3FT____81.169.186.142:27015
-=]sfw[=-Nightmare CSDM _____81.169.186.142:27022
-=]sfw[=-Nightmare Ratsstyle __85.214.141.83:27016
-=]sfw[=-Nightmare Paintball___81.169.186.142:27019
-=]sfw[=-Nightmare GunGame__81.169.186.142:27023

sponsored by ???
NastyBoy is offline
D o o m
Veteran Member
Join Date: Sep 2005
Location: Germany
Old 11-23-2009 , 18:52   Re: Plugin schreiben hilfe
#8

Er möchte dann ja auch ein anderes Menü öffnen als beim Knife Duell.
Wird wahrscheinlich von dem LR Request vor kurzem sein.
Nur statt, dass der T was eingeben soll, soll er jetzt eben 3x gegen die Wand slashen.

Spätestens wenn das erledigt wurde, wird eh wieder nachgefragt wie er's Menü reinbekommt und wie er das dann hinzufügt.
__________________
Heroes
:+: Deadpool :+:
D o o m is offline
|PJ| Shorty
Veteran Member
Join Date: Aug 2005
Location: Bavaria, Germany
Old 11-23-2009 , 19:15   Re: Plugin schreiben hilfe
#9

Quote:
Originally Posted by One View Post
nehm doch das knife duell plugin und tu da einfach ein if(cs_get_user_team(id) == CS_TEAM_T && is_user_alive(id))
so würds ich auch machen... das plugin existiert ja bereits incl. Menü. warum nicht einfach nur für T ändern??
__________________
There are only 10 types of people in the world:
Those who understand binary, and those who don´t.
|PJ| Shorty is offline
Send a message via ICQ to |PJ| Shorty Send a message via AIM to |PJ| Shorty Send a message via MSN to |PJ| Shorty Send a message via Yahoo to |PJ| Shorty Send a message via Skype™ to |PJ| Shorty
platzpatrone
Veteran Member
Join Date: Apr 2007
Location: Germany
Old 11-23-2009 , 19:23   Re: Plugin schreiben hilfe
#10

Einfach checken ob nur noch 1 Terror übrig ist.
waffen inkl bombe stripen, menü aufführen
Terror wählt und bekommt wenn im Menü ne Waffe ist die entsprechende
waffe.

wenn er genauer beschreiben würde was er bzw. das teil können sollte. könnte man genauer was posten.
platzpatrone is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:27.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode