Талисман жизней for CSDM

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
Привет всем, как переделать плагин под CSDM ??? помогите пожалуйста

Код:
#include <amxmodx>
#include <engine>

#define SCREENFADE                    //Затемнять экран при регенерации здоровья
#define MIN_PLAYERS 1                //Минимальное кол-во игроков для работы плагина
#define ROUND_ACCESS 0                //С какого раунда доступен талисман
#define GIVE_HEALTH 5                //Кол-во выдаваемого здоровья
#define INTERVAL_REGENERATION 2.0    //Интервал между восстановлением

new const g_szModel[] = "models/crux_ansata.mdl";

new g_iPlayerId, g_iRoundCounter, szName[32];

public plugin_init()
{
    register_plugin("Crux Ansata", "1.0", "DUKKHAZ0R");
    
    register_touch("crux_ansata", "player", "fw_TouchEntity");
    
    register_logevent("eRoundStart", 0, "1=Round_Start");
    register_event("DeathMsg", "eDeathMsg", "a", "1>0");
    register_event("TextMsg", "eRoundRestart", "a", "2&#Game_C", "2&#Game_w");
    
    set_task(INTERVAL_REGENERATION, "RegenerationHealth", .flags="b");
}

public plugin_precache()
{
    precache_model(g_szModel);
}

public client_disconnect(id)
{
    if(g_iPlayerId == id)
        SpawnAnsata(id);
}

public eRoundRestart()
    g_iRoundCounter = 0;

public eRoundStart()
{
    if(++g_iRoundCounter < ROUND_ACCESS || get_playersnum() < MIN_PLAYERS)
        return;
        
    static iEnt;
    
    while((iEnt = find_ent_by_class(iEnt, "crux_ansata")))
        remove_entity(iEnt);
        
    static apPlayers[32], iPlayers;
    get_players(apPlayers, iPlayers, "ach");
    
    g_iPlayerId = apPlayers[random(iPlayers-1)];
    get_user_name(g_iPlayerId, szName, charsmax(szName));
    
    ChatColor(0, "^4[CA] ^3%s ^1выпал талисман жизни.", szName);
}

public eDeathMsg()
{
    if(read_data(2) == g_iPlayerId)
        SpawnAnsata(g_iPlayerId);
}

public fw_TouchEntity(iEnt, id)
{
    if(!is_valid_ent(iEnt) || g_iPlayerId)
        return 1;
        
    entity_set_int(iEnt, EV_INT_flags, FL_KILLME);
    get_user_name(g_iPlayerId = id, szName, charsmax(szName));
    ChatColor(0,"^4[CA] ^3%s ^1поднял талисман жизни.",szName);
    return 1;
}

public RegenerationHealth()
{
    if(!g_iPlayerId || get_playersnum() < MIN_PLAYERS)
        return;
    
    static Float:fHealth, MsgId_Health; fHealth = entity_get_float(g_iPlayerId, EV_FL_health);
    
    if(!MsgId_Health) MsgId_Health = get_user_msgid("Health");
    
    if(fHealth < 100 && is_user_alive(g_iPlayerId))
    {
        static Float:giveHealth; giveHealth = (fHealth + GIVE_HEALTH) < 100 ? float(GIVE_HEALTH) : (170 - fHealth);
        
        entity_set_float(g_iPlayerId, EV_FL_health, fHealth + giveHealth);
        
        message_begin(MSG_ONE_UNRELIABLE, MsgId_Health, _, g_iPlayerId);
        write_byte(floatround(fHealth + giveHealth));
        message_end();
        
#if defined SCREENFADE
        message_begin(MSG_ONE_UNRELIABLE, 98, _, g_iPlayerId);
        write_short(1<<10);
        write_short(1<<10);
        write_short(0x0000);
        write_byte(0);
        write_byte(255);
        write_byte(0);
        write_byte(40);
        message_end();
#endif
    }
}

stock SpawnAnsata(id)
{
    static Float:fOrigin[3];
    entity_get_vector(id, EV_VEC_origin, fOrigin);
    
    new iEnt = create_entity("info_target");
    
    if(!is_valid_ent(iEnt))
        return;
    
    entity_set_vector(iEnt, EV_VEC_origin, fOrigin);
    entity_set_string(iEnt, EV_SZ_classname, "crux_ansata");
    entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER);
    entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_NONE);
    entity_set_int(iEnt, EV_INT_effects, 8);
    entity_set_model(iEnt, g_szModel);
    entity_set_size(iEnt, Float:{-16.0,-16.0,-16.0}, Float:{16.0,16.0,16.0});
    ChatColor(g_iPlayerId = 0, "^4[CA] ^3%s ^1потерял талисман жизни.", szName);
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static szBuffer[191], apPlayers[32], iPlayers; iPlayers = 1;
    vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
    if(id)
    {
        if(!is_user_connected(id)) return;
        apPlayers[0] = id;
        iPlayers = 1;
    }
    else get_players(apPlayers, iPlayers, "ch");
    for(new i;i < iPlayers; i++)
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = apPlayers[i]);
        write_byte(apPlayers[i]);
        write_string(szBuffer);
        message_end();
    }
}
 

Вложения

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
gesk1995, Объясни что надо
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
gesk1995, Да ты че, а по подробней
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
Mandar1n, Плагин работает , но самого талисмана нету в игре , минимальное количество игроков 1, с какого раунда выдавать талисман 0-1 ставил , так же нет талисмана в игре ...
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
gesk1995, ну, а если убрать проверки
C++:
#include <amxmodx>
#include <engine>

//#define SCREENFADE                    //Затемнять экран при регенерации здоровья
#define MIN_PLAYERS 1                //Минимальное кол-во игроков для работы плагина
#define ROUND_ACCESS 0                //С какого раунда доступен талисман
#define GIVE_HEALTH 5                //Кол-во выдаваемого здоровья
#define INTERVAL_REGENERATION 1.0    //Интервал между восстановлением

new const g_szModel[] = "models/crux_ansata.mdl";

new g_iPlayerId, szName[32]
//new g_iRoundCounter

public plugin_init()
{
    register_plugin("Crux Ansata", "1.0", "DUKKHAZ0R");
    
    register_touch("crux_ansata", "player", "fw_TouchEntity");
    
    register_logevent("eRoundStart", 0, "1=Round_Start");
    register_event("DeathMsg", "eDeathMsg", "a", "1>0");
    register_event("TextMsg", "eRoundRestart", "a", "2&#Game_C", "2&#Game_w");
    
    set_task(INTERVAL_REGENERATION, "RegenerationHealth", .flags="b");
}

public plugin_precache()
{
    precache_model(g_szModel);
}

public client_disconnect(id)
{
    if(g_iPlayerId == id)
        SpawnAnsata(id);
}

/* public eRoundRestart()
    g_iRoundCounter = 0; */

public eRoundStart()
{
    static iEnt;
    
    while((iEnt = find_ent_by_class(iEnt, "crux_ansata")))
        remove_entity(iEnt);
        
    static apPlayers[32], iPlayers;
    get_players(apPlayers, iPlayers, "ach");
    
    g_iPlayerId = apPlayers[random(iPlayers-1)];
    get_user_name(g_iPlayerId, szName, charsmax(szName));
    
    ChatColor(0, "^4[CA] ^3%s ^1выпал талисман жизни.", szName);
}

public eDeathMsg()
{
    if(read_data(2) == g_iPlayerId)
        SpawnAnsata(g_iPlayerId);
}

public fw_TouchEntity(iEnt, id)
{
    if(!is_valid_ent(iEnt) || g_iPlayerId)
        return 1;
        
    entity_set_int(iEnt, EV_INT_flags, FL_KILLME);
    get_user_name(g_iPlayerId = id, szName, charsmax(szName));
    ChatColor(0,"^4[CA] ^3%s ^1поднял талисман жизни.",szName);
    return 1;
}

public RegenerationHealth()
{
    static Float:fHealth, MsgId_Health; fHealth = entity_get_float(g_iPlayerId, EV_FL_health);
    
    if(!MsgId_Health) MsgId_Health = get_user_msgid("Health");
    
    if(fHealth < 100 && is_user_alive(g_iPlayerId))
    {
        static Float:giveHealth; giveHealth = (fHealth + GIVE_HEALTH) < 100 ? float(GIVE_HEALTH) : (170 - fHealth);
        
        entity_set_float(g_iPlayerId, EV_FL_health, fHealth + giveHealth);
        
        message_begin(MSG_ONE_UNRELIABLE, MsgId_Health, _, g_iPlayerId);
        write_byte(floatround(fHealth + giveHealth));
        message_end();
        
#if defined SCREENFADE
        message_begin(MSG_ONE_UNRELIABLE, 98, _, g_iPlayerId);
        write_short(1<<10);
        write_short(1<<10);
        write_short(0x0000);
        write_byte(0);
        write_byte(255);
        write_byte(0);
        write_byte(40);
        message_end();
#endif
    }
}

stock SpawnAnsata(id)
{
    static Float:fOrigin[3];
    entity_get_vector(id, EV_VEC_origin, fOrigin);
    
    new iEnt = create_entity("info_target");
    
    if(!is_valid_ent(iEnt))
        return;
    
    entity_set_vector(iEnt, EV_VEC_origin, fOrigin);
    entity_set_string(iEnt, EV_SZ_classname, "crux_ansata");
    entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER);
    entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_NONE);
    entity_set_int(iEnt, EV_INT_effects, 8);
    entity_set_model(iEnt, g_szModel);
    entity_set_size(iEnt, Float:{-16.0,-16.0,-16.0}, Float:{16.0,16.0,16.0});
    ChatColor(g_iPlayerId = 0, "^4[CA] ^3%s ^1потерял талисман жизни.", szName);
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static szBuffer[191], apPlayers[32], iPlayers; iPlayers = 1;
    vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
    if(id)
    {
        if(!is_user_connected(id)) return;
        apPlayers[0] = id;
        iPlayers = 1;
    }
    else get_players(apPlayers, iPlayers, "ch");
    for(new i;i < iPlayers; i++)
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = apPlayers[i]);
        write_byte(apPlayers[i]);
        write_string(szBuffer);
        message_end();
    }
}
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
Mandar1n, Плагин работает
[ 16] Crux Ansata 1.0 DUKKHAZ0R crux_ansata.amx running
но всё так же нет талисмана в игре )
2 игрока на сервере)
 
K

kapangaIII

Забей, он отсталый. В начале раунда у тебя нет игроков на сервере, соответственно некому выдать талисман изначально, так что, тут надо писать spawner энтити этой где нибудь в заранее указанной точке.
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
, Вхахах, не смог бы помочь,будь добр !
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
, Пхахахахах, с каждым твои постом поражаюсь, какой же ты убогий) Зазнавшийся дурачек, который не сможет даже пояснить за отсталого. Ты считаешь, что неопытный = отсталый? По твоему поведению ясно, что ты никакая не команда форума, а то и не разработчик. Это никак не подтверждается твоими комментариями, лишь подаешь вид якобы скриптера, который шарит в коде и на все смотрит своим взглядом, если код не сделан так, как сделал бы ты, то это гавно(человек отсталый). У-бо-же-ство
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
Ребята я тему создал не для того что бы выяснять кто тут круче и умнее, а для помощи ...
 

fantom

Разработчик
Регистрация
11 Июн 2017
Сообщения
426
Симпатии
293
Пол
Мужской
Mandar1n, вообше то прав. Плагин выдает талисман в начале раунда. Но в КСДМ нету раундов кроме первого пристарте карты. И в момент старта карты (когда ивент старт раунда) никого на сервере нету.
 

Mandar1n

theRoone
Пользователь
Регистрация
13 Янв 2018
Сообщения
394
Симпатии
70
Пол
Мужской
fantom, Причем здесь прав он или нет? В его сообщении 2 смысла. Первое, он высернул как зазнавшийся петуч, и второе, объективное рассуждение работоспособности плагина.
 
K

kapangaIII

gesk1995, можно попробовать. Стандартными средствами амыкса подойдёт?
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
, Я думаю да)
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
1.217
Симпатии
304

Вложения

  • 4,4 KB Просмотры: 13

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
To be or not to be, Нет талисмана в игре , в игре 2 игрока играют , может что то пропустили ?
 

To be or not to be

Пользователь
Регистрация
9 Июн 2017
Сообщения
1.217
Симпатии
304
gesk1995, скинь ip сервера
 

gesk1995

Пользователь
Регистрация
8 Июн 2017
Сообщения
339
Симпатии
12
Пол
Мужской
146.255.195.38:27027
 
K

kapangaIII

Код:
#include <amxmodx>
#include <fakemeta_util>
#include <engine>

#define SCREENFADE                    //Затемнять экран при регенерации здоровья
#define MIN_PLAYERS 1                //Минимальное кол-во игроков для работы плагина
#define ROUND_ACCESS 0                //С какого раунда доступен талисман
#define GIVE_HEALTH 5                //Кол-во выдаваемого здоровья
#define INTERVAL_REGENERATION 2.0    //Интервал между восстановлением

new const g_szModel[] = "models/crux_ansata.mdl";
#define cfgDir "addons/amxmodx/configs/shit/"
new g_iPlayerId, g_iRoundCounter, szName[32],szFile[128];

public plugin_init()
{
    register_plugin("Crux Ansata", "1.0", "DUKKHAZ0R");
    new szMapName[35];get_mapname(szMapName,charsmax(szMapName));
    formatex(szFile,charsmax(szFile),"%s%s.ini",cfgDir,szMapName);
    if(!dir_exists(cfgDir))mkdir(cfgDir);
    register_touch("crux_ansata", "player", "fw_TouchEntity");
    kek();
    register_clcmd("say a", "asdd");
    register_logevent("eRoundStart", 0, "1=Round_Start");
    register_event("DeathMsg", "eDeathMsg", "a", "1>0");
    register_event("TextMsg", "eRoundRestart", "a", "2&#Game_C", "2&#Game_w");
   
    set_task(INTERVAL_REGENERATION, "RegenerationHealth", .flags="b");
}

public plugin_precache()
{
    precache_model(g_szModel);
}

public client_disconnect(id)
{
    if(g_iPlayerId == id)
        SpawnAnsata(id);
}

public eRoundRestart()
    g_iRoundCounter = 0;

public eRoundStart()
{
    if(++g_iRoundCounter < ROUND_ACCESS || get_playersnum() < MIN_PLAYERS)
        return;
       
    static iEnt;
   
    while((iEnt = find_ent_by_class(iEnt, "crux_ansata")))
        remove_entity(iEnt);
       
    static apPlayers[32], iPlayers;
    get_players(apPlayers, iPlayers, "ach");
   
    g_iPlayerId = apPlayers[random(iPlayers-1)];
    get_user_name(g_iPlayerId, szName, charsmax(szName));
   
    ChatColor(0, "^4[CA] ^3%s ^1выпал талисман жизни.", szName);
}

public eDeathMsg()
{
    if(read_data(2) == g_iPlayerId)
        SpawnAnsata(g_iPlayerId);
}

public fw_TouchEntity(iEnt, id)
{
    if(!is_valid_ent(iEnt) || g_iPlayerId)
        return 1;
       
    entity_set_int(iEnt, EV_INT_flags, FL_KILLME);
    get_user_name(g_iPlayerId = id, szName, charsmax(szName));
    ChatColor(0,"^4[CA] ^3%s ^1поднял талисман жизни.",szName);
    return 1;
}

public RegenerationHealth()
{
    if(!g_iPlayerId || get_playersnum() < MIN_PLAYERS)
        return;
   
    static Float:fHealth, MsgId_Health; fHealth = entity_get_float(g_iPlayerId, EV_FL_health);
   
    if(!MsgId_Health) MsgId_Health = get_user_msgid("Health");
   
    if(fHealth < 100 && is_user_alive(g_iPlayerId))
    {
        static Float:giveHealth; giveHealth = (fHealth + GIVE_HEALTH) < 100 ? float(GIVE_HEALTH) : (170 - fHealth);
       
        entity_set_float(g_iPlayerId, EV_FL_health, fHealth + giveHealth);
       
        message_begin(MSG_ONE_UNRELIABLE, MsgId_Health, _, g_iPlayerId);
        write_byte(floatround(fHealth + giveHealth));
        message_end();
       
#if defined SCREENFADE
        message_begin(MSG_ONE_UNRELIABLE, 98, _, g_iPlayerId);
        write_short(1<<10);
        write_short(1<<10);
        write_short(0x0000);
        write_byte(0);
        write_byte(255);
        write_byte(0);
        write_byte(40);
        message_end();
#endif
    }
}

stock SpawnAnsata(id,const Float:f1[3]=0.0)
{
    static Float:fOrigin[3];//а надо ли? Хм.
    if(id)entity_get_vector(id, EV_VEC_origin, fOrigin);
    else{fOrigin[0]=f1[0];fOrigin[1]=f1[1];fOrigin[2]=f1[2];}
   
    new iEnt = create_entity("info_target");
   
    if(!is_valid_ent(iEnt))
        return;
   
    entity_set_vector(iEnt, EV_VEC_origin, fOrigin);
    entity_set_string(iEnt, EV_SZ_classname, "crux_ansata");
    entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER);
    entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_NONE);
    entity_set_int(iEnt, EV_INT_effects, 8);
    entity_set_model(iEnt, g_szModel);
    entity_set_size(iEnt, Float:{-16.0,-16.0,-16.0}, Float:{16.0,16.0,16.0});
    ChatColor(g_iPlayerId = 0, "^4[CA] ^3%s ^1потерял талисман жизни.", szName);
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static szBuffer[191], apPlayers[32], iPlayers; iPlayers = 1;
    vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
    if(id)
    {
        if(!is_user_connected(id)) return;
        apPlayers[0] = id;
        iPlayers = 1;
    }
    else get_players(apPlayers, iPlayers, "ch");
    for(new i;i < iPlayers; i++)
    {
        message_begin(MSG_ONE_UNRELIABLE, 76, .player = apPlayers[i]);
        write_byte(apPlayers[i]);
        write_string(szBuffer);
        message_end();
    }
}
public asdd(id){
    new menu_name[512];new g_menuId=-1;
    format(menu_name, 512, "\rМеню");
    g_menuId = menu_create(menu_name, "menu_handler");
    menu_additem(g_menuId, "\wЗаписать координату", "1", 0);
    menu_setprop(g_menuId, MPROP_EXIT, MEXIT_ALL);
    menu_setprop(g_menuId, MPROP_EXITNAME, "\yВыход");
    menu_display(id, g_menuId, 0);
}
public menu_handler(id, menu, item){
    switch(item){
        case 0:{
            static str[128];new Float:fOrigin[3];fm_get_aim_origin(id, fOrigin);
            formatex(str,charsmax(str),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0],fOrigin[1],fOrigin[2]);
            write_file(szFile,str,-1);
        }
    }
    return 1;
}
public kek(){
    new file3 = fopen(szFile, "rt");if(!file3)return;      
    while(file3 && !feof(file3)){
        new sfLineData[512];fgets(file3, sfLineData, charsmax(sfLineData));  
        if(sfLineData[0] == ';'||sfLineData[0] == '/' && sfLineData[1] == '/'||equal(sfLineData, ""))continue;
        new origins[3][32], Float: fOrigin[3];
        parse(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31);
        fOrigin[0] = str_to_float(origins[0]);
        fOrigin[1] = str_to_float(origins[1]);
        fOrigin[2] = str_to_float(origins[2]);
        SpawnAnsata(0,fOrigin);
    }
    fclose(file3);
}

Не тестил, но должно работать. Изначально - зайти на сервер, написать в чат букву a(eng, komandy sam smenush), приглядется куда нибудь, нажать на 1. Сменить карту, на эту же, в этом месте должен появится талисман.
 
Сверху Снизу