Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <fakemeta>
- #include <hamsandwich>
- #define OFFSET_CSMONEY 115
- #define IGNORE_MONSTERS 1
- new const Claym_mdl[] = "models/mon_50.mdl"
- new body_Claym[33]//, Owner[33]
- new bool:buy_Claym[33]
- new bool:plant_Claym[33]
- new bool:g_bBuyZone[33]
- new plug_Claym, cost_Claym, roll_Claym, dam_Claym, sector_Claym, bayrules_Claym, damdist_Claym
- new sprBoom, sprSmoke//, sprBeam
- public plugin_init()
- {
- register_plugin("Claymore", "1.00", "StarLey_Andrew")
- register_clcmd("say claymore", "claymore_wats")
- register_clcmd("buyclaymore", "Cmd_BuyClaym")
- plug_Claym = register_cvar("amx_Claym", "1")
- bayrules_Claym = register_cvar("Claym_buyzone", "0") // obey buyzone rules? (1 or 0)
- cost_Claym = register_cvar("Claym_cost", "500") // the cost of each Claym bought
- roll_Claym = register_cvar("rolles", "40")
- dam_Claym = register_cvar("Damages", "200")
- sector_Claym = register_cvar("Sector", "80")
- damdist_Claym = register_cvar("Distance", "80")
- register_event("StatusIcon", "Event_BuyZone", "be", "2=buyzone")
- RegisterHam(Ham_Spawn,"player","Player_respawn")
- RegisterHam(Ham_Killed, "player", "Plyer_dead")
- }
- public plugin_precache()
- {
- precache_model(Claym_mdl)
- sprBoom = precache_model("sprites/hexplo.spr")
- sprSmoke = precache_model("sprites/steam.spr")
- //sprBeam = precache_model("sprites/laserbeam.spr")
- }
- public client_connect(id)
- {
- if(get_pcvar_num(plug_Claym))
- {
- plant_Claym[id] = false
- buy_Claym[id] = false
- }
- }
- public client_disconnect(id)
- {
- if(get_pcvar_num(plug_Claym))
- {
- plant_Claym[id] = false
- buy_Claym[id] = false
- }
- }
- public Player_respawn(id)
- {
- if (plant_Claym[id])
- {
- engfunc(EngFunc_RemoveEntity, body_Claym[id])
- plant_Claym[id] = false
- buy_Claym[id] = true
- client_print(id, print_chat, "МО�-50 перемещена в �нар�жение")
- }
- return PLUGIN_HANDLED
- }
- public Plyer_dead(victim, attacker)
- {
- if( !is_user_connected( victim ) )
- return HAM_IGNORED
- if( attacker == victim || !attacker )
- return HAM_IGNORED
- if (pev_valid(body_Claym[victim]))
- {
- engfunc(EngFunc_RemoveEntity, body_Claym[victim])
- plant_Claym[victim] = false
- buy_Claym[victim] = false
- }
- return PLUGIN_HANDLED
- }
- public claymore_wats(id)
- {
- if(buy_Claym[id])
- {
- if(!plant_Claym[id])
- {
- PlantClaym(id)
- return PLUGIN_HANDLED
- }
- }
- else
- {
- if(plant_Claym[id])
- {
- ActClaym_visual(id)
- return PLUGIN_HANDLED
- }
- }
- return PLUGIN_HANDLED
- }
- public Cmd_BuyClaym(id)
- {
- if(!get_pcvar_num(plug_Claym) || !is_user_alive(id))
- return PLUGIN_HANDLED
- if(!g_bBuyZone[id])
- {
- client_print(id, print_center, "Вы должны находить�� в зоне закупки")
- return PLUGIN_HANDLED
- }
- if(plant_Claym[id])
- return PLUGIN_HANDLED
- if(buy_Claym[id])
- {
- client_print(id, print_chat, "Вы уже купили МО�-50")
- return PLUGIN_HANDLED
- }
- if(fm_get_user_money(id) < get_pcvar_num(cost_Claym))
- {
- client_print(id, print_chat, "У Ва� не хватает денег на МО�-50 ($%d)", get_pcvar_num(cost_Claym))
- return PLUGIN_HANDLED
- }
- fm_set_user_money(id, fm_get_user_money(id)-get_pcvar_num(cost_Claym))
- buy_Claym[id] = true
- plant_Claym[id] = false
- client_print(id, print_chat, "Вы купили мину МО�-50", buy_Claym[id])
- return PLUGIN_HANDLED
- }
- public Event_BuyZone(id)
- {
- if(get_pcvar_num(plug_Claym))
- {
- if(read_data(1))
- g_bBuyZone[id] = true
- else{
- if(get_pcvar_num(bayrules_Claym))
- g_bBuyZone[id] = false
- else
- g_bBuyZone[id] = true
- }
- }
- }
- public PlantClaym(id)
- {
- if(!is_user_alive(id))
- return PLUGIN_HANDLED
- new Float:Kuda[3]
- new Float:Otkuda[3]
- new Float:VektorKuda[3]
- new Float:VektorNormal[3]
- new Float:VektorClaym[3]
- new Tochka[3]
- new Glaz[3]
- get_user_origin(id,Tochka,1)
- get_user_origin(id,Glaz,3)
- new DistanceToWall = get_distance(Glaz,Tochka)
- pev(id, pev_v_angle, VektorKuda)
- angle_vector(VektorKuda, ANGLEVECTOR_FORWARD, VektorKuda)
- pev(id, pev_origin, Otkuda)
- VektorKuda[0] = VektorKuda[0] * 9999.0 + Otkuda[0]
- VektorKuda[1] = VektorKuda[1] * 9999.0 + Otkuda[1]
- VektorKuda[2] = VektorKuda[2] * 9999.0 + Otkuda[2]
- new ptr = create_tr2()
- engfunc(EngFunc_TraceLine, Otkuda, VektorKuda, IGNORE_MONSTERS, id, ptr)
- get_tr2(ptr, TR_vecEndPos, Kuda)
- get_tr2(ptr, TR_vecPlaneNormal, VektorNormal)
- free_tr2(ptr)
- vector_to_angle(VektorNormal, VektorClaym)
- //client_print(id, print_center, "NORMAL: %f %f %f Dist:%d", VektorClaym[0], VektorClaym[1], VektorClaym[2], DistanceToWall)
- if(DistanceToWall<64)
- {
- body_Claym[id] = engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,"info_target"))
- set_pev(body_Claym[id], pev_classname, "amxx_Claym")
- engfunc(EngFunc_SetModel, body_Claym[id], Claym_mdl)
- engfunc(EngFunc_SetSize, body_Claym[id], float:{-10.0, -4.0, 0.0}, Float:{10.0, 4.0, 6.0})
- engfunc(EngFunc_SetOrigin, body_Claym[id], Kuda)
- set_pev(body_Claym[id], pev_angles, VektorClaym)
- set_pev(body_Claym[id], pev_solid, SOLID_BBOX)
- set_pev(body_Claym[id], pev_movetype, MOVETYPE_FLY)
- set_pev(body_Claym[id], pev_owner, id)
- buy_Claym[id] = false
- plant_Claym[id] = true
- client_print(id, print_chat, "Вы у�тановили мину МО�-50")
- }
- else
- {
- client_print(id, print_center, "Подойдите ближе к �тене")
- buy_Claym[id] = true
- plant_Claym[id] = false
- }
- return PLUGIN_HANDLED
- }
- public ActClaym_visual(id)
- {
- if (!is_user_alive(id))
- return PLUGIN_HANDLED
- //визуализаци�
- new Float:ClaymOrigin[3]
- new Float:RealClaymOrigin[3]
- new Float:ClaymAngles[3]
- new Float:ClaymEnd[3]
- new Float:vClaymEnd[3]
- new Float:ClaymVector[3]
- pev(body_Claym[id], pev_origin, ClaymOrigin)
- FVecIVec(ClaymOrigin, RealClaymOrigin)
- new i
- for(i=1; i<=get_pcvar_num(roll_Claym); i++)
- {
- pev(body_Claym[id], pev_angles, ClaymAngles)
- ClaymAngles[1] -= (get_pcvar_num(sector_Claym)/2)
- ClaymAngles[1] += random(get_pcvar_num(sector_Claym))
- ClaymAngles[0] -= 20
- ClaymAngles[0] += random(20)
- engfunc(EngFunc_MakeVectors, ClaymAngles)
- global_get(glb_v_forward, ClaymAngles)
- ClaymVector[0] = ClaymAngles[0] * (get_pcvar_num(damdist_Claym) * 36.0) + ClaymOrigin[0]
- ClaymVector[1] = ClaymAngles[1] * (get_pcvar_num(damdist_Claym) * 36.0) + ClaymOrigin[1]
- ClaymVector[2] = ClaymAngles[2] * (get_pcvar_num(damdist_Claym) * 36.0) + ClaymOrigin[2]
- new Claymptr = create_tr2()
- engfunc(EngFunc_TraceLine, ClaymOrigin, ClaymVector, IGNORE_MONSTERS, body_Claym[id], Claymptr)
- get_tr2(Claymptr, TR_vecEndPos, ClaymEnd)
- free_tr2(Claymptr)
- FVecIVec(ClaymEnd, vClaymEnd)
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(TE_TRACER)
- engfunc(EngFunc_WriteCoord, ClaymOrigin[0])
- engfunc(EngFunc_WriteCoord, ClaymOrigin[1])
- engfunc(EngFunc_WriteCoord, ClaymOrigin[2])
- engfunc(EngFunc_WriteCoord, ClaymEnd[0])
- engfunc(EngFunc_WriteCoord, ClaymEnd[1])
- engfunc(EngFunc_WriteCoord, ClaymEnd[2])
- message_end()
- }
- pev(body_Claym[id], pev_origin, ClaymOrigin)
- FVecIVec(ClaymOrigin, RealClaymOrigin)
- message_begin(MSG_ALL, SVC_TEMPENTITY)
- write_byte(3)
- write_coord(RealClaymOrigin[0])
- write_coord(RealClaymOrigin[1])
- write_coord(RealClaymOrigin[2])
- write_short(sprBoom)
- write_byte(9)
- write_byte(255)
- write_byte(0)
- message_end()
- message_begin(MSG_ALL, SVC_TEMPENTITY, RealClaymOrigin)
- write_byte(5)
- write_coord(RealClaymOrigin[0])
- write_coord(RealClaymOrigin[1])
- write_coord(RealClaymOrigin[2])
- write_short(sprSmoke)
- write_byte(17)
- write_byte(10)
- message_end()
- message_begin(MSG_ALL, SVC_TEMPENTITY)
- write_byte(TE_WORLDDECAL)
- write_coord(RealClaymOrigin[0])
- write_coord(RealClaymOrigin[1])
- write_coord(RealClaymOrigin[2])
- write_byte(28)
- message_end()
- //ActClaym(id)
- //Убий�тва
- new Float:VecToTarget[3]
- new Float:AnglToTarget[3]
- new Float:AnglClaymToTarget[3]
- new Float:TargetOrig[3]
- new Float:RealTargetOrig[3]
- new pNum, j, Target[32]
- get_players(Target, pNum, "a")
- for (j=0; j<pNum; j++)
- {
- pev(Target[j], pev_origin, TargetOrig)
- FVecIVec(TargetOrig, RealTargetOrig)
- pev(body_Claym[id], pev_origin, ClaymOrigin)
- pev(body_Claym[id], pev_angles, ClaymAngles)
- VecToTarget[0] = ClaymOrigin[0] - TargetOrig[0]
- VecToTarget[1] = ClaymOrigin[1] - TargetOrig[1]
- VecToTarget[2] = ClaymOrigin[2] - TargetOrig[2]
- VecToTarget[0] = -VecToTarget[0]
- VecToTarget[1] = -VecToTarget[1]
- VecToTarget[2] = -VecToTarget[2]
- vector_to_angle( VecToTarget, AnglToTarget)
- if (ClaymAngles[0] > 180.0)
- {
- ClaymAngles[0] = ClaymAngles[0] - 360.0
- }
- if (ClaymAngles[1] > 180.0)
- {
- ClaymAngles[1] = ClaymAngles[1] - 360.0
- }
- if (AnglToTarget[0] > 180.0)
- {
- AnglToTarget[0] = AnglToTarget[0] - 360.0
- }
- if (AnglToTarget[1] > 180.0)
- {
- AnglToTarget[1] = AnglToTarget[1] - 360.0
- }
- AnglClaymToTarget[0] = AnglToTarget[0] - ClaymAngles[0]
- AnglClaymToTarget[1] = AnglToTarget[1] - ClaymAngles[1]
- AnglClaymToTarget[2] = AnglToTarget[2] - ClaymAngles[2]
- if (AnglClaymToTarget[0] <= -180.0)
- {
- AnglClaymToTarget[0] = AnglClaymToTarget[0] + 360.0
- }
- if (AnglClaymToTarget[1] <= -180.0)
- {
- AnglClaymToTarget[1] = AnglClaymToTarget[1] + 360.0
- }
- //client_print(id, print_chat, "p:%f y:%f r:%f", AnglClaymToTarget[0], AnglClaymToTarget[1], AnglClaymToTarget[2])
- new DistanceClaymToPlay = get_distance( RealClaymOrigin, RealTargetOrig)
- //new sector = get_pcvar_num(plug_Claym)/2
- //client_print(Target[j], print_chat, "DistanceClaymToPlay: %d", DistanceClaymToPlay)
- if (((AnglClaymToTarget[0] > -10) && (AnglClaymToTarget[0] < 10) && (AnglClaymToTarget[1] > -(get_pcvar_num(sector_Claym)/2)) && (AnglClaymToTarget[1] < (get_pcvar_num(sector_Claym)/2)) && (DistanceClaymToPlay < (get_pcvar_num(damdist_Claym) * 36.0))) || (DistanceClaymToPlay <= 180))
- {
- new Float:TargEndTr[3]
- new Float:RealTargEndTr[3]//зде�ь пропи�ать тра��у
- //new Float:BetwenEndITar[3]
- new damptr = create_tr2()
- engfunc(EngFunc_TraceLine, ClaymOrigin, TargetOrig, IGNORE_MONSTERS, body_Claym[id], damptr)
- get_tr2(damptr, TR_vecEndPos, TargEndTr)
- FVecIVec(TargEndTr, RealTargEndTr)
- new DistanceEndToTar = get_distance( RealTargetOrig, RealTargEndTr)
- if ( DistanceEndToTar == 0)
- {
- static Float:health
- pev(Target[j], pev_health, health)
- if(health <= get_pcvar_num(dam_Claym))
- {
- if(get_user_team(Target[j]) == get_user_team(id))
- {
- set_pev(id, pev_frags, float(get_user_frags(id))-1.0)
- }
- else
- {
- set_pev(id, pev_frags, float(get_user_frags(id))+1.0)
- }
- user_silentkill(Target[j])
- make_deathmsg(id, Target[j], 0, "grenade")
- refresh_scoreboard(Target[j])
- refresh_scoreboard(id)
- }
- else
- {
- set_pev(Target[j], pev_health, health-get_pcvar_num(dam_Claym))
- dmgevent(Target[j], floatround(get_pcvar_num(dam_Claym)), RealClaymOrigin)
- }
- }
- free_tr2(damptr)
- }
- }
- engfunc(EngFunc_RemoveEntity, body_Claym[id])
- plant_Claym[id] = false
- return PLUGIN_HANDLED
- }
- stock fm_get_user_money(id)
- {
- return get_pdata_int(id, OFFSET_CSMONEY);
- }
- stock fm_set_user_money(id, money, flash = 1)
- {
- set_pdata_int(id, OFFSET_CSMONEY, money);
- message_begin(MSG_ONE, get_user_msgid("Money"), {0,0,0}, id);
- write_long(money);
- write_byte(flash ? 1 : 0);
- message_end();
- }
- stock refresh_scoreboard(id)
- {
- message_begin(MSG_ALL, 85)
- write_byte(id)
- write_short(get_user_frags(id))
- write_short(get_user_deaths(id))
- write_short(0)
- write_short(get_user_team(id))
- message_end()
- }
- stock dmgevent(id, dmg, origin[])
- {
- emessage_begin(MSG_ONE, 71, _, id)
- ewrite_byte(0) // dmg_save
- ewrite_byte(dmg) // dmg_take
- ewrite_long(DMG_BLAST)
- ewrite_coord(origin[0])
- ewrite_coord(origin[1])
- ewrite_coord(origin[2])
- emessage_end()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement