⭐🚀 TkyNET | Blacklist ve Profesyonel DDoS Korumalı TeamSpeak 3 Sunucuları 🚀⭐
Sponsor Görsel
🇹🇷 TR Lokasyon | 🛡️ Gelişmiş DDoS Koruması | ⚡ Düşük Ping | 🎧 Kesintisiz TS3 | Hostlar
Sponsor Görsel 2
SponsorSponsor

Konu

#11
(05-01-2025, 18:21)Lynchk Adlı Kullanıcıdan Alıntı: Deneyin;
PHP Kod:
#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(PLUGINVERSIONAUTHOR)
    
    
register_think(AIRPLANE_CLASSNAME"fw_Airplane_Think")
    
register_think(SUPPLYBOX_CLASSNAME"fw_Supplybox_Think")
    
register_touch(SUPPLYBOX_CLASSNAME"*""fw_Supplybox_Touch")

    
register_event("HLTV""RoundRestart""a""1=0""2=0");
    
    
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) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
spawn_main(id)
    }
}

public 
Spawn_Editor_NoClip(id)
{
    if(!
is_user_alive(id) || ~get_user_flags(id) & ADMIN_RCON)
        return
        
    if(!
get_user_noclip(id)) set_user_noclip(id1)
    else 
set_user_noclip(id0)
}

public 
RoundRestart() {
    
AirSupply_Clear() // Usually called in 'New Round' Event
    
Airplane_Appear() // Call whenever you want the packages
}

public 
Test(id) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
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(0Airplane_Sound)
    
set_task(3.5"Create_Airplane"TASK_AIRPLANE)
}

public 
Create_Airplane()
{
    if(!
g_total_spawns) return
    
    static 
RandomRandom random(g_total_spawns)
    static 
Float:Start[3]; IVecFVec(g_spawns[Random], Start)
    static 
Float:Target[3]; IVecFVec(g_spawns2[Random], Target)
    
    static 
AirplaneAirplane create_entity("info_target")
        
    
set_pev(Airplanepev_classnameAIRPLANE_CLASSNAME)
    
engfunc(EngFunc_SetModelAirplaneAIRPLANE_MODEL)
    
engfunc(EngFunc_SetSizeAirplaneFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
    
    
set_pev(Airplanepev_solidSOLID_TRIGGER)
    
set_pev(Airplanepev_movetypeMOVETYPE_FLY)
    
set_pev(Airplanepev_iuser1Random)
    
    
engfunc(EngFunc_SetOriginAirplaneStart)
    
    
set_pev(Airplanepev_rendermodekRenderTransAlpha)
    
set_pev(Airplanepev_renderfxkRenderFxNone)
    
set_pev(Airplanepev_renderamt0.0)
    
    
set_pev(Airplanepev_vuser1Start)
    
set_pev(Airplanepev_vuser2Target)
    
    
Aim_To2(AirplaneTarget)
    
Set_EntAnim(Airplane11.00)
    
set_pev(Airplanepev_fuser2random_float(0.10.5))
    
    
set_pev(Airplanepev_nextthinkget_gametime() + 0.1)
}

public 
fw_Airplane_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Start[3], Float:End[3], Float:Now[3]
    
    
pev(Entpev_vuser1Start)
    
pev(Entpev_vuser2End)
    
pev(Entpev_originNow)
    
    if(
get_distance_f(StartNow) < 360.0)
    {
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 250.0
        {
            
RenderAmt += 17.5
            
if(RenderAmt 250.0RenderAmt 255.0
            
            set_pev
(Entpev_renderamtRenderAmt)
        }
    }
    
    if(
get_distance_f(NowEnd) > 360.0)
    {
        
hook_ent2(EntEnd2000.0)
    } else {
        
hook_ent2(EntEnd1000.0)
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 0.0
        {
            
RenderAmt -= 10.0
            
if(RenderAmt 0.0RenderAmt 0.0
            set_pev
(Entpev_renderamtRenderAmt)
        } else {
            
remove_entity(Ent)
            return
        }
    }
    
    static 
Float:Timepev(Entpev_fuser1Time)
    static 
Float:Delaypev(Entpev_fuser2Delay)
    if(
get_gametime() - Delay Time)
    {
        
Create_Supplybox(Now)
        
        
Time get_gametime()
        
        
set_pev(Entpev_fuser1Time)
        
set_pev(Entpev_fuser2random_float(0.10.4))
    }
        
    
set_pev(Entpev_nextthinkget_gametime() + 0.01)
}

public 
Create_Supplybox(Float:Origin[3])
{
    static 
SupplySupply create_entity("info_target")
        
    
set_pev(Supplypev_classnameSUPPLYBOX_CLASSNAME)
    
engfunc(EngFunc_SetModelSupplySUPPLY_MODEL)

    
engfunc(EngFunc_SetSizeSupplyFloat:{-3.0,-3.0,-3.0}, Float:{3.0,3.0,3.0})
    
    
set_pev(Supplypev_solidSOLID_TRIGGER)
    
set_pev(Supplypev_movetypeMOVETYPE_TOSS)
    
set_pev(Supplypev_angles, {90.00.00.0})
    
set_pev(Supplypev_gravity0.5)
    
    static 
Float:Velocity[3]
    
Velocity[0] = random_float(-100.0100.0)
    
Velocity[1] = random_float(-100.0100.0)

    
engfunc(EngFunc_SetOriginSupplyOrigin)
    
set_pev(Supplypev_velocityVelocity)
    
Set_EntAnim(Supply01.00)
    
    
set_pev(Supplypev_nextthinkget_gametime() + 0.01)
}

public 
fw_Supplybox_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Velocity[3]; pev(Entpev_velocityVelocity)
    if(!
vector_length(Velocity))
    {
        
pev(Entpev_anglesVelocity)
        if(
Velocity[0] > 0.0)
        {
            
Velocity[0] -= 10.0
            
if(Velocity[0] < 0.0
            {
                
Velocity[0] = 0.0
            
}
            
            
set_pev(Entpev_anglesVelocity)
            if(!
Velocity[0]) engfunc(EngFunc_SetModelEntPACKAGE_MODEL)
        }
    }
    
    
set_pev(Entpev_nextthinkget_gametime() + 0.1)
}

public 
fw_Supplybox_Touch(Entid)
{
    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_RemoveEntityEnt)
    
    return 
FMRES_IGNORED
}

public 
SupplyBox_GiveItem(const id)
{
    new iRandomNum random_num(120);

    switch(iRandomNum)
    {
        case 1give_item(id"weapon_ak47");
        case 2give_item(id"weapon_m4a1");
        case 3give_item(id"weapon_awp");
        case 4give_item(id"weapon_deagle");
        case 5give_item(id"weapon_usp");
        case 6set_user_health(idget_user_health(id) + 25);
        case 7set_user_health(idget_user_health(id) + 50);
        case 8cs_set_user_armor(idcs_get_user_armor(id) + 50CS_ARMOR_VESTHELM);
        case 9cs_set_user_armor(idcs_get_user_armor(id) + 100CS_ARMOR_VESTHELM);
        case 10set_user_gravity(id0.5);
        case 11set_user_gravity(id1.5);
        case 12set_user_maxspeed(id1.2);
        case 13set_user_maxspeed(id0.8);
        case 14give_item(id"weapon_scout");
        case 15give_item(id"weapon_mp5navy");
        case 16give_item(id"weapon_p90");
        case 17give_item(id"weapon_galil");
        case 18give_item(id"weapon_famas");
        case 19give_item(id"weapon_hegrenade");
        case 20give_item(id"weapon_flashbang");
    }
}

public 
Aim_To2(iEntFloat:vTargetOrigin[3])
{
    if(!
pev_valid(iEnt))    
        return
        
    static 
Float:Vec[3], Float:Angles[3]
    
pev(iEntpev_originVec)
    
    
Vec[0] = vTargetOrigin[0] - Vec[0]
    
Vec[1] = vTargetOrigin[1] - Vec[1]
    
Vec[2] = vTargetOrigin[2] - Vec[2]
    
engfunc(EngFunc_VecToAnglesVecAngles)
    
//Angles[0] = Angles[2] = 0.0 
    
    
set_pev(iEntpev_v_angleAngles)
    
set_pev(iEntpev_anglesAngles)
}

public 
Set_EntAnim(entanimFloat:framerateresetframe)
{
    if(!
pev_valid(ent))
        return
    
    if(!
resetframe)
    {
        if(
pev(entpev_sequence) != anim)
        {
            
set_pev(entpev_animtimeget_gametime())
            
set_pev(entpev_framerateframerate)
            
set_pev(entpev_sequenceanim)
        }
    } else {
        
set_pev(entpev_animtimeget_gametime())
        
set_pev(entpev_framerateframerate)
        
set_pev(entpev_sequenceanim)
    }
}

public 
hook_ent2(entFloat:VicOrigin[3], Float:speed)
{
    if(!
pev_valid(ent))
        return
    
    static 
Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_fFloat:fl_Time
    
    pev
(entpev_originEntOrigin)
    
    
distance_f get_distance_f(EntOriginVicOrigin)
    
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
(entpev_velocityfl_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(titlecharsmax(title), "[AirSupply] Spawn Editor (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[2], "save"0)
    
//menu_additem(mHandleID, item_name[3], "load", 0)
    //menu_additem(mHandleID, item_name[4], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_main_handler(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
// destroy menu
        
menu_destroy(menu)
        
// show menu main
        
return;
    }
    
    new 
itemid[32], itemname[32], access
    menu_item_getinfo
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(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(titlecharsmax(title), "[AirSupply] Path Adding (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[1], "add_boss"0)
    
//menu_additem(mHandleID, item_name[2], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_create_handler(idmenuitem)
{
    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
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(itemname), access)
    
menu_destroy(menu)

    if (
equali(itemid"add")) spawn_create_add(id)
    else if (
equali(itemid"add_boss")) spawn_create_add(id1)
    
//else if (equali(itemid, "del")) spawn_del()

    // return menu create spawns
    
spawn_create(id)
    
    return;
}
spawn_create_add(idend=0)
{
    
// check max points
    
if (g_total_spawns>=MAX_SPAWNS)
    {
        new 
message[128]
        
format(messagecharsmax(message), ">x04[AirSupply] >x01Max spawn = %i"MAX_SPAWNS)
        
color_saytext(idmessage)
        return;
    }
    
    
// add current points
    
new Float:originF[3], origin[3]
    
pev(idpev_originoriginF)
    
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(messagecharsmax(message), ">x04[AirSupply] >x01Too closer...")
        
color_saytext(idmessage)
        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(messagecharsmax(message), ">x04[AirSupply] >x01No spawn found")
        
color_saytext(0message)
        return;
    }

    
// get url file
    
new cfgdir[32], mapname[32], urlfile[64]
    
get_configsdir(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(urlfilecharsmax(urlfile), SPAWNS_URLcfgdirmapname)

    
// save file
    
if (file_exists(urlfile)) delete_file(urlfile)
    new 
lineset[128]
    for (new 
i=0i<g_total_spawnsi++)
    {
        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(linesetcharsmax(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(urlfilelineseti)
    }
    
    
// show notice
    
new message[128]
    
format(messagecharsmax(message), ">x04[AirSupply] >x01Save Completed")
    
color_saytext(0message)
}

// ===================== 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(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(filepathcharsmax(filepath), SPAWNS_URLcfgdirmapname)
    
    
// 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(filelinedatacharsmax(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 (
filefclose(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=0i<g_total_spawnsi++)
    {
        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(origin1origin2)<=2*16.0)
        {
            
// oz
            
origin1 origin
            origin2 
originE
            origin1
[0] = origin2[0] = origin1[1] = origin2[1] = 0.0
            
if (vector_distance(origin1origin2)<=100.0) return 0;
        }
    }

    return 
1;
}

color_saytext(player, const message[], any:...)
{
    new 
text[256]
    
format(textcharsmax(text), "%s",message)
    
format(textcharsmax(text), "%s",check_text(text))
    
    new 
dest
    
if (playerdest MSG_ONE
    
else dest MSG_ALL
    
    message_begin
(destget_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=0s<MAX_SPAWNSs++)
    {
        for (new 
i=0i<3i++)
        {
            
g_spawns[s][i] = 0
        
}
    }
    if (!
tg_total_spawns 0
}

check_text(text1[])
{
    new 
text[256]
    
format(textcharsmax(text), "%s"text1)
    
    
replace_all(textcharsmax(text), ">x04""^x04")
    
replace_all(textcharsmax(text), ">x03""^x03")
    
replace_all(textcharsmax(text), ">x01""^x01")

    return 
text
}

str_count(const str[], searchchar)
{
    new 
countilen strlen(str)
    
    for (
0<= leni++)
    {
        if(
str[i] == searchchar)
            
count++
    }
    
    return 
count;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
*/ 
eline koluna sağlık seni de çok yordum ama bunu biraz zamanlayamıyomuyuz böyle el başladıktan 10 15 sn sonra aktif olsa ? +olarak birde kutuları azaltma şansın varmı hocam ya
Son Düzenleme: 05-01-2025, 18:48, Düzenleyen: PlateN1453.
#12
Deneyin;
PHP Kod:
#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(PLUGINVERSIONAUTHOR)
    
    
register_think(AIRPLANE_CLASSNAME"fw_Airplane_Think")
    
register_think(SUPPLYBOX_CLASSNAME"fw_Supplybox_Think")
    
register_touch(SUPPLYBOX_CLASSNAME"*""fw_Supplybox_Touch")

    
register_event("HLTV""RoundRestart""a""1=0""2=0");
    
    
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) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
spawn_main(id)
    }
}

public 
Spawn_Editor_NoClip(id)
{
    if(!
is_user_alive(id) || ~get_user_flags(id) & ADMIN_RCON)
        return
        
    if(!
get_user_noclip(id)) set_user_noclip(id1)
    else 
set_user_noclip(id0)
}

public 
RoundRestart() {
    
remove_task();
    
set_task(15.0"AirSupplyStart");
}

public 
AirSupplyStart() {
    
AirSupply_Clear() // Usually called in 'New Round' Event
    
Airplane_Appear() // Call whenever you want the packages
}

public 
Test(id) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
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(0Airplane_Sound)
    
set_task(3.5"Create_Airplane"TASK_AIRPLANE)
}

public 
Create_Airplane()
{
    if(!
g_total_spawns) return
    
    static 
RandomRandom random(g_total_spawns)
    static 
Float:Start[3]; IVecFVec(g_spawns[Random], Start)
    static 
Float:Target[3]; IVecFVec(g_spawns2[Random], Target)
    
    static 
AirplaneAirplane create_entity("info_target")
        
    
set_pev(Airplanepev_classnameAIRPLANE_CLASSNAME)
    
engfunc(EngFunc_SetModelAirplaneAIRPLANE_MODEL)
    
engfunc(EngFunc_SetSizeAirplaneFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
    
    
set_pev(Airplanepev_solidSOLID_TRIGGER)
    
set_pev(Airplanepev_movetypeMOVETYPE_FLY)
    
set_pev(Airplanepev_iuser1Random)
    
    
engfunc(EngFunc_SetOriginAirplaneStart)
    
    
set_pev(Airplanepev_rendermodekRenderTransAlpha)
    
set_pev(Airplanepev_renderfxkRenderFxNone)
    
set_pev(Airplanepev_renderamt0.0)
    
    
set_pev(Airplanepev_vuser1Start)
    
set_pev(Airplanepev_vuser2Target)
    
    
Aim_To2(AirplaneTarget)
    
Set_EntAnim(Airplane11.00)
    
set_pev(Airplanepev_fuser2random_float(0.10.5))
    
    
set_pev(Airplanepev_nextthinkget_gametime() + 0.1)
}

public 
fw_Airplane_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Start[3], Float:End[3], Float:Now[3]
    
    
pev(Entpev_vuser1Start)
    
pev(Entpev_vuser2End)
    
pev(Entpev_originNow)
    
    if(
get_distance_f(StartNow) < 360.0)
    {
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 250.0
        {
            
RenderAmt += 17.5
            
if(RenderAmt 250.0RenderAmt 255.0
            
            set_pev
(Entpev_renderamtRenderAmt)
        }
    }
    
    if(
get_distance_f(NowEnd) > 360.0)
    {
        
hook_ent2(EntEnd2000.0)
    } else {
        
hook_ent2(EntEnd1000.0)
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 0.0
        {
            
RenderAmt -= 10.0
            
if(RenderAmt 0.0RenderAmt 0.0
            set_pev
(Entpev_renderamtRenderAmt)
        } else {
            
remove_entity(Ent)
            return
        }
    }
    
    static 
Float:Timepev(Entpev_fuser1Time)
    static 
Float:Delaypev(Entpev_fuser2Delay)
    if(
get_gametime() - Delay Time)
    {
        
Create_Supplybox(Now)
        
        
Time get_gametime()
        
        
set_pev(Entpev_fuser1Time)
        
set_pev(Entpev_fuser2random_float(1.02.0))
    }
        
    
set_pev(Entpev_nextthinkget_gametime() + 0.01)
}

public 
Create_Supplybox(Float:Origin[3])
{
    static 
SupplySupply create_entity("info_target")
        
    
set_pev(Supplypev_classnameSUPPLYBOX_CLASSNAME)
    
engfunc(EngFunc_SetModelSupplySUPPLY_MODEL)

    
engfunc(EngFunc_SetSizeSupplyFloat:{-3.0,-3.0,-3.0}, Float:{3.0,3.0,3.0})
    
    
set_pev(Supplypev_solidSOLID_TRIGGER)
    
set_pev(Supplypev_movetypeMOVETYPE_TOSS)
    
set_pev(Supplypev_angles, {90.00.00.0})
    
set_pev(Supplypev_gravity0.5)
    
    static 
Float:Velocity[3]
    
Velocity[0] = random_float(-100.0100.0)
    
Velocity[1] = random_float(-100.0100.0)

    
engfunc(EngFunc_SetOriginSupplyOrigin)
    
set_pev(Supplypev_velocityVelocity)
    
Set_EntAnim(Supply01.00)
    
    
set_pev(Supplypev_nextthinkget_gametime() + 0.01)
}

public 
fw_Supplybox_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Velocity[3]; pev(Entpev_velocityVelocity)
    if(!
vector_length(Velocity))
    {
        
pev(Entpev_anglesVelocity)
        if(
Velocity[0] > 0.0)
        {
            
Velocity[0] -= 10.0
            
if(Velocity[0] < 0.0
            {
                
Velocity[0] = 0.0
            
}
            
            
set_pev(Entpev_anglesVelocity)
            if(!
Velocity[0]) engfunc(EngFunc_SetModelEntPACKAGE_MODEL)
        }
    }
    
    
set_pev(Entpev_nextthinkget_gametime() + 0.1)
}

public 
fw_Supplybox_Touch(Entid)
{
    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_RemoveEntityEnt)
    
    return 
FMRES_IGNORED
}

public 
SupplyBox_GiveItem(const id)
{
    new iRandomNum random_num(120);

    switch(iRandomNum)
    {
        case 1give_item(id"weapon_ak47");
        case 2give_item(id"weapon_m4a1");
        case 3give_item(id"weapon_awp");
        case 4give_item(id"weapon_deagle");
        case 5give_item(id"weapon_usp");
        case 6set_user_health(idget_user_health(id) + 25);
        case 7set_user_health(idget_user_health(id) + 50);
        case 8cs_set_user_armor(idcs_get_user_armor(id) + 50CS_ARMOR_VESTHELM);
        case 9cs_set_user_armor(idcs_get_user_armor(id) + 100CS_ARMOR_VESTHELM);
        case 10set_user_gravity(id0.5);
        case 11set_user_gravity(id1.5);
        case 12set_user_maxspeed(id1.2);
        case 13set_user_maxspeed(id0.8);
        case 14give_item(id"weapon_scout");
        case 15give_item(id"weapon_mp5navy");
        case 16give_item(id"weapon_p90");
        case 17give_item(id"weapon_galil");
        case 18give_item(id"weapon_famas");
        case 19give_item(id"weapon_hegrenade");
        case 20give_item(id"weapon_flashbang");
    }
}

public 
Aim_To2(iEntFloat:vTargetOrigin[3])
{
    if(!
pev_valid(iEnt))    
        return
        
    static 
Float:Vec[3], Float:Angles[3]
    
pev(iEntpev_originVec)
    
    
Vec[0] = vTargetOrigin[0] - Vec[0]
    
Vec[1] = vTargetOrigin[1] - Vec[1]
    
Vec[2] = vTargetOrigin[2] - Vec[2]
    
engfunc(EngFunc_VecToAnglesVecAngles)
    
//Angles[0] = Angles[2] = 0.0 
    
    
set_pev(iEntpev_v_angleAngles)
    
set_pev(iEntpev_anglesAngles)
}

public 
Set_EntAnim(entanimFloat:framerateresetframe)
{
    if(!
pev_valid(ent))
        return
    
    if(!
resetframe)
    {
        if(
pev(entpev_sequence) != anim)
        {
            
set_pev(entpev_animtimeget_gametime())
            
set_pev(entpev_framerateframerate)
            
set_pev(entpev_sequenceanim)
        }
    } else {
        
set_pev(entpev_animtimeget_gametime())
        
set_pev(entpev_framerateframerate)
        
set_pev(entpev_sequenceanim)
    }
}

public 
hook_ent2(entFloat:VicOrigin[3], Float:speed)
{
    if(!
pev_valid(ent))
        return
    
    static 
Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_fFloat:fl_Time
    
    pev
(entpev_originEntOrigin)
    
    
distance_f get_distance_f(EntOriginVicOrigin)
    
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
(entpev_velocityfl_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(titlecharsmax(title), "[AirSupply] Spawn Editor (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[2], "save"0)
    
//menu_additem(mHandleID, item_name[3], "load", 0)
    //menu_additem(mHandleID, item_name[4], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_main_handler(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
// destroy menu
        
menu_destroy(menu)
        
// show menu main
        
return;
    }
    
    new 
itemid[32], itemname[32], access
    menu_item_getinfo
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(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(titlecharsmax(title), "[AirSupply] Path Adding (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[1], "add_boss"0)
    
//menu_additem(mHandleID, item_name[2], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_create_handler(idmenuitem)
{
    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
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(itemname), access)
    
menu_destroy(menu)

    if (
equali(itemid"add")) spawn_create_add(id)
    else if (
equali(itemid"add_boss")) spawn_create_add(id1)
    
//else if (equali(itemid, "del")) spawn_del()

    // return menu create spawns
    
spawn_create(id)
    
    return;
}
spawn_create_add(idend=0)
{
    
// check max points
    
if (g_total_spawns>=MAX_SPAWNS)
    {
        new 
message[128]
        
format(messagecharsmax(message), ">x04[AirSupply] >x01Max spawn = %i"MAX_SPAWNS)
        
color_saytext(idmessage)
        return;
    }
    
    
// add current points
    
new Float:originF[3], origin[3]
    
pev(idpev_originoriginF)
    
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(messagecharsmax(message), ">x04[AirSupply] >x01Too closer...")
        
color_saytext(idmessage)
        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(messagecharsmax(message), ">x04[AirSupply] >x01No spawn found")
        
color_saytext(0message)
        return;
    }

    
// get url file
    
new cfgdir[32], mapname[32], urlfile[64]
    
get_configsdir(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(urlfilecharsmax(urlfile), SPAWNS_URLcfgdirmapname)

    
// save file
    
if (file_exists(urlfile)) delete_file(urlfile)
    new 
lineset[128]
    for (new 
i=0i<g_total_spawnsi++)
    {
        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(linesetcharsmax(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(urlfilelineseti)
    }
    
    
// show notice
    
new message[128]
    
format(messagecharsmax(message), ">x04[AirSupply] >x01Save Completed")
    
color_saytext(0message)
}

// ===================== 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(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(filepathcharsmax(filepath), SPAWNS_URLcfgdirmapname)
    
    
// 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(filelinedatacharsmax(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 (
filefclose(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=0i<g_total_spawnsi++)
    {
        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(origin1origin2)<=2*16.0)
        {
            
// oz
            
origin1 origin
            origin2 
originE
            origin1
[0] = origin2[0] = origin1[1] = origin2[1] = 0.0
            
if (vector_distance(origin1origin2)<=100.0) return 0;
        }
    }

    return 
1;
}

color_saytext(player, const message[], any:...)
{
    new 
text[256]
    
format(textcharsmax(text), "%s",message)
    
format(textcharsmax(text), "%s",check_text(text))
    
    new 
dest
    
if (playerdest MSG_ONE
    
else dest MSG_ALL
    
    message_begin
(destget_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=0s<MAX_SPAWNSs++)
    {
        for (new 
i=0i<3i++)
        {
            
g_spawns[s][i] = 0
        
}
    }
    if (!
tg_total_spawns 0
}

check_text(text1[])
{
    new 
text[256]
    
format(textcharsmax(text), "%s"text1)
    
    
replace_all(textcharsmax(text), ">x04""^x04")
    
replace_all(textcharsmax(text), ">x03""^x03")
    
replace_all(textcharsmax(text), ">x01""^x01")

    return 
text
}

str_count(const str[], searchchar)
{
    new 
countilen strlen(str)
    
    for (
0<= leni++)
    {
        if(
str[i] == searchchar)
            
count++
    }
    
    return 
count;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
*/ 
Steam:Tıkla • Discord: lynchk
#13
(05-01-2025, 19:58)Lynchk Adlı Kullanıcıdan Alıntı: Deneyin;
PHP Kod:
#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(PLUGINVERSIONAUTHOR)
    
    
register_think(AIRPLANE_CLASSNAME"fw_Airplane_Think")
    
register_think(SUPPLYBOX_CLASSNAME"fw_Supplybox_Think")
    
register_touch(SUPPLYBOX_CLASSNAME"*""fw_Supplybox_Touch")

    
register_event("HLTV""RoundRestart""a""1=0""2=0");
    
    
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) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
spawn_main(id)
    }
}

public 
Spawn_Editor_NoClip(id)
{
    if(!
is_user_alive(id) || ~get_user_flags(id) & ADMIN_RCON)
        return
        
    if(!
get_user_noclip(id)) set_user_noclip(id1)
    else 
set_user_noclip(id0)
}

public 
RoundRestart() {
    
remove_task();
    
set_task(15.0"AirSupplyStart");
}

public 
AirSupplyStart() {
    
AirSupply_Clear() // Usually called in 'New Round' Event
    
Airplane_Appear() // Call whenever you want the packages
}

public 
Test(id) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
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(0Airplane_Sound)
    
set_task(3.5"Create_Airplane"TASK_AIRPLANE)
}

public 
Create_Airplane()
{
    if(!
g_total_spawns) return
    
    static 
RandomRandom random(g_total_spawns)
    static 
Float:Start[3]; IVecFVec(g_spawns[Random], Start)
    static 
Float:Target[3]; IVecFVec(g_spawns2[Random], Target)
    
    static 
AirplaneAirplane create_entity("info_target")
        
    
set_pev(Airplanepev_classnameAIRPLANE_CLASSNAME)
    
engfunc(EngFunc_SetModelAirplaneAIRPLANE_MODEL)
    
engfunc(EngFunc_SetSizeAirplaneFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
    
    
set_pev(Airplanepev_solidSOLID_TRIGGER)
    
set_pev(Airplanepev_movetypeMOVETYPE_FLY)
    
set_pev(Airplanepev_iuser1Random)
    
    
engfunc(EngFunc_SetOriginAirplaneStart)
    
    
set_pev(Airplanepev_rendermodekRenderTransAlpha)
    
set_pev(Airplanepev_renderfxkRenderFxNone)
    
set_pev(Airplanepev_renderamt0.0)
    
    
set_pev(Airplanepev_vuser1Start)
    
set_pev(Airplanepev_vuser2Target)
    
    
Aim_To2(AirplaneTarget)
    
Set_EntAnim(Airplane11.00)
    
set_pev(Airplanepev_fuser2random_float(0.10.5))
    
    
set_pev(Airplanepev_nextthinkget_gametime() + 0.1)
}

public 
fw_Airplane_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Start[3], Float:End[3], Float:Now[3]
    
    
pev(Entpev_vuser1Start)
    
pev(Entpev_vuser2End)
    
pev(Entpev_originNow)
    
    if(
get_distance_f(StartNow) < 360.0)
    {
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 250.0
        {
            
RenderAmt += 17.5
            
if(RenderAmt 250.0RenderAmt 255.0
            
            set_pev
(Entpev_renderamtRenderAmt)
        }
    }
    
    if(
get_distance_f(NowEnd) > 360.0)
    {
        
hook_ent2(EntEnd2000.0)
    } else {
        
hook_ent2(EntEnd1000.0)
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 0.0
        {
            
RenderAmt -= 10.0
            
if(RenderAmt 0.0RenderAmt 0.0
            set_pev
(Entpev_renderamtRenderAmt)
        } else {
            
remove_entity(Ent)
            return
        }
    }
    
    static 
Float:Timepev(Entpev_fuser1Time)
    static 
Float:Delaypev(Entpev_fuser2Delay)
    if(
get_gametime() - Delay Time)
    {
        
Create_Supplybox(Now)
        
        
Time get_gametime()
        
        
set_pev(Entpev_fuser1Time)
        
set_pev(Entpev_fuser2random_float(1.02.0))
    }
        
    
set_pev(Entpev_nextthinkget_gametime() + 0.01)
}

public 
Create_Supplybox(Float:Origin[3])
{
    static 
SupplySupply create_entity("info_target")
        
    
set_pev(Supplypev_classnameSUPPLYBOX_CLASSNAME)
    
engfunc(EngFunc_SetModelSupplySUPPLY_MODEL)

    
engfunc(EngFunc_SetSizeSupplyFloat:{-3.0,-3.0,-3.0}, Float:{3.0,3.0,3.0})
    
    
set_pev(Supplypev_solidSOLID_TRIGGER)
    
set_pev(Supplypev_movetypeMOVETYPE_TOSS)
    
set_pev(Supplypev_angles, {90.00.00.0})
    
set_pev(Supplypev_gravity0.5)
    
    static 
Float:Velocity[3]
    
Velocity[0] = random_float(-100.0100.0)
    
Velocity[1] = random_float(-100.0100.0)

    
engfunc(EngFunc_SetOriginSupplyOrigin)
    
set_pev(Supplypev_velocityVelocity)
    
Set_EntAnim(Supply01.00)
    
    
set_pev(Supplypev_nextthinkget_gametime() + 0.01)
}

public 
fw_Supplybox_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Velocity[3]; pev(Entpev_velocityVelocity)
    if(!
vector_length(Velocity))
    {
        
pev(Entpev_anglesVelocity)
        if(
Velocity[0] > 0.0)
        {
            
Velocity[0] -= 10.0
            
if(Velocity[0] < 0.0
            {
                
Velocity[0] = 0.0
            
}
            
            
set_pev(Entpev_anglesVelocity)
            if(!
Velocity[0]) engfunc(EngFunc_SetModelEntPACKAGE_MODEL)
        }
    }
    
    
set_pev(Entpev_nextthinkget_gametime() + 0.1)
}

public 
fw_Supplybox_Touch(Entid)
{
    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_RemoveEntityEnt)
    
    return 
FMRES_IGNORED
}

public 
SupplyBox_GiveItem(const id)
{
    new iRandomNum random_num(120);

    switch(iRandomNum)
    {
        case 1give_item(id"weapon_ak47");
        case 2give_item(id"weapon_m4a1");
        case 3give_item(id"weapon_awp");
        case 4give_item(id"weapon_deagle");
        case 5give_item(id"weapon_usp");
        case 6set_user_health(idget_user_health(id) + 25);
        case 7set_user_health(idget_user_health(id) + 50);
        case 8cs_set_user_armor(idcs_get_user_armor(id) + 50CS_ARMOR_VESTHELM);
        case 9cs_set_user_armor(idcs_get_user_armor(id) + 100CS_ARMOR_VESTHELM);
        case 10set_user_gravity(id0.5);
        case 11set_user_gravity(id1.5);
        case 12set_user_maxspeed(id1.2);
        case 13set_user_maxspeed(id0.8);
        case 14give_item(id"weapon_scout");
        case 15give_item(id"weapon_mp5navy");
        case 16give_item(id"weapon_p90");
        case 17give_item(id"weapon_galil");
        case 18give_item(id"weapon_famas");
        case 19give_item(id"weapon_hegrenade");
        case 20give_item(id"weapon_flashbang");
    }
}

public 
Aim_To2(iEntFloat:vTargetOrigin[3])
{
    if(!
pev_valid(iEnt))    
        return
        
    static 
Float:Vec[3], Float:Angles[3]
    
pev(iEntpev_originVec)
    
    
Vec[0] = vTargetOrigin[0] - Vec[0]
    
Vec[1] = vTargetOrigin[1] - Vec[1]
    
Vec[2] = vTargetOrigin[2] - Vec[2]
    
engfunc(EngFunc_VecToAnglesVecAngles)
    
//Angles[0] = Angles[2] = 0.0 
    
    
set_pev(iEntpev_v_angleAngles)
    
set_pev(iEntpev_anglesAngles)
}

public 
Set_EntAnim(entanimFloat:framerateresetframe)
{
    if(!
pev_valid(ent))
        return
    
    if(!
resetframe)
    {
        if(
pev(entpev_sequence) != anim)
        {
            
set_pev(entpev_animtimeget_gametime())
            
set_pev(entpev_framerateframerate)
            
set_pev(entpev_sequenceanim)
        }
    } else {
        
set_pev(entpev_animtimeget_gametime())
        
set_pev(entpev_framerateframerate)
        
set_pev(entpev_sequenceanim)
    }
}

public 
hook_ent2(entFloat:VicOrigin[3], Float:speed)
{
    if(!
pev_valid(ent))
        return
    
    static 
Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_fFloat:fl_Time
    
    pev
(entpev_originEntOrigin)
    
    
distance_f get_distance_f(EntOriginVicOrigin)
    
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
(entpev_velocityfl_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(titlecharsmax(title), "[AirSupply] Spawn Editor (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[2], "save"0)
    
//menu_additem(mHandleID, item_name[3], "load", 0)
    //menu_additem(mHandleID, item_name[4], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_main_handler(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
// destroy menu
        
menu_destroy(menu)
        
// show menu main
        
return;
    }
    
    new 
itemid[32], itemname[32], access
    menu_item_getinfo
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(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(titlecharsmax(title), "[AirSupply] Path Adding (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[1], "add_boss"0)
    
//menu_additem(mHandleID, item_name[2], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_create_handler(idmenuitem)
{
    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
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(itemname), access)
    
menu_destroy(menu)

    if (
equali(itemid"add")) spawn_create_add(id)
    else if (
equali(itemid"add_boss")) spawn_create_add(id1)
    
//else if (equali(itemid, "del")) spawn_del()

    // return menu create spawns
    
spawn_create(id)
    
    return;
}
spawn_create_add(idend=0)
{
    
// check max points
    
if (g_total_spawns>=MAX_SPAWNS)
    {
        new 
message[128]
        
format(messagecharsmax(message), ">x04[AirSupply] >x01Max spawn = %i"MAX_SPAWNS)
        
color_saytext(idmessage)
        return;
    }
    
    
// add current points
    
new Float:originF[3], origin[3]
    
pev(idpev_originoriginF)
    
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(messagecharsmax(message), ">x04[AirSupply] >x01Too closer...")
        
color_saytext(idmessage)
        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(messagecharsmax(message), ">x04[AirSupply] >x01No spawn found")
        
color_saytext(0message)
        return;
    }

    
// get url file
    
new cfgdir[32], mapname[32], urlfile[64]
    
get_configsdir(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(urlfilecharsmax(urlfile), SPAWNS_URLcfgdirmapname)

    
// save file
    
if (file_exists(urlfile)) delete_file(urlfile)
    new 
lineset[128]
    for (new 
i=0i<g_total_spawnsi++)
    {
        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(linesetcharsmax(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(urlfilelineseti)
    }
    
    
// show notice
    
new message[128]
    
format(messagecharsmax(message), ">x04[AirSupply] >x01Save Completed")
    
color_saytext(0message)
}

// ===================== 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(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(filepathcharsmax(filepath), SPAWNS_URLcfgdirmapname)
    
    
// 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(filelinedatacharsmax(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 (
filefclose(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=0i<g_total_spawnsi++)
    {
        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(origin1origin2)<=2*16.0)
        {
            
// oz
            
origin1 origin
            origin2 
originE
            origin1
[0] = origin2[0] = origin1[1] = origin2[1] = 0.0
            
if (vector_distance(origin1origin2)<=100.0) return 0;
        }
    }

    return 
1;
}

color_saytext(player, const message[], any:...)
{
    new 
text[256]
    
format(textcharsmax(text), "%s",message)
    
format(textcharsmax(text), "%s",check_text(text))
    
    new 
dest
    
if (playerdest MSG_ONE
    
else dest MSG_ALL
    
    message_begin
(destget_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=0s<MAX_SPAWNSs++)
    {
        for (new 
i=0i<3i++)
        {
            
g_spawns[s][i] = 0
        
}
    }
    if (!
tg_total_spawns 0
}

check_text(text1[])
{
    new 
text[256]
    
format(textcharsmax(text), "%s"text1)
    
    
replace_all(textcharsmax(text), ">x04""^x04")
    
replace_all(textcharsmax(text), ">x03""^x03")
    
replace_all(textcharsmax(text), ">x01""^x01")

    return 
text
}

str_count(const str[], searchchar)
{
    new 
countilen strlen(str)
    
    for (
0<= leni++)
    {
        if(
str[i] == searchchar)
            
count++
    }
    
    return 
count;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
*/ 
abi bu kaydetmiyo serveri değiştirince koordinatlar gidiyo yeniden ayarlamam gerekiyo onu nasıl çözerim ?

(05-01-2025, 20:11)PlateN1453 Adlı Kullanıcıdan Alıntı:
(05-01-2025, 19:58)Lynchk Adlı Kullanıcıdan Alıntı: Deneyin;
PHP Kod:
#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(PLUGINVERSIONAUTHOR)
    
    
register_think(AIRPLANE_CLASSNAME"fw_Airplane_Think")
    
register_think(SUPPLYBOX_CLASSNAME"fw_Supplybox_Think")
    
register_touch(SUPPLYBOX_CLASSNAME"*""fw_Supplybox_Touch")

    
register_event("HLTV""RoundRestart""a""1=0""2=0");
    
    
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) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
spawn_main(id)
    }
}

public 
Spawn_Editor_NoClip(id)
{
    if(!
is_user_alive(id) || ~get_user_flags(id) & ADMIN_RCON)
        return
        
    if(!
get_user_noclip(id)) set_user_noclip(id1)
    else 
set_user_noclip(id0)
}

public 
RoundRestart() {
    
remove_task();
    
set_task(15.0"AirSupplyStart");
}

public 
AirSupplyStart() {
    
AirSupply_Clear() // Usually called in 'New Round' Event
    
Airplane_Appear() // Call whenever you want the packages
}

public 
Test(id) {
    if(
get_user_flags(id) & ADMIN_RCON) {
        
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(0Airplane_Sound)
    
set_task(3.5"Create_Airplane"TASK_AIRPLANE)
}

public 
Create_Airplane()
{
    if(!
g_total_spawns) return
    
    static 
RandomRandom random(g_total_spawns)
    static 
Float:Start[3]; IVecFVec(g_spawns[Random], Start)
    static 
Float:Target[3]; IVecFVec(g_spawns2[Random], Target)
    
    static 
AirplaneAirplane create_entity("info_target")
        
    
set_pev(Airplanepev_classnameAIRPLANE_CLASSNAME)
    
engfunc(EngFunc_SetModelAirplaneAIRPLANE_MODEL)
    
engfunc(EngFunc_SetSizeAirplaneFloat:{-1.0,-1.0,-1.0}, Float:{1.0,1.0,1.0})
    
    
set_pev(Airplanepev_solidSOLID_TRIGGER)
    
set_pev(Airplanepev_movetypeMOVETYPE_FLY)
    
set_pev(Airplanepev_iuser1Random)
    
    
engfunc(EngFunc_SetOriginAirplaneStart)
    
    
set_pev(Airplanepev_rendermodekRenderTransAlpha)
    
set_pev(Airplanepev_renderfxkRenderFxNone)
    
set_pev(Airplanepev_renderamt0.0)
    
    
set_pev(Airplanepev_vuser1Start)
    
set_pev(Airplanepev_vuser2Target)
    
    
Aim_To2(AirplaneTarget)
    
Set_EntAnim(Airplane11.00)
    
set_pev(Airplanepev_fuser2random_float(0.10.5))
    
    
set_pev(Airplanepev_nextthinkget_gametime() + 0.1)
}

public 
fw_Airplane_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Start[3], Float:End[3], Float:Now[3]
    
    
pev(Entpev_vuser1Start)
    
pev(Entpev_vuser2End)
    
pev(Entpev_originNow)
    
    if(
get_distance_f(StartNow) < 360.0)
    {
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 250.0
        {
            
RenderAmt += 17.5
            
if(RenderAmt 250.0RenderAmt 255.0
            
            set_pev
(Entpev_renderamtRenderAmt)
        }
    }
    
    if(
get_distance_f(NowEnd) > 360.0)
    {
        
hook_ent2(EntEnd2000.0)
    } else {
        
hook_ent2(EntEnd1000.0)
        static 
Float:RenderAmtpev(Entpev_renderamtRenderAmt)
        if(
RenderAmt 0.0
        {
            
RenderAmt -= 10.0
            
if(RenderAmt 0.0RenderAmt 0.0
            set_pev
(Entpev_renderamtRenderAmt)
        } else {
            
remove_entity(Ent)
            return
        }
    }
    
    static 
Float:Timepev(Entpev_fuser1Time)
    static 
Float:Delaypev(Entpev_fuser2Delay)
    if(
get_gametime() - Delay Time)
    {
        
Create_Supplybox(Now)
        
        
Time get_gametime()
        
        
set_pev(Entpev_fuser1Time)
        
set_pev(Entpev_fuser2random_float(1.02.0))
    }
        
    
set_pev(Entpev_nextthinkget_gametime() + 0.01)
}

public 
Create_Supplybox(Float:Origin[3])
{
    static 
SupplySupply create_entity("info_target")
        
    
set_pev(Supplypev_classnameSUPPLYBOX_CLASSNAME)
    
engfunc(EngFunc_SetModelSupplySUPPLY_MODEL)

    
engfunc(EngFunc_SetSizeSupplyFloat:{-3.0,-3.0,-3.0}, Float:{3.0,3.0,3.0})
    
    
set_pev(Supplypev_solidSOLID_TRIGGER)
    
set_pev(Supplypev_movetypeMOVETYPE_TOSS)
    
set_pev(Supplypev_angles, {90.00.00.0})
    
set_pev(Supplypev_gravity0.5)
    
    static 
Float:Velocity[3]
    
Velocity[0] = random_float(-100.0100.0)
    
Velocity[1] = random_float(-100.0100.0)

    
engfunc(EngFunc_SetOriginSupplyOrigin)
    
set_pev(Supplypev_velocityVelocity)
    
Set_EntAnim(Supply01.00)
    
    
set_pev(Supplypev_nextthinkget_gametime() + 0.01)
}

public 
fw_Supplybox_Think(Ent)
{
    if(!
pev_valid(Ent))
        return
        
    static 
Float:Velocity[3]; pev(Entpev_velocityVelocity)
    if(!
vector_length(Velocity))
    {
        
pev(Entpev_anglesVelocity)
        if(
Velocity[0] > 0.0)
        {
            
Velocity[0] -= 10.0
            
if(Velocity[0] < 0.0
            {
                
Velocity[0] = 0.0
            
}
            
            
set_pev(Entpev_anglesVelocity)
            if(!
Velocity[0]) engfunc(EngFunc_SetModelEntPACKAGE_MODEL)
        }
    }
    
    
set_pev(Entpev_nextthinkget_gametime() + 0.1)
}

public 
fw_Supplybox_Touch(Entid)
{
    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_RemoveEntityEnt)
    
    return 
FMRES_IGNORED
}

public 
SupplyBox_GiveItem(const id)
{
    new iRandomNum random_num(120);

    switch(iRandomNum)
    {
        case 1give_item(id"weapon_ak47");
        case 2give_item(id"weapon_m4a1");
        case 3give_item(id"weapon_awp");
        case 4give_item(id"weapon_deagle");
        case 5give_item(id"weapon_usp");
        case 6set_user_health(idget_user_health(id) + 25);
        case 7set_user_health(idget_user_health(id) + 50);
        case 8cs_set_user_armor(idcs_get_user_armor(id) + 50CS_ARMOR_VESTHELM);
        case 9cs_set_user_armor(idcs_get_user_armor(id) + 100CS_ARMOR_VESTHELM);
        case 10set_user_gravity(id0.5);
        case 11set_user_gravity(id1.5);
        case 12set_user_maxspeed(id1.2);
        case 13set_user_maxspeed(id0.8);
        case 14give_item(id"weapon_scout");
        case 15give_item(id"weapon_mp5navy");
        case 16give_item(id"weapon_p90");
        case 17give_item(id"weapon_galil");
        case 18give_item(id"weapon_famas");
        case 19give_item(id"weapon_hegrenade");
        case 20give_item(id"weapon_flashbang");
    }
}

public 
Aim_To2(iEntFloat:vTargetOrigin[3])
{
    if(!
pev_valid(iEnt))    
        return
        
    static 
Float:Vec[3], Float:Angles[3]
    
pev(iEntpev_originVec)
    
    
Vec[0] = vTargetOrigin[0] - Vec[0]
    
Vec[1] = vTargetOrigin[1] - Vec[1]
    
Vec[2] = vTargetOrigin[2] - Vec[2]
    
engfunc(EngFunc_VecToAnglesVecAngles)
    
//Angles[0] = Angles[2] = 0.0 
    
    
set_pev(iEntpev_v_angleAngles)
    
set_pev(iEntpev_anglesAngles)
}

public 
Set_EntAnim(entanimFloat:framerateresetframe)
{
    if(!
pev_valid(ent))
        return
    
    if(!
resetframe)
    {
        if(
pev(entpev_sequence) != anim)
        {
            
set_pev(entpev_animtimeget_gametime())
            
set_pev(entpev_framerateframerate)
            
set_pev(entpev_sequenceanim)
        }
    } else {
        
set_pev(entpev_animtimeget_gametime())
        
set_pev(entpev_framerateframerate)
        
set_pev(entpev_sequenceanim)
    }
}

public 
hook_ent2(entFloat:VicOrigin[3], Float:speed)
{
    if(!
pev_valid(ent))
        return
    
    static 
Float:fl_Velocity[3], Float:EntOrigin[3], Float:distance_fFloat:fl_Time
    
    pev
(entpev_originEntOrigin)
    
    
distance_f get_distance_f(EntOriginVicOrigin)
    
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
(entpev_velocityfl_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(titlecharsmax(title), "[AirSupply] Spawn Editor (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[2], "save"0)
    
//menu_additem(mHandleID, item_name[3], "load", 0)
    //menu_additem(mHandleID, item_name[4], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_main_handler(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
// destroy menu
        
menu_destroy(menu)
        
// show menu main
        
return;
    }
    
    new 
itemid[32], itemname[32], access
    menu_item_getinfo
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(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(titlecharsmax(title), "[AirSupply] Path Adding (%i/%i)"g_total_spawnsMAX_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(mHandleIDitem_name[0], "add"0)
    
menu_additem(mHandleIDitem_name[1], "add_boss"0)
    
//menu_additem(mHandleID, item_name[2], "del", 0)
    
menu_display(idmHandleID0)
}
public 
spawn_create_handler(idmenuitem)
{
    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
(menuitemaccessitemidcharsmax(itemid), itemnamecharsmax(itemname), access)
    
menu_destroy(menu)

    if (
equali(itemid"add")) spawn_create_add(id)
    else if (
equali(itemid"add_boss")) spawn_create_add(id1)
    
//else if (equali(itemid, "del")) spawn_del()

    // return menu create spawns
    
spawn_create(id)
    
    return;
}
spawn_create_add(idend=0)
{
    
// check max points
    
if (g_total_spawns>=MAX_SPAWNS)
    {
        new 
message[128]
        
format(messagecharsmax(message), ">x04[AirSupply] >x01Max spawn = %i"MAX_SPAWNS)
        
color_saytext(idmessage)
        return;
    }
    
    
// add current points
    
new Float:originF[3], origin[3]
    
pev(idpev_originoriginF)
    
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(messagecharsmax(message), ">x04[AirSupply] >x01Too closer...")
        
color_saytext(idmessage)
        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(messagecharsmax(message), ">x04[AirSupply] >x01No spawn found")
        
color_saytext(0message)
        return;
    }

    
// get url file
    
new cfgdir[32], mapname[32], urlfile[64]
    
get_configsdir(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(urlfilecharsmax(urlfile), SPAWNS_URLcfgdirmapname)

    
// save file
    
if (file_exists(urlfile)) delete_file(urlfile)
    new 
lineset[128]
    for (new 
i=0i<g_total_spawnsi++)
    {
        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(linesetcharsmax(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(urlfilelineseti)
    }
    
    
// show notice
    
new message[128]
    
format(messagecharsmax(message), ">x04[AirSupply] >x01Save Completed")
    
color_saytext(0message)
}

// ===================== 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(cfgdircharsmax(cfgdir))
    
get_mapname(mapnamecharsmax(mapname))
    
formatex(filepathcharsmax(filepath), SPAWNS_URLcfgdirmapname)
    
    
// 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(filelinedatacharsmax(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 (
filefclose(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=0i<g_total_spawnsi++)
    {
        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(origin1origin2)<=2*16.0)
        {
            
// oz
            
origin1 origin
            origin2 
originE
            origin1
[0] = origin2[0] = origin1[1] = origin2[1] = 0.0
            
if (vector_distance(origin1origin2)<=100.0) return 0;
        }
    }

    return 
1;
}

color_saytext(player, const message[], any:...)
{
    new 
text[256]
    
format(textcharsmax(text), "%s",message)
    
format(textcharsmax(text), "%s",check_text(text))
    
    new 
dest
    
if (playerdest MSG_ONE
    
else dest MSG_ALL
    
    message_begin
(destget_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=0s<MAX_SPAWNSs++)
    {
        for (new 
i=0i<3i++)
        {
            
g_spawns[s][i] = 0
        
}
    }
    if (!
tg_total_spawns 0
}

check_text(text1[])
{
    new 
text[256]
    
format(textcharsmax(text), "%s"text1)
    
    
replace_all(textcharsmax(text), ">x04""^x04")
    
replace_all(textcharsmax(text), ">x03""^x03")
    
replace_all(textcharsmax(text), ">x01""^x01")

    return 
text
}

str_count(const str[], searchchar)
{
    new 
countilen strlen(str)
    
    for (
0<= leni++)
    {
        if(
str[i] == searchchar)
            
count++
    }
    
    return 
count;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
*/ 
abi bu kaydetmiyo serveri değiştirince koordinatlar gidiyo yeniden ayarlamam gerekiyo onu nasıl çözerim ?
abi kutuları biraz arttırırsan iyi olur çünkü sadece 2 tane atıyo böyle bi 4 5 tane atsa daha iyi olur
Son Düzenleme: 05-01-2025, 20:23, Düzenleyen: PlateN1453.
#14
Malesef koordinat kaydetmede sorun varsa yardımcı olamam.
Kutu sayısını ayarlamak için aşağıdaki değerle oynayın;
Kod:
set_pev(Ent, pev_fuser2, random_float(1.0, 2.0)) // Kutu atma aralarındaki gecikme, 0.1 2.0 yaparsanız bu değerler arasında daha fazla kutu atar.
Steam:Tıkla • Discord: lynchk
#15
(05-01-2025, 20:25)Lynchk Adlı Kullanıcıdan Alıntı: Malesef koordinat kaydetmede sorun varsa yardımcı olamam.
Kutu sayısını ayarlamak için aşağıdaki değerle oynayın;
Kod:
set_pev(Ent, pev_fuser2, random_float(1.0, 2.0)) // Kutu atma aralarındaki gecikme, 0.1 2.0 yaparsanız bu değerler arasında daha fazla kutu atar.
Eline emeğine sağlık çok teşekkür ederim.
#16
İstek konusu, @Lynchk adlı kullanıcı tarafından 4 saat içinde çözülmüştür.
İsteği çözdüğü için Lynchk Adlı kullanıcıya 1 rep puanı ve 1 yardım etme puanı otomatik olarak verilmiştir.
Lynchk Adlı kullanıcı sizin dışınızda toplam 979 kişiye yardım etmiştir.

Herhangi bir konuda hata olduğunu düşünüyorsanız destek sistemi üzerinden iletişim kurabilirsiniz.

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da