Skocz do zawartości
cyziek

Spadochron bez modelu

Rekomendowane odpowiedzi

Szukam pluginu na spadochron dla osób z daną flagą, jednak bez zbędnych modeli. Samo zwolnienie "upadania". Czy ktoś miałby taki plugin?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Trzymaj 

Spoiler

#include <sourcemod>
#include <sdktools>

#define PARACHUTE_VERSION     "2.5.1"

//Parachute Model
//#define PARACHUTE_MODEL        "parachute_carbon"

//Parachute Textures
//#define PARACHUTE_PACK        "pack_carbon"
//#define PARACHUTE_TEXTURE    "parachute_carbon"

new g_iVelocity = -1;
new g_iMoney = -1;
new g_maxplayers = -1;

new String:g_game[30];
new String:path_model[256];
new String:path_pack[256];
new String:path_texture[256];

new Handle:g_fallspeed = INVALID_HANDLE;
new Handle:g_enabled = INVALID_HANDLE;
new Handle:g_linear = INVALID_HANDLE;
new Handle:g_msgtype = INVALID_HANDLE;
new Handle:g_cost = INVALID_HANDLE;
new Handle:g_payback = INVALID_HANDLE;
new Handle:g_welcome = INVALID_HANDLE;
new Handle:g_roundmsg = INVALID_HANDLE;
new Handle:g_version = INVALID_HANDLE;
new Handle:g_model = INVALID_HANDLE;
new Handle:g_decrease = INVALID_HANDLE;
new Handle:g_button = INVALID_HANDLE;

new x;
new cl_flags;
new cl_buttons;
new Float:speed[3];
new bool:isfallspeed;

new USE_BUTTON;
new String:ButtonText[265];

new bool:inUse[MAXPLAYERS+1];
new bool:hasPara[MAXPLAYERS+1];
new bool:hasModel[MAXPLAYERS+1];
new bool:hasAccess[MAXPLAYERS+1];
new Parachute_Ent[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "SM Parachute",
    author = "SWAT_88 edited by pTu",
    description = "To use your parachute press and hold your E(+use) button while falling.",
    version = PARACHUTE_VERSION,
    url = "http://www.sourcemod.net/
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
"
};

public OnPluginStart()
{
    LoadTranslations ("sm_parachute.phrases");

    g_enabled = CreateConVar("sm_parachute_enabled","1");
    g_fallspeed = CreateConVar("sm_parachute_fallspeed","100");
    g_linear = CreateConVar("sm_parachute_linear","1");
    g_msgtype = CreateConVar("sm_parachute_msgtype","1");
    g_cost = CreateConVar("sm_parachute_cost","0");
    g_payback = CreateConVar("sm_parachute_payback","75");
    g_welcome = CreateConVar("sm_parachute_welcome","1");
    g_roundmsg = CreateConVar("sm_parachute_roundmsg","1");
    g_version = CreateConVar("sm_parachute_version", PARACHUTE_VERSION,    "SM Parachute Version", FCVAR_NOTIFY);
    g_model = CreateConVar("sm_parachute_model","0");
    g_decrease = CreateConVar("sm_parachute_decrease","50");
    g_button = CreateConVar("sm_parachute_button","1");
    g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
    g_iMoney = FindSendPropOffs("CCSPlayer", "m_iAccount");
    g_maxplayers = GetMaxClients();
    SetConVarString(g_version, PARACHUTE_VERSION);
    
    InitGameMode();
    
    RegConsoleCmd("say",HandleSay,"",FCVAR_GAMEDLL);
    RegConsoleCmd("say_team",HandleSay,"",FCVAR_GAMEDLL);
    HookEvent("player_death",PlayerDeath);
    HookEvent("player_spawn",PlayerSpawn);
    HookConVarChange(g_enabled, CvarChange_Enabled);
    HookConVarChange(g_linear, CvarChange_Linear);
    HookConVarChange(g_cost, CvarChange_Cost);
    HookConVarChange(g_model, CvarChange_Model);
    HookConVarChange(g_button, CvarChange_Button);

    //CreateTimer(5.0, Timer_Copy, _, TIMER_REPEAT); 
}

public Action:Timer_Copy(Handle:timer)
{
    PrintToChatAll("\x01[\x04DEMO\x01]\x04 PLUGIN DEMO PLUGIN DEMOPLUGIN DEMOPLUGIN DEMO");
}  

public OnPluginEnd(){
    CloseHandle(g_fallspeed);
    CloseHandle(g_enabled);
    CloseHandle(g_linear);
    CloseHandle(g_msgtype);
    CloseHandle(g_cost);
    CloseHandle(g_payback);
    CloseHandle(g_welcome);
    CloseHandle(g_roundmsg);
    CloseHandle(g_version);
    CloseHandle(g_model);
    CloseHandle(g_decrease);
}

public InitGameMode(){
    GetGameFolderName(g_game, 29);
    if(StrEqual(g_game,"tf",false)){
        SetConVarInt(g_button,2);
        SetButton(2);
    }
    else{
        SetButton(1);
    }
}

public OnMapStart(){
    new String:path[256];
    
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    PrecacheModel(path,true);

    strcopy(path,255,path_model);
    StrCat(path,255,".dx80.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".dx90.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".sw.vtx")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_model);
    StrCat(path,255,".vvd")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".xbox.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_pack);
    StrCat(path,255,".vmt")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_pack);
    StrCat(path,255,".vtf")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_texture);
    StrCat(path,255,".vmt")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_texture);
    StrCat(path,255,".vtf")
    AddFileToDownloadsTable(path);
}

public OnEventShutdown()
{
    UnhookEvent("player_death",PlayerDeath);
    UnhookEvent("player_spawn",PlayerSpawn);
}

public OnClientPutInServer(client)
{
    inUse[client] = false;
    hasPara[client] = false;
    hasModel[client] = false;
    hasAccess[client] = false;
    g_maxplayers = GetMaxClients();
    CreateTimer (20.0, WelcomeMsg, client);
}

public OnClientPostAdminCheck(client)
{
    hasAccess[client] = IsPlayerGenericAdmin(client);
}

public OnClientDisconnect(client){
    g_maxplayers = GetMaxClients();
    CloseParachute(client);
}

public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetConVarInt(g_cost) == 0){
        CreateTimer (1.0, RoundMsg, client);
    }
    return Plugin_Continue;
}

public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    hasPara[client] = false;
    EndPara(client);
    return Plugin_Continue;
}

public Action:RoundMsg(Handle:timer, any:client){
    if(GetConVarInt(g_roundmsg) == 1){
        if(IsClientConnected (client) && IsClientInGame(client))
            PrintMsg(client,"Have Got Free Parachute");
    }
    return Plugin_Continue;
}

public StartPara(client,bool:open)
{
    decl Float:velocity[3];
    decl Float:fallspeed;
    if (g_iVelocity == -1) return;
    if((GetConVarInt(g_enabled)== 1 && hasPara[client]) || (GetConVarInt(g_enabled) == 1 && GetConVarInt(g_cost) == 0)){
        fallspeed = GetConVarFloat(g_fallspeed)*(-1.0);
        GetEntDataVector(client, g_iVelocity, velocity);
        if(velocity[2] >= fallspeed){
            isfallspeed = true;
        }
        if(velocity[2] < 0.0) {
            if(isfallspeed && GetConVarInt(g_linear) == 0){
            }
            else if((isfallspeed && GetConVarInt(g_linear) == 1) || GetConVarFloat(g_decrease) == 0.0){
                velocity[2] = fallspeed;
            }
            else{
                velocity[2] = velocity[2] + GetConVarFloat(g_decrease);
            }
            TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
            SetEntDataVector(client, g_iVelocity, velocity);
            SetEntityGravity(client,0.1);
            if(open) OpenParachute(client);
        }
    }
}

public EndPara(client)
{
    if(GetConVarInt(g_enabled)== 1 ){
        SetEntityGravity(client,1.0);
        inUse[client]=false;
        CloseParachute(client);
    }
}

public OpenParachute(client){
    decl String:path[256];
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    
    if(GetConVarInt(g_model) == 1){
        Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
        DispatchKeyValue(Parachute_Ent[client],"model",path);
        SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
        DispatchSpawn(Parachute_Ent[client]);
        
        hasModel[client]=true;
        TeleportParachute(client);
    }
}

public TeleportParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        decl Float:Client_Origin[3];
        decl Float:Client_Angles[3];
        decl Float:Parachute_Angles[3] = {0.0, 0.0, 0.0};
        GetClientAbsOrigin(client,Client_Origin);
        GetClientAbsAngles(client,Client_Angles);
        Parachute_Angles[1] = Client_Angles[1];
        TeleportEntity(Parachute_Ent[client], Client_Origin, Parachute_Angles, NULL_VECTOR);
    }
}

public CloseParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        RemoveEdict(Parachute_Ent[client]);
        hasModel[client]=false;
    }
}

public Check(client){
    if(GetConVarInt(g_enabled)== 1 ){
        GetEntDataVector(client,g_iVelocity,speed);
        cl_flags = GetEntityFlags(client);
        if(speed[2] >= 0 || (cl_flags & FL_ONGROUND)) EndPara(client);
    }
}

public OnGameFrame()
{
    if(GetConVarInt(g_enabled) == 0) return;
    for (x = 1; x <= g_maxplayers; x++)
    {
        if (IsClientInGame(x) && IsPlayerAlive(x) && hasAccess[x])
        {
            cl_buttons = GetClientButtons(x);
            if (cl_buttons & USE_BUTTON)
            {
                if (!inUse[x])
                {
                    inUse[x] = true;
                    isfallspeed = false;
                    StartPara(x,true);
                }
                StartPara(x,false);
                TeleportParachute(x);
            }
            else
            {
                if (inUse[x])
                {
                    inUse[x] = false;
                    EndPara(x);
                }
            }
            Check(x);
        }
    }
}

stock GetNextSpaceCount(String:text[],CurIndex){
    new Count=0;
    new len = strlen(text);
    for(new i=CurIndex;i<len;i++){
        if(text[i] == ' ') return Count;
        else Count++;
    }
    return Count;
}

stock SendHintText(client, String:text[], any:...){
    new String:message[192];

    VFormat(message,191,text, 2);
    new len = strlen(message);
    if(len > 30){
        new LastAdded=0;
        
        for(new i=0;i<len;i++){
            if((message[i]==' ' && LastAdded > 30 && (len-i) > 10) || ((GetNextSpaceCount(text,i+1) + LastAdded)  > 34)){
                message[i] = '\n';
                LastAdded = 0;
            }
            else LastAdded++;
        }
    }
    new Handle:HintMessage = StartMessageOne("HintText",client);
    if (GetUserMessageType() == UM_Protobuf)
        PbSetString(HintMessage, "text", message);
    else
    {   
        BfWriteByte(HintMessage,-1);
        BfWriteString(HintMessage,message);
    }
    EndMessage();
}

public PrintMsg(client,String:msg[]){
    new String:translation[256];
    if(GetConVarInt(g_enabled) == 0) return;
    Format(translation, 255, "%T", msg, LANG_SERVER, ButtonText);
    if(GetConVarInt(g_msgtype) == 1){        
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %s", translation);
    }
    else if(GetConVarInt(g_msgtype) == 2) {
        new Handle:panel = CreatePanel();
        DrawPanelText(panel,translation);
        SendPanelToClient(panel,client,PanelHandle,5);
    }
    else if(GetConVarInt(g_msgtype) == 3){
        SendHintText(client,translation);
    }
}

public PanelHandle(Handle:menu, MenuAction:action, param1, param2){
}

public BuyParachute(client){
    new money;
    new cost;
    if (g_iMoney == -1) return;
    if (hasPara[client] == false){
        money = GetEntData(client,g_iMoney);
        cost = GetConVarInt(g_cost);
        if (cost == 0){
            PrintMsg(client,"Have Free Parachute");
        }
        else{
            if((money - cost)<0){
                PrintMsg(client,"No Money");
            }
            else{
                hasPara[client] = true;
                SetEntData(client,g_iMoney,money-cost);
                PrintMsg(client,"Have Bought Parachute");
            }
        }
    }
    else{
        PrintMsg(client,"Have Parachute");
    }
    
}

public SellParachute(client){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = GetConVarInt(g_cost)*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
        PrintMsg(client,"Sold Parachute");
    }
    else{
        if (GetConVarInt(g_cost)==0){
            PrintMsg(client,"Sell Free Parachute");
        }
        else{
            PrintMsg(client,"No Parachute");
        }
    }
}

public Action:HandleSay(client, args){
    new String:line[30];
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;
    if (args > 0){
        GetCmdArg(1,line,sizeof(line));
        if (strcmp(g_game,"cstrike",false)==0){
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) BuyParachute(client);
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) SellParachute(client);
        }
        else{
            SetConVarInt(g_cost,0);
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) PrintMsg(client,"Have Free Parachute");
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) PrintMsg(client,"Sell Free Parachute");
        }
    }
    return Plugin_Continue;
}


public Action:WelcomeMsg (Handle:timer, any:client)
{
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;

    if (GetConVarInt (g_welcome) == 1 && IsClientConnected (client) && IsClientInGame (client))
    {
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Welcome", LANG_SERVER);
        if (GetConVarInt(g_cost)==0){
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
        }
        else{
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
        }
    }
    return Plugin_Continue;
}


public CvarChange_Enabled(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]){
                    SetEntityGravity(client,1.0);
                    SetEntityMoveType(client,MOVETYPE_WALK);
                    SellParachuteOff(client,GetConVarInt(g_cost));
                }
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Disabled", LANG_SERVER);
            }
        }
    }
    else{
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Enabled", LANG_SERVER);
                if (GetConVarInt(g_cost)==0){
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
                }
                else{
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
                }
            }
        }
    }
}

public CvarChange_Linear(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client) && hasPara[client]){
                SetEntityMoveType(client,MOVETYPE_WALK);
            }
        }
    }
}

public CvarChange_Cost(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]) SellParachuteOff(client,StringToInt(oldvalue));
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
            }
        }
    }
    else{
        if (strcmp(g_game,"cstrike",false) != 0) SetConVarInt(g_cost,0);
    }
}

public CvarChange_Button(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 1){
        SetButton(1);
    }
    else if(StringToInt(newvalue) == 2){
        SetButton(2);
    }
}

public CvarChange_Model(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                CloseParachute(client);
            }
        }
    }
}

public SellParachuteOff(client,cost){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = cost*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
    }
}

public SetButton(button){
    if (button == 1){
        USE_BUTTON = IN_USE;
        ButtonText = "E";
    }
    else if(button == 2){
        USE_BUTTON = IN_JUMP;
        ButtonText = "Space";
    }
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
    if(CheckCommandAccess(client, "", ADMFLAG_CUSTOM6))
    {
        return true;
    }
    return false;
}

if(CheckCommandAccess(client, "", ADMFLAG_CUSTOM6))" tu zmieniasz flage 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chodziło mi raczej o to żeby zrobić to najprościej jak tylko się da, bez zbędnych napisów, kupowania spadochronu itd.

Jeśli gracz posiada flagi "o" lub "s" to kiedy naciśnie E podczas spadania- będzie spadał wolniej.

To wszystko 😄 Dałoby radę? @Sqower

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
11 minut temu, cyziek napisał:

Chodziło mi raczej o to żeby zrobić to najprościej jak tylko się da, bez zbędnych napisów, kupowania spadochronu itd.

Jeśli gracz posiada flagi "o" lub "s" to kiedy naciśnie E podczas spadania- będzie spadał wolniej.

To wszystko 😄 Dałoby radę? @Sqower

 

Spoiler

#include <sourcemod>
#include <sdktools>

#define PARACHUTE_VERSION     "2.5.1"

//Parachute Model
//#define PARACHUTE_MODEL        "parachute_carbon"

//Parachute Textures
//#define PARACHUTE_PACK        "pack_carbon"
//#define PARACHUTE_TEXTURE    "parachute_carbon"

new g_iVelocity = -1;
new g_iMoney = -1;
new g_maxplayers = -1;

new String:g_game[30];
new String:path_model[256];
new String:path_pack[256];
new String:path_texture[256];

new Handle:g_fallspeed = INVALID_HANDLE;
new Handle:g_enabled = INVALID_HANDLE;
new Handle:g_linear = INVALID_HANDLE;
new Handle:g_msgtype = INVALID_HANDLE;
new Handle:g_cost = INVALID_HANDLE;
new Handle:g_payback = INVALID_HANDLE;
new Handle:g_welcome = INVALID_HANDLE;
new Handle:g_roundmsg = INVALID_HANDLE;
new Handle:g_version = INVALID_HANDLE;
new Handle:g_model = INVALID_HANDLE;
new Handle:g_decrease = INVALID_HANDLE;
new Handle:g_button = INVALID_HANDLE;

new x;
new cl_flags;
new cl_buttons;
new Float:speed[3];
new bool:isfallspeed;

new USE_BUTTON;
new String:ButtonText[265];

new bool:inUse[MAXPLAYERS+1];
new bool:hasPara[MAXPLAYERS+1];
new bool:hasModel[MAXPLAYERS+1];
new bool:hasAccess[MAXPLAYERS+1];
new Parachute_Ent[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "SM Parachute",
    author = "SWAT_88 edited by pTu",
    description = "To use your parachute press and hold your E(+use) button while falling.",
    version = PARACHUTE_VERSION,
    url = "http://www.sourcemod.net/
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
"
};

public OnPluginStart()
{
    LoadTranslations ("sm_parachute.phrases");

    g_enabled = CreateConVar("sm_parachute_enabled","1");
    g_fallspeed = CreateConVar("sm_parachute_fallspeed","100");
    g_linear = CreateConVar("sm_parachute_linear","1");
    g_msgtype = CreateConVar("sm_parachute_msgtype","1");
    g_cost = CreateConVar("sm_parachute_cost","0");
    g_payback = CreateConVar("sm_parachute_payback","75");
    g_welcome = CreateConVar("sm_parachute_welcome","0");
    g_roundmsg = CreateConVar("sm_parachute_roundmsg","0");
    g_version = CreateConVar("sm_parachute_version", PARACHUTE_VERSION,    "SM Parachute Version", FCVAR_NOTIFY);
    g_model = CreateConVar("sm_parachute_model","0");
    g_decrease = CreateConVar("sm_parachute_decrease","50");
    g_button = CreateConVar("sm_parachute_button","1");
    g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
    g_iMoney = FindSendPropOffs("CCSPlayer", "m_iAccount");
    g_maxplayers = GetMaxClients();
    SetConVarString(g_version, PARACHUTE_VERSION);
    
    InitGameMode();
    
    RegConsoleCmd("say",HandleSay,"",FCVAR_GAMEDLL);
    RegConsoleCmd("say_team",HandleSay,"",FCVAR_GAMEDLL);
    HookEvent("player_death",PlayerDeath);
    HookEvent("player_spawn",PlayerSpawn);
    HookConVarChange(g_enabled, CvarChange_Enabled);
    HookConVarChange(g_linear, CvarChange_Linear);
    HookConVarChange(g_cost, CvarChange_Cost);
    HookConVarChange(g_model, CvarChange_Model);
    HookConVarChange(g_button, CvarChange_Button);

    //CreateTimer(5.0, Timer_Copy, _, TIMER_REPEAT); 
}

public Action:Timer_Copy(Handle:timer)
{
    PrintToChatAll("\x01[\x04DEMO\x01]\x04 PLUGIN DEMO PLUGIN DEMOPLUGIN DEMOPLUGIN DEMO");
}  

public OnPluginEnd(){
    CloseHandle(g_fallspeed);
    CloseHandle(g_enabled);
    CloseHandle(g_linear);
    CloseHandle(g_msgtype);
    CloseHandle(g_cost);
    CloseHandle(g_payback);
    CloseHandle(g_welcome);
    CloseHandle(g_roundmsg);
    CloseHandle(g_version);
    CloseHandle(g_model);
    CloseHandle(g_decrease);
}

public InitGameMode(){
    GetGameFolderName(g_game, 29);
    if(StrEqual(g_game,"tf",false)){
        SetConVarInt(g_button,2);
        SetButton(2);
    }
    else{
        SetButton(1);
    }
}

public OnMapStart(){
    new String:path[256];
    
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    PrecacheModel(path,true);

    strcopy(path,255,path_model);
    StrCat(path,255,".dx80.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".dx90.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".sw.vtx")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_model);
    StrCat(path,255,".vvd")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_model);
    StrCat(path,255,".xbox.vtx")
    AddFileToDownloadsTable(path);

    strcopy(path,255,path_pack);
    StrCat(path,255,".vmt")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_pack);
    StrCat(path,255,".vtf")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_texture);
    StrCat(path,255,".vmt")
    AddFileToDownloadsTable(path);
    
    strcopy(path,255,path_texture);
    StrCat(path,255,".vtf")
    AddFileToDownloadsTable(path);
}

public OnEventShutdown()
{
    UnhookEvent("player_death",PlayerDeath);
    UnhookEvent("player_spawn",PlayerSpawn);
}

public OnClientPutInServer(client)
{
    inUse[client] = false;
    hasPara[client] = false;
    hasModel[client] = false;
    hasAccess[client] = false;
    g_maxplayers = GetMaxClients();
    CreateTimer (20.0, WelcomeMsg, client);
}

public OnClientPostAdminCheck(client)
{
    hasAccess[client] = IsPlayerGenericAdmin(client);
}

public OnClientDisconnect(client){
    g_maxplayers = GetMaxClients();
    CloseParachute(client);
}

public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetConVarInt(g_cost) == 0){
        CreateTimer (1.0, RoundMsg, client);
    }
    return Plugin_Continue;
}

public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    hasPara[client] = false;
    EndPara(client);
    return Plugin_Continue;
}

public Action:RoundMsg(Handle:timer, any:client){
    if(GetConVarInt(g_roundmsg) == 1){
        if(IsClientConnected (client) && IsClientInGame(client))
            PrintMsg(client,"Have Got Free Parachute");
    }
    return Plugin_Continue;
}

public StartPara(client,bool:open)
{
    decl Float:velocity[3];
    decl Float:fallspeed;
    if (g_iVelocity == -1) return;
    if((GetConVarInt(g_enabled)== 1 && hasPara[client]) || (GetConVarInt(g_enabled) == 1 && GetConVarInt(g_cost) == 0)){
        fallspeed = GetConVarFloat(g_fallspeed)*(-1.0);
        GetEntDataVector(client, g_iVelocity, velocity);
        if(velocity[2] >= fallspeed){
            isfallspeed = true;
        }
        if(velocity[2] < 0.0) {
            if(isfallspeed && GetConVarInt(g_linear) == 0){
            }
            else if((isfallspeed && GetConVarInt(g_linear) == 1) || GetConVarFloat(g_decrease) == 0.0){
                velocity[2] = fallspeed;
            }
            else{
                velocity[2] = velocity[2] + GetConVarFloat(g_decrease);
            }
            TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
            SetEntDataVector(client, g_iVelocity, velocity);
            SetEntityGravity(client,0.1);
            if(open) OpenParachute(client);
        }
    }
}

public EndPara(client)
{
    if(GetConVarInt(g_enabled)== 1 ){
        SetEntityGravity(client,1.0);
        inUse[client]=false;
        CloseParachute(client);
    }
}

public OpenParachute(client){
    decl String:path[256];
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    
    if(GetConVarInt(g_model) == 1){
        Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
        DispatchKeyValue(Parachute_Ent[client],"model",path);
        SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
        DispatchSpawn(Parachute_Ent[client]);
        
        hasModel[client]=true;
        TeleportParachute(client);
    }
}

public TeleportParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        decl Float:Client_Origin[3];
        decl Float:Client_Angles[3];
        decl Float:Parachute_Angles[3] = {0.0, 0.0, 0.0};
        GetClientAbsOrigin(client,Client_Origin);
        GetClientAbsAngles(client,Client_Angles);
        Parachute_Angles[1] = Client_Angles[1];
        TeleportEntity(Parachute_Ent[client], Client_Origin, Parachute_Angles, NULL_VECTOR);
    }
}

public CloseParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        RemoveEdict(Parachute_Ent[client]);
        hasModel[client]=false;
    }
}

public Check(client){
    if(GetConVarInt(g_enabled)== 1 ){
        GetEntDataVector(client,g_iVelocity,speed);
        cl_flags = GetEntityFlags(client);
        if(speed[2] >= 0 || (cl_flags & FL_ONGROUND)) EndPara(client);
    }
}

public OnGameFrame()
{
    if(GetConVarInt(g_enabled) == 0) return;
    for (x = 1; x <= g_maxplayers; x++)
    {
        if (IsClientInGame(x) && IsPlayerAlive(x) && hasAccess[x])
        {
            cl_buttons = GetClientButtons(x);
            if (cl_buttons & USE_BUTTON)
            {
                if (!inUse[x])
                {
                    inUse[x] = true;
                    isfallspeed = false;
                    StartPara(x,true);
                }
                StartPara(x,false);
                TeleportParachute(x);
            }
            else
            {
                if (inUse[x])
                {
                    inUse[x] = false;
                    EndPara(x);
                }
            }
            Check(x);
        }
    }
}

stock GetNextSpaceCount(String:text[],CurIndex){
    new Count=0;
    new len = strlen(text);
    for(new i=CurIndex;i<len;i++){
        if(text[i] == ' ') return Count;
        else Count++;
    }
    return Count;
}

stock SendHintText(client, String:text[], any:...){
    new String:message[192];

    VFormat(message,191,text, 2);
    new len = strlen(message);
    if(len > 30){
        new LastAdded=0;
        
        for(new i=0;i<len;i++){
            if((message[i]==' ' && LastAdded > 30 && (len-i) > 10) || ((GetNextSpaceCount(text,i+1) + LastAdded)  > 34)){
                message[i] = '\n';
                LastAdded = 0;
            }
            else LastAdded++;
        }
    }
    new Handle:HintMessage = StartMessageOne("HintText",client);
    if (GetUserMessageType() == UM_Protobuf)
        PbSetString(HintMessage, "text", message);
    else
    {   
        BfWriteByte(HintMessage,-1);
        BfWriteString(HintMessage,message);
    }
    EndMessage();
}

public PrintMsg(client,String:msg[]){
    new String:translation[256];
    if(GetConVarInt(g_enabled) == 0) return;
    Format(translation, 255, "%T", msg, LANG_SERVER, ButtonText);
    if(GetConVarInt(g_msgtype) == 1){        
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %s", translation);
    }
    else if(GetConVarInt(g_msgtype) == 2) {
        new Handle:panel = CreatePanel();
        DrawPanelText(panel,translation);
        SendPanelToClient(panel,client,PanelHandle,5);
    }
    else if(GetConVarInt(g_msgtype) == 3){
        SendHintText(client,translation);
    }
}

public PanelHandle(Handle:menu, MenuAction:action, param1, param2){
}

public BuyParachute(client){
    new money;
    new cost;
    if (g_iMoney == -1) return;
    if (hasPara[client] == false){
        money = GetEntData(client,g_iMoney);
        cost = GetConVarInt(g_cost);
        if (cost == 0){
            PrintMsg(client,"Have Free Parachute");
        }
        else{
            if((money - cost)<0){
                PrintMsg(client,"No Money");
            }
            else{
                hasPara[client] = true;
                SetEntData(client,g_iMoney,money-cost);
                PrintMsg(client,"Have Bought Parachute");
            }
        }
    }
    else{
        PrintMsg(client,"Have Parachute");
    }
    
}

public SellParachute(client){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = GetConVarInt(g_cost)*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
        PrintMsg(client,"Sold Parachute");
    }
    else{
        if (GetConVarInt(g_cost)==0){
            PrintMsg(client,"Sell Free Parachute");
        }
        else{
            PrintMsg(client,"No Parachute");
        }
    }
}

public Action:HandleSay(client, args){
    new String:line[30];
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;
    if (args > 0){
        GetCmdArg(1,line,sizeof(line));
        if (strcmp(g_game,"cstrike",false)==0){
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) BuyParachute(client);
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) SellParachute(client);
        }
        else{
            SetConVarInt(g_cost,0);
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) PrintMsg(client,"Have Free Parachute");
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) PrintMsg(client,"Sell Free Parachute");
        }
    }
    return Plugin_Continue;
}


public Action:WelcomeMsg (Handle:timer, any:client)
{
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;

    if (GetConVarInt (g_welcome) == 1 && IsClientConnected (client) && IsClientInGame (client))
    {
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Welcome", LANG_SERVER);
        if (GetConVarInt(g_cost)==0){
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
        }
        else{
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
        }
    }
    return Plugin_Continue;
}


public CvarChange_Enabled(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]){
                    SetEntityGravity(client,1.0);
                    SetEntityMoveType(client,MOVETYPE_WALK);
                    SellParachuteOff(client,GetConVarInt(g_cost));
                }
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Disabled", LANG_SERVER);
            }
        }
    }
    else{
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Enabled", LANG_SERVER);
                if (GetConVarInt(g_cost)==0){
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
                }
                else{
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
                }
            }
        }
    }
}

public CvarChange_Linear(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client) && hasPara[client]){
                SetEntityMoveType(client,MOVETYPE_WALK);
            }
        }
    }
}

public CvarChange_Cost(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]) SellParachuteOff(client,StringToInt(oldvalue));
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
            }
        }
    }
    else{
        if (strcmp(g_game,"cstrike",false) != 0) SetConVarInt(g_cost,0);
    }
}

public CvarChange_Button(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 1){
        SetButton(1);
    }
    else if(StringToInt(newvalue) == 2){
        SetButton(2);
    }
}

public CvarChange_Model(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                CloseParachute(client);
            }
        }
    }
}

public SellParachuteOff(client,cost){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = cost*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
    }
}

public SetButton(button){
    if (button == 1){
        USE_BUTTON = IN_USE;
        ButtonText = "E";
    }
    else if(button == 2){
        USE_BUTTON = IN_JUMP;
        ButtonText = "Space";
    }
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
    if(CheckCommandAccess(client, "", ADMFLAG_CUSTOM1, ADMFLAG_CUSTOM5))
    {
        return true;
    }
    return false;
}

 

spadachrono.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Brakuje tylko plików translacyjnych, a przy wejściu na serwer pobierają się niepotrzebne modele

Spoiler

Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.mdl
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
19 minut temu, cyziek napisał:

Brakuje tylko plików translacyjnych, a przy wejściu na serwer pobierają się niepotrzebne modele

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.mdl
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.sw.vtx
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vvd
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.xbox.vtx
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vmt
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.bz2.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.bz2
Downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf.
Error downloading http://k7543_s17212.fastdl1.livs.pl/s17212/.vtf

 

Spoiler

#include <sourcemod>
#include <sdktools>

#define PARACHUTE_VERSION     "2.5.1"

//Parachute Model
//#define PARACHUTE_MODEL        "parachute_carbon"

//Parachute Textures
//#define PARACHUTE_PACK        "pack_carbon"
//#define PARACHUTE_TEXTURE    "parachute_carbon"

new g_iVelocity = -1;
new g_iMoney = -1;
new g_maxplayers = -1;

new String:g_game[30];
new String:path_model[256];
//new String:path_pack[256];
//new String:path_texture[256];

new Handle:g_fallspeed = INVALID_HANDLE;
new Handle:g_enabled = INVALID_HANDLE;
new Handle:g_linear = INVALID_HANDLE;
new Handle:g_msgtype = INVALID_HANDLE;
new Handle:g_cost = INVALID_HANDLE;
new Handle:g_payback = INVALID_HANDLE;
new Handle:g_welcome = INVALID_HANDLE;
new Handle:g_roundmsg = INVALID_HANDLE;
new Handle:g_version = INVALID_HANDLE;
new Handle:g_model = INVALID_HANDLE;
new Handle:g_decrease = INVALID_HANDLE;
new Handle:g_button = INVALID_HANDLE;

new x;
new cl_flags;
new cl_buttons;
new Float:speed[3];
new bool:isfallspeed;

new USE_BUTTON;
new String:ButtonText[265];

new bool:inUse[MAXPLAYERS+1];
new bool:hasPara[MAXPLAYERS+1];
new bool:hasModel[MAXPLAYERS+1];
new bool:hasAccess[MAXPLAYERS+1];
new Parachute_Ent[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "SM Parachute",
    author = "SWAT_88 edited by pTu",
    description = "To use your parachute press and hold your E(+use) button while falling.",
    version = PARACHUTE_VERSION,
    url = "http://www.sourcemod.net/
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
"
};

public OnPluginStart()
{
    LoadTranslations ("sm_parachute.phrases");

    g_enabled = CreateConVar("sm_parachute_enabled","1");
    g_fallspeed = CreateConVar("sm_parachute_fallspeed","100");
    g_linear = CreateConVar("sm_parachute_linear","1");
    g_msgtype = CreateConVar("sm_parachute_msgtype","1");
    g_cost = CreateConVar("sm_parachute_cost","0");
    g_payback = CreateConVar("sm_parachute_payback","75");
    g_welcome = CreateConVar("sm_parachute_welcome","0");
    g_roundmsg = CreateConVar("sm_parachute_roundmsg","0");
    g_version = CreateConVar("sm_parachute_version", PARACHUTE_VERSION,    "SM Parachute Version", FCVAR_NOTIFY);
    g_model = CreateConVar("sm_parachute_model","0");
    g_decrease = CreateConVar("sm_parachute_decrease","50");
    g_button = CreateConVar("sm_parachute_button","1");
    g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
    g_iMoney = FindSendPropOffs("CCSPlayer", "m_iAccount");
    g_maxplayers = GetMaxClients();
    SetConVarString(g_version, PARACHUTE_VERSION);
    
    InitGameMode();
    
    RegConsoleCmd("say",HandleSay,"",FCVAR_GAMEDLL);
    RegConsoleCmd("say_team",HandleSay,"",FCVAR_GAMEDLL);
    HookEvent("player_death",PlayerDeath);
    HookEvent("player_spawn",PlayerSpawn);
    HookConVarChange(g_enabled, CvarChange_Enabled);
    HookConVarChange(g_linear, CvarChange_Linear);
    HookConVarChange(g_cost, CvarChange_Cost);
    HookConVarChange(g_model, CvarChange_Model);
    HookConVarChange(g_button, CvarChange_Button);

    //CreateTimer(5.0, Timer_Copy, _, TIMER_REPEAT); 
}

public Action:Timer_Copy(Handle:timer)
{
    PrintToChatAll("\x01[\x04DEMO\x01]\x04 PLUGIN DEMO PLUGIN DEMOPLUGIN DEMOPLUGIN DEMO");
}  

public OnPluginEnd(){
    CloseHandle(g_fallspeed);
    CloseHandle(g_enabled);
    CloseHandle(g_linear);
    CloseHandle(g_msgtype);
    CloseHandle(g_cost);
    CloseHandle(g_payback);
    CloseHandle(g_welcome);
    CloseHandle(g_roundmsg);
    CloseHandle(g_version);
    CloseHandle(g_model);
    CloseHandle(g_decrease);
}

public InitGameMode(){
    GetGameFolderName(g_game, 29);
    if(StrEqual(g_game,"tf",false)){
        SetConVarInt(g_button,2);
        SetButton(2);
    }
    else{
        SetButton(1);
    }
}

public OnMapStart(){
    //new String:path[256];
}

public OnEventShutdown()
{
    UnhookEvent("player_death",PlayerDeath);
    UnhookEvent("player_spawn",PlayerSpawn);
}

public OnClientPutInServer(client)
{
    inUse[client] = false;
    hasPara[client] = false;
    hasModel[client] = false;
    hasAccess[client] = false;
    g_maxplayers = GetMaxClients();
    CreateTimer (20.0, WelcomeMsg, client);
}

public OnClientPostAdminCheck(client)
{
    hasAccess[client] = IsPlayerGenericAdmin(client);
}

public OnClientDisconnect(client){
    g_maxplayers = GetMaxClients();
    CloseParachute(client);
}

public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetConVarInt(g_cost) == 0){
        CreateTimer (1.0, RoundMsg, client);
    }
    return Plugin_Continue;
}

public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    hasPara[client] = false;
    EndPara(client);
    return Plugin_Continue;
}

public Action:RoundMsg(Handle:timer, any:client){
    if(GetConVarInt(g_roundmsg) == 1){
        if(IsClientConnected (client) && IsClientInGame(client))
            PrintMsg(client,"Have Got Free Parachute");
    }
    return Plugin_Continue;
}

public StartPara(client,bool:open)
{
    decl Float:velocity[3];
    decl Float:fallspeed;
    if (g_iVelocity == -1) return;
    if((GetConVarInt(g_enabled)== 1 && hasPara[client]) || (GetConVarInt(g_enabled) == 1 && GetConVarInt(g_cost) == 0)){
        fallspeed = GetConVarFloat(g_fallspeed)*(-1.0);
        GetEntDataVector(client, g_iVelocity, velocity);
        if(velocity[2] >= fallspeed){
            isfallspeed = true;
        }
        if(velocity[2] < 0.0) {
            if(isfallspeed && GetConVarInt(g_linear) == 0){
            }
            else if((isfallspeed && GetConVarInt(g_linear) == 1) || GetConVarFloat(g_decrease) == 0.0){
                velocity[2] = fallspeed;
            }
            else{
                velocity[2] = velocity[2] + GetConVarFloat(g_decrease);
            }
            TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
            SetEntDataVector(client, g_iVelocity, velocity);
            SetEntityGravity(client,0.1);
            if(open) OpenParachute(client);
        }
    }
}

public EndPara(client)
{
    if(GetConVarInt(g_enabled)== 1 ){
        SetEntityGravity(client,1.0);
        inUse[client]=false;
        CloseParachute(client);
    }
}

public OpenParachute(client){
    decl String:path[256];
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    
    if(GetConVarInt(g_model) == 1){
        Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
        DispatchKeyValue(Parachute_Ent[client],"model",path);
        SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
        DispatchSpawn(Parachute_Ent[client]);
        
        hasModel[client]=true;
        TeleportParachute(client);
    }
}

public TeleportParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        decl Float:Client_Origin[3];
        decl Float:Client_Angles[3];
        decl Float:Parachute_Angles[3] = {0.0, 0.0, 0.0};
        GetClientAbsOrigin(client,Client_Origin);
        GetClientAbsAngles(client,Client_Angles);
        Parachute_Angles[1] = Client_Angles[1];
        TeleportEntity(Parachute_Ent[client], Client_Origin, Parachute_Angles, NULL_VECTOR);
    }
}

public CloseParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        RemoveEdict(Parachute_Ent[client]);
        hasModel[client]=false;
    }
}

public Check(client){
    if(GetConVarInt(g_enabled)== 1 ){
        GetEntDataVector(client,g_iVelocity,speed);
        cl_flags = GetEntityFlags(client);
        if(speed[2] >= 0 || (cl_flags & FL_ONGROUND)) EndPara(client);
    }
}

public OnGameFrame()
{
    if(GetConVarInt(g_enabled) == 0) return;
    for (x = 1; x <= g_maxplayers; x++)
    {
        if (IsClientInGame(x) && IsPlayerAlive(x) && hasAccess[x])
        {
            cl_buttons = GetClientButtons(x);
            if (cl_buttons & USE_BUTTON)
            {
                if (!inUse[x])
                {
                    inUse[x] = true;
                    isfallspeed = false;
                    StartPara(x,true);
                }
                StartPara(x,false);
                TeleportParachute(x);
            }
            else
            {
                if (inUse[x])
                {
                    inUse[x] = false;
                    EndPara(x);
                }
            }
            Check(x);
        }
    }
}

stock GetNextSpaceCount(String:text[],CurIndex){
    new Count=0;
    new len = strlen(text);
    for(new i=CurIndex;i<len;i++){
        if(text[i] == ' ') return Count;
        else Count++;
    }
    return Count;
}

stock SendHintText(client, String:text[], any:...){
    new String:message[192];

    VFormat(message,191,text, 2);
    new len = strlen(message);
    if(len > 30){
        new LastAdded=0;
        
        for(new i=0;i<len;i++){
            if((message[i]==' ' && LastAdded > 30 && (len-i) > 10) || ((GetNextSpaceCount(text,i+1) + LastAdded)  > 34)){
                message[i] = '\n';
                LastAdded = 0;
            }
            else LastAdded++;
        }
    }
    new Handle:HintMessage = StartMessageOne("HintText",client);
    if (GetUserMessageType() == UM_Protobuf)
        PbSetString(HintMessage, "text", message);
    else
    {   
        BfWriteByte(HintMessage,-1);
        BfWriteString(HintMessage,message);
    }
    EndMessage();
}

public PrintMsg(client,String:msg[]){
    new String:translation[256];
    if(GetConVarInt(g_enabled) == 0) return;
    Format(translation, 255, "%T", msg, LANG_SERVER, ButtonText);
    if(GetConVarInt(g_msgtype) == 1){        
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %s", translation);
    }
    else if(GetConVarInt(g_msgtype) == 2) {
        new Handle:panel = CreatePanel();
        DrawPanelText(panel,translation);
        SendPanelToClient(panel,client,PanelHandle,5);
    }
    else if(GetConVarInt(g_msgtype) == 3){
        SendHintText(client,translation);
    }
}

public PanelHandle(Handle:menu, MenuAction:action, param1, param2){
}

public BuyParachute(client){
    new money;
    new cost;
    if (g_iMoney == -1) return;
    if (hasPara[client] == false){
        money = GetEntData(client,g_iMoney);
        cost = GetConVarInt(g_cost);
        if (cost == 0){
            PrintMsg(client,"Have Free Parachute");
        }
        else{
            if((money - cost)<0){
                PrintMsg(client,"No Money");
            }
            else{
                hasPara[client] = true;
                SetEntData(client,g_iMoney,money-cost);
                PrintMsg(client,"Have Bought Parachute");
            }
        }
    }
    else{
        PrintMsg(client,"Have Parachute");
    }
    
}

public SellParachute(client){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = GetConVarInt(g_cost)*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
        PrintMsg(client,"Sold Parachute");
    }
    else{
        if (GetConVarInt(g_cost)==0){
            PrintMsg(client,"Sell Free Parachute");
        }
        else{
            PrintMsg(client,"No Parachute");
        }
    }
}

public Action:HandleSay(client, args){
    new String:line[30];
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;
    if (args > 0){
        GetCmdArg(1,line,sizeof(line));
        if (strcmp(g_game,"cstrike",false)==0){
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) BuyParachute(client);
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) SellParachute(client);
        }
        else{
            SetConVarInt(g_cost,0);
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) PrintMsg(client,"Have Free Parachute");
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) PrintMsg(client,"Sell Free Parachute");
        }
    }
    return Plugin_Continue;
}


public Action:WelcomeMsg (Handle:timer, any:client)
{
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;

    if (GetConVarInt (g_welcome) == 1 && IsClientConnected (client) && IsClientInGame (client))
    {
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Welcome", LANG_SERVER);
        if (GetConVarInt(g_cost)==0){
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
        }
        else{
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
        }
    }
    return Plugin_Continue;
}


public CvarChange_Enabled(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]){
                    SetEntityGravity(client,1.0);
                    SetEntityMoveType(client,MOVETYPE_WALK);
                    SellParachuteOff(client,GetConVarInt(g_cost));
                }
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Disabled", LANG_SERVER);
            }
        }
    }
    else{
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Enabled", LANG_SERVER);
                if (GetConVarInt(g_cost)==0){
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
                }
                else{
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
                }
            }
        }
    }
}

public CvarChange_Linear(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client) && hasPara[client]){
                SetEntityMoveType(client,MOVETYPE_WALK);
            }
        }
    }
}

public CvarChange_Cost(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]) SellParachuteOff(client,StringToInt(oldvalue));
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
            }
        }
    }
    else{
        if (strcmp(g_game,"cstrike",false) != 0) SetConVarInt(g_cost,0);
    }
}

public CvarChange_Button(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 1){
        SetButton(1);
    }
    else if(StringToInt(newvalue) == 2){
        SetButton(2);
    }
}

public CvarChange_Model(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                CloseParachute(client);
            }
        }
    }
}

public SellParachuteOff(client,cost){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = cost*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
    }
}

public SetButton(button){
    if (button == 1){
        USE_BUTTON = IN_USE;
        ButtonText = "E";
    }
    else if(button == 2){
        USE_BUTTON = IN_JUMP;
        ButtonText = "Space";
    }
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
    if(CheckCommandAccess(client, "", ADMFLAG_CUSTOM1, ADMFLAG_CUSTOM5))
    {
        return true;
    }
    return false;
}

 

sm_parachute.phrases.txt
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! pog.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
3 godziny temu, Sqower napisał:
 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

#include <sourcemod>
#include <sdktools>

#define PARACHUTE_VERSION     "2.5.1"

//Parachute Model
//#define PARACHUTE_MODEL        "parachute_carbon"

//Parachute Textures
//#define PARACHUTE_PACK        "pack_carbon"
//#define PARACHUTE_TEXTURE    "parachute_carbon"

new g_iVelocity = -1;
new g_iMoney = -1;
new g_maxplayers = -1;

new String:g_game[30];
new String:path_model[256];
//new String:path_pack[256];
//new String:path_texture[256];

new Handle:g_fallspeed = INVALID_HANDLE;
new Handle:g_enabled = INVALID_HANDLE;
new Handle:g_linear = INVALID_HANDLE;
new Handle:g_msgtype = INVALID_HANDLE;
new Handle:g_cost = INVALID_HANDLE;
new Handle:g_payback = INVALID_HANDLE;
new Handle:g_welcome = INVALID_HANDLE;
new Handle:g_roundmsg = INVALID_HANDLE;
new Handle:g_version = INVALID_HANDLE;
new Handle:g_model = INVALID_HANDLE;
new Handle:g_decrease = INVALID_HANDLE;
new Handle:g_button = INVALID_HANDLE;

new x;
new cl_flags;
new cl_buttons;
new Float:speed[3];
new bool:isfallspeed;

new USE_BUTTON;
new String:ButtonText[265];

new bool:inUse[MAXPLAYERS+1];
new bool:hasPara[MAXPLAYERS+1];
new bool:hasModel[MAXPLAYERS+1];
new bool:hasAccess[MAXPLAYERS+1];
new Parachute_Ent[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "SM Parachute",
    author = "SWAT_88 edited by pTu",
    description = "To use your parachute press and hold your E(+use) button while falling.",
    version = PARACHUTE_VERSION,
    url = "http://www.sourcemod.net/
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!
"
};

public OnPluginStart()
{
    LoadTranslations ("sm_parachute.phrases");

    g_enabled = CreateConVar("sm_parachute_enabled","1");
    g_fallspeed = CreateConVar("sm_parachute_fallspeed","100");
    g_linear = CreateConVar("sm_parachute_linear","1");
    g_msgtype = CreateConVar("sm_parachute_msgtype","1");
    g_cost = CreateConVar("sm_parachute_cost","0");
    g_payback = CreateConVar("sm_parachute_payback","75");
    g_welcome = CreateConVar("sm_parachute_welcome","0");
    g_roundmsg = CreateConVar("sm_parachute_roundmsg","0");
    g_version = CreateConVar("sm_parachute_version", PARACHUTE_VERSION,    "SM Parachute Version", FCVAR_NOTIFY);
    g_model = CreateConVar("sm_parachute_model","0");
    g_decrease = CreateConVar("sm_parachute_decrease","50");
    g_button = CreateConVar("sm_parachute_button","1");
    g_iVelocity = FindSendPropOffs("CBasePlayer", "m_vecVelocity[0]");
    g_iMoney = FindSendPropOffs("CCSPlayer", "m_iAccount");
    g_maxplayers = GetMaxClients();
    SetConVarString(g_version, PARACHUTE_VERSION);
    
    InitGameMode();
    
    RegConsoleCmd("say",HandleSay,"",FCVAR_GAMEDLL);
    RegConsoleCmd("say_team",HandleSay,"",FCVAR_GAMEDLL);
    HookEvent("player_death",PlayerDeath);
    HookEvent("player_spawn",PlayerSpawn);
    HookConVarChange(g_enabled, CvarChange_Enabled);
    HookConVarChange(g_linear, CvarChange_Linear);
    HookConVarChange(g_cost, CvarChange_Cost);
    HookConVarChange(g_model, CvarChange_Model);
    HookConVarChange(g_button, CvarChange_Button);

    //CreateTimer(5.0, Timer_Copy, _, TIMER_REPEAT); 
}

public Action:Timer_Copy(Handle:timer)
{
    PrintToChatAll("\x01[\x04DEMO\x01]\x04 PLUGIN DEMO PLUGIN DEMOPLUGIN DEMOPLUGIN DEMO");
}  

public OnPluginEnd(){
    CloseHandle(g_fallspeed);
    CloseHandle(g_enabled);
    CloseHandle(g_linear);
    CloseHandle(g_msgtype);
    CloseHandle(g_cost);
    CloseHandle(g_payback);
    CloseHandle(g_welcome);
    CloseHandle(g_roundmsg);
    CloseHandle(g_version);
    CloseHandle(g_model);
    CloseHandle(g_decrease);
}

public InitGameMode(){
    GetGameFolderName(g_game, 29);
    if(StrEqual(g_game,"tf",false)){
        SetConVarInt(g_button,2);
        SetButton(2);
    }
    else{
        SetButton(1);
    }
}

public OnMapStart(){
    //new String:path[256];
}

public OnEventShutdown()
{
    UnhookEvent("player_death",PlayerDeath);
    UnhookEvent("player_spawn",PlayerSpawn);
}

public OnClientPutInServer(client)
{
    inUse[client] = false;
    hasPara[client] = false;
    hasModel[client] = false;
    hasAccess[client] = false;
    g_maxplayers = GetMaxClients();
    CreateTimer (20.0, WelcomeMsg, client);
}

public OnClientPostAdminCheck(client)
{
    hasAccess[client] = IsPlayerGenericAdmin(client);
}

public OnClientDisconnect(client){
    g_maxplayers = GetMaxClients();
    CloseParachute(client);
}

public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (GetConVarInt(g_cost) == 0){
        CreateTimer (1.0, RoundMsg, client);
    }
    return Plugin_Continue;
}

public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast){
    new client;
    client = GetClientOfUserId(GetEventInt(event, "userid"));
    hasPara[client] = false;
    EndPara(client);
    return Plugin_Continue;
}

public Action:RoundMsg(Handle:timer, any:client){
    if(GetConVarInt(g_roundmsg) == 1){
        if(IsClientConnected (client) && IsClientInGame(client))
            PrintMsg(client,"Have Got Free Parachute");
    }
    return Plugin_Continue;
}

public StartPara(client,bool:open)
{
    decl Float:velocity[3];
    decl Float:fallspeed;
    if (g_iVelocity == -1) return;
    if((GetConVarInt(g_enabled)== 1 && hasPara[client]) || (GetConVarInt(g_enabled) == 1 && GetConVarInt(g_cost) == 0)){
        fallspeed = GetConVarFloat(g_fallspeed)*(-1.0);
        GetEntDataVector(client, g_iVelocity, velocity);
        if(velocity[2] >= fallspeed){
            isfallspeed = true;
        }
        if(velocity[2] < 0.0) {
            if(isfallspeed && GetConVarInt(g_linear) == 0){
            }
            else if((isfallspeed && GetConVarInt(g_linear) == 1) || GetConVarFloat(g_decrease) == 0.0){
                velocity[2] = fallspeed;
            }
            else{
                velocity[2] = velocity[2] + GetConVarFloat(g_decrease);
            }
            TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, velocity);
            SetEntDataVector(client, g_iVelocity, velocity);
            SetEntityGravity(client,0.1);
            if(open) OpenParachute(client);
        }
    }
}

public EndPara(client)
{
    if(GetConVarInt(g_enabled)== 1 ){
        SetEntityGravity(client,1.0);
        inUse[client]=false;
        CloseParachute(client);
    }
}

public OpenParachute(client){
    decl String:path[256];
    strcopy(path,255,path_model);
    StrCat(path,255,".mdl")
    
    if(GetConVarInt(g_model) == 1){
        Parachute_Ent[client] = CreateEntityByName("prop_dynamic_override");
        DispatchKeyValue(Parachute_Ent[client],"model",path);
        SetEntityMoveType(Parachute_Ent[client], MOVETYPE_NOCLIP);
        DispatchSpawn(Parachute_Ent[client]);
        
        hasModel[client]=true;
        TeleportParachute(client);
    }
}

public TeleportParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        decl Float:Client_Origin[3];
        decl Float:Client_Angles[3];
        decl Float:Parachute_Angles[3] = {0.0, 0.0, 0.0};
        GetClientAbsOrigin(client,Client_Origin);
        GetClientAbsAngles(client,Client_Angles);
        Parachute_Angles[1] = Client_Angles[1];
        TeleportEntity(Parachute_Ent[client], Client_Origin, Parachute_Angles, NULL_VECTOR);
    }
}

public CloseParachute(client){
    if(hasModel[client] && IsValidEntity(Parachute_Ent[client])){
        RemoveEdict(Parachute_Ent[client]);
        hasModel[client]=false;
    }
}

public Check(client){
    if(GetConVarInt(g_enabled)== 1 ){
        GetEntDataVector(client,g_iVelocity,speed);
        cl_flags = GetEntityFlags(client);
        if(speed[2] >= 0 || (cl_flags & FL_ONGROUND)) EndPara(client);
    }
}

public OnGameFrame()
{
    if(GetConVarInt(g_enabled) == 0) return;
    for (x = 1; x <= g_maxplayers; x++)
    {
        if (IsClientInGame(x) && IsPlayerAlive(x) && hasAccess[x])
        {
            cl_buttons = GetClientButtons(x);
            if (cl_buttons & USE_BUTTON)
            {
                if (!inUse[x])
                {
                    inUse[x] = true;
                    isfallspeed = false;
                    StartPara(x,true);
                }
                StartPara(x,false);
                TeleportParachute(x);
            }
            else
            {
                if (inUse[x])
                {
                    inUse[x] = false;
                    EndPara(x);
                }
            }
            Check(x);
        }
    }
}

stock GetNextSpaceCount(String:text[],CurIndex){
    new Count=0;
    new len = strlen(text);
    for(new i=CurIndex;i<len;i++){
        if(text[i] == ' ') return Count;
        else Count++;
    }
    return Count;
}

stock SendHintText(client, String:text[], any:...){
    new String:message[192];

    VFormat(message,191,text, 2);
    new len = strlen(message);
    if(len > 30){
        new LastAdded=0;
        
        for(new i=0;i<len;i++){
            if((message[i]==' ' && LastAdded > 30 && (len-i) > 10) || ((GetNextSpaceCount(text,i+1) + LastAdded)  > 34)){
                message[i] = '\n';
                LastAdded = 0;
            }
            else LastAdded++;
        }
    }
    new Handle:HintMessage = StartMessageOne("HintText",client);
    if (GetUserMessageType() == UM_Protobuf)
        PbSetString(HintMessage, "text", message);
    else
    {   
        BfWriteByte(HintMessage,-1);
        BfWriteString(HintMessage,message);
    }
    EndMessage();
}

public PrintMsg(client,String:msg[]){
    new String:translation[256];
    if(GetConVarInt(g_enabled) == 0) return;
    Format(translation, 255, "%T", msg, LANG_SERVER, ButtonText);
    if(GetConVarInt(g_msgtype) == 1){        
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %s", translation);
    }
    else if(GetConVarInt(g_msgtype) == 2) {
        new Handle:panel = CreatePanel();
        DrawPanelText(panel,translation);
        SendPanelToClient(panel,client,PanelHandle,5);
    }
    else if(GetConVarInt(g_msgtype) == 3){
        SendHintText(client,translation);
    }
}

public PanelHandle(Handle:menu, MenuAction:action, param1, param2){
}

public BuyParachute(client){
    new money;
    new cost;
    if (g_iMoney == -1) return;
    if (hasPara[client] == false){
        money = GetEntData(client,g_iMoney);
        cost = GetConVarInt(g_cost);
        if (cost == 0){
            PrintMsg(client,"Have Free Parachute");
        }
        else{
            if((money - cost)<0){
                PrintMsg(client,"No Money");
            }
            else{
                hasPara[client] = true;
                SetEntData(client,g_iMoney,money-cost);
                PrintMsg(client,"Have Bought Parachute");
            }
        }
    }
    else{
        PrintMsg(client,"Have Parachute");
    }
    
}

public SellParachute(client){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = GetConVarInt(g_cost)*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
        PrintMsg(client,"Sold Parachute");
    }
    else{
        if (GetConVarInt(g_cost)==0){
            PrintMsg(client,"Sell Free Parachute");
        }
        else{
            PrintMsg(client,"No Parachute");
        }
    }
}

public Action:HandleSay(client, args){
    new String:line[30];
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;
    if (args > 0){
        GetCmdArg(1,line,sizeof(line));
        if (strcmp(g_game,"cstrike",false)==0){
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) BuyParachute(client);
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) SellParachute(client);
        }
        else{
            SetConVarInt(g_cost,0);
            if (StrEqual(line, "!bp", false) || StrEqual(line, "!buy_parachute", false)) PrintMsg(client,"Have Free Parachute");
            else if(StrEqual(line, "!sp", false) || StrEqual(line, "!sell_parachute", false)) PrintMsg(client,"Sell Free Parachute");
        }
    }
    return Plugin_Continue;
}


public Action:WelcomeMsg (Handle:timer, any:client)
{
    if(GetConVarInt(g_enabled) == 0) return Plugin_Continue;

    if (GetConVarInt (g_welcome) == 1 && IsClientConnected (client) && IsClientInGame (client))
    {
        PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Welcome", LANG_SERVER);
        if (GetConVarInt(g_cost)==0){
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
        }
        else{
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
            PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
        }
    }
    return Plugin_Continue;
}


public CvarChange_Enabled(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]){
                    SetEntityGravity(client,1.0);
                    SetEntityMoveType(client,MOVETYPE_WALK);
                    SellParachuteOff(client,GetConVarInt(g_cost));
                }
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Disabled", LANG_SERVER);
            }
        }
    }
    else{
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Enabled", LANG_SERVER);
                if (GetConVarInt(g_cost)==0){
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
                }
                else{
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Buy Help", LANG_SERVER);
                    PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Sell Help", LANG_SERVER);
                }
            }
        }
    }
}

public CvarChange_Linear(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client) && hasPara[client]){
                SetEntityMoveType(client,MOVETYPE_WALK);
            }
        }
    }
}

public CvarChange_Cost(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                if (hasPara[client]) SellParachuteOff(client,StringToInt(oldvalue));
                PrintToChat(client,"\x01\x04[SM Parachute]\x01 %T", "Parachute For Everyone", LANG_SERVER);
            }
        }
    }
    else{
        if (strcmp(g_game,"cstrike",false) != 0) SetConVarInt(g_cost,0);
    }
}

public CvarChange_Button(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 1){
        SetButton(1);
    }
    else if(StringToInt(newvalue) == 2){
        SetButton(2);
    }
}

public CvarChange_Model(Handle:cvar, const String:oldvalue[], const String:newvalue[]){
    if (StringToInt(newvalue) == 0){
        for (new client = 1; client <= g_maxplayers; client++){
            if (IsClientInGame(client) && IsPlayerAlive(client)){
                CloseParachute(client);
            }
        }
    }
}

public SellParachuteOff(client,cost){
    new money;
    new Float:payback;
    new String:pb[10];
    if (g_iMoney == -1) return;
    if (hasPara[client] == true){
        money = GetEntData(client,g_iMoney);
        payback = cost*(GetConVarFloat(g_payback)/100);
        if ((money + payback) > 16000){
            SetEntData(client,g_iMoney,16000);
        }
        else{
            FloatToString(payback,pb,9);
            SetEntData(client,g_iMoney,money+StringToInt(pb));
        }
        hasPara[client] = false;
    }
}

public SetButton(button){
    if (button == 1){
        USE_BUTTON = IN_USE;
        ButtonText = "E";
    }
    else if(button == 2){
        USE_BUTTON = IN_JUMP;
        ButtonText = "Space";
    }
}

/*
@param client id

return bool
*/
bool:IsPlayerGenericAdmin(client)
{
    if(CheckCommandAccess(client, "", ADMFLAG_CUSTOM1, ADMFLAG_CUSTOM5))
    {
        return true;
    }
    return false;
}

 

sm_parachute.phrases.txt 4 kB · 1 pobranie
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! pog.smx 14 kB · 0 pobrań
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Niestety plugin jest uruchomiony lecz nie działa spadochron. W konsoli nie zauważyłem błędów.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
2 godziny temu, cyziek napisał:

Niestety plugin jest uruchomiony lecz nie działa spadochron. W konsoli nie zauważyłem błędów.

Mi wszystko działa ustawiłeś sobie flage ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...