Проверка (ако сървъра е на дадена карта)

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от Buzdrev » 08 Юли 2018, 16:13

Здравейте, използвам VIP плъгин, който дава повече пари при убийство и бонус оръжия.
Искам да направя така че, ако името на картата на която се играе започва с aim_(тоест всички aim карти) да не дава бонус оръжията на вип играчите, а само повече пари.

Код за потвърждение: Избери целия код

#include < amxmodx > 
#include < amxmisc >
#include < fakemeta > 
#include < hamsandwich > 
#include < cstrike > 
#include < fun > 

#pragma semicolon 1 

#define PLUGIN "Admins are VIPs" 
#define VERSION "0.0.1" 

#define MONEY_KILL      450
#define MONEY_HS      900

#define MAX_MONEY_IN_GAME   16000

new const m_rgpPlayerItems_CBasePlayer[6] = {367,368,...}; 
const m_pActiveItem = 373; 

public plugin_init() 
{ 
    register_plugin( PLUGIN, VERSION, "ConnorMcLeod" ); 
    RegisterHam(Ham_Spawn, "player", "OnCBasePlayer_Spawn_Post", true); 
    register_event( "DeathMsg", "evDeath", "a" );
} 

public evDeath( )
{
   new attacker = read_data( 1 );
   
   if( attacker == read_data( 2 ) || !is_user_alive( attacker ) || is_user_connected( attacker ) || cs_get_user_money( attacker ) >= MAX_MONEY_IN_GAME ) return PLUGIN_HANDLED;
   
   if( read_data( 3 ) ) 
   {
      if( cs_get_user_money( attacker ) <= MAX_MONEY_IN_GAME - MONEY_HS )
      {
         cs_set_user_money( attacker, cs_get_user_money( attacker ) + MONEY_HS );
      }
   }
   else 
   {
      if( cs_get_user_money( attacker ) <= MAX_MONEY_IN_GAME - MONEY_KILL )
      {
         cs_set_user_money( attacker, cs_get_user_money( attacker ) + MONEY_KILL );
      }
   }
   
   return PLUGIN_CONTINUE;
} 

public OnCBasePlayer_Spawn_Post( id ) 
{ 
    if( is_user_alive( id ) && get_user_flags( id ) & ADMIN_LEVEL_E ) 
    { 
        cs_set_user_armor(id, 100, CS_ARMOR_VESTHELM); 
        new weapons = pev(id, pev_weapons); 
        if( ~weapons & CSW_FLASHBANG ) 
        { 
            give_item(id, "weapon_flashbang"); 
        } 
        cs_set_user_bpammo(id, CSW_FLASHBANG, 2); 
        if( ~weapons & CSW_HEGRENADE ) 
        { 
            give_item(id, "weapon_hegrenade"); 
        } 

        new gun = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer[2]); 
        if( gun > 0 ) 
        { 
            new iId = cs_get_weapon_id(gun); 
            if( iId == CSW_DEAGLE ) 
            { 
                cs_set_weapon_ammo(gun, 7); 
            } 
            else 
            { 
                ham_strip_user_weaponent(id, gun, iId, true); 
                give_item( id, "weapon_deagle" ); 
            } 
        } 

        cs_set_user_bpammo( id, CSW_DEAGLE, 35 ); 
	   if( ~weapons & CSW_SMOKEGRENADE ) 
        { 
            give_item(id, "weapon_smokegrenade"); 
        } 
        if(is_user_alive(id) && get_user_flags(id) & ADMIN_LEVEL_E && cs_get_user_team(id) == CS_TEAM_CT) 
        {
      cs_set_user_defuse(id, 1);
        }
    } 
} 

ham_strip_user_weaponent(id, weaponEnt, iId=0, bool:bSwitchIfActive = true) 
{ 
    if( bSwitchIfActive && get_pdata_cbase(id, m_pActiveItem) == weaponEnt ) 
    { 
        ExecuteHamB(Ham_Weapon_RetireWeapon, weaponEnt); 
    } 

    if( ExecuteHamB(Ham_RemovePlayerItem, id, weaponEnt) ) 
    { 
        if( !iId ) 
        { 
            iId = cs_get_weapon_id(weaponEnt); 
        } 
        user_has_weapon(id, iId, 0); 
        ExecuteHamB(Ham_Item_Kill, weaponEnt); 
        return 1; 
    } 
    return 0; 
}  

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от OciXCrom » 08 Юли 2018, 16:15

Създай глобална променлива която ще държи името на картата:

Код за потвърждение: Избери целия код

new g_szMap[32]
В plugin_init вземи името на картата:

Код за потвърждение: Избери целия код

get_mapname(g_szMap, charsmax(g_szMap))
Проверката за името можеш да я направиш по този начин:

Код за потвърждение: Избери целия код

if(equali(g_szMap, "aim_", 4))
{
    // първите 4 символа от името на мапа са aim_
}

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от Buzdrev » 08 Юли 2018, 16:26

Да, а как да направя само ако името на картата не започва с aim_, тогава да си продължава плъгина, в смисъл това е ако така започва аз искам ако не започва така.
Нещо като if(!equali(g_szMap, "aim_", 4)), но не съм сигурен така ли е?

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от OciXCrom » 08 Юли 2018, 16:29

Точно така е. Символът "!" се ползва за обратна стойност.
Разбира се, можеш да ползваш и else ако си ползвал първата проверка вече, вместо отново да я пишеш:

Код за потвърждение: Избери целия код

if(equali(g_szMap, "aim_", 4))
{
    // първите 4 символа от името на мапа са aim_
}
else
{
    // не започва с aim_
}

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от Buzdrev » 08 Юли 2018, 16:32

Да това ми е ясно, а горе където картата е aim, какво да напиша там, понеже не искам нищо да се случва?

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от OciXCrom » 08 Юли 2018, 16:35

Не ти трябва тази проверка ако не искаш нищо да се случва. Просто направи така с "!" в началото:

Код за потвърждение: Избери целия код

if(!equali(g_szMap, "aim_", 4))
{
    // първите 4 символа от името на мапа НЕ са aim_
}

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

Проверка (ако сървъра е на дадена карта)

Мнение от Buzdrev » 08 Юли 2018, 16:41

Да, получи се, благодаря може да заключваш.

Аватар
TheRedShoko
Извън линия
Модератор
Модератор
Мнения: 1016
Регистриран на: 06 Окт 2016, 07:42
Местоположение: Бургас
Се отблагодари: 5 пъти
Получена благодарност: 84 пъти

Проверка (ако сървъра е на дадена карта)

Мнение от TheRedShoko » 08 Юли 2018, 18:42

Ако запазиш резултата в глобална променлива от тип boolean ще ти е по-оптимално за работа, от колкото ако всеки път сравняваш с equal.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: Bing [Bot] и 8 госта