Junior Member
|
05-10-2018
, 07:50
[Help]
|
#1
|
PHP Code:
#include <amxmodx> #include <amxmisc> #include <engine> #include <fakemeta> #include <cstrike> #include <fun> #include <xs>
#define PLUGIN "Liberation War : Air Supply" #define VERSION "1.0" #define AUTHOR "Sneaky.amxx"
// Config #define SUPPLYBOX_TEAM CS_TEAM_CT | CS_TEAM_T
#define AIRPLANE_CLASSNAME "Sneaky_airline" #define SUPPLYBOX_CLASSNAME "Sneaky_box"
// Resources #define AIRPLANE_MODEL "models/sorpack/Supply_Airplane.mdl" #define SUPPLY_MODEL "models/sorpack/Supply_Parachute.mdl" #define PACKAGE_MODEL "models/sorpack/Supply_Package.mdl" new const Airplane_Sound[] = "sorpack/airsupply/Supply_Airplane.wav"
// Task #define TASK_AIRPLANE 410151
/// Spawn System new const SPAWNS_URL[] = "%s/airsupply/%s.sneakyamxx" const MAX_SPAWNS = 128 new g_spawns[MAX_SPAWNS][3], g_spawns2[MAX_SPAWNS][3], g_total_spawns
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_think(AIRPLANE_CLASSNAME, "fw_Airplane_Think") register_think(SUPPLYBOX_CLASSNAME, "fw_Supplybox_Think") register_touch(SUPPLYBOX_CLASSNAME, "*", "fw_Supplybox_Touch") register_clcmd("AS_Spawn", "Spawn_Editor") register_clcmd("AS_NoClip", "Spawn_Editor_NoClip") register_clcmd("say /test", "Test") }
public plugin_precache() { precache_model(AIRPLANE_MODEL) precache_model(SUPPLY_MODEL) precache_model(PACKAGE_MODEL) precache_sound(Airplane_Sound) }
public plugin_cfg() { spawn_load() }
public Spawn_Editor(id) spawn_main(id) public Spawn_Editor_NoClip(id) { if(!is_user_alive(id)) return if(!get_user_noclip(id)) set_user_noclip(id, 1) else set_user_noclip(id, 0) }
public Test(id) { AirSupply_Clear() // Usually called in 'New Round' Event Airplane_Appear() // Call whenever you want the packages }
public AirSupply_Clear() { remove_task(TASK_AIRPLANE) remove_entity_name(AIRPLANE_CLASSNAME) remove_entity_name(SUPPLYBOX_CLASSNAME) }
public Airplane_Appear() { PlaySound(0, Airplane_Sound) set_task(3.5, "Create_Airplane", TASK_AIRPLANE) }
public Create_Airplane() { if(!g_total_spawns) return static Random; Random = random(g_total_spawns) static Float:Start[3]; IVecFVec(g_spawns[Random], Start) static Float:Target[3]; IVecFVec(g_spawns2[Random], Target) static Airplane; Airplane = create_entity("info_target") set_pev(Airplane, pev_classname, AIRPLANE_CLASSNAME) engfunc(EngFunc_SetModel, Airplane, AIRPLANE_MODEL) engfunc(EngFunc_SetSize, Airplane, Float:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0}) set_pev(Airplane, pev_solid, SOLID_TRIGGER) set_pev(Airplane, pev_movetype, MOVETYPE_FLY) set_pev(Airplane, pev_iuser1, Random) engfunc(EngFunc_SetOrigin, Airplane, Start) set_pev(Airplane, pev_rendermode, kRenderTransAlpha) set_pev(Airplane, pev_renderfx, kRenderFxNone) set_pev(Airplane, pev_renderamt, 0.0) set_pev(Airplane, pev_vuser1, Start) set_pev(Airplane, pev_vuser2, Target) Aim_To2(Airplane, Target) Set_EntAnim(Airplane, 1, 1.0, 0) set_pev(Airplane, pev_fuser2, random_float(0.1, 0.5)) set_pev(Airplane, pev_nextthink, get_gametime() + 0.1) }
public fw_Airplane_Think(Ent) { if(!pev_valid(Ent)) return static Float:Start[3], Float:End[3], Float:Now[3] pev(Ent, pev_vuser1, Start) pev(Ent, pev_vuser2, End) pev(Ent, pev_origin, Now) if(get_distance_f(Start, Now) < 360.0) { static Float:RenderAmt; pev(Ent, pev_renderamt, RenderAmt) if(RenderAmt < 250.0) { RenderAmt += 17.5 if(RenderAmt > 250.0) RenderAmt = 255.0 set_pev(Ent, pev_renderamt, RenderAmt) } } if(get_distance_f(Now, End) > 360.0) { hook_ent2(Ent, End, 1700.0) } else { hook_ent2(Ent, End, 1000.0) static Float:RenderAmt; pev(Ent, pev_renderamt, RenderAmt) if(RenderAmt > 0.0) { RenderAmt -= 10.0 if(RenderAmt < 0.0) RenderAmt = 0.0 set_pev(Ent, pev_renderamt, RenderAmt) } else { remove_entity(Ent) return } } static Float:Time; pev(Ent, pev_fuser1, Time) static Float:Delay; pev(Ent, pev_fuser2, Delay) if(get_gametime() - Delay > Time) { Create_Supplybox(Now) Time = get_gametime() set_pev(Ent, pev_fuser1, Time) set_pev(Ent, pev_fuser2, random_float(7.0, 100.0)) } set_pev(Ent, pev_nextthink, get_gametime() + 0.01) }
public Create_Supplybox(Float:Origin[3]) { static Supply; Supply = create_entity("info_target") set_pev(Supply, pev_classname, SUPPLYBOX_CLASSNAME) engfunc(EngFunc_SetModel, Supply, SUPPLY_MODEL)
engfunc(EngFunc_SetSize, Supply, Float:{-3.0,-3.0,-3.0}, Float:{3.0,3.0,3.0}) set_pev(Supply, pev_solid, SOLID_TRIGGER) set_pev(Supply, pev_movetype, MOVETYPE_TOSS) set_pev(Supply, pev_angles, {90.0, 0.0, 0.0}) set_pev(Supply, pev_gravity, 0.5) static Float:Velocity[3] Velocity[0] = random_float(-100.0, 100.0) Velocity[1] = random_float(-100.0, 100.0)
engfunc(EngFunc_SetOrigin, Supply, Origin) set_pev(Supply, pev_velocity, Velocity) Set_EntAnim(Supply, 0, 1.0, 0) set_pev(Supply, pev_nextthink, get_gametime() + 0.01) }
public fw_Supplybox_Think(Ent) { if(!pev_valid(Ent)) return static Float:Velocity[3]; pev(Ent, pev_velocity, Velocity) if(!vector_length(Velocity)) { pev(Ent, pev_angles, Velocity) if(Velocity[0] > 0.0) { Velocity[0] -= 10.0 if(Velocity[0] < 0.0) { Velocity[0] = 0.0 } set_pev(Ent, pev_angles, Velocity) if(!Velocity[0]) engfunc(EngFunc_SetModel, Ent, PACKAGE_MODEL) } } set_pev(Ent, pev_nextthink, get_gametime() + 0.1) }
public fw_Supplybox_Touch(Ent, id) { if(!pev_valid(Ent)) return FMRES_IGNORED if(!is_user_alive(id) || !(cs_get_user_team(id) & SUPPLYBOX_TEAM)) return FMRES_IGNORED
// Effect & Sound //emit_sound(Id, CHAN_VOICE, SupplyBox_PickupSounds[random_num(0, sizeof(SupplyBox_PickupSounds) - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) //SupplyBox_GiveItem(Id) engfunc(EngFunc_RemoveEntity, Ent) return FMRES_IGNORED }
public Aim_To2(iEnt, Float:vTargetOrigin[3]) { if(!pev_valid(iEnt)) return static Float:Vec[3], Float:Angles[3] pev(iEnt, pev_origin, Vec) Vec[0] = vTargetOrigin[0] - Vec[0] Vec[1] = vTargetOrigin[1] - Vec[1] Vec[2] = vTargetOrigin[2] - Vec[2] engfunc(EngFunc_VecToAngles, Vec, Angles) //Angles[0] = Angles[2] = 0.0 set_pev(iEnt, pev_v_angle, Angles) set_pev(iEnt, pev_angles, Angles) }
public Set_EntAnim(ent, anim, Float:framerate, resetframe) { if(!pev_valid(ent)) return if(!resetframe) { if(pev(ent, pev_sequence) != anim) { set_pev(ent, pev_animtime, get_gametime()) set_pev(ent, pev_framerate, framerate) set_pev(ent, pev_sequence, anim) } } else { set_pev(ent, pev_animtime, get_gametime()) set_pev(ent, pev_framerate, framerate) set_pev(ent, pev_sequence, anim) } }
public hook_ent2(ent, Float:VicOrigin[3], Float:speed) { if(!pev_valid(ent)) return static Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_f, Float:fl_Time pev(ent, pev_origin, EntOrigin) distance_f = get_distance_f(EntOrigin, VicOrigin) fl_Time = distance_f / speed fl_Velocity[0] = (VicOrigin[0] - EntOrigin[0]) / fl_Time fl_Velocity[1] = (VicOrigin[1] - EntOrigin[1]) / fl_Time fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time
set_pev(ent, pev_velocity, fl_Velocity) }
public PlaySound(id, const sound[]) { if(equal(sound[strlen(sound)-4], ".mp3")) client_cmd(id, "mp3 play ^"sound/%s^"", sound) else client_cmd(id, "spk ^"%s^"", sound) }
//###################################################################### // SPAWNS POINTS //###################################################################### // ===================== SPAWN MAIN MENU ===================== public spawn_main(id) { // create menu new title[64], item_name[5][64] format(title, charsmax(title), "[AirSupply] Spawn Editor (%i/%i)", g_total_spawns, MAX_SPAWNS) format(item_name[0], 63, "Add Path") format(item_name[2], 63, "Save Path") //format(item_name[3], 63, "Load Path") //format(item_name[4], 63, "Delete Path")
new mHandleID = menu_create(title, "spawn_main_handler") menu_additem(mHandleID, item_name[0], "add", 0) menu_additem(mHandleID, item_name[2], "save", 0) //menu_additem(mHandleID, item_name[3], "load", 0) //menu_additem(mHandleID, item_name[4], "del", 0) menu_display(id, mHandleID, 0) } public spawn_main_handler(id, menu, item) { if (item == MENU_EXIT) { // destroy menu menu_destroy(menu) // show menu main return; } new itemid[32], itemname[32], access menu_item_getinfo(menu, item, access, itemid, charsmax(itemid), itemname, charsmax(itemname), access) menu_destroy(menu) if (equal(itemid, "add")) { spawn_create(id) return; } else if (equal(itemid, "save")) spawn_save() //else if (equal(itemid, "load")) spawn_load() //else if (equal(itemid, "del")) spawn_del(1) // show main menu spawn_main(id) }
// ===================== spawn create ===================== public spawn_create(id) { // create menu new title[64], item_name[3][64] format(title, charsmax(title), "[AirSupply] Path Adding (%i/%i)", g_total_spawns, MAX_SPAWNS) format(item_name[0], 63, "Add Start") format(item_name[1], 63, "Add End") //format(item_name[2], 63, "Delete")
new mHandleID = menu_create(title, "spawn_create_handler") menu_additem(mHandleID, item_name[0], "add", 0) menu_additem(mHandleID, item_name[1], "add_boss", 0) //menu_additem(mHandleID, item_name[2], "del", 0) menu_display(id, mHandleID, 0) } public spawn_create_handler(id, menu, item) { if (item == MENU_EXIT) { // destroy menu menu_destroy(menu) // show menu main spawn_main(id) return; } new itemid[32], itemname[32], access menu_item_getinfo(menu, item, access, itemid, charsmax(itemid), itemname, charsmax(itemname), access) menu_destroy(menu)
if (equali(itemid, "add")) spawn_create_add(id) else if (equali(itemid, "add_boss")) spawn_create_add(id, 1) //else if (equali(itemid, "del")) spawn_del()
// return menu create spawns spawn_create(id) return; } spawn_create_add(id, end=0) { // check max points if (g_total_spawns>=MAX_SPAWNS) { new message[128] format(message, charsmax(message), ">x04[AirSupply] >x01Max spawn = %i", MAX_SPAWNS) color_saytext(id, message) return; } // add current points new Float:originF[3], origin[3] pev(id, pev_origin, originF) origin[0] = floatround(originF[0]) origin[1] = floatround(originF[1]) origin[2] = floatround(originF[2]) if (!is_point(origin) || !spawn_check_dist(originF)) { new message[128] format(message, charsmax(message), ">x04[AirSupply] >x01Too closer...") color_saytext(id, message) return; } if(!end) { g_spawns[g_total_spawns][0] = origin[0] g_spawns[g_total_spawns][1] = origin[1] g_spawns[g_total_spawns][2] = origin[2] } else { g_spawns2[g_total_spawns][0] = origin[0] g_spawns2[g_total_spawns][1] = origin[1] g_spawns2[g_total_spawns][2] = origin[2] g_total_spawns ++ } }
// ===================== spawn save ===================== spawn_save() { // check total if (!g_total_spawns) { new message[128] format(message, charsmax(message), ">x04[AirSupply] >x01No spawn found") color_saytext(0, message) return; }
// get url file new cfgdir[32], mapname[32], urlfile[64] get_configsdir(cfgdir, charsmax(cfgdir)) get_mapname(mapname, charsmax(mapname)) formatex(urlfile, charsmax(urlfile), SPAWNS_URL, cfgdir, mapname)
// save file if (file_exists(urlfile)) delete_file(urlfile) new lineset[128] for (new i=0; i<g_total_spawns; i++) { if (!g_spawns[i][0] && !g_spawns[i][1] && !g_spawns[i][2] && !g_spawns2[i][0] && !g_spawns2[i][1] && !g_spawns2[i][2]) break; format(lineset, charsmax(lineset), "%i %i %i %i %i %i", g_spawns[i][0], g_spawns[i][1], g_spawns[i][2], g_spawns2[i][0], g_spawns2[i][1], g_spawns2[i][2]) write_file(urlfile, lineset, i) } // show notice new message[128] format(message, charsmax(message), ">x04[AirSupply] >x01Save Completed") color_saytext(0, message) }
// ===================== spawn load ===================== spawn_load() { // Check for spawns points of the current map new cfgdir[32], mapname[32], filepath[100], linedata[64], point[6], smallpoint[3] get_configsdir(cfgdir, charsmax(cfgdir)) get_mapname(mapname, charsmax(mapname)) formatex(filepath, charsmax(filepath), SPAWNS_URL, cfgdir, mapname) // check file exit if (!file_exists(filepath)) { //new message[128] //format(message, charsmax(message), ">x04[AirSupply] >x01File doesnt exist (%s)", filepath) //color_saytext(0, message) return; } // first reset value reset_spawn() // Load spawns points new file = fopen(filepath,"rt"), row[6][6] while (file && !feof(file)) { fgets(file, linedata, charsmax(linedata)) // invalid spawn if(!linedata[0] || str_count(linedata,' ') < 2) continue; // get spawn point data parse(linedata,row[0],5,row[1],5,row[2],5,row[3],5,row[4],5,row[5],5) // set spawnst point[0] = smallpoint[0] = str_to_num(row[0]) point[1] = smallpoint[1] = str_to_num(row[1]) point[2] = smallpoint[2] = str_to_num(row[2]) point[3] = str_to_num(row[3]) point[4] = str_to_num(row[4]) point[5] = str_to_num(row[5]) if (is_point(smallpoint)) { g_spawns[g_total_spawns][0] = point[0] g_spawns[g_total_spawns][1] = point[1] g_spawns[g_total_spawns][2] = point[2] g_spawns2[g_total_spawns][0] = point[3] g_spawns2[g_total_spawns][1] = point[4] g_spawns2[g_total_spawns][2] = point[5] // increase spawn count g_total_spawns ++ if (g_total_spawns>=MAX_SPAWNS) break; } } if (file) fclose(file) // notice if (g_total_spawns) { //new message[128] //format(message, charsmax(message), ">x04[AirSupply] >x01Load Completed (%i)", g_total_spawns) //color_saytext(0, message) } }
// ===================== other function ===================== spawn_check_dist(Float:origin[3], point=-1) { new Float:originE[3], Float:origin1[3], Float:origin2[3] for (new i=0; i<g_total_spawns; i++) { if (i==point) continue; originE[0] = float(g_spawns[i][0]) originE[1] = float(g_spawns[i][1]) originE[2] = float(g_spawns[i][2]) // xoy origin1 = origin origin2 = originE origin1[2] = origin2[2] = 0.0 if (vector_distance(origin1, origin2)<=2*16.0) { // oz origin1 = origin origin2 = originE origin1[0] = origin2[0] = origin1[1] = origin2[1] = 0.0 if (vector_distance(origin1, origin2)<=100.0) return 0; } }
return 1; }
color_saytext(player, const message[], any:...) { new text[256] format(text, charsmax(text), "%s",message) format(text, charsmax(text), "%s",check_text(text)) new dest if (player) dest = MSG_ONE else dest = MSG_ALL message_begin(dest, get_user_msgid("SayText"), {0,0,0}, player) write_byte(1) write_string(text) message_end() }
is_point(point[3]) { if (!point[0] && !point[1] && !point[2]) return 0 return 1 }
reset_spawn(t=0) { for (new s=0; s<MAX_SPAWNS; s++) { for (new i=0; i<3; i++) { g_spawns[s][i] = 0 } } if (!t) g_total_spawns = 0 }
check_text(text1[]) { new text[256] format(text, charsmax(text), "%s", text1) replace_all(text, charsmax(text), ">x04", "^x04") replace_all(text, charsmax(text), ">x03", "^x03") replace_all(text, charsmax(text), ">x01", "^x01")
return text }
str_count(const str[], searchchar) { new count, i, len = strlen(str) for (i = 0; i <= len; i++) { if(str[i] == searchchar) count++ } return count; }
In this code appears this section when you touch the box, the box gives you items.
PHP Code:
public fw_Supplybox_Touch(Ent, id) { if(!pev_valid(Ent)) return FMRES_IGNORED if(!is_user_alive(id) || !(cs_get_user_team(id) & SUPPLYBOX_TEAM)) return FMRES_IGNORED
// Effect & Sound //emit_sound(Id, CHAN_VOICE, SupplyBox_PickupSounds[random_num(0, sizeof(SupplyBox_PickupSounds) - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) SupplyBox_GiveItem(Id) engfunc(EngFunc_RemoveEntity, Ent) return FMRES_IGNORED }
When the box is touched i want to give only one deagle and only one awp.
Ty in advance.
Last edited by renegade924; 05-10-2018 at 08:01.
|
|