BLOG LIFESTYLE - PROGRAMMING

ifx

Сообщения
331
Реакции
153
Помог
4 раз(а)
Цель у меня стать хорошим фрилансером
Брось эту затею про фриланс. Фриланс это копейки. Позиционировать себя надо изначально как специалиста в своей области.

Тогда не ты за клиентами будешь бегать, а они за тобой. Инфа, как говорится, сотка.
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
ifx, Ну я хочу себя зарекомендовать, чтобы клиенты сами обращались ко мне
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Пока мной идет изучение GM-X параллельно заканчиваю лендинг по тематике Counter-Strike и также потихоньку верстаю шаблон под GreyPanel
1.jpg
Но это только начало, на выходе может быть совсем по другому все. Особо не ругайте :D т.к не охота показывать сам шаблон панели
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Решил тут немного подтянуть знания в PAWN (Но куда же без меню :smile3:) ну что-то тип FFA DM
И создал пока 2 таких плагина
Код:
#include <amxmodx>
#include <reapi>

new const PLUGIN_NAME[] = "[FFA] Core"
new const PLUGIN_VERSION[] = "1.0.0"
new const PLUGIN_AUTHOR[] = "BiZaJe"

enum _:CoreCvars{
    CVAR_FFA,
    Float:CVAR_FFA_RESPAWN_TIME
}

new g_eCoreCvars[CoreCvars]

public plugin_init(){
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);


    ReApiHook();
    RegisterCvars();
}

public OnConfigsExecuted(){
    if(g_eCoreCvars[CVAR_FFA] == 1){
        server_cmd("mp_freeforall 1");
    }else{
        server_cmd("mp_freeforall 0");
    }

    set_cvar_float("mp_forcerespawn", g_eCoreCvars[CVAR_FFA_RESPAWN_TIME])
    set_cvar_num("mp_roundrespawn_time", -1)
}

public Func__BlockRoundEnd(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay){
    if(event != ROUND_GAME_COMMENCE && event != ROUND_GAME_RESTART){
        SetHookChainReturn(ATYPE_BOOL, false);
        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}

public Func__PlayerSpawn(const iPlayer){
    if(!is_user_alive(iPlayer) || !is_user_connected(iPlayer)){
        return;
    }

    new TeamName:Team = get_member(iPlayer, m_iTeam);
    if(Team == TEAM_SPECTATOR || Team == TEAM_UNASSIGNED){
        return;
    }

    switch(Team){
        case TEAM_CT:{
            rg_remove_item(iPlayer, "weapon_usp", true);
        }
        case TEAM_TERRORIST:{
            rg_remove_item(iPlayer, "weapon_glock18", true);
        }
    }
}

ReApiHook(){
    RegisterHookChain(RG_RoundEnd, "Func__BlockRoundEnd", .post = false);
    RegisterHookChain(RG_CBasePlayer_Spawn, "Func__PlayerSpawn", .post = true);
}

RegisterCvars(){
    bind_pcvar_num(create_cvar("ffa_enable", "1", FCVAR_NONE, "Enables or Disables FFA mode"), g_eCoreCvars[CVAR_FFA]);
    bind_pcvar_float(create_cvar("ffa_respawn_time", "1.5", FCVAR_NONE, "Respawn time of the player"), g_eCoreCvars[CVAR_FFA_RESPAWN_TIME]);
    AutoExecConfig(true, "ffa_core");
}
Код:
#include <amxmodx>
#include <reapi>

new const PLUGIN_NAME[] = "[FFA] Buy Menu Respawn"
new const PLUGIN_VERSION[] = "1.0.0"
new const PLUGIN_AUTHOR[] = "BiZaJe"

new const PrimaryWeapon[][] = {
    "weapon_mp5navy",
    "weapon_galil",
    "weapon_famas",
    "weapon_ak47",
    "weapon_m4a1",
    "weapon_awp"
}

new const PrimaryWeaponName[][] = {
    "WEAPON_MP5",
    "WEAPON_GALIL",
    "WEAPON_FAMAS",
    "WEAPON_AK",
    "WEAPON_M4",
    "WEAPON_AWP"
}

new const PrimaryWeaponCost[] = {
    1000,
    2100,
    1900,
    3700,
    3800,
    6000
}

new const SecondaryWeapon[][] = {
    "weapon_usp",
    "weapon_glock18",
    "weapon_deagle",
    "weapon_fiveseven",
    "weapon_p228"
}

new const SecondaryWeaponName[][] = {
    "WEAPON_USP",
    "WEAPON_GLOCK",
    "WEAPON_DEAGLE",
    "WEAPON_FS",
    "WEAPON_P228"
}

new const SecondaryWeaponCost[] = {
    500,
    500,
    1200,
    700,
    600
}

enum _:CvarsBuyMenuResp{
    CVAR_OPEN_MENU,
    CVAR_CLOSE_MENU
}

new g_CvarsBuyMenuResp[CvarsBuyMenuResp];

public plugin_init(){
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

    register_dictionary("ffa_buymenu")

    ReApiHook();
    RegisterCvars();
}

public Func__PlayerSpawn(const iPlayer){
    if(!is_user_alive(iPlayer) || !is_user_connected(iPlayer)){
        return;
    }

    if(g_CvarsBuyMenuResp[CVAR_OPEN_MENU] == 1){
        Func__OpenSecondaryBuyMenuRespawn(iPlayer);
    }
}

public Func__OpenSecondaryBuyMenuRespawn(iPlayer){
    new iRespMenu, iRespMenuCallBack, lSzMenu[512];
    formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, "FFA_TITLE_RESP_SY_BUYMENU_RESP");
    iRespMenu = menu_create(lSzMenu, "Func__RespSecondaryBuyMenu_Handler");
    iRespMenuCallBack = menu_makecallback("Func__RespSecondaryBuyMenu_CallBack");

    for(new i = 0; i <= charsmax(SecondaryWeapon); i++){
        formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, SecondaryWeaponName[i]);
        menu_additem(iRespMenu, lSzMenu, "", 0, iRespMenuCallBack);
    }

    formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, "FFA_BUYMENU_RESP_EXIT");
    menu_setprop(iRespMenu, MPROP_EXITNAME, lSzMenu);
    menu_display(iPlayer, iRespMenu, 0, g_CvarsBuyMenuResp[CVAR_CLOSE_MENU]);
    return PLUGIN_HANDLED;
}

public Func__RespSecondaryBuyMenu_Handler(iPlayer, iRespMenu, eItem){
    if(eItem == MENU_EXIT || !is_user_connected(iPlayer)){
        return PLUGIN_HANDLED;
    }

    rg_give_item(iPlayer, SecondaryWeapon[eItem], GT_DROP_AND_REPLACE);
    rg_add_account(iPlayer, get_member(iPlayer, m_iAccount) - SecondaryWeaponCost[eItem], AS_SET);
    Func__OpenPrimaryBuyMenuRespawn(iPlayer);

    menu_destroy(iRespMenu);
    return PLUGIN_HANDLED;
}

public Func__RespSecondaryBuyMenu_CallBack(iPlayer, iRespMenu, eItem){
    new lSzMenu[512];
    if(get_member(iPlayer, m_iAccount) < PrimaryWeaponCost[eItem]){
        formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, SecondaryWeaponName[eItem]);
        menu_item_setname(iRespMenu, eItem, lSzMenu);
        return ITEM_DISABLED;
    }
    return ITEM_IGNORE;
}

public Func__OpenPrimaryBuyMenuRespawn(iPlayer){
    new iRespMenu, iRespMenuCallBack, lSzMenu[512];
    formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, "FFA_TITLE_RESP_PY_BUYMENU_RESP");
    iRespMenu = menu_create(lSzMenu, "Func__RespPrimaryBuyMenu_Handler");
    iRespMenuCallBack = menu_makecallback("Func__RespPrimaryBuyMenu_CallBack");

    for(new i = 0; i <= charsmax(PrimaryWeapon); i++){
        formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, PrimaryWeaponName[i]);
        menu_additem(iRespMenu, lSzMenu, "", 0, iRespMenuCallBack);
    }

    formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, "FFA_BUYMENU_RESP_EXIT");
    menu_setprop(iRespMenu, MPROP_EXITNAME, lSzMenu);
    menu_display(iPlayer, iRespMenu, 0, g_CvarsBuyMenuResp[CVAR_CLOSE_MENU]);
    return PLUGIN_HANDLED;
}

public Func__RespPrimaryBuyMenu_Handler(iPlayer, iRespMenu, eItem){
    if(eItem == MENU_EXIT || !is_user_connected(iPlayer)){
        return PLUGIN_HANDLED;
    }

    rg_give_item(iPlayer, PrimaryWeapon[eItem], GT_DROP_AND_REPLACE);
    rg_add_account(iPlayer, get_member(iPlayer, m_iAccount) - PrimaryWeaponCost[eItem], AS_SET);

    menu_destroy(iRespMenu);
    return PLUGIN_HANDLED;
}

public Func__RespPrimaryBuyMenu_CallBack(iPlayer, iRespMenu, eItem){
    new lSzMenu[512];
    if(get_member(iPlayer, m_iAccount) < PrimaryWeaponCost[eItem]){
        formatex(lSzMenu, charsmax(lSzMenu), "%L", iPlayer, PrimaryWeaponName[eItem]);
         menu_item_setname(iRespMenu, eItem, lSzMenu);
        return ITEM_DISABLED;
    }
    return ITEM_IGNORE;
}

ReApiHook(){
    RegisterHookChain(RG_CBasePlayer_Spawn, "Func__PlayerSpawn", .post = true);
}

RegisterCvars(){
    bind_pcvar_num(create_cvar("ffa_respawn_buymenu_open", "1", FCVAR_NONE, "To allow to open the buy menu when you respawn"), g_CvarsBuyMenuResp[CVAR_OPEN_MENU]);
    bind_pcvar_num(create_cvar("ffa_respawn_buymenu_close", "15", FCVAR_NONE, "How long to close the purchase menu after rebirth"), g_CvarsBuyMenuResp[CVAR_CLOSE_MENU]);
    AutoExecConfig(true, "ffa_buymenu_respawn");
}
Но т.к немного знаний не хватает, нужны ли тут еще какие-то проверки на валидность или еще на что-нибудь?
Да, мой синтаксис просто как у бога...
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Пришло время оставить запись.
Да, было много планов по веб-панелям, даже начал свой FFA делать, но не хватало времени т.к защищал диплом. Сегодня закончилась эта мука и теперь можно спокойно заняться.

Послужит как памятка для меня и как напоминание для вас, что от меня ждать
  • Шаблон для GreyPanel
  • Шаблон для GM-X (С большими муками разобрался с этой панелью)
  • Лендинг Шаблон
  • В крайнем случае FFA выложу (В планах никак обычный FFA CSDM сделать)
 
Сообщения
3,579
Реакции
1,569
Помог
137 раз(а)
Код:
    new TeamName:Team = get_member(iPlayer, m_iTeam);
    if(Team == TEAM_SPECTATOR || Team == TEAM_UNASSIGNED){
        return;
    }

    switch(Team){
        case TEAM_CT:{
            rg_remove_item(iPlayer, "weapon_usp", true);
        }
        case TEAM_TERRORIST:{
            rg_remove_item(iPlayer, "weapon_glock18", true);
        }
    }
вместо этого можно просто rg_remove_items_by_slot().
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Nordic Warrior, Я как раз думал на счет этого, потестирую сегодня
 
Сообщения
105
Реакции
194
У меня история знакомства с CS 1.6 и вселенной HL в целом, схожа. Где-то в 2011 начал играть в кс, интернеты были тогда очень ужасные и с ограниченным трафиком, особенно пинг под 300 всегда, конечно, радовал. Но потом я случайно наткнулся на зомби-сервер, и мне эта идея в целом очень понравилась. Где-то год-полтора я пытался создать свой сервер, качал и ставил всякие разные плагины, впервые узнал, что же такое компиляция. В общем, было весело. Хорошие, теплые воспоминания о былом.
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
UP Тему наконец-то.
Решил взять отдых себе от фриланса и выполнил все заказы...
Появилось свободное время и пора взяться за что-то.
Видал, что нужен хоть какой-то шаблон для GM-X и решить какие-то траблы надо.
 
Сообщения
51
Реакции
0
UP Тему наконец-то.
Решил взять отдых себе от фриланса и выполнил все заказы...
Появилось свободное время и пора взяться за что-то.
Видал, что нужен хоть какой-то шаблон для GM-X и решить какие-то траблы надо.
fantom говорил, что нужен человек фронтендер, который исправит вывод "активных в текущий момент". Вы не могли бы взяться?
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
MyCs, В ближайшее время посмотрю и отпишу сюда же.
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Пометка №1:
Описание: Разработка текстового/графического варианта GCMS
  • Расписать ТЗ и продумать структура GCMS
  • Создать примерный графический вариант GCMS
  • Расписать структуру BD
  • Документация по поддержке WEB-Технологий (Опираться на пункт 1.)
 
Сообщения
51
Реакции
0
Пометка №1:
Описание: Разработка текстового/графического варианта GCMS
  • Расписать ТЗ и продумать структура GCMS
  • Создать примерный графический вариант GCMS
  • Расписать структуру BD
  • Документация по поддержке WEB-Технологий (Опираться на пункт 1.)
можно спросить, а что насчет фикса багов гмх?
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
MyCs, В процессе
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
Глаза боятся - руки делают.
Фиксы GM-X не дают положительного.... Пытаюсь сделать одно, выявляется сразу другое. Но все же буду пытаться.
В задумку легло сделать FFA процесс разработки идет, но подумываю на счет open project`а...

Пару вопросов все равно остаются не закрытыми
1 - Будет ли какой-то бенефит мне от этого проекта.
2 - Стоит ли вообще фиксить GM-X или сделать элиминейт и вложиться в разработку своей панели.
3 - Если ищу какой-то профит с проекта, то как завлечь людей на покупку "привилегий и т.д"

Вообще, что за задумка на счет FFA?
1 - Создать балансовую игру
2 - Набить атмосферу спец.эффектами (Добивание, комбо и т.п)
3 - Если использовать "привилегии", то так чтобы был баланс между обычными и "привилегированными"игроками
Дальше буду думать и выкладывать все.
Пожелайте удачи в разработке :boast:
Может и будет, что-то интересное из этого.
1600617034633.png
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
вложиться в разработку своей панели.
Упрешся в то же, во что и другие погроммисты по типу тех, кто делал ubans - кривую структуру бд и плугины для работы с вебчастью.
 
Сообщения
1,041
Реакции
206
Предупреждения
1
Помог
6 раз(а)
d3m37r4, А если с проектировать бд перед ее созданием?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу