[SourcePawn] Уроки (Содержание)

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
#include <sourcemod>

public OnPluginStart()
{
new Handle:kv = CreateKeyValues("WeaponGroup");
KvJumpToKey(kv, "NameWeapon", true);
KvSetString(kv, "name", "weapon_ak47");
KvRewind(kv);

KeyValuesToFile(kv, "weapon.txt");
CloseHandle(kv);
}
Должно получится так:
"WeaponGroup"
{
"NameWeapon"
{
"name" "weapon_ak47"
}
}
Теперь я не пойму как получить данные и вставить их в нужные строки.

GivePlayerItem(client, "сюда нужно вставить то что будет написано в weapon.txt");
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #63
@DenisPukin,
PHP:
new Handle:kv = CreateKeyValues("WeaponGroup");
FileToKeyValues(kv, "weapon.txt");
if(KvJumpToKey(kv, "NameWeapon"))
{
    decl String:sWeapon[64];
    KvGetString(kv, "name", sWeapon, sizeof(sWeapon));
    GivePlayerItem(client, sWeapon);

    KvRewind(kv);
}

CloseHandle(kv);
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
public OnPluginStart()
{
new Handle:kv = CreateKeyValues("WeaponGroup");
KvJumpToKey(kv, "NameWeapon", true);
KvSetString(kv, "w1", "weapon_ak47");
KvSetString(kv, "w2", "weapon_fiveseven");
KvSetString(kv, "w3", "weapon_hegrenade");
KvRewind(kv);

KeyValuesToFile(kv, "KirCore.txt");
CloseHandle(kv);
}
public Action:GiveKit(client, args)
{
new Handle:kv = CreateKeyValues("WeaponGroup");
FileToKeyValues(kv, "KirCore.txt");
if(KvJumpToKey(kv, "NameWeapon"))
{
decl String:sWeapon[64];
KvGetString(kv, "w1", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvGetString(kv, "w2", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvGetString(kv, "w3", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvRewind(kv);
}
CloseHandle(kv);
}
При компиляции warning:
upload_2017-4-29_15-19-56.png
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #65
@DenisPukin, урок 2 (пост 2) не читал. либо достаточно загуглить это предупреждение
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #66
@DenisPukin, табуляция разная, вот и эффект.
Где-то один отступ у строк в виде 4-ех пробелов, где-то - 5 пробелов (я случайно вижу), где-то - один таб.

И да, пихайте код под тег кода. Неудобно читать же лапшу Вашу.
 

Drimer

Участник
Сообщения
203
Реакции
54
public OnPluginStart()
{
new Handle:kv = CreateKeyValues("WeaponGroup");
KvJumpToKey(kv, "NameWeapon", true);
KvSetString(kv, "w1", "weapon_ak47");
KvSetString(kv, "w2", "weapon_fiveseven");
KvSetString(kv, "w3", "weapon_hegrenade");
KvRewind(kv);

KeyValuesToFile(kv, "KirCore.txt");
CloseHandle(kv);
}
public Action:GiveKit(client, args)
{
new Handle:kv = CreateKeyValues("WeaponGroup");
FileToKeyValues(kv, "KirCore.txt");
if(KvJumpToKey(kv, "NameWeapon"))
{
decl String:sWeapon[64];
KvGetString(kv, "w1", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvGetString(kv, "w2", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvGetString(kv, "w3", sWeapon, sizeof(sWeapon));
GivePlayerItem(client, sWeapon);
KvRewind(kv);
}
CloseHandle(kv);
}
При компиляции warning:
Посмотреть вложение 22873
Ты можешь на неё забить :) ничего плохого не будет.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #68
@Drimer, забивать на любые варны нежелательно.
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
Хорошо спасибо всем за помощь.
--- Добавлено позже ---
А если использовать EmitSoundToAll прописывать путь к звуку или просто прописать название звука?
 
Последнее редактирование:

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
Прошу помочь не пойму в чём проблема.
Вот ошибка:
L 06/07/2017 - 21:31:28: [SM] Exception reported: Invalid key value handle ab2b0629 (error 3)
L 06/07/2017 - 21:31:28: [SM] Blaming: On.smx
L 06/07/2017 - 21:31:28: [SM] Call stack trace:
L 06/07/2017 - 21:31:28: [SM] [0] KvJumpToKey
L 06/07/2017 - 21:31:28: [SM] [1] Line 115, C:\Users\������\Desktop\����� �����\addons\sourcemod\scripting\On.sp::OnMapStart
PHP:
if(KvJumpToKey(kv, "On"))
            {
                On1[10] = KvGetNum(kv, "1");
                On2[10] = KvGetNum(kv, "2");
                On3[10] = KvGetNum(kv, "3");
                On4[10] = KvGetNum(kv, "4");
                On5[10] = KvGetNum(kv, "5");
                KvRewind(kv);
            }
            CloseHandle(kv);
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
Вот так объявляю:
PHP:
    KvJumpToKey(kv,    "On",    true);
    KvSetNum(kv, "1",    1);
    KvSetNum(kv, "2",    1);
    KvSetNum(kv, "3",    1);
    KvSetNum(kv, "4",    1);
    KvSetNum(kv, "5",    1);
    KvRewind(kv);
Вот так использую:
PHP:
if(On1[10] > Up)
            {
              Тут код если выполняется условие.
            }
--- Добавлено позже ---
Хм... Странно уже не пишет ошибку.
 
Последнее редактирование:

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #74
@DenisPukin, тут нужно смотреть на создание и закрытие
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
@R1KO,
PHP:
public OnPluginStart()
{
new Handle:kv = CreateKeyValues("OnOff");

   KvJumpToKey(kv,    "On",    true);
    KvSetNum(kv, "1",    1);
    KvSetNum(kv, "2",    1);
    KvSetNum(kv, "3",    1);
    KvSetNum(kv, "4",    1);
    KvSetNum(kv, "5",    1);
    KvRewind(kv);

   if (KeyValuesToFile(kv,    "addons/sourcemod/configs/On.txt"))
    {
    PrintToServer("On.txt успешно загружен!");
    }
    CloseHandle(kv);
}

public OnMapStart()
{
    new Handle:kv = CreateKeyValues("OnOff");
    FileToKeyValues(kv,    "addons/sourcemod/configs/On.txt");
           if(KvJumpToKey(kv, "On"))
            {
                On1[10] = KvGetNum(kv, "1");
                On2[10] = KvGetNum(kv, "2");
                On3[10] = KvGetNum(kv, "3");
                On4[10] = KvGetNum(kv, "4");
                On5[10] = KvGetNum(kv, "5");
                KvRewind(kv);
            }
            CloseHandle(kv);
}

public On()
{
if(On1[10] == 1)
            {
             //Тут использую свой код
            }
}
 

BaFeR

Добрый человек
Сообщения
721
Реакции
216
PHP:
            if((GetClientTeam(client) == CS_TEAM_CT)&&(GetTeamClientCount(CS_TEAM_CT)==1)&&(GetTeamClientCount(CS_TEAM_T)>=1))
            {
                ChangeClientTeam(client, team);
                if((GetTeamClientCount(CS_TEAM_CT))==0)
                {
                    int randomClient;
                    if (GetArraySize(g_aGuardQueue))
                    {
                        randomClient = GetArrayCell(g_aGuardQueue, 0);
                        RemovePlayerFromGuardQueue(randomClient);
 
                        CGOPrintToChatAll("%t %t", "ratio_tag", "ratio_find", randomClient);
                    }
                    else if (gc_bBalanceTerror.BoolValue)
                    {
                        randomClient = GetRandomClientFromTeam(CS_TEAM_T);
                        CGOPrintToChatAll("%t %t", "ratio_tag", "ratio_random", randomClient);
                    }
                    else
                    {
                        return;
                    }
 
                    if (!IsValidClient(randomClient, true, true))
                    {
                        CGOPrintToChatAll("%t %t", "ratio_tag", "ratio_novalid");
                    }
 
                    SetClientPendingTeam(randomClient, CS_TEAM_CT);
                    SetClientListeningFlags(randomClient, VOICE_NORMAL); // unmute if sm_hosties or admin has muted prisoners on round start
                    MinusDeath(randomClient);
                }
            }
В чём ошибка?
PHP:
SetClientListeningFlags(randomClient, VOICE_NORMAL);
Не срабатывает
 

DenisPukin

Капитан Костыль
Сообщения
185
Реакции
34
if(KvJumpToKey(kv, "On"))
--- Добавлено позже ---
@R1KO,
PHP:
public OnPluginStart()
{
new Handle:kv = CreateKeyValues("OnOff");

   KvJumpToKey(kv,    "On",    true);
    KvSetNum(kv, "1",    1);
    KvSetNum(kv, "2",    1);
    KvSetNum(kv, "3",    1);
    KvSetNum(kv, "4",    1);
    KvSetNum(kv, "5",    1);
    KvRewind(kv);

   if (KeyValuesToFile(kv,    "addons/sourcemod/configs/On.txt"))
    {
    PrintToServer("On.txt успешно загружен!");
    }
    CloseHandle(kv);
}

public OnMapStart()
{
    new Handle:kv = CreateKeyValues("OnOff");
    FileToKeyValues(kv,    "addons/sourcemod/configs/On.txt");
           if(KvJumpToKey(kv, "On"))
            {
                On1[10] = KvGetNum(kv, "1");
                On2[10] = KvGetNum(kv, "2");
                On3[10] = KvGetNum(kv, "3");
                On4[10] = KvGetNum(kv, "4");
                On5[10] = KvGetNum(kv, "5");
                KvRewind(kv);
            }
            CloseHandle(kv);
}

public On()
{
if(On1[10] == 1)
            {
             //Тут использую свой код
            }
}
Что то ещё нужно скинуть или этого хватит?
--- Добавлено позже ---
Просто это всё, что связанно с ключом.
 
Последнее редактирование:

MAGNAT2645

Участник
Сообщения
63
Реакции
7
Хотел бы узнать больше об оффсетах и сигнатурах, т.к. некоторые сигнатуры на Linux у меня устарели и плагины работают некорректно (напр. No Thriller Taunt)
А сам не знаю, как вообще работать с папкой gamedata
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #79
Предлагаю разобрать несколько плагинов.
Начать с простых и дальше к более сложным.
Предлагайте что разобрать (обязательно ссылку).
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #80
Форк VSH от Chdata. Стоит обозревать не весь код, а некоторые используемые куски кода. Да и под конец, скорее всего, где-то.

Сам мод доступен на Гитхабе.
 
Сверху Снизу