Разработчик
Скриптер
Проверенный
- Сообщения
- 2,751
- Реакции
- 3,016
- Помог
- 61 раз(а)
Автор открыт к предложениям, а так же PRчуть-чуть не понравилось то, что не было редиректа на install
Автор открыт к предложениям, а так же PRчуть-чуть не понравилось то, что не было редиректа на install
Брось эту затею про фриланс. Фриланс это копейки. Позиционировать себя надо изначально как специалиста в своей области.Цель у меня стать хорошим фрилансером
#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");
}
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()
.fantom говорил, что нужен человек фронтендер, который исправит вывод "активных в текущий момент". Вы не могли бы взяться?UP Тему наконец-то.
Решил взять отдых себе от фриланса и выполнил все заказы...
Появилось свободное время и пора взяться за что-то.
Видал, что нужен хоть какой-то шаблон для GM-X и решить какие-то траблы надо.
Благодарю.MyCs, В ближайшее время посмотрю и отпишу сюда же.
можно спросить, а что насчет фикса багов гмх?Пометка №1:
Описание: Разработка текстового/графического варианта GCMS
- Расписать ТЗ и продумать структура GCMS
- Создать примерный графический вариант GCMS
- Расписать структуру BD
Документация по поддержке WEB-Технологий(Опираться на пункт 1.)
Упрешся в то же, во что и другие погроммисты по типу тех, кто делал ubans - кривую структуру бд и плугины для работы с вебчастью.вложиться в разработку своей панели.