Armor drop plug-in problem.
Hi. In order to at bringing up (coming up) vest listen sound tr_kelvar.wav
Code
PHP Code:
/* * Title: * CS Armor Drop (on death) * * Summary: * When a player dies, if they have armor, they will drop their armor on the ground next to their corpse. * A player can then walk over it and pick it up, letting them get a "percentage" of the armor left behind. * Also, the player will recieve the same armor type as what they picked up. * All armor will be deleted when round ends. Or on specified time (see cvars). * * Cvars: * armor_pct - (Default 20%) This is percentage of armor that will be received when its picked up. * armor_max - (Default 100) This is the max amount of armor a user can get from picking up. * armor_min - (Default 15) Minimum armor needed, for player to drop when killed. * armor_removetime - (Default 2min) Time before armor is removed from map (unless round ends). * * * Requires : AMXX 1.60 * Modules : Engine, FakeMeta * Tested : Win32 (Linux untested) * * Author: OneEyed * Version: 1.1 * * Thanks : ccnncc99, sXy-Schreck, phear of rice, and Aunt Friggin' Connie, * For helping me test and fix this plugin! * * * - Change Log: * -v1.1 * - Fixed to work on AMXX 1.60 * - Added "Armor Drop" CVAR for queries to pick up. */ #include <amxmodx> #include <engine> #include <fakemeta> //---------------These values are default, they are added to the CVAR's--------------------- //---------------Change if you want these to be defaulted to the CVAR on SERVER RESTART----- //---------------------------------------------------------------------- //This is percentage, if its 25, only 25% of dropped armor will be given. #define ARMOR_TAX "50" //---------------------------------------------------------------------- // MAX armor allowed, default = 100 (Set higher, if you want players to go over 100 armor.) #define MAXARMOR "100" //---------------------------------------------------------------------- // Minimum armor needed for armor to drop when player dies. #define MINARMOR "35" //---------------------------------------------------------------------- // Time before Armor is removed from the map in seconds (unless round ends) default=2mins #define REMOVE_TIME "180" //---------------------------------------------------------------------- //------------------------------------------------------------------------------------------------------------- //-----------------------------------DO NOT EDIT BELOW THIS LINE----------------------------------------------- //------------------------------------------------------------------------------------------------------------- #define KEVLAR 1 #define VESTHELM 2 #define ARMORTYPE_OFFSET 112 #define TITLE "Armor Drop" #define VERSION "1.0" #define AUTHOR "OneEyed" new g_ArmorType[33], Float:g_ArmorAmount[33], fArmor[33] //Change this if you want a custom kevlar model new armormodel[] = "models/new/w_kevlar.mdl" new armorsound[] = "sound/items/tr_kevlar.wav" new Float:multiplier //------------------------------------------------------------------------------------------------------------- public plugin_precache() { precache_model(armormodel) precache_sound(armorsound) } //------------------------------------------------------------------------------------------------------------- public plugin_init() { register_plugin(TITLE, VERSION, AUTHOR) register_cvar(TITLE,VERSION,FCVAR_SERVER) if(!cvar_exists("armor_pct")) register_cvar("armor_pct",ARMOR_TAX) if(!cvar_exists("armor_max")) register_cvar("armor_max",MINARMOR) if(!cvar_exists("armor_min")) register_cvar("armor_min",MINARMOR) if(!cvar_exists("armor_removetime")) register_cvar("armor_removetime",REMOVE_TIME) register_touch("FakeArmor","player","grabArmor") register_event("DeathMsg","createArmor","a") register_event( "SendAudio", "EndRound", "a", "2=%!MRAD_terwin", "2=%!MRAD_ctwin", "2=%!MRAD_rounddraw" ) } //------------------------------------------------------------------------------------------------------------- //-----------Delayed it to be right at the end, (doesnt work if i try to erase it on Round Start)-------------- public EndRound() set_task(5.0,"removeArmor",1111) public removeArmor() { new tempid = -1 while ( ( tempid = find_ent_by_class(tempid, "FakeArmor") ) > 0) if(is_valid_ent(tempid)) { remove_entity(tempid) remove_task(tempid) } return PLUGIN_CONTINUE } //------------------------------------------------------------------------------------------------------------- // Set task to this to remove the armor after specified amount of time. (armor_removetime) public removeThisArmor(id) if(is_valid_ent(id)) remove_entity(id) //------------------------------------------------------------------------------------------------------------- public grabArmor(pToucher, pTouched) { if(is_user_alive(pTouched) && is_user_connected(pTouched) && entity_get_float(pTouched,EV_FL_armorvalue) < float(get_cvar_num("armor_max"))) { new owner = entity_get_int(pToucher, EV_INT_iuser1) if(is_valid_ent(fArmor[owner])) { get_armor_values(pTouched) multiplier = float(get_cvar_num("armor_pct")) * 0.01 //Retrieve armor values left on the dropped kevlar new armortype = entity_get_int(fArmor[owner], EV_INT_iuser3) new armoramt = entity_get_int(fArmor[owner], EV_INT_iuser4) //Set armor accordingly to how player has theirs, and what type they grab. if(g_ArmorType[pTouched] == 0) csset_user_armor(pTouched, armoramt*multiplier, (armortype==1?KEVLAR:VESTHELM)), emit_sound(0, CHAN_AUTO, armorsound, 1.0, ATTN_NORM, 0, PITCH_NORM) else if(g_ArmorType[pTouched] == 1 && armortype == 1) csset_user_armor(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), KEVLAR), emit_sound(0, CHAN_AUTO, armorsound, 1.0, ATTN_NORM, 0, PITCH_NORM) else if((g_ArmorType[pTouched] == 1 && armortype == 2) || g_ArmorType[pTouched] == 2) csset_user_armor(pTouched, entity_get_float(pTouched,EV_FL_armorvalue)+(armoramt*multiplier), VESTHELM), emit_sound(0, CHAN_AUTO, armorsound, 1.0, ATTN_NORM, 0, PITCH_NORM) // If their armor goes over MAXARMOR set it to MAXARMOR if(entity_get_float(pTouched,EV_FL_armorvalue) > float(get_cvar_num("armor_max"))) entity_set_float(pTouched,EV_FL_armorvalue, float(get_cvar_num("armor_max"))) g_ArmorType[pTouched] = armortype remove_entity(fArmor[owner]) remove_task(fArmor[owner]) } } return PLUGIN_HANDLED } //------------------------------------------------------------------------------------------------------------- public createArmor(id) { new victim = read_data(2) //grab user ID who died get_armor_values(victim) if(g_ArmorType[victim] <= 0 || g_ArmorAmount[victim] <= float(get_cvar_num("armor_min"))) return PLUGIN_CONTINUE new origin[3] new Float:fOrigin[3] get_user_origin(victim,origin) for(new a=0;a<3;a++) fOrigin[a]=float(origin[a]) fArmor[victim] = create_entity("info_target") if(fArmor[victim]) { entity_set_string(fArmor[victim],EV_SZ_classname,"FakeArmor") entity_set_model(fArmor[victim], armormodel) new Float:MinBox[3] new Float:MaxBox[3] MinBox[0] = -6.0 MinBox[1] = -8.0 MinBox[2] = -1.5 MaxBox[0] = 6.0 MaxBox[1] = 8.0 MaxBox[2] = 1.5 entity_set_vector(fArmor[victim], EV_VEC_mins, MinBox) entity_set_vector(fArmor[victim], EV_VEC_maxs, MaxBox) entity_set_int(fArmor[victim], EV_INT_solid, SOLID_BBOX) entity_set_int(fArmor[victim], EV_INT_movetype, MOVETYPE_TOSS) // Sets iuser1 to victim ID entity_set_int(fArmor[victim], EV_INT_iuser1, victim) // Sets iuser3 to Armor Type (kevlar of vest+helm) entity_set_int(fArmor[victim], EV_INT_iuser3, g_ArmorType[victim]) // Sets iuser4 to Armor Value (amount victim had when he died) entity_set_int(fArmor[victim], EV_INT_iuser4, floatround(g_ArmorAmount[victim])) entity_set_origin(fArmor[victim], fOrigin) set_task(float(get_cvar_num("armor_removetime")),"removeThisArmor",fArmor[victim]) } return PLUGIN_HANDLED } //------------------------------------------------------------------------------------------------------------- public get_armor_values(id) { if(entity_get_float(id,EV_FL_armorvalue) <= 0.0) g_ArmorType[id] = 0 else { g_ArmorAmount[id] = entity_get_float(id,EV_FL_armorvalue) g_ArmorType[id] = get_pdata_int(id,ARMORTYPE_OFFSET) } } //------------------------------------------------------------------------------------------------------------- //Cstrike.inc has this function, but its broken, so i made my own that works =). public csset_user_armor(id, Float:amount, type) { entity_set_float(id,EV_FL_armorvalue, amount) set_pdata_int(id,ARMORTYPE_OFFSET,type) } //-------------------------------------------------------------------------------------------------------------
|