Konu

#1
Bu kodları yazdım. Eklentinin amacı ilk 3 round hariç steam grup üyelerine para zırh armor verdirmek. Grup üyelerini swgm eklentisi tespit ediyor. Bende swgm kütüphanesini kullandım. Bu kodları optimize etmede yardım eder misiniz?

Repo:  https://github.com/SourceTurk/swgm-module/tree/master/scripting

Kod:
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <2SteamWorks>
#include <SWGM>
#include <multicolors>

#pragma semicolon 1
#pragma newdecls required

Handle RoundStartMoney;
ConVar g_groupmessage;
int iRoundStartMoney;

public Plugin myinfo =
{
    name = "Round start money",
    author = "northeaster",
    description = "eski nickim lazhoroni ile github'a ilk olarak kaydedilmiştir. swgm 1.7 için yapılmıştır.",
    version = "1.0.2",
    url = "https://forum.sourceturk.net"
};

public void OnPluginStart()
{
    HookEvent("round_start", OnRoundStart);
    RoundStartMoney = CreateConVar("swgm_round_start_money", "650", "Round start money");
    g_groupmessage = CreateConVar("swgm_round_start_chat_message", "1", "0 = Disable, 1 = Enable", 0, true, 0.0, true, 1.0);
    AutoExecConfig(true, "swgm_round_start_money");
    LoadTranslations("swgm_round_start_money.phrases");
}

public void OnMapStart()
{
    iRoundStartMoney = GetConVarInt(RoundStartMoney);
}

public Action OnRoundStart(Handle hEvent, const char[] Name, bool dontbroadcast)
{
    if (GameRules_GetProp("m_bWarmupPeriod") != 0)
    {
        return;
    }
    
    for (int iClient = 1; iClient <= MaxClients; iClient++)
    {
        if(IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            if (IsRoundBlah(GetCurrentRound()))
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 1", iRoundStartMoney);
                        CPrintToChat(iClient, "%t", "Message 2");
                    }
                }
                else if(SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 3", iRoundStartMoney);
                    }
                    SetEntProp(iClient, Prop_Send, "m_bHasHelmet", 100);
                    SetEntProp(iClient, Prop_Send, "m_ArmorValue", 100);
                    int money = GetEntProp(iClient, Prop_Send, "m_iAccount");
                    money = money + iRoundStartMoney;
                    Handle maxmoney = FindConVar("mp_maxmoney");
                    if (money > GetConVarInt(maxmoney))
                    {
                        money = GetConVarInt(maxmoney);
                    }
                    SetEntProp(iClient, Prop_Send, "m_iAccount", money);
                }
            }
            else
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 1", iRoundStartMoney);
                        CPrintToChat(iClient, "%t", "Message 2");
                    }
                }
                else if(SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 4", iRoundStartMoney);
                    }
                }
            }
        }
    }    
}

bool IsRoundBlah(int iRound)
{
    return iRound != 1 && iRound != 2 && iRound != 3 && iRound != 16 && iRound != 17 && iRound != 18;
}

int GetCurrentRound()
{
    return CS_GetTeamScore(CS_TEAM_T) + CS_GetTeamScore(CS_TEAM_CT) + 1;
}

#2
Şuanda bu eklenti sorunsuz şekilde çalışıyormu? Ona göre işlem yapacağım
#3
(13-02-2020, 13:51)MawiLarq Adlı Kullanıcıdan Alıntı: Şuanda bu eklenti sorunsuz şekilde çalışıyormu? Ona göre işlem yapacağım
Evet sorunsuz çalışıyor.
#4
Optimize edilecek bişey görmedim sadece
PHP Kod:
else if(SWGM_InGroup(iClient)) 
yerine
PHP Kod:
else 
Else if orada gereksiz
#5
Kod:
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <2SteamWorks>
#include <SWGM>
#include <multicolors>
#pragma semicolon 1
#pragma newdecls required
Handle RoundStartMoney;
ConVar g_groupmessage;
int iRoundStartMoney;
public Plugin myinfo =
{
    name = "Round start money",
    author = "northeaster",
    description = "eski nickim lazhoroni ile github'a ilk olarak kaydedilmiştir. swgm 1.7 için yapılmıştır.",
    version = "1.0.2",
    url = "https://forum.sourceturk.net"
};
public void OnPluginStart()
{
    HookEvent("round_start", OnRoundStart);
    RoundStartMoney = CreateConVar("swgm_round_start_money", "650", "Round start money");
    g_groupmessage = CreateConVar("swgm_round_start_chat_message", "1", "0 = Disable, 1 = Enable", 0, true, 0.0, true, 1.0);
    AutoExecConfig(true, "swgm_round_start_money");
    LoadTranslations("swgm_round_start_money.phrases");
}
public void OnMapStart()
{
    iRoundStartMoney = GetConVarInt(RoundStartMoney);
}
public Action OnRoundStart(Handle hEvent, const char[] Name, bool dontbroadcast)
{
    if (GameRules_GetProp("m_bWarmupPeriod") != 0)
    {
        return;
    }
    for (int iClient = 1; iClient <= MaxClients; iClient++)
    {
        if(IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            if (IsRoundBlah(GetCurrentRound()))
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 1", iRoundStartMoney);
                        CPrintToChat(iClient, "%t", "Message 2");
                    }
                }
                else
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 3", iRoundStartMoney);
                    }
                    SetEntProp(iClient, Prop_Send, "m_bHasHelmet", 100);
                    SetEntProp(iClient, Prop_Send, "m_ArmorValue", 100);
                    int money = GetEntProp(iClient, Prop_Send, "m_iAccount");
                    money = money + iRoundStartMoney;
                    Handle maxmoney = FindConVar("mp_maxmoney");
                    if (money > GetConVarInt(maxmoney))
                    {
                        money = GetConVarInt(maxmoney);
                    }
                    SetEntProp(iClient, Prop_Send, "m_iAccount", money);
                }
            }
            else
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 1", iRoundStartMoney);
                        CPrintToChat(iClient, "%t", "Message 2");
                    }
                }
                else
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient, "%t", "Message 4", iRoundStartMoney);
                    }
                }
            }
        }
    }   
}
bool IsRoundBlah(int iRound)
{
    return iRound != 1 && iRound != 2 && iRound != 3 && iRound != 16 && iRound != 17 && iRound != 18;
}
int GetCurrentRound()
{
    return CS_GetTeamScore(CS_TEAM_T) + CS_GetTeamScore(CS_TEAM_CT) + 1;
}

Böyle yaptık, tamam.

Kod:
bool IsRoundBlah(int iRound)
{
    return iRound != 1 && iRound != 2 && iRound != 3 && iRound != 16 && iRound != 17 && iRound != 18;
}
int GetCurrentRound()
{
    return CS_GetTeamScore(CS_TEAM_T) + CS_GetTeamScore(CS_TEAM_CT) + 1;
}

Burada hangi round olduğunu çekip, roundları ayarlıyorum. Bunu cvara bağlamayı yapar mısınız?
#6
PHP Kod:
#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <2SteamWorks>
#include <SWGM>
#include <multicolors>

#pragma semicolon 1
#pragma newdecls required

Handle RoundStartMoney;
ConVar g_groupmessage,cvar_round1
int iRoundStartMoney
;

public 
Plugin myinfo =
{
    name "Round start money",
    author "northeaster",
    description "eski nickim lazhoroni ile github'a ilk olarak kaydedilmiştir. swgm 1.7 için yapılmıştır.",
    version "1.0.2",
    url "https://forum.sourceturk.net"
};

public 
void OnPluginStart()
{
    HookEvent("round_start"OnRoundStart);
    RoundStartMoney CreateConVar("swgm_round_start_money""650""Round start money");
    g_groupmessage CreateConVar("swgm_round_start_chat_message""1""0 = Disable, 1 = Enable"0true0.0true1.0);
    cvar_round1 CreateConVar("cvar_round1""1""Aciklama"0);
    AutoExecConfig(true"swgm_round_start_money");
    LoadTranslations("swgm_round_start_money.phrases");
}

public 
void OnMapStart()
{
    iRoundStartMoney GetConVarInt(RoundStartMoney);
}

public 
Action OnRoundStart(Handle hEvent, const char[] Namebool dontbroadcast)
{
    if (GameRules_GetProp("m_bWarmupPeriod") != 0)
    {
        return;
    }
    
    
for (int iClient 1iClient <= MaxClientsiClient++)
    {
        if(IsClientInGame(iClient) && !IsFakeClient(iClient))
        {
            if (IsRoundBlah(GetCurrentRound()))
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient"%t""Message 1"iRoundStartMoney);
                        CPrintToChat(iClient"%t""Message 2");
                    }
                }
                else if(SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient"%t""Message 3"iRoundStartMoney);
                    }
                    SetEntProp(iClientProp_Send"m_bHasHelmet"100);
                    SetEntProp(iClientProp_Send"m_ArmorValue"100);
                    int money GetEntProp(iClientProp_Send"m_iAccount");
                    money money iRoundStartMoney;
                    Handle maxmoney FindConVar("mp_maxmoney");
                    if (money GetConVarInt(maxmoney))
                    {
                        money GetConVarInt(maxmoney);
                    }
                    SetEntProp(iClientProp_Send"m_iAccount"money);
                }
            }
            else
            {
                if(!SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient"%t""Message 1"iRoundStartMoney);
                        CPrintToChat(iClient"%t""Message 2");
                    }
                }
                else if(SWGM_InGroup(iClient))
                {
                    if (g_groupmessage.IntValue == 1)
                    {
                        CPrintToChat(iClient"%t""Message 4"iRoundStartMoney);
                    }
                }
            }
        }
    }    
}

bool IsRoundBlah(int iRound)
{
    return iRound != GetConVarInt(cvar_round1) && iRound != && iRound != && iRound != 16 && iRound != 17 && iRound != 18;
}

int GetCurrentRound()
{
    return CS_GetTeamScore(CS_TEAM_T) + CS_GetTeamScore(CS_TEAM_CT) + 1;

Bir tane örnek yaptım gerisini halledersin
#7
Mesela; cvar_round1 cvarını 1;2;3;15;16;17 ayarlasak, otomatik o roundlar haricine çalışsa diye düşündüm ben. Yapabilir misin?
#8
Cvar tek bir değer alır.Hepsi için ayrı cvar ayarlamalısın
#9
Kod:
g_hFreeArmorElSayisi = CreateConVar("drk_freearmor_elsayisi", "2", "Kaçıncı elde sistem açılsın?");

if(((GetTeamScore(2) + GetTeamScore(3)) >= iElSayisi && ((GetTeamScore(2) + GetTeamScore(3)) % 15 != 0) && ((GetTeamScore(2) + GetTeamScore(3)) % 15 != 1)))

Bu eklentideki kodları kullanabilir miyiz? Benim isteğimde zaten ilk 3 round u iptal etmesi. Yarı bittikten sonraki 3 round da iptal olacak.
#10
Kullanırsın sıkıntı olmaz

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

Yorum yapmak için üye olmanız gerekiyor

ya da
Task
Kayıt Ol
Discord Adresimize Katılın